Page 1 of 1

Need PureBasic-Blowfish-code for Linux

Posted: Wed Nov 23, 2005 8:15 am
by Kukulkan
Hi,

I have to convert a windows-based PB-program to linux. The only problem seem to be the use of dicryptosys.dll for Blowfish encryption.

Is there any blowfish-code available for PB?

Or any library that works on linux for this?

I only encrypt and decrypt short strings with a maximum length of 1KB. So, the speed is not the critical part.

Kukulkan

Posted: Fri Nov 25, 2005 3:23 pm
by Hatonastick
I could drag out my old PureCrypt library, cut out everything except for Blowfish, make it compilable for Linux/*NIX if you like. That's if you haven't found another solution yet. Hmm either that or get LibTomCrypt and compile it under Linux (which it will do) and access it directly.

Actually heres the Blowfish.c file and the Blowfish.h file if someone wants to translate it into PureBASIC. I'm out of practice myself so don't think I could do it. I'm sure it's possible though.
///////////////////////////////////////////////////////////////////////////////
// PureCrypt v1.0a //
///////////////////////////////////////////////////////////////////////////////
// Blowfish cipher routines. //
///////////////////////////////////////////////////////////////////////////////

// Endian specific macros - converting to a big endian machine would need to be
// done here
#include "System.h"
// Bits and pieces relevant for the functions below
#include "Blowfish.h"
// Mostly just needed for the HeapAlloc() function
#include <windows.h>

// The PB memory heap handle
extern int *PB_MemoryBase;

// PureCrypt API //////////////////////////////////////////////////////////////

// These are probably leaking memory like a sieve due to the fact that they return
// a new block of allocated memory each time they are called. Might have to somehow
// check to see if heap has been allocated and free it before creating a new one.
// Maybe handle it a bit like strok(). ie.

// Blowfish encode 8 bytes
PBCHAR PB_BlowfishEncode(uchar8 *password, ulong32 length, uchar8 *buffer, int rounds)
{
BLOWFISH key;
char *result = NULL;

// Setup the number of rounds
switch (rounds) {
case 0:
rounds = 0;
case 1:
rounds = 16;
default:
rounds = 0;
}

// Have we got input?
if (buffer && *buffer && password && *password && length > 0) {
if (blowfish_setup(password, length, rounds, &key) != TRUE) {
return result;
}
// Allocate memory within the PB heap
result = HeapAlloc(PB_MemoryBase, HEAP_ZERO_MEMORY, 8);
if (blowfish_ecb_encrypt(buffer, (unsigned char *)result, &key) != TRUE) {
// Free the allocated memory
HeapFree(PB_MemoryBase, 0, result);
result = NULL;
return result;
}
}

return result;
}

// Blowfish decode 8 bytes
PBCHAR PB_BlowfishDecode(uchar8 *password, ulong32 length, uchar8 *buffer, int rounds)
{
BLOWFISH key;
char *result = NULL;

// Setup the number of rounds
switch (rounds) {
case 0:
rounds = 0;
case 1:
rounds = 16;
default:
rounds = 0;
}

// Have we got input?
if (buffer && *buffer && password && *password && length > 0) {
if (blowfish_setup(password, length, rounds, &key) != TRUE) {
return result;
}
// Allocate memory within the PB heap
result = HeapAlloc(PB_MemoryBase, HEAP_ZERO_MEMORY, 8);
if (blowfish_ecb_decrypt(buffer, (unsigned char *)result, &key) != TRUE) {
// Free the allocated memory
HeapFree(PB_MemoryBase, 0, result);
result = NULL;
return result;
}
}

return result;
}

// Blowfish ///////////////////////////////////////////////////////////////////

int blowfish_setup(uchar8 *key, int keylen, int num_rounds, BLOWFISH *skey)
{
ulong32 x, y, z, A;
uchar8 B[8];

if (key == NULL || skey == NULL)
return FALSE;

/* check key length */
if (keylen < 8 || keylen > 56) {
return FALSE;
}

/* check rounds */
if (num_rounds != 0 && num_rounds != 16) {
return FALSE;
}

/* load in key bytes (Supplied by David Hopwood) */
for (x = y = 0; x < 18; x++) {
A = 0;
for (z = 0; z < 4; z++) {
A = (A << 8) | ((ulong32)key[y++] & 255);
if (y == (ulong32)keylen) {
y = 0;
}
}
skey->K[x] = ORIG_P[x] ^ A;
}

/* copy sboxes */
for (x = 0; x < 4; x++) {
for (y = 0; y < 256; y++) {
skey->S[x][y] = ORIG_S[x][y];
}
}

/* encrypt K array */
for (x = 0; x < 8; x++) {
B[x] = 0;
}

for (x = 0; x < 18; x += 2) {
/* encrypt it */
blowfish_ecb_encrypt(B, B, skey);
/* copy it */
LOAD32H(skey->K[x], &B[0]);
LOAD32H(skey->K[x+1], &B[4]);
}

/* encrypt S array */
for (x = 0; x < 4; x++) {
for (y = 0; y < 256; y += 2) {
/* encrypt it */
blowfish_ecb_encrypt(B, B, skey);
/* copy it */
LOAD32H(skey->S[x][y], &B[0]);
LOAD32H(skey->S[x][y+1], &B[4]);
}
}

return TRUE;
}

#ifdef S1
#undef S1
#endif
#define S1 skey->S[0]
#ifdef S2
#undef S2
#endif
#define S2 skey->S[1]
#ifdef S3
#undef S3
#endif
#define S3 skey->S[2]
#ifdef S4
#undef S4
#endif
#define S4 skey->S[3]

#ifdef F
#undef F
#endif
#define F(x) ((S1[byte(x,3)] + S2[byte(x,2)]) ^ S3[byte(x,1)]) + S4[byte(x,0)]

int blowfish_ecb_encrypt(uchar8 *pt, uchar8 *ct, BLOWFISH *skey)
{
ulong32 L, R;
int r;

if (pt == NULL || ct == NULL || skey == NULL)
return FALSE;

/* load it */
LOAD32H(L, &pt[0]);
LOAD32H(R, &pt[4]);

/* do 16 rounds */
for (r = 0; r < 16; ) {
L ^= skey->K[r++]; R ^= F(L);
R ^= skey->K[r++]; L ^= F(R);
L ^= skey->K[r++]; R ^= F(L);
R ^= skey->K[r++]; L ^= F(R);
}

/* last keying */
R ^= skey->K[17];
L ^= skey->K[16];

/* store */
STORE32H(R, &ct[0]);
STORE32H(L, &ct[4]);

return TRUE;
}

int blowfish_ecb_decrypt(uchar8 *ct, uchar8 *pt, BLOWFISH *skey)
{
ulong32 L, R;
int r;

if (pt == NULL || ct == NULL || skey == NULL)
return FALSE;

/* load it */
LOAD32H(R, &ct[0]);
LOAD32H(L, &ct[4]);

/* undo last keying */
R ^= skey->K[17];
L ^= skey->K[16];

/* do 16 rounds */
for (r = 15; r > 0; ) {
L ^= F(R); R ^= skey->K[r--];
R ^= F(L); L ^= skey->K[r--];
L ^= F(R); R ^= skey->K[r--];
R ^= F(L); L ^= skey->K[r--];
}

/* store */
STORE32H(L, &pt[0]);
STORE32H(R, &pt[4]);

return TRUE;
}
///////////////////////////////////////////////////////////////////////////////
// PureCrypt v1.0a //
///////////////////////////////////////////////////////////////////////////////
// Contains library defines, macros, structures etc. //
///////////////////////////////////////////////////////////////////////////////

// Blowfish ///////////////////////////////////////////////////////////////////

typedef struct blowfish {
ulong32 S[4][256];
ulong32 K[18];
} BLOWFISH;

int blowfish_setup(uchar8 *key, int keylen, int num_rounds, BLOWFISH *skey);
int blowfish_ecb_encrypt(uchar8 *pt, uchar8 *ct, BLOWFISH *skey);
int blowfish_ecb_decrypt(uchar8 *ct, uchar8 *pt, BLOWFISH *skey);

// Table data /////////////////////////////////////////////////////////////////

static const ulong32 ORIG_P[16 + 2] = {
0x243F6A88UL, 0x85A308D3UL, 0x13198A2EUL, 0x03707344UL,
0xA4093822UL, 0x299F31D0UL, 0x082EFA98UL, 0xEC4E6C89UL,
0x452821E6UL, 0x38D01377UL, 0xBE5466CFUL, 0x34E90C6CUL,
0xC0AC29B7UL, 0xC97C50DDUL, 0x3F84D5B5UL, 0xB5470917UL,
0x9216D5D9UL, 0x8979FB1BUL
};

