'=========================================================================== ' Subject: PRETTY GOOD ENCRYPTION Date: 03-10-00 (13:16) ' Author: Randall L. Glass Code: PB ' Origin: rlglass@yahoo.com Packet: PB.ABC '=========================================================================== '--------------------------------------------------------------------------- ' Pretty Good Encryption ' ' By Randall L Glass ' Copyright 2000 ' ' Permission is given to use Pretty Good Encryption in any way you want ' as long as you give me credit somewhere in your program or documentation. '--------------------------------------------------------------------------- ' ' After studing about encryption I have come to the conclusion that most ' inventors of encryption programs really don't know what they are doing. ' ' They make such complicated programs. My feeling is when people make ' something so complicated is they don't really understand the subject. ' ' ' I have taken the simple theory of encryption and created Pretty Good ' Encryption. ' ' The encryption goal is to create an random output from an plain text. ' ' Encryption can do this in two ways. Scrambling the position of letters in ' a plain text; thus removing the horizontal pattern of the letters. ' ' Example the word "program" becomes "rpmargo". ' ' The second way is to substitute one letter for another. ' ' Example the word "program " becomes "qsphsbn" ' ' Each one of these leaves some pattern. ' ' But when you combine them it gets rid of most of the pattern from the ' plain text. ' ' The trick is to figure an way that produces an random like output. ' ' Pretty Good Encryption does this by using the RC4 encryption algorithim. ' ' RC4 produces almost completely an random output. Some think that NSA ' can break RC4. But it is secure enought for our purpose. ' ' ' Pretty Good Encryption starts out by choosing random numbers for an ' Initialization Vector. ' ' It then encrypts the IV producing a Feedback String.[32 byte block] ' ' Pretty Good Encryption then XOR'S the Feedback String with the Plain Text ' block.[32 byte block] Thus even if the snoop had choosen an Plain Text; ' their Plain Text just got encrypted. It won't do him any good. ' ' The Plain Text block is then scrambled bit wise. Example "1011" becomes ' "1110". This scrambling gets rid of any pattern producing an random like ' output. ' ' Then we use RC4 to substitute one number for an other by XORing an random ' number output with a number produced by the previous scrambling. ' ' RC4 is okay to use because it is encrypting an random like pattern. ' Thus making it about impossible to decrypt with out the key. ' ' The Encrypted string block[32 bytes] then becomes then new Feedback String. ' ' After the Plain Text is encrypted, the IV is then attached to the beggining ' of the encrypted text. ' ' You might think that we should of encrypted the IV before attaching It to ' the encrypted string; BUT that would have SERVERLY WEAKEN the security of ' the encrypted string ! ' ' We do not want anyone to know what the inital Feedback String is. ' ' By using an different Initialization Vector each time, you can use the same ' key over and over again and still be secure. ' ' RC4 is idea for Pretty Good Encryption because in initializing for RC4 we ' also produce an bit array scramble key to determine how we scramble ' the bits. ' ' You should always use an key length of 256 bytes for maxium security. ' ' Pretty Good Encryption block size is 256 bits. There are 8.57 * 10^506 ' different possibilities in scambling these bits. ' ' With an full key size of 256 bytes, assumming that NSA could use a computer ' that can try one trillion keys per second,it would take 2.72 * 10^487 years ' to break. In other words the sun would burn out before they could break it. ' ' Thus this program is probably better than or equal to the military ' encryption programs. ' '---------------------------------------------------------------------------- $CPU 80386 DEFINT A-Z DECLARE FUNCTION GetStrLoc(BYVAL AllocHandle%) AS LONG CLS DIM Rc4Key%(255),FeedBack AS SHARED STRING * 32 SHARED RI?,RJ?,SblockPtr32???,ScambleBlockPtr32??? SHARED Rc4Key%() SblockPtr32??? = CODEPTR32(SBLOCK) ScambleBlockPtr32??? = CODEPTR32(ScambleBlock) RANDOMIZE TIMER FLEXCHR$ = CHR$(0) CodeKey$ = "TEST KEY" ' Set key ' should be 256 bytes long CLS ' for the maxium security InitKey CodeKey$ Rc4Init 'Initialize the key schedule PlainText$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" Encrypt PlainText$,CipherText$ 'Encrypt the string Rc4Init 're-Initialize the key Decrypt CipherText$,PlainText$ 'Decrypt the string END SUB Encrypt(PlainText AS STRING,CipherText AS STRING) STATIC InitFlag% AddPadding% = 0 IF InitFlag% = 0 THEN IV$ = RndIV$ EncryptedIV$ = STRING$(32,0) EncodeString IV$,EncryptedIV$,0 LSET FeedBack$ = EncryptedIV$ END IF PlainTextLen% = LEN(PlainText$) ExtraLetters% = PlainTextLen% MOD 32 IF ExtraLetters% THEN AddPadding% = 32 - ExtraLetters% PlainText$ = PlainText$ + STRING$(AddPadding%,0) INCR PlainTextLen%,AddPadding% END IF CipherText$ = STRING$(PlainTextLen% + AddPadding%,CHR$(0)) Strings% = PlainTextLen%\32 FOR I% = 0 TO Strings% -1 XorStr PlainText$, FeedBack$, I% EncodeString PlainText$,CipherText$,I% LSET FeedBack$ = MID$(CipherText$,I% * 32 + 1,32) NEXT I% IF InitFlag% = 0 THEN CipherText$ = IV$ + CipherText$ InitFlag% = 1 END IF END SUB FUNCTION Decrypt$(CipherText$,PlainText$) DIM Temp AS STRING * 32 STATIC InitFlag% StartString% = 0 IF InitFlag% = 0 THEN IV$ = LEFT$(CipherText$,32) EncryptedIV$ = STRING$(32,0) EncodeString IV$,EncryptedIV$,0 LSET FeedBack$ = EncryptedIV$ StartString% = 1 END IF CipherLen% = LEN(CipherText$) PlainText$ = STRING$(CipherLen%,CHR$(0)) Strings% = CipherLen%\32 FOR I% = StartString% TO Strings% -1 LSET Temp$ = MID$(CipherText$,I% * 32 + 1,32) DecodeString CipherText$,PlainText$,I% XorStr Plaintext$,FeedBack$,I% LSET FeedBack$ = Temp$ NEXT I% IF InitFlag% = 0 THEN PlainText$ = MID$(PlainText$,33) InitFlag% = 1 END IF PlainText$ = RTRIM$(PlainText$,CHR$(0)) END FUNCTION FUNCTION RndIV$ PRINT "Enter the word Secret And press enter" DO DO ky$ = inkey$ RndNum&& = RND(1,1000000000000) LOOP UNTIL Ky$ <> "" PRINT Ky$; RANDOMIZE RndNum&& LOOP UNTIL ky$ = CHR$(13) FOR I% = 1 TO 32 Temp$ = Temp$ + CHR$(RND(0,255)) NEXT I% RndIV$ = Temp$ END FUNCTION SUB XorStr(Str1 AS STRING ,Str2 AS STRING * 32,BYVAL Index%) ! LES BX, Str1$ ! MOV AX,ES:[BX] ! PUSH AX ! CALL GetStrLoc ; find where the data is located ! MOV ES, DX ; put segment in ES ! MOV DI, AX ; put offset in DI ! MOV AX,Index% ! MOV CL,5 ;Multiply AX by 32 ! SHL AX,CL ! ADD DI,AX ;adjust address ! PUSH DS ! LDS SI,Str2$ ! MOV CX,8 XorLoop2: ! DB &H66 ;LODSD ! DB &HAD ! DB &H66 ;XOR ES:[DI],EAX ! DB &H26 ! DB &H31 ! DB &H05 ! ADD DI,4 ! LOOP XorLoop2 ! POP DS END SUB SUB Rc4Init() RI? = 0:RJ? = 0 ! MOV BX,0 ;BL = I ! MOV CX,256 InitSBlock: ! MOV SBLOCK?[BX],BL ;SBlock?(I) = I ! INC BL ! LOOP InitSBlock ! MOV BX,0 ;BX = J ! MOV DI,0 ;DI = I ! MOV CX,256 InitSblock2: ! ADD BL,SBlock?[DI] ! ADD BL,KeyBlock?[DI] ! MOV AL,SBlock[BX] ! MOV AH,SBLOCK[DI] ! MOV SBlock[BX],AH ! MOV SBLOCK[DI],AL ! INC DI ! LOOP InitSblock2 ! LES DI,ScambleBlockPtr32??? ! PUSH DS ! LDS SI,SBlockPtr32??? ! CLD ! MOV CX, 64 ! DB &HF3 ; REP MOVSD ! DB &H66 ! DB &HA5 ! POP DS END SUB SUB InitKey(CodeKey$) DIM StringStart AS WORD ! LES BX, CodeKey$ ! MOV AX,ES:[BX] ! PUSH AX ! CALL GetStrLoc ; find where the data is located ! MOV ES, DX ; put segment in ES ! MOV DI, AX ; put offset in DI ! MOV StringStart??,DI ! DEC StringStart?? ! MOV SI,DI ! ADD SI,CX ;SI = end of CodeKey$ ! DEC SI ! MOV CX,256 ! MOV BX,0 InitKeyStr: ! MOV AL,ES:[DI] ! MOV KeyBlock?[BX],AL ! CMP DI,SI ! JNE Skip ! MOV DI,StringStart?? Skip: ! INC BX ! INC DI ! LOOP InitKeyStr END SUB SUB EncodeString(PText$,CText$,BYVAL Index%) LOCAL PTextSeg??,PTextOff??,CTextSeg??,CTextOff?? ! LES DI,PText$ ! MOV AX,ES:[DI] ! PUSH AX ! CALL GetStrLoc ; find where the data is located ! MOV ES, DX ; put segment in ES ! MOV DI, AX ; put offset in DI ! MOV BX,Index% ! MOV CL,5 ;Multiply AX by 32 ! SHL BX,CL ! ADD DI,BX ;adjust address ! PUSH DS ! LDS SI,CText$ ! MOV AX,[SI] ! PUSH AX ! CALL GetStrLoc ; find where the data is located ! MOV DS, DX ; put segment in DS ! MOV SI, AX ; put offset in SI ! ADD SI, BX ! PUSH DS ! PUSH SI ! MOV DX,0 ! MOV BX,0 ! CLC SwapBits: ! DB &H26 ; BT ES:[DI],BX ! DB &H0F ; Get bit array value ! DB &HA3 ! DB &H1D ! JNC LoopAgain ! MOV DL,ScambleBlock?[BX] ; if bit array value is set then set scambled bit ! DB &H0F ; Bts DS:[SI],DX ! DB &HAB ! DB &H14 LoopAgain: ! INC BX ! CMP BX,256 ! Jb SwapBits ! POP DI ! POP ES ! POP DS ! MOV CX,32 EncodeIt: ' use RC4 to encrypt block ! PUSH DI ! CALL RC4K ! POP DI ! XOR ES:[DI],AL ! INC DI ! LOOP EncodeIt EXIT SUB Rc4K: ! MOV AX,RI? ! INC AL ! MOV RI?,AX ! MOV DI,AX ! MOV DX,RJ? ! ADD DL,SBLOCK?[DI] ! MOV SI,DX ! MOV RJ? ,DX ! MOV BL,SBLOCK?[DI] ! MOV BH,SBLOCK?[SI] ! MOV SBLOCK?[DI],BH ! MOV SBLOCK?[SI],BL ! ADD BL,BH ! MOV BH,0 ! MOV AL,SBLOCK?[BX] ! RETN END SUB SUB DecodeString(CText$,PText$,BYVAL Index%) LOCAL PTextSeg??,PTextOff??,CTextSeg??,CTextOff?? ! LES DI,CText$ ! MOV AX,ES:[DI] ! PUSH AX ! CALL GetStrLoc ; find where the data is located ! MOV ES, DX ; put segment in ES ! MOV DI, AX ; put offset in DI ! MOV BX,Index% ! MOV CL,5 ;Multiply Index% by 32 ! SHL BX,CL ! ADD DI,BX ;adjust address ! PUSH BX ! PUSH DI ! MOV CX,32 DecodeIt: ' decode using RC4 ! PUSH DI ! CALL RC4K ! POP DI ! XOR ES:[DI],AL ! INC DI ! LOOP DecodeIt ! POP DI ! POP BX ! PUSH DS ! LDS SI,PText$ ! MOV AX,[SI] ! PUSH AX ! CALL GetStrLoc ; find where the data is located ! MOV DS, DX ; put segment in DS ! MOV SI,AX ! ADD SI, BX ! MOV DX,0 ! MOV BX,0 ! CLC SwapBits2: ' unscrambled bits ! MOV DL,ScambleBlock?[BX] ! DB &H26 ;BT ES:[DI],DX ! DB &H0F ; get bit value of scrambled block ! DB &HA3 ! DB &H15 ! JNC LoopAgain2 ! DB &H0F ;Bts DS:[SI],BX ! DB &HAB ; unscramble bit ! DB &H1C LoopAgain2: ! INC BX ! CMP BX,256 ! Jb SwapBits2 ! POP DS END SUB SBlock: ! DB 0 ! DB 1 ! DB 2 ! DB 3 ! DB 4 ! DB 5 ! DB 6 ! DB 7 ! DB 8 ! DB 9 ! DB 10 ! DB 11 ! DB 12 ! DB 13 ! DB 14 ! DB 15 ! DB 16 ! DB 17 ! DB 18 ! DB 19 ! DB 20 ! DB 21 ! DB 22 ! DB 23 ! DB 24 ! DB 25 ! DB 26 ! DB 27 ! DB 28 ! DB 29 ! DB 30 ! DB 31 ! DB 32 ! DB 33 ! DB 34 ! DB 35 ! DB 36 ! DB 37 ! DB 38 ! DB 39 ! DB 40 ! DB 41 ! DB 42 ! DB 43 ! DB 44 ! DB 45 ! DB 46 ! DB 47 ! DB 48 ! DB 49 ! DB 50 ! DB 51 ! DB 52 ! DB 53 ! DB 54 ! DB 55 ! DB 56 ! DB 57 ! DB 58 ! DB 59 ! DB 60 ! DB 61 ! DB 62 ! DB 63 ! DB 64 ! DB 65 ! DB 66 ! DB 67 ! DB 68 ! DB 69 ! DB 70 ! DB 71 ! DB 72 ! DB 73 ! DB 74 ! DB 75 ! DB 76 ! DB 77 ! DB 78 ! DB 79 ! DB 80 ! DB 81 ! DB 82 ! DB 83 ! DB 84 ! DB 85 ! DB 86 ! DB 87 ! DB 88 ! DB 89 ! DB 90 ! DB 91 ! DB 92 ! DB 93 ! DB 94 ! DB 95 ! DB 96 ! DB 97 ! DB 98 ! DB 99 ! DB 100 ! DB 101 ! DB 102 ! DB 103 ! DB 104 ! DB 105 ! DB 106 ! DB 107 ! DB 108 ! DB 109 ! DB 110 ! DB 111 ! DB 112 ! DB 113 ! DB 114 ! DB 115 ! DB 116 ! DB 117 ! DB 118 ! DB 119 ! DB 120 ! DB 121 ! DB 122 ! DB 123 ! DB 124 ! DB 125 ! DB 126 ! DB 127 ! DB 128 ! DB 129 ! DB 130 ! DB 131 ! DB 132 ! DB 133 ! DB 134 ! DB 135 ! DB 136 ! DB 137 ! DB 138 ! DB 139 ! DB 140 ! DB 141 ! DB 142 ! DB 143 ! DB 144 ! DB 145 ! DB 146 ! DB 147 ! DB 148 ! DB 149 ! DB 150 ! DB 151 ! DB 152 ! DB 153 ! DB 154 ! DB 155 ! DB 156 ! DB 157 ! DB 158 ! DB 159 ! DB 160 ! DB 161 ! DB 162 ! DB 163 ! DB 164 ! DB 165 ! DB 166 ! DB 167 ! DB 168 ! DB 169 ! DB 170 ! DB 171 ! DB 172 ! DB 173 ! DB 174 ! DB 175 ! DB 176 ! DB 177 ! DB 178 ! DB 179 ! DB 180 ! DB 181 ! DB 182 ! DB 183 ! DB 184 ! DB 185 ! DB 186 ! DB 187 ! DB 188 ! DB 189 ! DB 190 ! DB 191 ! DB 192 ! DB 193 ! DB 194 ! DB 195 ! DB 196 ! DB 197 ! DB 198 ! DB 199 ! DB 200 ! DB 201 ! DB 202 ! DB 203 ! DB 204 ! DB 205 ! DB 206 ! DB 207 ! DB 208 ! DB 209 ! DB 210 ! DB 211 ! DB 212 ! DB 213 ! DB 214 ! DB 215 ! DB 216 ! DB 217 ! DB 218 ! DB 219 ! DB 220 ! DB 221 ! DB 222 ! DB 223 ! DB 224 ! DB 225 ! DB 226 ! DB 227 ! DB 228 ! DB 229 ! DB 230 ! DB 231 ! DB 232 ! DB 233 ! DB 234 ! DB 235 ! DB 236 ! DB 237 ! DB 238 ! DB 239 ! DB 240 ! DB 241 ! DB 242 ! DB 243 ! DB 244 ! DB 245 ! DB 246 ! DB 247 ! DB 248 ! DB 249 ! DB 250 ! DB 251 ! DB 252 ! DB 253 ! DB 254 ! DB 255 KeyBlock: ! DB 0 ! DB 1 ! DB 2 ! DB 3 ! DB 4 ! DB 5 ! DB 6 ! DB 7 ! DB 8 ! DB 9 ! DB 10 ! DB 11 ! DB 12 ! DB 13 ! DB 14 ! DB 15 ! DB 16 ! DB 17 ! DB 18 ! DB 19 ! DB 20 ! DB 21 ! DB 22 ! DB 23 ! DB 24 ! DB 25 ! DB 26 ! DB 27 ! DB 28 ! DB 29 ! DB 30 ! DB 31 ! DB 32 ! DB 33 ! DB 34 ! DB 35 ! DB 36 ! DB 37 ! DB 38 ! DB 39 ! DB 40 ! DB 41 ! DB 42 ! DB 43 ! DB 44 ! DB 45 ! DB 46 ! DB 47 ! DB 48 ! DB 49 ! DB 50 ! DB 51 ! DB 52 ! DB 53 ! DB 54 ! DB 55 ! DB 56 ! DB 57 ! DB 58 ! DB 59 ! DB 60 ! DB 61 ! DB 62 ! DB 63 ! DB 64 ! DB 65 ! DB 66 ! DB 67 ! DB 68 ! DB 69 ! DB 70 ! DB 71 ! DB 72 ! DB 73 ! DB 74 ! DB 75 ! DB 76 ! DB 77 ! DB 78 ! DB 79 ! DB 80 ! DB 81 ! DB 82 ! DB 83 ! DB 84 ! DB 85 ! DB 86 ! DB 87 ! DB 88 ! DB 89 ! DB 90 ! DB 91 ! DB 92 ! DB 93 ! DB 94 ! DB 95 ! DB 96 ! DB 97 ! DB 98 ! DB 99 ! DB 100 ! DB 101 ! DB 102 ! DB 103 ! DB 104 ! DB 105 ! DB 106 ! DB 107 ! DB 108 ! DB 109 ! DB 110 ! DB 111 ! DB 112 ! DB 113 ! DB 114 ! DB 115 ! DB 116 ! DB 117 ! DB 118 ! DB 119 ! DB 120 ! DB 121 ! DB 122 ! DB 123 ! DB 124 ! DB 125 ! DB 126 ! DB 127 ! DB 128 ! DB 129 ! DB 130 ! DB 131 ! DB 132 ! DB 133 ! DB 134 ! DB 135 ! DB 136 ! DB 137 ! DB 138 ! DB 139 ! DB 140 ! DB 141 ! DB 142 ! DB 143 ! DB 144 ! DB 145 ! DB 146 ! DB 147 ! DB 148 ! DB 149 ! DB 150 ! DB 151 ! DB 152 ! DB 153 ! DB 154 ! DB 155 ! DB 156 ! DB 157 ! DB 158 ! DB 159 ! DB 160 ! DB 161 ! DB 162 ! DB 163 ! DB 164 ! DB 165 ! DB 166 ! DB 167 ! DB 168 ! DB 169 ! DB 170 ! DB 171 ! DB 172 ! DB 173 ! DB 174 ! DB 175 ! DB 176 ! DB 177 ! DB 178 ! DB 179 ! DB 180 ! DB 181 ! DB 182 ! DB 183 ! DB 184 ! DB 185 ! DB 186 ! DB 187 ! DB 188 ! DB 189 ! DB 190 ! DB 191 ! DB 192 ! DB 193 ! DB 194 ! DB 195 ! DB 196 ! DB 197 ! DB 198 ! DB 199 ! DB 200 ! DB 201 ! DB 202 ! DB 203 ! DB 204 ! DB 205 ! DB 206 ! DB 207 ! DB 208 ! DB 209 ! DB 210 ! DB 211 ! DB 212 ! DB 213 ! DB 214 ! DB 215 ! DB 216 ! DB 217 ! DB 218 ! DB 219 ! DB 220 ! DB 221 ! DB 222 ! DB 223 ! DB 224 ! DB 225 ! DB 226 ! DB 227 ! DB 228 ! DB 229 ! DB 230 ! DB 231 ! DB 232 ! DB 233 ! DB 234 ! DB 235 ! DB 236 ! DB 237 ! DB 238 ! DB 239 ! DB 240 ! DB 241 ! DB 242 ! DB 243 ! DB 244 ! DB 245 ! DB 246 ! DB 247 ! DB 248 ! DB 249 ! DB 250 ! DB 251 ! DB 252 ! DB 253 ! DB 254 ! DB 255 ScambleBlock: ! DB 0 ! DB 1 ! DB 2 ! DB 3 ! DB 4 ! DB 5 ! DB 6 ! DB 7 ! DB 8 ! DB 9 ! DB 10 ! DB 11 ! DB 12 ! DB 13 ! DB 14 ! DB 15 ! DB 16 ! DB 17 ! DB 18 ! DB 19 ! DB 20 ! DB 21 ! DB 22 ! DB 23 ! DB 24 ! DB 25 ! DB 26 ! DB 27 ! DB 28 ! DB 29 ! DB 30 ! DB 31 ! DB 32 ! DB 33 ! DB 34 ! DB 35 ! DB 36 ! DB 37 ! DB 38 ! DB 39 ! DB 40 ! DB 41 ! DB 42 ! DB 43 ! DB 44 ! DB 45 ! DB 46 ! DB 47 ! DB 48 ! DB 49 ! DB 50 ! DB 51 ! DB 52 ! DB 53 ! DB 54 ! DB 55 ! DB 56 ! DB 57 ! DB 58 ! DB 59 ! DB 60 ! DB 61 ! DB 62 ! DB 63 ! DB 64 ! DB 65 ! DB 66 ! DB 67 ! DB 68 ! DB 69 ! DB 70 ! DB 71 ! DB 72 ! DB 73 ! DB 74 ! DB 75 ! DB 76 ! DB 77 ! DB 78 ! DB 79 ! DB 80 ! DB 81 ! DB 82 ! DB 83 ! DB 84 ! DB 85 ! DB 86 ! DB 87 ! DB 88 ! DB 89 ! DB 90 ! DB 91 ! DB 92 ! DB 93 ! DB 94 ! DB 95 ! DB 96 ! DB 97 ! DB 98 ! DB 99 ! DB 100 ! DB 101 ! DB 102 ! DB 103 ! DB 104 ! DB 105 ! DB 106 ! DB 107 ! DB 108 ! DB 109 ! DB 110 ! DB 111 ! DB 112 ! DB 113 ! DB 114 ! DB 115 ! DB 116 ! DB 117 ! DB 118 ! DB 119 ! DB 120 ! DB 121 ! DB 122 ! DB 123 ! DB 124 ! DB 125 ! DB 126 ! DB 127 ! DB 128 ! DB 129 ! DB 130 ! DB 131 ! DB 132 ! DB 133 ! DB 134 ! DB 135 ! DB 136 ! DB 137 ! DB 138 ! DB 139 ! DB 140 ! DB 141 ! DB 142 ! DB 143 ! DB 144 ! DB 145 ! DB 146 ! DB 147 ! DB 148 ! DB 149 ! DB 150 ! DB 151 ! DB 152 ! DB 153 ! DB 154 ! DB 155 ! DB 156 ! DB 157 ! DB 158 ! DB 159 ! DB 160 ! DB 161 ! DB 162 ! DB 163 ! DB 164 ! DB 165 ! DB 166 ! DB 167 ! DB 168 ! DB 169 ! DB 170 ! DB 171 ! DB 172 ! DB 173 ! DB 174 ! DB 175 ! DB 176 ! DB 177 ! DB 178 ! DB 179 ! DB 180 ! DB 181 ! DB 182 ! DB 183 ! DB 184 ! DB 185 ! DB 186 ! DB 187 ! DB 188 ! DB 189 ! DB 190 ! DB 191 ! DB 192 ! DB 193 ! DB 194 ! DB 195 ! DB 196 ! DB 197 ! DB 198 ! DB 199 ! DB 200 ! DB 201 ! DB 202 ! DB 203 ! DB 204 ! DB 205 ! DB 206 ! DB 207 ! DB 208 ! DB 209 ! DB 210 ! DB 211 ! DB 212 ! DB 213 ! DB 214 ! DB 215 ! DB 216 ! DB 217 ! DB 218 ! DB 219 ! DB 220 ! DB 221 ! DB 222 ! DB 223 ! DB 224 ! DB 225 ! DB 226 ! DB 227 ! DB 228 ! DB 229 ! DB 230 ! DB 231 ! DB 232 ! DB 233 ! DB 234 ! DB 235 ! DB 236 ! DB 237 ! DB 238 ! DB 239 ! DB 240 ! DB 241 ! DB 242 ! DB 243 ! DB 244 ! DB 245 ! DB 246 ! DB 247 ! DB 248 ! DB 249 ! DB 250 ! DB 251 ! DB 252 ! DB 253 ! DB 254 ! DB 255