V10/cmd/sum/snefru.bundle

sed 's/^	//' >README <<\*-*-END-*-*
	To compile:
	
	cc -o hash2.0 hash2.0.c standardSBoxes2.c
	
	To run:
	
	<inputFile hash2.0
	
	The inputFile is read and a hash value computed from it.  The hash
	value is then printed on standard out.
	
	options:
	
	You can increase the number of iterations to 4 by saying:
	
	<inputFile hash2.0 4
	
	You can increase the size of the output to 256 bits by saying:
	
	<inputFile hash2.0 4 256
*-*-END-*-*
sed 's/^	//' >hash2.0.c <<\*-*-END-*-*
	/* This is a reference implementation of Snefru. Snefru is a one-way hash
	   function that provides authentication. It does not provide secrecy.
	
	Snefru is named after a Pharaoh of ancient Egypt.
	
	
	
	Copyright (c) Xerox Corporation 1989 All rights reserved.
	
	License to  copy and use this software is granted provided that it is
	   identified as the 'Xerox Secure Hash Function' in all material mentioning
	   or referencing this software or this hash function.
	
	License is also granted to make and use derivative works provided that such
	   works are identified as 'derived from the Xerox Secure Hash Function' in
	   all material mentioning or referencing the derived work.
	
	Xerox Corporation makes no representations concerning either the
	   merchantability of this software or the suitability of this software for
	   any particular purpose.  It is provided "as is" without express or implied
	   warranty of any kind.
	
	These notices must be retained in any copies of any part of this software.
	
	
	
	This is version 2.0, July 31, 1989.
	
	Version 2.0 is algorithmically different from versions 1.4 and 1.3.
	In particular, version 2.0 makes the following changes:
	
	1.)  The S-boxes in version 2.0 have been computed in accordance with a
	   publicly known algorithm.
	
	2.)  The special case handling of inputs shorter than 64 bytes has been
	   deleted.  This special case code offered little performance advantage and
	   increased the complexity of the algorithm.  In addition, Coppersmith
	   noticed a weakness that affected the 128-bit-input/128-bit-output version
	   of Snefru (though not the 512-bit input/128-bit or 256-bit output version).
	
	3.)  The parameters p0, p1, and p2 have been eliminated.  There are several
	   reasons for this change.  The principle reason is that they increase the
	   complexity both of the code and the conceptual complexity of the hash
	   function, and provide only modest improvement in security.
	
	4.)  Because the parameter mechanism was used to distinguish between inputs
	   that differ only in the number of trailing 0 bits, a different mechanism
	   has been adopted.  This new mechanism simply counts the number of bits in
	   the input, and then places this 64-bit bit-count into the rightmost
	   64-bits of the last block hashed.  A slightly different method of applying
	   the hash also been adopted.
	
	5.)	Several people requested a larger output (to provide greater
	   security). Because this will not always be needed, the algorithm was
	   modified to generate either 128 bits or 256 bits of output, depending on a
	   command line option.  Notice that 128 bits of output only provides 64
	   "real" bits of security (because of square root attacks) and similarly 256
	   bits of output provides only 128 "real" bits of security. Use of the
	   higher security 256-bit output will slow down the algorithm by about 1/3
	   (32 bytes per application of Hash512 versus 48 bytes per application of
	   Hash512).
	
	6.) Other non-algorithmic changes have been made to the code, in keeping
	   with various criticisms and comments.
	
	
	
	A 128 bit output should provide adequate security for most commercial
	   applications (barring discovery of some unexpected weakness in the
	   algorithm).  Where higher security is desired, the 256-bit output
	   size can be used.
	
	Version 1.4 differs from Version 1.3 only in the wording of the export
	   notice. Version 1.3 forbids export entirely.
	
	Version 1.3 fixes a security bug in handling short files (64 bytes or less).
	   Such files should use the length of the file as a parameter to the hash,
	   to prevent two files of different lengths from producing the same hash
	   value if one file is a prefix of another.  This had been done for long
	   files (greater than 64 bytes in length) but was overlooked for short
	   files.
	
	In addition, Version 1.3 improves the way in which the parameter is mixed
	   into the hash.  In essence, the change mixes in the parameter one more
	   time. Although a similar effect can be achieved by increasing the security
	   parameter by 1 (e.g., from 2 to 3) this also increases the amount of
	   computation required by 50%.
	
	Version 1.3 also makes some more changes in the notices that accompany the
	   code.
	
	Version 1.2 makes no changes in the code.  Only the notices that accompany
	   the code have changed, and some changes in the comments.
	
	Version 1.1 added the routine 'convertBytes' to convert an array of 'char'
	   into an array of unsigned long int.  This conversion is a no-op on the SUN
	   and many other computers, but will have an effect on the VAX and computers
	   with 'backwards' byte ordering.  It will also SLOW DOWN THE HASH FUNCTION,
	   so it should be removed whenever possible if speed is an issue.
	
	This program reads from the standard input until EOF is reached (the first
	   'read' that does not return a full buffer of data).  The data on the
	   standard input is 'hashed' with a cryptographically secure one-way hash
	   function (also known as a 'message digest', 'fingerprint', 'Manipulation
	   Detection Code' or 'MDC').  The hash is then printed on the standard
	   output.
	
	The input can be of any size.  The output is either 128 bits printed as 32
	   characters in hex, or 256 bits printed as 64 characters in hex.
	
	The primary use of one-way hash functions is to determine if there have been
	   any unauthorized, malicious, or accidental changes made to a file.  For
	   example, if an executable program file produces the hash '209884c4
	   2e89d967 5456ac0e 61269550', then any change to that program file will
	   cause the hash to be changed.  Thus, the tampering can be detected by
	   comparing the current output value with the previously computed (and
	   presumably correct) output value.
	
	Hash512 is the centrol routine in this program.  It is used in this program
	   in a linear fashion -- i.e., a sequential file is hashed down by repeated
	   applications of Hash512.  Changing a single bit in the file would then
	   require completely re-computing the hash from the point of change onward.
	
	Hash512 can be used in a tree-structured fashion to authenticate a large
	   table of data. This would imply that changing a single bit would not force
	   a complete re-computation of the hash value, but would instead require
	   only log n re-computations of Hash512 to 'patch up' the changes along the
	   path from the root to the changed leaf entry. A tree-structured
	   application also has the advantage that any single entry in the table can
	   subsequently be authenticated by someone who knows only the
	   'authentication path' from the root of the tree to the leaf entry.  These
	   concepts are discussed more thoroughly in 'Secrecy, Authentication, and
	   Public Key Systems' by Ralph C. Merkle, UMI Research Press, 1982 (see
	   particularly Chapter 2, 'One Way Hash Functions').  The use of a
	   tree-structured pattern of applications of a one-way hash function is
	   covered by U.S. Patent #4,309,569, 'Method of Providing Digital
	   Signatures' (contact Stanford University, Office of Technology Licensing).
	
	
	At the present time (July 31, 1989) the author knows of no method for
	   'breaking' this one-way function, (i.e., finding two input files that
	   produce the same output value). The algorithm has undergone some review
	   for security.  Further review is expected.  Use of this algorithm for
	   production use is not recomended at this time.  Note that we are
	   specifically examining the security of Hash512 with a 512-bit input and a
	   128-bit output, and Hash512 with a 512-bit input and a 256-bit output.
	   Use of other sizes is not recomended at this time.  In particular, we
	   recomend against the use of output sizes smaller than 128 bits, and
	   recomend against the use of an input that is less than 2 (two) times the
	   size of the output.  When the input size equals the output size, Snefru
	   suffers a serious degradation in security (an observation due to
	   Coppersmith).
	
	If anyone using this program finds two different inputs that produce the same
	   output, please contact Ralph C. Merkle via E-mail (merkle@xerox.com) or
	   via normal mail at: Xerox PARC 3333 Coyote Hill Road Palo Alto, CA 94304
	   (415) 494-4000
	
	
	See the paper 'A Software One Way Hash Function', by Ralph C. Merkle, for a
	   more detailed explanation.
	
	The following test cases were taken directly from a terminal, and can be used
	   to verify the correct functioning of an implementation of Snefru.  The
	   first input is simply a carriage return.  The second input is '1', the
	   third input is '12', etc.  The test sequence is repeated with security
	   parameter "4" and with the output size set to "256".
	
	% hash
	
	 13af7619 ab98d4b5 f5e0a9e6 b26b5452
	% hash
	1
	 578c83f8 8fe1f6a8 c119d2ba 3a9256c2
	% hash
	12
	 255468d4 b4bd985b 696a7313 6027fc80
	% hash
	123
	 f5339a52 9c4dafc5 34fe3f0d 7a66baf7
	% hash
	1234
	 2645ff86 9a6c0ec6 5c49c20d d9050165
	% hash
	12345
	 387d2929 8ed52ece 88e64f38 fe4fdb11
	% hash
	123456
	 f29f8915 d23a0e02 838cc2e2 75f5dfe7
	% hash
	1234567
	 4fb0f76e 9af16a2d 61844b9c e833e18f
	% hash
	12345678
	 aacc56fc 85910fef e81fc697 6b061f4e
	% hash
	123456789
	 e6997849 44ed68a1 c762ea1e 90c77967
	
	
	% hash 4 256
	
	 6c504351 ce7f4b7a 93adb29a f9781ff9 2150f157 fee18661 eef511a3 fc83ddf
	% hash 4 256
	1
	 65d657f8 85ad8b4a b35999cc 3ded8b82 7cf71fa4 25424750 35778910 d6c2e320
	% hash 4 256
	12
	 7636f3d1 af139cf9 58f46f99 66221282 a444732a 7de59da5 d3481c6b bd6e7092
	% hash 4 256
	123
	 cd3c7163 5b14c7c2 c24be864 4baab592 b8ab5b99 91ee5ee5 b3cf7a7f c6426ad7
	% hash 4 256
	1234
	 9ba783a1 290cb21e fe196a02 3286ece5 49394c75 1ddd607e 5d67c4dc 549c62eb
	% hash 4 256
	12345
	 c9680da8 ef00d2f8 4459a8e9 b50ada71 c63cae6f dcb6f774 f6998783 30a4a1f4
	% hash 4 256
	123456
	 7656d389 f980bbe8 94152abe c6dc5f16 faf21c60 3b8f5098 861acf3c c059467b
	% hash 4 256
	1234567
	 d96eb599 8377bb1d 74a02a2f ac9a85 3175250e 4796af36 36609747 372bba80
	% hash 4 256
	12345678
	 b7818f09 2118e98a 140af09a 6cca4e6f 1eba88e7 52c20174 653637c9 d628f33f
	% hash 4 256
	123456789
	 c2242249 1187baaa 94725400 8dffd5b 38f01557 9f3f2390 50969991 fdc1a810
	% 
	
	
	
	Note that 'unsigned long int' MUST be 32 bits
	
	Implementor:  Ralph C. Merkle
	
	*/
	
	
	
	
	#define inputFile  0		/* normally set up for standard in */
	#define errorFile  2		/* normally set up for standard error */
	
	/* WARNING:  Changing the following parameter may affect security in
	   non-obvious ways  */
	#define inputBlockSize  16	/* size in 32-bit words of an input block to
					   the hash routine  */
	#define maxOutputBlockSize  8	/* size in 32-bit words of largest output
					   block from the hash routine */
	
	
	
	#define bufferSize  3072	/* MUST be 3 * 2**n,  n > 5  */
	#define bufferSizeInWords  768	/* MUST be bufferSize/4  */
	#define maxSBoxCount 8
	#define maxSBoxCountDiv2 4	/* has to equal maxSBoxCount/2, of course */
	#define maxWordCount 16		/* maximum valid value for wordCount  */
	
	/* Note that the following variable should be set either to 4 or to 8.  */
	int     outputBlockSize = 4;	/* default to normal 4 32-bit word or 128 bit
					   output size */
	
	/* default to normal 48-byte chunk size. Must be
	   inputBlockSize-outputBlockSize  */
	int     chunkSize = 12;
	
	/* initialize the default value for the security parameter */
	int     securityLevel = 2;
	
	int     shiftTable[4] = {16, 8, 16, 24};
	
	typedef unsigned long int sBox[256];
	
	
	/* The standard S boxes must be defined in another file */
	extern sBox standardSBoxes[maxSBoxCount];
	
	
	/* an array needed only for the fast version of HashN -- Hash512.   It's safe
	   to ignore this array if you don't need to understand the speeded up
	   version.  Note that the 32-bit word specified by
	   'rotatedRightStandardSBoxes[i][j][k]' is rotated right by i*8 bits  */
	sBox    rotatedRightStandardSBoxes[4][maxSBoxCount];
	
	
	
	/* The following routine is a simple error exit routine  -- it prints a
	   message and aborts */
	void    errAbort (s)
		char   *s;
	{
		int     length;
	
		for (length = 0; s[length] != 0; length++);
		if (write (errorFile, s, length) != length)
			exit (2);
		if (write (errorFile, "\n", 1) != 1)
			exit (2);
		exit (1);
	};
	
	
	/* The following routine converts a byte array to an array of unsigned long
	   int.  It is primarily intended to eliminate the byte-ordering problem.
	   VAXes order the bytes in a character array differently than SUN's do. Note
	   that this routine will SLOW DOWN THE HASH FUNCTION */
	void    convertBytes (buffer, wordBuffer)
		char    buffer[bufferSize];
	unsigned long int wordBuffer[bufferSizeInWords];
	
	{
		int     i;
		unsigned long int t0, t1, t2, t3;
	
		/* buffer --        an input buffer of characters
		
		wordBuffer --  an output buffer of unsigned long int's
		
		*/
	
		for (i = 0; i < bufferSizeInWords; i++) {
	
			t0 = buffer[4 * i];
			t1 = buffer[4 * i + 1];
			t2 = buffer[4 * i + 2];
			t3 = buffer[4 * i + 3];
			t0 &= 0xff;
			t1 &= 0xff;
			t2 &= 0xff;
			t3 &= 0xff;
			wordBuffer[i] = (t0 << 24) | (t1 << 16) | (t2 << 8) | t3;
	
		};
	
	};
	
	
	
	void    HashN (output, wordCount, input, localSecurityLevel)
		unsigned long int output[maxOutputBlockSize];
	int     wordCount;
	unsigned long int input[];
	int     localSecurityLevel;
	
	{
	
		/* Note that we are computing localSecurityLevel * wordCount * 4
		   rounds.  */
	
		unsigned long int mask;
		unsigned long int block[maxWordCount];	/* holds the array of data
							   being hashed  */
		unsigned long int SBoxEntry;	/* just a temporary */
		int     shift;
		int     i;
		int     index;
		int     next, last;
		int     byteInWord;
	
	
		mask = wordCount - 1;	/* presumes wordCount is a power of 2  */
	
	
		/* Test for various error conditions and logic problems  */
	
		if (localSecurityLevel * 2 > maxSBoxCount)
			errAbort ("Too few S-boxes");
		if (wordCount > maxWordCount)
			errAbort ("Logic error, wordCount > maxWordCount");
		if (wordCount != 16)
			errAbort ("Security warning, input size not equal to 512 bits");
		/* note that this routine will fail spectacularly on 8 byte blocks,
		   hence the following ban. */
		if (wordCount < 4)
			errAbort (" wordCount too small");
		if ((wordCount & mask) != 0)
			errAbort ("logic error, wordCount not a power of 2");
		if (outputBlockSize > wordCount)
			errAbort ("logic error, outputBlockSize is too big");
		if ((outputBlockSize != 4) & (outputBlockSize != 8))
			errAbort ("Output size neither 128 nor 256 bits");
	
		/* All the error condtions have now been checked -- everything should
		   work smoothly  */
	
	
		/* initialize the block to be encrypted from the input  */
		for (i = 0; i < wordCount; i++)
			block[i] = input[i];
	
	
	
		for (index = 0; index < localSecurityLevel; index++) {
	
	
			for (byteInWord = 0; byteInWord < 4; byteInWord++) {
	
	
				for (i = 0; i < wordCount; i++) {
					next = (i + 1) & mask;
					last = (i + mask) & mask;	/* really last = (i-1)
									   MOD wordCount */
	
					SBoxEntry = standardSBoxes[2 * index + ((i / 2) & 1)][block[i] & 0xff];
					block[next] ^= SBoxEntry;
					block[last] ^= SBoxEntry;
				};
	
	
				/* Rotate right all 32-bit words in the entire block
				   at once.  */
				shift = shiftTable[byteInWord];
				for (i = 0; i < wordCount; i++)
					block[i] = (block[i] >> shift) | (block[i] << (32 - shift));
	
	
			};		/* end of byteInWord going from 0 to 3 */
	
	
		};			/* end of index going from 0 to
					   localSecurityLevel-1 */
	
	
	
		for (i = 0; i < outputBlockSize; i++)
			output[i] = input[i] ^ block[mask - i];
	
	
	};
	
	
	
	
	void    Hash512 (output, input, localSecurityLevel)
		unsigned long int output[maxOutputBlockSize];
	unsigned long int input[];
	int     localSecurityLevel;
	
	{
	
		/* This routine is a specialized version of HashN.  It is optimized
		   for speed, and assumes that the input is always 16 words long
		   It hashes 512 bits, hence its name.  */
		/* You need not try to figure out this routine unless you wish to
		   figure out a fast implementation of Snefru  */
	
		/* the following are two pointers to S-boxes  */
		unsigned long int *SBox0;
		unsigned long int *SBox1;
	
	
		/* the array 'block' is divided into 16 distinct variables */
		unsigned long int block0, block1, block2, block3;
		unsigned long int block4, block5, block6, block7;
		unsigned long int block8, block9, block10, block11;
		unsigned long int block12, block13, block14, block15;
	
		unsigned long int SBoxEntry;	/* just a temporary */
		int     index;
	
		if (inputBlockSize != 16)
			errAbort ("Hash512 called with inputBlockSize != 16");
		if ((outputBlockSize != 4) & (outputBlockSize != 8))
			errAbort ("Hash512 called with outputBlockSize != 4 or 8");
	
		/* initialize the block to be encrypted from the input  */
		/* Note that in theory block<i> should be kept in register.  Not all
		   compilers can do this, even when there are enough registers --
		   this will degrade performance significantly.  */
		block0 = input[0];
		block1 = input[1];
		block2 = input[2];
		block3 = input[3];
		block4 = input[4];
		block5 = input[5];
		block6 = input[6];
		block7 = input[7];
		block8 = input[8];
		block9 = input[9];
		block10 = input[10];
		block11 = input[11];
		block12 = input[12];
		block13 = input[13];
		block14 = input[14];
		block15 = input[15];
	
	
	
		for (index = 0; index < 2 * localSecurityLevel; index += 2) {
	
	
			/* set up the base address for the two S-box pointers.  */
			SBox0 = rotatedRightStandardSBoxes[0][index];
			SBox1 = SBox0 + 256;
	
	
			/* In the following unrolled code, the basic 'assembly
			   language' block that is repeated is:
			
			1    temp1 = shift(block<i>, shiftConstant)
			2    temp2 = temp1 & 0x3fc
			3    temp3 = SBox<0 or 1> + temp2
			4    temp4 = *temp3
			5    block<i-1> ^= temp4
			6    block<i+1> ^= temp4
			
			In step 1, we simply shift the ith 32-bit block to bring the
			   8-bit byte into the right position.  Note that we will
			   also build-in a left-shift by 2 bits at this stage, to
			   eliminate the left shift required later because we are
			   indexing into an array of 4-byte table entries.
			
			In step 2, we mask off the desired 8 bits.  Note that 0x3fc
			   is simply 0xff << 2.
			
			In step 3, we use a normal integer add to compute the actual
			   address of the S-box entry.  Note that one of two pointers
			   is used, as appropriate.  Temp3 then holds the actual byte
			   address of the desired S-box entry.
			
			In step 4, we load the 4-byte S-box entry.
			
			In steps 5 and 6, we XOR the loaded S-box entry with both the
			   previous and the next 32-bit entries in the 'block' array.
			
			Typical optimizing comilers might fail to put all the
			   block<i> variables into registers. This can result in
			   significant performance degradation. Also, most compilers
			   will use a separate left-shift-by-2 after masking off the
			   needed 8 bits, but the performance degradation caused by
			   this oversight should be modest.
			
			*/
	
			SBoxEntry = SBox0[block0 & 0xff];
			block1 ^= SBoxEntry;
			block15 ^= SBoxEntry;
			SBoxEntry = SBox0[block1 & 0xff];
			block2 ^= SBoxEntry;
			block0 ^= SBoxEntry;
			SBoxEntry = SBox1[block2 & 0xff];
			block3 ^= SBoxEntry;
			block1 ^= SBoxEntry;
			SBoxEntry = SBox1[block3 & 0xff];
			block4 ^= SBoxEntry;
			block2 ^= SBoxEntry;
			SBoxEntry = SBox0[block4 & 0xff];
			block5 ^= SBoxEntry;
			block3 ^= SBoxEntry;
			SBoxEntry = SBox0[block5 & 0xff];
			block6 ^= SBoxEntry;
			block4 ^= SBoxEntry;
			SBoxEntry = SBox1[block6 & 0xff];
			block7 ^= SBoxEntry;
			block5 ^= SBoxEntry;
			SBoxEntry = SBox1[block7 & 0xff];
			block8 ^= SBoxEntry;
			block6 ^= SBoxEntry;
			SBoxEntry = SBox0[block8 & 0xff];
			block9 ^= SBoxEntry;
			block7 ^= SBoxEntry;
			SBoxEntry = SBox0[block9 & 0xff];
			block10 ^= SBoxEntry;
			block8 ^= SBoxEntry;
			SBoxEntry = SBox1[block10 & 0xff];
			block11 ^= SBoxEntry;
			block9 ^= SBoxEntry;
			SBoxEntry = SBox1[block11 & 0xff];
			block12 ^= SBoxEntry;
			block10 ^= SBoxEntry;
			SBoxEntry = SBox0[block12 & 0xff];
			block13 ^= SBoxEntry;
			block11 ^= SBoxEntry;
			SBoxEntry = SBox0[block13 & 0xff];
			block14 ^= SBoxEntry;
			block12 ^= SBoxEntry;
			SBoxEntry = SBox1[block14 & 0xff];
			block15 ^= SBoxEntry;
			block13 ^= SBoxEntry;
			SBoxEntry = SBox1[block15 & 0xff];
			block0 ^= SBoxEntry;
			block14 ^= SBoxEntry;
	
			/* SBox0 = rotatedRightStandardSBoxes[2][index];  */
			SBox0 += 2 * maxSBoxCount * 256;
			SBox1 = SBox0 + 256;
	
			SBoxEntry = SBox0[(block0 >> 16) & 0xff];
			block1 ^= SBoxEntry;
			block15 ^= SBoxEntry;
			SBoxEntry = SBox0[(block1 >> 16) & 0xff];
			block2 ^= SBoxEntry;
			block0 ^= SBoxEntry;
			SBoxEntry = SBox1[(block2 >> 16) & 0xff];
			block3 ^= SBoxEntry;
			block1 ^= SBoxEntry;
			SBoxEntry = SBox1[(block3 >> 16) & 0xff];
			block4 ^= SBoxEntry;
			block2 ^= SBoxEntry;
			SBoxEntry = SBox0[(block4 >> 16) & 0xff];
			block5 ^= SBoxEntry;
			block3 ^= SBoxEntry;
			SBoxEntry = SBox0[(block5 >> 16) & 0xff];
			block6 ^= SBoxEntry;
			block4 ^= SBoxEntry;
			SBoxEntry = SBox1[(block6 >> 16) & 0xff];
			block7 ^= SBoxEntry;
			block5 ^= SBoxEntry;
			SBoxEntry = SBox1[(block7 >> 16) & 0xff];
			block8 ^= SBoxEntry;
			block6 ^= SBoxEntry;
			SBoxEntry = SBox0[(block8 >> 16) & 0xff];
			block9 ^= SBoxEntry;
			block7 ^= SBoxEntry;
			SBoxEntry = SBox0[(block9 >> 16) & 0xff];
			block10 ^= SBoxEntry;
			block8 ^= SBoxEntry;
			SBoxEntry = SBox1[(block10 >> 16) & 0xff];
			block11 ^= SBoxEntry;
			block9 ^= SBoxEntry;
			SBoxEntry = SBox1[(block11 >> 16) & 0xff];
			block12 ^= SBoxEntry;
			block10 ^= SBoxEntry;
			SBoxEntry = SBox0[(block12 >> 16) & 0xff];
			block13 ^= SBoxEntry;
			block11 ^= SBoxEntry;
			SBoxEntry = SBox0[(block13 >> 16) & 0xff];
			block14 ^= SBoxEntry;
			block12 ^= SBoxEntry;
			SBoxEntry = SBox1[(block14 >> 16) & 0xff];
			block15 ^= SBoxEntry;
			block13 ^= SBoxEntry;
			SBoxEntry = SBox1[(block15 >> 16) & 0xff];
			block0 ^= SBoxEntry;
			block14 ^= SBoxEntry;
	
	
			/* SBox0 = rotatedRightStandardSBoxes[1][index];  */
			SBox0 -= maxSBoxCount * 256;
			SBox1 = SBox0 + 256;
	
			SBoxEntry = SBox0[block0 >> 24];
			block1 ^= SBoxEntry;
			block15 ^= SBoxEntry;
			SBoxEntry = SBox0[block1 >> 24];
			block2 ^= SBoxEntry;
			block0 ^= SBoxEntry;
			SBoxEntry = SBox1[block2 >> 24];
			block3 ^= SBoxEntry;
			block1 ^= SBoxEntry;
			SBoxEntry = SBox1[block3 >> 24];
			block4 ^= SBoxEntry;
			block2 ^= SBoxEntry;
			SBoxEntry = SBox0[block4 >> 24];
			block5 ^= SBoxEntry;
			block3 ^= SBoxEntry;
			SBoxEntry = SBox0[block5 >> 24];
			block6 ^= SBoxEntry;
			block4 ^= SBoxEntry;
			SBoxEntry = SBox1[block6 >> 24];
			block7 ^= SBoxEntry;
			block5 ^= SBoxEntry;
			SBoxEntry = SBox1[block7 >> 24];
			block8 ^= SBoxEntry;
			block6 ^= SBoxEntry;
			SBoxEntry = SBox0[block8 >> 24];
			block9 ^= SBoxEntry;
			block7 ^= SBoxEntry;
			SBoxEntry = SBox0[block9 >> 24];
			block10 ^= SBoxEntry;
			block8 ^= SBoxEntry;
			SBoxEntry = SBox1[block10 >> 24];
			block11 ^= SBoxEntry;
			block9 ^= SBoxEntry;
			SBoxEntry = SBox1[block11 >> 24];
			block12 ^= SBoxEntry;
			block10 ^= SBoxEntry;
			SBoxEntry = SBox0[block12 >> 24];
			block13 ^= SBoxEntry;
			block11 ^= SBoxEntry;
			SBoxEntry = SBox0[block13 >> 24];
			block14 ^= SBoxEntry;
			block12 ^= SBoxEntry;
			SBoxEntry = SBox1[block14 >> 24];
			block15 ^= SBoxEntry;
			block13 ^= SBoxEntry;
			SBoxEntry = SBox1[block15 >> 24];
			block0 ^= SBoxEntry;
			block14 ^= SBoxEntry;
	
	
			/* SBox0 = rotatedRightStandardSBoxes[3][index];  */
			SBox0 += 2 * maxSBoxCount * 256;
			SBox1 = SBox0 + 256;
	
			SBoxEntry = SBox0[(block0 >> 8) & 0xff];
			block1 ^= SBoxEntry;
			block15 ^= SBoxEntry;
			SBoxEntry = SBox0[(block1 >> 8) & 0xff];
			block2 ^= SBoxEntry;
			block0 ^= SBoxEntry;
			SBoxEntry = SBox1[(block2 >> 8) & 0xff];
			block3 ^= SBoxEntry;
			block1 ^= SBoxEntry;
			SBoxEntry = SBox1[(block3 >> 8) & 0xff];
			block4 ^= SBoxEntry;
			block2 ^= SBoxEntry;
			SBoxEntry = SBox0[(block4 >> 8) & 0xff];
			block5 ^= SBoxEntry;
			block3 ^= SBoxEntry;
			SBoxEntry = SBox0[(block5 >> 8) & 0xff];
			block6 ^= SBoxEntry;
			block4 ^= SBoxEntry;
			SBoxEntry = SBox1[(block6 >> 8) & 0xff];
			block7 ^= SBoxEntry;
			block5 ^= SBoxEntry;
			SBoxEntry = SBox1[(block7 >> 8) & 0xff];
			block8 ^= SBoxEntry;
			block6 ^= SBoxEntry;
			SBoxEntry = SBox0[(block8 >> 8) & 0xff];
			block9 ^= SBoxEntry;
			block7 ^= SBoxEntry;
			SBoxEntry = SBox0[(block9 >> 8) & 0xff];
			block10 ^= SBoxEntry;
			block8 ^= SBoxEntry;
			SBoxEntry = SBox1[(block10 >> 8) & 0xff];
			block11 ^= SBoxEntry;
			block9 ^= SBoxEntry;
			SBoxEntry = SBox1[(block11 >> 8) & 0xff];
			block12 ^= SBoxEntry;
			block10 ^= SBoxEntry;
			SBoxEntry = SBox0[(block12 >> 8) & 0xff];
			block13 ^= SBoxEntry;
			block11 ^= SBoxEntry;
			SBoxEntry = SBox0[(block13 >> 8) & 0xff];
			block14 ^= SBoxEntry;
			block12 ^= SBoxEntry;
			SBoxEntry = SBox1[(block14 >> 8) & 0xff];
			block15 ^= SBoxEntry;
			block13 ^= SBoxEntry;
			SBoxEntry = SBox1[(block15 >> 8) & 0xff];
			block0 ^= SBoxEntry;
			block14 ^= SBoxEntry;
	
	
	
		};			/* end of index going from 0 to
					   2*localSecurityLevel-2 in steps of 2 */
	
	
		output[0] = input[0] ^ block15;
		output[1] = input[1] ^ block14;
		output[2] = input[2] ^ block13;
		output[3] = input[3] ^ block12;
	
		/* generate an extra 128 bits if the output is 256 bits */
		if (outputBlockSize == 8) {
			output[4] = input[4] ^ block11;
			output[5] = input[5] ^ block10;
			output[6] = input[6] ^ block9;
			output[7] = input[7] ^ block8;
		};
	
	
	};
	
	
	/* Hash512twice does exactly that.  It hashes 512 bits using both Hash512 and
	   HashN.  The output of the two implementations is then compared, and if
	   they differ an error message is issued. This insures that two different
	   quite different C routines compute the same value, and is quite
	   helpful in catching bugs, implementation errors, etc.
	
	It should be particularly helpful to the implementor trying to "tune" the
	   hash function for speed, as it provides a constant check on correctness.
	
	*/
	
	void    Hash512twice (output, input, localSecurityLevel)
		unsigned long int output[maxOutputBlockSize];
	unsigned long int input[];
	int     localSecurityLevel;
	
	{
		unsigned long int out1[maxOutputBlockSize];
		unsigned long int out2[maxOutputBlockSize];
		int     i;
	
		HashN (out1, inputBlockSize, input, localSecurityLevel);
		Hash512 (out2, input, localSecurityLevel);
		for (i = 0; i < outputBlockSize; i++)
			if (out1[i] != out2[i])
				errAbort (" Hash512 and HashN differ");
		for (i = 0; i < outputBlockSize; i++)
			output[i] = out1[i];
	};
	
	
	
	/* The main program reads the input, hashes it, and prints the result.  Much
	   of the logic in the main program is taken up with the trivia of buffer
	   management, error checking, command-line parameter checking, self-tests,
	   and the like. The actual use of the hash function occupies a modest
	   portion of the overall program.
	
	The basic idea is simple.  As an example, if H is the hash function that
	   produces either 128-bit (or 256-bit) outputs, and if we pick an input
	   string that is 3 "chunks" long then we are computing:
	
	output = H( H(  H(  H(
				0 || chunk[0])  || chunk[1])  || chunk[2]) || bit-length)
	
	"bit-length" is a "chunk" sized field into which has been put the length of
	   the input, in bits, right justified.  Note that the size of a "chunk" is
	   just the input size minus the output size.
	
	"0" is a vector of 0 bits of the same size (in bits) as the output of H
	   (i.e., either 128 or 256 bits).
	
	"||" is the concatenation operator, and is used to concatenate the output
	   field of the preceding computation of H with the next "chunk" of bits from
	   the input.
	
	"chunk" is an array which holds the input string.  The final element of the
	   array is left justified and zero-filled on the right.
	
	*/
	
	void    main (argc, argv)
		int     argc;
		char   *argv[];
	
	{
	
		int     i;
		char    buffer[bufferSize];
		int     hitEOF = 0;	/* 0 means we haven't hit EOF, 1 means we
					   have */
		unsigned long int wordBuffer[bufferSizeInWords];
		unsigned long int hash[maxOutputBlockSize];
		unsigned long int hashArray[inputBlockSize];
		unsigned long int bitCount[2];	/* the 64-bit count of the number of
						   bits in the input */
		int     byteCount;	/* the count of the number of bytes we have
					   in the buffer */
		int     dataLoc;	/* the location of the next block of data we
					   wish to hash down.  Note this is the index
					   into an array of 32-bit elements, not
					   bytes */
	
	
	
		/* self-test, to make sure everything is okay.  */
		/* First, test the standard S boxes to make sure they haven't been
		   damaged.  */
		/* Test to make sure each column is a permutation.  */
		for (i = 0; i < maxSBoxCount; i++) {
			char    testArray[256];
			int     testShift = 0;
			int     j;
	
			for (testShift = 0; testShift < 32; testShift += 8) {
				for (j = 0; j < 256; j++)
					testArray[j] = 0;
				for (j = 0; j < 256; j++)
					testArray[(standardSBoxes[i][j] >> testShift) & 0xff]++;
				for (j = 0; j < 256; j++)
					if (testArray[j] != 1)
						errAbort ("Table error -- the standard S box is corrupted");
			};
		};
		/* Okay, the standard S-box hasn't been damaged  */
	
	
	
		/* Set up the rotated array for the fast hash routine  */
		{
			int     index;	/* ranges over the S box indices  */
			int     rotation;	/* ranges over the four possible
						   byte-rotations  */
			int     i;	/* ranges over the 256 possible S-box entries    */
	
			for (index = 0; index < maxSBoxCount; index++)
				for (rotation = 0; rotation < 4; rotation++)
					for (i = 0; i < 256; i++)
						rotatedRightStandardSBoxes[rotation][index][i] =
							(standardSBoxes[index][i] >> (rotation * 8)) |
							(standardSBoxes[index][i] << (32 - rotation * 8));
	
	
		};
	
	
	
		/* Now try hashing something.  Note that we're testing both HashN and
		   Hash512 here  */
		{
			unsigned long int testInput[inputBlockSize];
			unsigned long int testOutput[maxOutputBlockSize];
			int     j;
			int	k;
	
			/* Set output size to 256 bits -- just for this test routine */
			outputBlockSize = maxOutputBlockSize;
			chunkSize = inputBlockSize - outputBlockSize;
	
			if (maxOutputBlockSize != 8)
				errAbort ("The output block size has changed, update the self-test");
			if (inputBlockSize != 16)
				errAbort ("The input block size has changed, update the self-test");
			if (maxSBoxCount != 8)
				errAbort ("Wrong number of S boxes, update the self-test");
	
			for (i = 0; i < inputBlockSize; i++)
				testInput[i] = 0;	/* zero the input */
			k = 0;  /*  zero the pointer into the input buffer */
			for (i = 0; i < 50; i++) {
				Hash512twice (testOutput, testInput, 4);
				/*	Copy the output into a new slot in the input buffer */
				for (j = 0; j < maxOutputBlockSize; j++)
					testInput[k+j] = testOutput[j];
				k += maxOutputBlockSize;
					/*	reset pointer into input buffer
						if it might overflow next time */
				if ( (k+maxOutputBlockSize) > inputBlockSize) k=0;
			};
			if ((testOutput[0] != 1967985403) || (testOutput[1] != 2688653266) ||
			    (testOutput[2] != 3911883902) || (testOutput[3] != 1117323144) ||
			    (testOutput[4] != 4238876879) || (testOutput[5] != 877649382) ||
			(testOutput[6] != 1112396746) || (testOutput[7] != 324992866)
				)
				errAbort ("Test hash of 64 bytes of 0 failed");
		};
		/* Okay, we can hash at least 50  64-byte values correctly.  */
	
	
	
		outputBlockSize = 4;	/* default is 4 32-bit words, or 128 bits */
		chunkSize = inputBlockSize - outputBlockSize;
	
		/* Check command line arguments */
		if (argc == 3) {
			/* Two arguments -- generate the Large Economy Size Output of
			   256 bits */
			outputBlockSize = 8;	/* 8  32-bit words */
			chunkSize = inputBlockSize - outputBlockSize;
			if ((argv[2][0] != '2') |
			    (argv[2][1] != '5') |
			    (argv[2][2] != '6'))
				errAbort ("usage:  hash <security level> [256]");
			argc--;
		};
	
		if ((bufferSizeInWords % chunkSize) != 0)
			errAbort ("Buffer size is fouled up");
	
		if (argc > 2)
			errAbort ("usage:  hash [ <security level> [ <output size> ] ]");
		else if (argc == 2) {
			securityLevel = 0;
			if (argv[1][0] == '2')
				securityLevel = 2;
			else if (argv[1][0] == '3')
				securityLevel = 3;
			else if (argv[1][0] == '4')
				securityLevel = 4;
	
			if ((argv[1][1] != 0) || (securityLevel == 0))
				errAbort ("The security level can only be 2, 3, or 4 (4 is most secure).");
		};
	
	
		/* Apply the one-way hash function to the standard input  */
	
	
		bitCount[0] = 0;
		bitCount[1] = 0;
		byteCount = read (inputFile, buffer, bufferSize);
		if (byteCount < 0)
			errAbort ("Error on first read from standard input");
		if (byteCount != bufferSize)
			hitEOF = 1;	/* set EOF flag true if didn't fill buffer */
	
	
		bitCount[1] += byteCount * 8;	/* increment the total number of bits
						   read */
		/* bump the upper 32 bits when the lower 32-bits wraps around */
		if (bitCount[1] < (byteCount * 8))
			bitCount[0] += 1;
	
		/* zero out rest of buffer  */
		for (i = byteCount; i < bufferSize; i++)
			buffer[i] = 0;
	
		/* following conversion required for machines with byte-ordering
		   unlike the SUN */
		convertBytes (buffer, wordBuffer);
		dataLoc = 0;		/* 4-byte-word location in data input buffer */
	
	
	
		/* Now we hash it down with multiple applications of Hash512  */
	
		for (i = 0; i < inputBlockSize; i++)
			hashArray[i] = 0;	/* initialize hashArray  */
	
		/* Hash each chunk in the input (either 48 byte chunks or 32 byte
		   chunks)  -- and keep the result in hashArray.  Note that the first
		   16 (32) bytes of hashArray holds the output of the previous hash
		   computation.  */
	
		while (byteCount > 0) {
			if (dataLoc + chunkSize > bufferSize)
				errAbort ("logic error, buffer over run");
	
			/* Get the next chunk */
			for (i = 0; i < chunkSize; i++)
				hashArray[outputBlockSize + i] = wordBuffer[dataLoc + i];
			/* and hash it in */
			Hash512 (hashArray, hashArray, securityLevel);
	
			/* increment index to next 48-byte input chunk */
			dataLoc += chunkSize;
	
	
			/* decrement the number of bytes left to process */
			/* Yes, if byteCount was less than chunkSize this might make
			   byteCount negative. It's ok, it's caught in the following
			   "if" statement */
			byteCount -= chunkSize * 4;
	
			/* Out of data -- read some more */
			if (byteCount <= 0) {
				if (hitEOF == 1)
					byteCount = 0;
				else {
					if (byteCount != 0)
						errAbort ("Logic error near EOF");
					byteCount = read (inputFile, buffer, bufferSize);
					if (byteCount < 0)
						errAbort ("Error while reading from input");
					if (byteCount != bufferSize)
						hitEOF = 1;
				};
	
				bitCount[1] += byteCount * 8;	/* increment the
								   bit-count */
				/* bump the upper 32 bits when the lower 32-bits
				   wraps around */
				if (bitCount[1] < (byteCount * 8))
					bitCount[0] += 1;
	
				/* zero out rest of buffer */
				for (i = byteCount; i < bufferSize; i++)
					buffer[i] = 0;
	
				convertBytes (buffer, wordBuffer);
				dataLoc = 0;
			};
		};			/* end of while */
	
	
		/*  Zero out the remainder of hashArray  */
		for (i = 0; i < chunkSize; i++)
				hashArray[outputBlockSize + i] = 0;
	
		/* Put the 64-bit bit-count into the final 64-bits of the block about
		   to be hashed */
		hashArray[inputBlockSize - 2] = bitCount[0];	/* upper 32 bits of
								   count */
		hashArray[inputBlockSize - 1] = bitCount[1];	/* lower 32 bits of
								   count */
	
		/* Final hash down.  */
		Hash512 (hash, hashArray, securityLevel);
	
		/* 'hash' now holds the hashed result, which is printed on standard
		   output */
		for (i = 0; i < outputBlockSize; i++)
			printf (" %x", hash[i]);
		printf ("\n");
		exit (0);
	};