static const ulong32 ORIG_S[4][256] = {
{ 0xD1310BA6UL, 0x98DFB5ACUL, 0x2FFD72DBUL, 0xD01ADFB7UL,
0xB8E1AFEDUL, 0x6A267E96UL, 0xBA7C9045UL, 0xF12C7F99UL,
0x24A19947UL, 0xB3916CF7UL, 0x0801F2E2UL, 0x858EFC16UL,
0x636920D8UL, 0x71574E69UL, 0xA458FEA3UL, 0xF4933D7EUL,
0x0D95748FUL, 0x728EB658UL, 0x718BCD58UL, 0x82154AEEUL,
0x7B54A41DUL, 0xC25A59B5UL, 0x9C30D539UL, 0x2AF26013UL,
0xC5D1B023UL, 0x286085F0UL, 0xCA417918UL, 0xB8DB38EFUL,
0x8E79DCB0UL, 0x603A180EUL, 0x6C9E0E8BUL, 0xB01E8A3EUL,
0xD71577C1UL, 0xBD314B27UL, 0x78AF2FDAUL, 0x55605C60UL,
0xE65525F3UL, 0xAA55AB94UL, 0x57489862UL, 0x63E81440UL,
0x55CA396AUL, 0x2AAB10B6UL, 0xB4CC5C34UL, 0x1141E8CEUL,
0xA15486AFUL, 0x7C72E993UL, 0xB3EE1411UL, 0x636FBC2AUL,
0x2BA9C55DUL, 0x741831F6UL, 0xCE5C3E16UL, 0x9B87931EUL,
0xAFD6BA33UL, 0x6C24CF5CUL, 0x7A325381UL, 0x28958677UL,
0x3B8F4898UL, 0x6B4BB9AFUL, 0xC4BFE81BUL, 0x66282193UL,
0x61D809CCUL, 0xFB21A991UL, 0x487CAC60UL, 0x5DEC8032UL,
0xEF845D5DUL, 0xE98575B1UL, 0xDC262302UL, 0xEB651B88UL,
0x23893E81UL, 0xD396ACC5UL, 0x0F6D6FF3UL, 0x83F44239UL,
0x2E0B4482UL, 0xA4842004UL, 0x69C8F04AUL, 0x9E1F9B5EUL,
0x21C66842UL, 0xF6E96C9AUL, 0x670C9C61UL, 0xABD388F0UL,
0x6A51A0D2UL, 0xD8542F68UL, 0x960FA728UL, 0xAB5133A3UL,
0x6EEF0B6CUL, 0x137A3BE4UL, 0xBA3BF050UL, 0x7EFB2A98UL,
0xA1F1651DUL, 0x39AF0176UL, 0x66CA593EUL, 0x82430E88UL,
0x8CEE8619UL, 0x456F9FB4UL, 0x7D84A5C3UL, 0x3B8B5EBEUL,
0xE06F75D8UL, 0x85C12073UL, 0x401A449FUL, 0x56C16AA6UL,
0x4ED3AA62UL, 0x363F7706UL, 0x1BFEDF72UL, 0x429B023DUL,
0x37D0D724UL, 0xD00A1248UL, 0xDB0FEAD3UL, 0x49F1C09BUL,
0x075372C9UL, 0x80991B7BUL, 0x25D479D8UL, 0xF6E8DEF7UL,
0xE3FE501AUL, 0xB6794C3BUL, 0x976CE0BDUL, 0x04C006BAUL,
0xC1A94FB6UL, 0x409F60C4UL, 0x5E5C9EC2UL, 0x196A2463UL,
0x68FB6FAFUL, 0x3E6C53B5UL, 0x1339B2EBUL, 0x3B52EC6FUL,
0x6DFC511FUL, 0x9B30952CUL, 0xCC814544UL, 0xAF5EBD09UL,
0xBEE3D004UL, 0xDE334AFDUL, 0x660F2807UL, 0x192E4BB3UL,
0xC0CBA857UL, 0x45C8740FUL, 0xD20B5F39UL, 0xB9D3FBDBUL,
0x5579C0BDUL, 0x1A60320AUL, 0xD6A100C6UL, 0x402C7279UL,
0x679F25FEUL, 0xFB1FA3CCUL, 0x8EA5E9F8UL, 0xDB3222F8UL,
0x3C7516DFUL, 0xFD616B15UL, 0x2F501EC8UL, 0xAD0552ABUL,
0x323DB5FAUL, 0xFD238760UL, 0x53317B48UL, 0x3E00DF82UL,
0x9E5C57BBUL, 0xCA6F8CA0UL, 0x1A87562EUL, 0xDF1769DBUL,
0xD542A8F6UL, 0x287EFFC3UL, 0xAC6732C6UL, 0x8C4F5573UL,
0x695B27B0UL, 0xBBCA58C8UL, 0xE1FFA35DUL, 0xB8F011A0UL,
0x10FA3D98UL, 0xFD2183B8UL, 0x4AFCB56CUL, 0x2DD1D35BUL,
0x9A53E479UL, 0xB6F84565UL, 0xD28E49BCUL, 0x4BFB9790UL,
0xE1DDF2DAUL, 0xA4CB7E33UL, 0x62FB1341UL, 0xCEE4C6E8UL,
0xEF20CADAUL, 0x36774C01UL, 0xD07E9EFEUL, 0x2BF11FB4UL,
0x95DBDA4DUL, 0xAE909198UL, 0xEAAD8E71UL, 0x6B93D5A0UL,
0xD08ED1D0UL, 0xAFC725E0UL, 0x8E3C5B2FUL, 0x8E7594B7UL,
0x8FF6E2FBUL, 0xF2122B64UL, 0x8888B812UL, 0x900DF01CUL,
0x4FAD5EA0UL, 0x688FC31CUL, 0xD1CFF191UL, 0xB3A8C1ADUL,
0x2F2F2218UL, 0xBE0E1777UL, 0xEA752DFEUL, 0x8B021FA1UL,
0xE5A0CC0FUL, 0xB56F74E8UL, 0x18ACF3D6UL, 0xCE89E299UL,
0xB4A84FE0UL, 0xFD13E0B7UL, 0x7CC43B81UL, 0xD2ADA8D9UL,
0x165FA266UL, 0x80957705UL, 0x93CC7314UL, 0x211A1477UL,
0xE6AD2065UL, 0x77B5FA86UL, 0xC75442F5UL, 0xFB9D35CFUL,
0xEBCDAF0CUL, 0x7B3E89A0UL, 0xD6411BD3UL, 0xAE1E7E49UL,
0x00250E2DUL, 0x2071B35EUL, 0x226800BBUL, 0x57B8E0AFUL,
0x2464369BUL, 0xF009B91EUL, 0x5563911DUL, 0x59DFA6AAUL,
0x78C14389UL, 0xD95A537FUL, 0x207D5BA2UL, 0x02E5B9C5UL,
0x83260376UL, 0x6295CFA9UL, 0x11C81968UL, 0x4E734A41UL,
0xB3472DCAUL, 0x7B14A94AUL, 0x1B510052UL, 0x9A532915UL,
0xD60F573FUL, 0xBC9BC6E4UL, 0x2B60A476UL, 0x81E67400UL,
0x08BA6FB5UL, 0x571BE91FUL, 0xF296EC6BUL, 0x2A0DD915UL,
0xB6636521UL, 0xE7B9F9B6UL, 0xFF34052EUL, 0xC5855664UL,
0x53B02D5DUL, 0xA99F8FA1UL, 0x08BA4799UL, 0x6E85076AUL },
{ 0x4B7A70E9UL, 0xB5B32944UL, 0xDB75092EUL, 0xC4192623UL,
0xAD6EA6B0UL, 0x49A7DF7DUL, 0x9CEE60B8UL, 0x8FEDB266UL,
0xECAA8C71UL, 0x699A17FFUL, 0x5664526CUL, 0xC2B19EE1UL,
0x193602A5UL, 0x75094C29UL, 0xA0591340UL, 0xE4183A3EUL,
0x3F54989AUL, 0x5B429D65UL, 0x6B8FE4D6UL, 0x99F73FD6UL,
0xA1D29C07UL, 0xEFE830F5UL, 0x4D2D38E6UL, 0xF0255DC1UL,
0x4CDD2086UL, 0x8470EB26UL, 0x6382E9C6UL, 0x021ECC5EUL,
0x09686B3FUL, 0x3EBAEFC9UL, 0x3C971814UL, 0x6B6A70A1UL,
0x687F3584UL, 0x52A0E286UL, 0xB79C5305UL, 0xAA500737UL,
0x3E07841CUL, 0x7FDEAE5CUL, 0x8E7D44ECUL, 0x5716F2B8UL,
0xB03ADA37UL, 0xF0500C0DUL, 0xF01C1F04UL, 0x0200B3FFUL,
0xAE0CF51AUL, 0x3CB574B2UL, 0x25837A58UL, 0xDC0921BDUL,
0xD19113F9UL, 0x7CA92FF6UL, 0x94324773UL, 0x22F54701UL,
0x3AE5E581UL, 0x37C2DADCUL, 0xC8B57634UL, 0x9AF3DDA7UL,
0xA9446146UL, 0x0FD0030EUL, 0xECC8C73EUL, 0xA4751E41UL,
0xE238CD99UL, 0x3BEA0E2FUL, 0x3280BBA1UL, 0x183EB331UL,
0x4E548B38UL, 0x4F6DB908UL, 0x6F420D03UL, 0xF60A04BFUL,
0x2CB81290UL, 0x24977C79UL, 0x5679B072UL, 0xBCAF89AFUL,
0xDE9A771FUL, 0xD9930810UL, 0xB38BAE12UL, 0xDCCF3F2EUL,
0x5512721FUL, 0x2E6B7124UL, 0x501ADDE6UL, 0x9F84CD87UL,
0x7A584718UL, 0x7408DA17UL, 0xBC9F9ABCUL, 0xE94B7D8CUL,
0xEC7AEC3AUL, 0xDB851DFAUL, 0x63094366UL, 0xC464C3D2UL,
0xEF1C1847UL, 0x3215D908UL, 0xDD433B37UL, 0x24C2BA16UL,
0x12A14D43UL, 0x2A65C451UL, 0x50940002UL, 0x133AE4DDUL,
0x71DFF89EUL, 0x10314E55UL, 0x81AC77D6UL, 0x5F11199BUL,
0x043556F1UL, 0xD7A3C76BUL, 0x3C11183BUL, 0x5924A509UL,
0xF28FE6EDUL, 0x97F1FBFAUL, 0x9EBABF2CUL, 0x1E153C6EUL,
0x86E34570UL, 0xEAE96FB1UL, 0x860E5E0AUL, 0x5A3E2AB3UL,
0x771FE71CUL, 0x4E3D06FAUL, 0x2965DCB9UL, 0x99E71D0FUL,
0x803E89D6UL, 0x5266C825UL, 0x2E4CC978UL, 0x9C10B36AUL,
0xC6150EBAUL, 0x94E2EA78UL, 0xA5FC3C53UL, 0x1E0A2DF4UL,
0xF2F74EA7UL, 0x361D2B3DUL, 0x1939260FUL, 0x19C27960UL,
0x5223A708UL, 0xF71312B6UL, 0xEBADFE6EUL, 0xEAC31F66UL,
0xE3BC4595UL, 0xA67BC883UL, 0xB17F37D1UL, 0x018CFF28UL,
0xC332DDEFUL, 0xBE6C5AA5UL, 0x65582185UL, 0x68AB9802UL,
0xEECEA50FUL, 0xDB2F953BUL, 0x2AEF7DADUL, 0x5B6E2F84UL,
0x1521B628UL, 0x29076170UL, 0xECDD4775UL, 0x619F1510UL,
0x13CCA830UL, 0xEB61BD96UL, 0x0334FE1EUL, 0xAA0363CFUL,
0xB5735C90UL, 0x4C70A239UL, 0xD59E9E0BUL, 0xCBAADE14UL,
0xEECC86BCUL, 0x60622CA7UL, 0x9CAB5CABUL, 0xB2F3846EUL,
0x648B1EAFUL, 0x19BDF0CAUL, 0xA02369B9UL, 0x655ABB50UL,
0x40685A32UL, 0x3C2AB4B3UL, 0x319EE9D5UL, 0xC021B8F7UL,
0x9B540B19UL, 0x875FA099UL, 0x95F7997EUL, 0x623D7DA8UL,
0xF837889AUL, 0x97E32D77UL, 0x11ED935FUL, 0x16681281UL,
0x0E358829UL, 0xC7E61FD6UL, 0x96DEDFA1UL, 0x7858BA99UL,
0x57F584A5UL, 0x1B227263UL, 0x9B83C3FFUL, 0x1AC24696UL,
0xCDB30AEBUL, 0x532E3054UL, 0x8FD948E4UL, 0x6DBC3128UL,
0x58EBF2EFUL, 0x34C6FFEAUL, 0xFE28ED61UL, 0xEE7C3C73UL,
0x5D4A14D9UL, 0xE864B7E3UL, 0x42105D14UL, 0x203E13E0UL,
0x45EEE2B6UL, 0xA3AAABEAUL, 0xDB6C4F15UL, 0xFACB4FD0UL,
0xC742F442UL, 0xEF6ABBB5UL, 0x654F3B1DUL, 0x41CD2105UL,
0xD81E799EUL, 0x86854DC7UL, 0xE44B476AUL, 0x3D816250UL,
0xCF62A1F2UL, 0x5B8D2646UL, 0xFC8883A0UL, 0xC1C7B6A3UL,
0x7F1524C3UL, 0x69CB7492UL, 0x47848A0BUL, 0x5692B285UL,
0x095BBF00UL, 0xAD19489DUL, 0x1462B174UL, 0x23820E00UL,
0x58428D2AUL, 0x0C55F5EAUL, 0x1DADF43EUL, 0x233F7061UL,
0x3372F092UL, 0x8D937E41UL, 0xD65FECF1UL, 0x6C223BDBUL,
0x7CDE3759UL, 0xCBEE7460UL, 0x4085F2A7UL, 0xCE77326EUL,
0xA6078084UL, 0x19F8509EUL, 0xE8EFD855UL, 0x61D99735UL,
0xA969A7AAUL, 0xC50C06C2UL, 0x5A04ABFCUL, 0x800BCADCUL,
0x9E447A2EUL, 0xC3453484UL, 0xFDD56705UL, 0x0E1E9EC9UL,
0xDB73DBD3UL, 0x105588CDUL, 0x675FDA79UL, 0xE3674340UL,
0xC5C43465UL, 0x713E38D8UL, 0x3D28F89EUL, 0xF16DFF20UL,
0x153E21E7UL, 0x8FB03D4AUL, 0xE6E39F2BUL, 0xDB83ADF7UL },
{ 0xE93D5A68UL, 0x948140F7UL, 0xF64C261CUL, 0x94692934UL,
0x411520F7UL, 0x7602D4F7UL, 0xBCF46B2EUL, 0xD4A20068UL,
0xD4082471UL, 0x3320F46AUL, 0x43B7D4B7UL, 0x500061AFUL,
0x1E39F62EUL, 0x97244546UL, 0x14214F74UL, 0xBF8B8840UL,
0x4D95FC1DUL, 0x96B591AFUL, 0x70F4DDD3UL, 0x66A02F45UL,
0xBFBC09ECUL, 0x03BD9785UL, 0x7FAC6DD0UL, 0x31CB8504UL,
0x96EB27B3UL, 0x55FD3941UL, 0xDA2547E6UL, 0xABCA0A9AUL,
0x28507825UL, 0x530429F4UL, 0x0A2C86DAUL, 0xE9B66DFBUL,
0x68DC1462UL, 0xD7486900UL, 0x680EC0A4UL, 0x27A18DEEUL,
0x4F3FFEA2UL, 0xE887AD8CUL, 0xB58CE006UL, 0x7AF4D6B6UL,
0xAACE1E7CUL, 0xD3375FECUL, 0xCE78A399UL, 0x406B2A42UL,
0x20FE9E35UL, 0xD9F385B9UL, 0xEE39D7ABUL, 0x3B124E8BUL,
0x1DC9FAF7UL, 0x4B6D1856UL, 0x26A36631UL, 0xEAE397B2UL,
0x3A6EFA74UL, 0xDD5B4332UL, 0x6841E7F7UL, 0xCA7820FBUL,
0xFB0AF54EUL, 0xD8FEB397UL, 0x454056ACUL, 0xBA489527UL,
0x55533A3AUL, 0x20838D87UL, 0xFE6BA9B7UL, 0xD096954BUL,
0x55A867BCUL, 0xA1159A58UL, 0xCCA92963UL, 0x99E1DB33UL,
0xA62A4A56UL, 0x3F3125F9UL, 0x5EF47E1CUL, 0x9029317CUL,
0xFDF8E802UL, 0x04272F70UL, 0x80BB155CUL, 0x05282CE3UL,
0x95C11548UL, 0xE4C66D22UL, 0x48C1133FUL, 0xC70F86DCUL,
0x07F9C9EEUL, 0x41041F0FUL, 0x404779A4UL, 0x5D886E17UL,
0x325F51EBUL, 0xD59BC0D1UL, 0xF2BCC18FUL, 0x41113564UL,
0x257B7834UL, 0x602A9C60UL, 0xDFF8E8A3UL, 0x1F636C1BUL,
0x0E12B4C2UL, 0x02E1329EUL, 0xAF664FD1UL, 0xCAD18115UL,
0x6B2395E0UL, 0x333E92E1UL, 0x3B240B62UL, 0xEEBEB922UL,
0x85B2A20EUL, 0xE6BA0D99UL, 0xDE720C8CUL, 0x2DA2F728UL,
0xD0127845UL, 0x95B794FDUL, 0x647D0862UL, 0xE7CCF5F0UL,
0x5449A36FUL, 0x877D48FAUL, 0xC39DFD27UL, 0xF33E8D1EUL,
0x0A476341UL, 0x992EFF74UL, 0x3A6F6EABUL, 0xF4F8FD37UL,
0xA812DC60UL, 0xA1EBDDF8UL, 0x991BE14CUL, 0xDB6E6B0DUL,
0xC67B5510UL, 0x6D672C37UL, 0x2765D43BUL, 0xDCD0E804UL,
0xF1290DC7UL, 0xCC00FFA3UL, 0xB5390F92UL, 0x690FED0BUL,
0x667B9FFBUL, 0xCEDB7D9CUL, 0xA091CF0BUL, 0xD9155EA3UL,
0xBB132F88UL, 0x515BAD24UL, 0x7B9479BFUL, 0x763BD6EBUL,
0x37392EB3UL, 0xCC115979UL, 0x8026E297UL, 0xF42E312DUL,
0x6842ADA7UL, 0xC66A2B3BUL, 0x12754CCCUL, 0x782EF11CUL,
0x6A124237UL, 0xB79251E7UL, 0x06A1BBE6UL, 0x4BFB6350UL,
0x1A6B1018UL, 0x11CAEDFAUL, 0x3D25BDD8UL, 0xE2E1C3C9UL,
0x44421659UL, 0x0A121386UL, 0xD90CEC6EUL, 0xD5ABEA2AUL,
0x64AF674EUL, 0xDA86A85FUL, 0xBEBFE988UL, 0x64E4C3FEUL,
0x9DBC8057UL, 0xF0F7C086UL, 0x60787BF8UL, 0x6003604DUL,
0xD1FD8346UL, 0xF6381FB0UL, 0x7745AE04UL, 0xD736FCCCUL,
0x83426B33UL, 0xF01EAB71UL, 0xB0804187UL, 0x3C005E5FUL,
0x77A057BEUL, 0xBDE8AE24UL, 0x55464299UL, 0xBF582E61UL,
0x4E58F48FUL, 0xF2DDFDA2UL, 0xF474EF38UL, 0x8789BDC2UL,
0x5366F9C3UL, 0xC8B38E74UL, 0xB475F255UL, 0x46FCD9B9UL,
0x7AEB2661UL, 0x8B1DDF84UL, 0x846A0E79UL, 0x915F95E2UL,
0x466E598EUL, 0x20B45770UL, 0x8CD55591UL, 0xC902DE4CUL,
0xB90BACE1UL, 0xBB8205D0UL, 0x11A86248UL, 0x7574A99EUL,
0xB77F19B6UL, 0xE0A9DC09UL, 0x662D09A1UL, 0xC4324633UL,
0xE85A1F02UL, 0x09F0BE8CUL, 0x4A99A025UL, 0x1D6EFE10UL,
0x1AB93D1DUL, 0x0BA5A4DFUL, 0xA186F20FUL, 0x2868F169UL,
0xDCB7DA83UL, 0x573906FEUL, 0xA1E2CE9BUL, 0x4FCD7F52UL,
0x50115E01UL, 0xA70683FAUL, 0xA002B5C4UL, 0x0DE6D027UL,
0x9AF88C27UL, 0x773F8641UL, 0xC3604C06UL, 0x61A806B5UL,
0xF0177A28UL, 0xC0F586E0UL, 0x006058AAUL, 0x30DC7D62UL,
0x11E69ED7UL, 0x2338EA63UL, 0x53C2DD94UL, 0xC2C21634UL,
0xBBCBEE56UL, 0x90BCB6DEUL, 0xEBFC7DA1UL, 0xCE591D76UL,
0x6F05E409UL, 0x4B7C0188UL, 0x39720A3DUL, 0x7C927C24UL,
0x86E3725FUL, 0x724D9DB9UL, 0x1AC15BB4UL, 0xD39EB8FCUL,
0xED545578UL, 0x08FCA5B5UL, 0xD83D7CD3UL, 0x4DAD0FC4UL,
0x1E50EF5EUL, 0xB161E6F8UL, 0xA28514D9UL, 0x6C51133CUL,
0x6FD5C7E7UL, 0x56E14EC4UL, 0x362ABFCEUL, 0xDDC6C837UL,
0xD79A3234UL, 0x92638212UL, 0x670EFA8EUL, 0x406000E0UL },
{ 0x3A39CE37UL, 0xD3FAF5CFUL, 0xABC27737UL, 0x5AC52D1BUL,
0x5CB0679EUL, 0x4FA33742UL, 0xD3822740UL, 0x99BC9BBEUL,
0xD5118E9DUL, 0xBF0F7315UL, 0xD62D1C7EUL, 0xC700C47BUL,
0xB78C1B6BUL, 0x21A19045UL, 0xB26EB1BEUL, 0x6A366EB4UL,
0x5748AB2FUL, 0xBC946E79UL, 0xC6A376D2UL, 0x6549C2C8UL,
0x530FF8EEUL, 0x468DDE7DUL, 0xD5730A1DUL, 0x4CD04DC6UL,
0x2939BBDBUL, 0xA9BA4650UL, 0xAC9526E8UL, 0xBE5EE304UL,
0xA1FAD5F0UL, 0x6A2D519AUL, 0x63EF8CE2UL, 0x9A86EE22UL,
0xC089C2B8UL, 0x43242EF6UL, 0xA51E03AAUL, 0x9CF2D0A4UL,
0x83C061BAUL, 0x9BE96A4DUL, 0x8FE51550UL, 0xBA645BD6UL,
0x2826A2F9UL, 0xA73A3AE1UL, 0x4BA99586UL, 0xEF5562E9UL,
0xC72FEFD3UL, 0xF752F7DAUL, 0x3F046F69UL, 0x77FA0A59UL,
0x80E4A915UL, 0x87B08601UL, 0x9B09E6ADUL, 0x3B3EE593UL,
0xE990FD5AUL, 0x9E34D797UL, 0x2CF0B7D9UL, 0x022B8B51UL,
0x96D5AC3AUL, 0x017DA67DUL, 0xD1CF3ED6UL, 0x7C7D2D28UL,
0x1F9F25CFUL, 0xADF2B89BUL, 0x5AD6B472UL, 0x5A88F54CUL,
0xE029AC71UL, 0xE019A5E6UL, 0x47B0ACFDUL, 0xED93FA9BUL,
0xE8D3C48DUL, 0x283B57CCUL, 0xF8D56629UL, 0x79132E28UL,
0x785F0191UL, 0xED756055UL, 0xF7960E44UL, 0xE3D35E8CUL,
0x15056DD4UL, 0x88F46DBAUL, 0x03A16125UL, 0x0564F0BDUL,
0xC3EB9E15UL, 0x3C9057A2UL, 0x97271AECUL, 0xA93A072AUL,
0x1B3F6D9BUL, 0x1E6321F5UL, 0xF59C66FBUL, 0x26DCF319UL,
0x7533D928UL, 0xB155FDF5UL, 0x03563482UL, 0x8ABA3CBBUL,
0x28517711UL, 0xC20AD9F8UL, 0xABCC5167UL, 0xCCAD925FUL,
0x4DE81751UL, 0x3830DC8EUL, 0x379D5862UL, 0x9320F991UL,
0xEA7A90C2UL, 0xFB3E7BCEUL, 0x5121CE64UL, 0x774FBE32UL,
0xA8B6E37EUL, 0xC3293D46UL, 0x48DE5369UL, 0x6413E680UL,
0xA2AE0810UL, 0xDD6DB224UL, 0x69852DFDUL, 0x09072166UL,
0xB39A460AUL, 0x6445C0DDUL, 0x586CDECFUL, 0x1C20C8AEUL,
0x5BBEF7DDUL, 0x1B588D40UL, 0xCCD2017FUL, 0x6BB4E3BBUL,
0xDDA26A7EUL, 0x3A59FF45UL, 0x3E350A44UL, 0xBCB4CDD5UL,
0x72EACEA8UL, 0xFA6484BBUL, 0x8D6612AEUL, 0xBF3C6F47UL,
0xD29BE463UL, 0x542F5D9EUL, 0xAEC2771BUL, 0xF64E6370UL,
0x740E0D8DUL, 0xE75B1357UL, 0xF8721671UL, 0xAF537D5DUL,
0x4040CB08UL, 0x4EB4E2CCUL, 0x34D2466AUL, 0x0115AF84UL,
0xE1B00428UL, 0x95983A1DUL, 0x06B89FB4UL, 0xCE6EA048UL,
0x6F3F3B82UL, 0x3520AB82UL, 0x011A1D4BUL, 0x277227F8UL,
0x611560B1UL, 0xE7933FDCUL, 0xBB3A792BUL, 0x344525BDUL,
0xA08839E1UL, 0x51CE794BUL, 0x2F32C9B7UL, 0xA01FBAC9UL,
0xE01CC87EUL, 0xBCC7D1F6UL, 0xCF0111C3UL, 0xA1E8AAC7UL,
0x1A908749UL, 0xD44FBD9AUL, 0xD0DADECBUL, 0xD50ADA38UL,
0x0339C32AUL, 0xC6913667UL, 0x8DF9317CUL, 0xE0B12B4FUL,
0xF79E59B7UL, 0x43F5BB3AUL, 0xF2D519FFUL, 0x27D9459CUL,
0xBF97222CUL, 0x15E6FC2AUL, 0x0F91FC71UL, 0x9B941525UL,
0xFAE59361UL, 0xCEB69CEBUL, 0xC2A86459UL, 0x12BAA8D1UL,
0xB6C1075EUL, 0xE3056A0CUL, 0x10D25065UL, 0xCB03A442UL,
0xE0EC6E0EUL, 0x1698DB3BUL, 0x4C98A0BEUL, 0x3278E964UL,
0x9F1F9532UL, 0xE0D392DFUL, 0xD3A0342BUL, 0x8971F21EUL,
0x1B0A7441UL, 0x4BA3348CUL, 0xC5BE7120UL, 0xC37632D8UL,
0xDF359F8DUL, 0x9B992F2EUL, 0xE60B6F47UL, 0x0FE3F11DUL,
0xE54CDA54UL, 0x1EDAD891UL, 0xCE6279CFUL, 0xCD3E7E6FUL,
0x1618B166UL, 0xFD2C1D05UL, 0x848FD2C5UL, 0xF6FB2299UL,
0xF523F357UL, 0xA6327623UL, 0x93A83531UL, 0x56CCCD02UL,
0xACF08162UL, 0x5A75EBB5UL, 0x6E163697UL, 0x88D273CCUL,
0xDE966292UL, 0x81B949D0UL, 0x4C50901BUL, 0x71C65614UL,
0xE6C6C7BDUL, 0x327A140AUL, 0x45E1D006UL, 0xC3F27B9AUL,
0xC9AA53FDUL, 0x62A80F00UL, 0xBB25BFE2UL, 0x35BDD2F6UL,
0x71126905UL, 0xB2040222UL, 0xB6CBCF7CUL, 0xCD769C2BUL,
0x53113EC0UL, 0x1640E3D3UL, 0x38ABBD60UL, 0x2547ADF0UL,
0xBA38209CUL, 0xF746CE76UL, 0x77AFA1C5UL, 0x20756060UL,
0x85CBFE4EUL, 0x8AE88DD8UL, 0x7AAAF9B0UL, 0x4CF9AA7EUL,
0x1948C25CUL, 0x02FB8A8CUL, 0x01C36AE4UL, 0xD6EBE1F9UL,
0x90D4F869UL, 0xA65CDEA0UL, 0x3F09252DUL, 0xC208E69FUL,
0xB74E6132UL, 0xCE77E25BUL, 0x578FDFE3UL, 0x3AC372E6UL
}
};