*-*-END-*-*
sed 's/^	//' >hashComment <<\*-*-END-*-*
	Following are the hash totals computed for the files "hash2.0.c"
	and "standardSBoxes2.c".  The user should be aware that any change
	in these files at all (e.g., addition of a blank at the end of any line,
	conversion of a tab into an equivalent number of spaces, etc) will
	result in a different value of the checksum.  However, in
	a purely logical sense it does little good to verify the correctness
	of the contents of a file using as a test the checksum program
	which has just been copied from that very same file.....
	
	Despite this annoying circularity, I have included the checksum
	values.  They at least serve as a guard against simple errors
	and clumsy efforts at subversion.
	
	Also, if the recipient should ever manage to receive a correct copy
	of the hash total program, then this correct version can be used
	to verify all further updates, changes, etc.
	
	hash2.0.c:  a3878c2d c96c6f8e b4026ae2 9669f027
	standardSBoxes2.c:   49b91919 1a896a dc976159 c6885587
*-*-END-*-*
sed 's/^	//' >stdSBoxes2.c <<\*-*-END-*-*
	/*        This is the standard S box used by the one-way hash function Snefru.
	           See the paper 'A Software One Way Hash Function', by Ralph C. Merkle,
	          for a more detailed explanation.
	
	Version 2.0
	
	NOTE:  This set of tables is different from Version 1.0.
	          Version 2.0 is recomended, Version 1.0 should not be used.
	
	August 1, 1989
	
	Copyright (c) Xerox Corporation 1989
	All rights reserved.
	
	License to  copy and use this software is granted provided that it is identified
	as the 'Tables For the Xerox Secure Hash Function' in all material mentioning
	or referencing this software.
	
	License is also granted to make and use derivative works provided that such
	works are identified as 'derived from the Tables For the Xerox Secure Hash
	Function' in all material mentioning or referencing the derived work.
	
	Xerox Corporation makes no representations concerning either the
	merchantability of this software or the suitability of this software for any
	particular purpose.  It is provided "as is" without express or implied
	warranty of any kind.
	
	
	These notices must be retained in any copies of any part of this software.
	
	
	
	Implementor:  Ralph C. Merkle
	
	*/
	
	#define maxSBoxCount 8
	
	
	
	long int standardSBoxes[maxSBoxCount][256] = {
	
	{  /*  Start of S Box 0 */
	  0x64F9001B,  /*  0  */
	  0xFEDDCDF6,  /*  1  */
	  0x7C8FF1E2,  /*  2  */
	  0x11D71514,  /*  3  */
	  0x8B8C18D3,  /*  4  */
	  0xDDDF881E,  /*  5  */
	  0x6EAB5056,  /*  6  */
	  0x88CED8E1,  /*  7  */
	  0x49148959,  /*  8  */
	  0x69C56FD5,  /*  9  */
	  0xB7994F03,  /*  10  */
	  0xFBCEE3E,  /*  11  */
	  0x3C264940,  /*  12  */
	  0x21557E58,  /*  13  */
	  0xE14B3FC2,  /*  14  */
	  0x2E5CF591,  /*  15  */
	  0xDCEFF8CE,  /*  16  */
	  0x92A1648,  /*  17  */
	  0xBE812936,  /*  18  */
	  0xFF7B0C6A,  /*  19  */
	  0xD5251037,  /*  20  */
	  0xAFA448F1,  /*  21  */
	  0x7DAFC95A,  /*  22  */
	  0x1EA69C3F,  /*  23  */
	  0xA417ABE7,  /*  24  */
	  0x5890E423,  /*  25  */
	  0xB0CB70C0,  /*  26  */
	  0xC85025F7,  /*  27  */
	  0x244D97E3,  /*  28  */
	  0x1FF3595F,  /*  29  */
	  0xC4EC6396,  /*  30  */
	  0x59181E17,  /*  31  */
	  0xE635B477,  /*  32  */
	  0x354E7DBF,  /*  33  */
	  0x796F7753,  /*  34  */
	  0x66EB52CC,  /*  35  */
	  0x77C3F995,  /*  36  */
	  0x32E3A927,  /*  37  */
	  0x80CCAED6,  /*  38  */
	  0x4E2BE89D,  /*  39  */
	  0x375BBD28,  /*  40  */
	  0xAD1A3D05,  /*  41  */
	  0x2B1B42B3,  /*  42  */
	  0x16C44C71,  /*  43  */
	  0x4D54BFA8,  /*  44  */
	  0xE57DDC7A,  /*  45  */
	  0xEC6D8144,  /*  46  */
	  0x5A71046B,  /*  47  */
	  0xD8229650,  /*  48  */
	  0x87FC8F24,  /*  49  */
	  0xCBC60E09,  /*  50  */
	  0xB6390366,  /*  51  */
	  0xD9F76092,  /*  52  */
	  0xD393A70B,  /*  53  */
	  0x1D31A08A,  /*  54  */
	  0x9CD971C9,  /*  55  */
	  0x5C1EF445,  /*  56  */
	  0x86FAB694,  /*  57  */
	  0xFDB44165,  /*  58  */
	  0x8EAAFCBE,  /*  59  */
	  0x4BCAC6EB,  /*  60  */
	  0xFB7A94E5,  /*  61  */
	  0x5789D04E,  /*  62  */
	  0xFA13CF35,  /*  63  */
	  0x236B8DA9,  /*  64  */
	  0x4133F000,  /*  65  */
	  0x6224261C,  /*  66  */
	  0xF412F23B,  /*  67  */
	  0xE75E56A4,  /*  68  */
	  0x30022116,  /*  69  */
	  0xBAF17F1F,  /*  70  */
	  0xD09872F9,  /*  71  */
	  0xC1A3699C,  /*  72  */
	  0xF1E802AA,  /*  73  */
	  0xDD145DC,  /*  74  */
	  0x4FDCE093,  /*  75  */
	  0x8D8412F0,  /*  76  */
	  0x6CD0F376,  /*  77  */
	  0x3DE6B73D,  /*  78  */
	  0x84BA737F,  /*  79  */
	  0xB43A30F2,  /*  80  */
	  0x44569F69,  /*  81  */
	  0xE4EACA,  /*  82  */
	  0xB58DE3B0,  /*  83  */
	  0x959113C8,  /*  84  */
	  0xD62EFEE9,  /*  85  */
	  0x90861F83,  /*  86  */
	  0xCED69874,  /*  87  */
	  0x2F793CEE,  /*  88  */
	  0xE8571C30,  /*  89  */
	  0x483665D1,  /*  90  */
	  0xAB07B031,  /*  91  */
	  0x914C844F,  /*  92  */
	  0x15BF3BE8,  /*  93  */
	  0x2C3F2A9A,  /*  94  */
	  0x9EB95FD4,  /*  95  */
	  0x92E7472D,  /*  96  */
	  0x2297CC5B,  /*  97  */
	  0xEE5F2782,  /*  98  */
	  0x5377B562,  /*  99  */
	  0xDB8EBBCF,  /*  100  */
	  0xF961DEDD,  /*  101  */
	  0xC59B5C60,  /*  102  */
	  0x1BD3910D,  /*  103  */
	  0x26D206AD,  /*  104  */
	  0xB28514D8,  /*  105  */
	  0x5ECF6B52,  /*  106  */
	  0x7FEA78BB,  /*  107  */
	  0x504879AC,  /*  108  */
	  0xED34A884,  /*  109  */
	  0x36E51D3C,  /*  110  */
	  0x1753741D,  /*  111  */
	  0x8C47CAED,  /*  112  */
	  0x9D0A40EF,  /*  113  */
	  0x3145E221,  /*  114  */
	  0xDA27EB70,  /*  115  */
	  0xDF730BA3,  /*  116  */
	  0x183C8789,  /*  117  */
	  0x739AC0A6,  /*  118  */
	  0x9A58DFC6,  /*  119  */
	  0x54B134C1,  /*  120  */
	  0xAC3E242E,  /*  121  */
	  0xCC493902,  /*  122  */
	  0x7B2DDA99,  /*  123  */
	  0x8F15BC01,  /*  124  */
	  0x29FD38C7,  /*  125  */
	  0x27D5318F,  /*  126  */
	  0x604AAFF5,  /*  127  */
	  0xF29C6818,  /*  128  */
	  0xC38AA2EC,  /*  129  */
	  0x1019D4C3,  /*  130  */
	  0xA8FB936E,  /*  131  */
	  0x20ED7B39,  /*  132  */
	  0xB686119,  /*  133  */
	  0x89A0906F,  /*  134  */
	  0x1CC7829E,  /*  135  */
	  0x9952EF4B,  /*  136  */
	  0x850E9E8C,  /*  137  */
	  0xCD063A90,  /*  138  */
	  0x67002F8E,  /*  139  */
	  0xCFAC8CB7,  /*  140  */
	  0xEAA24B11,  /*  141  */
	  0x988B4E6C,  /*  142  */
	  0x46F066DF,  /*  143  */
	  0xCA7EEC08,  /*  144  */
	  0xC7BBA664,  /*  145  */
	  0x831D17BD,  /*  146  */
	  0x63F575E6,  /*  147  */
	  0x9764350E,  /*  148  */
	  0x47870D42,  /*  149  */
	  0x26CA4A2,  /*  150  */
	  0x8167D587,  /*  151  */
	  0x61B6ADAB,  /*  152  */
	  0xAA6564D2,  /*  153  */
	  0x70DA237B,  /*  154  */
	  0x25E1C74A,  /*  155  */
	  0xA1C901A0,  /*  156  */
	  0xEB0A5DA,  /*  157  */
	  0x7670F741,  /*  158  */
	  0x51C05AEA,  /*  159  */
	  0x933DFA32,  /*  160  */
	  0x759FF1A,  /*  161  */
	  0x56010AB8,  /*  162  */
	  0x5FDECB78,  /*  163  */
	  0x3F32EDF8,  /*  164  */
	  0xAEBEDBB9,  /*  165  */
	  0x39F8326D,  /*  166  */
	  0xD20858C5,  /*  167  */
	  0x9B638BE4,  /*  168  */
	  0xA572C80A,  /*  169  */
	  0x28E0A19F,  /*  170  */
	  0x432099FC,  /*  171  */
	  0x3A37C3CD,  /*  172  */
	  0xBF95C585,  /*  173  */
	  0xB392C12A,  /*  174  */
	  0x6AA707D7,  /*  175  */
	  0x52F66A61,  /*  176  */
	  0x12D483B1,  /*  177  */
	  0x96435B5E,  /*  178  */
	  0x3E75802B,  /*  179  */
	  0x3BA52B33,  /*  180  */
	  0xA99F51A5,  /*  181  */
	  0xBDA1E157,  /*  182  */
	  0x78C2E70C,  /*  183  */
	  0xFCAE7CE0,  /*  184  */
	  0xD1602267,  /*  185  */
	  0x2AFFAC4D,  /*  186  */
	  0x4A510947,  /*  187  */
	  0xAB2B83A,  /*  188  */
	  0x7A04E579,  /*  189  */
	  0x340DFD80,  /*  190  */
	  0xB916E922,  /*  191  */
	  0xE29D5E9B,  /*  192  */
	  0xF5624AF4,  /*  193  */
	  0x4CA9D9AF,  /*  194  */
	  0x6BBD2CFE,  /*  195  */
	  0xE3B7F620,  /*  196  */
	  0xC2746E07,  /*  197  */
	  0x5B42B9B6,  /*  198  */
	  0xA06919BC,  /*  199  */
	  0xF0F2C40F,  /*  200  */
	  0x72217AB5,  /*  201  */
	  0x14C19DF3,  /*  202  */
	  0xF3802DAE,  /*  203  */
	  0xE094BEB4,  /*  204  */
	  0xA2101AFF,  /*  205  */
	  0x529575D,  /*  206  */
	  0x55CDB27C,  /*  207  */
	  0xA33BDDB2,  /*  208  */
	  0x6528B37D,  /*  209  */
	  0x740C05DB,  /*  210  */
	  0xE96A62C4,  /*  211  */
	  0x40782846,  /*  212  */
	  0x6D30D706,  /*  213  */
	  0xBBF48E2C,  /*  214  */
	  0xBCE2D3DE,  /*  215  */
	  0x49E37FA,  /*  216  */
	  0x1B5E634,  /*  217  */
	  0x2D886D8D,  /*  218  */
	  0x7E5A2E7E,  /*  219  */
	  0xD7412013,  /*  220  */
	  0x6E90F97,  /*  221  */
	  0xE45D3EBA,  /*  222  */
	  0xB8AD3386,  /*  223  */
	  0x13051B25,  /*  224  */
	  0xC035354,  /*  225  */
	  0x71C89B75,  /*  226  */
	  0xC638FBD0,  /*  227  */
	  0x197F11A1,  /*  228  */
	  0xEF0F08FB,  /*  229  */
	  0xF8448651,  /*  230  */
	  0x38409563,  /*  231  */
	  0x452F4443,  /*  232  */
	  0x5D464D55,  /*  233  */
	  0x3D8764C,  /*  234  */
	  0xB1B8D638,  /*  235  */
	  0xA70BBA2F,  /*  236  */
	  0x94B3D210,  /*  237  */
	  0xEB6692A7,  /*  238  */
	  0xD409C2D9,  /*  239  */
	  0x68838526,  /*  240  */
	  0xA6DB8A15,  /*  241  */
	  0x751F6C98,  /*  242  */
	  0xDE769A88,  /*  243  */
	  0xC9EE4668,  /*  244  */
	  0x1A82A373,  /*  245  */
	  0x896AA49,  /*  246  */
	  0x42233681,  /*  247  */
	  0xF62C55CB,  /*  248  */
	  0x9F1C5404,  /*  249  */
	  0xF74FB15C,  /*  250  */
	  0xC06E4312,  /*  251  */
	  0x6FFE5D72,  /*  252  */
	  0x8AA8678B,  /*  253  */
	  0x337CD129,  /*  254  */
	  0x8211CEFD  /*  255  */
	  /*  End of S Box 0  */ },
	
	
	{
	/*  Start of S Box 1 */
	
	0x74A1D09, /*  0  */
	0x52A10E5A, /*  1  */
	0x9275A3F8, /*  2  */
	0x4B82506C, /*  3  */
	0x37DF7E1B, /*  4  */
	0x4C78B3C5, /*  5  */
	0xCEFAB1DA, /*  6  */
	0xF472267E, /*  7  */
	0xB63045F6, /*  8  */
	0xD66A1FC0, /*  9  */
	0x400298E3, /*  10  */
	0x27E60C94, /*  11  */
	0x87D2F1B8, /*  12  */
	0xDF9E56CC, /*  13  */
	0x45CD1803, /*  14  */
	0x1D35E098, /*  15  */
	0xCCE7C736, /*  16  */
	0x3483BF1, /*  17  */
	0x1F7307D7, /*  18  */
	0xC6E8F948, /*  19  */
	0xE613C111, /*  20  */
	0x3955C6FF, /*  21  */
	0x1170ED7C, /*  22  */
	0x8E95DA41, /*  23  */
	0x99C31BF4, /*  24  */
	0xA4DA8021, /*  25  */
	0x7B5F94FB, /*  26  */
	0xDD0DA51F, /*  27  */
	0x6562AA77, /*  28  */
	0x556BCB23, /*  29  */
	0xDB1BACC6, /*  30  */
	0x798040B9, /*  31  */
	0xBFE5378F, /*  32  */
	0x731D55E6, /*  33  */
	0xDAA5BFEE, /*  34  */
	0x389BBC60, /*  35  */
	0x1B33FBA4, /*  36  */
	0x9C567204, /*  37  */
	0x36C26C68, /*  38  */
	0x77EE9D69, /*  39  */
	0x8AEB3E88, /*  40  */
	0x2D50B5CE, /*  41  */
	0x9579E790, /*  42  */
	0x42B13CFC, /*  43  */
	0x33FBD32B, /*  44  */
	0xEE0503A7, /*  45  */
	0xB5862824, /*  46  */
	0x15E41EAD, /*  47  */
	0xC8412EF7, /*  48  */
	0x9D441275, /*  49  */
	0x2FCEC582, /*  50  */
	0x5FF483B7, /*  51  */
	0x8F3931DF, /*  52  */
	0x2E5D2A7B, /*  53  */
	0x49467BF9, /*  54  */
	0x653DEA9, /*  55  */
	0x2684CE35, /*  56  */
	0x7E655E5C, /*  57  */
	0xF12771D8, /*  58  */
	0xBB15CC67, /*  59  */
	0xAB097CA1, /*  60  */
	0x983DCF52, /*  61  */
	0x10DDF026, /*  62  */
	0x21267F57, /*  63  */
	0x2C58F6B4, /*  64  */
	0x31043265, /*  65  */
	0xBAB8C01, /*  66  */
	0xD5492099, /*  67  */
	0xACAAE619, /*  68  */
	0x944CE54A, /*  69  */
	0xF2D13D39, /*  70  */
	0xADD3FC32, /*  71  */
	0xCDA08A40, /*  72  */
	0xE2B0D451, /*  73  */
	0x9EFE08AE, /*  74  */
	0xB9D50FD2, /*  75  */
	0xEA5CD7FD, /*  76  */
	0xC9A749DD, /*  77  */
	0x13EA2253, /*  78  */
	0x832DEBAA, /*  79  */
	0x24BE640F, /*  80  */
	0xE03E926A, /*  81  */
	0x29E01CDE, /*  82  */
	0x8BF59F18, /*  83  */
	0xF9D00B6, /*  84  */
	0xE1238B46, /*  85  */
	0x1E7D8E34, /*  86  */
	0x93619ADB, /*  87  */
	0x76B32F9F, /*  88  */
	0xBD972CEC, /*  89  */
	0xE31FA976, /*  90  */
	0xA68FBB10, /*  91  */
	0xFB3BA49D, /*  92  */
	0x8587C41D, /*  93  */
	0xA5ADD1D0, /*  94  */
	0xF3CF84BF, /*  95  */
	0xD4E11150, /*  96  */
	0xD9FFA6BC, /*  97  */
	0xC3F6018C, /*  98  */
	0xAEF10572, /*  99  */
	0x74A64B2F, /*  100  */
	0xE7DC9559, /*  101  */
	0x2AAE35D5, /*  102  */
	0x5B6F587F, /*  103  */
	0xA9E353FE, /*  104  */
	0xCA4FB674, /*  105  */
	0x4BA24A8, /*  106  */
	0xE5C6875F, /*  107  */
	0xDCBC6266, /*  108  */
	0x6BC5C03F, /*  109  */
	0x661EEF02, /*  110  */
	0xED740BAB, /*  111  */
	0x58E34E4, /*  112  */
	0xB7E946CF, /*  113  */
	0x88698125, /*  114  */
	0x72EC48ED, /*  115  */
	0xB11073A3, /*  116  */
	0xA13485EB, /*  117  */
	0xA2A2429C, /*  118  */
	0xFA407547, /*  119  */
	0x50B76713, /*  120  */
	0x5418C37D, /*  121  */
	0x96192DA5, /*  122  */
	0x170BB04B, /*  123  */
	0x518A021E, /*  124  */
	0xB0AC13D1, /*  125  */
	0x963FA2A, /*  126  */
	0x4A6E10E1, /*  127  */
	0x58472BDC, /*  128  */
	0xF7F8D962, /*  129  */
	0x979139EA, /*  130  */
	0x8D856538, /*  131  */
	0xC0997042, /*  132  */
	0x48324D7A, /*  133  */
	0x447623CB, /*  134  */
	0x8CBBE364, /*  135  */
	0x6E0C6B0E, /*  136  */
	0xD36D63B0, /*  137  */
	0x3F244C84, /*  138  */
	0x3542C971, /*  139  */
	0x2B228DC1, /*  140  */
	0xCB0325BB, /*  141  */
	0xF8C0D6E9, /*  142  */
	0xDE11066B, /*  143  */
	0xA8649327, /*  144  */
	0xFC31F83E, /*  145  */
	0x7DD80406, /*  146  */
	0xF916DD61, /*  147  */
	0xD89F79D3, /*  148  */
	0x615144C2, /*  149  */
	0xEBB45D31, /*  150  */
	0x28002958, /*  151  */
	0x56890A37, /*  152  */
	0xF05B3808, /*  153  */
	0x123AE844, /*  154  */
	0x86839E16, /*  155  */
	0x914B0D83, /*  156  */
	0xC506B43C, /*  157  */
	0xCF3CBA5E, /*  158  */
	0x7C60F5C9, /*  159  */
	0x22DEB2A0, /*  160  */
	0x5D9C2715, /*  161  */
	0xC77BA0EF, /*  162  */
	0x4F45360B, /*  163  */
	0xC1017D8B, /*  164  */
	0xE45ADC29, /*  165  */
	0xA759909B, /*  166  */
	0x412CD293, /*  167  */
	0xD7D796B1, /*  168  */
	0xC8FF30, /*  169  */
	0x23A34A80, /*  170  */
	0x4EC15C91, /*  171  */
	0x714E78B5, /*  172  */
	0x47B9E42E, /*  173  */
	0x78F3EA4D, /*  174  */
	0x7F078F5B, /*  175  */
	0x346C593A, /*  176  */
	0xA3A87A1A, /*  177  */
	0x9BCBFE12, /*  178  */
	0x3D439963, /*  179  */
	0xB2EF6D8E, /*  180  */
	0xB8D46028, /*  181  */
	0x6C2FD5CA, /*  182  */
	0x62675256, /*  183  */
	0x1F2A2F3, /*  184  */
	0xBC96AE0A, /*  185  */
	0x709A8920, /*  186  */
	0xB4146E87, /*  187  */
	0x6308B9E2, /*  188  */
	0x64BDA7BA, /*  189  */
	0xAFED6892, /*  190  */
	0x6037F2A2, /*  191  */
	0xF52969E0, /*  192  */
	0xADB43A6, /*  193  */
	0x82811400, /*  194  */
	0x90D0BDF0, /*  195  */
	0x19C9549E, /*  196  */
	0x203F6A73, /*  197  */
	0x1ACCAF4F, /*  198  */
	0x89714E6D, /*  199  */
	0x164D4705, /*  200  */
	0x67665F07, /*  201  */
	0xEC206170, /*  202  */
	0xC2182B2, /*  203  */
	0xA02B9C81, /*  204  */
	0x53289722, /*  205  */
	0xF6A97686, /*  206  */
	0x140E4179, /*  207  */
	0x9F778849, /*  208  */
	0x9A88E15D, /*  209  */
	0x25CADB54, /*  210  */
	0xD157F36F, /*  211  */
	0x32A421C3, /*  212  */
	0xB368E98A, /*  213  */
	0x5A92CD0D, /*  214  */
	0x757AA8D4, /*  215  */
	0xC20AC278, /*  216  */
	0x8B551C7, /*  217  */
	0x849491E8, /*  218  */
	0x4DC75AD6, /*  219  */
	0x697C33BE, /*  220  */
	0xBAF0CA33, /*  221  */
	0x46125B4E, /*  222  */
	0x59D677B3, /*  223  */
	0x30D9C8F2, /*  224  */
	0xD0AF860C, /*  225  */
	0x1C7FD0FA, /*  226  */
	0xFE0FF72C, /*  227  */
	0x5C8D6F43, /*  228  */
	0x57FDEC3B, /*  229  */
	0x6AB6AD97, /*  230  */
	0xD22ADF89, /*  231  */
	0x18171785, /*  232  */
	0x2BFE22D, /*  233  */
	0x6DB80917, /*  234  */
	0x80B216AF, /*  235  */
	0xE85E4F9A, /*  236  */
	0x7A1C306E, /*  237  */
	0x6FC49BF5, /*  238  */
	0x3AF7A11C, /*  239  */
	0x81E215E7, /*  240  */
	0x68363FCD, /*  241  */
	0x3E9357C8, /*  242  */
	0xEF52FD55, /*  243  */
	0x3B8BAB4C, /*  244  */
	0x3C8CF495, /*  245  */
	0xBEFCEEBD, /*  246  */
	0xFD25B714, /*  247  */
	0xC498D83D, /*  248  */
	0xD2E1A8D, /*  249  */
	0xE9F966AC, /*  250  */
	0xE387445, /*  251  */
	0x435419E5, /*  252  */
	0x5E7EBEC4, /*  253  */
	0xAA90B8D9, /*  254  */
	0xFF1A3A96}, /*  255  */
	
	{
	/*  Start of S-box 2 */
	
	0x4A8FE4E3, /*  0  */
	0xF27D99CD, /*  1  */
	0xD04A40CA, /*  2  */
	0xCB5FF194, /*  3  */
	0x3668275A, /*  4  */
	0xFF4816BE, /*  5  */
	0xA78B394C, /*  6  */
	0x4C6BE9DB, /*  7  */
	0x4EEC38D2, /*  8  */
	0x4296EC80, /*  9  */
	0xCDCE96F8, /*  10  */
	0x888C2F38, /*  11  */
	0xE75508F5, /*  12  */
	0x7B916414, /*  13  */
	0x60AA14A, /*  14  */
	0xA214F327, /*  15  */
	0xBE608DAF, /*  16  */
	0x1EBBDEC2, /*  17  */
	0x61F98CE9, /*  18  */
	0xE92156FE, /*  19  */
	0x4F22D7A3, /*  20  */
	0x3F76A8D9, /*  21  */
	0x559A4B33, /*  22  */
	0x38AD2959, /*  23  */
	0xF3F17E9E, /*  24  */
	0x85E1BA91, /*  25  */
	0xE5EBA6FB, /*  26  */
	0x73DCD48C, /*  27  */
	0xF5C3FF78, /*  28  */
	0x481B6058, /*  29  */
	0x8A3297F7, /*  30  */
	0x8F1F3BF4, /*  31  */
	0x93785AB2, /*  32  */
	0x477A4A5B, /*  33  */
	0x6334EB5D, /*  34  */
	0x6D251B2E, /*  35  */
	0x74A9102D, /*  36  */
	0x7E38FFA, /*  37  */
	0x915C9C62, /*  38  */
	0xCCC275EA, /*  39  */
	0x6BE273EC, /*  40  */
	0x3EBDDD70, /*  41  */
	0xD895796C, /*  42  */
	0xDC54A91B, /*  43  */
	0xC9AFDF81, /*  44  */
	0x23633F73, /*  45  */
	0x275119B4, /*  46  */
	0xB19F6B67, /*  47  */
	0x50756E22, /*  48  */
	0x2BB152E2, /*  49  */
	0x76EA46A2, /*  50  */
	0xA353E232, /*  51  */
	0x2F596AD6, /*  52  */
	0xB1EDB0B, /*  53  */
	0x2D3D9A4, /*  54  */
	0x78B47843, /*  55  */
	0x64893E90, /*  56  */
	0x40F0CAAD, /*  57  */
	0xF68D3AD7, /*  58  */
	0x46FD1707, /*  59  */
	0x1C9C67EF, /*  60  */
	0xB5E086DE, /*  61  */
	0x96EE6CA6, /*  62  */
	0x9AA34774, /*  63  */
	0x1BA4F48A, /*  64  */
	0x8D01ABFD, /*  65  */
	0x183EE1F6, /*  66  */
	0x5FF8AA7A, /*  67  */
	0x17E4FAAE, /*  68  */
	0x303983B0, /*  69  */
	0x6C08668B, /*  70  */
	0xD4AC4382, /*  71  */
	0xE6C5849F, /*  72  */
	0x92FEFB53, /*  73  */
	0xC1CAC4CE, /*  74  */
	0x43501388, /*  75  */
	0x441118CF, /*  76  */
	0xEC4FB308, /*  77  */
	0x53A08E86, /*  78  */
	0x9E0FE0C5, /*  79  */
	0xF91C1525, /*  80  */
	0xAC45BE05, /*  81  */
	0xD7987CB5, /*  82  */
	0x49BA1487, /*  83  */
	0x57938940, /*  84  */
	0xD5877648, /*  85  */
	0xA958727F, /*  86  */
	0x58DFE3C3, /*  87  */
	0xF436CF77, /*  88  */
	0x399E4D11, /*  89  */
	0xF0A5BFA9, /*  90  */
	0xEF61A33B, /*  91  */
	0xA64CAC60, /*  92  */
	0x4A8D0BA, /*  93  */
	0x30DD572, /*  94  */
	0xB83D320F, /*  95  */
	0xCAB23045, /*  96  */
	0xE366F2F0, /*  97  */
	0x815D008D, /*  98  */
	0xC897A43A, /*  99  */
	0x1D352DF3, /*  100  */
	0xB9CC571D, /*  101  */
	0x8BF38744, /*  102  */
	0x72209092, /*  103  */
	0xEBA124EB, /*  104  */
	0xFB99CE5E, /*  105  */
	0x3BB94293, /*  106  */
	0x28DA549C, /*  107  */
	0xAAB8A228, /*  108  */
	0xA4197785, /*  109  */
	0x33C70296, /*  110  */
	0x25F6259B, /*  111  */
	0x5C85DA21, /*  112  */
	0xDF15BDEE, /*  113  */
	0x15B7C7E8, /*  114  */
	0xE2ABEF75, /*  115  */
	0xFCC19BC1, /*  116  */
	0x417FF868, /*  117  */
	0x14884434, /*  118  */
	0x62825179, /*  119  */
	0xC6D5C11C, /*  120  */
	0xE4705DC, /*  121  */
	0x22700DE0, /*  122  */
	0xD3D2AF18, /*  123  */
	0x9BE822A0, /*  124  */
	0x35B669F1, /*  125  */
	0xC42BB55C, /*  126  */
	0xA801252, /*  127  */
	0x115BF0FC, /*  128  */
	0x3CD7D856, /*  129  */
	0xB43F5F9D, /*  130  */
	0xC2306516, /*  131  */
	0xA1231C47, /*  132  */
	0xF149207E, /*  133  */
	0x5209A795, /*  134  */
	0x34B3CCD8, /*  135  */
	0x67AEFE54, /*  136  */
	0x2C83924E, /*  137  */
	0x6662CBAC, /*  138  */
	0x5EEDD161, /*  139  */
	0x84E681AA, /*  140  */
	0x5D57D26B, /*  141  */
	0xFA465CC4, /*  142  */
	0x7E3AC3A8, /*  143  */
	0xBF7C0CC6, /*  144  */
	0xE18A9AA1, /*  145  */
	0xC32F0A6F, /*  146  */
	0xB22CC00D, /*  147  */
	0x3D280369, /*  148  */
	0x994E554F, /*  149  */
	0x68F480D3, /*  150  */
	0xADCFF5E6, /*  151  */
	0x3A8EB265, /*  152  */
	0x83269831, /*  153  */
	0xBD568A09, /*  154  */
	0x4BC8AE6A, /*  155  */
	0x69F56D2B, /*  156  */
	0xF17EAC8, /*  157  */
	0x772EB6C7, /*  158  */
	0x9F41343C, /*  159  */
	0xAB1D0742, /*  160  */
	0x826A6F50, /*  161  */
	0xFEA2097C, /*  162  */
	0x1912C283, /*  163  */
	0xCE185899, /*  164  */
	0xE4444839, /*  165  */
	0x2D8635D5, /*  166  */
	0x65D0B1FF, /*  167  */
	0x865A7F17, /*  168  */
	0x326D9FB1, /*  169  */
	0x59E52820, /*  170  */
	0x90ADE1, /*  171  */
	0x753C7149, /*  172  */
	0x9DDD8B98, /*  173  */
	0xA5A691DA, /*  174  */
	0xD0382BB, /*  175  */
	0x8904C930, /*  176  */
	0x86CB000, /*  177  */
	0x6E69D3BD, /*  178  */
	0x24D4E7A7, /*  179  */
	0x5244FD0, /*  180  */
	0x101A5E0C, /*  181  */
	0x6A947DCB, /*  182  */
	0xE840F77B, /*  183  */
	0x7D0C5003, /*  184  */
	0x7C370F1F, /*  185  */
	0x805245ED, /*  186  */
	0xE05E3D3F, /*  187  */
	0x7906880E, /*  188  */
	0xBABFCD35, /*  189  */
	0x1A7EC697, /*  190  */
	0x8C052324, /*  191  */
	0xC6EC8DF, /*  192  */
	0xD129A589, /*  193  */
	0xC7A75B02, /*  194  */
	0x12D81DE7, /*  195  */
	0xD9BE2A66, /*  196  */
	0x1F4263AB, /*  197  */
	0xDE73FDB6, /*  198  */
	0x2A00680A, /*  199  */
	0x56649E36, /*  200  */
	0x3133ED55, /*  201  */
	0x90FA0BF2, /*  202  */
	0x2910A02A, /*  203  */
	0x949D9D46, /*  204  */
	0xA0D1DCDD, /*  205  */
	0xCFC9B7D4, /*  206  */
	0xD2677BE5, /*  207  */
	0x95CB36B3, /*  208  */
	0x13CD9410, /*  209  */
	0xDBF73313, /*  210  */
	0xB7C6E8C0, /*  211  */
	0xF781414B, /*  212  */
	0x510B016D, /*  213  */
	0xB0DE1157, /*  214  */
	0xD6B0F62C, /*  215  */
	0xBB074ECC, /*  216  */
	0x7F1395B7, /*  217  */
	0xEE792CF9, /*  218  */
	0xEA6FD63E, /*  219  */
	0x5BD6938E, /*  220  */
	0xAF02FC64, /*  221  */
	0xDAB57AB8, /*  222  */
	0x8EDB3784, /*  223  */
	0x8716318F, /*  224  */
	0x164D1A01, /*  225  */
	0x26F26141, /*  226  */
	0xB372E6B9, /*  227  */
	0xF8FC2B06, /*  228  */
	0x7AC00E04, /*  229  */
	0x3727B89A, /*  230  */
	0x97E9BCA5, /*  231  */
	0x9C2A742F, /*  232  */
	0xBC3B1F7D, /*  233  */
	0x7165B471, /*  234  */
	0x609B4C29, /*  235  */
	0x20925351, /*  236  */
	0x5AE72112, /*  237  */
	0x454BE5D1, /*  238  */
	0xC0FFB95F, /*  239  */
	0xDD0EF919, /*  240  */
	0x6F2D70C9, /*  241  */
	0x974C5BF, /*  242  */
	0x98AA6263, /*  243  */
	0x1D91E4D, /*  244  */
	0x2184BB6E, /*  245  */
	0x70C43C1E, /*  246  */
	0x4D435915, /*  247  */
	0xAE7B8523, /*  248  */
	0xB6FB06BC, /*  249  */
	0x5431EE76, /*  250  */
	0xFDBC5D26, /*  251  */
	0xED77493D, /*  252  */
	0xC5712EE4, /*  253  */
	0xA8380437, /*  254  */
	0x2EEF261A}, /*  255  */
	
	{
	/*  Start of S Box 3 */
	
	0x5A79392B, /*  0  */
	0xB8AF32C2, /*  1  */
	0x41F7720A, /*  2  */
	0x833A61EC, /*  3  */
	0x13DFEDAC, /*  4  */
	0xC4990BC4, /*  5  */
	0xDC0F54BC, /*  6  */
	0xFEDD5E88, /*  7  */
	0x80DA1881, /*  8  */
	0x4DEA1AFD, /*  9  */
	0xFD402CC6, /*  10  */
	0xAE67CC7A, /*  11  */
	0xC5238525, /*  12  */
	0x8EA01254, /*  13  */
	0xB56B9BD5, /*  14  */
	0x862FBD6D, /*  15  */
	0xAC8575D3, /*  16  */
	0x6FBA3714, /*  17  */
	0xDA7EBF46, /*  18  */
	0x59CD5238, /*  19  */
	0x8AC9DBFE, /*  20  */
	0x353729FC, /*  21  */
	0xE497D7F2, /*  22  */
	0xC3AB84E0, /*  23  */
	0xF05A114B, /*  24  */
	0x7B887A75, /*  25  */
	0xEDC603DD, /*  26  */
	0x5E6FE680, /*  27  */
	0x2C84B399, /*  28  */
	0x884EB1DA, /*  29  */
	0x1CB8C8BF, /*  30  */
	0xAA51098A, /*  31  */
	0xC862231C, /*  32  */
	0x8BAC2221, /*  33  */
	0x21B387E5, /*  34  */
	0x208A430D, /*  35  */
	0x2A3F0F8B, /*  36  */
	0xA5FF9CD2, /*  37  */
	0x6012A2EA, /*  38  */
	0x147A9EE7, /*  39  */
	0xF62A501D, /*  40  */
	0xB4B2E51A, /*  41  */
	0x3EF3484C, /*  42  */
	0xC0253C59, /*  43  */
	0x2B82B536, /*  44  */
	0xAA9696B, /*  45  */
	0xBE0C109B, /*  46  */
	0xC70B7929, /*  47  */
	0xCE3E8A19, /*  48  */
	0x2F66950E, /*  49  */
	0x459F1C2C, /*  50  */
	0xE68FB93D, /*  51  */
	0xA3C3FF3E, /*  52  */
	0x62B45C62, /*  53  */
	0x300991CB, /*  54  */
	0x1914C57, /*  55  */
	0x7F7BC06A, /*  56  */
	0x182831F5, /*  57  */
	0xE7B74BCA, /*  58  */
	0xFA50F6D0, /*  59  */
	0x523CAA61, /*  60  */
	0xE3A7CF05, /*  61  */
	0xE9E41311, /*  62  */
	0x280A21D1, /*  63  */
	0x6A4297E1, /*  64  */
	0xF24DC67E, /*  65  */
	0xFC3189E6, /*  66  */
	0xB72BF34F, /*  67  */
	0x4B1E67AF, /*  68  */
	0x543402CE, /*  69  */
	0x79A59867, /*  70  */
	0x648E02A, /*  71  */
	0xA3AC17, /*  72  */
	0xC6208D35, /*  73  */
	0x6E7F5F76, /*  74  */
	0xA45BB4BE, /*  75  */
	0xF168FA63, /*  76  */
	0x3F4125F3, /*  77  */
	0xF311406F, /*  78  */
	0x2706565, /*  79  */
	0xBFE58022, /*  80  */
	0xCFCFDD9, /*  81  */
	0x735A7F7, /*  82  */
	0x8F049092, /*  83  */
	0xD98EDC27, /*  84  */
	0xF5C5D55C, /*  85  */
	0xE0F201DB, /*  86  */
	0xDCAFC9A, /*  87  */
	0x7727FB79, /*  88  */
	0xAF43ABF4, /*  89  */
	0x26E938C1, /*  90  */
	0x401B26A6, /*  91  */
	0x900720FA, /*  92  */
	0x2752D97B, /*  93  */
	0xCFF1D1B3, /*  94  */
	0xA9D9E424, /*  95  */
	0x42DB99AB, /*  96  */
	0x6CF8BE5F, /*  97  */
	0xE82CEBE3, /*  98  */
	0x3AFB733B, /*  99  */
	0x6B734EB6, /*  100  */
	0x1036414A, /*  101  */
	0x975F667C, /*  102  */
	0x49D6377, /*  103  */
	0xBA587C60, /*  104  */
	0xB1D10483, /*  105  */
	0xDE1AEFCC, /*  106  */
	0x1129D055, /*  107  */
	0x72051E91, /*  108  */
	0x6946D623, /*  109  */
	0xF9E86EA7, /*  110  */
	0x48768C00, /*  111  */
	0xB0166C93, /*  112  */
	0x9956BBF0, /*  113  */
	0x1F1F6D84, /*  114  */
	0xFB15E18E, /*  115  */
	0x33B495D, /*  116  */
	0x56E3362E, /*  117  */
	0x4F44C53C, /*  118  */
	0x747CBA51, /*  119  */
	0x89D37872, /*  120  */
	0x5D9C331B, /*  121  */
	0xD2EF9FA8, /*  122  */
	0x254917F8, /*  123  */
	0x1B106F47, /*  124  */
	0x37D75553, /*  125  */
	0xB3F053B0, /*  126  */
	0x7DCCD8EF, /*  127  */
	0xD30EB802, /*  128  */
	0x5889F42D, /*  129  */
	0x610206D7, /*  130  */
	0x1A7D34A1, /*  131  */
	0x92D87DD8, /*  132  */
	0xE5F4A315, /*  133  */
	0xD1CF0E71, /*  134  */
	0xB22DFE45, /*  135  */
	0xB901E8EB, /*  136  */
	0xFC0CE5E, /*  137  */
	0x2EFA60C9, /*  138  */
	0x2DE74290, /*  139  */
	0x36D0C906, /*  140  */
	0x381C70E4, /*  141  */
	0x4C6DA5B5, /*  142  */
	0x3D81A682, /*  143  */
	0x7E381F34, /*  144  */
	0x396C4F52, /*  145  */
	0x95AD5901, /*  146  */
	0x1DB50C5A, /*  147  */
	0x29982E9E, /*  148  */
	0x1557689F, /*  149  */
	0x3471EE42, /*  150  */
	0xD7E2F7C0, /*  151  */
	0x8795A1E2, /*  152  */
	0xBC324D8D, /*  153  */
	0xE224C3C8, /*  154  */
	0x12837E39, /*  155  */
	0xCDEE3D74, /*  156  */
	0x7AD2143F, /*  157  */
	0xE13D40C, /*  158  */
	0x78BD4A68, /*  159  */
	0xA2EB194D, /*  160  */
	0xDB9451F9, /*  161  */
	0x859B71DC, /*  162  */
	0x5C4F5B89, /*  163  */
	0xCA14A8A4, /*  164  */
	0xEF92F003, /*  165  */
	0x16741D98, /*  166  */
	0x33AA4444, /*  167  */
	0x9E967FBB, /*  168  */
	0x92E3020, /*  169  */
	0xD86A35B8, /*  170  */
	0x8CC17B10, /*  171  */
	0xE1BF08AE, /*  172  */
	0x55693FC5, /*  173  */
	0x7680AD13, /*  174  */
	0x1E6546E8, /*  175  */
	0x23B6E7B9, /*  176  */
	0xEE77A4B2, /*  177  */
	0x8ED0533, /*  178  */
	0x44FD2895, /*  179  */
	0xB6393B69, /*  180  */
	0x5D6CACF, /*  181  */
	0x9819B209, /*  182  */
	0xECBBB72F, /*  183  */
	0x9A75779C, /*  184  */
	0xEAEC0749, /*  185  */
	0x94A65AEE, /*  186  */
	0xBDF52DC3, /*  187  */
	0xD6A25D04, /*  188  */
	0x82008E4E, /*  189  */
	0xA6DE160F, /*  190  */
	0x9B036AFB, /*  191  */
	0x228B3A66, /*  192  */
	0x5FB10A70, /*  193  */
	0xCC338B58, /*  194  */
	0x5378A9DF, /*  195  */
	0xC908BCA9, /*  196  */
	0x4959E25B, /*  197  */
	0x46909A97, /*  198  */
	0x66AE8F6E, /*  199  */
	0xDD0683E9, /*  200  */
	0x65F994B4, /*  201  */
	0x6426CDA5, /*  202  */
	0xC24B8840, /*  203  */
	0x32539DA0, /*  204  */
	0x63175650, /*  205  */
	0xD0C815FF, /*  206  */
	0x50CBC41E, /*  207  */
	0xF7C774A3, /*  208  */
	0x31B0C231, /*  209  */
	0x8D0D8116, /*  210  */
	0x24BEF16C, /*  211  */
	0xD555D256, /*  212  */
	0xDF47EA8C, /*  213  */
	0x6D21ECCD, /*  214  */
	0xA887A012, /*  215  */
	0x84542AED, /*  216  */
	0xA7B9C1BD, /*  217  */
	0x914C1BB1, /*  218  */
	0xA0D5B67D, /*  219  */
	0x438CE937, /*  220  */
	0x7030F873, /*  221  */
	0x71F6B0C7, /*  222  */
	0x574576BA, /*  223  */
	0xF8BC4541, /*  224  */
	0x9C61D348, /*  225  */
	0x1960579D, /*  226  */
	0x17C4DAAD, /*  227  */
	0x96A4CB0B, /*  228  */
	0xC193F2F6, /*  229  */
	0x756EAFA2, /*  230  */
	0x7C1D2F94, /*  231  */
	0xF4FE2B43, /*  232  */
	0xCB86E33A, /*  233  */
	0xEBD4C728, /*  234  */
	0x9D18AE64, /*  235  */
	0x9FE13E30, /*  236  */
	0x3CE0F5DE, /*  237  */
	0xABA1F985, /*  238  */
	0xADDC2718, /*  239  */
	0x68CE6278, /*  240  */
	0xD45E241F, /*  241  */
	0xA15C82B7, /*  242  */
	0x3B2293D4, /*  243  */
	0x739EDD32, /*  244  */
	0x674A6BF1, /*  245  */
	0x5B5D587F, /*  246  */
	0x4772DEAA, /*  247  */
	0x4A63968F, /*  248  */
	0xBE68686, /*  249  */
	0x513D6426, /*  250  */
	0x939A4787, /*  251  */
	0xBBA89296, /*  252  */
	0x4EC20007, /*  253  */
	0x818D0D08, /*  254  */
	0xFF64DFD6}, /*  255  */
	
	{
	/*  Start of S Box 4 */
	
	0xCB2297CB, /*  0  */
	0xDB48A144, /*  1  */
	0xA16CBE4B, /*  2  */
	0xBBEA1D6C, /*  3  */
	0x5AF6B6B7, /*  4  */
	0x8A8110B6, /*  5  */
	0xF9236EF9, /*  6  */
	0xC98F83E6, /*  7  */
	0xF9C65B8, /*  8  */
	0x252D4A89, /*  9  */
	0xA497F068, /*  10  */
	0xA5D7ED2D, /*  11  */
	0x94C22845, /*  12  */
	0x9DA1C8C4, /*  13  */
	0xE27C2E2E, /*  14  */
	0x6E8BA2B4, /*  15  */
	0xC3DD17FB, /*  16  */
	0x498CD482, /*  17  */
	0xDFE6A9F, /*  18  */
	0xB0705829, /*  19  */
	0x9A1E6DC1, /*  20  */
	0xF829717C, /*  21  */
	0x7BB8E3A, /*  22  */
	0xDA3C0B02, /*  23  */
	0x1AF82FC7, /*  24  */
	0x73B70955, /*  25  */
	0x7A04379C, /*  26  */
	0x5EE20A28, /*  27  */
	0x83712AE5, /*  28  */
	0xF4C47C6D, /*  29  */
	0xDF72BA56, /*  30  */
	0xD794858D, /*  31  */
	0x8C0CF709, /*  32  */
	0x18F0F390, /*  33  */
	0xB6C69B35, /*  34  */
	0xBF2F01DB, /*  35  */
	0x2FA74DCA, /*  36  */
	0xD0CD9127, /*  37  */
	0xBDE66CEC, /*  38  */
	0x3DEEBD46, /*  39  */
	0x57C88FC3, /*  40  */
	0xCEE1406F, /*  41  */
	0x66385A, /*  42  */
	0xF3C3444F, /*  43  */
	0x3A79D5D5, /*  44  */
	0x75751EB9, /*  45  */
	0x3E7F8185, /*  46  */
	0x521C2605, /*  47  */
	0xE1AAAB6E, /*  48  */
	0x38EBB80F, /*  49  */
	0xBEE7E904, /*  50  */
	0x61CB9647, /*  51  */
	0xEA54904E, /*  52  */
	0x5AE00E4, /*  53  */
	0x2D7AC65F, /*  54  */
	0x87751A1, /*  55  */
	0xDCD82915, /*  56  */
	0x921EE16, /*  57  */
	0xDD86D33B, /*  58  */
	0xD6BD491A, /*  59  */
	0x40FBADF0, /*  60  */
	0x4232CBD2, /*  61  */
	0x33808D10, /*  62  */
	0x39098C42, /*  63  */
	0x193F3199, /*  64  */
	0xBC1E47A, /*  65  */
	0x4A82B149, /*  66  */
	0x2B65A8A, /*  67  */
	0x104CDC8E, /*  68  */
	0x24A8F52C, /*  69  */
	0x685C6077, /*  70  */
	0xC79F95C9, /*  71  */
	0x1D11FE50, /*  72  */
	0xC08DAFCD, /*  73  */
	0x7B1A9A03, /*  74  */
	0x1C1F11D8, /*  75  */
	0x84250E7F, /*  76  */
	0x979DB248, /*  77  */
	0xEBDC0501, /*  78  */
	0xB9553395, /*  79  */
	0xE3C05EA8, /*  80  */
	0xB1E51C4C, /*  81  */
	0x13B0E681, /*  82  */
	0x3B407766, /*  83  */
	0x36DB3087, /*  84  */
	0xEE17C9FC, /*  85  */
	0x6C53ECF2, /*  86  */
	0xADCCC58F, /*  87  */
	0xC427660B, /*  88  */
	0xEFD5867D, /*  89  */
	0x9B6D54A5, /*  90  */
	0x6FF1AEFF, /*  91  */
	0x8E787952, /*  92  */
	0x9E2BFFE0, /*  93  */
	0x8761D034, /*  94  */
	0xE00BDBAD, /*  95  */
	0xAE99A8D3, /*  96  */
	0xCC03F6E2, /*  97  */
	0xFD0ED807, /*  98  */
	0xE508AE3, /*  99  */
	0xB74182AB, /*  100  */
	0x4349245D, /*  101  */
	0xD120A465, /*  102  */
	0xB246A641, /*  103  */
	0xAF3B7AB0, /*  104  */
	0x2A6488BB, /*  105  */
	0x4B3A0D1F, /*  106  */
	0xE7C7E58C, /*  107  */
	0x3FAFF2EB, /*  108  */
	0x90445FFD, /*  109  */
	0xCF38C393, /*  110  */
	0x995D07E7, /*  111  */
	0xF24F1B36, /*  112  */
	0x356F6891, /*  113  */
	0x6D6EBCBE, /*  114  */
	0x8DA9E262, /*  115  */
	0x50FD520E, /*  116  */
	0x5BCA9E1E, /*  117  */
	0x37472CF3, /*  118  */
	0x69075057, /*  119  */
	0x7EC5FDED, /*  120  */
	0xCAB892A, /*  121  */
	0xFB2412BA, /*  122  */
	0x1728DEBF, /*  123  */
	0xA000A988, /*  124  */
	0xD843CE79, /*  125  */
	0x42E20DD, /*  126  */
	0x4FE8F853, /*  127  */
	0x56659C3C, /*  128  */
	0x2739D119, /*  129  */
	0xA78A6120, /*  130  */
	0x80960375, /*  131  */
	0x70420611, /*  132  */
	0x85E09F78, /*  133  */
	0xABD17E96, /*  134  */
	0x1B513EAF, /*  135  */
	0x1E01EB63, /*  136  */
	0x26AD2133, /*  137  */
	0xA890C094, /*  138  */
	0x7613CF60, /*  139  */
	0x817E781B, /*  140  */
	0xA39113D7, /*  141  */
	0xE957FA58, /*  142  */
	0x4131B99E, /*  143  */
	0x28B1EFDA, /*  144  */
	0x66ACFBA7, /*  145  */
	0xFF68944A, /*  146  */
	0x77A44FD1, /*  147  */
	0x7F331522, /*  148  */
	0x59FFB3FA, /*  149  */
	0xA6DF935B, /*  150  */
	0xFA12D9DF, /*  151  */
	0xC6BF6F3F, /*  152  */
	0x89520CF6, /*  153  */
	0x659EDD6A, /*  154  */
	0x544DA739, /*  155  */
	0x8B052538, /*  156  */
	0x7C30EA21, /*  157  */
	0xC2345525, /*  158  */
	0x15927FB2, /*  159  */
	0x144A436B, /*  160  */
	0xBA107B8B, /*  161  */
	0x1219AC97, /*  162  */
	0x6730432, /*  163  */
	0x31831AB3, /*  164  */
	0xC55A5C24, /*  165  */
	0xAA0FCD3E, /*  166  */
	0xE5606BE8, /*  167  */
	0x5C88F19B, /*  168  */
	0x4C0841EE, /*  169  */
	0x1FE37267, /*  170  */
	0x11F9C4F4, /*  171  */
	0x9F1B9DAE, /*  172  */
	0x864E76D0, /*  173  */
	0xE637C731, /*  174  */
	0xD97D23A6, /*  175  */
	0x32F53D5C, /*  176  */
	0xB8161980, /*  177  */
	0x93FA0F84, /*  178  */
	0xCAEF0870, /*  179  */
	0x8874487E, /*  180  */
	0x98F2CC73, /*  181  */
	0x645FB5C6, /*  182  */
	0xCD853659, /*  183  */
	0x2062470D, /*  184  */
	0x16EDE8E9, /*  185  */
	0x6B06DAB5, /*  186  */
	0x78B43900, /*  187  */
	0xFC95B786, /*  188  */
	0x5D8E7DE1, /*  189  */
	0x465B5954, /*  190  */
	0xFE7BA014, /*  191  */
	0xF7D23F7B, /*  192  */
	0x92BC8B18, /*  193  */
	0x3593592, /*  194  */
	0x55CEF4F7, /*  195  */
	0x74B27317, /*  196  */
	0x79DE1FC2, /*  197  */
	0xC8A0BFBD, /*  198  */
	0x229398CC, /*  199  */
	0x62A602CE, /*  200  */
	0xBCB94661, /*  201  */
	0x5336D206, /*  202  */
	0xD2A375FE, /*  203  */
	0x6A6AB483, /*  204  */
	0x4702A5A4, /*  205  */
	0xA2E9D73D, /*  206  */
	0x23A2E0F1, /*  207  */
	0x9189140A, /*  208  */
	0x581D18DC, /*  209  */
	0xB39A922B, /*  210  */
	0x82356212, /*  211  */
	0xD5F432A9, /*  212  */
	0xD356C2A3, /*  213  */
	0x5F765B4D, /*  214  */
	0x450AFCC8, /*  215  */
	0x4415E137, /*  216  */
	0xE8ECDFBC, /*  217  */
	0xED0DE3EA, /*  218  */
	0x60D42B13, /*  219  */
	0xF13DF971, /*  220  */
	0x71FC5DA2, /*  221  */
	0xC1455340, /*  222  */
	0xF087742F, /*  223  */
	0xF55E5751, /*  224  */
	0x67B3C1F8, /*  225  */
	0xAC6B8774, /*  226  */
	0x7DCFAAAC, /*  227  */
	0x95983BC0, /*  228  */
	0x489BB0B1, /*  229  */
	0x2C184223, /*  230  */
	0x964B6726, /*  231  */
	0x2BD3271C, /*  232  */
	0x72266472, /*  233  */
	0xDED64530, /*  234  */
	0xA2AA343, /*  235  */
	0xD4F716A0, /*  236  */
	0xB4DAD6D9, /*  237  */
	0x2184345E, /*  238  */
	0x512C990C, /*  239  */
	0x29D92D08, /*  240  */
	0x2EBE709A, /*  241  */
	0x1144C69, /*  242  */
	0x34584B9D, /*  243  */
	0xE4634ED6, /*  244  */
	0xECC963CF, /*  245  */
	0x3C6984AA, /*  246  */
	0x4ED056EF, /*  247  */
	0x9CA56976, /*  248  */
	0x8F3E80D4, /*  249  */
	0xB5BAE7C5, /*  250  */
	0x30B5CAF5, /*  251  */
	0x63F33A64, /*  252  */
	0xA9E4BBDE, /*  253  */
	0xF6B82298, /*  254  */
	0x4D673C1D}, /*  255  */
	
	{
	/*  Start of S Box 5 */
	
	0x4B4F1121, /*  0  */
	0xBA183081, /*  1  */
	0xC784F41F, /*  2  */
	0xD17D0BAC, /*  3  */
	0x83D2267, /*  4  */
	0x37B1361E, /*  5  */
	0x3581AD05, /*  6  */
	0xFDA2F6BC, /*  7  */
	0x1E892CDD, /*  8  */
	0xB56D3C3A, /*  9  */
	0x32140E46, /*  10  */
	0x138D8AAB, /*  11  */
	0xE14773D4, /*  12  */
	0x5B0E71DF, /*  13  */
	0x5D1FE055, /*  14  */
	0x3FB991D3, /*  15  */
	0xF1F46C71, /*  16  */
	0xA325988C, /*  17  */
	0x10F66E80, /*  18  */
	0xB1006348, /*  19  */
	0x726A9F60, /*  20  */
	0x3B67F8BA, /*  21  */
	0x4E114EF4, /*  22  */
	0x5C52115, /*  23  */
	0x4C5CA11C, /*  24  */
	0x99E1EFD8, /*  25  */
	0x471B83B3, /*  26  */
	0xCBF7E524, /*  27  */
	0x43AD82F5, /*  28  */
	0x690CA93B, /*  29  */
	0xFAA61BB2, /*  30  */
	0x12A832B5, /*  31  */
	0xB734F943, /*  32  */
	0xBD22AEA7, /*  33  */
	0x88FEC626, /*  34  */
	0x5E80C3E7, /*  35  */
	0xBE3EAF5E, /*  36  */
	0x44617652, /*  37  */
	0xA5724475, /*  38  */
	0xBB3B9695, /*  39  */
	0x7F3FEE8F, /*  40  */
	0x964E7DEB, /*  41  */
	0x518C052D, /*  42  */
	0x2A0BBC2B, /*  43  */
	0xC2175F5C, /*  44  */
	0x9A7B3889, /*  45  */
	0xA70D8D0C, /*  46  */
	0xEACCDD29, /*  47  */
	0xCCCD6658, /*  48  */
	0x34BB25E6, /*  49  */
	0xB8391090, /*  50  */
	0xF651356F, /*  51  */
	0x52987C9E, /*  52  */
	0xC16C1CD, /*  53  */
	0x8E372D3C, /*  54  */
	0x2FC6EBBD, /*  55  */
	0x6E5DA3E3, /*  56  */
	0xB0E27239, /*  57  */
	0x5F685738, /*  58  */
	0x45411786, /*  59  */
	0x67F65F8, /*  60  */
	0x61778B40, /*  61  */
	0x81AB2E65, /*  62  */
	0x14C8F0F9, /*  63  */
	0xA6B7B4CE, /*  64  */
	0x4036EAEC, /*  65  */
	0xBF62B00A, /*  66  */
	0xECFD5E02, /*  67  */
	0x45449A6, /*  68  */
	0xB20AFD28, /*  69  */
	0x2166D273, /*  70  */
	0xD13A863, /*  71  */
	0x89508756, /*  72  */
	0xD51A7530, /*  73  */
	0x2D653F7A, /*  74  */
	0x3CDBDBC3, /*  75  */
	0x80C9DF4F, /*  76  */
	0x3D5812D9, /*  77  */
	0x53FBB1F3, /*  78  */
	0xC0F185C0, /*  79  */
	0x7A3C3D7E, /*  80  */
	0x68646410, /*  81  */
	0x857607A0, /*  82  */
	0x1D12622E, /*  83  */
	0x97F33466, /*  84  */
	0xDB4C9917, /*  85  */
	0x6469607C, /*  86  */
	0x566E043D, /*  87  */
	0x79EF1EDB, /*  88  */
	0x2C05898D, /*  89  */
	0xC9578E25, /*  90  */
	0xCD380101, /*  91  */
	0x46E04377, /*  92  */
	0x7D1CC7A9, /*  93  */
	0x6552B837, /*  94  */
	0x20192608, /*  95  */
	0xB97500C5, /*  96  */
	0xED296B44, /*  97  */
	0x368648B4, /*  98  */
	0x62995CD5, /*  99  */
	0x82731400, /*  100  */
	0xF9AEBD8B, /*  101  */
	0x3844C0C7, /*  102  */
	0x7C2DE794, /*  103  */
	0x33A1A770, /*  104  */
	0x8AE528C2, /*  105  */
	0x5A2BE812, /*  106  */
	0x1F8F4A07, /*  107  */
	0x2B5ED7CA, /*  108  */
	0x937EB564, /*  109  */
	0x6FDA7E11, /*  110  */
	0xE49B5D6C, /*  111  */
	0xB4B3244E, /*  112  */
	0x18AA53A4, /*  113  */
	0x3A061334, /*  114  */
	0x4D6067A3, /*  115  */
	0x83BA5868, /*  116  */
	0x9BDF4DFE, /*  117  */
	0x7449F261, /*  118  */
	0x709F8450, /*  119  */
	0xCAD133CB, /*  120  */
	0xDE941C3F, /*  121  */
	0xF52AE484, /*  122  */
	0x781D77ED, /*  123  */
	0x7E4395F0, /*  124  */
	0xAE103B59, /*  125  */
	0x922331BB, /*  126  */
	0x42CE50C8, /*  127  */
	0xE6F08153, /*  128  */
	0xE7D941D0, /*  129  */
	0x5028ED6B, /*  130  */
	0xB3D2C49B, /*  131  */
	0xAD4D9C3E, /*  132  */
	0xD201FB6E, /*  133  */
	0xA45BD5BE, /*  134  */
	0xFFCB7F4B, /*  135  */
	0x579D7806, /*  136  */
	0xF821BB5B, /*  137  */
	0x59D592AD, /*  138  */
	0xD0BE0C31, /*  139  */
	0xD4E3B676, /*  140  */
	0x107165A, /*  141  */
	0xFE939D2, /*  142  */
	0x49BCAAFD, /*  143  */
	0x55FFCFE5, /*  144  */
	0x2EC1F783, /*  145  */
	0xF39A09A5, /*  146  */
	0x3EB42772, /*  147  */
	0x19B55A5D, /*  148  */
	0x24A0679, /*  149  */
	0x8C83B3F7, /*  150  */
	0x8642BA1D, /*  151  */
	0xACACD9EA, /*  152  */
	0x87D352C4, /*  153  */
	0x60931F45, /*  154  */
	0xA05F97D7, /*  155  */
	0x1CECD42C, /*  156  */
	0xE2FCC87B, /*  157  */
	0xB60F94E2, /*  158  */
	0x67A34B0B, /*  159  */
	0xFCDD40C9, /*  160  */
	0xB150A27, /*  161  */
	0xD3EE9E04, /*  162  */
	0x582E29E9, /*  163  */
	0x4AC22B41, /*  164  */
	0x6AC4E1B8, /*  165  */
	0xBCCAA51A, /*  166  */
	0x237AF30E, /*  167  */
	0xEBC3B709, /*  168  */
	0xC4A59D19, /*  169  */
	0x284BC98A, /*  170  */
	0xE9D41A93, /*  171  */
	0x6BFA2018, /*  172  */
	0x73B2D651, /*  173  */
	0x11F9A2FA, /*  174  */
	0xCE09BFF1, /*  175  */
	0x41A470AA, /*  176  */
	0x25888F22, /*  177  */
	0x77E754E8, /*  178  */
	0xF7330D8E, /*  179  */
	0x158EAB16, /*  180  */
	0xC5D68842, /*  181  */
	0xC685A6F6, /*  182  */
	0xE5B82FDE, /*  183  */
	0x9EA3A96, /*  184  */
	0x6DDE1536, /*  185  */
	0x4FA919DA, /*  186  */
	0x26C0BE9F, /*  187  */
	0x9EED6F69, /*  188  */
	0xF05555F2, /*  189  */
	0xE06FC285, /*  190  */
	0x9CD76D23, /*  191  */
	0xAF452A92, /*  192  */
	0xEFC74CB7, /*  193  */
	0x9D6B4732, /*  194  */
	0x8BE408EE, /*  195  */
	0x22401D0D, /*  196  */
	0xEE6C459D, /*  197  */
	0x7587CB82, /*  198  */
	0xE8746862, /*  199  */
	0x5CBDDE87, /*  200  */
	0x98794278, /*  201  */
	0x31AFB94D, /*  202  */
	0xC11E0F2F, /*  203  */
	0x30E8FC2A, /*  204  */
	0xCF3261EF, /*  205  */
	0x1A3023E1, /*  206  */
	0xAA2F86CF, /*  207  */
	0xF202E24A, /*  208  */
	0x8D08DCFF, /*  209  */
	0x764837C6, /*  210  */
	0xA26374CC, /*  211  */
	0x9F7C3E88, /*  212  */
	0x949CC57D, /*  213  */
	0xDD26A07F, /*  214  */
	0xC39EFAB0, /*  215  */
	0xC8F879A1, /*  216  */
	0xDCE67BB9, /*  217  */
	0xF4B0A435, /*  218  */
	0x912C9AE0, /*  219  */
	0xD85603E4, /*  220  */
	0x953A9BBF, /*  221  */
	0xFB8290D6, /*  222  */
	0xAEBCD5F, /*  223  */
	0x16206A9A, /*  224  */
	0x6C787A14, /*  225  */
	0xD9A0F16A, /*  226  */
	0x29BF4F74, /*  227  */
	0x8F8BCE91, /*  228  */
	0xE5A9354, /*  229  */
	0xAB038CB1, /*  230  */
	0x1B8AD11B, /*  231  */
	0xE327FF49, /*  232  */
	0x53DA20, /*  233  */
	0x90CF51DC, /*  234  */
	0xDA92FE6D, /*  235  */
	0x390CA47, /*  236  */
	0xA8958097, /*  237  */
	0xA9DC5BAF, /*  238  */
	0x3931E3C1, /*  239  */
	0x840446B6, /*  240  */
	0x63D069FB, /*  241  */
	0xD7460299, /*  242  */
	0x7124ECD1, /*  243  */
	0x791E613, /*  244  */
	0x485918FC, /*  245  */
	0xD635D04C, /*  246  */
	0xDF96AC33, /*  247  */
	0x66F2D303, /*  248  */
	0x247056AE, /*  249  */
	0xA1A7B2A8, /*  250  */
	0x27D8CC9C, /*  251  */
	0x17B6E998, /*  252  */
	0x7BF5590F, /*  253  */
	0xFE97F557, /*  254  */
	0x5471D8A2}, /*  255  */
	
	{
	/*  Start of S Box 6 */
	
	0x83A327A1, /*  0  */
	0x9F379F51, /*  1  */
	0x40A7D007, /*  2  */
	0x11307423, /*  3  */
	0x224587C1, /*  4  */
	0xAC27D63B, /*  5  */
	0x3B7E64EA, /*  6  */
	0x2E1CBFA6, /*  7  */
	0x9996000, /*  8  */
	0x3BC0E2C, /*  9  */
	0xD4C4478A, /*  10  */
	0x4542E0AB, /*  11  */
	0xFEDA26D4, /*  12  */
	0xC1D10FCB, /*  13  */
	0x8252F596, /*  14  */
	0x4494EB5C, /*  15  */
	0xA362F314, /*  16  */
	0xF5BA81FD, /*  17  */
	0x75C3A376, /*  18  */
	0x4CA214CA, /*  19  */
	0xE164DEDD, /*  20  */
	0x5088FA97, /*  21  */
	0x4B0930E0, /*  22  */
	0x2FCFB7E8, /*  23  */
	0x33A6F4B2, /*  24  */
	0xC7E94211, /*  25  */
	0x2D66C774, /*  26  */
	0x43BE8BAE, /*  27  */
	0xC663D445, /*  28  */
	0x908EB130, /*  29  */
	0xF4E3BE15, /*  30  */
	0x63B9D566, /*  31  */
	0x529396B5, /*  32  */
	0x1E1BE743, /*  33  */
	0x4D5FF63F, /*  34  */
	0x985E4A83, /*  35  */
	0x71AB9DF7, /*  36  */
	0xC516C6F5, /*  37  */
	0x85C19AB4, /*  38  */
	0x1F4DAEE4, /*  39  */
	0xF2973431, /*  40  */
	0xB713DC5E, /*  41  */
	0x3F2E159A, /*  42  */
	0xC824DA16, /*  43  */
	0x6BF376A, /*  44  */
	0xB2FE23EC, /*  45  */
	0xE39B1C22, /*  46  */
	0xF1EECB5F, /*  47  */
	0x8E82D52, /*  48  */
	0x565686C2, /*  49  */
	0xAB0AEA93, /*  50  */
	0xFD47219F, /*  51  */
	0xEBDBABD7, /*  52  */
	0x2404A185, /*  53  */
	0x8C7312B9, /*  54  */
	0xA8F2D828, /*  55  */
	0xC8902DA, /*  56  */
	0x65B42B63, /*  57  */
	0xC0BBEF62, /*  58  */
	0x4E3E4CEF, /*  59  */
	0x788F8018, /*  60  */
	0xEE1EBAB7, /*  61  */
	0x93928F9D, /*  62  */
	0x683D2903, /*  63  */
	0xD3B60689, /*  64  */
	0xAFCB0DDC, /*  65  */
	0x88A4C47A, /*  66  */
	0xF6DD9C3D, /*  67  */
	0x7EA5FCA0, /*  68  */
	0x8A6D7244, /*  69  */
	0xBE11F120, /*  70  */
	0x4FF91B8, /*  71  */
	0x8D2DC8C0, /*  72  */
	0x27F97FDB, /*  73  */
	0x7F9E1F47, /*  74  */
	0x1734F0C7, /*  75  */
	0x26F3ED8E, /*  76  */
	0xDF8F2BF, /*  77  */
	0xB0833D9E, /*  78  */
	0xE420A4E5, /*  79  */
	0xA423CAE6, /*  80  */
	0x95616772, /*  81  */
	0x9AE6C049, /*  82  */
	0x75941F2, /*  83  */
	0xD8E12812, /*  84  */
	0xF6F4F, /*  85  */
	0x3C0D6B05, /*  86  */
	0x6CEF921C, /*  87  */
	0xB82BC264, /*  88  */
	0x396CB008, /*  89  */
	0x5D608A6F, /*  90  */
	0x6D7782C8, /*  91  */
	0x186550AA, /*  92  */
	0x6B6FEC09, /*  93  */
	0x28E70B13, /*  94  */
	0x57CE5688, /*  95  */
	0xECD3AF84, /*  96  */
	0x23335A95, /*  97  */
	0x91F40CD2, /*  98  */
	0x7B6A3B26, /*  99  */
	0xBD32B3B6, /*  100  */
	0x3754A6FB, /*  101  */
	0x8ED088F0, /*  102  */
	0xF867E87C, /*  103  */
	0x20851746, /*  104  */
	0x6410F9C6, /*  105  */
	0x35380442, /*  106  */
	0xC2CA10A7, /*  107  */
	0x1ADEA27F, /*  108  */
	0x76BDDD79, /*  109  */
	0x92742CF4, /*  110  */
	0xE98F7EE, /*  111  */
	0x164E931D, /*  112  */
	0xB9C835B3, /*  113  */
	0x69060A99, /*  114  */
	0xB44C531E, /*  115  */
	0xFA7B66FE, /*  116  */
	0xC98A5B53, /*  117  */
	0x7D95AAE9, /*  118  */
	0x302F467B, /*  119  */
	0x74B811DE, /*  120  */
	0xF3866ABD, /*  121  */
	0xB5B3D32D, /*  122  */
	0xFC3157A4, /*  123  */
	0xD251FE19, /*  124  */
	0xB5D8EAC, /*  125  */
	0xDA71FFD5, /*  126  */
	0x47EA05A3, /*  127  */
	0x5C6A9E1, /*  128  */
	0xCA0EE958, /*  129  */
	0x9939034D, /*  130  */
	0x25DC5EDF, /*  131  */
	0x79083CB1, /*  132  */
	0x86768450, /*  133  */
	0xCF757D6D, /*  134  */
	0x5972B6BC, /*  135  */
	0xA78D59C9, /*  136  */
	0xC4AD8D41, /*  137  */
	0x2A362AD3, /*  138  */
	0xD1179991, /*  139  */
	0x601407FF, /*  140  */
	0xDCF50917, /*  141  */
	0x587069D0, /*  142  */
	0xE0821ED6, /*  143  */
	0xDBB59427, /*  144  */
	0x73911A4B, /*  145  */
	0x7C904FC3, /*  146  */
	0x844AFB92, /*  147  */
	0x6F8C955D, /*  148  */
	0xE8C0C5BB, /*  149  */
	0xB67AB987, /*  150  */
	0xA529D96C, /*  151  */
	0xF91F7181, /*  152  */
	0x618B1B06, /*  153  */
	0xE718BB0C, /*  154  */
	0x8BD7615B, /*  155  */
	0xD5A93A59, /*  156  */
	0x54AEF81B, /*  157  */
	0x772136E3, /*  158  */
	0xCE44FD9C, /*  159  */
	0x10CDA57E, /*  160  */
	0x87D66E0B, /*  161  */
	0x3D798967, /*  162  */
	0x1B2C1804, /*  163  */
	0x3EDFBD68, /*  164  */
	0x15F6E62B, /*  165  */
	0xEF68B854, /*  166  */
	0x3896DB35, /*  167  */
	0x12B7B5E2, /*  168  */
	0xCB489029, /*  169  */
	0x9E4F98A5, /*  170  */
	0x62EB77A8, /*  171  */
	0x217C24A2, /*  172  */
	0x964152F6, /*  173  */
	0x49B2080A, /*  174  */
	0x53D23EE7, /*  175  */
	0x48FB6D69, /*  176  */
	0x1903D190, /*  177  */
	0x9449E494, /*  178  */
	0xBF6E7886, /*  179  */
	0xFB356CFA, /*  180  */
	0x3A261365, /*  181  */
	0x424BC1EB, /*  182  */
	0xA1192570, /*  183  */
	0x19CA782, /*  184  */
	0x9D3F7E0E, /*  185  */
	0x9C127575, /*  186  */
	0xEDF02039, /*  187  */
	0xAD57BCCE, /*  188  */
	0x5C153277, /*  189  */
	0x81A84540, /*  190  */
	0xBCAA7356, /*  191  */
	0xCCD59B60, /*  192  */
	0xA62A629B, /*  193  */
	0xA25CCD10, /*  194  */
	0x2B5B65CF, /*  195  */
	0x1C535832, /*  196  */
	0x55FD4E3A, /*  197  */
	0x31D9790D, /*  198  */
	0xF06BC37D, /*  199  */
	0x4AFC1D71, /*  200  */
	0xAEED5533, /*  201  */
	0xBA461634, /*  202  */
	0xBB694B78, /*  203  */
	0x5F3A5C73, /*  204  */
	0x6A3C764A, /*  205  */
	0x8FB0CCA9, /*  206  */
	0xF725684C, /*  207  */
	0x4FE5382F, /*  208  */
	0x1D0163AF, /*  209  */
	0x5AA07A8F, /*  210  */
	0xE205A8ED, /*  211  */
	0xC30BAD38, /*  212  */
	0xFF22CF1F, /*  213  */
	0x72432E2E, /*  214  */
	0x32C2518B, /*  215  */
	0x3487CE4E, /*  216  */
	0x7AE0AC02, /*  217  */
	0x709FA098, /*  218  */
	0xA3B395A, /*  219  */
	0x5B4043F8, /*  220  */
	0xA9E48C36, /*  221  */
	0x149A8521, /*  222  */
	0xD07DEE6B, /*  223  */
	0x46ACD2F3, /*  224  */
	0x8958DFFC, /*  225  */
	0xB3A1223C, /*  226  */
	0xB11D31C4, /*  227  */
	0xCD7F4D3E, /*  228  */
	0xF28E3AD, /*  229  */
	0xE5B100BE, /*  230  */
	0xAAC54824, /*  231  */
	0xE9C9D7BA, /*  232  */
	0x9BD47001, /*  233  */
	0x80F149B0, /*  234  */
	0x66022F0F, /*  235  */
	0x20C4048, /*  236  */
	0x6EFA192A, /*  237  */
	0x67073F8D, /*  238  */
	0x13EC7BF9, /*  239  */
	0x3655011A, /*  240  */
	0xE6AFE157, /*  241  */
	0xD9845F6E, /*  242  */
	0xDECC4425, /*  243  */
	0x511AE2CC, /*  244  */
	0xDF81B4D8, /*  245  */
	0xD7809E55, /*  246  */
	0xD6D883D9, /*  247  */
	0x2CC7978C, /*  248  */
	0x5E787CC5, /*  249  */
	0xDD0033D1, /*  250  */
	0xA050C937, /*  251  */
	0x97F75DCD, /*  252  */
	0x299DE580, /*  253  */
	0x41E2B261, /*  254  */
	0xEA5A54F1}, /*  255  */
	
	{
	/*  Start of S Box 7 */
	
	0x7E672590, /*  0  */
	0xBEA513BB, /*  1  */
	0x2C906FE6, /*  2  */
	0x86029C2B, /*  3  */
	0x55DC4F74, /*  4  */
	0x553398E, /*  5  */
	0x63E09647, /*  6  */
	0xCAFD0BAB, /*  7  */
	0x264C37DF, /*  8  */
	0x8272210F, /*  9  */
	0x67AFA669, /*  10  */
	0x12D98A5F, /*  11  */
	0x8CAB23C4, /*  12  */
	0x75C68BD1, /*  13  */
	0xC3370470, /*  14  */
	0x33F37F4E, /*  15  */
	0x283992FF, /*  16  */
	0xE73A3A67, /*  17  */
	0x1032F283, /*  18  */
	0xF5AD9FC2, /*  19  */
	0x963F0C5D, /*  20  */
	0x664FBC45, /*  21  */
	0x202BA41C, /*  22  */
	0xC7C02D80, /*  23  */
	0x54731E84, /*  24  */
	0x8A1085F5, /*  25  */
	0x601D80FB, /*  26  */
	0x2F968E55, /*  27  */
	0x35E96812, /*  28  */
	0xE45A8F78, /*  29  */
	0xBD7DE662, /*  30  */
	0x3B6E6EAD, /*  31  */
	0x8097C5EF, /*  32  */
	0x70B6781, /*  33  */
	0xB1E508F3, /*  34  */
	0x24E4FAE3, /*  35  */
	0xB81A7805, /*  36  */
	0xEC0FC918, /*  37  */
	0x43C8774B, /*  38  */
	0x9B2512A9, /*  39  */
	0x2B05AD04, /*  40  */
	0x32C2536F, /*  41  */
	0xEDF236E0, /*  42  */
	0x8BC4B0CF, /*  43  */
	0xBACEB837, /*  44  */
	0x4535B289, /*  45  */
	0xD0E94C3, /*  46  */
	0xA5A371D0, /*  47  */
	0xAD695A58, /*  48  */
	0x39E3437D, /*  49  */
	0x9186BFFC, /*  50  */
	0x21038C3B, /*  51  */
	0xAA9DFF9, /*  52  */
	0x5D1F06CE, /*  53  */
	0x62DEF8A4, /*  54  */
	0xF740A2B4, /*  55  */
	0xA2575868, /*  56  */
	0x682683C1, /*  57  */
	0xDBB30FAC, /*  58  */
	0x61FE1928, /*  59  */
	0x468A6511, /*  60  */
	0xC61CD5F4, /*  61  */
	0xE54D9800, /*  62  */
	0x6B98D7F7, /*  63  */
	0x8418B6A5, /*  64  */
	0x5F09A5D2, /*  65  */
	0x90B4E80B, /*  66  */
	0x49B2C852, /*  67  */
	0x69F11C77, /*  68  */
	0x17412B7E, /*  69  */
	0x7F6FC0ED, /*  70  */
	0x56838DCC, /*  71  */
	0x6E9546A2, /*  72  */
	0xD0758619, /*  73  */
	0x87B9B9A, /*  74  */
	0xD231A01D, /*  75  */
	0xAF46D415, /*  76  */
	0x97060FD, /*  77  */
	0xD920F657, /*  78  */
	0x882D3F9F, /*  79  */
	0x3AE7C3C9, /*  80  */
	0xE8A00D9B, /*  81  */
	0x4FE67EBE, /*  82  */
	0x2EF80EB2, /*  83  */
	0xC1916B0C, /*  84  */
	0xF4DFFEA0, /*  85  */
	0xB97EB3EB, /*  86  */
	0xFDFF84DD, /*  87  */
	0xFF8B14F1, /*  88  */
	0xE96B0572, /*  89  */
	0xF64B508C, /*  90  */
	0xAE220A6E, /*  91  */
	0x4423AE5A, /*  92  */
	0xC2BECE5E, /*  93  */
	0xDE27567C, /*  94  */
	0xFC935C63, /*  95  */
	0x47075573, /*  96  */
	0xE65B27F0, /*  97  */
	0xE121FD22, /*  98  */
	0xF2668753, /*  99  */
	0x2DEBF5D7, /*  100  */
	0x8347E08D, /*  101  */
	0xAC5EDA03, /*  102  */
	0x2A7CEBE9, /*  103  */
	0x3FE8D92E, /*  104  */
	0x23542FE4, /*  105  */
	0x1FA7BD50, /*  106  */
	0xCF9B4102, /*  107  */
	0x9D0DBA39, /*  108  */
	0x9CB8902A, /*  109  */
	0xA7249D8B, /*  110  */
	0xF6D667A, /*  111  */
	0x5EBFA9EC, /*  112  */
	0x6A594DF2, /*  113  */
	0x79600938, /*  114  */
	0x23B7591, /*  115  */
	0xEA2C79C8, /*  116  */
	0xC99D07EA, /*  117  */
	0x64CB5EE1, /*  118  */
	0x1A9CAB3D, /*  119  */
	0x76DB9527, /*  120  */
	0xC08E012F, /*  121  */
	0x3DFB481A, /*  122  */
	0x872F22E7, /*  123  */
	0x2948D15C, /*  124  */
	0xA4782C79, /*  125  */
	0x6F50D232, /*  126  */
	0x78F0728A, /*  127  */
	0x5A87AAB1, /*  128  */
	0xC4E2C19C, /*  129  */
	0xEE767387, /*  130  */
	0x1B2A1864, /*  131  */
	0x7B8D10D3, /*  132  */
	0xD1713161, /*  133  */
	0xEEAC456, /*  134  */
	0xD8799E06, /*  135  */
	0xB645B548, /*  136  */
	0x4043CB65, /*  137  */
	0xA874FB29, /*  138  */
	0x4B12D030, /*  139  */
	0x7D687413, /*  140  */
	0x18EF9A1F, /*  141  */
	0xD7631D4C, /*  142  */
	0x5829C7DA, /*  143  */
	0xCDFA30FA, /*  144  */
	0xC5084BB0, /*  145  */
	0x92CD20E2, /*  146  */
	0xD4C16940, /*  147  */
	0x3283EC0, /*  148  */
	0xA917813F, /*  149  */
	0x9A587D01, /*  150  */
	0x70041F8F, /*  151  */
	0xDC6AB1DC, /*  152  */
	0xDDAEE3D5, /*  153  */
	0x31829742, /*  154  */
	0x198C022D, /*  155  */
	0x1C9EAFCB, /*  156  */
	0x5BBC6C49, /*  157  */
	0xD3D3293A, /*  158  */
	0x16D50007, /*  159  */
	0x4BB8820, /*  160  */
	0x3C5C2A41, /*  161  */
	0x37EE7AF8, /*  162  */
	0x8EB04025, /*  163  */
	0x9313ECBA, /*  164  */
	0xBFFC4799, /*  165  */
	0x8955A744, /*  166  */
	0xEF85D633, /*  167  */
	0x504499A7, /*  168  */
	0xA6CA6A86, /*  169  */
	0xBB3D3297, /*  170  */
	0xB34A8236, /*  171  */
	0x6DCCBE4F, /*  172  */
	0x6143394, /*  173  */
	0xCE19FC7B, /*  174  */
	0xCCC3C6C6, /*  175  */
	0xE36254AE, /*  176  */
	0x77B7EDA1, /*  177  */
	0xA133DD9E, /*  178  */
	0xEBF9356A, /*  179  */
	0x513CCF88, /*  180  */
	0xE2A1B417, /*  181  */
	0x972EE5BD, /*  182  */
	0x853824CD, /*  183  */
	0x5752F4EE, /*  184  */
	0x6C1142E8, /*  185  */
	0x3EA4F309, /*  186  */
	0xB2B5934A, /*  187  */
	0xDFD628AA, /*  188  */
	0x59ACEA3E, /*  189  */
	0xA01EB92C, /*  190  */
	0x389964BC, /*  191  */
	0xDA305DD4, /*  192  */
	0x19A59B7, /*  193  */
	0x11D2CA93, /*  194  */
	0xFAA6D3B9, /*  195  */
	0x4E772ECA, /*  196  */
	0x72651776, /*  197  */
	0xFB4E5B0E, /*  198  */
	0xA38F91A8, /*  199  */
	0x1D0663B5, /*  200  */
	0x30F4F192, /*  201  */
	0xB50051B6, /*  202  */
	0xB716CCB3, /*  203  */
	0x4ABD1B59, /*  204  */
	0x146C5F26, /*  205  */
	0xF134E2DE, /*  206  */
	0xF67C6C, /*  207  */
	0xB0E1B795, /*  208  */
	0x98AA4EC7, /*  209  */
	0xCC73B34, /*  210  */
	0x654276A3, /*  211  */
	0x8D1BA871, /*  212  */
	0x740A5216, /*  213  */
	0xE0D01A23, /*  214  */
	0x9ED161D6, /*  215  */
	0x9F36A324, /*  216  */
	0x993EBB7F, /*  217  */
	0xFEB9491B, /*  218  */
	0x365DDCDB, /*  219  */
	0x810CFFC5, /*  220  */
	0x71EC0382, /*  221  */
	0x2249E7BF, /*  222  */
	0x48817046, /*  223  */
	0xF3A24A5B, /*  224  */
	0x4288E4D9, /*  225  */
	0xBF5C243, /*  226  */
	0x257FE151, /*  227  */
	0x95B64C0D, /*  228  */
	0x4164F066, /*  229  */
	0xAAF7DB08, /*  230  */
	0x73B1119D, /*  231  */
	0x8F9F7BB8, /*  232  */
	0xD6844596, /*  233  */
	0xF07A34A6, /*  234  */
	0x53943D0A, /*  235  */
	0xF9DD166D, /*  236  */
	0x7A8957AF, /*  237  */
	0xF8BA3CE5, /*  238  */
	0x27C9621E, /*  239  */
	0x5CDAE910, /*  240  */
	0xC8518998, /*  241  */
	0x941538FE, /*  242  */
	0x136115D8, /*  243  */
	0xABA8443C, /*  244  */
	0x4D01F931, /*  245  */
	0x34EDF760, /*  246  */
	0xB45F266B, /*  247  */
	0xD5D4DE14, /*  248  */
	0x52D8AC35, /*  249  */
	0x15CFD885, /*  250  */
	0xCBC5CD21, /*  251  */
	0x4CD76D4D, /*  252  */
	0x7C80EF54, /*  253  */
	0xBC92EE75, /*  254  */
	0x1E56A1F6}/*  255  */
	
	
	};
	
	
	
	