Posted: Fri Nov 25, 2005 3:31 pm
by Hatonastick
Always wanted to rewrite the PureCrypt (mangled version of LibTomCrypt) in PureBASIC instead of C. Just never had the level of PB knowledge needed.

Posted: Fri Nov 25, 2005 4:32 pm
by DarkDragon
The Header:

Code: Select all

;/////////////////////////////////////////////////////////////////////////////
; PureCrypt v1.0a //
;/////////////////////////////////////////////////////////////////////////////
; Contains library defines, macros, structures etc. //
;/////////////////////////////////////////////////////////////////////////////

; Blowfish ///////////////////////////////////////////////////////////////////

Structure BLOWFISH
  S.l[4*256]
  K.l[18]
EndStructure

Declare.l blowfish_setup(*key.BYTE, keylen.l, num_rounds.l, *skey.BLOWFISH);
Declare.l blowfish_ecb_encrypt(*pt.BYTE, *ct.BYTE, *skey.BLOWFISH);
Declare.l blowfish_ecb_decrypt(*ct.BYTE, *pt.BYTE, *skey.BLOWFISH);

; Table Data /////////////////////////////////////////////////////////////////

DataSection
  ORIG_P:
  Data.l $243F6A88 & $FFFFFFFF, $85A308D3 & $FFFFFFFF, $13198A2E & $FFFFFFFF, $03707344 & $FFFFFFFF
  Data.l $A4093822 & $FFFFFFFF, $299F31D0 & $FFFFFFFF, $082EFA98 & $FFFFFFFF, $EC4E6C89 & $FFFFFFFF
  Data.l $452821E6 & $FFFFFFFF, $38D01377 & $FFFFFFFF, $BE5466CF & $FFFFFFFF, $34E90C6C & $FFFFFFFF
  Data.l $C0AC29B7 & $FFFFFFFF, $C97C50DD & $FFFFFFFF, $3F84D5B5 & $FFFFFFFF, $B5470917 & $FFFFFFFF
  Data.l $9216D5D9 & $FFFFFFFF, $8979FB1B & $FFFFFFFF, 0, 0
  
  ORIG_S:
  Data.l $D1310BA6 & $FFFFFFFF, $98DFB5AC & $FFFFFFFF, $2FFD72DB & $FFFFFFFF, $D01ADFB7 & $FFFFFFFF
  Data.l $B8E1AFED & $FFFFFFFF, $6A267E96 & $FFFFFFFF, $BA7C9045 & $FFFFFFFF, $F12C7F99 & $FFFFFFFF
  Data.l $24A19947 & $FFFFFFFF, $B3916CF7 & $FFFFFFFF, $0801F2E2 & $FFFFFFFF, $858EFC16 & $FFFFFFFF
  Data.l $636920D8 & $FFFFFFFF, $71574E69 & $FFFFFFFF, $A458FEA3 & $FFFFFFFF, $F4933D7E & $FFFFFFFF
  Data.l $0D95748F & $FFFFFFFF, $728EB658 & $FFFFFFFF, $718BCD58 & $FFFFFFFF, $82154AEE & $FFFFFFFF
  Data.l $7B54A41D & $FFFFFFFF, $C25A59B5 & $FFFFFFFF, $9C30D539 & $FFFFFFFF, $2AF26013 & $FFFFFFFF
  Data.l $C5D1B023 & $FFFFFFFF, $286085F0 & $FFFFFFFF, $CA417918 & $FFFFFFFF, $B8DB38EF & $FFFFFFFF
  Data.l $8E79DCB0 & $FFFFFFFF, $603A180E & $FFFFFFFF, $6C9E0E8B & $FFFFFFFF, $B01E8A3E & $FFFFFFFF
  Data.l $D71577C1 & $FFFFFFFF, $BD314B27 & $FFFFFFFF, $78AF2FDA & $FFFFFFFF, $55605C60 & $FFFFFFFF
  Data.l $E65525F3 & $FFFFFFFF, $AA55AB94 & $FFFFFFFF, $57489862 & $FFFFFFFF, $63E81440 & $FFFFFFFF
  Data.l $55CA396A & $FFFFFFFF, $2AAB10B6 & $FFFFFFFF, $B4CC5C34 & $FFFFFFFF, $1141E8CE & $FFFFFFFF
  Data.l $A15486AF & $FFFFFFFF, $7C72E993 & $FFFFFFFF, $B3EE1411 & $FFFFFFFF, $636FBC2A & $FFFFFFFF
  Data.l $2BA9C55D & $FFFFFFFF, $741831F6 & $FFFFFFFF, $CE5C3E16 & $FFFFFFFF, $9B87931E & $FFFFFFFF
  Data.l $AFD6BA33 & $FFFFFFFF, $6C24CF5C & $FFFFFFFF, $7A325381 & $FFFFFFFF, $28958677 & $FFFFFFFF
  Data.l $3B8F4898 & $FFFFFFFF, $6B4BB9AF & $FFFFFFFF, $C4BFE81B & $FFFFFFFF, $66282193 & $FFFFFFFF
  Data.l $61D809CC & $FFFFFFFF, $FB21A991 & $FFFFFFFF, $487CAC60 & $FFFFFFFF, $5DEC8032 & $FFFFFFFF
  Data.l $EF845D5D & $FFFFFFFF, $E98575B1 & $FFFFFFFF, $DC262302 & $FFFFFFFF, $EB651B88 & $FFFFFFFF
  Data.l $23893E81 & $FFFFFFFF, $D396ACC5 & $FFFFFFFF, $0F6D6FF3 & $FFFFFFFF, $83F44239 & $FFFFFFFF
  Data.l $2E0B4482 & $FFFFFFFF, $A4842004 & $FFFFFFFF, $69C8F04A & $FFFFFFFF, $9E1F9B5E & $FFFFFFFF
  Data.l $21C66842 & $FFFFFFFF, $F6E96C9A & $FFFFFFFF, $670C9C61 & $FFFFFFFF, $ABD388F0 & $FFFFFFFF
  Data.l $6A51A0D2 & $FFFFFFFF, $D8542F68 & $FFFFFFFF, $960FA728 & $FFFFFFFF, $AB5133A3 & $FFFFFFFF
  Data.l $6EEF0B6C & $FFFFFFFF, $137A3BE4 & $FFFFFFFF, $BA3BF050 & $FFFFFFFF, $7EFB2A98 & $FFFFFFFF
  Data.l $A1F1651D & $FFFFFFFF, $39AF0176 & $FFFFFFFF, $66CA593E & $FFFFFFFF, $82430E88 & $FFFFFFFF
  Data.l $8CEE8619 & $FFFFFFFF, $456F9FB4 & $FFFFFFFF, $7D84A5C3 & $FFFFFFFF, $3B8B5EBE & $FFFFFFFF
  Data.l $E06F75D8 & $FFFFFFFF, $85C12073 & $FFFFFFFF, $401A449F & $FFFFFFFF, $56C16AA6 & $FFFFFFFF
  Data.l $4ED3AA62 & $FFFFFFFF, $363F7706 & $FFFFFFFF, $1BFEDF72 & $FFFFFFFF, $429B023D & $FFFFFFFF
  Data.l $37D0D724 & $FFFFFFFF, $D00A1248 & $FFFFFFFF, $DB0FEAD3 & $FFFFFFFF, $49F1C09B & $FFFFFFFF
  Data.l $075372C9 & $FFFFFFFF, $80991B7B & $FFFFFFFF, $25D479D8 & $FFFFFFFF, $F6E8DEF7 & $FFFFFFFF
  Data.l $E3FE501A & $FFFFFFFF, $B6794C3B & $FFFFFFFF, $976CE0BD & $FFFFFFFF, $04C006BA & $FFFFFFFF
  Data.l $C1A94FB6 & $FFFFFFFF, $409F60C4 & $FFFFFFFF, $5E5C9EC2 & $FFFFFFFF, $196A2463 & $FFFFFFFF
  Data.l $68FB6FAF & $FFFFFFFF, $3E6C53B5 & $FFFFFFFF, $1339B2EB & $FFFFFFFF, $3B52EC6F & $FFFFFFFF
  Data.l $6DFC511F & $FFFFFFFF, $9B30952C & $FFFFFFFF, $CC814544 & $FFFFFFFF, $AF5EBD09 & $FFFFFFFF
  Data.l $BEE3D004 & $FFFFFFFF, $DE334AFD & $FFFFFFFF, $660F2807 & $FFFFFFFF, $192E4BB3 & $FFFFFFFF
  Data.l $C0CBA857 & $FFFFFFFF, $45C8740F & $FFFFFFFF, $D20B5F39 & $FFFFFFFF, $B9D3FBDB & $FFFFFFFF
  Data.l $5579C0BD & $FFFFFFFF, $1A60320A & $FFFFFFFF, $D6A100C6 & $FFFFFFFF, $402C7279 & $FFFFFFFF
  Data.l $679F25FE & $FFFFFFFF, $FB1FA3CC & $FFFFFFFF, $8EA5E9F8 & $FFFFFFFF, $DB3222F8 & $FFFFFFFF
  Data.l $3C7516DF & $FFFFFFFF, $FD616B15 & $FFFFFFFF, $2F501EC8 & $FFFFFFFF, $AD0552AB & $FFFFFFFF
  Data.l $323DB5FA & $FFFFFFFF, $FD238760 & $FFFFFFFF, $53317B48 & $FFFFFFFF, $3E00DF82 & $FFFFFFFF
  Data.l $9E5C57BB & $FFFFFFFF, $CA6F8CA0 & $FFFFFFFF, $1A87562E & $FFFFFFFF, $DF1769DB & $FFFFFFFF
  Data.l $D542A8F6 & $FFFFFFFF, $287EFFC3 & $FFFFFFFF, $AC6732C6 & $FFFFFFFF, $8C4F5573 & $FFFFFFFF
  Data.l $695B27B0 & $FFFFFFFF, $BBCA58C8 & $FFFFFFFF, $E1FFA35D & $FFFFFFFF, $B8F011A0 & $FFFFFFFF
  Data.l $10FA3D98 & $FFFFFFFF, $FD2183B8 & $FFFFFFFF, $4AFCB56C & $FFFFFFFF, $2DD1D35B & $FFFFFFFF
  Data.l $9A53E479 & $FFFFFFFF, $B6F84565 & $FFFFFFFF, $D28E49BC & $FFFFFFFF, $4BFB9790 & $FFFFFFFF
  Data.l $E1DDF2DA & $FFFFFFFF, $A4CB7E33 & $FFFFFFFF, $62FB1341 & $FFFFFFFF, $CEE4C6E8 & $FFFFFFFF
  Data.l $EF20CADA & $FFFFFFFF, $36774C01 & $FFFFFFFF, $D07E9EFE & $FFFFFFFF, $2BF11FB4 & $FFFFFFFF
  Data.l $95DBDA4D & $FFFFFFFF, $AE909198 & $FFFFFFFF, $EAAD8E71 & $FFFFFFFF, $6B93D5A0 & $FFFFFFFF
  Data.l $D08ED1D0 & $FFFFFFFF, $AFC725E0 & $FFFFFFFF, $8E3C5B2F & $FFFFFFFF, $8E7594B7 & $FFFFFFFF
  Data.l $8FF6E2FB & $FFFFFFFF, $F2122B64 & $FFFFFFFF, $8888B812 & $FFFFFFFF, $900DF01C & $FFFFFFFF
  Data.l $4FAD5EA0 & $FFFFFFFF, $688FC31C & $FFFFFFFF, $D1CFF191 & $FFFFFFFF, $B3A8C1AD & $FFFFFFFF
  Data.l $2F2F2218 & $FFFFFFFF, $BE0E1777 & $FFFFFFFF, $EA752DFE & $FFFFFFFF, $8B021FA1 & $FFFFFFFF
  Data.l $E5A0CC0F & $FFFFFFFF, $B56F74E8 & $FFFFFFFF, $18ACF3D6 & $FFFFFFFF, $CE89E299 & $FFFFFFFF
  Data.l $B4A84FE0 & $FFFFFFFF, $FD13E0B7 & $FFFFFFFF, $7CC43B81 & $FFFFFFFF, $D2ADA8D9 & $FFFFFFFF
  Data.l $165FA266 & $FFFFFFFF, $80957705 & $FFFFFFFF, $93CC7314 & $FFFFFFFF, $211A1477 & $FFFFFFFF
  Data.l $E6AD2065 & $FFFFFFFF, $77B5FA86 & $FFFFFFFF, $C75442F5 & $FFFFFFFF, $FB9D35CF & $FFFFFFFF
  Data.l $EBCDAF0C & $FFFFFFFF, $7B3E89A0 & $FFFFFFFF, $D6411BD3 & $FFFFFFFF, $AE1E7E49 & $FFFFFFFF
  Data.l $00250E2D & $FFFFFFFF, $2071B35E & $FFFFFFFF, $226800BB & $FFFFFFFF, $57B8E0AF & $FFFFFFFF
  Data.l $2464369B & $FFFFFFFF, $F009B91E & $FFFFFFFF, $5563911D & $FFFFFFFF, $59DFA6AA & $FFFFFFFF
  Data.l $78C14389 & $FFFFFFFF, $D95A537F & $FFFFFFFF, $207D5BA2 & $FFFFFFFF, $02E5B9C5 & $FFFFFFFF
  Data.l $83260376 & $FFFFFFFF, $6295CFA9 & $FFFFFFFF, $11C81968 & $FFFFFFFF, $4E734A41 & $FFFFFFFF
  Data.l $B3472DCA & $FFFFFFFF, $7B14A94A & $FFFFFFFF, $1B510052 & $FFFFFFFF, $9A532915 & $FFFFFFFF
  Data.l $D60F573F & $FFFFFFFF, $BC9BC6E4 & $FFFFFFFF, $2B60A476 & $FFFFFFFF, $81E67400 & $FFFFFFFF
  Data.l $08BA6FB5 & $FFFFFFFF, $571BE91F & $FFFFFFFF, $F296EC6B & $FFFFFFFF, $2A0DD915 & $FFFFFFFF
  Data.l $B6636521 & $FFFFFFFF, $E7B9F9B6 & $FFFFFFFF, $FF34052E & $FFFFFFFF, $C5855664 & $FFFFFFFF
  Data.l $53B02D5D & $FFFFFFFF, $A99F8FA1 & $FFFFFFFF, $08BA4799 & $FFFFFFFF, $6E85076A & $FFFFFFFF
  Data.l $4B7A70E9 & $FFFFFFFF, $B5B32944 & $FFFFFFFF, $DB75092E & $FFFFFFFF, $C4192623 & $FFFFFFFF
  Data.l $AD6EA6B0 & $FFFFFFFF, $49A7DF7D & $FFFFFFFF, $9CEE60B8 & $FFFFFFFF, $8FEDB266 & $FFFFFFFF
  Data.l $ECAA8C71 & $FFFFFFFF, $699A17FF & $FFFFFFFF, $5664526C & $FFFFFFFF, $C2B19EE1 & $FFFFFFFF
  Data.l $193602A5 & $FFFFFFFF, $75094C29 & $FFFFFFFF, $A0591340 & $FFFFFFFF, $E4183A3E & $FFFFFFFF
  Data.l $3F54989A & $FFFFFFFF, $5B429D65 & $FFFFFFFF, $6B8FE4D6 & $FFFFFFFF, $99F73FD6 & $FFFFFFFF
  Data.l $A1D29C07 & $FFFFFFFF, $EFE830F5 & $FFFFFFFF, $4D2D38E6 & $FFFFFFFF, $F0255DC1 & $FFFFFFFF
  Data.l $4CDD2086 & $FFFFFFFF, $8470EB26 & $FFFFFFFF, $6382E9C6 & $FFFFFFFF, $021ECC5E & $FFFFFFFF
  Data.l $09686B3F & $FFFFFFFF, $3EBAEFC9 & $FFFFFFFF, $3C971814 & $FFFFFFFF, $6B6A70A1 & $FFFFFFFF
  Data.l $687F3584 & $FFFFFFFF, $52A0E286 & $FFFFFFFF, $B79C5305 & $FFFFFFFF, $AA500737 & $FFFFFFFF
  Data.l $3E07841C & $FFFFFFFF, $7FDEAE5C & $FFFFFFFF, $8E7D44EC & $FFFFFFFF, $5716F2B8 & $FFFFFFFF
  Data.l $B03ADA37 & $FFFFFFFF, $F0500C0D & $FFFFFFFF, $F01C1F04 & $FFFFFFFF, $0200B3FF & $FFFFFFFF
  Data.l $AE0CF51A & $FFFFFFFF, $3CB574B2 & $FFFFFFFF, $25837A58 & $FFFFFFFF, $DC0921BD & $FFFFFFFF
  Data.l $D19113F9 & $FFFFFFFF, $7CA92FF6 & $FFFFFFFF, $94324773 & $FFFFFFFF, $22F54701 & $FFFFFFFF
  Data.l $3AE5E581 & $FFFFFFFF, $37C2DADC & $FFFFFFFF, $C8B57634 & $FFFFFFFF, $9AF3DDA7 & $FFFFFFFF
  Data.l $A9446146 & $FFFFFFFF, $0FD0030E & $FFFFFFFF, $ECC8C73E & $FFFFFFFF, $A4751E41 & $FFFFFFFF
  Data.l $E238CD99 & $FFFFFFFF, $3BEA0E2F & $FFFFFFFF, $3280BBA1 & $FFFFFFFF, $183EB331 & $FFFFFFFF
  Data.l $4E548B38 & $FFFFFFFF, $4F6DB908 & $FFFFFFFF, $6F420D03 & $FFFFFFFF, $F60A04BF & $FFFFFFFF
  Data.l $2CB81290 & $FFFFFFFF, $24977C79 & $FFFFFFFF, $5679B072 & $FFFFFFFF, $BCAF89AF & $FFFFFFFF
  Data.l $DE9A771F & $FFFFFFFF, $D9930810 & $FFFFFFFF, $B38BAE12 & $FFFFFFFF, $DCCF3F2E & $FFFFFFFF
  Data.l $5512721F & $FFFFFFFF, $2E6B7124 & $FFFFFFFF, $501ADDE6 & $FFFFFFFF, $9F84CD87 & $FFFFFFFF
  Data.l $7A584718 & $FFFFFFFF, $7408DA17 & $FFFFFFFF, $BC9F9ABC & $FFFFFFFF, $E94B7D8C & $FFFFFFFF
  Data.l $EC7AEC3A & $FFFFFFFF, $DB851DFA & $FFFFFFFF, $63094366 & $FFFFFFFF, $C464C3D2 & $FFFFFFFF
  Data.l $EF1C1847 & $FFFFFFFF, $3215D908 & $FFFFFFFF, $DD433B37 & $FFFFFFFF, $24C2BA16 & $FFFFFFFF
  Data.l $12A14D43 & $FFFFFFFF, $2A65C451 & $FFFFFFFF, $50940002 & $FFFFFFFF, $133AE4DD & $FFFFFFFF
  Data.l $71DFF89E & $FFFFFFFF, $10314E55 & $FFFFFFFF, $81AC77D6 & $FFFFFFFF, $5F11199B & $FFFFFFFF
  Data.l $043556F1 & $FFFFFFFF, $D7A3C76B & $FFFFFFFF, $3C11183B & $FFFFFFFF, $5924A509 & $FFFFFFFF
  Data.l $F28FE6ED & $FFFFFFFF, $97F1FBFA & $FFFFFFFF, $9EBABF2C & $FFFFFFFF, $1E153C6E & $FFFFFFFF
  Data.l $86E34570 & $FFFFFFFF, $EAE96FB1 & $FFFFFFFF, $860E5E0A & $FFFFFFFF, $5A3E2AB3 & $FFFFFFFF
  Data.l $771FE71C & $FFFFFFFF, $4E3D06FA & $FFFFFFFF, $2965DCB9 & $FFFFFFFF, $99E71D0F & $FFFFFFFF
  Data.l $803E89D6 & $FFFFFFFF, $5266C825 & $FFFFFFFF, $2E4CC978 & $FFFFFFFF, $9C10B36A & $FFFFFFFF
  Data.l $C6150EBA & $FFFFFFFF, $94E2EA78 & $FFFFFFFF, $A5FC3C53 & $FFFFFFFF, $1E0A2DF4 & $FFFFFFFF
  Data.l $F2F74EA7 & $FFFFFFFF, $361D2B3D & $FFFFFFFF, $1939260F & $FFFFFFFF, $19C27960 & $FFFFFFFF
  Data.l $5223A708 & $FFFFFFFF, $F71312B6 & $FFFFFFFF, $EBADFE6E & $FFFFFFFF, $EAC31F66 & $FFFFFFFF
  Data.l $E3BC4595 & $FFFFFFFF, $A67BC883 & $FFFFFFFF, $B17F37D1 & $FFFFFFFF, $018CFF28 & $FFFFFFFF
  Data.l $C332DDEF & $FFFFFFFF, $BE6C5AA5 & $FFFFFFFF, $65582185 & $FFFFFFFF, $68AB9802 & $FFFFFFFF
  Data.l $EECEA50F & $FFFFFFFF, $DB2F953B & $FFFFFFFF, $2AEF7DAD & $FFFFFFFF, $5B6E2F84 & $FFFFFFFF
  Data.l $1521B628 & $FFFFFFFF, $29076170 & $FFFFFFFF, $ECDD4775 & $FFFFFFFF, $619F1510 & $FFFFFFFF
  Data.l $13CCA830 & $FFFFFFFF, $EB61BD96 & $FFFFFFFF, $0334FE1E & $FFFFFFFF, $AA0363CF & $FFFFFFFF
  Data.l $B5735C90 & $FFFFFFFF, $4C70A239 & $FFFFFFFF, $D59E9E0B & $FFFFFFFF, $CBAADE14 & $FFFFFFFF
  Data.l $EECC86BC & $FFFFFFFF, $60622CA7 & $FFFFFFFF, $9CAB5CAB & $FFFFFFFF, $B2F3846E & $FFFFFFFF
  Data.l $648B1EAF & $FFFFFFFF, $19BDF0CA & $FFFFFFFF, $A02369B9 & $FFFFFFFF, $655ABB50 & $FFFFFFFF
  Data.l $40685A32 & $FFFFFFFF, $3C2AB4B3 & $FFFFFFFF, $319EE9D5 & $FFFFFFFF, $C021B8F7 & $FFFFFFFF
  Data.l $9B540B19 & $FFFFFFFF, $875FA099 & $FFFFFFFF, $95F7997E & $FFFFFFFF, $623D7DA8 & $FFFFFFFF
  Data.l $F837889A & $FFFFFFFF, $97E32D77 & $FFFFFFFF, $11ED935F & $FFFFFFFF, $16681281 & $FFFFFFFF
  Data.l $0E358829 & $FFFFFFFF, $C7E61FD6 & $FFFFFFFF, $96DEDFA1 & $FFFFFFFF, $7858BA99 & $FFFFFFFF
  Data.l $57F584A5 & $FFFFFFFF, $1B227263 & $FFFFFFFF, $9B83C3FF & $FFFFFFFF, $1AC24696 & $FFFFFFFF
  Data.l $CDB30AEB & $FFFFFFFF, $532E3054 & $FFFFFFFF, $8FD948E4 & $FFFFFFFF, $6DBC3128 & $FFFFFFFF
  Data.l $58EBF2EF & $FFFFFFFF, $34C6FFEA & $FFFFFFFF, $FE28ED61 & $FFFFFFFF, $EE7C3C73 & $FFFFFFFF
  Data.l $5D4A14D9 & $FFFFFFFF, $E864B7E3 & $FFFFFFFF, $42105D14 & $FFFFFFFF, $203E13E0 & $FFFFFFFF
  Data.l $45EEE2B6 & $FFFFFFFF, $A3AAABEA & $FFFFFFFF, $DB6C4F15 & $FFFFFFFF, $FACB4FD0 & $FFFFFFFF
  Data.l $C742F442 & $FFFFFFFF, $EF6ABBB5 & $FFFFFFFF, $654F3B1D & $FFFFFFFF, $41CD2105 & $FFFFFFFF
  Data.l $D81E799E & $FFFFFFFF, $86854DC7 & $FFFFFFFF, $E44B476A & $FFFFFFFF, $3D816250 & $FFFFFFFF
  Data.l $CF62A1F2 & $FFFFFFFF, $5B8D2646 & $FFFFFFFF, $FC8883A0 & $FFFFFFFF, $C1C7B6A3 & $FFFFFFFF
  Data.l $7F1524C3 & $FFFFFFFF, $69CB7492 & $FFFFFFFF, $47848A0B & $FFFFFFFF, $5692B285 & $FFFFFFFF
  Data.l $095BBF00 & $FFFFFFFF, $AD19489D & $FFFFFFFF, $1462B174 & $FFFFFFFF, $23820E00 & $FFFFFFFF
  Data.l $58428D2A & $FFFFFFFF, $0C55F5EA & $FFFFFFFF, $1DADF43E & $FFFFFFFF, $233F7061 & $FFFFFFFF
  Data.l $3372F092 & $FFFFFFFF, $8D937E41 & $FFFFFFFF, $D65FECF1 & $FFFFFFFF, $6C223BDB & $FFFFFFFF
  Data.l $7CDE3759 & $FFFFFFFF, $CBEE7460 & $FFFFFFFF, $4085F2A7 & $FFFFFFFF, $CE77326E & $FFFFFFFF
  Data.l $A6078084 & $FFFFFFFF, $19F8509E & $FFFFFFFF, $E8EFD855 & $FFFFFFFF, $61D99735 & $FFFFFFFF
  Data.l $A969A7AA & $FFFFFFFF, $C50C06C2 & $FFFFFFFF, $5A04ABFC & $FFFFFFFF, $800BCADC & $FFFFFFFF
  Data.l $9E447A2E & $FFFFFFFF, $C3453484 & $FFFFFFFF, $FDD56705 & $FFFFFFFF, $0E1E9EC9 & $FFFFFFFF
  Data.l $DB73DBD3 & $FFFFFFFF, $105588CD & $FFFFFFFF, $675FDA79 & $FFFFFFFF, $E3674340 & $FFFFFFFF
  Data.l $C5C43465 & $FFFFFFFF, $713E38D8 & $FFFFFFFF, $3D28F89E & $FFFFFFFF, $F16DFF20 & $FFFFFFFF
  Data.l $153E21E7 & $FFFFFFFF, $8FB03D4A & $FFFFFFFF, $E6E39F2B & $FFFFFFFF, $DB83ADF7 & $FFFFFFFF
  Data.l $E93D5A68 & $FFFFFFFF, $948140F7 & $FFFFFFFF, $F64C261C & $FFFFFFFF, $94692934 & $FFFFFFFF
  Data.l $411520F7 & $FFFFFFFF, $7602D4F7 & $FFFFFFFF, $BCF46B2E & $FFFFFFFF, $D4A20068 & $FFFFFFFF
  Data.l $D4082471 & $FFFFFFFF, $3320F46A & $FFFFFFFF, $43B7D4B7 & $FFFFFFFF, $500061AF & $FFFFFFFF
  Data.l $1E39F62E & $FFFFFFFF, $97244546 & $FFFFFFFF, $14214F74 & $FFFFFFFF, $BF8B8840 & $FFFFFFFF
  Data.l $4D95FC1D & $FFFFFFFF, $96B591AF & $FFFFFFFF, $70F4DDD3 & $FFFFFFFF, $66A02F45 & $FFFFFFFF
  Data.l $BFBC09EC & $FFFFFFFF, $03BD9785 & $FFFFFFFF, $7FAC6DD0 & $FFFFFFFF, $31CB8504 & $FFFFFFFF
  Data.l $96EB27B3 & $FFFFFFFF, $55FD3941 & $FFFFFFFF, $DA2547E6 & $FFFFFFFF, $ABCA0A9A & $FFFFFFFF
  Data.l $28507825 & $FFFFFFFF, $530429F4 & $FFFFFFFF, $0A2C86DA & $FFFFFFFF, $E9B66DFB & $FFFFFFFF
  Data.l $68DC1462 & $FFFFFFFF, $D7486900 & $FFFFFFFF, $680EC0A4 & $FFFFFFFF, $27A18DEE & $FFFFFFFF
  Data.l $4F3FFEA2 & $FFFFFFFF, $E887AD8C & $FFFFFFFF, $B58CE006 & $FFFFFFFF, $7AF4D6B6 & $FFFFFFFF
  Data.l $AACE1E7C & $FFFFFFFF, $D3375FEC & $FFFFFFFF, $CE78A399 & $FFFFFFFF, $406B2A42 & $FFFFFFFF
  Data.l $20FE9E35 & $FFFFFFFF, $D9F385B9 & $FFFFFFFF, $EE39D7AB & $FFFFFFFF, $3B124E8B & $FFFFFFFF
  Data.l $1DC9FAF7 & $FFFFFFFF, $4B6D1856 & $FFFFFFFF, $26A36631 & $FFFFFFFF, $EAE397B2 & $FFFFFFFF
  Data.l $3A6EFA74 & $FFFFFFFF, $DD5B4332 & $FFFFFFFF, $6841E7F7 & $FFFFFFFF, $CA7820FB & $FFFFFFFF
  Data.l $FB0AF54E & $FFFFFFFF, $D8FEB397 & $FFFFFFFF, $454056AC & $FFFFFFFF, $BA489527 & $FFFFFFFF
  Data.l $55533A3A & $FFFFFFFF, $20838D87 & $FFFFFFFF, $FE6BA9B7 & $FFFFFFFF, $D096954B & $FFFFFFFF
  Data.l $55A867BC & $FFFFFFFF, $A1159A58 & $FFFFFFFF, $CCA92963 & $FFFFFFFF, $99E1DB33 & $FFFFFFFF
  Data.l $A62A4A56 & $FFFFFFFF, $3F3125F9 & $FFFFFFFF, $5EF47E1C & $FFFFFFFF, $9029317C & $FFFFFFFF
  Data.l $FDF8E802 & $FFFFFFFF, $04272F70 & $FFFFFFFF, $80BB155C & $FFFFFFFF, $05282CE3 & $FFFFFFFF
  Data.l $95C11548 & $FFFFFFFF, $E4C66D22 & $FFFFFFFF, $48C1133F & $FFFFFFFF, $C70F86DC & $FFFFFFFF
  Data.l $07F9C9EE & $FFFFFFFF, $41041F0F & $FFFFFFFF, $404779A4 & $FFFFFFFF, $5D886E17 & $FFFFFFFF
  Data.l $325F51EB & $FFFFFFFF, $D59BC0D1 & $FFFFFFFF, $F2BCC18F & $FFFFFFFF, $41113564 & $FFFFFFFF
  Data.l $257B7834 & $FFFFFFFF, $602A9C60 & $FFFFFFFF, $DFF8E8A3 & $FFFFFFFF, $1F636C1B & $FFFFFFFF
  Data.l $0E12B4C2 & $FFFFFFFF, $02E1329E & $FFFFFFFF, $AF664FD1 & $FFFFFFFF, $CAD18115 & $FFFFFFFF
  Data.l $6B2395E0 & $FFFFFFFF, $333E92E1 & $FFFFFFFF, $3B240B62 & $FFFFFFFF, $EEBEB922 & $FFFFFFFF
  Data.l $85B2A20E & $FFFFFFFF, $E6BA0D99 & $FFFFFFFF, $DE720C8C & $FFFFFFFF, $2DA2F728 & $FFFFFFFF
  Data.l $D0127845 & $FFFFFFFF, $95B794FD & $FFFFFFFF, $647D0862 & $FFFFFFFF, $E7CCF5F0 & $FFFFFFFF
  Data.l $5449A36F & $FFFFFFFF, $877D48FA & $FFFFFFFF, $C39DFD27 & $FFFFFFFF, $F33E8D1E & $FFFFFFFF
  Data.l $0A476341 & $FFFFFFFF, $992EFF74 & $FFFFFFFF, $3A6F6EAB & $FFFFFFFF, $F4F8FD37 & $FFFFFFFF
  Data.l $A812DC60 & $FFFFFFFF, $A1EBDDF8 & $FFFFFFFF, $991BE14C & $FFFFFFFF, $DB6E6B0D & $FFFFFFFF
  Data.l $C67B5510 & $FFFFFFFF, $6D672C37 & $FFFFFFFF, $2765D43B & $FFFFFFFF, $DCD0E804 & $FFFFFFFF
  Data.l $F1290DC7 & $FFFFFFFF, $CC00FFA3 & $FFFFFFFF, $B5390F92 & $FFFFFFFF, $690FED0B & $FFFFFFFF
  Data.l $667B9FFB & $FFFFFFFF, $CEDB7D9C & $FFFFFFFF, $A091CF0B & $FFFFFFFF, $D9155EA3 & $FFFFFFFF
  Data.l $BB132F88 & $FFFFFFFF, $515BAD24 & $FFFFFFFF, $7B9479BF & $FFFFFFFF, $763BD6EB & $FFFFFFFF
  Data.l $37392EB3 & $FFFFFFFF, $CC115979 & $FFFFFFFF, $8026E297 & $FFFFFFFF, $F42E312D & $FFFFFFFF
  Data.l $6842ADA7 & $FFFFFFFF, $C66A2B3B & $FFFFFFFF, $12754CCC & $FFFFFFFF, $782EF11C & $FFFFFFFF
  Data.l $6A124237 & $FFFFFFFF, $B79251E7 & $FFFFFFFF, $06A1BBE6 & $FFFFFFFF, $4BFB6350 & $FFFFFFFF
  Data.l $1A6B1018 & $FFFFFFFF, $11CAEDFA & $FFFFFFFF, $3D25BDD8 & $FFFFFFFF, $E2E1C3C9 & $FFFFFFFF
  Data.l $44421659 & $FFFFFFFF, $0A121386 & $FFFFFFFF, $D90CEC6E & $FFFFFFFF, $D5ABEA2A & $FFFFFFFF
  Data.l $64AF674E & $FFFFFFFF, $DA86A85F & $FFFFFFFF, $BEBFE988 & $FFFFFFFF, $64E4C3FE & $FFFFFFFF
  Data.l $9DBC8057 & $FFFFFFFF, $F0F7C086 & $FFFFFFFF, $60787BF8 & $FFFFFFFF, $6003604D & $FFFFFFFF
  Data.l $D1FD8346 & $FFFFFFFF, $F6381FB0 & $FFFFFFFF, $7745AE04 & $FFFFFFFF, $D736FCCC & $FFFFFFFF
  Data.l $83426B33 & $FFFFFFFF, $F01EAB71 & $FFFFFFFF, $B0804187 & $FFFFFFFF, $3C005E5F & $FFFFFFFF
  Data.l $77A057BE & $FFFFFFFF, $BDE8AE24 & $FFFFFFFF, $55464299 & $FFFFFFFF, $BF582E61 & $FFFFFFFF
  Data.l $4E58F48F & $FFFFFFFF, $F2DDFDA2 & $FFFFFFFF, $F474EF38 & $FFFFFFFF, $8789BDC2 & $FFFFFFFF
  Data.l $5366F9C3 & $FFFFFFFF, $C8B38E74 & $FFFFFFFF, $B475F255 & $FFFFFFFF, $46FCD9B9 & $FFFFFFFF
  Data.l $7AEB2661 & $FFFFFFFF, $8B1DDF84 & $FFFFFFFF, $846A0E79 & $FFFFFFFF, $915F95E2 & $FFFFFFFF
  Data.l $466E598E & $FFFFFFFF, $20B45770 & $FFFFFFFF, $8CD55591 & $FFFFFFFF, $C902DE4C & $FFFFFFFF
  Data.l $B90BACE1 & $FFFFFFFF, $BB8205D0 & $FFFFFFFF, $11A86248 & $FFFFFFFF, $7574A99E & $FFFFFFFF
  Data.l $B77F19B6 & $FFFFFFFF, $E0A9DC09 & $FFFFFFFF, $662D09A1 & $FFFFFFFF, $C4324633 & $FFFFFFFF
  Data.l $E85A1F02 & $FFFFFFFF, $09F0BE8C & $FFFFFFFF, $4A99A025 & $FFFFFFFF, $1D6EFE10 & $FFFFFFFF
  Data.l $1AB93D1D & $FFFFFFFF, $0BA5A4DF & $FFFFFFFF, $A186F20F & $FFFFFFFF, $2868F169 & $FFFFFFFF
  Data.l $DCB7DA83 & $FFFFFFFF, $573906FE & $FFFFFFFF, $A1E2CE9B & $FFFFFFFF, $4FCD7F52 & $FFFFFFFF
  Data.l $50115E01 & $FFFFFFFF, $A70683FA & $FFFFFFFF, $A002B5C4 & $FFFFFFFF, $0DE6D027 & $FFFFFFFF
  Data.l $9AF88C27 & $FFFFFFFF, $773F8641 & $FFFFFFFF, $C3604C06 & $FFFFFFFF, $61A806B5 & $FFFFFFFF
  Data.l $F0177A28 & $FFFFFFFF, $C0F586E0 & $FFFFFFFF, $006058AA & $FFFFFFFF, $30DC7D62 & $FFFFFFFF
  Data.l $11E69ED7 & $FFFFFFFF, $2338EA63 & $FFFFFFFF, $53C2DD94 & $FFFFFFFF, $C2C21634 & $FFFFFFFF
  Data.l $BBCBEE56 & $FFFFFFFF, $90BCB6DE & $FFFFFFFF, $EBFC7DA1 & $FFFFFFFF, $CE591D76 & $FFFFFFFF
  Data.l $6F05E409 & $FFFFFFFF, $4B7C0188 & $FFFFFFFF, $39720A3D & $FFFFFFFF, $7C927C24 & $FFFFFFFF
  Data.l $86E3725F & $FFFFFFFF, $724D9DB9 & $FFFFFFFF, $1AC15BB4 & $FFFFFFFF, $D39EB8FC & $FFFFFFFF
  Data.l $ED545578 & $FFFFFFFF, $08FCA5B5 & $FFFFFFFF, $D83D7CD3 & $FFFFFFFF, $4DAD0FC4 & $FFFFFFFF
  Data.l $1E50EF5E & $FFFFFFFF, $B161E6F8 & $FFFFFFFF, $A28514D9 & $FFFFFFFF, $6C51133C & $FFFFFFFF
  Data.l $6FD5C7E7 & $FFFFFFFF, $56E14EC4 & $FFFFFFFF, $362ABFCE & $FFFFFFFF, $DDC6C837 & $FFFFFFFF
  Data.l $D79A3234 & $FFFFFFFF, $92638212 & $FFFFFFFF, $670EFA8E & $FFFFFFFF, $406000E0 & $FFFFFFFF
  Data.l $3A39CE37 & $FFFFFFFF, $D3FAF5CF & $FFFFFFFF, $ABC27737 & $FFFFFFFF, $5AC52D1B & $FFFFFFFF
  Data.l $5CB0679E & $FFFFFFFF, $4FA33742 & $FFFFFFFF, $D3822740 & $FFFFFFFF, $99BC9BBE & $FFFFFFFF
  Data.l $D5118E9D & $FFFFFFFF, $BF0F7315 & $FFFFFFFF, $D62D1C7E & $FFFFFFFF, $C700C47B & $FFFFFFFF
  Data.l $B78C1B6B & $FFFFFFFF, $21A19045 & $FFFFFFFF, $B26EB1BE & $FFFFFFFF, $6A366EB4 & $FFFFFFFF
  Data.l $5748AB2F & $FFFFFFFF, $BC946E79 & $FFFFFFFF, $C6A376D2 & $FFFFFFFF, $6549C2C8 & $FFFFFFFF
  Data.l $530FF8EE & $FFFFFFFF, $468DDE7D & $FFFFFFFF, $D5730A1D & $FFFFFFFF, $4CD04DC6 & $FFFFFFFF
  Data.l $2939BBDB & $FFFFFFFF, $A9BA4650 & $FFFFFFFF, $AC9526E8 & $FFFFFFFF, $BE5EE304 & $FFFFFFFF
  Data.l $A1FAD5F0 & $FFFFFFFF, $6A2D519A & $FFFFFFFF, $63EF8CE2 & $FFFFFFFF, $9A86EE22 & $FFFFFFFF
  Data.l $C089C2B8 & $FFFFFFFF, $43242EF6 & $FFFFFFFF, $A51E03AA & $FFFFFFFF, $9CF2D0A4 & $FFFFFFFF
  Data.l $83C061BA & $FFFFFFFF, $9BE96A4D & $FFFFFFFF, $8FE51550 & $FFFFFFFF, $BA645BD6 & $FFFFFFFF
  Data.l $2826A2F9 & $FFFFFFFF, $A73A3AE1 & $FFFFFFFF, $4BA99586 & $FFFFFFFF, $EF5562E9 & $FFFFFFFF
  Data.l $C72FEFD3 & $FFFFFFFF, $F752F7DA & $FFFFFFFF, $3F046F69 & $FFFFFFFF, $77FA0A59 & $FFFFFFFF
  Data.l $80E4A915 & $FFFFFFFF, $87B08601 & $FFFFFFFF, $9B09E6AD & $FFFFFFFF, $3B3EE593 & $FFFFFFFF
  Data.l $E990FD5A & $FFFFFFFF, $9E34D797 & $FFFFFFFF, $2CF0B7D9 & $FFFFFFFF, $022B8B51 & $FFFFFFFF
  Data.l $96D5AC3A & $FFFFFFFF, $017DA67D & $FFFFFFFF, $D1CF3ED6 & $FFFFFFFF, $7C7D2D28 & $FFFFFFFF
  Data.l $1F9F25CF & $FFFFFFFF, $ADF2B89B & $FFFFFFFF, $5AD6B472 & $FFFFFFFF, $5A88F54C & $FFFFFFFF
  Data.l $E029AC71 & $FFFFFFFF, $E019A5E6 & $FFFFFFFF, $47B0ACFD & $FFFFFFFF, $ED93FA9B & $FFFFFFFF
  Data.l $E8D3C48D & $FFFFFFFF, $283B57CC & $FFFFFFFF, $F8D56629 & $FFFFFFFF, $79132E28 & $FFFFFFFF
  Data.l $785F0191 & $FFFFFFFF, $ED756055 & $FFFFFFFF, $F7960E44 & $FFFFFFFF, $E3D35E8C & $FFFFFFFF
  Data.l $15056DD4 & $FFFFFFFF, $88F46DBA & $FFFFFFFF, $03A16125 & $FFFFFFFF, $0564F0BD & $FFFFFFFF
  Data.l $C3EB9E15 & $FFFFFFFF, $3C9057A2 & $FFFFFFFF, $97271AEC & $FFFFFFFF, $A93A072A & $FFFFFFFF
  Data.l $1B3F6D9B & $FFFFFFFF, $1E6321F5 & $FFFFFFFF, $F59C66FB & $FFFFFFFF, $26DCF319 & $FFFFFFFF
  Data.l $7533D928 & $FFFFFFFF, $B155FDF5 & $FFFFFFFF, $03563482 & $FFFFFFFF, $8ABA3CBB & $FFFFFFFF
  Data.l $28517711 & $FFFFFFFF, $C20AD9F8 & $FFFFFFFF, $ABCC5167 & $FFFFFFFF, $CCAD925F & $FFFFFFFF
  Data.l $4DE81751 & $FFFFFFFF, $3830DC8E & $FFFFFFFF, $379D5862 & $FFFFFFFF, $9320F991 & $FFFFFFFF
  Data.l $EA7A90C2 & $FFFFFFFF, $FB3E7BCE & $FFFFFFFF, $5121CE64 & $FFFFFFFF, $774FBE32 & $FFFFFFFF
  Data.l $A8B6E37E & $FFFFFFFF, $C3293D46 & $FFFFFFFF, $48DE5369 & $FFFFFFFF, $6413E680 & $FFFFFFFF
  Data.l $A2AE0810 & $FFFFFFFF, $DD6DB224 & $FFFFFFFF, $69852DFD & $FFFFFFFF, $09072166 & $FFFFFFFF
  Data.l $B39A460A & $FFFFFFFF, $6445C0DD & $FFFFFFFF, $586CDECF & $FFFFFFFF, $1C20C8AE & $FFFFFFFF
  Data.l $5BBEF7DD & $FFFFFFFF, $1B588D40 & $FFFFFFFF, $CCD2017F & $FFFFFFFF, $6BB4E3BB & $FFFFFFFF
  Data.l $DDA26A7E & $FFFFFFFF, $3A59FF45 & $FFFFFFFF, $3E350A44 & $FFFFFFFF, $BCB4CDD5 & $FFFFFFFF
  Data.l $72EACEA8 & $FFFFFFFF, $FA6484BB & $FFFFFFFF, $8D6612AE & $FFFFFFFF, $BF3C6F47 & $FFFFFFFF
  Data.l $D29BE463 & $FFFFFFFF, $542F5D9E & $FFFFFFFF, $AEC2771B & $FFFFFFFF, $F64E6370 & $FFFFFFFF
  Data.l $740E0D8D & $FFFFFFFF, $E75B1357 & $FFFFFFFF, $F8721671 & $FFFFFFFF, $AF537D5D & $FFFFFFFF
  Data.l $4040CB08 & $FFFFFFFF, $4EB4E2CC & $FFFFFFFF, $34D2466A & $FFFFFFFF, $0115AF84 & $FFFFFFFF
  Data.l $E1B00428 & $FFFFFFFF, $95983A1D & $FFFFFFFF, $06B89FB4 & $FFFFFFFF, $CE6EA048 & $FFFFFFFF
  Data.l $6F3F3B82 & $FFFFFFFF, $3520AB82 & $FFFFFFFF, $011A1D4B & $FFFFFFFF, $277227F8 & $FFFFFFFF
  Data.l $611560B1 & $FFFFFFFF, $E7933FDC & $FFFFFFFF, $BB3A792B & $FFFFFFFF, $344525BD & $FFFFFFFF
  Data.l $A08839E1 & $FFFFFFFF, $51CE794B & $FFFFFFFF, $2F32C9B7 & $FFFFFFFF, $A01FBAC9 & $FFFFFFFF
  Data.l $E01CC87E & $FFFFFFFF, $BCC7D1F6 & $FFFFFFFF, $CF0111C3 & $FFFFFFFF, $A1E8AAC7 & $FFFFFFFF
  Data.l $1A908749 & $FFFFFFFF, $D44FBD9A & $FFFFFFFF, $D0DADECB & $FFFFFFFF, $D50ADA38 & $FFFFFFFF
  Data.l $0339C32A & $FFFFFFFF, $C6913667 & $FFFFFFFF, $8DF9317C & $FFFFFFFF, $E0B12B4F & $FFFFFFFF
  Data.l $F79E59B7 & $FFFFFFFF, $43F5BB3A & $FFFFFFFF, $F2D519FF & $FFFFFFFF, $27D9459C & $FFFFFFFF
  Data.l $BF97222C & $FFFFFFFF, $15E6FC2A & $FFFFFFFF, $0F91FC71 & $FFFFFFFF, $9B941525 & $FFFFFFFF
  Data.l $FAE59361 & $FFFFFFFF, $CEB69CEB & $FFFFFFFF, $C2A86459 & $FFFFFFFF, $12BAA8D1 & $FFFFFFFF
  Data.l $B6C1075E & $FFFFFFFF, $E3056A0C & $FFFFFFFF, $10D25065 & $FFFFFFFF, $CB03A442 & $FFFFFFFF
  Data.l $E0EC6E0E & $FFFFFFFF, $1698DB3B & $FFFFFFFF, $4C98A0BE & $FFFFFFFF, $3278E964 & $FFFFFFFF
  Data.l $9F1F9532 & $FFFFFFFF, $E0D392DF & $FFFFFFFF, $D3A0342B & $FFFFFFFF, $8971F21E & $FFFFFFFF
  Data.l $1B0A7441 & $FFFFFFFF, $4BA3348C & $FFFFFFFF, $C5BE7120 & $FFFFFFFF, $C37632D8 & $FFFFFFFF
  Data.l $DF359F8D & $FFFFFFFF, $9B992F2E & $FFFFFFFF, $E60B6F47 & $FFFFFFFF, $0FE3F11D & $FFFFFFFF
  Data.l $E54CDA54 & $FFFFFFFF, $1EDAD891 & $FFFFFFFF, $CE6279CF & $FFFFFFFF, $CD3E7E6F & $FFFFFFFF
  Data.l $1618B166 & $FFFFFFFF, $FD2C1D05 & $FFFFFFFF, $848FD2C5 & $FFFFFFFF, $F6FB2299 & $FFFFFFFF
  Data.l $F523F357 & $FFFFFFFF, $A6327623 & $FFFFFFFF, $93A83531 & $FFFFFFFF, $56CCCD02 & $FFFFFFFF
  Data.l $ACF08162 & $FFFFFFFF, $5A75EBB5 & $FFFFFFFF, $6E163697 & $FFFFFFFF, $88D273CC & $FFFFFFFF
  Data.l $DE966292 & $FFFFFFFF, $81B949D0 & $FFFFFFFF, $4C50901B & $FFFFFFFF, $71C65614 & $FFFFFFFF
  Data.l $E6C6C7BD & $FFFFFFFF, $327A140A & $FFFFFFFF, $45E1D006 & $FFFFFFFF, $C3F27B9A & $FFFFFFFF
  Data.l $C9AA53FD & $FFFFFFFF, $62A80F00 & $FFFFFFFF, $BB25BFE2 & $FFFFFFFF, $35BDD2F6 & $FFFFFFFF
  Data.l $71126905 & $FFFFFFFF, $B2040222 & $FFFFFFFF, $B6CBCF7C & $FFFFFFFF, $CD769C2B & $FFFFFFFF
  Data.l $53113EC0 & $FFFFFFFF, $1640E3D3 & $FFFFFFFF, $38ABBD60 & $FFFFFFFF, $2547ADF0 & $FFFFFFFF
  Data.l $BA38209C & $FFFFFFFF, $F746CE76 & $FFFFFFFF, $77AFA1C5 & $FFFFFFFF, $20756060 & $FFFFFFFF
  Data.l $85CBFE4E & $FFFFFFFF, $8AE88DD8 & $FFFFFFFF, $7AAAF9B0 & $FFFFFFFF, $4CF9AA7E & $FFFFFFFF
  Data.l $1948C25C & $FFFFFFFF, $02FB8A8C & $FFFFFFFF, $01C36AE4 & $FFFFFFFF, $D6EBE1F9 & $FFFFFFFF
  Data.l $90D4F869 & $FFFFFFFF, $A65CDEA0 & $FFFFFFFF, $3F09252D & $FFFFFFFF, $C208E69F & $FFFFFFFF
  Data.l $B74E6132 & $FFFFFFFF, $CE77E25B & $FFFFFFFF, $578FDFE3 & $FFFFFFFF, $3AC372E6 & $FFFFFFFF
EndDataSection