*-*-END-*-*
sed 's/^	//' >testSBoxes.c <<\*-*-END-*-*
	/* This program generates and tests the standard S-boxes used by Snefru,
		the one way hash function.  It uses the RAND table of random numbers.
	
	
	This is version 2.0, July 31, 1989.
	
	
	
	Copyright (c) Xerox Corporation 1989
	All rights reserved.
	
	License to copy and use this software is granted.
	
	License is also granted to make and use derivative works.
	
	Xerox Corporation makes no representations concerning either the
	merchantability of this software or the suitability of this software for any
	particular purpose.  It is provided "as is" without express or implied
	warranty of any kind.
	
	These notices must be retained in any copies of any part of this software.
	
	
	
	
	#define inputFile 0		/* normally standard in */
	#define outputFile 1		/* normally standard out */
	#define errorFile 2		/* normally standard error */
	
	
	#define SBoxCount 8		/* number of S boxes in the set of standard S
					   boxes */
	
	
	
	
	/* The random table is the first part of the random digits from the book:
	   'A Million Random Digits with 100,000 Normal Deviates", by the RAND
	   Corporation, published by the Free Press, 1955.  The formatting is similar
	   to the book to allow easy inspection and verification. The random digits
	   are also available on magnetic tape or diskettes from the RAND
	   corporation.
	
	Send inquiries to: The RAND Corporation, Computer Information Systems, 1700
	   Main St., Santa Monica California 90406;  ATTN:  Jackie McGee
	
	*/
	
	
	/* The following two global variables are used only by 'randomDigit' */
	
	/* group location in the table of random digits */
	int     locationInRANDtable = 0;
		/* location within a 5-digit group  */
	int     locationIn5DigitGroup = 0;
	
	
	#define sizeOfRANDtableIn5DigitGroups 4810
	char    RANDtable[sizeOfRANDtableIn5DigitGroups][5] = {
	/* 0 */	"10097", "32533", "76520", "13586", "34673",
				"54876", "80959", "09117", "39292", "74945",
	/* 1 */	"37542", "04805", "64894", "74296", "24805",
				"24037", "20636", "10402", "00822", "91665",
	/* 2 */	"08422", "68953", "19645", "09303", "23209",
				"02560", "15953", "34764", "35080", "33606",
	/* 3 */	"99019", "02529", "09376", "70715", "38311",
				"31165", "88676", "74397", "04436", "27659",
	/* 4 */	"12807", "99970", "80157", "36147", "64032",
				"36653", "98951", "16877", "12171", "76833",
	/* 5 */	"66065", "74717", "34072", "76850", "36697",
				"36170", "65813", "39885", "11199", "29170",
	/* 6 */	"31060", "10805", "45571", "82406", "35303",
				"42614", "86799", "07439", "23403", "09732",
	/* 7 */	"85269", "77602", "02051", "65692", "68665",
				"74818", "73053", "85247", "18623", "88579",
	/* 8 */	"63573", "32135", "05325", "47048", "90553",
				"57548", "28468", "28709", "83491", "25624",
	/* 9 */	"73796", "45753", "03529", "64778", "35808",
				"34282", "60935", "20344", "35273", "88435",
	/* 10 */	"98520", "17767", "14905", "68607", "22109",
				"40558", "60970", "93433", "50500", "73998",
	/* 11 */	"11805", "05431", "39808", "27732", "50725",
				"68248", "29405", "24201", "52775", "67851",
	/* 12 */	"83452", "99634", "06288", "98083", "13746",
				"70078", "18475", "40610", "68711", "77817",
	/* 13 */	"88685", "40200", "86507", "58401", "36766",
				"67951", "90364", "76493", "29609", "11062",
	/* 14 */	"99594", "67348", "87517", "64969", "91826",
				"08928", "93785", "61368", "23478", "34113",
	/* 15 */	"65481", "17674", "17468", "50950", "58047",
				"76974", "73039", "57186", "40218", "16544",
	/* 16 */	"80124", "35635", "17727", "08015", "45318",
				"22374", "21115", "78253", "14385", "53763",
	/* 17 */	"74350", "99817", "77402", "77214", "43236",
				"00210", "45521", "64237", "96286", "02655",
	/* 18 */	"69916", "26803", "66252", "29148", "36936",
				"87203", "76621", "13990", "94400", "56418",
	/* 19 */	"09893", "20505", "14225", "68514", "46427",
				"56788", "96297", "78822", "54382", "14598",
	/* 20 */	"91499", "14523", "68479", "27686", "46162",
				"83554", "94750", "89923", "37089", "20048",
	/* 21 */	"80336", "94598", "26940", "36858", "70297",
				"34135", "53140", "33340", "42050", "82341",
	/* 22 */	"44104", "81949", "85157", "47954", "32979",
				"26575", "57600", "40881", "22222", "06413",
	/* 23 */	"12550", "73742", "11100", "02040", "12860",
				"74697", "96644", "89439", "28707", "25815",
	/* 24 */	"63606", "49329", "16505", "34484", "40219",
				"52563", "43651", "77082", "07207", "31790",
	/* 25 */	"61196", "90446", "26457", "47774", "51924",
				"33729", "65394", "59593", "42582", "60527",
	/* 26 */	"15474", "45266", "95270", "79953", "59367",
				"83848", "82396", "10118", "33211", "59466",
	/* 27 */	"94557", "28573", "67897", "54387", "54622",
				"44431", "91190", "42592", "92927", "45973",
	/* 28 */	"42481", "16213", "97344", "08721", "16868",
				"48767", "03071", "12059", "25701", "46670",
	/* 29 */	"23523", "78317", "73208", "89837", "68935",
				"91416", "26252", "29663", "05522", "82562",
	/* 30 */	"04493", "52494", "75246", "33824", "45862",
				"51025", "61962", "79335", "65337", "12472",
	/* 31 */	"00549", "97654", "64051", "88159", "96119",
				"63896", "54692", "82391", "23287", "29529",
	/* 32 */	"35963", "15307", "26898", "09354", "33351",
				"35462", "77974", "50024", "90103", "39333",
	/* 33 */	"59808", "08391", "45427", "26842", "83609",
				"49700", "13021", "24892", "78565", "20106",
	/* 34 */	"46058", "85236", "01390", "92286", "77281",
				"44077", "93910", "83647", "70617", "42941",
	/* 35 */	"32179", "00597", "87379", "25241", "05567",
				"07007", "86743", "17157", "85394", "11838",
	/* 36 */	"69234", "61406", "20117", "45204", "15956",
				"60000", "18743", "92423", "97118", "96338",
	/* 37 */	"19565", "41430", "01758", "75379", "40419",
				"21585", "66674", "36806", "84962", "85207",
	/* 38 */	"45155", "14938", "19476", "07246", "43667",
				"94543", "59047", "90033", "20826", "69541",
	/* 39 */	"94864", "31994", "36168", "10851", "34888",
				"81553", "01540", "35456", "05014", "51176",
	/* 40 */	"98086", "24826", "45240", "28404", "44999",
				"08896", "39094", "73407", "35441", "31880",
	/* 41 */	"33185", "16232", "41941", "50949", "89435",
				"48581", "88695", "41994", "37548", "73043",
	/* 42 */	"80951", "00406", "96382", "70774", "20151",
				"23387", "25016", "25298", "94624", "61171",
	/* 43 */	"79752", "49140", "71961", "28296", "69861",
				"02591", "74852", "20539", "00387", "59579",
	/* 44 */	"18633", "32537", "98145", "06571", "31010",
				"24674", "05455", "61427", "77938", "91936",
	/* 45 */	"74029", "43902", "77557", "32270", "97790",
				"17119", "52527", "58021", "80814", "51748",
	/* 46 */	"54178", "45611", "80993", "37143", "05335",
				"12969", "56127", "19255", "36040", "90324",
	/* 47 */	"11664", "49883", "52079", "84827", "59381",
				"71539", "09973", "33440", "88461", "23356",
	/* 48 */	"48324", "77928", "31249", "64710", "02295",
				"36870", "32307", "57546", "15020", "09994",
	/* 49 */	"69074", "94138", "87637", "91976", "35584",
				"04401", "10518", "21615", "01848", "76938",
	/* 50 */	"09188", "20097", "32825", "39527", "04220",
				"86304", "83389", "87374", "64278", "58044",
	/* 51 */	"90045", "85497", "51981", "50654", "94938",
				"81997", "91870", "76150", "68476", "64659",
	/* 52 */	"73189", "50207", "47677", "26269", "62290",
				"64464", "27124", "67018", "41361", "82760",
	/* 53 */	"75768", "76490", "20971", "87749", "90429",
				"12272", "95375", "05871", "93823", "43178",
	/* 54 */	"54016", "44056", "66281", "31003", "00682",
				"27398", "20714", "53295", "07706", "17813",
	/* 55 */	"08358", "69910", "78542", "42785", "13661",
				"58873", "04618", "97553", "31223", "08420",
	/* 56 */	"28306", "03264", "81333", "10591", "40510",
				"07893", "32604", "60475", "94119", "01840",
	/* 57 */	"53840", "86233", "81594", "13628", "51215",
				"90290", "28466", "68795", "77762", "20791",
	/* 58 */	"91757", "53741", "61613", "62269", "50263",
				"90212", "55781", "76514", "83483", "47055",
	/* 59 */	"89415", "92694", "00397", "58391", "12607",
				"17646", "48949", "72306", "94541", "37408",
	/* 60 */	"77513", "03820", "86864", "29901", "68414",
				"82774", "51908", "13980", "72893", "55507",
	/* 61 */	"19502", "37174", "69979", "20288", "55210",
				"29773", "74287", "75251", "65344", "67415",
	/* 62 */	"21818", "59313", "93278", "81757", "05686",
				"73156", "07082", "85046", "31853", "38452",
	/* 63 */	"51474", "66499", "68107", "23621", "94049",
				"91345", "42836", "09191", "08007", "45449",
	/* 64 */	"99559", "68331", "62535", "24170", "69777",
				"12830", "74819", "78142", "43860", "72834",
	/* 65 */	"33713", "48007", "93584", "72869", "51926",
				"64721", "58303", "29822", "93174", "93972",
	/* 66 */	"85274", "86893", "11303", "22970", "28834",
				"34137", "73515", "90400", "71148", "43643",
	/* 67 */	"84133", "89640", "44035", "52166", "73852",
				"70091", "61222", "60561", "62327", "18423",
	/* 68 */	"56732", "16234", "17395", "96131", "10123",
				"91622", "85496", "57560", "81604", "18880",
	/* 69 */	"65138", "56806", "87648", "85261", "34313",
				"65861", "45875", "21069", "85644", "47277",
	/* 70 */	"38001", "02176", "81719", "11711", "71602",
				"92937", "74219", "64049", "65584", "49698",
	/* 71 */	"37402", "96397", "01304", "77586", "56271",
				"10086", "47324", "62605", "40030", "37438",
	/* 72 */	"97125", "40348", "87083", "31417", "21815",
				"39250", "75237", "62047", "15501", "29578",
	/* 73 */	"21826", "41134", "47143", "34072", "64638",
				"85902", "49139", "06441", "03856", "54552",
	/* 74 */	"73135", "42742", "95719", "09035", "85794",
				"74296", "08789", "88156", "64691", "19202",
	/* 75 */	"07638", "77929", "03061", "18072", "96207",
				"44156", "23821", "99538", "04713", "66994",
	/* 76 */	"60528", "83441", "07954", "19814", "59175",
				"20695", "05533", "52139", "61212", "06455",
	/* 77 */	"83596", "35655", "06958", "92983", "05128",
				"09719", "77433", "53783", "92301", "50498",
	/* 78 */	"10850", "62746", "99599", "10507", "13499",
				"06319", "53075", "71839", "06410", "19362",
	/* 79 */	"39820", "98952", "43622", "63147", "64421",
				"80814", "43800", "09351", "31024", "73167",
	/* 80 */	"59580", "06478", "75569", "78800", "88835",
				"54486", "23768", "06156", "04111", "08408",
	/* 81 */	"38508", "07341", "23793", "48763", "90822",
				"97022", "17719", "04207", "95954", "49953",
	/* 82 */	"30692", "70668", "94688", "16127", "56196",
				"80091", "82067", "63400", "05462", "69200",
	/* 83 */	"65443", "95659", "18288", "27437", "49632",
				"24041", "08337", "65676", "96299", "90836",
	/* 84 */	"27267", "50264", "13192", "72294", "07477",
				"44606", "17985", "48911", "97341", "30358",
	/* 85 */	"91307", "06991", "19072", "24210", "36699",
				"53728", "28825", "35793", "28976", "66252",
	/* 86 */	"68434", "94688", "84473", "13622", "62126",
				"98408", "12843", "82590", "09815", "93146",
	/* 87 */	"48908", "15877", "54745", "24591", "35700",
				"04754", "83824", "52692", "54130", "55160",
	/* 88 */	"06913", "45197", "42672", "78601", "11883",
				"09528", "63011", "98901", "14974", "40344",
	/* 89 */	"10455", "16019", "14210", "33712", "91342",
				"37821", "88325", "80851", "43667", "70883",
	/* 90 */	"12883", "97343", "65027", "61184", "04285",
				"01392", "17974", "15077", "90712", "26769",
	/* 91 */	"21778", "30976", "38807", "36961", "31649",
				"42096", "63281", "02023", "08816", "47449",
	/* 92 */	"19523", "59515", "65122", "59659", "86283",
				"68258", "69572", "13798", "16435", "91529",
	/* 93 */	"67245", "52670", "35583", "16563", "79246",
				"86686", "76463", "34222", "26655", "90802",
	/* 94 */	"60584", "47377", "07500", "37992", "45134",
				"26529", "26760", "83637", "41326", "44344",
	/* 95 */	"53853", "41377", "36066", "94850", "58838",
				"73859", "49364", "73331", "96240", "43642",
	/* 96 */	"24637", "38736", "74384", "89342", "52623",
				"07992", "12369", "18601", "03742", "83873",
	/* 97 */	"83080", "12451", "38992", "22815", "07759",
				"51777", "97377", "27585", "51972", "37867",
	/* 98 */	"16444", "24334", "36151", "99073", "27493",
				"70939", "85130", "32552", "54846", "54759",
	/* 99 */	"60790", "18157", "57178", "65762", "11161",
				"78576", "45819", "52979", "65130", "04860", 
	/* 100 */	"03991", "10461", "93716", "16894", "66083",
				"24653", "84609", "58232", "88618", "19161", 
	/* 101 */	"38555", "95554", "32886", "59780", "08355",
				"60860", "29735", "47762", "71299", "23853", 
	/* 102 */	"17546", "73704", "92052", "46215", "55121",
				"29281", "59076", "07936", "27954", "58909", 
	/* 103 */	"32643", "52861", "95819", "06831", "00911",
				"98936", "76355", "93779", "80863", "00514", 
	/* 104 */	"69572", "68777", "39510", "35905", "14060",
				"40619", "29549", "69616", "33564", "60780", 
	/* 105 */	"24122", "66591", "27699", "06494", "14845",
				"46672", "61958", "77100", "90899", "75754", 
	/* 106 */	"61196", "30231", "92962", "61773", "41839",
				"55382", "17267", "70943", "78038", "70267", 
	/* 107 */	"30532", "21704", "10274", "12202", "39685",
				"23309", "10061", "68829", "55986", "66485", 
	/* 108 */	"03788", "97599", "75867", "20717", "74416",
				"53166", "35208", "33374", "87539", "08823", 
	/* 109 */	"48228", "63379", "85783", "47619", "53152",
				"67433", "35663", "52972", "16818", "60311", 
	/* 110 */	"60365", "94653", "35075", "33949", "42614",
				"29297", "01918", "28316", "98953", "73231", 
	/* 111 */	"83799", "42402", "56623", "34442", "34994",
				"41374", "70071", "14736", "09958", "18065", 
	/* 112 */	"32960", "07405", "36409", "83232", "99385",
				"41600", "11133", "07586", "15917", "06253", 
	/* 113 */	"19322", "53845", "57620", "52606", "66497",
				"68646", "78138", "66559", "19640", "99413", 
	/* 114 */	"11220", "94747", "07399", "37408", "48509",
				"23929", "27482", "45476", "85244", "35159", 
	/* 115 */	"31751", "57260", "68980", "05339", "15470",
				"48355", "88651", "22596", "03152", "19121", 
	/* 116 */	"88492", "99382", "14454", "04504", "20094",
				"98977", "74843", "93413", "22109", "78508", 
	/* 117 */	"30934", "47744", "07481", "83828", "73788",
				"06533", "28597", "20405", "94205", "20380", 
	/* 118 */	"22888", "48893", "27499", "98748", "60530",
				"45128", "74022", "84617", "82037", "10268", 
	/* 119 */	"78212", "16993", "35902", "91386", "44372",
				"15486", "65741", "14014", "87481", "37220", 
	/* 120 */	"41849", "84547", "46850", "52326", "34677",
				"58300", "74910", "64345", "19325", "81549", 
	/* 121 */	"46352", "33049", "69248", "93460", "45305",
				"07521", "61318", "31855", "14413", "70951", 
	/* 122 */	"11087", "96294", "14013", "31792", "59747",
				"67277", "76503", "34513", "39663", "77544", 
	/* 123 */	"52701", "08337", "56303", "87315", "16520",
				"69676", "11654", "99893", "02181", "68161", 
	/* 124 */	"57275", "36898", "81304", "48585", "68652",
				"27376", "92852", "55866", "88448", "03584", 
	/* 125 */	"20857", "73156", "70284", "24326", "79375",
				"95220", "01159", "63267", "10622", "48391", 
	/* 126 */	"15633", "84924", "90415", "93614", "33521",
				"26665", "55823", "47641", "86225", "31704", 
	/* 127 */	"92694", "48297", "39904", "02115", "59589",
				"49067", "66821", "41575", "49767", "04037", 
	/* 128 */	"77613", "19019", "88152", "00080", "20554",
				"91409", "96277", "48257", "50816", "97616", 
	/* 129 */	"38688", "32486", "45134", "63545", "59404",
				"72059", "43947", "51680", "43852", "59693", 
	/* 130 */	"25163", "01889", "70014", "15021", "41290",
				"67312", "71857", "15957", "68971", "11403", 
	/* 131 */	"65251", "07629", "37239", "33295", "05870",
				"01119", "92784", "26340", "18477", "65622", 
	/* 132 */	"36815", "43625", "18637", "37509", "82444",
				"99005", "04921", "73701", "14707", "93997", 
	/* 133 */	"64397", "11692", "05327", "82162", "20247",
				"81759", "45197", "25332", "83745", "22567", 
	/* 134 */	"04515", "25624", "95096", "67946", "48460",
				"85558", "15191", "18782", "16930", "33361", 
	/* 135 */	"83761", "60873", "43253", "84145", "60833",
				"25983", "01291", "41349", "20368", "07126", 
	/* 136 */	"14387", "06345", "80854", "09279", "43529",
				"06318", "38384", "74761", "41196", "37480", 
	/* 137 */	"51321", "92246", "80088", "77074", "88722",
				"56736", "66164", "49431", "66919", "31678", 
	/* 138 */	"72472", "00008", "80890", "18002", "94813",
				"31900", "54155", "83436", "35352", "54131", 
	/* 139 */	"05466", "55306", "93128", "18464", "74457",
				"90561", "72848", "11834", "79982", "68416", 
	/* 140 */	"39528", "72484", "82474", "25593", "48545",
				"35247", "18619", "13674", "18611", "19241", 
	/* 141 */	"81616", "18711", "53342", "44276", "75122",
				"11724", "74627", "73707", "58319", "15997", 
	/* 142 */	"07586", "16120", "82641", "22820", "92904",
				"13141", "32392", "19763", "61199", "67940", 
	/* 143 */	"90767", "04235", "13574", "17200", "69902",
				"63742", "78464", "22501", "18627", "90872", 
	/* 144 */	"40188", "28193", "29593", "88627", "94972",
				"11598", "62095", "36787", "00441", "58997", 
	/* 145 */	"34414", "82157", "86887", "55087", "19152",
				"00023", "12302", "80783", "32624", "68691", 
	/* 146 */	"63439", "75363", "44989", "16822", "36024",
				"00867", "76378", "41605", "65961", "73488", 
	/* 147 */	"67049", "09070", "93399", "45547", "94458",
				"74284", "05041", "49807", "20288", "34060", 
	/* 148 */	"79495", "04146", "52162", "90286", "54158",
				"34243", "46978", "35482", "59362", "95938", 
	/* 149 */	"91704", "30552", "04737", "21031", "75051",
				"93029", "47665", "64382", "99782", "93478", 
	/* 150 */	"94015", "46874", "32444", "48277", "59820",
				"96163", "64654", "25843", "41145", "42820", 
	/* 151 */	"74108", "88222", "88570", "74015", "25704",
				"91035", "01755", "14750", "48968", "38603", 
	/* 152 */	"62880", "87873", "95160", "59221", "22304",
				"90314", "72877", "17334", "39283", "04149", 
	/* 153 */	"11748", "12102", "80580", "41867", "17710",
				"59621", "06554", "07850", "73950", "79552", 
	/* 154 */	"17944", "05600", "60478", "03343", "25852",
				"58905", "57216", "39618", "49856", "99326", 
	/* 155 */	"66067", "42792", "95043", "52680", "46780",
				"56487", "09971", "59481", "37006", "22186", 
	/* 156 */	"54244", "91030", "45547", "70818", "59849",
				"96169", "61459", "21647", "87417", "17198", 
	/* 157 */	"30945", "57589", "31732", "57260", "47670",
				"07654", "46376", "25366", "94746", "49580", 
	/* 158 */	"69170", "37403", "86995", "90307", "94304",
				"71803", "26825", "05511", "12459", "91314", 
	/* 159 */	"08345", "88975", "35841", "85771", "08105",
				"59987", "87112", "21476", "14713", "71181", 
	/* 160 */	"27767", "43584", "85301", "88977", "29490",
				"69714", "73035", "41207", "74699", "09310", 
	/* 161 */	"13025", "14338", "54066", "15243", "47724",
				"66733", "47431", "43905", "31048", "56699", 
	/* 162 */	"80217", "36292", "98525", "24335", "24432",
				"24896", "43277", "58874", "11466", "16082", 
	/* 163 */	"10875", "62004", "90391", "61105", "57411",
				"06368", "53856", "30743", "08670", "84741", 
	/* 164 */	"54127", "57326", "26629", "19087", "24472",
				"88779", "30540", "27886", "61732", "75454", 
	/* 165 */	"60311", "42824", "37301", "42678", "45990",
				"43242", "17374", "52003", "70707", "70214", 
	/* 166 */	"49739", "71484", "92003", "98086", "76668",
				"73209", "59202", "11973", "02902", "33250", 
	/* 167 */	"78626", "51594", "16453", "94614", "39014",
				"97066", "83012", "09832", "25571", "77628", 
	/* 168 */	"66692", "13986", "99837", "00582", "81232",
				"44987", "09504", "96412", "90193", "79568", 
	/* 169 */	"44071", "28091", "07362", "97703", "76447",
				"42537", "98524", "97831", "65704", "09514", 
	/* 170 */	"41468", "85149", "49554", "17994", "14924",
				"39650", "95294", "00556", "70481", "06905", 
	/* 171 */	"94559", "37559", "49678", "53119", "70312",
				"05682", "66986", "34099", "74474", "20740", 
	/* 172 */	"41615", "70360", "64114", "58660", "90850",
				"64618", "80620", "51790", "11436", "38072", 
	/* 173 */	"50273", "93113", "41794", "86861", "24781",
				"89683", "55411", "85667", "77535", "99892", 
	/* 174 */	"41396", "80504", "90670", "08289", "40902",
				"05069", "95083", "06783", "28102", "57816", 
	/* 175 */	"25807", "24260", "71529", "78920", "72682",
				"07385", "90726", "57166", "98884", "08583", 
	/* 176 */	"06170", "97965", "88302", "98041", "21443",
				"41808", "68984", "83620", "89747", "98882", 
	/* 177 */	"60808", "54444", "74412", "81105", "01176",
				"28838", "36421", "16489", "18059", "51061", 
	/* 178 */	"80940", "44893", "10408", "36222", "80582",
				"71944", "92638", "40333", "67054", "16067", 
	/* 179 */	"19516", "90120", "46759", "71643", "13177",
				"55292", "21036", "82808", "77501", "97427", 
	/* 180 */	"49386", "54480", "23604", "23554", "21785",
				"41101", "91178", "10174", "29420", "90438", 
	/* 181 */	"06312", "88940", "15995", "69321", "47458",
				"64809", "98189", "81851", "29651", "84215", 
	/* 182 */	"60942", "00307", "11897", "92674", "40405",
				"68032", "96717", "54244", "10701", "41393", 
	/* 183 */	"92329", "98932", "78284", "46347", "71209",
				"92061", "39448", "93136", "25722", "08564", 
	/* 184 */	"77936", "63574", "31384", "51924", "85561",
				"29671", "58137", "17820", "22751", "36518", 
	/* 185 */	"38101", "77756", "11657", "13897", "95889",
				"57067", "47648", "13885", "70669", "93406", 
	/* 186 */	"39641", "69457", "91339", "22502", "92613",
				"89719", "11947", "56203", "19324", "20504", 
	/* 187 */	"84054", "40455", "99396", "63680", "67667",
				"60631", "69181", "96845", "38525", "11600", 
	/* 188 */	"47468", "03577", "57649", "63266", "24700",
				"71594", "14004", "23153", "69249", "05747", 
	/* 189 */	"43321", "31370", "28977", "23896", "76479",
				"68562", "62342", "07589", "08899", "05985", 
	/* 190 */	"64281", "61826", "18555", "64937", "13173",
				"33365", "78851", "16499", "87064", "13075", 
	/* 191 */	"66847", "70495", "32350", "02985", "86716",
				"38746", "26313", "77463", "55387", "72681", 
	/* 192 */	"72461", "33230", "21529", "53424", "92581",
				"02262", "78438", "66276", "18396", "73538", 
	/* 193 */	"21032", "91050", "13058", "16218", "12470",
				"56500", "15292", "76139", "59526", "52113", 
	/* 194 */	"95362", "67011", "06651", "16136", "01016",
				"00857", "55018", "56374", "35824", "71708", 
	/* 195 */	"49712", "97380", "10404", "55452", "34030",
				"60726", "75211", "10271", "36633", "68424", 
	/* 196 */	"58275", "61764", "97586", "54716", "50259",
				"46345", "87195", "46092", "26787", "60939", 
	/* 197 */	"89514", "11788", "68224", "23417", "73959",
				"76145", "30342", "40277", "11049", "72049", 
	/* 198 */	"15472", "50669", "48139", "36732", "46874",
				"37088", "73465", "09819", "58869", "35220", 
	/* 199 */	"12120", "86124", "51247", "44302", "60883",
				"52109", "21437", "36786", "49226", "77837", 
	/* 200 */	"19612", "78430", "11661", "94770", "77603",
				"65669", "86868", "12665", "30012", "75989", 
	/* 201 */	"39141", "77400", "28000", "64238", "73258",
				"71794", "31340", "26256", "66453", "37016", 
	/* 202 */	"64756", "80457", "08747", "12836", "03469",
				"50678", "03274", "43423", "66677", "82556", 
	/* 203 */	"92901", "51878", "56441", "22998", "29718",
				"38447", "06453", "25311", "07565", "53771", 
	/* 204 */	"03551", "90070", "09483", "94050", "45938",
				"18135", "36908", "43321", "11073", "51803", 
	/* 205 */	"98884", "66209", "06830", "53656", "14663",
				"56346", "71430", "04909", "19818", "05707", 
	/* 206 */	"27369", "86882", "53473", "07541", "53633",
				"70863", "03748", "12822", "19360", "49088", 
	/* 207 */	"59066", "75974", "63335", "20483", "43514",
				"37481", "58278", "26967", "49325", "43951", 
	/* 208 */	"91647", "93783", "64169", "49022", "98588",
				"09495", "49829", "59068", "38831", "04838", 
	/* 209 */	"83605", "92419", "39542", "07772", "71568",
				"75673", "35185", "89759", "44901", "74291", 
	/* 210 */	"24895", "88530", "70774", "35439", "46758",
				"70472", "70207", "92675", "91623", "61275", 
	/* 211 */	"35720", "26556", "95596", "20094", "73750",
				"85788", "34264", "01703", "46833", "65248", 
	/* 212 */	"14141", "53410", "38649", "06343", "57256",
				"61342", "72709", "75318", "90379", "37562", 
	/* 213 */	"27416", "75670", "92176", "72535", "93119",
				"56077", "06886", "18244", "92344", "31374", 
	/* 214 */	"82071", "07429", "81007", "47749", "40744",
				"56974", "23336", "88821", "53841", "10536", 
	/* 215 */	"21445", "82793", "24831", "93241", "14199",
				"76268", "70883", "68002", "03829", "17443", 
	/* 216 */	"72513", "76400", "52225", "92348", "62308",
				"98481", "29744", "33165", "33141", "61020", 
	/* 217 */	"71479", "45027", "76160", "57411", "13780",
				"13632", "52308", "77762", "88874", "33697", 
	/* 218 */	"83210", "51466", "09088", "50395", "26743",
				"05306", "21706", "70001", "99439", "80767", 
	/* 219 */	"68749", "95148", "94897", "78636", "96750",
				"09024", "94538", "91143", "96693", "61886", 
	/* 220 */	"05184", "75763", "47075", "88158", "05313",
				"53439", "14908", "08830", "60096", "21551", 
	/* 221 */	"13651", "62546", "96892", "25240", "47511",
				"58483", "87342", "78818", "07855", "39269", 
	/* 222 */	"00566", "21220", "00292", "24069", "25072",
				"29519", "52548", "54091", "21282", "21296", 
	/* 223 */	"50958", "17695", "58072", "68990", "60329",
				"95955", "71586", "63417", "35947", "67807", 
	/* 224 */	"57621", "64547", "46850", "37981", "38527",
				"09037", "64756", "03324", "04986", "83666", 
	/* 225 */	"09282", "25844", "79139", "78435", "35428",
				"43561", "69799", "63314", "12991", "93516", 
	/* 226 */	"23394", "94206", "93432", "37836", "94919",
				"26846", "02555", "74410", "94915", "48199", 
	/* 227 */	"05280", "37470", "93622", "04345", "15092",
				"19510", "18094", "16613", "78234", "50001", 
	/* 228 */	"95491", "97976", "38306", "32192", "82639",
				"54624", "72434", "92606", "23191", "74693", 
	/* 229 */	"78521", "00104", "18248", "75583", "90326",
				"50785", "54034", "66251", "35774", "14692", 
	/* 230 */	"96345", "44579", "85932", "44053", "75704",
				"20840", "86583", "83944", "52456", "73766", 
	/* 231 */	"77963", "31151", "32364", "91691", "47357",
				"40338", "23435", "24065", "08458", "95366", 
	/* 232 */	"07520", "11294", "23238", "01748", "41690",
				"67328", "54814", "37777", "10057", "42332", 
	/* 233 */	"38423", "02309", "70703", "85736", "46148",
				"14258", "29236", "12152", "05088", "65825", 
	/* 234 */	"02463", "65533", "21199", "60555", "33928",
				"01817", "07396", "89215", "30722", "22102", 
	/* 235 */	"15880", "92261", "17292", "88190", "61781",
				"48898", "92525", "21283", "88581", "60098", 
	/* 236 */	"71926", "00819", "59144", "00224", "30570",
				"90194", "18329", "06999", "26857", "19238", 
	/* 237 */	"64425", "28108", "16554", "16016", "00042",
				"83229", "10333", "36168", "65617", "94834", 
	/* 238 */	"79782", "23924", "49440", "30432", "81077",
				"31543", "95216", "64865", "13658", "51081", 
	/* 239 */	"35337", "74538", "44553", "64672", "90960",
				"41849", "93865", "44608", "93176", "34851", 
	/* 240 */	"05249", "29329", "19715", "94082", "14738",
				"86667", "43708", "66354", "93692", "25527", 
	/* 241 */	"56463", "99380", "38793", "85774", "19056",
				"13939", "46062", "27647", "66146", "63210", 
	/* 242 */	"96296", "33121", "54196", "34108", "75814",
				"85986", "71171", "15102", "28992", "63165", 
	/* 243 */	"98380", "36269", "60014", "07201", "62448",
				"46385", "42175", "88350", "46182", "49126", 
	/* 244 */	"52567", "64350", "16315", "53969", "80395",
				"81114", "54358", "64578", "47269", "15747", 
	/* 245 */	"78498", "90830", "25955", "99236", "43286",
				"91064", "99969", "95144", "64424", "77377", 
	/* 246 */	"49553", "24241", "08150", "89535", "08703",
				"91041", "77323", "81079", "45127", "93686", 
	/* 247 */	"32151", "07075", "83155", "10252", "73100",
				"88618", "23891", "87418", "45417", "20268", 
	/* 248 */	"11314", "50363", "26860", "27799", "49416",
				"83534", "19187", "08059", "76677", "02110", 
	/* 249 */	"12364", "71210", "87052", "50241", "90785",
				"97889", "81399", "58130", "64439", "05614", 
	/* 250 */	"59467", "58309", "87834", "57213", "37510",
				"33689", "01259", "62486", "56320", "46265", 
	/* 251 */	"73452", "17619", "56421", "40725", "23439",
				"41701", "93223", "41682", "45026", "47505", 
	/* 252 */	"27635", "56293", "91700", "04391", "67317",
				"89604", "73020", "69853", "61517", "51207", 
	/* 253 */	"86040", "02596", "01655", "09918", "45161",
				"00222", "54577", "74821", "47335", "08582", 
	/* 254 */	"52403", "94255", "26351", "46527", "68224",
				"90183", "85057", "72310", "34963", "83462", 
	/* 255 */	"49465", "46581", "61499", "04844", "94626",
				"02963", "41482", "83879", "44942", "63915", 
	/* 256 */	"94365", "92560", "12363", "30246", "02086",
				"75036", "88620", "91088", "67691", "67762", 
	/* 257 */	"34261", "08769", "91830", "23313", "18256",
				"28850", "37639", "92748", "57791", "71328", 
	/* 258 */	"37110", "66538", "39318", "15626", "44324",
				"82827", "08782", "65960", "58167", "01305", 
	/* 259 */	"83950", "45424", "72453", "19444", "68219",
				"64733", "94088", "62006", "89985", "36936", 
	/* 260 */	"61630", "97966", "76537", "46467", "30942",
				"07479", "67971", "14558", "22458", "35148", 
	/* 261 */	"01929", "17165", "12037", "74558", "16250",
				"71750", "55546", "29693", "94984", "37782", 
	/* 262 */	"41659", "39098", "23982", "29899", "71594",
				"77979", "54477", "13764", "17315", "72893", 
	/* 263 */	"32031", "39608", "75992", "73445", "01317",
				"50525", "87313", "45191", "30214", "19769", 
	/* 264 */	"90043", "93478", "58044", "06949", "31176",
				"88370", "50274", "83987", "45316", "38551", 
	/* 265 */	"79418", "14322", "91065", "07841", "36130",
				"86602", "10659", "40859", "00964", "71577", 
	/* 266 */	"85447", "61079", "96910", "72906", "07361",
				"84338", "34114", "52096", "66715", "51091", 
	/* 267 */	"86219", "81115", "49625", "48799", "89485",
				"24855", "13684", "68433", "70595", "70102", 
	/* 268 */	"71712", "88559", "92476", "32903", "68009",
				"58417", "87962", "11787", "16644", "72964", 
	/* 269 */	"29776", "63075", "13270", "84758", "49560",
				"10317", "28778", "23006", "31036", "84906", 
	/* 270 */	"81488", "17340", "74154", "42801", "27917",
				"89792", "62604", "62234", "13124", "76471", 
	/* 271 */	"51667", "37589", "87147", "24743", "48023",
				"06325", "79794", "35889", "13255", "04925", 
	/* 272 */	"99004", "70322", "60832", "76636", "56907",
				"56534", "72615", "46288", "36788", "93196", 
	/* 273 */	"68656", "66492", "35933", "52293", "47953",
				"95495", "95304", "50009", "83464", "28608", 
	/* 274 */	"38074", "74083", "09337", "07965", "65047",
				"36871", "59015", "21769", "30398", "44855", 
	/* 275 */	"01020", "80680", "59328", "08712", "48190",
				"45332", "27284", "31287", "66011", "09376", 
	/* 276 */	"86379", "74508", "33579", "77114", "92955",
				"23085", "92824", "03054", "25242", "16322", 
	/* 277 */	"48498", "09938", "44420", "13484", "52319",
				"58875", "02012", "88591", "52500", "95795", 
	/* 278 */	"41800", "95363", "54142", "17482", "32705",
				"60564", "12505", "40954", "46174", "64130", 
	/* 279 */	"63026", "96712", "79883", "39225", "52653",
				"69549", "36693", "59822", "22684", "31661", 
	/* 280 */	"88298", "15489", "16030", "42480", "15372",
				"38781", "71995", "77438", "91161", "10192", 
	/* 281 */	"07839", "62735", "99218", "25624", "02547",
				"27445", "69187", "55749", "32322", "15504", 
	/* 282 */	"73298", "51108", "48717", "92926", "75705",
				"89787", "96114", "99902", "37749", "96305", 
	/* 283 */	"12829", "70474", "00838", "50385", "91711",
				"80370", "56504", "56857", "80906", "09018", 
	/* 284 */	"76569", "61072", "48568", "36491", "22587",
				"44363", "39592", "61546", "90181", "37348", 
	/* 285 */	"41665", "41339", "62106", "44203", "06732",
				"76111", "79840", "67999", "32231", "76869", 
	/* 286 */	"58652", "49983", "01669", "27464", "79553",
				"52855", "25988", "18087", "38052", "17529", 
	/* 287 */	"13607", "00657", "76173", "43357", "77334",
				"24140", "53860", "02906", "89863", "44651", 
	/* 288 */	"55715", "26203", "65933", "51087", "98234",
				"40625", "45545", "63563", "89148", "82581", 
	/* 289 */	"04110", "66683", "99001", "09796", "47349",
				"65003", "66524", "81970", "71262", "14479", 
	/* 290 */	"31300", "08681", "58068", "44115", "40064",
				"77879", "23965", "69019", "73985", "19453", 
	/* 291 */	"26225", "97543", "37044", "07494", "85778",
				"35345", "61115", "92498", "49737", "64599", 
	/* 292 */	"07158", "82763", "25072", "38478", "57782",
				"75291", "62155", "52056", "04786", "11585", 
	/* 293 */	"71251", "25572", "79771", "93328", "66927",
				"54069", "58752", "26624", "50463", "77361", 
	/* 294 */	"29991", "96526", "02820", "91659", "12818",
				"96356", "49499", "01507", "40223", "09171", 
	/* 295 */	"83642", "21057", "02677", "09367", "38097",
				"16100", "19355", "06120", "15378", "56559", 
	/* 296 */	"69167", "30235", "06767", "66323", "78294",
				"14916", "19124", "88044", "16673", "66102", 
	/* 297 */	"86018", "29406", "75415", "22038", "27056",
				"26906", "25867", "14751", "92380", "30434", 
	/* 298 */	"44114", "06026", "79553", "55091", "95385",
				"41212", "37882", "46864", "54717", "97038", 
	/* 299 */	"53805", "64150", "70915", "63127", "63695",
				"41288", "38192", "72437", "75075", "18570", 
	/* 300 */	"52065", "08853", "30104", "79937", "66913",
				"53200", "84570", "78079", "28970", "53859", 
	/* 301 */	"37632", "80274", "35240", "32960", "74859",
				"07359", "55176", "03930", "38984", "35151", 
	/* 302 */	"82576", "82805", "94031", "12779", "90879",
				"24109", "25367", "77861", "09541", "85739", 
	/* 303 */	"69023", "64971", "99321", "07521", "95909",
				"43897", "71724", "92581", "05471", "64337", 
	/* 304 */	"98949", "03606", "78236", "78985", "29212",
				"57369", "34857", "67757", "58019", "58872", 
	/* 305 */	"96526", "28749", "56592", "37871", "72905",
				"70198", "57319", "54116", "47014", "18285", 
	/* 306 */	"33692", "72111", "60958", "96848", "17893",
				"40993", "50445", "14186", "76877", "87867", 
	/* 307 */	"50335", "09513", "44346", "26439", "55293",
				"06449", "44301", "63740", "40158", "72703", 
	/* 308 */	"88321", "85062", "57345", "66231", "15409",
				"03451", "95261", "43561", "15673", "28956", 
	/* 309 */	"90303", "62469", "82517", "43035", "36850",
				"15592", "64098", "59022", "31752", "04370", 
	/* 310 */	"50486", "11885", "23085", "41712", "80692",
				"48492", "16495", "99721", "36912", "28267", 
	/* 311 */	"27882", "16269", "64483", "11273", "02680",
				"01616", "46138", "54606", "14761", "05134", 
	/* 312 */	"45144", "63213", "49666", "27441", "86989",
				"29884", "54334", "06740", "08368", "80051", 
	/* 313 */	"81020", "17882", "74973", "74531", "94994",
				"24927", "64894", "22667", "20466", "82948", 
	/* 314 */	"66831", "47427", "76033", "31197", "59817",
				"20064", "61135", "28556", "29695", "80179", 
	/* 315 */	"74058", "18293", "09963", "35278", "13062",
				"83094", "23373", "90287", "33477", "48865", 
	/* 316 */	"30348", "70174", "11468", "25994", "25343",
				"22317", "01587", "30682", "00001", "67814", 
	/* 317 */	"59557", "23362", "13746", "82244", "42093",
				"24671", "79458", "93730", "45488", "60234", 
	/* 318 */	"67098", "09899", "25775", "00332", "36636",
				"57594", "19958", "85564", "58977", "12247", 
	/* 319 */	"60774", "66371", "69442", "20385", "14486",
				"91330", "50332", "46023", "75768", "59877", 
	/* 320 */	"60081", "92936", "72302", "75064", "85727",
				"52987", "05750", "19384", "33684", "78859", 
	/* 321 */	"80458", "69902", "34870", "88684", "49762",
				"40801", "86291", "18194", "90366", "82639", 
	/* 322 */	"53844", "96326", "65728", "48563", "26027",
				"52692", "62406", "76294", "41848", "63010", 
	/* 323 */	"69841", "29451", "36170", "21529", "16525",
				"64326", "22086", "24469", "57407", "96033", 
	/* 324 */	"37771", "31002", "18311", "93285", "31948",
				"14331", "58335", "15977", "80336", "81667", 
	/* 325 */	"27286", "24361", "61638", "57580", "95270",
				"46180", "76990", "53031", "94366", "02727", 
	/* 326 */	"49944", "19278", "05756", "51875", "53445",
				"33342", "01965", "07937", "10054", "97712", 
	/* 327 */	"87693", "58124", "46064", "39133", "77385",
				"09605", "65359", "70113", "90563", "86637", 
	/* 328 */	"94282", "12025", "31926", "24541", "23854",
				"58407", "32131", "92845", "20714", "27898", 
	/* 329 */	"26917", "50326", "35145", "50859", "72119",
				"95094", "29441", "42301", "62460", "75252", 
	/* 330 */	"94267", "38422", "73047", "24200", "85349",
				"72049", "91723", "97802", "98496", "12734", 
	/* 331 */	"73432", "10371", "57213", "53300", "80847",
				"46229", "07099", "72961", "13767", "65654", 
	/* 332 */	"31102", "82119", "96946", "65919", "81083",
				"03819", "57888", "57908", "16849", "77111", 
	/* 333 */	"41429", "92261", "45263", "01172", "55926",
				"78835", "27697", "48420", "58865", "41207", 
	/* 334 */	"21406", "08582", "10785", "36233", "12237",
				"07866", "13706", "92551", "11021", "63813", 
	/* 335 */	"71512", "65206", "37768", "94325", "14721",
				"20990", "54235", "71986", "05345", "56239", 
	/* 336 */	"52028", "01419", "07215", "55067", "11669",
				"21738", "66605", "69621", "69827", "08537", 
	/* 337 */	"18638", "60982", "28151", "98885", "76431",
				"25566", "03085", "23639", "30849", "63986", 
	/* 338 */	"73287", "26201", "36174", "14106", "54102",
				"57041", "16141", "64174", "03591", "90024", 
	/* 339 */	"73332", "31254", "17288", "59809", "25061",
				"51612", "47951", "16570", "43330", "79213", 
	/* 340 */	"11354", "55585", "19646", "99246", "37564",
				"32660", "20632", "21124", "60597", "69315", 
	/* 341 */	"31312", "57741", "85108", "21615", "24365",
				"27684", "16124", "33888", "14966", "35303", 
	/* 342 */	"69921", "15795", "04020", "67672", "86816",
				"63027", "84470", "45605", "44887", "26222", 
	/* 343 */	"79888", "58982", "22466", "98844", "48353",
				"60666", "58256", "31140", "93507", "69561", 
	/* 344 */	"06256", "88526", "18655", "00865", "75247",
				"00264", "65957", "98261", "72706", "36396", 
	/* 345 */	"46065", "85700", "32121", "99975", "73627",
				"78812", "89638", "86602", "96758", "65099", 
	/* 346 */	"52777", "46792", "13790", "55240", "52002",
				"10313", "91933", "71231", "10053", "78416", 
	/* 347 */	"54563", "96004", "42215", "30094", "45958",
				"48437", "49591", "50483", "13422", "69108", 
	/* 348 */	"59952", "27896", "40450", "79327", "31962",
				"46456", "39260", "51479", "61882", "48181", 
	/* 349 */	"50691", "64709", "32902", "10676", "12083",
				"35771", "79656", "56667", "76783", "03937", 
	/* 350 */	"99859", "10362", "57411", "40986", "35045",
				"02838", "29255", "64230", "84418", "34988", 
	/* 351 */	"77644", "39892", "77327", "74129", "53444",
				"35487", "95803", "38640", "20383", "55402", 
	/* 352 */	"25793", "14213", "87082", "42837", "95030",
				"97198", "61608", "97723", "79390", "35290", 
	/* 353 */	"34683", "81419", "87133", "70447", "53127",
				"97146", "28299", "56763", "12868", "01145", 
	/* 354 */	"12147", "58158", "92124", "60934", "18414",
				"97510", "07056", "54488", "20719", "53743", 
	/* 355 */	"91037", "44797", "52110", "08512", "18991",
				"20129", "31441", "51449", "14661", "71126", 
	/* 356 */	"23180", "68124", "18807", "70997", "21913",
				"19594", "70355", "73637", "68266", "60775", 
	/* 357 */	"43164", "52643", "96363", "77989", "79332",
				"39890", "65379", "20405", "52935", "43816", 
	/* 358 */	"92740", "95319", "04538", "60660", "28982",
				"15328", "80475", "34690", "02293", "19646", 
	/* 359 */	"46524", "96627", "33159", "42081", "08816",
				"74931", "20674", "08697", "66169", "46460", 
	/* 360 */	"46326", "39923", "60625", "28386", "22919",
				"19415", "75766", "43668", "31626", "70301", 
	/* 361 */	"67053", "03949", "70082", "02303", "48642",
				"38429", "94053", "38770", "68137", "68441", 
	/* 362 */	"52928", "70244", "91954", "17401", "92693",
				"98342", "21451", "84988", "80487", "33807", 
	/* 363 */	"73797", "49494", "41878", "76635", "83227",
				"76618", "11946", "13451", "87591", "78381", 
	/* 364 */	"21407", "90038", "72638", "69692", "51599",
				"86413", "32019", "64856", "74730", "41531", 
	/* 365 */	"11064", "01790", "58817", "86400", "66213",
				"92599", "70905", "78324", "54326", "43659", 
	/* 366 */	"34206", "63132", "38837", "40210", "96346",
				"16967", "81619", "96503", "14881", "89405", 
	/* 367 */	"32205", "49508", "98425", "02451", "35423",
				"56072", "36810", "30332", "85998", "49358", 
	/* 368 */	"92748", "84147", "79835", "94867", "41224",
				"61794", "35066", "82220", "66684", "20096", 
	/* 369 */	"02754", "41731", "37068", "32753", "91059",
				"13407", "05607", "69384", "53329", "95909", 
	/* 370 */	"44968", "11397", "92973", "50014", "92997",
				"80968", "93761", "57598", "74703", "07768", 
	/* 371 */	"37978", "73873", "33475", "09720", "97852",
				"98449", "48722", "84977", "11271", "11728", 
	/* 372 */	"68318", "22312", "78792", "87508", "88466",
				"72976", "47099", "84126", "38595", "85124", 
	/* 373 */	"64405", "90020", "07492", "52413", "95111",
				"34455", "86311", "68892", "01074", "60274", 
	/* 374 */	"28136", "19328", "38161", "57475", "13771",
				"63562", "84207", "94121", "18901", "52768", 
	/* 375 */	"33801", "82087", "86091", "59969", "90398",
				"56870", "55756", "78841", "98450", "54165", 
	/* 376 */	"55106", "50343", "70519", "14567", "36780",
				"55450", "19606", "83749", "67562", "64765", 
	/* 377 */	"38543", "16585", "86841", "73742", "08766",
				"39252", "75678", "75379", "78760", "37279", 
	/* 378 */	"15280", "13558", "95916", "89759", "76686",
				"76467", "67147", "63110", "94008", "08037", 
	/* 379 */	"35263", "53710", "16667", "79008", "11231",
				"29397", "67136", "18601", "64502", "90228", 
	/* 380 */	"89109", "72849", "22711", "65547", "34542",
				"26686", "81678", "87765", "77654", "23664", 
	/* 381 */	"96352", "14106", "32938", "28083", "18633",
				"80286", "65507", "46197", "52722", "75476", 
	/* 382 */	"77816", "47204", "34876", "45963", "79262",
				"90181", "84041", "03745", "90041", "30780", 
	/* 383 */	"27226", "92847", "85572", "15308", "80688",
				"05761", "82638", "13464", "23683", "81015", 
	/* 384 */	"54214", "64175", "43701", "86845", "15569",
				"50687", "52679", "87696", "08285", "97444", 
	/* 385 */	"47599", "94472", "64150", "87753", "68652",
				"60726", "26213", "17320", "64553", "81285", 
	/* 386 */	"98126", "12158", "52095", "64833", "00492",
				"35817", "55571", "91300", "97812", "37507", 
	/* 387 */	"04209", "53515", "64342", "21223", "16662",
				"43265", "68219", "03529", "43636", "68417", 
	/* 388 */	"53640", "95326", "93381", "37113", "80751",
				"76469", "96677", "43054", "22937", "31954", 
	/* 389 */	"13266", "34140", "27253", "02734", "99070",
				"60077", "57988", "93211", "92795", "83795", 
	/* 390 */	"57477", "03941", "39007", "14619", "38320",
				"93449", "31336", "25279", "97030", "26245", 
	/* 391 */	"47394", "39475", "90621", "23820", "29344",
				"94859", "91604", "14033", "41868", "14816", 
	/* 392 */	"04075", "66644", "87803", "97815", "99552",
				"78666", "03942", "08175", "22345", "19983", 
	/* 393 */	"76783", "99044", "20851", "84981", "59052",
				"77178", "72109", "76475", "21619", "73017", 
	/* 394 */	"06812", "56633", "50612", "55289", "04671",
				"84419", "94072", "94446", "80603", "32188", 
	/* 395 */	"93415", "23464", "43947", "43728", "74284",
				"67177", "57105", "31059", "10642", "13803", 
	/* 396 */	"69602", "46961", "66567", "19359", "84676",
				"63918", "40650", "12923", "15974", "79732", 
	/* 397 */	"20225", "92525", "71179", "04859", "91208",
				"60430", "05239", "61458", "24089", "68852", 
	/* 398 */	"60171", "29603", "42535", "86365", "93905",
				"28237", "45317", "60718", "82001", "41679", 
	/* 399 */	"20679", "56304", "70043", "87568", "21386",
				"59049", "78353", "48696", "77379", "55309", 
	/* 400 */	"23780", "28391", "05940", "55583", "81256",
				"59418", "97521", "32846", "70761", "90115", 
	/* 401 */	"45325", "05490", "65974", "11186", "15357",
				"03568", "00450", "96644", "58976", "36211", 
	/* 402 */	"88240", "92457", "89200", "94696", "11370",
				"91157", "48487", "59501", "56983", "89795", 
	/* 403 */	"42789", "69758", "79701", "29511", "55968",
				"41472", "89474", "84344", "80517", "07485", 
	/* 404 */	"97523", "17264", "82840", "59556", "37119",
				"30985", "48866", "60605", "95719", "70417", 
	/* 405 */	"59083", "95137", "76538", "44155", "67286",
				"57897", "28262", "04052", "00919", "86207", 
	/* 406 */	"79932", "44236", "10089", "44373", "65670",
				"44285", "06903", "20834", "49701", "95735", 
	/* 407 */	"21149", "03425", "17594", "31427", "14262",
				"32252", "68540", "39427", "44026", "47257", 
	/* 408 */	"45055", "95091", "08367", "28381", "57375",
				"41562", "83883", "27715", "10122", "67745", 
	/* 409 */	"46497", "28626", "87297", "36568", "39483",
				"11385", "63292", "92305", "78683", "06146", 
	/* 410 */	"81905", "15038", "38338", "51206", "65749",
				"34119", "71516", "74068", "51094", "06665", 
	/* 411 */	"91884", "66762", "11428", "70908", "21506",
				"00480", "94183", "78484", "66507", "75901", 
	/* 412 */	"25728", "52539", "86806", "69944", "65036",
				"27882", "02530", "04918", "74351", "65737", 
	/* 413 */	"89178", "08791", "39342", "94963", "22581",
				"56917", "17541", "83578", "75376", "65202", 
	/* 414 */	"30935", "79270", "91986", "99286", "45236",
				"44720", "81915", "70881", "45886", "43213", 
	/* 415 */	"49789", "97081", "16075", "20517", "69980",
				"25310", "91953", "01759", "67635", "88933", 
	/* 416 */	"54558", "18395", "73375", "62251", "58871",
				"09870", "70538", "48936", "07757", "90374", 
	/* 417 */	"56631", "88862", "30487", "38794", "36079",
				"32712", "11130", "55451", "25137", "38785", 
	/* 418 */	"83558", "31960", "69473", "45950", "18225",
				"09871", "88502", "75179", "11551", "75664", 
	/* 419 */	"74321", "67351", "27703", "83717", "18913",
				"42470", "08816", "37627", "14288", "62831", 
	/* 420 */	"44047", "67612", "72738", "26995", "50933",
				"63758", "50003", "43693", "52661", "55852", 
	/* 421 */	"52372", "59042", "37595", "04931", "73622",
				"68387", "86478", "40997", "05245", "75300", 
	/* 422 */	"24902", "59609", "35653", "15970", "37681",
				"69365", "22236", "86374", "65550", "00343", 
	/* 423 */	"98377", "35354", "65770", "15365", "41422",
				"71356", "16630", "40044", "19290", "66449", 
	/* 424 */	"53629", "79452", "71674", "30260", "97303",
				"06487", "62789", "13005", "70152", "22501", 
	/* 425 */	"49867", "89294", "59232", "31776", "54919",
				"99851", "05438", "01096", "72269", "50486", 
	/* 426 */	"16719", "06144", "82041", "38332", "64452",
				"31840", "99287", "59928", "25503", "08407", 
	/* 427 */	"46970", "45907", "99238", "74547", "19704",
				"72035", "26542", "54600", "79172", "58779", 
	/* 428 */	"35747", "78956", "11478", "41195", "58135",
				"63856", "33037", "45753", "60159", "25193", 
	/* 429 */	"71838", "07526", "07985", "60714", "88627",
				"75790", "38454", "96110", "39237", "19792", 
	/* 430 */	"34534", "70169", "24805", "63215", "38175",
				"38784", "38855", "24826", "50917", "25147", 
	/* 431 */	"17082", "26997", "32295", "10894", "21805",
				"65245", "85407", "37926", "69214", "38579", 
	/* 432 */	"84721", "23544", "88548", "65626", "75517",
				"69737", "55626", "52175", "21697", "19453", 
	/* 433 */	"16908", "82841", "24060", "40285", "19195",
				"80281", "89322", "15232", "70043", "60691", 
	/* 434 */	"86370", "91949", "19017", "83846", "77869",
				"14321", "95102", "87073", "71467", "31305", 
	/* 435 */	"64677", "80358", "52629", "79419", "22359",
				"87867", "48296", "50141", "46807", "82184", 
	/* 436 */	"95812", "84665", "74511", "59914", "04146",
				"90417", "58508", "62875", "17630", "21868", 
	/* 437 */	"09199", "30322", "33352", "43374", "25473",
				"04119", "63086", "14147", "14863", "38020", 
	/* 438 */	"44757", "98628", "57916", "22199", "11865",
				"42911", "62651", "78290", "09392", "77294", 
	/* 439 */	"63168", "21043", "17409", "13786", "27475",
				"75979", "89668", "43596", "74316", "84489", 
	/* 440 */	"54941", "95992", "45445", "41059", "55142",
				"15214", "42903", "16799", "88254", "95984", 
	/* 441 */	"48575", "77822", "21067", "57238", "35352",
				"96779", "89564", "23797", "99937", "46379", 
	/* 442 */	"27119", "16060", "30302", "95327", "12849",
				"38111", "97090", "07598", "78473", "63079", 
	/* 443 */	"18570", "72803", "70040", "91385", "96436",
				"96263", "17368", "56188", "85999", "50026", 
	/* 444 */	"36050", "73736", "13351", "48321", "28357",
				"51718", "65636", "72903", "21584", "21060", 
	/* 445 */	"39829", "15564", "04716", "14594", "22363",
				"97639", "65937", "17802", "31535", "42767", 
	/* 446 */	"98761", "30987", "57657", "33398", "63053",
				"25926", "20944", "19306", "81727", "02695", 
	/* 447 */	"97479", "79172", "72764", "66446", "78864",
				"12698", "15812", "97209", "38827", "91016", 
	/* 448 */	"91281", "57875", "45228", "49211", "69755",
				"99224", "43999", "62879", "08879", "80015", 
	/* 449 */	"74396", "57146", "64665", "31159", "06980",
				"79069", "37409", "75037", "69977", "85919", 
	/* 450 */	"42826", "06974", "61063", "97640", "13433",
				"92528", "91311", "08440", "38840", "22362", 
	/* 451 */	"93929", "01836", "36590", "75052", "89475",
				"15437", "65648", "99012", "70236", "12307", 
	/* 452 */	"83585", "00414", "62851", "48787", "28447",
				"21702", "57033", "29633", "44760", "34165", 
	/* 453 */	"27548", "37516", "24343", "63046", "02081",
				"20378", "19510", "42226", "97134", "68739", 
	/* 454 */	"32982", "56455", "53129", "77693", "25022",
				"55534", "99375", "30086", "98001", "07432", 
	/* 455 */	"67126", "76656", "29347", "28492", "43108",
				"64736", "32278", "84816", "80440", "30461", 
	/* 456 */	"00818", "09136", "01952", "48442", "91058",
				"92590", "10443", "05195", "34009", "32141", 
	/* 457 */	"62209", "43740", "54102", "76895", "98172",
				"31583", "04155", "66492", "58981", "16591", 
	/* 458 */	"11331", "06838", "03818", "77063", "12523",
				"45570", "68970", "70055", "77751", "73743", 
	/* 459 */	"71732", "04704", "61384", "57343", "66682",
				"44500", "89745", "10436", "67202", "36455", 
	/* 460 */	"42467", "88801", "91280", "01056", "27534",
				"81619", "79004", "25824", "66362", "33280", 
	/* 461 */	"20706", "31929", "57422", "18730", "96197",
				"22101", "47592", "02180", "18287", "82310", 
	/* 462 */	"60430", "59627", "26471", "07794", "60475",
				"76713", "45427", "89654", "14370", "81674", 
	/* 463 */	"41246", "98416", "08669", "48883", "77154",
				"09806", "94015", "60347", "20027", "08405", 
	/* 464 */	"33150", "27368", "53375", "70171", "59431",
				"14534", "34018", "85665", "77797", "17944", 
	/* 465 */	"49602", "74391", "48830", "55029", "10371",
				"94261", "16658", "68400", "44148", "28150", 
	/* 466 */	"40364", "90913", "73151", "64463", "50058",
				"78191", "84439", "82478", "62398", "03113", 
	/* 467 */	"17578", "12830", "06571", "95934", "09132",
				"25287", "78731", "80683", "67207", "76597", 
	/* 468 */	"42096", "34934", "76609", "52553", "47508",
				"71561", "08038", "83011", "72577", "95790", 
	/* 469 */	"40076", "20292", "32138", "61197", "95476",
				"23123", "26648", "13611", "48452", "39963", 
	/* 470 */	"85857", "04855", "27029", "01542", "72443",
				"53688", "82635", "56264", "07977", "23090", 
	/* 471 */	"93553", "65434", "12124", "91087", "87800",
				"95675", "99419", "44659", "30382", "55263", 
	/* 472 */	"82514", "86800", "16781", "65977", "65946",
				"13033", "93895", "04056", "75895", "47878", 
	/* 473 */	"91309", "51233", "81409", "46773", "69135",
				"56906", "84493", "34530", "84534", "38312", 
	/* 474 */	"54574", "92933", "77341", "20839", "36126",
				"01143", "35356", "35459", "07959", "98335", 
	/* 475 */	"53266", "36146", "78047", "50607", "22486",
				"63308", "08996", "96056", "39085", "26567", 
	/* 476 */	"06779", "62663", "30523", "47881", "41279",
				"49864", "82248", "78333", "29466", "48151", 
	/* 477 */	"41957", "93235", "53308", "22682", "90722",
				"54478", "07235", "34306", "15827", "20121", 
	/* 478 */	"96837", "06283", "80172", "66109", "92592",
				"48238", "76428", "94546", "45430", "16288", 
	/* 479 */	"74839", "00740", "25553", "83767", "35900",
				"05998", "07493", "46755", "11449", "88824", 
	/* 480 */	"44906", "33143", "07454", "56652", "34755",
				"63992", "59674", "65131", "46358", "12799"
				  };
	
	
	
	typedef unsigned long int sBox[256];
	
	
	/* The standard S boxes are defined in another file */
	extern sBox standardSBoxes[SBoxCount];
	
	
	
	/* The following routine is a simple error exit routine  -- it prints a
	   message and aborts */
	void    errAbort (s)
		char   *s;
	{
		int     length;
	
		for (length = 0; s[length] != 0; length++);
		if (write (errorFile, s, length) != length) exit(2);
		if (write (errorFile, "\n", 1) != 1) exit(2);
		exit (1);
	};
	
	
	
	void    swapBytesInSBox (anSBox, row1, row2, column)
		sBox    anSBox;
		unsigned int row1, row2, column;
	
	/* Exchanges two bytes in a column in 'anSBox'.  row1 and row2 are integers
	   between 0 and 255 inclusive.  'column' is either 0, 1, 2 or 3 and refers
	   to the byte position in a 32-bit word.  0 is the left-most byte.   */
	{
		/* mask designates the bytes to be exchanged */
		unsigned long int mask;
		unsigned long int temp;
	
		mask = 0xFF000000;
	
		/* 'column' must be between 0 and 3 */
		if (column > 3)
			errAbort ("bad column passed to swapBytesInSBox");
	
		/* position the mask in the appropriate column */
		mask >>= (column * 8);
	
	
		/* Swap the bytes indicated by 'mask' */
		temp = anSBox[row1];
		anSBox[row1] = (anSBox[row1] & (~mask)) | (anSBox[row2] & mask);
		anSBox[row2] = (anSBox[row2] & (~mask)) | (temp & mask);
	}
	
	
	unsigned int randomDigit ()
	/* generate a random digit in the range from 0 to 9, inclusive.  Generate the
	   digit simply by getting the next random digit from the RAND table of
	   random digits */
	{
		if (locationIn5DigitGroup == 5) {
			locationIn5DigitGroup = 0;
			locationInRANDtable++;
		};
		if (locationInRANDtable >= sizeOfRANDtableIn5DigitGroups)
			errAbort ("Error in randomDigit -- attempt to ask for too many random digits");
		return (RANDtable[locationInRANDtable][locationIn5DigitGroup++] - '0');
	};
	
	
	unsigned int randomInRange (low, high)
		unsigned int low, high;
	
	/* Returns a random integer in the range from low to high, inclusive */
	/* gets random digits from RANDtable */
	{
		unsigned int range;	/* contains the actual range needed */
	
		/* the max possible random numbers given a certain number of digits */
		unsigned int maximum;
		unsigned int random;	/* the random number composed by appending
					   digits */
	
		range = (high - low) + 1;
		do {
			random = 0;	/* initialize */
			maximum = 1;	/* initialize */
			/* loop until random has as many digits as range */
			while (maximum < range) {
				maximum *= 10;	/* 0-n = n+1 possible random numbers */
				/* add another digit to the low end */
				random = (random * 10) + randomDigit ();
			}
		}
		/* if random is not evenly mappable to range, try again */
		/* the operation (maximum/range)  TRUNCATES the result to an unsigned
		   int */
		while (random >= ((unsigned int) (maximum / range)) * range);
		/* map random to the range and add  low  to stay within (low,high) */
		return (low + (random % range));
	}
	
	void    checkSBoxes ()
	/* computes the standard S boxes from the RAND table of random digits,
	   then compares it with standardSBoxes -- they should be equal.
	   Uses RANDtable as the source for the random digits.  */
	{
		sBox    SBoxFromRand[SBoxCount];
		int SBoxIndex;
	
		/* column is from the set {0, 1, 2, 3}.  0 is the leftmost byte */
		unsigned int column, row;
		unsigned long int longRow;
	
		for (SBoxIndex = 0; SBoxIndex < SBoxCount; SBoxIndex++) {
	
			/* Fill initial S box with a trivial permutation (0-255) */
			for (longRow = 0; longRow < 256; longRow++)
				SBoxFromRand[SBoxIndex][longRow] =
					longRow | (longRow << 8) | (longRow << 16) | (longRow << 24);
	
			for (column = 0; column < 4; column++) {
				for (row = 0; row < 255 /* 255 is correct */ ; row++)
					/* exchange random rows in the column.
						This ensures the column remains a permutation
						of (0-255) */
					swapBytesInSBox (SBoxFromRand[SBoxIndex],
						row, randomInRange (row, 255), column);
			}
			for (row = 0; row < 256; row++)
				if (SBoxFromRand[SBoxIndex][row] != standardSBoxes[SBoxIndex][row])
					errAbort ("Error -- can't verify S boxes");
	
			printf("  Verified SBox[%d]\n",SBoxIndex);
	    };  /*  End of for (SBoxIndex....   */
	};
	
	
	
	void    main ()
		
	{	int i;
	
		
		/* Test the standard S boxes to make sure they haven't been
		   damaged. */
		/* Test to make sure each column is a permutation.  */
		for (i = 0; i < SBoxCount; i++) {
			char    testArray[256];
			int     testShift = 0;
			int     j;
	
			for (testShift = 0; testShift < 32; testShift += 8) {
				for (j = 0; j < 256; j++)
					testArray[j] = 0;
				for (j = 0; j < 256; j++)
					testArray[(standardSBoxes[i][j] >> testShift) & 0xff]++;
				for (j = 0; j < 256; j++)
					if (testArray[j] != 1)
						errAbort ("Table error -- the standard S box is corrupted");
			};
		};
	
		/* It looks okay.  Now check things out some more  */
		
		printf("  The standard S Boxes are permutations.\n");
	
		checkSBoxes ();
	
	
		exit (0);
	};
*-*-END-*-*