Annotation of researchv10no/cmd/sum/snefru.bundle, revision 1.1

1.1     ! root        1: sed 's/^       //' >README <<\*-*-END-*-*
        !             2:        To compile:
        !             3:        
        !             4:        cc -o hash2.0 hash2.0.c standardSBoxes2.c
        !             5:        
        !             6:        To run:
        !             7:        
        !             8:        <inputFile hash2.0
        !             9:        
        !            10:        The inputFile is read and a hash value computed from it.  The hash
        !            11:        value is then printed on standard out.
        !            12:        
        !            13:        options:
        !            14:        
        !            15:        You can increase the number of iterations to 4 by saying:
        !            16:        
        !            17:        <inputFile hash2.0 4
        !            18:        
        !            19:        You can increase the size of the output to 256 bits by saying:
        !            20:        
        !            21:        <inputFile hash2.0 4 256
        !            22: *-*-END-*-*
        !            23: sed 's/^       //' >hash2.0.c <<\*-*-END-*-*
        !            24:        /* This is a reference implementation of Snefru. Snefru is a one-way hash
        !            25:           function that provides authentication. It does not provide secrecy.
        !            26:        
        !            27:        Snefru is named after a Pharaoh of ancient Egypt.
        !            28:        
        !            29:        
        !            30:        
        !            31:        Copyright (c) Xerox Corporation 1989 All rights reserved.
        !            32:        
        !            33:        License to  copy and use this software is granted provided that it is
        !            34:           identified as the 'Xerox Secure Hash Function' in all material mentioning
        !            35:           or referencing this software or this hash function.
        !            36:        
        !            37:        License is also granted to make and use derivative works provided that such
        !            38:           works are identified as 'derived from the Xerox Secure Hash Function' in
        !            39:           all material mentioning or referencing the derived work.
        !            40:        
        !            41:        Xerox Corporation makes no representations concerning either the
        !            42:           merchantability of this software or the suitability of this software for
        !            43:           any particular purpose.  It is provided "as is" without express or implied
        !            44:           warranty of any kind.
        !            45:        
        !            46:        These notices must be retained in any copies of any part of this software.
        !            47:        
        !            48:        
        !            49:        
        !            50:        This is version 2.0, July 31, 1989.
        !            51:        
        !            52:        Version 2.0 is algorithmically different from versions 1.4 and 1.3.
        !            53:        In particular, version 2.0 makes the following changes:
        !            54:        
        !            55:        1.)  The S-boxes in version 2.0 have been computed in accordance with a
        !            56:           publicly known algorithm.
        !            57:        
        !            58:        2.)  The special case handling of inputs shorter than 64 bytes has been
        !            59:           deleted.  This special case code offered little performance advantage and
        !            60:           increased the complexity of the algorithm.  In addition, Coppersmith
        !            61:           noticed a weakness that affected the 128-bit-input/128-bit-output version
        !            62:           of Snefru (though not the 512-bit input/128-bit or 256-bit output version).
        !            63:        
        !            64:        3.)  The parameters p0, p1, and p2 have been eliminated.  There are several
        !            65:           reasons for this change.  The principle reason is that they increase the
        !            66:           complexity both of the code and the conceptual complexity of the hash
        !            67:           function, and provide only modest improvement in security.
        !            68:        
        !            69:        4.)  Because the parameter mechanism was used to distinguish between inputs
        !            70:           that differ only in the number of trailing 0 bits, a different mechanism
        !            71:           has been adopted.  This new mechanism simply counts the number of bits in
        !            72:           the input, and then places this 64-bit bit-count into the rightmost
        !            73:           64-bits of the last block hashed.  A slightly different method of applying
        !            74:           the hash also been adopted.
        !            75:        
        !            76:        5.)     Several people requested a larger output (to provide greater
        !            77:           security). Because this will not always be needed, the algorithm was
        !            78:           modified to generate either 128 bits or 256 bits of output, depending on a
        !            79:           command line option.  Notice that 128 bits of output only provides 64
        !            80:           "real" bits of security (because of square root attacks) and similarly 256
        !            81:           bits of output provides only 128 "real" bits of security. Use of the
        !            82:           higher security 256-bit output will slow down the algorithm by about 1/3
        !            83:           (32 bytes per application of Hash512 versus 48 bytes per application of
        !            84:           Hash512).
        !            85:        
        !            86:        6.) Other non-algorithmic changes have been made to the code, in keeping
        !            87:           with various criticisms and comments.
        !            88:        
        !            89:        
        !            90:        
        !            91:        A 128 bit output should provide adequate security for most commercial
        !            92:           applications (barring discovery of some unexpected weakness in the
        !            93:           algorithm).  Where higher security is desired, the 256-bit output
        !            94:           size can be used.
        !            95:        
        !            96:        Version 1.4 differs from Version 1.3 only in the wording of the export
        !            97:           notice. Version 1.3 forbids export entirely.
        !            98:        
        !            99:        Version 1.3 fixes a security bug in handling short files (64 bytes or less).
        !           100:           Such files should use the length of the file as a parameter to the hash,
        !           101:           to prevent two files of different lengths from producing the same hash
        !           102:           value if one file is a prefix of another.  This had been done for long
        !           103:           files (greater than 64 bytes in length) but was overlooked for short
        !           104:           files.
        !           105:        
        !           106:        In addition, Version 1.3 improves the way in which the parameter is mixed
        !           107:           into the hash.  In essence, the change mixes in the parameter one more
        !           108:           time. Although a similar effect can be achieved by increasing the security
        !           109:           parameter by 1 (e.g., from 2 to 3) this also increases the amount of
        !           110:           computation required by 50%.
        !           111:        
        !           112:        Version 1.3 also makes some more changes in the notices that accompany the
        !           113:           code.
        !           114:        
        !           115:        Version 1.2 makes no changes in the code.  Only the notices that accompany
        !           116:           the code have changed, and some changes in the comments.
        !           117:        
        !           118:        Version 1.1 added the routine 'convertBytes' to convert an array of 'char'
        !           119:           into an array of unsigned long int.  This conversion is a no-op on the SUN
        !           120:           and many other computers, but will have an effect on the VAX and computers
        !           121:           with 'backwards' byte ordering.  It will also SLOW DOWN THE HASH FUNCTION,
        !           122:           so it should be removed whenever possible if speed is an issue.
        !           123:        
        !           124:        This program reads from the standard input until EOF is reached (the first
        !           125:           'read' that does not return a full buffer of data).  The data on the
        !           126:           standard input is 'hashed' with a cryptographically secure one-way hash
        !           127:           function (also known as a 'message digest', 'fingerprint', 'Manipulation
        !           128:           Detection Code' or 'MDC').  The hash is then printed on the standard
        !           129:           output.
        !           130:        
        !           131:        The input can be of any size.  The output is either 128 bits printed as 32
        !           132:           characters in hex, or 256 bits printed as 64 characters in hex.
        !           133:        
        !           134:        The primary use of one-way hash functions is to determine if there have been
        !           135:           any unauthorized, malicious, or accidental changes made to a file.  For
        !           136:           example, if an executable program file produces the hash '209884c4
        !           137:           2e89d967 5456ac0e 61269550', then any change to that program file will
        !           138:           cause the hash to be changed.  Thus, the tampering can be detected by
        !           139:           comparing the current output value with the previously computed (and
        !           140:           presumably correct) output value.
        !           141:        
        !           142:        Hash512 is the centrol routine in this program.  It is used in this program
        !           143:           in a linear fashion -- i.e., a sequential file is hashed down by repeated
        !           144:           applications of Hash512.  Changing a single bit in the file would then
        !           145:           require completely re-computing the hash from the point of change onward.
        !           146:        
        !           147:        Hash512 can be used in a tree-structured fashion to authenticate a large
        !           148:           table of data. This would imply that changing a single bit would not force
        !           149:           a complete re-computation of the hash value, but would instead require
        !           150:           only log n re-computations of Hash512 to 'patch up' the changes along the
        !           151:           path from the root to the changed leaf entry. A tree-structured
        !           152:           application also has the advantage that any single entry in the table can
        !           153:           subsequently be authenticated by someone who knows only the
        !           154:           'authentication path' from the root of the tree to the leaf entry.  These
        !           155:           concepts are discussed more thoroughly in 'Secrecy, Authentication, and
        !           156:           Public Key Systems' by Ralph C. Merkle, UMI Research Press, 1982 (see
        !           157:           particularly Chapter 2, 'One Way Hash Functions').  The use of a
        !           158:           tree-structured pattern of applications of a one-way hash function is
        !           159:           covered by U.S. Patent #4,309,569, 'Method of Providing Digital
        !           160:           Signatures' (contact Stanford University, Office of Technology Licensing).
        !           161:        
        !           162:        
        !           163:        At the present time (July 31, 1989) the author knows of no method for
        !           164:           'breaking' this one-way function, (i.e., finding two input files that
        !           165:           produce the same output value). The algorithm has undergone some review
        !           166:           for security.  Further review is expected.  Use of this algorithm for
        !           167:           production use is not recomended at this time.  Note that we are
        !           168:           specifically examining the security of Hash512 with a 512-bit input and a
        !           169:           128-bit output, and Hash512 with a 512-bit input and a 256-bit output.
        !           170:           Use of other sizes is not recomended at this time.  In particular, we
        !           171:           recomend against the use of output sizes smaller than 128 bits, and
        !           172:           recomend against the use of an input that is less than 2 (two) times the
        !           173:           size of the output.  When the input size equals the output size, Snefru
        !           174:           suffers a serious degradation in security (an observation due to
        !           175:           Coppersmith).
        !           176:        
        !           177:        If anyone using this program finds two different inputs that produce the same
        !           178:           output, please contact Ralph C. Merkle via E-mail ([email protected]) or
        !           179:           via normal mail at: Xerox PARC 3333 Coyote Hill Road Palo Alto, CA 94304
        !           180:           (415) 494-4000
        !           181:        
        !           182:        
        !           183:        See the paper 'A Software One Way Hash Function', by Ralph C. Merkle, for a
        !           184:           more detailed explanation.
        !           185:        
        !           186:        The following test cases were taken directly from a terminal, and can be used
        !           187:           to verify the correct functioning of an implementation of Snefru.  The
        !           188:           first input is simply a carriage return.  The second input is '1', the
        !           189:           third input is '12', etc.  The test sequence is repeated with security
        !           190:           parameter "4" and with the output size set to "256".
        !           191:        
        !           192:        % hash
        !           193:        
        !           194:         13af7619 ab98d4b5 f5e0a9e6 b26b5452
        !           195:        % hash
        !           196:        1
        !           197:         578c83f8 8fe1f6a8 c119d2ba 3a9256c2
        !           198:        % hash
        !           199:        12
        !           200:         255468d4 b4bd985b 696a7313 6027fc80
        !           201:        % hash
        !           202:        123
        !           203:         f5339a52 9c4dafc5 34fe3f0d 7a66baf7
        !           204:        % hash
        !           205:        1234
        !           206:         2645ff86 9a6c0ec6 5c49c20d d9050165
        !           207:        % hash
        !           208:        12345
        !           209:         387d2929 8ed52ece 88e64f38 fe4fdb11
        !           210:        % hash
        !           211:        123456
        !           212:         f29f8915 d23a0e02 838cc2e2 75f5dfe7
        !           213:        % hash
        !           214:        1234567
        !           215:         4fb0f76e 9af16a2d 61844b9c e833e18f
        !           216:        % hash
        !           217:        12345678
        !           218:         aacc56fc 85910fef e81fc697 6b061f4e
        !           219:        % hash
        !           220:        123456789
        !           221:         e6997849 44ed68a1 c762ea1e 90c77967
        !           222:        
        !           223:        
        !           224:        % hash 4 256
        !           225:        
        !           226:         6c504351 ce7f4b7a 93adb29a f9781ff9 2150f157 fee18661 eef511a3 fc83ddf
        !           227:        % hash 4 256
        !           228:        1
        !           229:         65d657f8 85ad8b4a b35999cc 3ded8b82 7cf71fa4 25424750 35778910 d6c2e320
        !           230:        % hash 4 256
        !           231:        12
        !           232:         7636f3d1 af139cf9 58f46f99 66221282 a444732a 7de59da5 d3481c6b bd6e7092
        !           233:        % hash 4 256
        !           234:        123
        !           235:         cd3c7163 5b14c7c2 c24be864 4baab592 b8ab5b99 91ee5ee5 b3cf7a7f c6426ad7
        !           236:        % hash 4 256
        !           237:        1234
        !           238:         9ba783a1 290cb21e fe196a02 3286ece5 49394c75 1ddd607e 5d67c4dc 549c62eb
        !           239:        % hash 4 256
        !           240:        12345
        !           241:         c9680da8 ef00d2f8 4459a8e9 b50ada71 c63cae6f dcb6f774 f6998783 30a4a1f4
        !           242:        % hash 4 256
        !           243:        123456
        !           244:         7656d389 f980bbe8 94152abe c6dc5f16 faf21c60 3b8f5098 861acf3c c059467b
        !           245:        % hash 4 256
        !           246:        1234567
        !           247:         d96eb599 8377bb1d 74a02a2f ac9a85 3175250e 4796af36 36609747 372bba80
        !           248:        % hash 4 256
        !           249:        12345678
        !           250:         b7818f09 2118e98a 140af09a 6cca4e6f 1eba88e7 52c20174 653637c9 d628f33f
        !           251:        % hash 4 256
        !           252:        123456789
        !           253:         c2242249 1187baaa 94725400 8dffd5b 38f01557 9f3f2390 50969991 fdc1a810
        !           254:        % 
        !           255:        
        !           256:        
        !           257:        
        !           258:        Note that 'unsigned long int' MUST be 32 bits
        !           259:        
        !           260:        Implementor:  Ralph C. Merkle
        !           261:        
        !           262:        */
        !           263:        
        !           264:        
        !           265:        
        !           266:        
        !           267:        #define inputFile  0            /* normally set up for standard in */
        !           268:        #define errorFile  2            /* normally set up for standard error */
        !           269:        
        !           270:        /* WARNING:  Changing the following parameter may affect security in
        !           271:           non-obvious ways  */
        !           272:        #define inputBlockSize  16      /* size in 32-bit words of an input block to
        !           273:                                           the hash routine  */
        !           274:        #define maxOutputBlockSize  8   /* size in 32-bit words of largest output
        !           275:                                           block from the hash routine */
        !           276:        
        !           277:        
        !           278:        
        !           279:        #define bufferSize  3072        /* MUST be 3 * 2**n,  n > 5  */
        !           280:        #define bufferSizeInWords  768  /* MUST be bufferSize/4  */
        !           281:        #define maxSBoxCount 8
        !           282:        #define maxSBoxCountDiv2 4      /* has to equal maxSBoxCount/2, of course */
        !           283:        #define maxWordCount 16         /* maximum valid value for wordCount  */
        !           284:        
        !           285:        /* Note that the following variable should be set either to 4 or to 8.  */
        !           286:        int     outputBlockSize = 4;    /* default to normal 4 32-bit word or 128 bit
        !           287:                                           output size */
        !           288:        
        !           289:        /* default to normal 48-byte chunk size. Must be
        !           290:           inputBlockSize-outputBlockSize  */
        !           291:        int     chunkSize = 12;
        !           292:        
        !           293:        /* initialize the default value for the security parameter */
        !           294:        int     securityLevel = 2;
        !           295:        
        !           296:        int     shiftTable[4] = {16, 8, 16, 24};
        !           297:        
        !           298:        typedef unsigned long int sBox[256];
        !           299:        
        !           300:        
        !           301:        /* The standard S boxes must be defined in another file */
        !           302:        extern sBox standardSBoxes[maxSBoxCount];
        !           303:        
        !           304:        
        !           305:        /* an array needed only for the fast version of HashN -- Hash512.   It's safe
        !           306:           to ignore this array if you don't need to understand the speeded up
        !           307:           version.  Note that the 32-bit word specified by
        !           308:           'rotatedRightStandardSBoxes[i][j][k]' is rotated right by i*8 bits  */
        !           309:        sBox    rotatedRightStandardSBoxes[4][maxSBoxCount];
        !           310:        
        !           311:        
        !           312:        
        !           313:        /* The following routine is a simple error exit routine  -- it prints a
        !           314:           message and aborts */
        !           315:        void    errAbort (s)
        !           316:                char   *s;
        !           317:        {
        !           318:                int     length;
        !           319:        
        !           320:                for (length = 0; s[length] != 0; length++);
        !           321:                if (write (errorFile, s, length) != length)
        !           322:                        exit (2);
        !           323:                if (write (errorFile, "\n", 1) != 1)
        !           324:                        exit (2);
        !           325:                exit (1);
        !           326:        };
        !           327:        
        !           328:        
        !           329:        /* The following routine converts a byte array to an array of unsigned long
        !           330:           int.  It is primarily intended to eliminate the byte-ordering problem.
        !           331:           VAXes order the bytes in a character array differently than SUN's do. Note
        !           332:           that this routine will SLOW DOWN THE HASH FUNCTION */
        !           333:        void    convertBytes (buffer, wordBuffer)
        !           334:                char    buffer[bufferSize];
        !           335:        unsigned long int wordBuffer[bufferSizeInWords];
        !           336:        
        !           337:        {
        !           338:                int     i;
        !           339:                unsigned long int t0, t1, t2, t3;
        !           340:        
        !           341:                /* buffer --        an input buffer of characters
        !           342:                
        !           343:                wordBuffer --  an output buffer of unsigned long int's
        !           344:                
        !           345:                */
        !           346:        
        !           347:                for (i = 0; i < bufferSizeInWords; i++) {
        !           348:        
        !           349:                        t0 = buffer[4 * i];
        !           350:                        t1 = buffer[4 * i + 1];
        !           351:                        t2 = buffer[4 * i + 2];
        !           352:                        t3 = buffer[4 * i + 3];
        !           353:                        t0 &= 0xff;
        !           354:                        t1 &= 0xff;
        !           355:                        t2 &= 0xff;
        !           356:                        t3 &= 0xff;
        !           357:                        wordBuffer[i] = (t0 << 24) | (t1 << 16) | (t2 << 8) | t3;
        !           358:        
        !           359:                };
        !           360:        
        !           361:        };
        !           362:        
        !           363:        
        !           364:        
        !           365:        void    HashN (output, wordCount, input, localSecurityLevel)
        !           366:                unsigned long int output[maxOutputBlockSize];
        !           367:        int     wordCount;
        !           368:        unsigned long int input[];
        !           369:        int     localSecurityLevel;
        !           370:        
        !           371:        {
        !           372:        
        !           373:                /* Note that we are computing localSecurityLevel * wordCount * 4
        !           374:                   rounds.  */
        !           375:        
        !           376:                unsigned long int mask;
        !           377:                unsigned long int block[maxWordCount];  /* holds the array of data
        !           378:                                                           being hashed  */
        !           379:                unsigned long int SBoxEntry;    /* just a temporary */
        !           380:                int     shift;
        !           381:                int     i;
        !           382:                int     index;
        !           383:                int     next, last;
        !           384:                int     byteInWord;
        !           385:        
        !           386:        
        !           387:                mask = wordCount - 1;   /* presumes wordCount is a power of 2  */
        !           388:        
        !           389:        
        !           390:                /* Test for various error conditions and logic problems  */
        !           391:        
        !           392:                if (localSecurityLevel * 2 > maxSBoxCount)
        !           393:                        errAbort ("Too few S-boxes");
        !           394:                if (wordCount > maxWordCount)
        !           395:                        errAbort ("Logic error, wordCount > maxWordCount");
        !           396:                if (wordCount != 16)
        !           397:                        errAbort ("Security warning, input size not equal to 512 bits");
        !           398:                /* note that this routine will fail spectacularly on 8 byte blocks,
        !           399:                   hence the following ban. */
        !           400:                if (wordCount < 4)
        !           401:                        errAbort (" wordCount too small");
        !           402:                if ((wordCount & mask) != 0)
        !           403:                        errAbort ("logic error, wordCount not a power of 2");
        !           404:                if (outputBlockSize > wordCount)
        !           405:                        errAbort ("logic error, outputBlockSize is too big");
        !           406:                if ((outputBlockSize != 4) & (outputBlockSize != 8))
        !           407:                        errAbort ("Output size neither 128 nor 256 bits");
        !           408:        
        !           409:                /* All the error condtions have now been checked -- everything should
        !           410:                   work smoothly  */
        !           411:        
        !           412:        
        !           413:                /* initialize the block to be encrypted from the input  */
        !           414:                for (i = 0; i < wordCount; i++)
        !           415:                        block[i] = input[i];
        !           416:        
        !           417:        
        !           418:        
        !           419:                for (index = 0; index < localSecurityLevel; index++) {
        !           420:        
        !           421:        
        !           422:                        for (byteInWord = 0; byteInWord < 4; byteInWord++) {
        !           423:        
        !           424:        
        !           425:                                for (i = 0; i < wordCount; i++) {
        !           426:                                        next = (i + 1) & mask;
        !           427:                                        last = (i + mask) & mask;       /* really last = (i-1)
        !           428:                                                                           MOD wordCount */
        !           429:        
        !           430:                                        SBoxEntry = standardSBoxes[2 * index + ((i / 2) & 1)][block[i] & 0xff];
        !           431:                                        block[next] ^= SBoxEntry;
        !           432:                                        block[last] ^= SBoxEntry;
        !           433:                                };
        !           434:        
        !           435:        
        !           436:                                /* Rotate right all 32-bit words in the entire block
        !           437:                                   at once.  */
        !           438:                                shift = shiftTable[byteInWord];
        !           439:                                for (i = 0; i < wordCount; i++)
        !           440:                                        block[i] = (block[i] >> shift) | (block[i] << (32 - shift));
        !           441:        
        !           442:        
        !           443:                        };              /* end of byteInWord going from 0 to 3 */
        !           444:        
        !           445:        
        !           446:                };                      /* end of index going from 0 to
        !           447:                                           localSecurityLevel-1 */
        !           448:        
        !           449:        
        !           450:        
        !           451:                for (i = 0; i < outputBlockSize; i++)
        !           452:                        output[i] = input[i] ^ block[mask - i];
        !           453:        
        !           454:        
        !           455:        };
        !           456:        
        !           457:        
        !           458:        
        !           459:        
        !           460:        void    Hash512 (output, input, localSecurityLevel)
        !           461:                unsigned long int output[maxOutputBlockSize];
        !           462:        unsigned long int input[];
        !           463:        int     localSecurityLevel;
        !           464:        
        !           465:        {
        !           466:        
        !           467:                /* This routine is a specialized version of HashN.  It is optimized
        !           468:                   for speed, and assumes that the input is always 16 words long
        !           469:                   It hashes 512 bits, hence its name.  */
        !           470:                /* You need not try to figure out this routine unless you wish to
        !           471:                   figure out a fast implementation of Snefru  */
        !           472:        
        !           473:                /* the following are two pointers to S-boxes  */
        !           474:                unsigned long int *SBox0;
        !           475:                unsigned long int *SBox1;
        !           476:        
        !           477:        
        !           478:                /* the array 'block' is divided into 16 distinct variables */
        !           479:                unsigned long int block0, block1, block2, block3;
        !           480:                unsigned long int block4, block5, block6, block7;
        !           481:                unsigned long int block8, block9, block10, block11;
        !           482:                unsigned long int block12, block13, block14, block15;
        !           483:        
        !           484:                unsigned long int SBoxEntry;    /* just a temporary */
        !           485:                int     index;
        !           486:        
        !           487:                if (inputBlockSize != 16)
        !           488:                        errAbort ("Hash512 called with inputBlockSize != 16");
        !           489:                if ((outputBlockSize != 4) & (outputBlockSize != 8))
        !           490:                        errAbort ("Hash512 called with outputBlockSize != 4 or 8");
        !           491:        
        !           492:                /* initialize the block to be encrypted from the input  */
        !           493:                /* Note that in theory block<i> should be kept in register.  Not all
        !           494:                   compilers can do this, even when there are enough registers --
        !           495:                   this will degrade performance significantly.  */
        !           496:                block0 = input[0];
        !           497:                block1 = input[1];
        !           498:                block2 = input[2];
        !           499:                block3 = input[3];
        !           500:                block4 = input[4];
        !           501:                block5 = input[5];
        !           502:                block6 = input[6];
        !           503:                block7 = input[7];
        !           504:                block8 = input[8];
        !           505:                block9 = input[9];
        !           506:                block10 = input[10];
        !           507:                block11 = input[11];
        !           508:                block12 = input[12];
        !           509:                block13 = input[13];
        !           510:                block14 = input[14];
        !           511:                block15 = input[15];
        !           512:        
        !           513:        
        !           514:        
        !           515:                for (index = 0; index < 2 * localSecurityLevel; index += 2) {
        !           516:        
        !           517:        
        !           518:                        /* set up the base address for the two S-box pointers.  */
        !           519:                        SBox0 = rotatedRightStandardSBoxes[0][index];
        !           520:                        SBox1 = SBox0 + 256;
        !           521:        
        !           522:        
        !           523:                        /* In the following unrolled code, the basic 'assembly
        !           524:                           language' block that is repeated is:
        !           525:                        
        !           526:                        1    temp1 = shift(block<i>, shiftConstant)
        !           527:                        2    temp2 = temp1 & 0x3fc
        !           528:                        3    temp3 = SBox<0 or 1> + temp2
        !           529:                        4    temp4 = *temp3
        !           530:                        5    block<i-1> ^= temp4
        !           531:                        6    block<i+1> ^= temp4
        !           532:                        
        !           533:                        In step 1, we simply shift the ith 32-bit block to bring the
        !           534:                           8-bit byte into the right position.  Note that we will
        !           535:                           also build-in a left-shift by 2 bits at this stage, to
        !           536:                           eliminate the left shift required later because we are
        !           537:                           indexing into an array of 4-byte table entries.
        !           538:                        
        !           539:                        In step 2, we mask off the desired 8 bits.  Note that 0x3fc
        !           540:                           is simply 0xff << 2.
        !           541:                        
        !           542:                        In step 3, we use a normal integer add to compute the actual
        !           543:                           address of the S-box entry.  Note that one of two pointers
        !           544:                           is used, as appropriate.  Temp3 then holds the actual byte
        !           545:                           address of the desired S-box entry.
        !           546:                        
        !           547:                        In step 4, we load the 4-byte S-box entry.
        !           548:                        
        !           549:                        In steps 5 and 6, we XOR the loaded S-box entry with both the
        !           550:                           previous and the next 32-bit entries in the 'block' array.
        !           551:                        
        !           552:                        Typical optimizing comilers might fail to put all the
        !           553:                           block<i> variables into registers. This can result in
        !           554:                           significant performance degradation. Also, most compilers
        !           555:                           will use a separate left-shift-by-2 after masking off the
        !           556:                           needed 8 bits, but the performance degradation caused by
        !           557:                           this oversight should be modest.
        !           558:                        
        !           559:                        */
        !           560:        
        !           561:                        SBoxEntry = SBox0[block0 & 0xff];
        !           562:                        block1 ^= SBoxEntry;
        !           563:                        block15 ^= SBoxEntry;
        !           564:                        SBoxEntry = SBox0[block1 & 0xff];
        !           565:                        block2 ^= SBoxEntry;
        !           566:                        block0 ^= SBoxEntry;
        !           567:                        SBoxEntry = SBox1[block2 & 0xff];
        !           568:                        block3 ^= SBoxEntry;
        !           569:                        block1 ^= SBoxEntry;
        !           570:                        SBoxEntry = SBox1[block3 & 0xff];
        !           571:                        block4 ^= SBoxEntry;
        !           572:                        block2 ^= SBoxEntry;
        !           573:                        SBoxEntry = SBox0[block4 & 0xff];
        !           574:                        block5 ^= SBoxEntry;
        !           575:                        block3 ^= SBoxEntry;
        !           576:                        SBoxEntry = SBox0[block5 & 0xff];
        !           577:                        block6 ^= SBoxEntry;
        !           578:                        block4 ^= SBoxEntry;
        !           579:                        SBoxEntry = SBox1[block6 & 0xff];
        !           580:                        block7 ^= SBoxEntry;
        !           581:                        block5 ^= SBoxEntry;
        !           582:                        SBoxEntry = SBox1[block7 & 0xff];
        !           583:                        block8 ^= SBoxEntry;
        !           584:                        block6 ^= SBoxEntry;
        !           585:                        SBoxEntry = SBox0[block8 & 0xff];
        !           586:                        block9 ^= SBoxEntry;
        !           587:                        block7 ^= SBoxEntry;
        !           588:                        SBoxEntry = SBox0[block9 & 0xff];
        !           589:                        block10 ^= SBoxEntry;
        !           590:                        block8 ^= SBoxEntry;
        !           591:                        SBoxEntry = SBox1[block10 & 0xff];
        !           592:                        block11 ^= SBoxEntry;
        !           593:                        block9 ^= SBoxEntry;
        !           594:                        SBoxEntry = SBox1[block11 & 0xff];
        !           595:                        block12 ^= SBoxEntry;
        !           596:                        block10 ^= SBoxEntry;
        !           597:                        SBoxEntry = SBox0[block12 & 0xff];
        !           598:                        block13 ^= SBoxEntry;
        !           599:                        block11 ^= SBoxEntry;
        !           600:                        SBoxEntry = SBox0[block13 & 0xff];
        !           601:                        block14 ^= SBoxEntry;
        !           602:                        block12 ^= SBoxEntry;
        !           603:                        SBoxEntry = SBox1[block14 & 0xff];
        !           604:                        block15 ^= SBoxEntry;
        !           605:                        block13 ^= SBoxEntry;
        !           606:                        SBoxEntry = SBox1[block15 & 0xff];
        !           607:                        block0 ^= SBoxEntry;
        !           608:                        block14 ^= SBoxEntry;
        !           609:        
        !           610:                        /* SBox0 = rotatedRightStandardSBoxes[2][index];  */
        !           611:                        SBox0 += 2 * maxSBoxCount * 256;
        !           612:                        SBox1 = SBox0 + 256;
        !           613:        
        !           614:                        SBoxEntry = SBox0[(block0 >> 16) & 0xff];
        !           615:                        block1 ^= SBoxEntry;
        !           616:                        block15 ^= SBoxEntry;
        !           617:                        SBoxEntry = SBox0[(block1 >> 16) & 0xff];
        !           618:                        block2 ^= SBoxEntry;
        !           619:                        block0 ^= SBoxEntry;
        !           620:                        SBoxEntry = SBox1[(block2 >> 16) & 0xff];
        !           621:                        block3 ^= SBoxEntry;
        !           622:                        block1 ^= SBoxEntry;
        !           623:                        SBoxEntry = SBox1[(block3 >> 16) & 0xff];
        !           624:                        block4 ^= SBoxEntry;
        !           625:                        block2 ^= SBoxEntry;
        !           626:                        SBoxEntry = SBox0[(block4 >> 16) & 0xff];
        !           627:                        block5 ^= SBoxEntry;
        !           628:                        block3 ^= SBoxEntry;
        !           629:                        SBoxEntry = SBox0[(block5 >> 16) & 0xff];
        !           630:                        block6 ^= SBoxEntry;
        !           631:                        block4 ^= SBoxEntry;
        !           632:                        SBoxEntry = SBox1[(block6 >> 16) & 0xff];
        !           633:                        block7 ^= SBoxEntry;
        !           634:                        block5 ^= SBoxEntry;
        !           635:                        SBoxEntry = SBox1[(block7 >> 16) & 0xff];
        !           636:                        block8 ^= SBoxEntry;
        !           637:                        block6 ^= SBoxEntry;
        !           638:                        SBoxEntry = SBox0[(block8 >> 16) & 0xff];
        !           639:                        block9 ^= SBoxEntry;
        !           640:                        block7 ^= SBoxEntry;
        !           641:                        SBoxEntry = SBox0[(block9 >> 16) & 0xff];
        !           642:                        block10 ^= SBoxEntry;
        !           643:                        block8 ^= SBoxEntry;
        !           644:                        SBoxEntry = SBox1[(block10 >> 16) & 0xff];
        !           645:                        block11 ^= SBoxEntry;
        !           646:                        block9 ^= SBoxEntry;
        !           647:                        SBoxEntry = SBox1[(block11 >> 16) & 0xff];
        !           648:                        block12 ^= SBoxEntry;
        !           649:                        block10 ^= SBoxEntry;
        !           650:                        SBoxEntry = SBox0[(block12 >> 16) & 0xff];
        !           651:                        block13 ^= SBoxEntry;
        !           652:                        block11 ^= SBoxEntry;
        !           653:                        SBoxEntry = SBox0[(block13 >> 16) & 0xff];
        !           654:                        block14 ^= SBoxEntry;
        !           655:                        block12 ^= SBoxEntry;
        !           656:                        SBoxEntry = SBox1[(block14 >> 16) & 0xff];
        !           657:                        block15 ^= SBoxEntry;
        !           658:                        block13 ^= SBoxEntry;
        !           659:                        SBoxEntry = SBox1[(block15 >> 16) & 0xff];
        !           660:                        block0 ^= SBoxEntry;
        !           661:                        block14 ^= SBoxEntry;
        !           662:        
        !           663:        
        !           664:                        /* SBox0 = rotatedRightStandardSBoxes[1][index];  */
        !           665:                        SBox0 -= maxSBoxCount * 256;
        !           666:                        SBox1 = SBox0 + 256;
        !           667:        
        !           668:                        SBoxEntry = SBox0[block0 >> 24];
        !           669:                        block1 ^= SBoxEntry;
        !           670:                        block15 ^= SBoxEntry;
        !           671:                        SBoxEntry = SBox0[block1 >> 24];
        !           672:                        block2 ^= SBoxEntry;
        !           673:                        block0 ^= SBoxEntry;
        !           674:                        SBoxEntry = SBox1[block2 >> 24];
        !           675:                        block3 ^= SBoxEntry;
        !           676:                        block1 ^= SBoxEntry;
        !           677:                        SBoxEntry = SBox1[block3 >> 24];
        !           678:                        block4 ^= SBoxEntry;
        !           679:                        block2 ^= SBoxEntry;
        !           680:                        SBoxEntry = SBox0[block4 >> 24];
        !           681:                        block5 ^= SBoxEntry;
        !           682:                        block3 ^= SBoxEntry;
        !           683:                        SBoxEntry = SBox0[block5 >> 24];
        !           684:                        block6 ^= SBoxEntry;
        !           685:                        block4 ^= SBoxEntry;
        !           686:                        SBoxEntry = SBox1[block6 >> 24];
        !           687:                        block7 ^= SBoxEntry;
        !           688:                        block5 ^= SBoxEntry;
        !           689:                        SBoxEntry = SBox1[block7 >> 24];
        !           690:                        block8 ^= SBoxEntry;
        !           691:                        block6 ^= SBoxEntry;
        !           692:                        SBoxEntry = SBox0[block8 >> 24];
        !           693:                        block9 ^= SBoxEntry;
        !           694:                        block7 ^= SBoxEntry;
        !           695:                        SBoxEntry = SBox0[block9 >> 24];
        !           696:                        block10 ^= SBoxEntry;
        !           697:                        block8 ^= SBoxEntry;
        !           698:                        SBoxEntry = SBox1[block10 >> 24];
        !           699:                        block11 ^= SBoxEntry;
        !           700:                        block9 ^= SBoxEntry;
        !           701:                        SBoxEntry = SBox1[block11 >> 24];
        !           702:                        block12 ^= SBoxEntry;
        !           703:                        block10 ^= SBoxEntry;
        !           704:                        SBoxEntry = SBox0[block12 >> 24];
        !           705:                        block13 ^= SBoxEntry;
        !           706:                        block11 ^= SBoxEntry;
        !           707:                        SBoxEntry = SBox0[block13 >> 24];
        !           708:                        block14 ^= SBoxEntry;
        !           709:                        block12 ^= SBoxEntry;
        !           710:                        SBoxEntry = SBox1[block14 >> 24];
        !           711:                        block15 ^= SBoxEntry;
        !           712:                        block13 ^= SBoxEntry;
        !           713:                        SBoxEntry = SBox1[block15 >> 24];
        !           714:                        block0 ^= SBoxEntry;
        !           715:                        block14 ^= SBoxEntry;
        !           716:        
        !           717:        
        !           718:                        /* SBox0 = rotatedRightStandardSBoxes[3][index];  */
        !           719:                        SBox0 += 2 * maxSBoxCount * 256;
        !           720:                        SBox1 = SBox0 + 256;
        !           721:        
        !           722:                        SBoxEntry = SBox0[(block0 >> 8) & 0xff];
        !           723:                        block1 ^= SBoxEntry;
        !           724:                        block15 ^= SBoxEntry;
        !           725:                        SBoxEntry = SBox0[(block1 >> 8) & 0xff];
        !           726:                        block2 ^= SBoxEntry;
        !           727:                        block0 ^= SBoxEntry;
        !           728:                        SBoxEntry = SBox1[(block2 >> 8) & 0xff];
        !           729:                        block3 ^= SBoxEntry;
        !           730:                        block1 ^= SBoxEntry;
        !           731:                        SBoxEntry = SBox1[(block3 >> 8) & 0xff];
        !           732:                        block4 ^= SBoxEntry;
        !           733:                        block2 ^= SBoxEntry;
        !           734:                        SBoxEntry = SBox0[(block4 >> 8) & 0xff];
        !           735:                        block5 ^= SBoxEntry;
        !           736:                        block3 ^= SBoxEntry;
        !           737:                        SBoxEntry = SBox0[(block5 >> 8) & 0xff];
        !           738:                        block6 ^= SBoxEntry;
        !           739:                        block4 ^= SBoxEntry;
        !           740:                        SBoxEntry = SBox1[(block6 >> 8) & 0xff];
        !           741:                        block7 ^= SBoxEntry;
        !           742:                        block5 ^= SBoxEntry;
        !           743:                        SBoxEntry = SBox1[(block7 >> 8) & 0xff];
        !           744:                        block8 ^= SBoxEntry;
        !           745:                        block6 ^= SBoxEntry;
        !           746:                        SBoxEntry = SBox0[(block8 >> 8) & 0xff];
        !           747:                        block9 ^= SBoxEntry;
        !           748:                        block7 ^= SBoxEntry;
        !           749:                        SBoxEntry = SBox0[(block9 >> 8) & 0xff];
        !           750:                        block10 ^= SBoxEntry;
        !           751:                        block8 ^= SBoxEntry;
        !           752:                        SBoxEntry = SBox1[(block10 >> 8) & 0xff];
        !           753:                        block11 ^= SBoxEntry;
        !           754:                        block9 ^= SBoxEntry;
        !           755:                        SBoxEntry = SBox1[(block11 >> 8) & 0xff];
        !           756:                        block12 ^= SBoxEntry;
        !           757:                        block10 ^= SBoxEntry;
        !           758:                        SBoxEntry = SBox0[(block12 >> 8) & 0xff];
        !           759:                        block13 ^= SBoxEntry;
        !           760:                        block11 ^= SBoxEntry;
        !           761:                        SBoxEntry = SBox0[(block13 >> 8) & 0xff];
        !           762:                        block14 ^= SBoxEntry;
        !           763:                        block12 ^= SBoxEntry;
        !           764:                        SBoxEntry = SBox1[(block14 >> 8) & 0xff];
        !           765:                        block15 ^= SBoxEntry;
        !           766:                        block13 ^= SBoxEntry;
        !           767:                        SBoxEntry = SBox1[(block15 >> 8) & 0xff];
        !           768:                        block0 ^= SBoxEntry;
        !           769:                        block14 ^= SBoxEntry;
        !           770:        
        !           771:        
        !           772:        
        !           773:                };                      /* end of index going from 0 to
        !           774:                                           2*localSecurityLevel-2 in steps of 2 */
        !           775:        
        !           776:        
        !           777:                output[0] = input[0] ^ block15;
        !           778:                output[1] = input[1] ^ block14;
        !           779:                output[2] = input[2] ^ block13;
        !           780:                output[3] = input[3] ^ block12;
        !           781:        
        !           782:                /* generate an extra 128 bits if the output is 256 bits */
        !           783:                if (outputBlockSize == 8) {
        !           784:                        output[4] = input[4] ^ block11;
        !           785:                        output[5] = input[5] ^ block10;
        !           786:                        output[6] = input[6] ^ block9;
        !           787:                        output[7] = input[7] ^ block8;
        !           788:                };
        !           789:        
        !           790:        
        !           791:        };
        !           792:        
        !           793:        
        !           794:        /* Hash512twice does exactly that.  It hashes 512 bits using both Hash512 and
        !           795:           HashN.  The output of the two implementations is then compared, and if
        !           796:           they differ an error message is issued. This insures that two different
        !           797:           quite different C routines compute the same value, and is quite
        !           798:           helpful in catching bugs, implementation errors, etc.
        !           799:        
        !           800:        It should be particularly helpful to the implementor trying to "tune" the
        !           801:           hash function for speed, as it provides a constant check on correctness.
        !           802:        
        !           803:        */
        !           804:        
        !           805:        void    Hash512twice (output, input, localSecurityLevel)
        !           806:                unsigned long int output[maxOutputBlockSize];
        !           807:        unsigned long int input[];
        !           808:        int     localSecurityLevel;
        !           809:        
        !           810:        {
        !           811:                unsigned long int out1[maxOutputBlockSize];
        !           812:                unsigned long int out2[maxOutputBlockSize];
        !           813:                int     i;
        !           814:        
        !           815:                HashN (out1, inputBlockSize, input, localSecurityLevel);
        !           816:                Hash512 (out2, input, localSecurityLevel);
        !           817:                for (i = 0; i < outputBlockSize; i++)
        !           818:                        if (out1[i] != out2[i])
        !           819:                                errAbort (" Hash512 and HashN differ");
        !           820:                for (i = 0; i < outputBlockSize; i++)
        !           821:                        output[i] = out1[i];
        !           822:        };
        !           823:        
        !           824:        
        !           825:        
        !           826:        /* The main program reads the input, hashes it, and prints the result.  Much
        !           827:           of the logic in the main program is taken up with the trivia of buffer
        !           828:           management, error checking, command-line parameter checking, self-tests,
        !           829:           and the like. The actual use of the hash function occupies a modest
        !           830:           portion of the overall program.
        !           831:        
        !           832:        The basic idea is simple.  As an example, if H is the hash function that
        !           833:           produces either 128-bit (or 256-bit) outputs, and if we pick an input
        !           834:           string that is 3 "chunks" long then we are computing:
        !           835:        
        !           836:        output = H( H(  H(  H(
        !           837:                                0 || chunk[0])  || chunk[1])  || chunk[2]) || bit-length)
        !           838:        
        !           839:        "bit-length" is a "chunk" sized field into which has been put the length of
        !           840:           the input, in bits, right justified.  Note that the size of a "chunk" is
        !           841:           just the input size minus the output size.
        !           842:        
        !           843:        "0" is a vector of 0 bits of the same size (in bits) as the output of H
        !           844:           (i.e., either 128 or 256 bits).
        !           845:        
        !           846:        "||" is the concatenation operator, and is used to concatenate the output
        !           847:           field of the preceding computation of H with the next "chunk" of bits from
        !           848:           the input.
        !           849:        
        !           850:        "chunk" is an array which holds the input string.  The final element of the
        !           851:           array is left justified and zero-filled on the right.
        !           852:        
        !           853:        */
        !           854:        
        !           855:        void    main (argc, argv)
        !           856:                int     argc;
        !           857:                char   *argv[];
        !           858:        
        !           859:        {
        !           860:        
        !           861:                int     i;
        !           862:                char    buffer[bufferSize];
        !           863:                int     hitEOF = 0;     /* 0 means we haven't hit EOF, 1 means we
        !           864:                                           have */
        !           865:                unsigned long int wordBuffer[bufferSizeInWords];
        !           866:                unsigned long int hash[maxOutputBlockSize];
        !           867:                unsigned long int hashArray[inputBlockSize];
        !           868:                unsigned long int bitCount[2];  /* the 64-bit count of the number of
        !           869:                                                   bits in the input */
        !           870:                int     byteCount;      /* the count of the number of bytes we have
        !           871:                                           in the buffer */
        !           872:                int     dataLoc;        /* the location of the next block of data we
        !           873:                                           wish to hash down.  Note this is the index
        !           874:                                           into an array of 32-bit elements, not
        !           875:                                           bytes */
        !           876:        
        !           877:        
        !           878:        
        !           879:                /* self-test, to make sure everything is okay.  */
        !           880:                /* First, test the standard S boxes to make sure they haven't been
        !           881:                   damaged.  */
        !           882:                /* Test to make sure each column is a permutation.  */
        !           883:                for (i = 0; i < maxSBoxCount; i++) {
        !           884:                        char    testArray[256];
        !           885:                        int     testShift = 0;
        !           886:                        int     j;
        !           887:        
        !           888:                        for (testShift = 0; testShift < 32; testShift += 8) {
        !           889:                                for (j = 0; j < 256; j++)
        !           890:                                        testArray[j] = 0;
        !           891:                                for (j = 0; j < 256; j++)
        !           892:                                        testArray[(standardSBoxes[i][j] >> testShift) & 0xff]++;
        !           893:                                for (j = 0; j < 256; j++)
        !           894:                                        if (testArray[j] != 1)
        !           895:                                                errAbort ("Table error -- the standard S box is corrupted");
        !           896:                        };
        !           897:                };
        !           898:                /* Okay, the standard S-box hasn't been damaged  */
        !           899:        
        !           900:        
        !           901:        
        !           902:                /* Set up the rotated array for the fast hash routine  */
        !           903:                {
        !           904:                        int     index;  /* ranges over the S box indices  */
        !           905:                        int     rotation;       /* ranges over the four possible
        !           906:                                                   byte-rotations  */
        !           907:                        int     i;      /* ranges over the 256 possible S-box entries    */
        !           908:        
        !           909:                        for (index = 0; index < maxSBoxCount; index++)
        !           910:                                for (rotation = 0; rotation < 4; rotation++)
        !           911:                                        for (i = 0; i < 256; i++)
        !           912:                                                rotatedRightStandardSBoxes[rotation][index][i] =
        !           913:                                                        (standardSBoxes[index][i] >> (rotation * 8)) |
        !           914:                                                        (standardSBoxes[index][i] << (32 - rotation * 8));
        !           915:        
        !           916:        
        !           917:                };
        !           918:        
        !           919:        
        !           920:        
        !           921:                /* Now try hashing something.  Note that we're testing both HashN and
        !           922:                   Hash512 here  */
        !           923:                {
        !           924:                        unsigned long int testInput[inputBlockSize];
        !           925:                        unsigned long int testOutput[maxOutputBlockSize];
        !           926:                        int     j;
        !           927:                        int     k;
        !           928:        
        !           929:                        /* Set output size to 256 bits -- just for this test routine */
        !           930:                        outputBlockSize = maxOutputBlockSize;
        !           931:                        chunkSize = inputBlockSize - outputBlockSize;
        !           932:        
        !           933:                        if (maxOutputBlockSize != 8)
        !           934:                                errAbort ("The output block size has changed, update the self-test");
        !           935:                        if (inputBlockSize != 16)
        !           936:                                errAbort ("The input block size has changed, update the self-test");
        !           937:                        if (maxSBoxCount != 8)
        !           938:                                errAbort ("Wrong number of S boxes, update the self-test");
        !           939:        
        !           940:                        for (i = 0; i < inputBlockSize; i++)
        !           941:                                testInput[i] = 0;       /* zero the input */
        !           942:                        k = 0;  /*  zero the pointer into the input buffer */
        !           943:                        for (i = 0; i < 50; i++) {
        !           944:                                Hash512twice (testOutput, testInput, 4);
        !           945:                                /*      Copy the output into a new slot in the input buffer */
        !           946:                                for (j = 0; j < maxOutputBlockSize; j++)
        !           947:                                        testInput[k+j] = testOutput[j];
        !           948:                                k += maxOutputBlockSize;
        !           949:                                        /*      reset pointer into input buffer
        !           950:                                                if it might overflow next time */
        !           951:                                if ( (k+maxOutputBlockSize) > inputBlockSize) k=0;
        !           952:                        };
        !           953:                        if ((testOutput[0] != 1967985403) || (testOutput[1] != 2688653266) ||
        !           954:                            (testOutput[2] != 3911883902) || (testOutput[3] != 1117323144) ||
        !           955:                            (testOutput[4] != 4238876879) || (testOutput[5] != 877649382) ||
        !           956:                        (testOutput[6] != 1112396746) || (testOutput[7] != 324992866)
        !           957:                                )
        !           958:                                errAbort ("Test hash of 64 bytes of 0 failed");
        !           959:                };
        !           960:                /* Okay, we can hash at least 50  64-byte values correctly.  */
        !           961:        
        !           962:        
        !           963:        
        !           964:                outputBlockSize = 4;    /* default is 4 32-bit words, or 128 bits */
        !           965:                chunkSize = inputBlockSize - outputBlockSize;
        !           966:        
        !           967:                /* Check command line arguments */
        !           968:                if (argc == 3) {
        !           969:                        /* Two arguments -- generate the Large Economy Size Output of
        !           970:                           256 bits */
        !           971:                        outputBlockSize = 8;    /* 8  32-bit words */
        !           972:                        chunkSize = inputBlockSize - outputBlockSize;
        !           973:                        if ((argv[2][0] != '2') |
        !           974:                            (argv[2][1] != '5') |
        !           975:                            (argv[2][2] != '6'))
        !           976:                                errAbort ("usage:  hash <security level> [256]");
        !           977:                        argc--;
        !           978:                };
        !           979:        
        !           980:                if ((bufferSizeInWords % chunkSize) != 0)
        !           981:                        errAbort ("Buffer size is fouled up");
        !           982:        
        !           983:                if (argc > 2)
        !           984:                        errAbort ("usage:  hash [ <security level> [ <output size> ] ]");
        !           985:                else if (argc == 2) {
        !           986:                        securityLevel = 0;
        !           987:                        if (argv[1][0] == '2')
        !           988:                                securityLevel = 2;
        !           989:                        else if (argv[1][0] == '3')
        !           990:                                securityLevel = 3;
        !           991:                        else if (argv[1][0] == '4')
        !           992:                                securityLevel = 4;
        !           993:        
        !           994:                        if ((argv[1][1] != 0) || (securityLevel == 0))
        !           995:                                errAbort ("The security level can only be 2, 3, or 4 (4 is most secure).");
        !           996:                };
        !           997:        
        !           998:        
        !           999:                /* Apply the one-way hash function to the standard input  */
        !          1000:        
        !          1001:        
        !          1002:                bitCount[0] = 0;
        !          1003:                bitCount[1] = 0;
        !          1004:                byteCount = read (inputFile, buffer, bufferSize);
        !          1005:                if (byteCount < 0)
        !          1006:                        errAbort ("Error on first read from standard input");
        !          1007:                if (byteCount != bufferSize)
        !          1008:                        hitEOF = 1;     /* set EOF flag true if didn't fill buffer */
        !          1009:        
        !          1010:        
        !          1011:                bitCount[1] += byteCount * 8;   /* increment the total number of bits
        !          1012:                                                   read */
        !          1013:                /* bump the upper 32 bits when the lower 32-bits wraps around */
        !          1014:                if (bitCount[1] < (byteCount * 8))
        !          1015:                        bitCount[0] += 1;
        !          1016:        
        !          1017:                /* zero out rest of buffer  */
        !          1018:                for (i = byteCount; i < bufferSize; i++)
        !          1019:                        buffer[i] = 0;
        !          1020:        
        !          1021:                /* following conversion required for machines with byte-ordering
        !          1022:                   unlike the SUN */
        !          1023:                convertBytes (buffer, wordBuffer);
        !          1024:                dataLoc = 0;            /* 4-byte-word location in data input buffer */
        !          1025:        
        !          1026:        
        !          1027:        
        !          1028:                /* Now we hash it down with multiple applications of Hash512  */
        !          1029:        
        !          1030:                for (i = 0; i < inputBlockSize; i++)
        !          1031:                        hashArray[i] = 0;       /* initialize hashArray  */
        !          1032:        
        !          1033:                /* Hash each chunk in the input (either 48 byte chunks or 32 byte
        !          1034:                   chunks)  -- and keep the result in hashArray.  Note that the first
        !          1035:                   16 (32) bytes of hashArray holds the output of the previous hash
        !          1036:                   computation.  */
        !          1037:        
        !          1038:                while (byteCount > 0) {
        !          1039:                        if (dataLoc + chunkSize > bufferSize)
        !          1040:                                errAbort ("logic error, buffer over run");
        !          1041:        
        !          1042:                        /* Get the next chunk */
        !          1043:                        for (i = 0; i < chunkSize; i++)
        !          1044:                                hashArray[outputBlockSize + i] = wordBuffer[dataLoc + i];
        !          1045:                        /* and hash it in */
        !          1046:                        Hash512 (hashArray, hashArray, securityLevel);
        !          1047:        
        !          1048:                        /* increment index to next 48-byte input chunk */
        !          1049:                        dataLoc += chunkSize;
        !          1050:        
        !          1051:        
        !          1052:                        /* decrement the number of bytes left to process */
        !          1053:                        /* Yes, if byteCount was less than chunkSize this might make
        !          1054:                           byteCount negative. It's ok, it's caught in the following
        !          1055:                           "if" statement */
        !          1056:                        byteCount -= chunkSize * 4;
        !          1057:        
        !          1058:                        /* Out of data -- read some more */
        !          1059:                        if (byteCount <= 0) {
        !          1060:                                if (hitEOF == 1)
        !          1061:                                        byteCount = 0;
        !          1062:                                else {
        !          1063:                                        if (byteCount != 0)
        !          1064:                                                errAbort ("Logic error near EOF");
        !          1065:                                        byteCount = read (inputFile, buffer, bufferSize);
        !          1066:                                        if (byteCount < 0)
        !          1067:                                                errAbort ("Error while reading from input");
        !          1068:                                        if (byteCount != bufferSize)
        !          1069:                                                hitEOF = 1;
        !          1070:                                };
        !          1071:        
        !          1072:                                bitCount[1] += byteCount * 8;   /* increment the
        !          1073:                                                                   bit-count */
        !          1074:                                /* bump the upper 32 bits when the lower 32-bits
        !          1075:                                   wraps around */
        !          1076:                                if (bitCount[1] < (byteCount * 8))
        !          1077:                                        bitCount[0] += 1;
        !          1078:        
        !          1079:                                /* zero out rest of buffer */
        !          1080:                                for (i = byteCount; i < bufferSize; i++)
        !          1081:                                        buffer[i] = 0;
        !          1082:        
        !          1083:                                convertBytes (buffer, wordBuffer);
        !          1084:                                dataLoc = 0;
        !          1085:                        };
        !          1086:                };                      /* end of while */
        !          1087:        
        !          1088:        
        !          1089:                /*  Zero out the remainder of hashArray  */
        !          1090:                for (i = 0; i < chunkSize; i++)
        !          1091:                                hashArray[outputBlockSize + i] = 0;
        !          1092:        
        !          1093:                /* Put the 64-bit bit-count into the final 64-bits of the block about
        !          1094:                   to be hashed */
        !          1095:                hashArray[inputBlockSize - 2] = bitCount[0];    /* upper 32 bits of
        !          1096:                                                                   count */
        !          1097:                hashArray[inputBlockSize - 1] = bitCount[1];    /* lower 32 bits of
        !          1098:                                                                   count */
        !          1099:        
        !          1100:                /* Final hash down.  */
        !          1101:                Hash512 (hash, hashArray, securityLevel);
        !          1102:        
        !          1103:                /* 'hash' now holds the hashed result, which is printed on standard
        !          1104:                   output */
        !          1105:                for (i = 0; i < outputBlockSize; i++)
        !          1106:                        printf (" %x", hash[i]);
        !          1107:                printf ("\n");
        !          1108:                exit (0);
        !          1109:        };
        !          1110: *-*-END-*-*
        !          1111: sed 's/^       //' >hashComment <<\*-*-END-*-*
        !          1112:        Following are the hash totals computed for the files "hash2.0.c"
        !          1113:        and "standardSBoxes2.c".  The user should be aware that any change
        !          1114:        in these files at all (e.g., addition of a blank at the end of any line,
        !          1115:        conversion of a tab into an equivalent number of spaces, etc) will
        !          1116:        result in a different value of the checksum.  However, in
        !          1117:        a purely logical sense it does little good to verify the correctness
        !          1118:        of the contents of a file using as a test the checksum program
        !          1119:        which has just been copied from that very same file.....
        !          1120:        
        !          1121:        Despite this annoying circularity, I have included the checksum
        !          1122:        values.  They at least serve as a guard against simple errors
        !          1123:        and clumsy efforts at subversion.
        !          1124:        
        !          1125:        Also, if the recipient should ever manage to receive a correct copy
        !          1126:        of the hash total program, then this correct version can be used
        !          1127:        to verify all further updates, changes, etc.
        !          1128:        
        !          1129:        hash2.0.c:  a3878c2d c96c6f8e b4026ae2 9669f027
        !          1130:        standardSBoxes2.c:   49b91919 1a896a dc976159 c6885587
        !          1131: *-*-END-*-*
        !          1132: sed 's/^       //' >stdSBoxes2.c <<\*-*-END-*-*
        !          1133:        /*        This is the standard S box used by the one-way hash function Snefru.
        !          1134:                   See the paper 'A Software One Way Hash Function', by Ralph C. Merkle,
        !          1135:                  for a more detailed explanation.
        !          1136:        
        !          1137:        Version 2.0
        !          1138:        
        !          1139:        NOTE:  This set of tables is different from Version 1.0.
        !          1140:                  Version 2.0 is recomended, Version 1.0 should not be used.
        !          1141:        
        !          1142:        August 1, 1989
        !          1143:        
        !          1144:        Copyright (c) Xerox Corporation 1989
        !          1145:        All rights reserved.
        !          1146:        
        !          1147:        License to  copy and use this software is granted provided that it is identified
        !          1148:        as the 'Tables For the Xerox Secure Hash Function' in all material mentioning
        !          1149:        or referencing this software.
        !          1150:        
        !          1151:        License is also granted to make and use derivative works provided that such
        !          1152:        works are identified as 'derived from the Tables For the Xerox Secure Hash
        !          1153:        Function' in all material mentioning or referencing the derived work.
        !          1154:        
        !          1155:        Xerox Corporation makes no representations concerning either the
        !          1156:        merchantability of this software or the suitability of this software for any
        !          1157:        particular purpose.  It is provided "as is" without express or implied
        !          1158:        warranty of any kind.
        !          1159:        
        !          1160:        
        !          1161:        These notices must be retained in any copies of any part of this software.
        !          1162:        
        !          1163:        
        !          1164:        
        !          1165:        Implementor:  Ralph C. Merkle
        !          1166:        
        !          1167:        */
        !          1168:        
        !          1169:        #define maxSBoxCount 8
        !          1170:        
        !          1171:        
        !          1172:        
        !          1173:        long int standardSBoxes[maxSBoxCount][256] = {
        !          1174:        
        !          1175:        {  /*  Start of S Box 0 */
        !          1176:          0x64F9001B,  /*  0  */
        !          1177:          0xFEDDCDF6,  /*  1  */
        !          1178:          0x7C8FF1E2,  /*  2  */
        !          1179:          0x11D71514,  /*  3  */
        !          1180:          0x8B8C18D3,  /*  4  */
        !          1181:          0xDDDF881E,  /*  5  */
        !          1182:          0x6EAB5056,  /*  6  */
        !          1183:          0x88CED8E1,  /*  7  */
        !          1184:          0x49148959,  /*  8  */
        !          1185:          0x69C56FD5,  /*  9  */
        !          1186:          0xB7994F03,  /*  10  */
        !          1187:          0xFBCEE3E,  /*  11  */
        !          1188:          0x3C264940,  /*  12  */
        !          1189:          0x21557E58,  /*  13  */
        !          1190:          0xE14B3FC2,  /*  14  */
        !          1191:          0x2E5CF591,  /*  15  */
        !          1192:          0xDCEFF8CE,  /*  16  */
        !          1193:          0x92A1648,  /*  17  */
        !          1194:          0xBE812936,  /*  18  */
        !          1195:          0xFF7B0C6A,  /*  19  */
        !          1196:          0xD5251037,  /*  20  */
        !          1197:          0xAFA448F1,  /*  21  */
        !          1198:          0x7DAFC95A,  /*  22  */
        !          1199:          0x1EA69C3F,  /*  23  */
        !          1200:          0xA417ABE7,  /*  24  */
        !          1201:          0x5890E423,  /*  25  */
        !          1202:          0xB0CB70C0,  /*  26  */
        !          1203:          0xC85025F7,  /*  27  */
        !          1204:          0x244D97E3,  /*  28  */
        !          1205:          0x1FF3595F,  /*  29  */
        !          1206:          0xC4EC6396,  /*  30  */
        !          1207:          0x59181E17,  /*  31  */
        !          1208:          0xE635B477,  /*  32  */
        !          1209:          0x354E7DBF,  /*  33  */
        !          1210:          0x796F7753,  /*  34  */
        !          1211:          0x66EB52CC,  /*  35  */
        !          1212:          0x77C3F995,  /*  36  */
        !          1213:          0x32E3A927,  /*  37  */
        !          1214:          0x80CCAED6,  /*  38  */
        !          1215:          0x4E2BE89D,  /*  39  */
        !          1216:          0x375BBD28,  /*  40  */
        !          1217:          0xAD1A3D05,  /*  41  */
        !          1218:          0x2B1B42B3,  /*  42  */
        !          1219:          0x16C44C71,  /*  43  */
        !          1220:          0x4D54BFA8,  /*  44  */
        !          1221:          0xE57DDC7A,  /*  45  */
        !          1222:          0xEC6D8144,  /*  46  */
        !          1223:          0x5A71046B,  /*  47  */
        !          1224:          0xD8229650,  /*  48  */
        !          1225:          0x87FC8F24,  /*  49  */
        !          1226:          0xCBC60E09,  /*  50  */
        !          1227:          0xB6390366,  /*  51  */
        !          1228:          0xD9F76092,  /*  52  */
        !          1229:          0xD393A70B,  /*  53  */
        !          1230:          0x1D31A08A,  /*  54  */
        !          1231:          0x9CD971C9,  /*  55  */
        !          1232:          0x5C1EF445,  /*  56  */
        !          1233:          0x86FAB694,  /*  57  */
        !          1234:          0xFDB44165,  /*  58  */
        !          1235:          0x8EAAFCBE,  /*  59  */
        !          1236:          0x4BCAC6EB,  /*  60  */
        !          1237:          0xFB7A94E5,  /*  61  */
        !          1238:          0x5789D04E,  /*  62  */
        !          1239:          0xFA13CF35,  /*  63  */
        !          1240:          0x236B8DA9,  /*  64  */
        !          1241:          0x4133F000,  /*  65  */
        !          1242:          0x6224261C,  /*  66  */
        !          1243:          0xF412F23B,  /*  67  */
        !          1244:          0xE75E56A4,  /*  68  */
        !          1245:          0x30022116,  /*  69  */
        !          1246:          0xBAF17F1F,  /*  70  */
        !          1247:          0xD09872F9,  /*  71  */
        !          1248:          0xC1A3699C,  /*  72  */
        !          1249:          0xF1E802AA,  /*  73  */
        !          1250:          0xDD145DC,  /*  74  */
        !          1251:          0x4FDCE093,  /*  75  */
        !          1252:          0x8D8412F0,  /*  76  */
        !          1253:          0x6CD0F376,  /*  77  */
        !          1254:          0x3DE6B73D,  /*  78  */
        !          1255:          0x84BA737F,  /*  79  */
        !          1256:          0xB43A30F2,  /*  80  */
        !          1257:          0x44569F69,  /*  81  */
        !          1258:          0xE4EACA,  /*  82  */
        !          1259:          0xB58DE3B0,  /*  83  */
        !          1260:          0x959113C8,  /*  84  */
        !          1261:          0xD62EFEE9,  /*  85  */
        !          1262:          0x90861F83,  /*  86  */
        !          1263:          0xCED69874,  /*  87  */
        !          1264:          0x2F793CEE,  /*  88  */
        !          1265:          0xE8571C30,  /*  89  */
        !          1266:          0x483665D1,  /*  90  */
        !          1267:          0xAB07B031,  /*  91  */
        !          1268:          0x914C844F,  /*  92  */
        !          1269:          0x15BF3BE8,  /*  93  */
        !          1270:          0x2C3F2A9A,  /*  94  */
        !          1271:          0x9EB95FD4,  /*  95  */
        !          1272:          0x92E7472D,  /*  96  */
        !          1273:          0x2297CC5B,  /*  97  */
        !          1274:          0xEE5F2782,  /*  98  */
        !          1275:          0x5377B562,  /*  99  */
        !          1276:          0xDB8EBBCF,  /*  100  */
        !          1277:          0xF961DEDD,  /*  101  */
        !          1278:          0xC59B5C60,  /*  102  */
        !          1279:          0x1BD3910D,  /*  103  */
        !          1280:          0x26D206AD,  /*  104  */
        !          1281:          0xB28514D8,  /*  105  */
        !          1282:          0x5ECF6B52,  /*  106  */
        !          1283:          0x7FEA78BB,  /*  107  */
        !          1284:          0x504879AC,  /*  108  */
        !          1285:          0xED34A884,  /*  109  */
        !          1286:          0x36E51D3C,  /*  110  */
        !          1287:          0x1753741D,  /*  111  */
        !          1288:          0x8C47CAED,  /*  112  */
        !          1289:          0x9D0A40EF,  /*  113  */
        !          1290:          0x3145E221,  /*  114  */
        !          1291:          0xDA27EB70,  /*  115  */
        !          1292:          0xDF730BA3,  /*  116  */
        !          1293:          0x183C8789,  /*  117  */
        !          1294:          0x739AC0A6,  /*  118  */
        !          1295:          0x9A58DFC6,  /*  119  */
        !          1296:          0x54B134C1,  /*  120  */
        !          1297:          0xAC3E242E,  /*  121  */
        !          1298:          0xCC493902,  /*  122  */
        !          1299:          0x7B2DDA99,  /*  123  */
        !          1300:          0x8F15BC01,  /*  124  */
        !          1301:          0x29FD38C7,  /*  125  */
        !          1302:          0x27D5318F,  /*  126  */
        !          1303:          0x604AAFF5,  /*  127  */
        !          1304:          0xF29C6818,  /*  128  */
        !          1305:          0xC38AA2EC,  /*  129  */
        !          1306:          0x1019D4C3,  /*  130  */
        !          1307:          0xA8FB936E,  /*  131  */
        !          1308:          0x20ED7B39,  /*  132  */
        !          1309:          0xB686119,  /*  133  */
        !          1310:          0x89A0906F,  /*  134  */
        !          1311:          0x1CC7829E,  /*  135  */
        !          1312:          0x9952EF4B,  /*  136  */
        !          1313:          0x850E9E8C,  /*  137  */
        !          1314:          0xCD063A90,  /*  138  */
        !          1315:          0x67002F8E,  /*  139  */
        !          1316:          0xCFAC8CB7,  /*  140  */
        !          1317:          0xEAA24B11,  /*  141  */
        !          1318:          0x988B4E6C,  /*  142  */
        !          1319:          0x46F066DF,  /*  143  */
        !          1320:          0xCA7EEC08,  /*  144  */
        !          1321:          0xC7BBA664,  /*  145  */
        !          1322:          0x831D17BD,  /*  146  */
        !          1323:          0x63F575E6,  /*  147  */
        !          1324:          0x9764350E,  /*  148  */
        !          1325:          0x47870D42,  /*  149  */
        !          1326:          0x26CA4A2,  /*  150  */
        !          1327:          0x8167D587,  /*  151  */
        !          1328:          0x61B6ADAB,  /*  152  */
        !          1329:          0xAA6564D2,  /*  153  */
        !          1330:          0x70DA237B,  /*  154  */
        !          1331:          0x25E1C74A,  /*  155  */
        !          1332:          0xA1C901A0,  /*  156  */
        !          1333:          0xEB0A5DA,  /*  157  */
        !          1334:          0x7670F741,  /*  158  */
        !          1335:          0x51C05AEA,  /*  159  */
        !          1336:          0x933DFA32,  /*  160  */
        !          1337:          0x759FF1A,  /*  161  */
        !          1338:          0x56010AB8,  /*  162  */
        !          1339:          0x5FDECB78,  /*  163  */
        !          1340:          0x3F32EDF8,  /*  164  */
        !          1341:          0xAEBEDBB9,  /*  165  */
        !          1342:          0x39F8326D,  /*  166  */
        !          1343:          0xD20858C5,  /*  167  */
        !          1344:          0x9B638BE4,  /*  168  */
        !          1345:          0xA572C80A,  /*  169  */
        !          1346:          0x28E0A19F,  /*  170  */
        !          1347:          0x432099FC,  /*  171  */
        !          1348:          0x3A37C3CD,  /*  172  */
        !          1349:          0xBF95C585,  /*  173  */
        !          1350:          0xB392C12A,  /*  174  */
        !          1351:          0x6AA707D7,  /*  175  */
        !          1352:          0x52F66A61,  /*  176  */
        !          1353:          0x12D483B1,  /*  177  */
        !          1354:          0x96435B5E,  /*  178  */
        !          1355:          0x3E75802B,  /*  179  */
        !          1356:          0x3BA52B33,  /*  180  */
        !          1357:          0xA99F51A5,  /*  181  */
        !          1358:          0xBDA1E157,  /*  182  */
        !          1359:          0x78C2E70C,  /*  183  */
        !          1360:          0xFCAE7CE0,  /*  184  */
        !          1361:          0xD1602267,  /*  185  */
        !          1362:          0x2AFFAC4D,  /*  186  */
        !          1363:          0x4A510947,  /*  187  */
        !          1364:          0xAB2B83A,  /*  188  */
        !          1365:          0x7A04E579,  /*  189  */
        !          1366:          0x340DFD80,  /*  190  */
        !          1367:          0xB916E922,  /*  191  */
        !          1368:          0xE29D5E9B,  /*  192  */
        !          1369:          0xF5624AF4,  /*  193  */
        !          1370:          0x4CA9D9AF,  /*  194  */
        !          1371:          0x6BBD2CFE,  /*  195  */
        !          1372:          0xE3B7F620,  /*  196  */
        !          1373:          0xC2746E07,  /*  197  */
        !          1374:          0x5B42B9B6,  /*  198  */
        !          1375:          0xA06919BC,  /*  199  */
        !          1376:          0xF0F2C40F,  /*  200  */
        !          1377:          0x72217AB5,  /*  201  */
        !          1378:          0x14C19DF3,  /*  202  */
        !          1379:          0xF3802DAE,  /*  203  */
        !          1380:          0xE094BEB4,  /*  204  */
        !          1381:          0xA2101AFF,  /*  205  */
        !          1382:          0x529575D,  /*  206  */
        !          1383:          0x55CDB27C,  /*  207  */
        !          1384:          0xA33BDDB2,  /*  208  */
        !          1385:          0x6528B37D,  /*  209  */
        !          1386:          0x740C05DB,  /*  210  */
        !          1387:          0xE96A62C4,  /*  211  */
        !          1388:          0x40782846,  /*  212  */
        !          1389:          0x6D30D706,  /*  213  */
        !          1390:          0xBBF48E2C,  /*  214  */
        !          1391:          0xBCE2D3DE,  /*  215  */
        !          1392:          0x49E37FA,  /*  216  */
        !          1393:          0x1B5E634,  /*  217  */
        !          1394:          0x2D886D8D,  /*  218  */
        !          1395:          0x7E5A2E7E,  /*  219  */
        !          1396:          0xD7412013,  /*  220  */
        !          1397:          0x6E90F97,  /*  221  */
        !          1398:          0xE45D3EBA,  /*  222  */
        !          1399:          0xB8AD3386,  /*  223  */
        !          1400:          0x13051B25,  /*  224  */
        !          1401:          0xC035354,  /*  225  */
        !          1402:          0x71C89B75,  /*  226  */
        !          1403:          0xC638FBD0,  /*  227  */
        !          1404:          0x197F11A1,  /*  228  */
        !          1405:          0xEF0F08FB,  /*  229  */
        !          1406:          0xF8448651,  /*  230  */
        !          1407:          0x38409563,  /*  231  */
        !          1408:          0x452F4443,  /*  232  */
        !          1409:          0x5D464D55,  /*  233  */
        !          1410:          0x3D8764C,  /*  234  */
        !          1411:          0xB1B8D638,  /*  235  */
        !          1412:          0xA70BBA2F,  /*  236  */
        !          1413:          0x94B3D210,  /*  237  */
        !          1414:          0xEB6692A7,  /*  238  */
        !          1415:          0xD409C2D9,  /*  239  */
        !          1416:          0x68838526,  /*  240  */
        !          1417:          0xA6DB8A15,  /*  241  */
        !          1418:          0x751F6C98,  /*  242  */
        !          1419:          0xDE769A88,  /*  243  */
        !          1420:          0xC9EE4668,  /*  244  */
        !          1421:          0x1A82A373,  /*  245  */
        !          1422:          0x896AA49,  /*  246  */
        !          1423:          0x42233681,  /*  247  */
        !          1424:          0xF62C55CB,  /*  248  */
        !          1425:          0x9F1C5404,  /*  249  */
        !          1426:          0xF74FB15C,  /*  250  */
        !          1427:          0xC06E4312,  /*  251  */
        !          1428:          0x6FFE5D72,  /*  252  */
        !          1429:          0x8AA8678B,  /*  253  */
        !          1430:          0x337CD129,  /*  254  */
        !          1431:          0x8211CEFD  /*  255  */
        !          1432:          /*  End of S Box 0  */ },
        !          1433:        
        !          1434:        
        !          1435:        {
        !          1436:        /*  Start of S Box 1 */
        !          1437:        
        !          1438:        0x74A1D09, /*  0  */
        !          1439:        0x52A10E5A, /*  1  */
        !          1440:        0x9275A3F8, /*  2  */
        !          1441:        0x4B82506C, /*  3  */
        !          1442:        0x37DF7E1B, /*  4  */
        !          1443:        0x4C78B3C5, /*  5  */
        !          1444:        0xCEFAB1DA, /*  6  */
        !          1445:        0xF472267E, /*  7  */
        !          1446:        0xB63045F6, /*  8  */
        !          1447:        0xD66A1FC0, /*  9  */
        !          1448:        0x400298E3, /*  10  */
        !          1449:        0x27E60C94, /*  11  */
        !          1450:        0x87D2F1B8, /*  12  */
        !          1451:        0xDF9E56CC, /*  13  */
        !          1452:        0x45CD1803, /*  14  */
        !          1453:        0x1D35E098, /*  15  */
        !          1454:        0xCCE7C736, /*  16  */
        !          1455:        0x3483BF1, /*  17  */
        !          1456:        0x1F7307D7, /*  18  */
        !          1457:        0xC6E8F948, /*  19  */
        !          1458:        0xE613C111, /*  20  */
        !          1459:        0x3955C6FF, /*  21  */
        !          1460:        0x1170ED7C, /*  22  */
        !          1461:        0x8E95DA41, /*  23  */
        !          1462:        0x99C31BF4, /*  24  */
        !          1463:        0xA4DA8021, /*  25  */
        !          1464:        0x7B5F94FB, /*  26  */
        !          1465:        0xDD0DA51F, /*  27  */
        !          1466:        0x6562AA77, /*  28  */
        !          1467:        0x556BCB23, /*  29  */
        !          1468:        0xDB1BACC6, /*  30  */
        !          1469:        0x798040B9, /*  31  */
        !          1470:        0xBFE5378F, /*  32  */
        !          1471:        0x731D55E6, /*  33  */
        !          1472:        0xDAA5BFEE, /*  34  */
        !          1473:        0x389BBC60, /*  35  */
        !          1474:        0x1B33FBA4, /*  36  */
        !          1475:        0x9C567204, /*  37  */
        !          1476:        0x36C26C68, /*  38  */
        !          1477:        0x77EE9D69, /*  39  */
        !          1478:        0x8AEB3E88, /*  40  */
        !          1479:        0x2D50B5CE, /*  41  */
        !          1480:        0x9579E790, /*  42  */
        !          1481:        0x42B13CFC, /*  43  */
        !          1482:        0x33FBD32B, /*  44  */
        !          1483:        0xEE0503A7, /*  45  */
        !          1484:        0xB5862824, /*  46  */
        !          1485:        0x15E41EAD, /*  47  */
        !          1486:        0xC8412EF7, /*  48  */
        !          1487:        0x9D441275, /*  49  */
        !          1488:        0x2FCEC582, /*  50  */
        !          1489:        0x5FF483B7, /*  51  */
        !          1490:        0x8F3931DF, /*  52  */
        !          1491:        0x2E5D2A7B, /*  53  */
        !          1492:        0x49467BF9, /*  54  */
        !          1493:        0x653DEA9, /*  55  */
        !          1494:        0x2684CE35, /*  56  */
        !          1495:        0x7E655E5C, /*  57  */
        !          1496:        0xF12771D8, /*  58  */
        !          1497:        0xBB15CC67, /*  59  */
        !          1498:        0xAB097CA1, /*  60  */
        !          1499:        0x983DCF52, /*  61  */
        !          1500:        0x10DDF026, /*  62  */
        !          1501:        0x21267F57, /*  63  */
        !          1502:        0x2C58F6B4, /*  64  */
        !          1503:        0x31043265, /*  65  */
        !          1504:        0xBAB8C01, /*  66  */
        !          1505:        0xD5492099, /*  67  */
        !          1506:        0xACAAE619, /*  68  */
        !          1507:        0x944CE54A, /*  69  */
        !          1508:        0xF2D13D39, /*  70  */
        !          1509:        0xADD3FC32, /*  71  */
        !          1510:        0xCDA08A40, /*  72  */
        !          1511:        0xE2B0D451, /*  73  */
        !          1512:        0x9EFE08AE, /*  74  */
        !          1513:        0xB9D50FD2, /*  75  */
        !          1514:        0xEA5CD7FD, /*  76  */
        !          1515:        0xC9A749DD, /*  77  */
        !          1516:        0x13EA2253, /*  78  */
        !          1517:        0x832DEBAA, /*  79  */
        !          1518:        0x24BE640F, /*  80  */
        !          1519:        0xE03E926A, /*  81  */
        !          1520:        0x29E01CDE, /*  82  */
        !          1521:        0x8BF59F18, /*  83  */
        !          1522:        0xF9D00B6, /*  84  */
        !          1523:        0xE1238B46, /*  85  */
        !          1524:        0x1E7D8E34, /*  86  */
        !          1525:        0x93619ADB, /*  87  */
        !          1526:        0x76B32F9F, /*  88  */
        !          1527:        0xBD972CEC, /*  89  */
        !          1528:        0xE31FA976, /*  90  */
        !          1529:        0xA68FBB10, /*  91  */
        !          1530:        0xFB3BA49D, /*  92  */
        !          1531:        0x8587C41D, /*  93  */
        !          1532:        0xA5ADD1D0, /*  94  */
        !          1533:        0xF3CF84BF, /*  95  */
        !          1534:        0xD4E11150, /*  96  */
        !          1535:        0xD9FFA6BC, /*  97  */
        !          1536:        0xC3F6018C, /*  98  */
        !          1537:        0xAEF10572, /*  99  */
        !          1538:        0x74A64B2F, /*  100  */
        !          1539:        0xE7DC9559, /*  101  */
        !          1540:        0x2AAE35D5, /*  102  */
        !          1541:        0x5B6F587F, /*  103  */
        !          1542:        0xA9E353FE, /*  104  */
        !          1543:        0xCA4FB674, /*  105  */
        !          1544:        0x4BA24A8, /*  106  */
        !          1545:        0xE5C6875F, /*  107  */
        !          1546:        0xDCBC6266, /*  108  */
        !          1547:        0x6BC5C03F, /*  109  */
        !          1548:        0x661EEF02, /*  110  */
        !          1549:        0xED740BAB, /*  111  */
        !          1550:        0x58E34E4, /*  112  */
        !          1551:        0xB7E946CF, /*  113  */
        !          1552:        0x88698125, /*  114  */
        !          1553:        0x72EC48ED, /*  115  */
        !          1554:        0xB11073A3, /*  116  */
        !          1555:        0xA13485EB, /*  117  */
        !          1556:        0xA2A2429C, /*  118  */
        !          1557:        0xFA407547, /*  119  */
        !          1558:        0x50B76713, /*  120  */
        !          1559:        0x5418C37D, /*  121  */
        !          1560:        0x96192DA5, /*  122  */
        !          1561:        0x170BB04B, /*  123  */
        !          1562:        0x518A021E, /*  124  */
        !          1563:        0xB0AC13D1, /*  125  */
        !          1564:        0x963FA2A, /*  126  */
        !          1565:        0x4A6E10E1, /*  127  */
        !          1566:        0x58472BDC, /*  128  */
        !          1567:        0xF7F8D962, /*  129  */
        !          1568:        0x979139EA, /*  130  */
        !          1569:        0x8D856538, /*  131  */
        !          1570:        0xC0997042, /*  132  */
        !          1571:        0x48324D7A, /*  133  */
        !          1572:        0x447623CB, /*  134  */
        !          1573:        0x8CBBE364, /*  135  */
        !          1574:        0x6E0C6B0E, /*  136  */
        !          1575:        0xD36D63B0, /*  137  */
        !          1576:        0x3F244C84, /*  138  */
        !          1577:        0x3542C971, /*  139  */
        !          1578:        0x2B228DC1, /*  140  */
        !          1579:        0xCB0325BB, /*  141  */
        !          1580:        0xF8C0D6E9, /*  142  */
        !          1581:        0xDE11066B, /*  143  */
        !          1582:        0xA8649327, /*  144  */
        !          1583:        0xFC31F83E, /*  145  */
        !          1584:        0x7DD80406, /*  146  */
        !          1585:        0xF916DD61, /*  147  */
        !          1586:        0xD89F79D3, /*  148  */
        !          1587:        0x615144C2, /*  149  */
        !          1588:        0xEBB45D31, /*  150  */
        !          1589:        0x28002958, /*  151  */
        !          1590:        0x56890A37, /*  152  */
        !          1591:        0xF05B3808, /*  153  */
        !          1592:        0x123AE844, /*  154  */
        !          1593:        0x86839E16, /*  155  */
        !          1594:        0x914B0D83, /*  156  */
        !          1595:        0xC506B43C, /*  157  */
        !          1596:        0xCF3CBA5E, /*  158  */
        !          1597:        0x7C60F5C9, /*  159  */
        !          1598:        0x22DEB2A0, /*  160  */
        !          1599:        0x5D9C2715, /*  161  */
        !          1600:        0xC77BA0EF, /*  162  */
        !          1601:        0x4F45360B, /*  163  */
        !          1602:        0xC1017D8B, /*  164  */
        !          1603:        0xE45ADC29, /*  165  */
        !          1604:        0xA759909B, /*  166  */
        !          1605:        0x412CD293, /*  167  */
        !          1606:        0xD7D796B1, /*  168  */
        !          1607:        0xC8FF30, /*  169  */
        !          1608:        0x23A34A80, /*  170  */
        !          1609:        0x4EC15C91, /*  171  */
        !          1610:        0x714E78B5, /*  172  */
        !          1611:        0x47B9E42E, /*  173  */
        !          1612:        0x78F3EA4D, /*  174  */
        !          1613:        0x7F078F5B, /*  175  */
        !          1614:        0x346C593A, /*  176  */
        !          1615:        0xA3A87A1A, /*  177  */
        !          1616:        0x9BCBFE12, /*  178  */
        !          1617:        0x3D439963, /*  179  */
        !          1618:        0xB2EF6D8E, /*  180  */
        !          1619:        0xB8D46028, /*  181  */
        !          1620:        0x6C2FD5CA, /*  182  */
        !          1621:        0x62675256, /*  183  */
        !          1622:        0x1F2A2F3, /*  184  */
        !          1623:        0xBC96AE0A, /*  185  */
        !          1624:        0x709A8920, /*  186  */
        !          1625:        0xB4146E87, /*  187  */
        !          1626:        0x6308B9E2, /*  188  */
        !          1627:        0x64BDA7BA, /*  189  */
        !          1628:        0xAFED6892, /*  190  */
        !          1629:        0x6037F2A2, /*  191  */
        !          1630:        0xF52969E0, /*  192  */
        !          1631:        0xADB43A6, /*  193  */
        !          1632:        0x82811400, /*  194  */
        !          1633:        0x90D0BDF0, /*  195  */
        !          1634:        0x19C9549E, /*  196  */
        !          1635:        0x203F6A73, /*  197  */
        !          1636:        0x1ACCAF4F, /*  198  */
        !          1637:        0x89714E6D, /*  199  */
        !          1638:        0x164D4705, /*  200  */
        !          1639:        0x67665F07, /*  201  */
        !          1640:        0xEC206170, /*  202  */
        !          1641:        0xC2182B2, /*  203  */
        !          1642:        0xA02B9C81, /*  204  */
        !          1643:        0x53289722, /*  205  */
        !          1644:        0xF6A97686, /*  206  */
        !          1645:        0x140E4179, /*  207  */
        !          1646:        0x9F778849, /*  208  */
        !          1647:        0x9A88E15D, /*  209  */
        !          1648:        0x25CADB54, /*  210  */
        !          1649:        0xD157F36F, /*  211  */
        !          1650:        0x32A421C3, /*  212  */
        !          1651:        0xB368E98A, /*  213  */
        !          1652:        0x5A92CD0D, /*  214  */
        !          1653:        0x757AA8D4, /*  215  */
        !          1654:        0xC20AC278, /*  216  */
        !          1655:        0x8B551C7, /*  217  */
        !          1656:        0x849491E8, /*  218  */
        !          1657:        0x4DC75AD6, /*  219  */
        !          1658:        0x697C33BE, /*  220  */
        !          1659:        0xBAF0CA33, /*  221  */
        !          1660:        0x46125B4E, /*  222  */
        !          1661:        0x59D677B3, /*  223  */
        !          1662:        0x30D9C8F2, /*  224  */
        !          1663:        0xD0AF860C, /*  225  */
        !          1664:        0x1C7FD0FA, /*  226  */
        !          1665:        0xFE0FF72C, /*  227  */
        !          1666:        0x5C8D6F43, /*  228  */
        !          1667:        0x57FDEC3B, /*  229  */
        !          1668:        0x6AB6AD97, /*  230  */
        !          1669:        0xD22ADF89, /*  231  */
        !          1670:        0x18171785, /*  232  */
        !          1671:        0x2BFE22D, /*  233  */
        !          1672:        0x6DB80917, /*  234  */
        !          1673:        0x80B216AF, /*  235  */
        !          1674:        0xE85E4F9A, /*  236  */
        !          1675:        0x7A1C306E, /*  237  */
        !          1676:        0x6FC49BF5, /*  238  */
        !          1677:        0x3AF7A11C, /*  239  */
        !          1678:        0x81E215E7, /*  240  */
        !          1679:        0x68363FCD, /*  241  */
        !          1680:        0x3E9357C8, /*  242  */
        !          1681:        0xEF52FD55, /*  243  */
        !          1682:        0x3B8BAB4C, /*  244  */
        !          1683:        0x3C8CF495, /*  245  */
        !          1684:        0xBEFCEEBD, /*  246  */
        !          1685:        0xFD25B714, /*  247  */
        !          1686:        0xC498D83D, /*  248  */
        !          1687:        0xD2E1A8D, /*  249  */
        !          1688:        0xE9F966AC, /*  250  */
        !          1689:        0xE387445, /*  251  */
        !          1690:        0x435419E5, /*  252  */
        !          1691:        0x5E7EBEC4, /*  253  */
        !          1692:        0xAA90B8D9, /*  254  */
        !          1693:        0xFF1A3A96}, /*  255  */
        !          1694:        
        !          1695:        {
        !          1696:        /*  Start of S-box 2 */
        !          1697:        
        !          1698:        0x4A8FE4E3, /*  0  */
        !          1699:        0xF27D99CD, /*  1  */
        !          1700:        0xD04A40CA, /*  2  */
        !          1701:        0xCB5FF194, /*  3  */
        !          1702:        0x3668275A, /*  4  */
        !          1703:        0xFF4816BE, /*  5  */
        !          1704:        0xA78B394C, /*  6  */
        !          1705:        0x4C6BE9DB, /*  7  */
        !          1706:        0x4EEC38D2, /*  8  */
        !          1707:        0x4296EC80, /*  9  */
        !          1708:        0xCDCE96F8, /*  10  */
        !          1709:        0x888C2F38, /*  11  */
        !          1710:        0xE75508F5, /*  12  */
        !          1711:        0x7B916414, /*  13  */
        !          1712:        0x60AA14A, /*  14  */
        !          1713:        0xA214F327, /*  15  */
        !          1714:        0xBE608DAF, /*  16  */
        !          1715:        0x1EBBDEC2, /*  17  */
        !          1716:        0x61F98CE9, /*  18  */
        !          1717:        0xE92156FE, /*  19  */
        !          1718:        0x4F22D7A3, /*  20  */
        !          1719:        0x3F76A8D9, /*  21  */
        !          1720:        0x559A4B33, /*  22  */
        !          1721:        0x38AD2959, /*  23  */
        !          1722:        0xF3F17E9E, /*  24  */
        !          1723:        0x85E1BA91, /*  25  */
        !          1724:        0xE5EBA6FB, /*  26  */
        !          1725:        0x73DCD48C, /*  27  */
        !          1726:        0xF5C3FF78, /*  28  */
        !          1727:        0x481B6058, /*  29  */
        !          1728:        0x8A3297F7, /*  30  */
        !          1729:        0x8F1F3BF4, /*  31  */
        !          1730:        0x93785AB2, /*  32  */
        !          1731:        0x477A4A5B, /*  33  */
        !          1732:        0x6334EB5D, /*  34  */
        !          1733:        0x6D251B2E, /*  35  */
        !          1734:        0x74A9102D, /*  36  */
        !          1735:        0x7E38FFA, /*  37  */
        !          1736:        0x915C9C62, /*  38  */
        !          1737:        0xCCC275EA, /*  39  */
        !          1738:        0x6BE273EC, /*  40  */
        !          1739:        0x3EBDDD70, /*  41  */
        !          1740:        0xD895796C, /*  42  */
        !          1741:        0xDC54A91B, /*  43  */
        !          1742:        0xC9AFDF81, /*  44  */
        !          1743:        0x23633F73, /*  45  */
        !          1744:        0x275119B4, /*  46  */
        !          1745:        0xB19F6B67, /*  47  */
        !          1746:        0x50756E22, /*  48  */
        !          1747:        0x2BB152E2, /*  49  */
        !          1748:        0x76EA46A2, /*  50  */
        !          1749:        0xA353E232, /*  51  */
        !          1750:        0x2F596AD6, /*  52  */
        !          1751:        0xB1EDB0B, /*  53  */
        !          1752:        0x2D3D9A4, /*  54  */
        !          1753:        0x78B47843, /*  55  */
        !          1754:        0x64893E90, /*  56  */
        !          1755:        0x40F0CAAD, /*  57  */
        !          1756:        0xF68D3AD7, /*  58  */
        !          1757:        0x46FD1707, /*  59  */
        !          1758:        0x1C9C67EF, /*  60  */
        !          1759:        0xB5E086DE, /*  61  */
        !          1760:        0x96EE6CA6, /*  62  */
        !          1761:        0x9AA34774, /*  63  */
        !          1762:        0x1BA4F48A, /*  64  */
        !          1763:        0x8D01ABFD, /*  65  */
        !          1764:        0x183EE1F6, /*  66  */
        !          1765:        0x5FF8AA7A, /*  67  */
        !          1766:        0x17E4FAAE, /*  68  */
        !          1767:        0x303983B0, /*  69  */
        !          1768:        0x6C08668B, /*  70  */
        !          1769:        0xD4AC4382, /*  71  */
        !          1770:        0xE6C5849F, /*  72  */
        !          1771:        0x92FEFB53, /*  73  */
        !          1772:        0xC1CAC4CE, /*  74  */
        !          1773:        0x43501388, /*  75  */
        !          1774:        0x441118CF, /*  76  */
        !          1775:        0xEC4FB308, /*  77  */
        !          1776:        0x53A08E86, /*  78  */
        !          1777:        0x9E0FE0C5, /*  79  */
        !          1778:        0xF91C1525, /*  80  */
        !          1779:        0xAC45BE05, /*  81  */
        !          1780:        0xD7987CB5, /*  82  */
        !          1781:        0x49BA1487, /*  83  */
        !          1782:        0x57938940, /*  84  */
        !          1783:        0xD5877648, /*  85  */
        !          1784:        0xA958727F, /*  86  */
        !          1785:        0x58DFE3C3, /*  87  */
        !          1786:        0xF436CF77, /*  88  */
        !          1787:        0x399E4D11, /*  89  */
        !          1788:        0xF0A5BFA9, /*  90  */
        !          1789:        0xEF61A33B, /*  91  */
        !          1790:        0xA64CAC60, /*  92  */
        !          1791:        0x4A8D0BA, /*  93  */
        !          1792:        0x30DD572, /*  94  */
        !          1793:        0xB83D320F, /*  95  */
        !          1794:        0xCAB23045, /*  96  */
        !          1795:        0xE366F2F0, /*  97  */
        !          1796:        0x815D008D, /*  98  */
        !          1797:        0xC897A43A, /*  99  */
        !          1798:        0x1D352DF3, /*  100  */
        !          1799:        0xB9CC571D, /*  101  */
        !          1800:        0x8BF38744, /*  102  */
        !          1801:        0x72209092, /*  103  */
        !          1802:        0xEBA124EB, /*  104  */
        !          1803:        0xFB99CE5E, /*  105  */
        !          1804:        0x3BB94293, /*  106  */
        !          1805:        0x28DA549C, /*  107  */
        !          1806:        0xAAB8A228, /*  108  */
        !          1807:        0xA4197785, /*  109  */
        !          1808:        0x33C70296, /*  110  */
        !          1809:        0x25F6259B, /*  111  */
        !          1810:        0x5C85DA21, /*  112  */
        !          1811:        0xDF15BDEE, /*  113  */
        !          1812:        0x15B7C7E8, /*  114  */
        !          1813:        0xE2ABEF75, /*  115  */
        !          1814:        0xFCC19BC1, /*  116  */
        !          1815:        0x417FF868, /*  117  */
        !          1816:        0x14884434, /*  118  */
        !          1817:        0x62825179, /*  119  */
        !          1818:        0xC6D5C11C, /*  120  */
        !          1819:        0xE4705DC, /*  121  */
        !          1820:        0x22700DE0, /*  122  */
        !          1821:        0xD3D2AF18, /*  123  */
        !          1822:        0x9BE822A0, /*  124  */
        !          1823:        0x35B669F1, /*  125  */
        !          1824:        0xC42BB55C, /*  126  */
        !          1825:        0xA801252, /*  127  */
        !          1826:        0x115BF0FC, /*  128  */
        !          1827:        0x3CD7D856, /*  129  */
        !          1828:        0xB43F5F9D, /*  130  */
        !          1829:        0xC2306516, /*  131  */
        !          1830:        0xA1231C47, /*  132  */
        !          1831:        0xF149207E, /*  133  */
        !          1832:        0x5209A795, /*  134  */
        !          1833:        0x34B3CCD8, /*  135  */
        !          1834:        0x67AEFE54, /*  136  */
        !          1835:        0x2C83924E, /*  137  */
        !          1836:        0x6662CBAC, /*  138  */
        !          1837:        0x5EEDD161, /*  139  */
        !          1838:        0x84E681AA, /*  140  */
        !          1839:        0x5D57D26B, /*  141  */
        !          1840:        0xFA465CC4, /*  142  */
        !          1841:        0x7E3AC3A8, /*  143  */
        !          1842:        0xBF7C0CC6, /*  144  */
        !          1843:        0xE18A9AA1, /*  145  */
        !          1844:        0xC32F0A6F, /*  146  */
        !          1845:        0xB22CC00D, /*  147  */
        !          1846:        0x3D280369, /*  148  */
        !          1847:        0x994E554F, /*  149  */
        !          1848:        0x68F480D3, /*  150  */
        !          1849:        0xADCFF5E6, /*  151  */
        !          1850:        0x3A8EB265, /*  152  */
        !          1851:        0x83269831, /*  153  */
        !          1852:        0xBD568A09, /*  154  */
        !          1853:        0x4BC8AE6A, /*  155  */
        !          1854:        0x69F56D2B, /*  156  */
        !          1855:        0xF17EAC8, /*  157  */
        !          1856:        0x772EB6C7, /*  158  */
        !          1857:        0x9F41343C, /*  159  */
        !          1858:        0xAB1D0742, /*  160  */
        !          1859:        0x826A6F50, /*  161  */
        !          1860:        0xFEA2097C, /*  162  */
        !          1861:        0x1912C283, /*  163  */
        !          1862:        0xCE185899, /*  164  */
        !          1863:        0xE4444839, /*  165  */
        !          1864:        0x2D8635D5, /*  166  */
        !          1865:        0x65D0B1FF, /*  167  */
        !          1866:        0x865A7F17, /*  168  */
        !          1867:        0x326D9FB1, /*  169  */
        !          1868:        0x59E52820, /*  170  */
        !          1869:        0x90ADE1, /*  171  */
        !          1870:        0x753C7149, /*  172  */
        !          1871:        0x9DDD8B98, /*  173  */
        !          1872:        0xA5A691DA, /*  174  */
        !          1873:        0xD0382BB, /*  175  */
        !          1874:        0x8904C930, /*  176  */
        !          1875:        0x86CB000, /*  177  */
        !          1876:        0x6E69D3BD, /*  178  */
        !          1877:        0x24D4E7A7, /*  179  */
        !          1878:        0x5244FD0, /*  180  */
        !          1879:        0x101A5E0C, /*  181  */
        !          1880:        0x6A947DCB, /*  182  */
        !          1881:        0xE840F77B, /*  183  */
        !          1882:        0x7D0C5003, /*  184  */
        !          1883:        0x7C370F1F, /*  185  */
        !          1884:        0x805245ED, /*  186  */
        !          1885:        0xE05E3D3F, /*  187  */
        !          1886:        0x7906880E, /*  188  */
        !          1887:        0xBABFCD35, /*  189  */
        !          1888:        0x1A7EC697, /*  190  */
        !          1889:        0x8C052324, /*  191  */
        !          1890:        0xC6EC8DF, /*  192  */
        !          1891:        0xD129A589, /*  193  */
        !          1892:        0xC7A75B02, /*  194  */
        !          1893:        0x12D81DE7, /*  195  */
        !          1894:        0xD9BE2A66, /*  196  */
        !          1895:        0x1F4263AB, /*  197  */
        !          1896:        0xDE73FDB6, /*  198  */
        !          1897:        0x2A00680A, /*  199  */
        !          1898:        0x56649E36, /*  200  */
        !          1899:        0x3133ED55, /*  201  */
        !          1900:        0x90FA0BF2, /*  202  */
        !          1901:        0x2910A02A, /*  203  */
        !          1902:        0x949D9D46, /*  204  */
        !          1903:        0xA0D1DCDD, /*  205  */
        !          1904:        0xCFC9B7D4, /*  206  */
        !          1905:        0xD2677BE5, /*  207  */
        !          1906:        0x95CB36B3, /*  208  */
        !          1907:        0x13CD9410, /*  209  */
        !          1908:        0xDBF73313, /*  210  */
        !          1909:        0xB7C6E8C0, /*  211  */
        !          1910:        0xF781414B, /*  212  */
        !          1911:        0x510B016D, /*  213  */
        !          1912:        0xB0DE1157, /*  214  */
        !          1913:        0xD6B0F62C, /*  215  */
        !          1914:        0xBB074ECC, /*  216  */
        !          1915:        0x7F1395B7, /*  217  */
        !          1916:        0xEE792CF9, /*  218  */
        !          1917:        0xEA6FD63E, /*  219  */
        !          1918:        0x5BD6938E, /*  220  */
        !          1919:        0xAF02FC64, /*  221  */
        !          1920:        0xDAB57AB8, /*  222  */
        !          1921:        0x8EDB3784, /*  223  */
        !          1922:        0x8716318F, /*  224  */
        !          1923:        0x164D1A01, /*  225  */
        !          1924:        0x26F26141, /*  226  */
        !          1925:        0xB372E6B9, /*  227  */
        !          1926:        0xF8FC2B06, /*  228  */
        !          1927:        0x7AC00E04, /*  229  */
        !          1928:        0x3727B89A, /*  230  */
        !          1929:        0x97E9BCA5, /*  231  */
        !          1930:        0x9C2A742F, /*  232  */
        !          1931:        0xBC3B1F7D, /*  233  */
        !          1932:        0x7165B471, /*  234  */
        !          1933:        0x609B4C29, /*  235  */
        !          1934:        0x20925351, /*  236  */
        !          1935:        0x5AE72112, /*  237  */
        !          1936:        0x454BE5D1, /*  238  */
        !          1937:        0xC0FFB95F, /*  239  */
        !          1938:        0xDD0EF919, /*  240  */
        !          1939:        0x6F2D70C9, /*  241  */
        !          1940:        0x974C5BF, /*  242  */
        !          1941:        0x98AA6263, /*  243  */
        !          1942:        0x1D91E4D, /*  244  */
        !          1943:        0x2184BB6E, /*  245  */
        !          1944:        0x70C43C1E, /*  246  */
        !          1945:        0x4D435915, /*  247  */
        !          1946:        0xAE7B8523, /*  248  */
        !          1947:        0xB6FB06BC, /*  249  */
        !          1948:        0x5431EE76, /*  250  */
        !          1949:        0xFDBC5D26, /*  251  */
        !          1950:        0xED77493D, /*  252  */
        !          1951:        0xC5712EE4, /*  253  */
        !          1952:        0xA8380437, /*  254  */
        !          1953:        0x2EEF261A}, /*  255  */
        !          1954:        
        !          1955:        {
        !          1956:        /*  Start of S Box 3 */
        !          1957:        
        !          1958:        0x5A79392B, /*  0  */
        !          1959:        0xB8AF32C2, /*  1  */
        !          1960:        0x41F7720A, /*  2  */
        !          1961:        0x833A61EC, /*  3  */
        !          1962:        0x13DFEDAC, /*  4  */
        !          1963:        0xC4990BC4, /*  5  */
        !          1964:        0xDC0F54BC, /*  6  */
        !          1965:        0xFEDD5E88, /*  7  */
        !          1966:        0x80DA1881, /*  8  */
        !          1967:        0x4DEA1AFD, /*  9  */
        !          1968:        0xFD402CC6, /*  10  */
        !          1969:        0xAE67CC7A, /*  11  */
        !          1970:        0xC5238525, /*  12  */
        !          1971:        0x8EA01254, /*  13  */
        !          1972:        0xB56B9BD5, /*  14  */
        !          1973:        0x862FBD6D, /*  15  */
        !          1974:        0xAC8575D3, /*  16  */
        !          1975:        0x6FBA3714, /*  17  */
        !          1976:        0xDA7EBF46, /*  18  */
        !          1977:        0x59CD5238, /*  19  */
        !          1978:        0x8AC9DBFE, /*  20  */
        !          1979:        0x353729FC, /*  21  */
        !          1980:        0xE497D7F2, /*  22  */
        !          1981:        0xC3AB84E0, /*  23  */
        !          1982:        0xF05A114B, /*  24  */
        !          1983:        0x7B887A75, /*  25  */
        !          1984:        0xEDC603DD, /*  26  */
        !          1985:        0x5E6FE680, /*  27  */
        !          1986:        0x2C84B399, /*  28  */
        !          1987:        0x884EB1DA, /*  29  */
        !          1988:        0x1CB8C8BF, /*  30  */
        !          1989:        0xAA51098A, /*  31  */
        !          1990:        0xC862231C, /*  32  */
        !          1991:        0x8BAC2221, /*  33  */
        !          1992:        0x21B387E5, /*  34  */
        !          1993:        0x208A430D, /*  35  */
        !          1994:        0x2A3F0F8B, /*  36  */
        !          1995:        0xA5FF9CD2, /*  37  */
        !          1996:        0x6012A2EA, /*  38  */
        !          1997:        0x147A9EE7, /*  39  */
        !          1998:        0xF62A501D, /*  40  */
        !          1999:        0xB4B2E51A, /*  41  */
        !          2000:        0x3EF3484C, /*  42  */
        !          2001:        0xC0253C59, /*  43  */
        !          2002:        0x2B82B536, /*  44  */
        !          2003:        0xAA9696B, /*  45  */
        !          2004:        0xBE0C109B, /*  46  */
        !          2005:        0xC70B7929, /*  47  */
        !          2006:        0xCE3E8A19, /*  48  */
        !          2007:        0x2F66950E, /*  49  */
        !          2008:        0x459F1C2C, /*  50  */
        !          2009:        0xE68FB93D, /*  51  */
        !          2010:        0xA3C3FF3E, /*  52  */
        !          2011:        0x62B45C62, /*  53  */
        !          2012:        0x300991CB, /*  54  */
        !          2013:        0x1914C57, /*  55  */
        !          2014:        0x7F7BC06A, /*  56  */
        !          2015:        0x182831F5, /*  57  */
        !          2016:        0xE7B74BCA, /*  58  */
        !          2017:        0xFA50F6D0, /*  59  */
        !          2018:        0x523CAA61, /*  60  */
        !          2019:        0xE3A7CF05, /*  61  */
        !          2020:        0xE9E41311, /*  62  */
        !          2021:        0x280A21D1, /*  63  */
        !          2022:        0x6A4297E1, /*  64  */
        !          2023:        0xF24DC67E, /*  65  */
        !          2024:        0xFC3189E6, /*  66  */
        !          2025:        0xB72BF34F, /*  67  */
        !          2026:        0x4B1E67AF, /*  68  */
        !          2027:        0x543402CE, /*  69  */
        !          2028:        0x79A59867, /*  70  */
        !          2029:        0x648E02A, /*  71  */
        !          2030:        0xA3AC17, /*  72  */
        !          2031:        0xC6208D35, /*  73  */
        !          2032:        0x6E7F5F76, /*  74  */
        !          2033:        0xA45BB4BE, /*  75  */
        !          2034:        0xF168FA63, /*  76  */
        !          2035:        0x3F4125F3, /*  77  */
        !          2036:        0xF311406F, /*  78  */
        !          2037:        0x2706565, /*  79  */
        !          2038:        0xBFE58022, /*  80  */
        !          2039:        0xCFCFDD9, /*  81  */
        !          2040:        0x735A7F7, /*  82  */
        !          2041:        0x8F049092, /*  83  */
        !          2042:        0xD98EDC27, /*  84  */
        !          2043:        0xF5C5D55C, /*  85  */
        !          2044:        0xE0F201DB, /*  86  */
        !          2045:        0xDCAFC9A, /*  87  */
        !          2046:        0x7727FB79, /*  88  */
        !          2047:        0xAF43ABF4, /*  89  */
        !          2048:        0x26E938C1, /*  90  */
        !          2049:        0x401B26A6, /*  91  */
        !          2050:        0x900720FA, /*  92  */
        !          2051:        0x2752D97B, /*  93  */
        !          2052:        0xCFF1D1B3, /*  94  */
        !          2053:        0xA9D9E424, /*  95  */
        !          2054:        0x42DB99AB, /*  96  */
        !          2055:        0x6CF8BE5F, /*  97  */
        !          2056:        0xE82CEBE3, /*  98  */
        !          2057:        0x3AFB733B, /*  99  */
        !          2058:        0x6B734EB6, /*  100  */
        !          2059:        0x1036414A, /*  101  */
        !          2060:        0x975F667C, /*  102  */
        !          2061:        0x49D6377, /*  103  */
        !          2062:        0xBA587C60, /*  104  */
        !          2063:        0xB1D10483, /*  105  */
        !          2064:        0xDE1AEFCC, /*  106  */
        !          2065:        0x1129D055, /*  107  */
        !          2066:        0x72051E91, /*  108  */
        !          2067:        0x6946D623, /*  109  */
        !          2068:        0xF9E86EA7, /*  110  */
        !          2069:        0x48768C00, /*  111  */
        !          2070:        0xB0166C93, /*  112  */
        !          2071:        0x9956BBF0, /*  113  */
        !          2072:        0x1F1F6D84, /*  114  */
        !          2073:        0xFB15E18E, /*  115  */
        !          2074:        0x33B495D, /*  116  */
        !          2075:        0x56E3362E, /*  117  */
        !          2076:        0x4F44C53C, /*  118  */
        !          2077:        0x747CBA51, /*  119  */
        !          2078:        0x89D37872, /*  120  */
        !          2079:        0x5D9C331B, /*  121  */
        !          2080:        0xD2EF9FA8, /*  122  */
        !          2081:        0x254917F8, /*  123  */
        !          2082:        0x1B106F47, /*  124  */
        !          2083:        0x37D75553, /*  125  */
        !          2084:        0xB3F053B0, /*  126  */
        !          2085:        0x7DCCD8EF, /*  127  */
        !          2086:        0xD30EB802, /*  128  */
        !          2087:        0x5889F42D, /*  129  */
        !          2088:        0x610206D7, /*  130  */
        !          2089:        0x1A7D34A1, /*  131  */
        !          2090:        0x92D87DD8, /*  132  */
        !          2091:        0xE5F4A315, /*  133  */
        !          2092:        0xD1CF0E71, /*  134  */
        !          2093:        0xB22DFE45, /*  135  */
        !          2094:        0xB901E8EB, /*  136  */
        !          2095:        0xFC0CE5E, /*  137  */
        !          2096:        0x2EFA60C9, /*  138  */
        !          2097:        0x2DE74290, /*  139  */
        !          2098:        0x36D0C906, /*  140  */
        !          2099:        0x381C70E4, /*  141  */
        !          2100:        0x4C6DA5B5, /*  142  */
        !          2101:        0x3D81A682, /*  143  */
        !          2102:        0x7E381F34, /*  144  */
        !          2103:        0x396C4F52, /*  145  */
        !          2104:        0x95AD5901, /*  146  */
        !          2105:        0x1DB50C5A, /*  147  */
        !          2106:        0x29982E9E, /*  148  */
        !          2107:        0x1557689F, /*  149  */
        !          2108:        0x3471EE42, /*  150  */
        !          2109:        0xD7E2F7C0, /*  151  */
        !          2110:        0x8795A1E2, /*  152  */
        !          2111:        0xBC324D8D, /*  153  */
        !          2112:        0xE224C3C8, /*  154  */
        !          2113:        0x12837E39, /*  155  */
        !          2114:        0xCDEE3D74, /*  156  */
        !          2115:        0x7AD2143F, /*  157  */
        !          2116:        0xE13D40C, /*  158  */
        !          2117:        0x78BD4A68, /*  159  */
        !          2118:        0xA2EB194D, /*  160  */
        !          2119:        0xDB9451F9, /*  161  */
        !          2120:        0x859B71DC, /*  162  */
        !          2121:        0x5C4F5B89, /*  163  */
        !          2122:        0xCA14A8A4, /*  164  */
        !          2123:        0xEF92F003, /*  165  */
        !          2124:        0x16741D98, /*  166  */
        !          2125:        0x33AA4444, /*  167  */
        !          2126:        0x9E967FBB, /*  168  */
        !          2127:        0x92E3020, /*  169  */
        !          2128:        0xD86A35B8, /*  170  */
        !          2129:        0x8CC17B10, /*  171  */
        !          2130:        0xE1BF08AE, /*  172  */
        !          2131:        0x55693FC5, /*  173  */
        !          2132:        0x7680AD13, /*  174  */
        !          2133:        0x1E6546E8, /*  175  */
        !          2134:        0x23B6E7B9, /*  176  */
        !          2135:        0xEE77A4B2, /*  177  */
        !          2136:        0x8ED0533, /*  178  */
        !          2137:        0x44FD2895, /*  179  */
        !          2138:        0xB6393B69, /*  180  */
        !          2139:        0x5D6CACF, /*  181  */
        !          2140:        0x9819B209, /*  182  */
        !          2141:        0xECBBB72F, /*  183  */
        !          2142:        0x9A75779C, /*  184  */
        !          2143:        0xEAEC0749, /*  185  */
        !          2144:        0x94A65AEE, /*  186  */
        !          2145:        0xBDF52DC3, /*  187  */
        !          2146:        0xD6A25D04, /*  188  */
        !          2147:        0x82008E4E, /*  189  */
        !          2148:        0xA6DE160F, /*  190  */
        !          2149:        0x9B036AFB, /*  191  */
        !          2150:        0x228B3A66, /*  192  */
        !          2151:        0x5FB10A70, /*  193  */
        !          2152:        0xCC338B58, /*  194  */
        !          2153:        0x5378A9DF, /*  195  */
        !          2154:        0xC908BCA9, /*  196  */
        !          2155:        0x4959E25B, /*  197  */
        !          2156:        0x46909A97, /*  198  */
        !          2157:        0x66AE8F6E, /*  199  */
        !          2158:        0xDD0683E9, /*  200  */
        !          2159:        0x65F994B4, /*  201  */
        !          2160:        0x6426CDA5, /*  202  */
        !          2161:        0xC24B8840, /*  203  */
        !          2162:        0x32539DA0, /*  204  */
        !          2163:        0x63175650, /*  205  */
        !          2164:        0xD0C815FF, /*  206  */
        !          2165:        0x50CBC41E, /*  207  */
        !          2166:        0xF7C774A3, /*  208  */
        !          2167:        0x31B0C231, /*  209  */
        !          2168:        0x8D0D8116, /*  210  */
        !          2169:        0x24BEF16C, /*  211  */
        !          2170:        0xD555D256, /*  212  */
        !          2171:        0xDF47EA8C, /*  213  */
        !          2172:        0x6D21ECCD, /*  214  */
        !          2173:        0xA887A012, /*  215  */
        !          2174:        0x84542AED, /*  216  */
        !          2175:        0xA7B9C1BD, /*  217  */
        !          2176:        0x914C1BB1, /*  218  */
        !          2177:        0xA0D5B67D, /*  219  */
        !          2178:        0x438CE937, /*  220  */
        !          2179:        0x7030F873, /*  221  */
        !          2180:        0x71F6B0C7, /*  222  */
        !          2181:        0x574576BA, /*  223  */
        !          2182:        0xF8BC4541, /*  224  */
        !          2183:        0x9C61D348, /*  225  */
        !          2184:        0x1960579D, /*  226  */
        !          2185:        0x17C4DAAD, /*  227  */
        !          2186:        0x96A4CB0B, /*  228  */
        !          2187:        0xC193F2F6, /*  229  */
        !          2188:        0x756EAFA2, /*  230  */
        !          2189:        0x7C1D2F94, /*  231  */
        !          2190:        0xF4FE2B43, /*  232  */
        !          2191:        0xCB86E33A, /*  233  */
        !          2192:        0xEBD4C728, /*  234  */
        !          2193:        0x9D18AE64, /*  235  */
        !          2194:        0x9FE13E30, /*  236  */
        !          2195:        0x3CE0F5DE, /*  237  */
        !          2196:        0xABA1F985, /*  238  */
        !          2197:        0xADDC2718, /*  239  */
        !          2198:        0x68CE6278, /*  240  */
        !          2199:        0xD45E241F, /*  241  */
        !          2200:        0xA15C82B7, /*  242  */
        !          2201:        0x3B2293D4, /*  243  */
        !          2202:        0x739EDD32, /*  244  */
        !          2203:        0x674A6BF1, /*  245  */
        !          2204:        0x5B5D587F, /*  246  */
        !          2205:        0x4772DEAA, /*  247  */
        !          2206:        0x4A63968F, /*  248  */
        !          2207:        0xBE68686, /*  249  */
        !          2208:        0x513D6426, /*  250  */
        !          2209:        0x939A4787, /*  251  */
        !          2210:        0xBBA89296, /*  252  */
        !          2211:        0x4EC20007, /*  253  */
        !          2212:        0x818D0D08, /*  254  */
        !          2213:        0xFF64DFD6}, /*  255  */
        !          2214:        
        !          2215:        {
        !          2216:        /*  Start of S Box 4 */
        !          2217:        
        !          2218:        0xCB2297CB, /*  0  */
        !          2219:        0xDB48A144, /*  1  */
        !          2220:        0xA16CBE4B, /*  2  */
        !          2221:        0xBBEA1D6C, /*  3  */
        !          2222:        0x5AF6B6B7, /*  4  */
        !          2223:        0x8A8110B6, /*  5  */
        !          2224:        0xF9236EF9, /*  6  */
        !          2225:        0xC98F83E6, /*  7  */
        !          2226:        0xF9C65B8, /*  8  */
        !          2227:        0x252D4A89, /*  9  */
        !          2228:        0xA497F068, /*  10  */
        !          2229:        0xA5D7ED2D, /*  11  */
        !          2230:        0x94C22845, /*  12  */
        !          2231:        0x9DA1C8C4, /*  13  */
        !          2232:        0xE27C2E2E, /*  14  */
        !          2233:        0x6E8BA2B4, /*  15  */
        !          2234:        0xC3DD17FB, /*  16  */
        !          2235:        0x498CD482, /*  17  */
        !          2236:        0xDFE6A9F, /*  18  */
        !          2237:        0xB0705829, /*  19  */
        !          2238:        0x9A1E6DC1, /*  20  */
        !          2239:        0xF829717C, /*  21  */
        !          2240:        0x7BB8E3A, /*  22  */
        !          2241:        0xDA3C0B02, /*  23  */
        !          2242:        0x1AF82FC7, /*  24  */
        !          2243:        0x73B70955, /*  25  */
        !          2244:        0x7A04379C, /*  26  */
        !          2245:        0x5EE20A28, /*  27  */
        !          2246:        0x83712AE5, /*  28  */
        !          2247:        0xF4C47C6D, /*  29  */
        !          2248:        0xDF72BA56, /*  30  */
        !          2249:        0xD794858D, /*  31  */
        !          2250:        0x8C0CF709, /*  32  */
        !          2251:        0x18F0F390, /*  33  */
        !          2252:        0xB6C69B35, /*  34  */
        !          2253:        0xBF2F01DB, /*  35  */
        !          2254:        0x2FA74DCA, /*  36  */
        !          2255:        0xD0CD9127, /*  37  */
        !          2256:        0xBDE66CEC, /*  38  */
        !          2257:        0x3DEEBD46, /*  39  */
        !          2258:        0x57C88FC3, /*  40  */
        !          2259:        0xCEE1406F, /*  41  */
        !          2260:        0x66385A, /*  42  */
        !          2261:        0xF3C3444F, /*  43  */
        !          2262:        0x3A79D5D5, /*  44  */
        !          2263:        0x75751EB9, /*  45  */
        !          2264:        0x3E7F8185, /*  46  */
        !          2265:        0x521C2605, /*  47  */
        !          2266:        0xE1AAAB6E, /*  48  */
        !          2267:        0x38EBB80F, /*  49  */
        !          2268:        0xBEE7E904, /*  50  */
        !          2269:        0x61CB9647, /*  51  */
        !          2270:        0xEA54904E, /*  52  */
        !          2271:        0x5AE00E4, /*  53  */
        !          2272:        0x2D7AC65F, /*  54  */
        !          2273:        0x87751A1, /*  55  */
        !          2274:        0xDCD82915, /*  56  */
        !          2275:        0x921EE16, /*  57  */
        !          2276:        0xDD86D33B, /*  58  */
        !          2277:        0xD6BD491A, /*  59  */
        !          2278:        0x40FBADF0, /*  60  */
        !          2279:        0x4232CBD2, /*  61  */
        !          2280:        0x33808D10, /*  62  */
        !          2281:        0x39098C42, /*  63  */
        !          2282:        0x193F3199, /*  64  */
        !          2283:        0xBC1E47A, /*  65  */
        !          2284:        0x4A82B149, /*  66  */
        !          2285:        0x2B65A8A, /*  67  */
        !          2286:        0x104CDC8E, /*  68  */
        !          2287:        0x24A8F52C, /*  69  */
        !          2288:        0x685C6077, /*  70  */
        !          2289:        0xC79F95C9, /*  71  */
        !          2290:        0x1D11FE50, /*  72  */
        !          2291:        0xC08DAFCD, /*  73  */
        !          2292:        0x7B1A9A03, /*  74  */
        !          2293:        0x1C1F11D8, /*  75  */
        !          2294:        0x84250E7F, /*  76  */
        !          2295:        0x979DB248, /*  77  */
        !          2296:        0xEBDC0501, /*  78  */
        !          2297:        0xB9553395, /*  79  */
        !          2298:        0xE3C05EA8, /*  80  */
        !          2299:        0xB1E51C4C, /*  81  */
        !          2300:        0x13B0E681, /*  82  */
        !          2301:        0x3B407766, /*  83  */
        !          2302:        0x36DB3087, /*  84  */
        !          2303:        0xEE17C9FC, /*  85  */
        !          2304:        0x6C53ECF2, /*  86  */
        !          2305:        0xADCCC58F, /*  87  */
        !          2306:        0xC427660B, /*  88  */
        !          2307:        0xEFD5867D, /*  89  */
        !          2308:        0x9B6D54A5, /*  90  */
        !          2309:        0x6FF1AEFF, /*  91  */
        !          2310:        0x8E787952, /*  92  */
        !          2311:        0x9E2BFFE0, /*  93  */
        !          2312:        0x8761D034, /*  94  */
        !          2313:        0xE00BDBAD, /*  95  */
        !          2314:        0xAE99A8D3, /*  96  */
        !          2315:        0xCC03F6E2, /*  97  */
        !          2316:        0xFD0ED807, /*  98  */
        !          2317:        0xE508AE3, /*  99  */
        !          2318:        0xB74182AB, /*  100  */
        !          2319:        0x4349245D, /*  101  */
        !          2320:        0xD120A465, /*  102  */
        !          2321:        0xB246A641, /*  103  */
        !          2322:        0xAF3B7AB0, /*  104  */
        !          2323:        0x2A6488BB, /*  105  */
        !          2324:        0x4B3A0D1F, /*  106  */
        !          2325:        0xE7C7E58C, /*  107  */
        !          2326:        0x3FAFF2EB, /*  108  */
        !          2327:        0x90445FFD, /*  109  */
        !          2328:        0xCF38C393, /*  110  */
        !          2329:        0x995D07E7, /*  111  */
        !          2330:        0xF24F1B36, /*  112  */
        !          2331:        0x356F6891, /*  113  */
        !          2332:        0x6D6EBCBE, /*  114  */
        !          2333:        0x8DA9E262, /*  115  */
        !          2334:        0x50FD520E, /*  116  */
        !          2335:        0x5BCA9E1E, /*  117  */
        !          2336:        0x37472CF3, /*  118  */
        !          2337:        0x69075057, /*  119  */
        !          2338:        0x7EC5FDED, /*  120  */
        !          2339:        0xCAB892A, /*  121  */
        !          2340:        0xFB2412BA, /*  122  */
        !          2341:        0x1728DEBF, /*  123  */
        !          2342:        0xA000A988, /*  124  */
        !          2343:        0xD843CE79, /*  125  */
        !          2344:        0x42E20DD, /*  126  */
        !          2345:        0x4FE8F853, /*  127  */
        !          2346:        0x56659C3C, /*  128  */
        !          2347:        0x2739D119, /*  129  */
        !          2348:        0xA78A6120, /*  130  */
        !          2349:        0x80960375, /*  131  */
        !          2350:        0x70420611, /*  132  */
        !          2351:        0x85E09F78, /*  133  */
        !          2352:        0xABD17E96, /*  134  */
        !          2353:        0x1B513EAF, /*  135  */
        !          2354:        0x1E01EB63, /*  136  */
        !          2355:        0x26AD2133, /*  137  */
        !          2356:        0xA890C094, /*  138  */
        !          2357:        0x7613CF60, /*  139  */
        !          2358:        0x817E781B, /*  140  */
        !          2359:        0xA39113D7, /*  141  */
        !          2360:        0xE957FA58, /*  142  */
        !          2361:        0x4131B99E, /*  143  */
        !          2362:        0x28B1EFDA, /*  144  */
        !          2363:        0x66ACFBA7, /*  145  */
        !          2364:        0xFF68944A, /*  146  */
        !          2365:        0x77A44FD1, /*  147  */
        !          2366:        0x7F331522, /*  148  */
        !          2367:        0x59FFB3FA, /*  149  */
        !          2368:        0xA6DF935B, /*  150  */
        !          2369:        0xFA12D9DF, /*  151  */
        !          2370:        0xC6BF6F3F, /*  152  */
        !          2371:        0x89520CF6, /*  153  */
        !          2372:        0x659EDD6A, /*  154  */
        !          2373:        0x544DA739, /*  155  */
        !          2374:        0x8B052538, /*  156  */
        !          2375:        0x7C30EA21, /*  157  */
        !          2376:        0xC2345525, /*  158  */
        !          2377:        0x15927FB2, /*  159  */
        !          2378:        0x144A436B, /*  160  */
        !          2379:        0xBA107B8B, /*  161  */
        !          2380:        0x1219AC97, /*  162  */
        !          2381:        0x6730432, /*  163  */
        !          2382:        0x31831AB3, /*  164  */
        !          2383:        0xC55A5C24, /*  165  */
        !          2384:        0xAA0FCD3E, /*  166  */
        !          2385:        0xE5606BE8, /*  167  */
        !          2386:        0x5C88F19B, /*  168  */
        !          2387:        0x4C0841EE, /*  169  */
        !          2388:        0x1FE37267, /*  170  */
        !          2389:        0x11F9C4F4, /*  171  */
        !          2390:        0x9F1B9DAE, /*  172  */
        !          2391:        0x864E76D0, /*  173  */
        !          2392:        0xE637C731, /*  174  */
        !          2393:        0xD97D23A6, /*  175  */
        !          2394:        0x32F53D5C, /*  176  */
        !          2395:        0xB8161980, /*  177  */
        !          2396:        0x93FA0F84, /*  178  */
        !          2397:        0xCAEF0870, /*  179  */
        !          2398:        0x8874487E, /*  180  */
        !          2399:        0x98F2CC73, /*  181  */
        !          2400:        0x645FB5C6, /*  182  */
        !          2401:        0xCD853659, /*  183  */
        !          2402:        0x2062470D, /*  184  */
        !          2403:        0x16EDE8E9, /*  185  */
        !          2404:        0x6B06DAB5, /*  186  */
        !          2405:        0x78B43900, /*  187  */
        !          2406:        0xFC95B786, /*  188  */
        !          2407:        0x5D8E7DE1, /*  189  */
        !          2408:        0x465B5954, /*  190  */
        !          2409:        0xFE7BA014, /*  191  */
        !          2410:        0xF7D23F7B, /*  192  */
        !          2411:        0x92BC8B18, /*  193  */
        !          2412:        0x3593592, /*  194  */
        !          2413:        0x55CEF4F7, /*  195  */
        !          2414:        0x74B27317, /*  196  */
        !          2415:        0x79DE1FC2, /*  197  */
        !          2416:        0xC8A0BFBD, /*  198  */
        !          2417:        0x229398CC, /*  199  */
        !          2418:        0x62A602CE, /*  200  */
        !          2419:        0xBCB94661, /*  201  */
        !          2420:        0x5336D206, /*  202  */
        !          2421:        0xD2A375FE, /*  203  */
        !          2422:        0x6A6AB483, /*  204  */
        !          2423:        0x4702A5A4, /*  205  */
        !          2424:        0xA2E9D73D, /*  206  */
        !          2425:        0x23A2E0F1, /*  207  */
        !          2426:        0x9189140A, /*  208  */
        !          2427:        0x581D18DC, /*  209  */
        !          2428:        0xB39A922B, /*  210  */
        !          2429:        0x82356212, /*  211  */
        !          2430:        0xD5F432A9, /*  212  */
        !          2431:        0xD356C2A3, /*  213  */
        !          2432:        0x5F765B4D, /*  214  */
        !          2433:        0x450AFCC8, /*  215  */
        !          2434:        0x4415E137, /*  216  */
        !          2435:        0xE8ECDFBC, /*  217  */
        !          2436:        0xED0DE3EA, /*  218  */
        !          2437:        0x60D42B13, /*  219  */
        !          2438:        0xF13DF971, /*  220  */
        !          2439:        0x71FC5DA2, /*  221  */
        !          2440:        0xC1455340, /*  222  */
        !          2441:        0xF087742F, /*  223  */
        !          2442:        0xF55E5751, /*  224  */
        !          2443:        0x67B3C1F8, /*  225  */
        !          2444:        0xAC6B8774, /*  226  */
        !          2445:        0x7DCFAAAC, /*  227  */
        !          2446:        0x95983BC0, /*  228  */
        !          2447:        0x489BB0B1, /*  229  */
        !          2448:        0x2C184223, /*  230  */
        !          2449:        0x964B6726, /*  231  */
        !          2450:        0x2BD3271C, /*  232  */
        !          2451:        0x72266472, /*  233  */
        !          2452:        0xDED64530, /*  234  */
        !          2453:        0xA2AA343, /*  235  */
        !          2454:        0xD4F716A0, /*  236  */
        !          2455:        0xB4DAD6D9, /*  237  */
        !          2456:        0x2184345E, /*  238  */
        !          2457:        0x512C990C, /*  239  */
        !          2458:        0x29D92D08, /*  240  */
        !          2459:        0x2EBE709A, /*  241  */
        !          2460:        0x1144C69, /*  242  */
        !          2461:        0x34584B9D, /*  243  */
        !          2462:        0xE4634ED6, /*  244  */
        !          2463:        0xECC963CF, /*  245  */
        !          2464:        0x3C6984AA, /*  246  */
        !          2465:        0x4ED056EF, /*  247  */
        !          2466:        0x9CA56976, /*  248  */
        !          2467:        0x8F3E80D4, /*  249  */
        !          2468:        0xB5BAE7C5, /*  250  */
        !          2469:        0x30B5CAF5, /*  251  */
        !          2470:        0x63F33A64, /*  252  */
        !          2471:        0xA9E4BBDE, /*  253  */
        !          2472:        0xF6B82298, /*  254  */
        !          2473:        0x4D673C1D}, /*  255  */
        !          2474:        
        !          2475:        {
        !          2476:        /*  Start of S Box 5 */
        !          2477:        
        !          2478:        0x4B4F1121, /*  0  */
        !          2479:        0xBA183081, /*  1  */
        !          2480:        0xC784F41F, /*  2  */
        !          2481:        0xD17D0BAC, /*  3  */
        !          2482:        0x83D2267, /*  4  */
        !          2483:        0x37B1361E, /*  5  */
        !          2484:        0x3581AD05, /*  6  */
        !          2485:        0xFDA2F6BC, /*  7  */
        !          2486:        0x1E892CDD, /*  8  */
        !          2487:        0xB56D3C3A, /*  9  */
        !          2488:        0x32140E46, /*  10  */
        !          2489:        0x138D8AAB, /*  11  */
        !          2490:        0xE14773D4, /*  12  */
        !          2491:        0x5B0E71DF, /*  13  */
        !          2492:        0x5D1FE055, /*  14  */
        !          2493:        0x3FB991D3, /*  15  */
        !          2494:        0xF1F46C71, /*  16  */
        !          2495:        0xA325988C, /*  17  */
        !          2496:        0x10F66E80, /*  18  */
        !          2497:        0xB1006348, /*  19  */
        !          2498:        0x726A9F60, /*  20  */
        !          2499:        0x3B67F8BA, /*  21  */
        !          2500:        0x4E114EF4, /*  22  */
        !          2501:        0x5C52115, /*  23  */
        !          2502:        0x4C5CA11C, /*  24  */
        !          2503:        0x99E1EFD8, /*  25  */
        !          2504:        0x471B83B3, /*  26  */
        !          2505:        0xCBF7E524, /*  27  */
        !          2506:        0x43AD82F5, /*  28  */
        !          2507:        0x690CA93B, /*  29  */
        !          2508:        0xFAA61BB2, /*  30  */
        !          2509:        0x12A832B5, /*  31  */
        !          2510:        0xB734F943, /*  32  */
        !          2511:        0xBD22AEA7, /*  33  */
        !          2512:        0x88FEC626, /*  34  */
        !          2513:        0x5E80C3E7, /*  35  */
        !          2514:        0xBE3EAF5E, /*  36  */
        !          2515:        0x44617652, /*  37  */
        !          2516:        0xA5724475, /*  38  */
        !          2517:        0xBB3B9695, /*  39  */
        !          2518:        0x7F3FEE8F, /*  40  */
        !          2519:        0x964E7DEB, /*  41  */
        !          2520:        0x518C052D, /*  42  */
        !          2521:        0x2A0BBC2B, /*  43  */
        !          2522:        0xC2175F5C, /*  44  */
        !          2523:        0x9A7B3889, /*  45  */
        !          2524:        0xA70D8D0C, /*  46  */
        !          2525:        0xEACCDD29, /*  47  */
        !          2526:        0xCCCD6658, /*  48  */
        !          2527:        0x34BB25E6, /*  49  */
        !          2528:        0xB8391090, /*  50  */
        !          2529:        0xF651356F, /*  51  */
        !          2530:        0x52987C9E, /*  52  */
        !          2531:        0xC16C1CD, /*  53  */
        !          2532:        0x8E372D3C, /*  54  */
        !          2533:        0x2FC6EBBD, /*  55  */
        !          2534:        0x6E5DA3E3, /*  56  */
        !          2535:        0xB0E27239, /*  57  */
        !          2536:        0x5F685738, /*  58  */
        !          2537:        0x45411786, /*  59  */
        !          2538:        0x67F65F8, /*  60  */
        !          2539:        0x61778B40, /*  61  */
        !          2540:        0x81AB2E65, /*  62  */
        !          2541:        0x14C8F0F9, /*  63  */
        !          2542:        0xA6B7B4CE, /*  64  */
        !          2543:        0x4036EAEC, /*  65  */
        !          2544:        0xBF62B00A, /*  66  */
        !          2545:        0xECFD5E02, /*  67  */
        !          2546:        0x45449A6, /*  68  */
        !          2547:        0xB20AFD28, /*  69  */
        !          2548:        0x2166D273, /*  70  */
        !          2549:        0xD13A863, /*  71  */
        !          2550:        0x89508756, /*  72  */
        !          2551:        0xD51A7530, /*  73  */
        !          2552:        0x2D653F7A, /*  74  */
        !          2553:        0x3CDBDBC3, /*  75  */
        !          2554:        0x80C9DF4F, /*  76  */
        !          2555:        0x3D5812D9, /*  77  */
        !          2556:        0x53FBB1F3, /*  78  */
        !          2557:        0xC0F185C0, /*  79  */
        !          2558:        0x7A3C3D7E, /*  80  */
        !          2559:        0x68646410, /*  81  */
        !          2560:        0x857607A0, /*  82  */
        !          2561:        0x1D12622E, /*  83  */
        !          2562:        0x97F33466, /*  84  */
        !          2563:        0xDB4C9917, /*  85  */
        !          2564:        0x6469607C, /*  86  */
        !          2565:        0x566E043D, /*  87  */
        !          2566:        0x79EF1EDB, /*  88  */
        !          2567:        0x2C05898D, /*  89  */
        !          2568:        0xC9578E25, /*  90  */
        !          2569:        0xCD380101, /*  91  */
        !          2570:        0x46E04377, /*  92  */
        !          2571:        0x7D1CC7A9, /*  93  */
        !          2572:        0x6552B837, /*  94  */
        !          2573:        0x20192608, /*  95  */
        !          2574:        0xB97500C5, /*  96  */
        !          2575:        0xED296B44, /*  97  */
        !          2576:        0x368648B4, /*  98  */
        !          2577:        0x62995CD5, /*  99  */
        !          2578:        0x82731400, /*  100  */
        !          2579:        0xF9AEBD8B, /*  101  */
        !          2580:        0x3844C0C7, /*  102  */
        !          2581:        0x7C2DE794, /*  103  */
        !          2582:        0x33A1A770, /*  104  */
        !          2583:        0x8AE528C2, /*  105  */
        !          2584:        0x5A2BE812, /*  106  */
        !          2585:        0x1F8F4A07, /*  107  */
        !          2586:        0x2B5ED7CA, /*  108  */
        !          2587:        0x937EB564, /*  109  */
        !          2588:        0x6FDA7E11, /*  110  */
        !          2589:        0xE49B5D6C, /*  111  */
        !          2590:        0xB4B3244E, /*  112  */
        !          2591:        0x18AA53A4, /*  113  */
        !          2592:        0x3A061334, /*  114  */
        !          2593:        0x4D6067A3, /*  115  */
        !          2594:        0x83BA5868, /*  116  */
        !          2595:        0x9BDF4DFE, /*  117  */
        !          2596:        0x7449F261, /*  118  */
        !          2597:        0x709F8450, /*  119  */
        !          2598:        0xCAD133CB, /*  120  */
        !          2599:        0xDE941C3F, /*  121  */
        !          2600:        0xF52AE484, /*  122  */
        !          2601:        0x781D77ED, /*  123  */
        !          2602:        0x7E4395F0, /*  124  */
        !          2603:        0xAE103B59, /*  125  */
        !          2604:        0x922331BB, /*  126  */
        !          2605:        0x42CE50C8, /*  127  */
        !          2606:        0xE6F08153, /*  128  */
        !          2607:        0xE7D941D0, /*  129  */
        !          2608:        0x5028ED6B, /*  130  */
        !          2609:        0xB3D2C49B, /*  131  */
        !          2610:        0xAD4D9C3E, /*  132  */
        !          2611:        0xD201FB6E, /*  133  */
        !          2612:        0xA45BD5BE, /*  134  */
        !          2613:        0xFFCB7F4B, /*  135  */
        !          2614:        0x579D7806, /*  136  */
        !          2615:        0xF821BB5B, /*  137  */
        !          2616:        0x59D592AD, /*  138  */
        !          2617:        0xD0BE0C31, /*  139  */
        !          2618:        0xD4E3B676, /*  140  */
        !          2619:        0x107165A, /*  141  */
        !          2620:        0xFE939D2, /*  142  */
        !          2621:        0x49BCAAFD, /*  143  */
        !          2622:        0x55FFCFE5, /*  144  */
        !          2623:        0x2EC1F783, /*  145  */
        !          2624:        0xF39A09A5, /*  146  */
        !          2625:        0x3EB42772, /*  147  */
        !          2626:        0x19B55A5D, /*  148  */
        !          2627:        0x24A0679, /*  149  */
        !          2628:        0x8C83B3F7, /*  150  */
        !          2629:        0x8642BA1D, /*  151  */
        !          2630:        0xACACD9EA, /*  152  */
        !          2631:        0x87D352C4, /*  153  */
        !          2632:        0x60931F45, /*  154  */
        !          2633:        0xA05F97D7, /*  155  */
        !          2634:        0x1CECD42C, /*  156  */
        !          2635:        0xE2FCC87B, /*  157  */
        !          2636:        0xB60F94E2, /*  158  */
        !          2637:        0x67A34B0B, /*  159  */
        !          2638:        0xFCDD40C9, /*  160  */
        !          2639:        0xB150A27, /*  161  */
        !          2640:        0xD3EE9E04, /*  162  */
        !          2641:        0x582E29E9, /*  163  */
        !          2642:        0x4AC22B41, /*  164  */
        !          2643:        0x6AC4E1B8, /*  165  */
        !          2644:        0xBCCAA51A, /*  166  */
        !          2645:        0x237AF30E, /*  167  */
        !          2646:        0xEBC3B709, /*  168  */
        !          2647:        0xC4A59D19, /*  169  */
        !          2648:        0x284BC98A, /*  170  */
        !          2649:        0xE9D41A93, /*  171  */
        !          2650:        0x6BFA2018, /*  172  */
        !          2651:        0x73B2D651, /*  173  */
        !          2652:        0x11F9A2FA, /*  174  */
        !          2653:        0xCE09BFF1, /*  175  */
        !          2654:        0x41A470AA, /*  176  */
        !          2655:        0x25888F22, /*  177  */
        !          2656:        0x77E754E8, /*  178  */
        !          2657:        0xF7330D8E, /*  179  */
        !          2658:        0x158EAB16, /*  180  */
        !          2659:        0xC5D68842, /*  181  */
        !          2660:        0xC685A6F6, /*  182  */
        !          2661:        0xE5B82FDE, /*  183  */
        !          2662:        0x9EA3A96, /*  184  */
        !          2663:        0x6DDE1536, /*  185  */
        !          2664:        0x4FA919DA, /*  186  */
        !          2665:        0x26C0BE9F, /*  187  */
        !          2666:        0x9EED6F69, /*  188  */
        !          2667:        0xF05555F2, /*  189  */
        !          2668:        0xE06FC285, /*  190  */
        !          2669:        0x9CD76D23, /*  191  */
        !          2670:        0xAF452A92, /*  192  */
        !          2671:        0xEFC74CB7, /*  193  */
        !          2672:        0x9D6B4732, /*  194  */
        !          2673:        0x8BE408EE, /*  195  */
        !          2674:        0x22401D0D, /*  196  */
        !          2675:        0xEE6C459D, /*  197  */
        !          2676:        0x7587CB82, /*  198  */
        !          2677:        0xE8746862, /*  199  */
        !          2678:        0x5CBDDE87, /*  200  */
        !          2679:        0x98794278, /*  201  */
        !          2680:        0x31AFB94D, /*  202  */
        !          2681:        0xC11E0F2F, /*  203  */
        !          2682:        0x30E8FC2A, /*  204  */
        !          2683:        0xCF3261EF, /*  205  */
        !          2684:        0x1A3023E1, /*  206  */
        !          2685:        0xAA2F86CF, /*  207  */
        !          2686:        0xF202E24A, /*  208  */
        !          2687:        0x8D08DCFF, /*  209  */
        !          2688:        0x764837C6, /*  210  */
        !          2689:        0xA26374CC, /*  211  */
        !          2690:        0x9F7C3E88, /*  212  */
        !          2691:        0x949CC57D, /*  213  */
        !          2692:        0xDD26A07F, /*  214  */
        !          2693:        0xC39EFAB0, /*  215  */
        !          2694:        0xC8F879A1, /*  216  */
        !          2695:        0xDCE67BB9, /*  217  */
        !          2696:        0xF4B0A435, /*  218  */
        !          2697:        0x912C9AE0, /*  219  */
        !          2698:        0xD85603E4, /*  220  */
        !          2699:        0x953A9BBF, /*  221  */
        !          2700:        0xFB8290D6, /*  222  */
        !          2701:        0xAEBCD5F, /*  223  */
        !          2702:        0x16206A9A, /*  224  */
        !          2703:        0x6C787A14, /*  225  */
        !          2704:        0xD9A0F16A, /*  226  */
        !          2705:        0x29BF4F74, /*  227  */
        !          2706:        0x8F8BCE91, /*  228  */
        !          2707:        0xE5A9354, /*  229  */
        !          2708:        0xAB038CB1, /*  230  */
        !          2709:        0x1B8AD11B, /*  231  */
        !          2710:        0xE327FF49, /*  232  */
        !          2711:        0x53DA20, /*  233  */
        !          2712:        0x90CF51DC, /*  234  */
        !          2713:        0xDA92FE6D, /*  235  */
        !          2714:        0x390CA47, /*  236  */
        !          2715:        0xA8958097, /*  237  */
        !          2716:        0xA9DC5BAF, /*  238  */
        !          2717:        0x3931E3C1, /*  239  */
        !          2718:        0x840446B6, /*  240  */
        !          2719:        0x63D069FB, /*  241  */
        !          2720:        0xD7460299, /*  242  */
        !          2721:        0x7124ECD1, /*  243  */
        !          2722:        0x791E613, /*  244  */
        !          2723:        0x485918FC, /*  245  */
        !          2724:        0xD635D04C, /*  246  */
        !          2725:        0xDF96AC33, /*  247  */
        !          2726:        0x66F2D303, /*  248  */
        !          2727:        0x247056AE, /*  249  */
        !          2728:        0xA1A7B2A8, /*  250  */
        !          2729:        0x27D8CC9C, /*  251  */
        !          2730:        0x17B6E998, /*  252  */
        !          2731:        0x7BF5590F, /*  253  */
        !          2732:        0xFE97F557, /*  254  */
        !          2733:        0x5471D8A2}, /*  255  */
        !          2734:        
        !          2735:        {
        !          2736:        /*  Start of S Box 6 */
        !          2737:        
        !          2738:        0x83A327A1, /*  0  */
        !          2739:        0x9F379F51, /*  1  */
        !          2740:        0x40A7D007, /*  2  */
        !          2741:        0x11307423, /*  3  */
        !          2742:        0x224587C1, /*  4  */
        !          2743:        0xAC27D63B, /*  5  */
        !          2744:        0x3B7E64EA, /*  6  */
        !          2745:        0x2E1CBFA6, /*  7  */
        !          2746:        0x9996000, /*  8  */
        !          2747:        0x3BC0E2C, /*  9  */
        !          2748:        0xD4C4478A, /*  10  */
        !          2749:        0x4542E0AB, /*  11  */
        !          2750:        0xFEDA26D4, /*  12  */
        !          2751:        0xC1D10FCB, /*  13  */
        !          2752:        0x8252F596, /*  14  */
        !          2753:        0x4494EB5C, /*  15  */
        !          2754:        0xA362F314, /*  16  */
        !          2755:        0xF5BA81FD, /*  17  */
        !          2756:        0x75C3A376, /*  18  */
        !          2757:        0x4CA214CA, /*  19  */
        !          2758:        0xE164DEDD, /*  20  */
        !          2759:        0x5088FA97, /*  21  */
        !          2760:        0x4B0930E0, /*  22  */
        !          2761:        0x2FCFB7E8, /*  23  */
        !          2762:        0x33A6F4B2, /*  24  */
        !          2763:        0xC7E94211, /*  25  */
        !          2764:        0x2D66C774, /*  26  */
        !          2765:        0x43BE8BAE, /*  27  */
        !          2766:        0xC663D445, /*  28  */
        !          2767:        0x908EB130, /*  29  */
        !          2768:        0xF4E3BE15, /*  30  */
        !          2769:        0x63B9D566, /*  31  */
        !          2770:        0x529396B5, /*  32  */
        !          2771:        0x1E1BE743, /*  33  */
        !          2772:        0x4D5FF63F, /*  34  */
        !          2773:        0x985E4A83, /*  35  */
        !          2774:        0x71AB9DF7, /*  36  */
        !          2775:        0xC516C6F5, /*  37  */
        !          2776:        0x85C19AB4, /*  38  */
        !          2777:        0x1F4DAEE4, /*  39  */
        !          2778:        0xF2973431, /*  40  */
        !          2779:        0xB713DC5E, /*  41  */
        !          2780:        0x3F2E159A, /*  42  */
        !          2781:        0xC824DA16, /*  43  */
        !          2782:        0x6BF376A, /*  44  */
        !          2783:        0xB2FE23EC, /*  45  */
        !          2784:        0xE39B1C22, /*  46  */
        !          2785:        0xF1EECB5F, /*  47  */
        !          2786:        0x8E82D52, /*  48  */
        !          2787:        0x565686C2, /*  49  */
        !          2788:        0xAB0AEA93, /*  50  */
        !          2789:        0xFD47219F, /*  51  */
        !          2790:        0xEBDBABD7, /*  52  */
        !          2791:        0x2404A185, /*  53  */
        !          2792:        0x8C7312B9, /*  54  */
        !          2793:        0xA8F2D828, /*  55  */
        !          2794:        0xC8902DA, /*  56  */
        !          2795:        0x65B42B63, /*  57  */
        !          2796:        0xC0BBEF62, /*  58  */
        !          2797:        0x4E3E4CEF, /*  59  */
        !          2798:        0x788F8018, /*  60  */
        !          2799:        0xEE1EBAB7, /*  61  */
        !          2800:        0x93928F9D, /*  62  */
        !          2801:        0x683D2903, /*  63  */
        !          2802:        0xD3B60689, /*  64  */
        !          2803:        0xAFCB0DDC, /*  65  */
        !          2804:        0x88A4C47A, /*  66  */
        !          2805:        0xF6DD9C3D, /*  67  */
        !          2806:        0x7EA5FCA0, /*  68  */
        !          2807:        0x8A6D7244, /*  69  */
        !          2808:        0xBE11F120, /*  70  */
        !          2809:        0x4FF91B8, /*  71  */
        !          2810:        0x8D2DC8C0, /*  72  */
        !          2811:        0x27F97FDB, /*  73  */
        !          2812:        0x7F9E1F47, /*  74  */
        !          2813:        0x1734F0C7, /*  75  */
        !          2814:        0x26F3ED8E, /*  76  */
        !          2815:        0xDF8F2BF, /*  77  */
        !          2816:        0xB0833D9E, /*  78  */
        !          2817:        0xE420A4E5, /*  79  */
        !          2818:        0xA423CAE6, /*  80  */
        !          2819:        0x95616772, /*  81  */
        !          2820:        0x9AE6C049, /*  82  */
        !          2821:        0x75941F2, /*  83  */
        !          2822:        0xD8E12812, /*  84  */
        !          2823:        0xF6F4F, /*  85  */
        !          2824:        0x3C0D6B05, /*  86  */
        !          2825:        0x6CEF921C, /*  87  */
        !          2826:        0xB82BC264, /*  88  */
        !          2827:        0x396CB008, /*  89  */
        !          2828:        0x5D608A6F, /*  90  */
        !          2829:        0x6D7782C8, /*  91  */
        !          2830:        0x186550AA, /*  92  */
        !          2831:        0x6B6FEC09, /*  93  */
        !          2832:        0x28E70B13, /*  94  */
        !          2833:        0x57CE5688, /*  95  */
        !          2834:        0xECD3AF84, /*  96  */
        !          2835:        0x23335A95, /*  97  */
        !          2836:        0x91F40CD2, /*  98  */
        !          2837:        0x7B6A3B26, /*  99  */
        !          2838:        0xBD32B3B6, /*  100  */
        !          2839:        0x3754A6FB, /*  101  */
        !          2840:        0x8ED088F0, /*  102  */
        !          2841:        0xF867E87C, /*  103  */
        !          2842:        0x20851746, /*  104  */
        !          2843:        0x6410F9C6, /*  105  */
        !          2844:        0x35380442, /*  106  */
        !          2845:        0xC2CA10A7, /*  107  */
        !          2846:        0x1ADEA27F, /*  108  */
        !          2847:        0x76BDDD79, /*  109  */
        !          2848:        0x92742CF4, /*  110  */
        !          2849:        0xE98F7EE, /*  111  */
        !          2850:        0x164E931D, /*  112  */
        !          2851:        0xB9C835B3, /*  113  */
        !          2852:        0x69060A99, /*  114  */
        !          2853:        0xB44C531E, /*  115  */
        !          2854:        0xFA7B66FE, /*  116  */
        !          2855:        0xC98A5B53, /*  117  */
        !          2856:        0x7D95AAE9, /*  118  */
        !          2857:        0x302F467B, /*  119  */
        !          2858:        0x74B811DE, /*  120  */
        !          2859:        0xF3866ABD, /*  121  */
        !          2860:        0xB5B3D32D, /*  122  */
        !          2861:        0xFC3157A4, /*  123  */
        !          2862:        0xD251FE19, /*  124  */
        !          2863:        0xB5D8EAC, /*  125  */
        !          2864:        0xDA71FFD5, /*  126  */
        !          2865:        0x47EA05A3, /*  127  */
        !          2866:        0x5C6A9E1, /*  128  */
        !          2867:        0xCA0EE958, /*  129  */
        !          2868:        0x9939034D, /*  130  */
        !          2869:        0x25DC5EDF, /*  131  */
        !          2870:        0x79083CB1, /*  132  */
        !          2871:        0x86768450, /*  133  */
        !          2872:        0xCF757D6D, /*  134  */
        !          2873:        0x5972B6BC, /*  135  */
        !          2874:        0xA78D59C9, /*  136  */
        !          2875:        0xC4AD8D41, /*  137  */
        !          2876:        0x2A362AD3, /*  138  */
        !          2877:        0xD1179991, /*  139  */
        !          2878:        0x601407FF, /*  140  */
        !          2879:        0xDCF50917, /*  141  */
        !          2880:        0x587069D0, /*  142  */
        !          2881:        0xE0821ED6, /*  143  */
        !          2882:        0xDBB59427, /*  144  */
        !          2883:        0x73911A4B, /*  145  */
        !          2884:        0x7C904FC3, /*  146  */
        !          2885:        0x844AFB92, /*  147  */
        !          2886:        0x6F8C955D, /*  148  */
        !          2887:        0xE8C0C5BB, /*  149  */
        !          2888:        0xB67AB987, /*  150  */
        !          2889:        0xA529D96C, /*  151  */
        !          2890:        0xF91F7181, /*  152  */
        !          2891:        0x618B1B06, /*  153  */
        !          2892:        0xE718BB0C, /*  154  */
        !          2893:        0x8BD7615B, /*  155  */
        !          2894:        0xD5A93A59, /*  156  */
        !          2895:        0x54AEF81B, /*  157  */
        !          2896:        0x772136E3, /*  158  */
        !          2897:        0xCE44FD9C, /*  159  */
        !          2898:        0x10CDA57E, /*  160  */
        !          2899:        0x87D66E0B, /*  161  */
        !          2900:        0x3D798967, /*  162  */
        !          2901:        0x1B2C1804, /*  163  */
        !          2902:        0x3EDFBD68, /*  164  */
        !          2903:        0x15F6E62B, /*  165  */
        !          2904:        0xEF68B854, /*  166  */
        !          2905:        0x3896DB35, /*  167  */
        !          2906:        0x12B7B5E2, /*  168  */
        !          2907:        0xCB489029, /*  169  */
        !          2908:        0x9E4F98A5, /*  170  */
        !          2909:        0x62EB77A8, /*  171  */
        !          2910:        0x217C24A2, /*  172  */
        !          2911:        0x964152F6, /*  173  */
        !          2912:        0x49B2080A, /*  174  */
        !          2913:        0x53D23EE7, /*  175  */
        !          2914:        0x48FB6D69, /*  176  */
        !          2915:        0x1903D190, /*  177  */
        !          2916:        0x9449E494, /*  178  */
        !          2917:        0xBF6E7886, /*  179  */
        !          2918:        0xFB356CFA, /*  180  */
        !          2919:        0x3A261365, /*  181  */
        !          2920:        0x424BC1EB, /*  182  */
        !          2921:        0xA1192570, /*  183  */
        !          2922:        0x19CA782, /*  184  */
        !          2923:        0x9D3F7E0E, /*  185  */
        !          2924:        0x9C127575, /*  186  */
        !          2925:        0xEDF02039, /*  187  */
        !          2926:        0xAD57BCCE, /*  188  */
        !          2927:        0x5C153277, /*  189  */
        !          2928:        0x81A84540, /*  190  */
        !          2929:        0xBCAA7356, /*  191  */
        !          2930:        0xCCD59B60, /*  192  */
        !          2931:        0xA62A629B, /*  193  */
        !          2932:        0xA25CCD10, /*  194  */
        !          2933:        0x2B5B65CF, /*  195  */
        !          2934:        0x1C535832, /*  196  */
        !          2935:        0x55FD4E3A, /*  197  */
        !          2936:        0x31D9790D, /*  198  */
        !          2937:        0xF06BC37D, /*  199  */
        !          2938:        0x4AFC1D71, /*  200  */
        !          2939:        0xAEED5533, /*  201  */
        !          2940:        0xBA461634, /*  202  */
        !          2941:        0xBB694B78, /*  203  */
        !          2942:        0x5F3A5C73, /*  204  */
        !          2943:        0x6A3C764A, /*  205  */
        !          2944:        0x8FB0CCA9, /*  206  */
        !          2945:        0xF725684C, /*  207  */
        !          2946:        0x4FE5382F, /*  208  */
        !          2947:        0x1D0163AF, /*  209  */
        !          2948:        0x5AA07A8F, /*  210  */
        !          2949:        0xE205A8ED, /*  211  */
        !          2950:        0xC30BAD38, /*  212  */
        !          2951:        0xFF22CF1F, /*  213  */
        !          2952:        0x72432E2E, /*  214  */
        !          2953:        0x32C2518B, /*  215  */
        !          2954:        0x3487CE4E, /*  216  */
        !          2955:        0x7AE0AC02, /*  217  */
        !          2956:        0x709FA098, /*  218  */
        !          2957:        0xA3B395A, /*  219  */
        !          2958:        0x5B4043F8, /*  220  */
        !          2959:        0xA9E48C36, /*  221  */
        !          2960:        0x149A8521, /*  222  */
        !          2961:        0xD07DEE6B, /*  223  */
        !          2962:        0x46ACD2F3, /*  224  */
        !          2963:        0x8958DFFC, /*  225  */
        !          2964:        0xB3A1223C, /*  226  */
        !          2965:        0xB11D31C4, /*  227  */
        !          2966:        0xCD7F4D3E, /*  228  */
        !          2967:        0xF28E3AD, /*  229  */
        !          2968:        0xE5B100BE, /*  230  */
        !          2969:        0xAAC54824, /*  231  */
        !          2970:        0xE9C9D7BA, /*  232  */
        !          2971:        0x9BD47001, /*  233  */
        !          2972:        0x80F149B0, /*  234  */
        !          2973:        0x66022F0F, /*  235  */
        !          2974:        0x20C4048, /*  236  */
        !          2975:        0x6EFA192A, /*  237  */
        !          2976:        0x67073F8D, /*  238  */
        !          2977:        0x13EC7BF9, /*  239  */
        !          2978:        0x3655011A, /*  240  */
        !          2979:        0xE6AFE157, /*  241  */
        !          2980:        0xD9845F6E, /*  242  */
        !          2981:        0xDECC4425, /*  243  */
        !          2982:        0x511AE2CC, /*  244  */
        !          2983:        0xDF81B4D8, /*  245  */
        !          2984:        0xD7809E55, /*  246  */
        !          2985:        0xD6D883D9, /*  247  */
        !          2986:        0x2CC7978C, /*  248  */
        !          2987:        0x5E787CC5, /*  249  */
        !          2988:        0xDD0033D1, /*  250  */
        !          2989:        0xA050C937, /*  251  */
        !          2990:        0x97F75DCD, /*  252  */
        !          2991:        0x299DE580, /*  253  */
        !          2992:        0x41E2B261, /*  254  */
        !          2993:        0xEA5A54F1}, /*  255  */
        !          2994:        
        !          2995:        {
        !          2996:        /*  Start of S Box 7 */
        !          2997:        
        !          2998:        0x7E672590, /*  0  */
        !          2999:        0xBEA513BB, /*  1  */
        !          3000:        0x2C906FE6, /*  2  */
        !          3001:        0x86029C2B, /*  3  */
        !          3002:        0x55DC4F74, /*  4  */
        !          3003:        0x553398E, /*  5  */
        !          3004:        0x63E09647, /*  6  */
        !          3005:        0xCAFD0BAB, /*  7  */
        !          3006:        0x264C37DF, /*  8  */
        !          3007:        0x8272210F, /*  9  */
        !          3008:        0x67AFA669, /*  10  */
        !          3009:        0x12D98A5F, /*  11  */
        !          3010:        0x8CAB23C4, /*  12  */
        !          3011:        0x75C68BD1, /*  13  */
        !          3012:        0xC3370470, /*  14  */
        !          3013:        0x33F37F4E, /*  15  */
        !          3014:        0x283992FF, /*  16  */
        !          3015:        0xE73A3A67, /*  17  */
        !          3016:        0x1032F283, /*  18  */
        !          3017:        0xF5AD9FC2, /*  19  */
        !          3018:        0x963F0C5D, /*  20  */
        !          3019:        0x664FBC45, /*  21  */
        !          3020:        0x202BA41C, /*  22  */
        !          3021:        0xC7C02D80, /*  23  */
        !          3022:        0x54731E84, /*  24  */
        !          3023:        0x8A1085F5, /*  25  */
        !          3024:        0x601D80FB, /*  26  */
        !          3025:        0x2F968E55, /*  27  */
        !          3026:        0x35E96812, /*  28  */
        !          3027:        0xE45A8F78, /*  29  */
        !          3028:        0xBD7DE662, /*  30  */
        !          3029:        0x3B6E6EAD, /*  31  */
        !          3030:        0x8097C5EF, /*  32  */
        !          3031:        0x70B6781, /*  33  */
        !          3032:        0xB1E508F3, /*  34  */
        !          3033:        0x24E4FAE3, /*  35  */
        !          3034:        0xB81A7805, /*  36  */
        !          3035:        0xEC0FC918, /*  37  */
        !          3036:        0x43C8774B, /*  38  */
        !          3037:        0x9B2512A9, /*  39  */
        !          3038:        0x2B05AD04, /*  40  */
        !          3039:        0x32C2536F, /*  41  */
        !          3040:        0xEDF236E0, /*  42  */
        !          3041:        0x8BC4B0CF, /*  43  */
        !          3042:        0xBACEB837, /*  44  */
        !          3043:        0x4535B289, /*  45  */
        !          3044:        0xD0E94C3, /*  46  */
        !          3045:        0xA5A371D0, /*  47  */
        !          3046:        0xAD695A58, /*  48  */
        !          3047:        0x39E3437D, /*  49  */
        !          3048:        0x9186BFFC, /*  50  */
        !          3049:        0x21038C3B, /*  51  */
        !          3050:        0xAA9DFF9, /*  52  */
        !          3051:        0x5D1F06CE, /*  53  */
        !          3052:        0x62DEF8A4, /*  54  */
        !          3053:        0xF740A2B4, /*  55  */
        !          3054:        0xA2575868, /*  56  */
        !          3055:        0x682683C1, /*  57  */
        !          3056:        0xDBB30FAC, /*  58  */
        !          3057:        0x61FE1928, /*  59  */
        !          3058:        0x468A6511, /*  60  */
        !          3059:        0xC61CD5F4, /*  61  */
        !          3060:        0xE54D9800, /*  62  */
        !          3061:        0x6B98D7F7, /*  63  */
        !          3062:        0x8418B6A5, /*  64  */
        !          3063:        0x5F09A5D2, /*  65  */
        !          3064:        0x90B4E80B, /*  66  */
        !          3065:        0x49B2C852, /*  67  */
        !          3066:        0x69F11C77, /*  68  */
        !          3067:        0x17412B7E, /*  69  */
        !          3068:        0x7F6FC0ED, /*  70  */
        !          3069:        0x56838DCC, /*  71  */
        !          3070:        0x6E9546A2, /*  72  */
        !          3071:        0xD0758619, /*  73  */
        !          3072:        0x87B9B9A, /*  74  */
        !          3073:        0xD231A01D, /*  75  */
        !          3074:        0xAF46D415, /*  76  */
        !          3075:        0x97060FD, /*  77  */
        !          3076:        0xD920F657, /*  78  */
        !          3077:        0x882D3F9F, /*  79  */
        !          3078:        0x3AE7C3C9, /*  80  */
        !          3079:        0xE8A00D9B, /*  81  */
        !          3080:        0x4FE67EBE, /*  82  */
        !          3081:        0x2EF80EB2, /*  83  */
        !          3082:        0xC1916B0C, /*  84  */
        !          3083:        0xF4DFFEA0, /*  85  */
        !          3084:        0xB97EB3EB, /*  86  */
        !          3085:        0xFDFF84DD, /*  87  */
        !          3086:        0xFF8B14F1, /*  88  */
        !          3087:        0xE96B0572, /*  89  */
        !          3088:        0xF64B508C, /*  90  */
        !          3089:        0xAE220A6E, /*  91  */
        !          3090:        0x4423AE5A, /*  92  */
        !          3091:        0xC2BECE5E, /*  93  */
        !          3092:        0xDE27567C, /*  94  */
        !          3093:        0xFC935C63, /*  95  */
        !          3094:        0x47075573, /*  96  */
        !          3095:        0xE65B27F0, /*  97  */
        !          3096:        0xE121FD22, /*  98  */
        !          3097:        0xF2668753, /*  99  */
        !          3098:        0x2DEBF5D7, /*  100  */
        !          3099:        0x8347E08D, /*  101  */
        !          3100:        0xAC5EDA03, /*  102  */
        !          3101:        0x2A7CEBE9, /*  103  */
        !          3102:        0x3FE8D92E, /*  104  */
        !          3103:        0x23542FE4, /*  105  */
        !          3104:        0x1FA7BD50, /*  106  */
        !          3105:        0xCF9B4102, /*  107  */
        !          3106:        0x9D0DBA39, /*  108  */
        !          3107:        0x9CB8902A, /*  109  */
        !          3108:        0xA7249D8B, /*  110  */
        !          3109:        0xF6D667A, /*  111  */
        !          3110:        0x5EBFA9EC, /*  112  */
        !          3111:        0x6A594DF2, /*  113  */
        !          3112:        0x79600938, /*  114  */
        !          3113:        0x23B7591, /*  115  */
        !          3114:        0xEA2C79C8, /*  116  */
        !          3115:        0xC99D07EA, /*  117  */
        !          3116:        0x64CB5EE1, /*  118  */
        !          3117:        0x1A9CAB3D, /*  119  */
        !          3118:        0x76DB9527, /*  120  */
        !          3119:        0xC08E012F, /*  121  */
        !          3120:        0x3DFB481A, /*  122  */
        !          3121:        0x872F22E7, /*  123  */
        !          3122:        0x2948D15C, /*  124  */
        !          3123:        0xA4782C79, /*  125  */
        !          3124:        0x6F50D232, /*  126  */
        !          3125:        0x78F0728A, /*  127  */
        !          3126:        0x5A87AAB1, /*  128  */
        !          3127:        0xC4E2C19C, /*  129  */
        !          3128:        0xEE767387, /*  130  */
        !          3129:        0x1B2A1864, /*  131  */
        !          3130:        0x7B8D10D3, /*  132  */
        !          3131:        0xD1713161, /*  133  */
        !          3132:        0xEEAC456, /*  134  */
        !          3133:        0xD8799E06, /*  135  */
        !          3134:        0xB645B548, /*  136  */
        !          3135:        0x4043CB65, /*  137  */
        !          3136:        0xA874FB29, /*  138  */
        !          3137:        0x4B12D030, /*  139  */
        !          3138:        0x7D687413, /*  140  */
        !          3139:        0x18EF9A1F, /*  141  */
        !          3140:        0xD7631D4C, /*  142  */
        !          3141:        0x5829C7DA, /*  143  */
        !          3142:        0xCDFA30FA, /*  144  */
        !          3143:        0xC5084BB0, /*  145  */
        !          3144:        0x92CD20E2, /*  146  */
        !          3145:        0xD4C16940, /*  147  */
        !          3146:        0x3283EC0, /*  148  */
        !          3147:        0xA917813F, /*  149  */
        !          3148:        0x9A587D01, /*  150  */
        !          3149:        0x70041F8F, /*  151  */
        !          3150:        0xDC6AB1DC, /*  152  */
        !          3151:        0xDDAEE3D5, /*  153  */
        !          3152:        0x31829742, /*  154  */
        !          3153:        0x198C022D, /*  155  */
        !          3154:        0x1C9EAFCB, /*  156  */
        !          3155:        0x5BBC6C49, /*  157  */
        !          3156:        0xD3D3293A, /*  158  */
        !          3157:        0x16D50007, /*  159  */
        !          3158:        0x4BB8820, /*  160  */
        !          3159:        0x3C5C2A41, /*  161  */
        !          3160:        0x37EE7AF8, /*  162  */
        !          3161:        0x8EB04025, /*  163  */
        !          3162:        0x9313ECBA, /*  164  */
        !          3163:        0xBFFC4799, /*  165  */
        !          3164:        0x8955A744, /*  166  */
        !          3165:        0xEF85D633, /*  167  */
        !          3166:        0x504499A7, /*  168  */
        !          3167:        0xA6CA6A86, /*  169  */
        !          3168:        0xBB3D3297, /*  170  */
        !          3169:        0xB34A8236, /*  171  */
        !          3170:        0x6DCCBE4F, /*  172  */
        !          3171:        0x6143394, /*  173  */
        !          3172:        0xCE19FC7B, /*  174  */
        !          3173:        0xCCC3C6C6, /*  175  */
        !          3174:        0xE36254AE, /*  176  */
        !          3175:        0x77B7EDA1, /*  177  */
        !          3176:        0xA133DD9E, /*  178  */
        !          3177:        0xEBF9356A, /*  179  */
        !          3178:        0x513CCF88, /*  180  */
        !          3179:        0xE2A1B417, /*  181  */
        !          3180:        0x972EE5BD, /*  182  */
        !          3181:        0x853824CD, /*  183  */
        !          3182:        0x5752F4EE, /*  184  */
        !          3183:        0x6C1142E8, /*  185  */
        !          3184:        0x3EA4F309, /*  186  */
        !          3185:        0xB2B5934A, /*  187  */
        !          3186:        0xDFD628AA, /*  188  */
        !          3187:        0x59ACEA3E, /*  189  */
        !          3188:        0xA01EB92C, /*  190  */
        !          3189:        0x389964BC, /*  191  */
        !          3190:        0xDA305DD4, /*  192  */
        !          3191:        0x19A59B7, /*  193  */
        !          3192:        0x11D2CA93, /*  194  */
        !          3193:        0xFAA6D3B9, /*  195  */
        !          3194:        0x4E772ECA, /*  196  */
        !          3195:        0x72651776, /*  197  */
        !          3196:        0xFB4E5B0E, /*  198  */
        !          3197:        0xA38F91A8, /*  199  */
        !          3198:        0x1D0663B5, /*  200  */
        !          3199:        0x30F4F192, /*  201  */
        !          3200:        0xB50051B6, /*  202  */
        !          3201:        0xB716CCB3, /*  203  */
        !          3202:        0x4ABD1B59, /*  204  */
        !          3203:        0x146C5F26, /*  205  */
        !          3204:        0xF134E2DE, /*  206  */
        !          3205:        0xF67C6C, /*  207  */
        !          3206:        0xB0E1B795, /*  208  */
        !          3207:        0x98AA4EC7, /*  209  */
        !          3208:        0xCC73B34, /*  210  */
        !          3209:        0x654276A3, /*  211  */
        !          3210:        0x8D1BA871, /*  212  */
        !          3211:        0x740A5216, /*  213  */
        !          3212:        0xE0D01A23, /*  214  */
        !          3213:        0x9ED161D6, /*  215  */
        !          3214:        0x9F36A324, /*  216  */
        !          3215:        0x993EBB7F, /*  217  */
        !          3216:        0xFEB9491B, /*  218  */
        !          3217:        0x365DDCDB, /*  219  */
        !          3218:        0x810CFFC5, /*  220  */
        !          3219:        0x71EC0382, /*  221  */
        !          3220:        0x2249E7BF, /*  222  */
        !          3221:        0x48817046, /*  223  */
        !          3222:        0xF3A24A5B, /*  224  */
        !          3223:        0x4288E4D9, /*  225  */
        !          3224:        0xBF5C243, /*  226  */
        !          3225:        0x257FE151, /*  227  */
        !          3226:        0x95B64C0D, /*  228  */
        !          3227:        0x4164F066, /*  229  */
        !          3228:        0xAAF7DB08, /*  230  */
        !          3229:        0x73B1119D, /*  231  */
        !          3230:        0x8F9F7BB8, /*  232  */
        !          3231:        0xD6844596, /*  233  */
        !          3232:        0xF07A34A6, /*  234  */
        !          3233:        0x53943D0A, /*  235  */
        !          3234:        0xF9DD166D, /*  236  */
        !          3235:        0x7A8957AF, /*  237  */
        !          3236:        0xF8BA3CE5, /*  238  */
        !          3237:        0x27C9621E, /*  239  */
        !          3238:        0x5CDAE910, /*  240  */
        !          3239:        0xC8518998, /*  241  */
        !          3240:        0x941538FE, /*  242  */
        !          3241:        0x136115D8, /*  243  */
        !          3242:        0xABA8443C, /*  244  */
        !          3243:        0x4D01F931, /*  245  */
        !          3244:        0x34EDF760, /*  246  */
        !          3245:        0xB45F266B, /*  247  */
        !          3246:        0xD5D4DE14, /*  248  */
        !          3247:        0x52D8AC35, /*  249  */
        !          3248:        0x15CFD885, /*  250  */
        !          3249:        0xCBC5CD21, /*  251  */
        !          3250:        0x4CD76D4D, /*  252  */
        !          3251:        0x7C80EF54, /*  253  */
        !          3252:        0xBC92EE75, /*  254  */
        !          3253:        0x1E56A1F6}/*  255  */
        !          3254:        
        !          3255:        
        !          3256:        };
        !          3257:        
        !          3258:        
        !          3259:        
        !          3260:        
        !          3261: *-*-END-*-*
        !          3262: sed 's/^       //' >testSBoxes.c <<\*-*-END-*-*
        !          3263:        /* This program generates and tests the standard S-boxes used by Snefru,
        !          3264:                the one way hash function.  It uses the RAND table of random numbers.
        !          3265:        
        !          3266:        
        !          3267:        This is version 2.0, July 31, 1989.
        !          3268:        
        !          3269:        
        !          3270:        
        !          3271:        Copyright (c) Xerox Corporation 1989
        !          3272:        All rights reserved.
        !          3273:        
        !          3274:        License to copy and use this software is granted.
        !          3275:        
        !          3276:        License is also granted to make and use derivative works.
        !          3277:        
        !          3278:        Xerox Corporation makes no representations concerning either the
        !          3279:        merchantability of this software or the suitability of this software for any
        !          3280:        particular purpose.  It is provided "as is" without express or implied
        !          3281:        warranty of any kind.
        !          3282:        
        !          3283:        These notices must be retained in any copies of any part of this software.
        !          3284:        
        !          3285:        
        !          3286:        
        !          3287:        
        !          3288:        #define inputFile 0             /* normally standard in */
        !          3289:        #define outputFile 1            /* normally standard out */
        !          3290:        #define errorFile 2             /* normally standard error */
        !          3291:        
        !          3292:        
        !          3293:        #define SBoxCount 8             /* number of S boxes in the set of standard S
        !          3294:                                           boxes */
        !          3295:        
        !          3296:        
        !          3297:        
        !          3298:        
        !          3299:        /* The random table is the first part of the random digits from the book:
        !          3300:           'A Million Random Digits with 100,000 Normal Deviates", by the RAND
        !          3301:           Corporation, published by the Free Press, 1955.  The formatting is similar
        !          3302:           to the book to allow easy inspection and verification. The random digits
        !          3303:           are also available on magnetic tape or diskettes from the RAND
        !          3304:           corporation.
        !          3305:        
        !          3306:        Send inquiries to: The RAND Corporation, Computer Information Systems, 1700
        !          3307:           Main St., Santa Monica California 90406;  ATTN:  Jackie McGee
        !          3308:        
        !          3309:        */
        !          3310:        
        !          3311:        
        !          3312:        /* The following two global variables are used only by 'randomDigit' */
        !          3313:        
        !          3314:        /* group location in the table of random digits */
        !          3315:        int     locationInRANDtable = 0;
        !          3316:                /* location within a 5-digit group  */
        !          3317:        int     locationIn5DigitGroup = 0;
        !          3318:        
        !          3319:        
        !          3320:        #define sizeOfRANDtableIn5DigitGroups 4810
        !          3321:        char    RANDtable[sizeOfRANDtableIn5DigitGroups][5] = {
        !          3322:        /* 0 */ "10097", "32533", "76520", "13586", "34673",
        !          3323:                                "54876", "80959", "09117", "39292", "74945",
        !          3324:        /* 1 */ "37542", "04805", "64894", "74296", "24805",
        !          3325:                                "24037", "20636", "10402", "00822", "91665",
        !          3326:        /* 2 */ "08422", "68953", "19645", "09303", "23209",
        !          3327:                                "02560", "15953", "34764", "35080", "33606",
        !          3328:        /* 3 */ "99019", "02529", "09376", "70715", "38311",
        !          3329:                                "31165", "88676", "74397", "04436", "27659",
        !          3330:        /* 4 */ "12807", "99970", "80157", "36147", "64032",
        !          3331:                                "36653", "98951", "16877", "12171", "76833",
        !          3332:        /* 5 */ "66065", "74717", "34072", "76850", "36697",
        !          3333:                                "36170", "65813", "39885", "11199", "29170",
        !          3334:        /* 6 */ "31060", "10805", "45571", "82406", "35303",
        !          3335:                                "42614", "86799", "07439", "23403", "09732",
        !          3336:        /* 7 */ "85269", "77602", "02051", "65692", "68665",
        !          3337:                                "74818", "73053", "85247", "18623", "88579",
        !          3338:        /* 8 */ "63573", "32135", "05325", "47048", "90553",
        !          3339:                                "57548", "28468", "28709", "83491", "25624",
        !          3340:        /* 9 */ "73796", "45753", "03529", "64778", "35808",
        !          3341:                                "34282", "60935", "20344", "35273", "88435",
        !          3342:        /* 10 */        "98520", "17767", "14905", "68607", "22109",
        !          3343:                                "40558", "60970", "93433", "50500", "73998",
        !          3344:        /* 11 */        "11805", "05431", "39808", "27732", "50725",
        !          3345:                                "68248", "29405", "24201", "52775", "67851",
        !          3346:        /* 12 */        "83452", "99634", "06288", "98083", "13746",
        !          3347:                                "70078", "18475", "40610", "68711", "77817",
        !          3348:        /* 13 */        "88685", "40200", "86507", "58401", "36766",
        !          3349:                                "67951", "90364", "76493", "29609", "11062",
        !          3350:        /* 14 */        "99594", "67348", "87517", "64969", "91826",
        !          3351:                                "08928", "93785", "61368", "23478", "34113",
        !          3352:        /* 15 */        "65481", "17674", "17468", "50950", "58047",
        !          3353:                                "76974", "73039", "57186", "40218", "16544",
        !          3354:        /* 16 */        "80124", "35635", "17727", "08015", "45318",
        !          3355:                                "22374", "21115", "78253", "14385", "53763",
        !          3356:        /* 17 */        "74350", "99817", "77402", "77214", "43236",
        !          3357:                                "00210", "45521", "64237", "96286", "02655",
        !          3358:        /* 18 */        "69916", "26803", "66252", "29148", "36936",
        !          3359:                                "87203", "76621", "13990", "94400", "56418",
        !          3360:        /* 19 */        "09893", "20505", "14225", "68514", "46427",
        !          3361:                                "56788", "96297", "78822", "54382", "14598",
        !          3362:        /* 20 */        "91499", "14523", "68479", "27686", "46162",
        !          3363:                                "83554", "94750", "89923", "37089", "20048",
        !          3364:        /* 21 */        "80336", "94598", "26940", "36858", "70297",
        !          3365:                                "34135", "53140", "33340", "42050", "82341",
        !          3366:        /* 22 */        "44104", "81949", "85157", "47954", "32979",
        !          3367:                                "26575", "57600", "40881", "22222", "06413",
        !          3368:        /* 23 */        "12550", "73742", "11100", "02040", "12860",
        !          3369:                                "74697", "96644", "89439", "28707", "25815",
        !          3370:        /* 24 */        "63606", "49329", "16505", "34484", "40219",
        !          3371:                                "52563", "43651", "77082", "07207", "31790",
        !          3372:        /* 25 */        "61196", "90446", "26457", "47774", "51924",
        !          3373:                                "33729", "65394", "59593", "42582", "60527",
        !          3374:        /* 26 */        "15474", "45266", "95270", "79953", "59367",
        !          3375:                                "83848", "82396", "10118", "33211", "59466",
        !          3376:        /* 27 */        "94557", "28573", "67897", "54387", "54622",
        !          3377:                                "44431", "91190", "42592", "92927", "45973",
        !          3378:        /* 28 */        "42481", "16213", "97344", "08721", "16868",
        !          3379:                                "48767", "03071", "12059", "25701", "46670",
        !          3380:        /* 29 */        "23523", "78317", "73208", "89837", "68935",
        !          3381:                                "91416", "26252", "29663", "05522", "82562",
        !          3382:        /* 30 */        "04493", "52494", "75246", "33824", "45862",
        !          3383:                                "51025", "61962", "79335", "65337", "12472",
        !          3384:        /* 31 */        "00549", "97654", "64051", "88159", "96119",
        !          3385:                                "63896", "54692", "82391", "23287", "29529",
        !          3386:        /* 32 */        "35963", "15307", "26898", "09354", "33351",
        !          3387:                                "35462", "77974", "50024", "90103", "39333",
        !          3388:        /* 33 */        "59808", "08391", "45427", "26842", "83609",
        !          3389:                                "49700", "13021", "24892", "78565", "20106",
        !          3390:        /* 34 */        "46058", "85236", "01390", "92286", "77281",
        !          3391:                                "44077", "93910", "83647", "70617", "42941",
        !          3392:        /* 35 */        "32179", "00597", "87379", "25241", "05567",
        !          3393:                                "07007", "86743", "17157", "85394", "11838",
        !          3394:        /* 36 */        "69234", "61406", "20117", "45204", "15956",
        !          3395:                                "60000", "18743", "92423", "97118", "96338",
        !          3396:        /* 37 */        "19565", "41430", "01758", "75379", "40419",
        !          3397:                                "21585", "66674", "36806", "84962", "85207",
        !          3398:        /* 38 */        "45155", "14938", "19476", "07246", "43667",
        !          3399:                                "94543", "59047", "90033", "20826", "69541",
        !          3400:        /* 39 */        "94864", "31994", "36168", "10851", "34888",
        !          3401:                                "81553", "01540", "35456", "05014", "51176",
        !          3402:        /* 40 */        "98086", "24826", "45240", "28404", "44999",
        !          3403:                                "08896", "39094", "73407", "35441", "31880",
        !          3404:        /* 41 */        "33185", "16232", "41941", "50949", "89435",
        !          3405:                                "48581", "88695", "41994", "37548", "73043",
        !          3406:        /* 42 */        "80951", "00406", "96382", "70774", "20151",
        !          3407:                                "23387", "25016", "25298", "94624", "61171",
        !          3408:        /* 43 */        "79752", "49140", "71961", "28296", "69861",
        !          3409:                                "02591", "74852", "20539", "00387", "59579",
        !          3410:        /* 44 */        "18633", "32537", "98145", "06571", "31010",
        !          3411:                                "24674", "05455", "61427", "77938", "91936",
        !          3412:        /* 45 */        "74029", "43902", "77557", "32270", "97790",
        !          3413:                                "17119", "52527", "58021", "80814", "51748",
        !          3414:        /* 46 */        "54178", "45611", "80993", "37143", "05335",
        !          3415:                                "12969", "56127", "19255", "36040", "90324",
        !          3416:        /* 47 */        "11664", "49883", "52079", "84827", "59381",
        !          3417:                                "71539", "09973", "33440", "88461", "23356",
        !          3418:        /* 48 */        "48324", "77928", "31249", "64710", "02295",
        !          3419:                                "36870", "32307", "57546", "15020", "09994",
        !          3420:        /* 49 */        "69074", "94138", "87637", "91976", "35584",
        !          3421:                                "04401", "10518", "21615", "01848", "76938",
        !          3422:        /* 50 */        "09188", "20097", "32825", "39527", "04220",
        !          3423:                                "86304", "83389", "87374", "64278", "58044",
        !          3424:        /* 51 */        "90045", "85497", "51981", "50654", "94938",
        !          3425:                                "81997", "91870", "76150", "68476", "64659",
        !          3426:        /* 52 */        "73189", "50207", "47677", "26269", "62290",
        !          3427:                                "64464", "27124", "67018", "41361", "82760",
        !          3428:        /* 53 */        "75768", "76490", "20971", "87749", "90429",
        !          3429:                                "12272", "95375", "05871", "93823", "43178",
        !          3430:        /* 54 */        "54016", "44056", "66281", "31003", "00682",
        !          3431:                                "27398", "20714", "53295", "07706", "17813",
        !          3432:        /* 55 */        "08358", "69910", "78542", "42785", "13661",
        !          3433:                                "58873", "04618", "97553", "31223", "08420",
        !          3434:        /* 56 */        "28306", "03264", "81333", "10591", "40510",
        !          3435:                                "07893", "32604", "60475", "94119", "01840",
        !          3436:        /* 57 */        "53840", "86233", "81594", "13628", "51215",
        !          3437:                                "90290", "28466", "68795", "77762", "20791",
        !          3438:        /* 58 */        "91757", "53741", "61613", "62269", "50263",
        !          3439:                                "90212", "55781", "76514", "83483", "47055",
        !          3440:        /* 59 */        "89415", "92694", "00397", "58391", "12607",
        !          3441:                                "17646", "48949", "72306", "94541", "37408",
        !          3442:        /* 60 */        "77513", "03820", "86864", "29901", "68414",
        !          3443:                                "82774", "51908", "13980", "72893", "55507",
        !          3444:        /* 61 */        "19502", "37174", "69979", "20288", "55210",
        !          3445:                                "29773", "74287", "75251", "65344", "67415",
        !          3446:        /* 62 */        "21818", "59313", "93278", "81757", "05686",
        !          3447:                                "73156", "07082", "85046", "31853", "38452",
        !          3448:        /* 63 */        "51474", "66499", "68107", "23621", "94049",
        !          3449:                                "91345", "42836", "09191", "08007", "45449",
        !          3450:        /* 64 */        "99559", "68331", "62535", "24170", "69777",
        !          3451:                                "12830", "74819", "78142", "43860", "72834",
        !          3452:        /* 65 */        "33713", "48007", "93584", "72869", "51926",
        !          3453:                                "64721", "58303", "29822", "93174", "93972",
        !          3454:        /* 66 */        "85274", "86893", "11303", "22970", "28834",
        !          3455:                                "34137", "73515", "90400", "71148", "43643",
        !          3456:        /* 67 */        "84133", "89640", "44035", "52166", "73852",
        !          3457:                                "70091", "61222", "60561", "62327", "18423",
        !          3458:        /* 68 */        "56732", "16234", "17395", "96131", "10123",
        !          3459:                                "91622", "85496", "57560", "81604", "18880",
        !          3460:        /* 69 */        "65138", "56806", "87648", "85261", "34313",
        !          3461:                                "65861", "45875", "21069", "85644", "47277",
        !          3462:        /* 70 */        "38001", "02176", "81719", "11711", "71602",
        !          3463:                                "92937", "74219", "64049", "65584", "49698",
        !          3464:        /* 71 */        "37402", "96397", "01304", "77586", "56271",
        !          3465:                                "10086", "47324", "62605", "40030", "37438",
        !          3466:        /* 72 */        "97125", "40348", "87083", "31417", "21815",
        !          3467:                                "39250", "75237", "62047", "15501", "29578",
        !          3468:        /* 73 */        "21826", "41134", "47143", "34072", "64638",
        !          3469:                                "85902", "49139", "06441", "03856", "54552",
        !          3470:        /* 74 */        "73135", "42742", "95719", "09035", "85794",
        !          3471:                                "74296", "08789", "88156", "64691", "19202",
        !          3472:        /* 75 */        "07638", "77929", "03061", "18072", "96207",
        !          3473:                                "44156", "23821", "99538", "04713", "66994",
        !          3474:        /* 76 */        "60528", "83441", "07954", "19814", "59175",
        !          3475:                                "20695", "05533", "52139", "61212", "06455",
        !          3476:        /* 77 */        "83596", "35655", "06958", "92983", "05128",
        !          3477:                                "09719", "77433", "53783", "92301", "50498",
        !          3478:        /* 78 */        "10850", "62746", "99599", "10507", "13499",
        !          3479:                                "06319", "53075", "71839", "06410", "19362",
        !          3480:        /* 79 */        "39820", "98952", "43622", "63147", "64421",
        !          3481:                                "80814", "43800", "09351", "31024", "73167",
        !          3482:        /* 80 */        "59580", "06478", "75569", "78800", "88835",
        !          3483:                                "54486", "23768", "06156", "04111", "08408",
        !          3484:        /* 81 */        "38508", "07341", "23793", "48763", "90822",
        !          3485:                                "97022", "17719", "04207", "95954", "49953",
        !          3486:        /* 82 */        "30692", "70668", "94688", "16127", "56196",
        !          3487:                                "80091", "82067", "63400", "05462", "69200",
        !          3488:        /* 83 */        "65443", "95659", "18288", "27437", "49632",
        !          3489:                                "24041", "08337", "65676", "96299", "90836",
        !          3490:        /* 84 */        "27267", "50264", "13192", "72294", "07477",
        !          3491:                                "44606", "17985", "48911", "97341", "30358",
        !          3492:        /* 85 */        "91307", "06991", "19072", "24210", "36699",
        !          3493:                                "53728", "28825", "35793", "28976", "66252",
        !          3494:        /* 86 */        "68434", "94688", "84473", "13622", "62126",
        !          3495:                                "98408", "12843", "82590", "09815", "93146",
        !          3496:        /* 87 */        "48908", "15877", "54745", "24591", "35700",
        !          3497:                                "04754", "83824", "52692", "54130", "55160",
        !          3498:        /* 88 */        "06913", "45197", "42672", "78601", "11883",
        !          3499:                                "09528", "63011", "98901", "14974", "40344",
        !          3500:        /* 89 */        "10455", "16019", "14210", "33712", "91342",
        !          3501:                                "37821", "88325", "80851", "43667", "70883",
        !          3502:        /* 90 */        "12883", "97343", "65027", "61184", "04285",
        !          3503:                                "01392", "17974", "15077", "90712", "26769",
        !          3504:        /* 91 */        "21778", "30976", "38807", "36961", "31649",
        !          3505:                                "42096", "63281", "02023", "08816", "47449",
        !          3506:        /* 92 */        "19523", "59515", "65122", "59659", "86283",
        !          3507:                                "68258", "69572", "13798", "16435", "91529",
        !          3508:        /* 93 */        "67245", "52670", "35583", "16563", "79246",
        !          3509:                                "86686", "76463", "34222", "26655", "90802",
        !          3510:        /* 94 */        "60584", "47377", "07500", "37992", "45134",
        !          3511:                                "26529", "26760", "83637", "41326", "44344",
        !          3512:        /* 95 */        "53853", "41377", "36066", "94850", "58838",
        !          3513:                                "73859", "49364", "73331", "96240", "43642",
        !          3514:        /* 96 */        "24637", "38736", "74384", "89342", "52623",
        !          3515:                                "07992", "12369", "18601", "03742", "83873",
        !          3516:        /* 97 */        "83080", "12451", "38992", "22815", "07759",
        !          3517:                                "51777", "97377", "27585", "51972", "37867",
        !          3518:        /* 98 */        "16444", "24334", "36151", "99073", "27493",
        !          3519:                                "70939", "85130", "32552", "54846", "54759",
        !          3520:        /* 99 */        "60790", "18157", "57178", "65762", "11161",
        !          3521:                                "78576", "45819", "52979", "65130", "04860", 
        !          3522:        /* 100 */       "03991", "10461", "93716", "16894", "66083",
        !          3523:                                "24653", "84609", "58232", "88618", "19161", 
        !          3524:        /* 101 */       "38555", "95554", "32886", "59780", "08355",
        !          3525:                                "60860", "29735", "47762", "71299", "23853", 
        !          3526:        /* 102 */       "17546", "73704", "92052", "46215", "55121",
        !          3527:                                "29281", "59076", "07936", "27954", "58909", 
        !          3528:        /* 103 */       "32643", "52861", "95819", "06831", "00911",
        !          3529:                                "98936", "76355", "93779", "80863", "00514", 
        !          3530:        /* 104 */       "69572", "68777", "39510", "35905", "14060",
        !          3531:                                "40619", "29549", "69616", "33564", "60780", 
        !          3532:        /* 105 */       "24122", "66591", "27699", "06494", "14845",
        !          3533:                                "46672", "61958", "77100", "90899", "75754", 
        !          3534:        /* 106 */       "61196", "30231", "92962", "61773", "41839",
        !          3535:                                "55382", "17267", "70943", "78038", "70267", 
        !          3536:        /* 107 */       "30532", "21704", "10274", "12202", "39685",
        !          3537:                                "23309", "10061", "68829", "55986", "66485", 
        !          3538:        /* 108 */       "03788", "97599", "75867", "20717", "74416",
        !          3539:                                "53166", "35208", "33374", "87539", "08823", 
        !          3540:        /* 109 */       "48228", "63379", "85783", "47619", "53152",
        !          3541:                                "67433", "35663", "52972", "16818", "60311", 
        !          3542:        /* 110 */       "60365", "94653", "35075", "33949", "42614",
        !          3543:                                "29297", "01918", "28316", "98953", "73231", 
        !          3544:        /* 111 */       "83799", "42402", "56623", "34442", "34994",
        !          3545:                                "41374", "70071", "14736", "09958", "18065", 
        !          3546:        /* 112 */       "32960", "07405", "36409", "83232", "99385",
        !          3547:                                "41600", "11133", "07586", "15917", "06253", 
        !          3548:        /* 113 */       "19322", "53845", "57620", "52606", "66497",
        !          3549:                                "68646", "78138", "66559", "19640", "99413", 
        !          3550:        /* 114 */       "11220", "94747", "07399", "37408", "48509",
        !          3551:                                "23929", "27482", "45476", "85244", "35159", 
        !          3552:        /* 115 */       "31751", "57260", "68980", "05339", "15470",
        !          3553:                                "48355", "88651", "22596", "03152", "19121", 
        !          3554:        /* 116 */       "88492", "99382", "14454", "04504", "20094",
        !          3555:                                "98977", "74843", "93413", "22109", "78508", 
        !          3556:        /* 117 */       "30934", "47744", "07481", "83828", "73788",
        !          3557:                                "06533", "28597", "20405", "94205", "20380", 
        !          3558:        /* 118 */       "22888", "48893", "27499", "98748", "60530",
        !          3559:                                "45128", "74022", "84617", "82037", "10268", 
        !          3560:        /* 119 */       "78212", "16993", "35902", "91386", "44372",
        !          3561:                                "15486", "65741", "14014", "87481", "37220", 
        !          3562:        /* 120 */       "41849", "84547", "46850", "52326", "34677",
        !          3563:                                "58300", "74910", "64345", "19325", "81549", 
        !          3564:        /* 121 */       "46352", "33049", "69248", "93460", "45305",
        !          3565:                                "07521", "61318", "31855", "14413", "70951", 
        !          3566:        /* 122 */       "11087", "96294", "14013", "31792", "59747",
        !          3567:                                "67277", "76503", "34513", "39663", "77544", 
        !          3568:        /* 123 */       "52701", "08337", "56303", "87315", "16520",
        !          3569:                                "69676", "11654", "99893", "02181", "68161", 
        !          3570:        /* 124 */       "57275", "36898", "81304", "48585", "68652",
        !          3571:                                "27376", "92852", "55866", "88448", "03584", 
        !          3572:        /* 125 */       "20857", "73156", "70284", "24326", "79375",
        !          3573:                                "95220", "01159", "63267", "10622", "48391", 
        !          3574:        /* 126 */       "15633", "84924", "90415", "93614", "33521",
        !          3575:                                "26665", "55823", "47641", "86225", "31704", 
        !          3576:        /* 127 */       "92694", "48297", "39904", "02115", "59589",
        !          3577:                                "49067", "66821", "41575", "49767", "04037", 
        !          3578:        /* 128 */       "77613", "19019", "88152", "00080", "20554",
        !          3579:                                "91409", "96277", "48257", "50816", "97616", 
        !          3580:        /* 129 */       "38688", "32486", "45134", "63545", "59404",
        !          3581:                                "72059", "43947", "51680", "43852", "59693", 
        !          3582:        /* 130 */       "25163", "01889", "70014", "15021", "41290",
        !          3583:                                "67312", "71857", "15957", "68971", "11403", 
        !          3584:        /* 131 */       "65251", "07629", "37239", "33295", "05870",
        !          3585:                                "01119", "92784", "26340", "18477", "65622", 
        !          3586:        /* 132 */       "36815", "43625", "18637", "37509", "82444",
        !          3587:                                "99005", "04921", "73701", "14707", "93997", 
        !          3588:        /* 133 */       "64397", "11692", "05327", "82162", "20247",
        !          3589:                                "81759", "45197", "25332", "83745", "22567", 
        !          3590:        /* 134 */       "04515", "25624", "95096", "67946", "48460",
        !          3591:                                "85558", "15191", "18782", "16930", "33361", 
        !          3592:        /* 135 */       "83761", "60873", "43253", "84145", "60833",
        !          3593:                                "25983", "01291", "41349", "20368", "07126", 
        !          3594:        /* 136 */       "14387", "06345", "80854", "09279", "43529",
        !          3595:                                "06318", "38384", "74761", "41196", "37480", 
        !          3596:        /* 137 */       "51321", "92246", "80088", "77074", "88722",
        !          3597:                                "56736", "66164", "49431", "66919", "31678", 
        !          3598:        /* 138 */       "72472", "00008", "80890", "18002", "94813",
        !          3599:                                "31900", "54155", "83436", "35352", "54131", 
        !          3600:        /* 139 */       "05466", "55306", "93128", "18464", "74457",
        !          3601:                                "90561", "72848", "11834", "79982", "68416", 
        !          3602:        /* 140 */       "39528", "72484", "82474", "25593", "48545",
        !          3603:                                "35247", "18619", "13674", "18611", "19241", 
        !          3604:        /* 141 */       "81616", "18711", "53342", "44276", "75122",
        !          3605:                                "11724", "74627", "73707", "58319", "15997", 
        !          3606:        /* 142 */       "07586", "16120", "82641", "22820", "92904",
        !          3607:                                "13141", "32392", "19763", "61199", "67940", 
        !          3608:        /* 143 */       "90767", "04235", "13574", "17200", "69902",
        !          3609:                                "63742", "78464", "22501", "18627", "90872", 
        !          3610:        /* 144 */       "40188", "28193", "29593", "88627", "94972",
        !          3611:                                "11598", "62095", "36787", "00441", "58997", 
        !          3612:        /* 145 */       "34414", "82157", "86887", "55087", "19152",
        !          3613:                                "00023", "12302", "80783", "32624", "68691", 
        !          3614:        /* 146 */       "63439", "75363", "44989", "16822", "36024",
        !          3615:                                "00867", "76378", "41605", "65961", "73488", 
        !          3616:        /* 147 */       "67049", "09070", "93399", "45547", "94458",
        !          3617:                                "74284", "05041", "49807", "20288", "34060", 
        !          3618:        /* 148 */       "79495", "04146", "52162", "90286", "54158",
        !          3619:                                "34243", "46978", "35482", "59362", "95938", 
        !          3620:        /* 149 */       "91704", "30552", "04737", "21031", "75051",
        !          3621:                                "93029", "47665", "64382", "99782", "93478", 
        !          3622:        /* 150 */       "94015", "46874", "32444", "48277", "59820",
        !          3623:                                "96163", "64654", "25843", "41145", "42820", 
        !          3624:        /* 151 */       "74108", "88222", "88570", "74015", "25704",
        !          3625:                                "91035", "01755", "14750", "48968", "38603", 
        !          3626:        /* 152 */       "62880", "87873", "95160", "59221", "22304",
        !          3627:                                "90314", "72877", "17334", "39283", "04149", 
        !          3628:        /* 153 */       "11748", "12102", "80580", "41867", "17710",
        !          3629:                                "59621", "06554", "07850", "73950", "79552", 
        !          3630:        /* 154 */       "17944", "05600", "60478", "03343", "25852",
        !          3631:                                "58905", "57216", "39618", "49856", "99326", 
        !          3632:        /* 155 */       "66067", "42792", "95043", "52680", "46780",
        !          3633:                                "56487", "09971", "59481", "37006", "22186", 
        !          3634:        /* 156 */       "54244", "91030", "45547", "70818", "59849",
        !          3635:                                "96169", "61459", "21647", "87417", "17198", 
        !          3636:        /* 157 */       "30945", "57589", "31732", "57260", "47670",
        !          3637:                                "07654", "46376", "25366", "94746", "49580", 
        !          3638:        /* 158 */       "69170", "37403", "86995", "90307", "94304",
        !          3639:                                "71803", "26825", "05511", "12459", "91314", 
        !          3640:        /* 159 */       "08345", "88975", "35841", "85771", "08105",
        !          3641:                                "59987", "87112", "21476", "14713", "71181", 
        !          3642:        /* 160 */       "27767", "43584", "85301", "88977", "29490",
        !          3643:                                "69714", "73035", "41207", "74699", "09310", 
        !          3644:        /* 161 */       "13025", "14338", "54066", "15243", "47724",
        !          3645:                                "66733", "47431", "43905", "31048", "56699", 
        !          3646:        /* 162 */       "80217", "36292", "98525", "24335", "24432",
        !          3647:                                "24896", "43277", "58874", "11466", "16082", 
        !          3648:        /* 163 */       "10875", "62004", "90391", "61105", "57411",
        !          3649:                                "06368", "53856", "30743", "08670", "84741", 
        !          3650:        /* 164 */       "54127", "57326", "26629", "19087", "24472",
        !          3651:                                "88779", "30540", "27886", "61732", "75454", 
        !          3652:        /* 165 */       "60311", "42824", "37301", "42678", "45990",
        !          3653:                                "43242", "17374", "52003", "70707", "70214", 
        !          3654:        /* 166 */       "49739", "71484", "92003", "98086", "76668",
        !          3655:                                "73209", "59202", "11973", "02902", "33250", 
        !          3656:        /* 167 */       "78626", "51594", "16453", "94614", "39014",
        !          3657:                                "97066", "83012", "09832", "25571", "77628", 
        !          3658:        /* 168 */       "66692", "13986", "99837", "00582", "81232",
        !          3659:                                "44987", "09504", "96412", "90193", "79568", 
        !          3660:        /* 169 */       "44071", "28091", "07362", "97703", "76447",
        !          3661:                                "42537", "98524", "97831", "65704", "09514", 
        !          3662:        /* 170 */       "41468", "85149", "49554", "17994", "14924",
        !          3663:                                "39650", "95294", "00556", "70481", "06905", 
        !          3664:        /* 171 */       "94559", "37559", "49678", "53119", "70312",
        !          3665:                                "05682", "66986", "34099", "74474", "20740", 
        !          3666:        /* 172 */       "41615", "70360", "64114", "58660", "90850",
        !          3667:                                "64618", "80620", "51790", "11436", "38072", 
        !          3668:        /* 173 */       "50273", "93113", "41794", "86861", "24781",
        !          3669:                                "89683", "55411", "85667", "77535", "99892", 
        !          3670:        /* 174 */       "41396", "80504", "90670", "08289", "40902",
        !          3671:                                "05069", "95083", "06783", "28102", "57816", 
        !          3672:        /* 175 */       "25807", "24260", "71529", "78920", "72682",
        !          3673:                                "07385", "90726", "57166", "98884", "08583", 
        !          3674:        /* 176 */       "06170", "97965", "88302", "98041", "21443",
        !          3675:                                "41808", "68984", "83620", "89747", "98882", 
        !          3676:        /* 177 */       "60808", "54444", "74412", "81105", "01176",
        !          3677:                                "28838", "36421", "16489", "18059", "51061", 
        !          3678:        /* 178 */       "80940", "44893", "10408", "36222", "80582",
        !          3679:                                "71944", "92638", "40333", "67054", "16067", 
        !          3680:        /* 179 */       "19516", "90120", "46759", "71643", "13177",
        !          3681:                                "55292", "21036", "82808", "77501", "97427", 
        !          3682:        /* 180 */       "49386", "54480", "23604", "23554", "21785",
        !          3683:                                "41101", "91178", "10174", "29420", "90438", 
        !          3684:        /* 181 */       "06312", "88940", "15995", "69321", "47458",
        !          3685:                                "64809", "98189", "81851", "29651", "84215", 
        !          3686:        /* 182 */       "60942", "00307", "11897", "92674", "40405",
        !          3687:                                "68032", "96717", "54244", "10701", "41393", 
        !          3688:        /* 183 */       "92329", "98932", "78284", "46347", "71209",
        !          3689:                                "92061", "39448", "93136", "25722", "08564", 
        !          3690:        /* 184 */       "77936", "63574", "31384", "51924", "85561",
        !          3691:                                "29671", "58137", "17820", "22751", "36518", 
        !          3692:        /* 185 */       "38101", "77756", "11657", "13897", "95889",
        !          3693:                                "57067", "47648", "13885", "70669", "93406", 
        !          3694:        /* 186 */       "39641", "69457", "91339", "22502", "92613",
        !          3695:                                "89719", "11947", "56203", "19324", "20504", 
        !          3696:        /* 187 */       "84054", "40455", "99396", "63680", "67667",
        !          3697:                                "60631", "69181", "96845", "38525", "11600", 
        !          3698:        /* 188 */       "47468", "03577", "57649", "63266", "24700",
        !          3699:                                "71594", "14004", "23153", "69249", "05747", 
        !          3700:        /* 189 */       "43321", "31370", "28977", "23896", "76479",
        !          3701:                                "68562", "62342", "07589", "08899", "05985", 
        !          3702:        /* 190 */       "64281", "61826", "18555", "64937", "13173",
        !          3703:                                "33365", "78851", "16499", "87064", "13075", 
        !          3704:        /* 191 */       "66847", "70495", "32350", "02985", "86716",
        !          3705:                                "38746", "26313", "77463", "55387", "72681", 
        !          3706:        /* 192 */       "72461", "33230", "21529", "53424", "92581",
        !          3707:                                "02262", "78438", "66276", "18396", "73538", 
        !          3708:        /* 193 */       "21032", "91050", "13058", "16218", "12470",
        !          3709:                                "56500", "15292", "76139", "59526", "52113", 
        !          3710:        /* 194 */       "95362", "67011", "06651", "16136", "01016",
        !          3711:                                "00857", "55018", "56374", "35824", "71708", 
        !          3712:        /* 195 */       "49712", "97380", "10404", "55452", "34030",
        !          3713:                                "60726", "75211", "10271", "36633", "68424", 
        !          3714:        /* 196 */       "58275", "61764", "97586", "54716", "50259",
        !          3715:                                "46345", "87195", "46092", "26787", "60939", 
        !          3716:        /* 197 */       "89514", "11788", "68224", "23417", "73959",
        !          3717:                                "76145", "30342", "40277", "11049", "72049", 
        !          3718:        /* 198 */       "15472", "50669", "48139", "36732", "46874",
        !          3719:                                "37088", "73465", "09819", "58869", "35220", 
        !          3720:        /* 199 */       "12120", "86124", "51247", "44302", "60883",
        !          3721:                                "52109", "21437", "36786", "49226", "77837", 
        !          3722:        /* 200 */       "19612", "78430", "11661", "94770", "77603",
        !          3723:                                "65669", "86868", "12665", "30012", "75989", 
        !          3724:        /* 201 */       "39141", "77400", "28000", "64238", "73258",
        !          3725:                                "71794", "31340", "26256", "66453", "37016", 
        !          3726:        /* 202 */       "64756", "80457", "08747", "12836", "03469",
        !          3727:                                "50678", "03274", "43423", "66677", "82556", 
        !          3728:        /* 203 */       "92901", "51878", "56441", "22998", "29718",
        !          3729:                                "38447", "06453", "25311", "07565", "53771", 
        !          3730:        /* 204 */       "03551", "90070", "09483", "94050", "45938",
        !          3731:                                "18135", "36908", "43321", "11073", "51803", 
        !          3732:        /* 205 */       "98884", "66209", "06830", "53656", "14663",
        !          3733:                                "56346", "71430", "04909", "19818", "05707", 
        !          3734:        /* 206 */       "27369", "86882", "53473", "07541", "53633",
        !          3735:                                "70863", "03748", "12822", "19360", "49088", 
        !          3736:        /* 207 */       "59066", "75974", "63335", "20483", "43514",
        !          3737:                                "37481", "58278", "26967", "49325", "43951", 
        !          3738:        /* 208 */       "91647", "93783", "64169", "49022", "98588",
        !          3739:                                "09495", "49829", "59068", "38831", "04838", 
        !          3740:        /* 209 */       "83605", "92419", "39542", "07772", "71568",
        !          3741:                                "75673", "35185", "89759", "44901", "74291", 
        !          3742:        /* 210 */       "24895", "88530", "70774", "35439", "46758",
        !          3743:                                "70472", "70207", "92675", "91623", "61275", 
        !          3744:        /* 211 */       "35720", "26556", "95596", "20094", "73750",
        !          3745:                                "85788", "34264", "01703", "46833", "65248", 
        !          3746:        /* 212 */       "14141", "53410", "38649", "06343", "57256",
        !          3747:                                "61342", "72709", "75318", "90379", "37562", 
        !          3748:        /* 213 */       "27416", "75670", "92176", "72535", "93119",
        !          3749:                                "56077", "06886", "18244", "92344", "31374", 
        !          3750:        /* 214 */       "82071", "07429", "81007", "47749", "40744",
        !          3751:                                "56974", "23336", "88821", "53841", "10536", 
        !          3752:        /* 215 */       "21445", "82793", "24831", "93241", "14199",
        !          3753:                                "76268", "70883", "68002", "03829", "17443", 
        !          3754:        /* 216 */       "72513", "76400", "52225", "92348", "62308",
        !          3755:                                "98481", "29744", "33165", "33141", "61020", 
        !          3756:        /* 217 */       "71479", "45027", "76160", "57411", "13780",
        !          3757:                                "13632", "52308", "77762", "88874", "33697", 
        !          3758:        /* 218 */       "83210", "51466", "09088", "50395", "26743",
        !          3759:                                "05306", "21706", "70001", "99439", "80767", 
        !          3760:        /* 219 */       "68749", "95148", "94897", "78636", "96750",
        !          3761:                                "09024", "94538", "91143", "96693", "61886", 
        !          3762:        /* 220 */       "05184", "75763", "47075", "88158", "05313",
        !          3763:                                "53439", "14908", "08830", "60096", "21551", 
        !          3764:        /* 221 */       "13651", "62546", "96892", "25240", "47511",
        !          3765:                                "58483", "87342", "78818", "07855", "39269", 
        !          3766:        /* 222 */       "00566", "21220", "00292", "24069", "25072",
        !          3767:                                "29519", "52548", "54091", "21282", "21296", 
        !          3768:        /* 223 */       "50958", "17695", "58072", "68990", "60329",
        !          3769:                                "95955", "71586", "63417", "35947", "67807", 
        !          3770:        /* 224 */       "57621", "64547", "46850", "37981", "38527",
        !          3771:                                "09037", "64756", "03324", "04986", "83666", 
        !          3772:        /* 225 */       "09282", "25844", "79139", "78435", "35428",
        !          3773:                                "43561", "69799", "63314", "12991", "93516", 
        !          3774:        /* 226 */       "23394", "94206", "93432", "37836", "94919",
        !          3775:                                "26846", "02555", "74410", "94915", "48199", 
        !          3776:        /* 227 */       "05280", "37470", "93622", "04345", "15092",
        !          3777:                                "19510", "18094", "16613", "78234", "50001", 
        !          3778:        /* 228 */       "95491", "97976", "38306", "32192", "82639",
        !          3779:                                "54624", "72434", "92606", "23191", "74693", 
        !          3780:        /* 229 */       "78521", "00104", "18248", "75583", "90326",
        !          3781:                                "50785", "54034", "66251", "35774", "14692", 
        !          3782:        /* 230 */       "96345", "44579", "85932", "44053", "75704",
        !          3783:                                "20840", "86583", "83944", "52456", "73766", 
        !          3784:        /* 231 */       "77963", "31151", "32364", "91691", "47357",
        !          3785:                                "40338", "23435", "24065", "08458", "95366", 
        !          3786:        /* 232 */       "07520", "11294", "23238", "01748", "41690",
        !          3787:                                "67328", "54814", "37777", "10057", "42332", 
        !          3788:        /* 233 */       "38423", "02309", "70703", "85736", "46148",
        !          3789:                                "14258", "29236", "12152", "05088", "65825", 
        !          3790:        /* 234 */       "02463", "65533", "21199", "60555", "33928",
        !          3791:                                "01817", "07396", "89215", "30722", "22102", 
        !          3792:        /* 235 */       "15880", "92261", "17292", "88190", "61781",
        !          3793:                                "48898", "92525", "21283", "88581", "60098", 
        !          3794:        /* 236 */       "71926", "00819", "59144", "00224", "30570",
        !          3795:                                "90194", "18329", "06999", "26857", "19238", 
        !          3796:        /* 237 */       "64425", "28108", "16554", "16016", "00042",
        !          3797:                                "83229", "10333", "36168", "65617", "94834", 
        !          3798:        /* 238 */       "79782", "23924", "49440", "30432", "81077",
        !          3799:                                "31543", "95216", "64865", "13658", "51081", 
        !          3800:        /* 239 */       "35337", "74538", "44553", "64672", "90960",
        !          3801:                                "41849", "93865", "44608", "93176", "34851", 
        !          3802:        /* 240 */       "05249", "29329", "19715", "94082", "14738",
        !          3803:                                "86667", "43708", "66354", "93692", "25527", 
        !          3804:        /* 241 */       "56463", "99380", "38793", "85774", "19056",
        !          3805:                                "13939", "46062", "27647", "66146", "63210", 
        !          3806:        /* 242 */       "96296", "33121", "54196", "34108", "75814",
        !          3807:                                "85986", "71171", "15102", "28992", "63165", 
        !          3808:        /* 243 */       "98380", "36269", "60014", "07201", "62448",
        !          3809:                                "46385", "42175", "88350", "46182", "49126", 
        !          3810:        /* 244 */       "52567", "64350", "16315", "53969", "80395",
        !          3811:                                "81114", "54358", "64578", "47269", "15747", 
        !          3812:        /* 245 */       "78498", "90830", "25955", "99236", "43286",
        !          3813:                                "91064", "99969", "95144", "64424", "77377", 
        !          3814:        /* 246 */       "49553", "24241", "08150", "89535", "08703",
        !          3815:                                "91041", "77323", "81079", "45127", "93686", 
        !          3816:        /* 247 */       "32151", "07075", "83155", "10252", "73100",
        !          3817:                                "88618", "23891", "87418", "45417", "20268", 
        !          3818:        /* 248 */       "11314", "50363", "26860", "27799", "49416",
        !          3819:                                "83534", "19187", "08059", "76677", "02110", 
        !          3820:        /* 249 */       "12364", "71210", "87052", "50241", "90785",
        !          3821:                                "97889", "81399", "58130", "64439", "05614", 
        !          3822:        /* 250 */       "59467", "58309", "87834", "57213", "37510",
        !          3823:                                "33689", "01259", "62486", "56320", "46265", 
        !          3824:        /* 251 */       "73452", "17619", "56421", "40725", "23439",
        !          3825:                                "41701", "93223", "41682", "45026", "47505", 
        !          3826:        /* 252 */       "27635", "56293", "91700", "04391", "67317",
        !          3827:                                "89604", "73020", "69853", "61517", "51207", 
        !          3828:        /* 253 */       "86040", "02596", "01655", "09918", "45161",
        !          3829:                                "00222", "54577", "74821", "47335", "08582", 
        !          3830:        /* 254 */       "52403", "94255", "26351", "46527", "68224",
        !          3831:                                "90183", "85057", "72310", "34963", "83462", 
        !          3832:        /* 255 */       "49465", "46581", "61499", "04844", "94626",
        !          3833:                                "02963", "41482", "83879", "44942", "63915", 
        !          3834:        /* 256 */       "94365", "92560", "12363", "30246", "02086",
        !          3835:                                "75036", "88620", "91088", "67691", "67762", 
        !          3836:        /* 257 */       "34261", "08769", "91830", "23313", "18256",
        !          3837:                                "28850", "37639", "92748", "57791", "71328", 
        !          3838:        /* 258 */       "37110", "66538", "39318", "15626", "44324",
        !          3839:                                "82827", "08782", "65960", "58167", "01305", 
        !          3840:        /* 259 */       "83950", "45424", "72453", "19444", "68219",
        !          3841:                                "64733", "94088", "62006", "89985", "36936", 
        !          3842:        /* 260 */       "61630", "97966", "76537", "46467", "30942",
        !          3843:                                "07479", "67971", "14558", "22458", "35148", 
        !          3844:        /* 261 */       "01929", "17165", "12037", "74558", "16250",
        !          3845:                                "71750", "55546", "29693", "94984", "37782", 
        !          3846:        /* 262 */       "41659", "39098", "23982", "29899", "71594",
        !          3847:                                "77979", "54477", "13764", "17315", "72893", 
        !          3848:        /* 263 */       "32031", "39608", "75992", "73445", "01317",
        !          3849:                                "50525", "87313", "45191", "30214", "19769", 
        !          3850:        /* 264 */       "90043", "93478", "58044", "06949", "31176",
        !          3851:                                "88370", "50274", "83987", "45316", "38551", 
        !          3852:        /* 265 */       "79418", "14322", "91065", "07841", "36130",
        !          3853:                                "86602", "10659", "40859", "00964", "71577", 
        !          3854:        /* 266 */       "85447", "61079", "96910", "72906", "07361",
        !          3855:                                "84338", "34114", "52096", "66715", "51091", 
        !          3856:        /* 267 */       "86219", "81115", "49625", "48799", "89485",
        !          3857:                                "24855", "13684", "68433", "70595", "70102", 
        !          3858:        /* 268 */       "71712", "88559", "92476", "32903", "68009",
        !          3859:                                "58417", "87962", "11787", "16644", "72964", 
        !          3860:        /* 269 */       "29776", "63075", "13270", "84758", "49560",
        !          3861:                                "10317", "28778", "23006", "31036", "84906", 
        !          3862:        /* 270 */       "81488", "17340", "74154", "42801", "27917",
        !          3863:                                "89792", "62604", "62234", "13124", "76471", 
        !          3864:        /* 271 */       "51667", "37589", "87147", "24743", "48023",
        !          3865:                                "06325", "79794", "35889", "13255", "04925", 
        !          3866:        /* 272 */       "99004", "70322", "60832", "76636", "56907",
        !          3867:                                "56534", "72615", "46288", "36788", "93196", 
        !          3868:        /* 273 */       "68656", "66492", "35933", "52293", "47953",
        !          3869:                                "95495", "95304", "50009", "83464", "28608", 
        !          3870:        /* 274 */       "38074", "74083", "09337", "07965", "65047",
        !          3871:                                "36871", "59015", "21769", "30398", "44855", 
        !          3872:        /* 275 */       "01020", "80680", "59328", "08712", "48190",
        !          3873:                                "45332", "27284", "31287", "66011", "09376", 
        !          3874:        /* 276 */       "86379", "74508", "33579", "77114", "92955",
        !          3875:                                "23085", "92824", "03054", "25242", "16322", 
        !          3876:        /* 277 */       "48498", "09938", "44420", "13484", "52319",
        !          3877:                                "58875", "02012", "88591", "52500", "95795", 
        !          3878:        /* 278 */       "41800", "95363", "54142", "17482", "32705",
        !          3879:                                "60564", "12505", "40954", "46174", "64130", 
        !          3880:        /* 279 */       "63026", "96712", "79883", "39225", "52653",
        !          3881:                                "69549", "36693", "59822", "22684", "31661", 
        !          3882:        /* 280 */       "88298", "15489", "16030", "42480", "15372",
        !          3883:                                "38781", "71995", "77438", "91161", "10192", 
        !          3884:        /* 281 */       "07839", "62735", "99218", "25624", "02547",
        !          3885:                                "27445", "69187", "55749", "32322", "15504", 
        !          3886:        /* 282 */       "73298", "51108", "48717", "92926", "75705",
        !          3887:                                "89787", "96114", "99902", "37749", "96305", 
        !          3888:        /* 283 */       "12829", "70474", "00838", "50385", "91711",
        !          3889:                                "80370", "56504", "56857", "80906", "09018", 
        !          3890:        /* 284 */       "76569", "61072", "48568", "36491", "22587",
        !          3891:                                "44363", "39592", "61546", "90181", "37348", 
        !          3892:        /* 285 */       "41665", "41339", "62106", "44203", "06732",
        !          3893:                                "76111", "79840", "67999", "32231", "76869", 
        !          3894:        /* 286 */       "58652", "49983", "01669", "27464", "79553",
        !          3895:                                "52855", "25988", "18087", "38052", "17529", 
        !          3896:        /* 287 */       "13607", "00657", "76173", "43357", "77334",
        !          3897:                                "24140", "53860", "02906", "89863", "44651", 
        !          3898:        /* 288 */       "55715", "26203", "65933", "51087", "98234",
        !          3899:                                "40625", "45545", "63563", "89148", "82581", 
        !          3900:        /* 289 */       "04110", "66683", "99001", "09796", "47349",
        !          3901:                                "65003", "66524", "81970", "71262", "14479", 
        !          3902:        /* 290 */       "31300", "08681", "58068", "44115", "40064",
        !          3903:                                "77879", "23965", "69019", "73985", "19453", 
        !          3904:        /* 291 */       "26225", "97543", "37044", "07494", "85778",
        !          3905:                                "35345", "61115", "92498", "49737", "64599", 
        !          3906:        /* 292 */       "07158", "82763", "25072", "38478", "57782",
        !          3907:                                "75291", "62155", "52056", "04786", "11585", 
        !          3908:        /* 293 */       "71251", "25572", "79771", "93328", "66927",
        !          3909:                                "54069", "58752", "26624", "50463", "77361", 
        !          3910:        /* 294 */       "29991", "96526", "02820", "91659", "12818",
        !          3911:                                "96356", "49499", "01507", "40223", "09171", 
        !          3912:        /* 295 */       "83642", "21057", "02677", "09367", "38097",
        !          3913:                                "16100", "19355", "06120", "15378", "56559", 
        !          3914:        /* 296 */       "69167", "30235", "06767", "66323", "78294",
        !          3915:                                "14916", "19124", "88044", "16673", "66102", 
        !          3916:        /* 297 */       "86018", "29406", "75415", "22038", "27056",
        !          3917:                                "26906", "25867", "14751", "92380", "30434", 
        !          3918:        /* 298 */       "44114", "06026", "79553", "55091", "95385",
        !          3919:                                "41212", "37882", "46864", "54717", "97038", 
        !          3920:        /* 299 */       "53805", "64150", "70915", "63127", "63695",
        !          3921:                                "41288", "38192", "72437", "75075", "18570", 
        !          3922:        /* 300 */       "52065", "08853", "30104", "79937", "66913",
        !          3923:                                "53200", "84570", "78079", "28970", "53859", 
        !          3924:        /* 301 */       "37632", "80274", "35240", "32960", "74859",
        !          3925:                                "07359", "55176", "03930", "38984", "35151", 
        !          3926:        /* 302 */       "82576", "82805", "94031", "12779", "90879",
        !          3927:                                "24109", "25367", "77861", "09541", "85739", 
        !          3928:        /* 303 */       "69023", "64971", "99321", "07521", "95909",
        !          3929:                                "43897", "71724", "92581", "05471", "64337", 
        !          3930:        /* 304 */       "98949", "03606", "78236", "78985", "29212",
        !          3931:                                "57369", "34857", "67757", "58019", "58872", 
        !          3932:        /* 305 */       "96526", "28749", "56592", "37871", "72905",
        !          3933:                                "70198", "57319", "54116", "47014", "18285", 
        !          3934:        /* 306 */       "33692", "72111", "60958", "96848", "17893",
        !          3935:                                "40993", "50445", "14186", "76877", "87867", 
        !          3936:        /* 307 */       "50335", "09513", "44346", "26439", "55293",
        !          3937:                                "06449", "44301", "63740", "40158", "72703", 
        !          3938:        /* 308 */       "88321", "85062", "57345", "66231", "15409",
        !          3939:                                "03451", "95261", "43561", "15673", "28956", 
        !          3940:        /* 309 */       "90303", "62469", "82517", "43035", "36850",
        !          3941:                                "15592", "64098", "59022", "31752", "04370", 
        !          3942:        /* 310 */       "50486", "11885", "23085", "41712", "80692",
        !          3943:                                "48492", "16495", "99721", "36912", "28267", 
        !          3944:        /* 311 */       "27882", "16269", "64483", "11273", "02680",
        !          3945:                                "01616", "46138", "54606", "14761", "05134", 
        !          3946:        /* 312 */       "45144", "63213", "49666", "27441", "86989",
        !          3947:                                "29884", "54334", "06740", "08368", "80051", 
        !          3948:        /* 313 */       "81020", "17882", "74973", "74531", "94994",
        !          3949:                                "24927", "64894", "22667", "20466", "82948", 
        !          3950:        /* 314 */       "66831", "47427", "76033", "31197", "59817",
        !          3951:                                "20064", "61135", "28556", "29695", "80179", 
        !          3952:        /* 315 */       "74058", "18293", "09963", "35278", "13062",
        !          3953:                                "83094", "23373", "90287", "33477", "48865", 
        !          3954:        /* 316 */       "30348", "70174", "11468", "25994", "25343",
        !          3955:                                "22317", "01587", "30682", "00001", "67814", 
        !          3956:        /* 317 */       "59557", "23362", "13746", "82244", "42093",
        !          3957:                                "24671", "79458", "93730", "45488", "60234", 
        !          3958:        /* 318 */       "67098", "09899", "25775", "00332", "36636",
        !          3959:                                "57594", "19958", "85564", "58977", "12247", 
        !          3960:        /* 319 */       "60774", "66371", "69442", "20385", "14486",
        !          3961:                                "91330", "50332", "46023", "75768", "59877", 
        !          3962:        /* 320 */       "60081", "92936", "72302", "75064", "85727",
        !          3963:                                "52987", "05750", "19384", "33684", "78859", 
        !          3964:        /* 321 */       "80458", "69902", "34870", "88684", "49762",
        !          3965:                                "40801", "86291", "18194", "90366", "82639", 
        !          3966:        /* 322 */       "53844", "96326", "65728", "48563", "26027",
        !          3967:                                "52692", "62406", "76294", "41848", "63010", 
        !          3968:        /* 323 */       "69841", "29451", "36170", "21529", "16525",
        !          3969:                                "64326", "22086", "24469", "57407", "96033", 
        !          3970:        /* 324 */       "37771", "31002", "18311", "93285", "31948",
        !          3971:                                "14331", "58335", "15977", "80336", "81667", 
        !          3972:        /* 325 */       "27286", "24361", "61638", "57580", "95270",
        !          3973:                                "46180", "76990", "53031", "94366", "02727", 
        !          3974:        /* 326 */       "49944", "19278", "05756", "51875", "53445",
        !          3975:                                "33342", "01965", "07937", "10054", "97712", 
        !          3976:        /* 327 */       "87693", "58124", "46064", "39133", "77385",
        !          3977:                                "09605", "65359", "70113", "90563", "86637", 
        !          3978:        /* 328 */       "94282", "12025", "31926", "24541", "23854",
        !          3979:                                "58407", "32131", "92845", "20714", "27898", 
        !          3980:        /* 329 */       "26917", "50326", "35145", "50859", "72119",
        !          3981:                                "95094", "29441", "42301", "62460", "75252", 
        !          3982:        /* 330 */       "94267", "38422", "73047", "24200", "85349",
        !          3983:                                "72049", "91723", "97802", "98496", "12734", 
        !          3984:        /* 331 */       "73432", "10371", "57213", "53300", "80847",
        !          3985:                                "46229", "07099", "72961", "13767", "65654", 
        !          3986:        /* 332 */       "31102", "82119", "96946", "65919", "81083",
        !          3987:                                "03819", "57888", "57908", "16849", "77111", 
        !          3988:        /* 333 */       "41429", "92261", "45263", "01172", "55926",
        !          3989:                                "78835", "27697", "48420", "58865", "41207", 
        !          3990:        /* 334 */       "21406", "08582", "10785", "36233", "12237",
        !          3991:                                "07866", "13706", "92551", "11021", "63813", 
        !          3992:        /* 335 */       "71512", "65206", "37768", "94325", "14721",
        !          3993:                                "20990", "54235", "71986", "05345", "56239", 
        !          3994:        /* 336 */       "52028", "01419", "07215", "55067", "11669",
        !          3995:                                "21738", "66605", "69621", "69827", "08537", 
        !          3996:        /* 337 */       "18638", "60982", "28151", "98885", "76431",
        !          3997:                                "25566", "03085", "23639", "30849", "63986", 
        !          3998:        /* 338 */       "73287", "26201", "36174", "14106", "54102",
        !          3999:                                "57041", "16141", "64174", "03591", "90024", 
        !          4000:        /* 339 */       "73332", "31254", "17288", "59809", "25061",
        !          4001:                                "51612", "47951", "16570", "43330", "79213", 
        !          4002:        /* 340 */       "11354", "55585", "19646", "99246", "37564",
        !          4003:                                "32660", "20632", "21124", "60597", "69315", 
        !          4004:        /* 341 */       "31312", "57741", "85108", "21615", "24365",
        !          4005:                                "27684", "16124", "33888", "14966", "35303", 
        !          4006:        /* 342 */       "69921", "15795", "04020", "67672", "86816",
        !          4007:                                "63027", "84470", "45605", "44887", "26222", 
        !          4008:        /* 343 */       "79888", "58982", "22466", "98844", "48353",
        !          4009:                                "60666", "58256", "31140", "93507", "69561", 
        !          4010:        /* 344 */       "06256", "88526", "18655", "00865", "75247",
        !          4011:                                "00264", "65957", "98261", "72706", "36396", 
        !          4012:        /* 345 */       "46065", "85700", "32121", "99975", "73627",
        !          4013:                                "78812", "89638", "86602", "96758", "65099", 
        !          4014:        /* 346 */       "52777", "46792", "13790", "55240", "52002",
        !          4015:                                "10313", "91933", "71231", "10053", "78416", 
        !          4016:        /* 347 */       "54563", "96004", "42215", "30094", "45958",
        !          4017:                                "48437", "49591", "50483", "13422", "69108", 
        !          4018:        /* 348 */       "59952", "27896", "40450", "79327", "31962",
        !          4019:                                "46456", "39260", "51479", "61882", "48181", 
        !          4020:        /* 349 */       "50691", "64709", "32902", "10676", "12083",
        !          4021:                                "35771", "79656", "56667", "76783", "03937", 
        !          4022:        /* 350 */       "99859", "10362", "57411", "40986", "35045",
        !          4023:                                "02838", "29255", "64230", "84418", "34988", 
        !          4024:        /* 351 */       "77644", "39892", "77327", "74129", "53444",
        !          4025:                                "35487", "95803", "38640", "20383", "55402", 
        !          4026:        /* 352 */       "25793", "14213", "87082", "42837", "95030",
        !          4027:                                "97198", "61608", "97723", "79390", "35290", 
        !          4028:        /* 353 */       "34683", "81419", "87133", "70447", "53127",
        !          4029:                                "97146", "28299", "56763", "12868", "01145", 
        !          4030:        /* 354 */       "12147", "58158", "92124", "60934", "18414",
        !          4031:                                "97510", "07056", "54488", "20719", "53743", 
        !          4032:        /* 355 */       "91037", "44797", "52110", "08512", "18991",
        !          4033:                                "20129", "31441", "51449", "14661", "71126", 
        !          4034:        /* 356 */       "23180", "68124", "18807", "70997", "21913",
        !          4035:                                "19594", "70355", "73637", "68266", "60775", 
        !          4036:        /* 357 */       "43164", "52643", "96363", "77989", "79332",
        !          4037:                                "39890", "65379", "20405", "52935", "43816", 
        !          4038:        /* 358 */       "92740", "95319", "04538", "60660", "28982",
        !          4039:                                "15328", "80475", "34690", "02293", "19646", 
        !          4040:        /* 359 */       "46524", "96627", "33159", "42081", "08816",
        !          4041:                                "74931", "20674", "08697", "66169", "46460", 
        !          4042:        /* 360 */       "46326", "39923", "60625", "28386", "22919",
        !          4043:                                "19415", "75766", "43668", "31626", "70301", 
        !          4044:        /* 361 */       "67053", "03949", "70082", "02303", "48642",
        !          4045:                                "38429", "94053", "38770", "68137", "68441", 
        !          4046:        /* 362 */       "52928", "70244", "91954", "17401", "92693",
        !          4047:                                "98342", "21451", "84988", "80487", "33807", 
        !          4048:        /* 363 */       "73797", "49494", "41878", "76635", "83227",
        !          4049:                                "76618", "11946", "13451", "87591", "78381", 
        !          4050:        /* 364 */       "21407", "90038", "72638", "69692", "51599",
        !          4051:                                "86413", "32019", "64856", "74730", "41531", 
        !          4052:        /* 365 */       "11064", "01790", "58817", "86400", "66213",
        !          4053:                                "92599", "70905", "78324", "54326", "43659", 
        !          4054:        /* 366 */       "34206", "63132", "38837", "40210", "96346",
        !          4055:                                "16967", "81619", "96503", "14881", "89405", 
        !          4056:        /* 367 */       "32205", "49508", "98425", "02451", "35423",
        !          4057:                                "56072", "36810", "30332", "85998", "49358", 
        !          4058:        /* 368 */       "92748", "84147", "79835", "94867", "41224",
        !          4059:                                "61794", "35066", "82220", "66684", "20096", 
        !          4060:        /* 369 */       "02754", "41731", "37068", "32753", "91059",
        !          4061:                                "13407", "05607", "69384", "53329", "95909", 
        !          4062:        /* 370 */       "44968", "11397", "92973", "50014", "92997",
        !          4063:                                "80968", "93761", "57598", "74703", "07768", 
        !          4064:        /* 371 */       "37978", "73873", "33475", "09720", "97852",
        !          4065:                                "98449", "48722", "84977", "11271", "11728", 
        !          4066:        /* 372 */       "68318", "22312", "78792", "87508", "88466",
        !          4067:                                "72976", "47099", "84126", "38595", "85124", 
        !          4068:        /* 373 */       "64405", "90020", "07492", "52413", "95111",
        !          4069:                                "34455", "86311", "68892", "01074", "60274", 
        !          4070:        /* 374 */       "28136", "19328", "38161", "57475", "13771",
        !          4071:                                "63562", "84207", "94121", "18901", "52768", 
        !          4072:        /* 375 */       "33801", "82087", "86091", "59969", "90398",
        !          4073:                                "56870", "55756", "78841", "98450", "54165", 
        !          4074:        /* 376 */       "55106", "50343", "70519", "14567", "36780",
        !          4075:                                "55450", "19606", "83749", "67562", "64765", 
        !          4076:        /* 377 */       "38543", "16585", "86841", "73742", "08766",
        !          4077:                                "39252", "75678", "75379", "78760", "37279", 
        !          4078:        /* 378 */       "15280", "13558", "95916", "89759", "76686",
        !          4079:                                "76467", "67147", "63110", "94008", "08037", 
        !          4080:        /* 379 */       "35263", "53710", "16667", "79008", "11231",
        !          4081:                                "29397", "67136", "18601", "64502", "90228", 
        !          4082:        /* 380 */       "89109", "72849", "22711", "65547", "34542",
        !          4083:                                "26686", "81678", "87765", "77654", "23664", 
        !          4084:        /* 381 */       "96352", "14106", "32938", "28083", "18633",
        !          4085:                                "80286", "65507", "46197", "52722", "75476", 
        !          4086:        /* 382 */       "77816", "47204", "34876", "45963", "79262",
        !          4087:                                "90181", "84041", "03745", "90041", "30780", 
        !          4088:        /* 383 */       "27226", "92847", "85572", "15308", "80688",
        !          4089:                                "05761", "82638", "13464", "23683", "81015", 
        !          4090:        /* 384 */       "54214", "64175", "43701", "86845", "15569",
        !          4091:                                "50687", "52679", "87696", "08285", "97444", 
        !          4092:        /* 385 */       "47599", "94472", "64150", "87753", "68652",
        !          4093:                                "60726", "26213", "17320", "64553", "81285", 
        !          4094:        /* 386 */       "98126", "12158", "52095", "64833", "00492",
        !          4095:                                "35817", "55571", "91300", "97812", "37507", 
        !          4096:        /* 387 */       "04209", "53515", "64342", "21223", "16662",
        !          4097:                                "43265", "68219", "03529", "43636", "68417", 
        !          4098:        /* 388 */       "53640", "95326", "93381", "37113", "80751",
        !          4099:                                "76469", "96677", "43054", "22937", "31954", 
        !          4100:        /* 389 */       "13266", "34140", "27253", "02734", "99070",
        !          4101:                                "60077", "57988", "93211", "92795", "83795", 
        !          4102:        /* 390 */       "57477", "03941", "39007", "14619", "38320",
        !          4103:                                "93449", "31336", "25279", "97030", "26245", 
        !          4104:        /* 391 */       "47394", "39475", "90621", "23820", "29344",
        !          4105:                                "94859", "91604", "14033", "41868", "14816", 
        !          4106:        /* 392 */       "04075", "66644", "87803", "97815", "99552",
        !          4107:                                "78666", "03942", "08175", "22345", "19983", 
        !          4108:        /* 393 */       "76783", "99044", "20851", "84981", "59052",
        !          4109:                                "77178", "72109", "76475", "21619", "73017", 
        !          4110:        /* 394 */       "06812", "56633", "50612", "55289", "04671",
        !          4111:                                "84419", "94072", "94446", "80603", "32188", 
        !          4112:        /* 395 */       "93415", "23464", "43947", "43728", "74284",
        !          4113:                                "67177", "57105", "31059", "10642", "13803", 
        !          4114:        /* 396 */       "69602", "46961", "66567", "19359", "84676",
        !          4115:                                "63918", "40650", "12923", "15974", "79732", 
        !          4116:        /* 397 */       "20225", "92525", "71179", "04859", "91208",
        !          4117:                                "60430", "05239", "61458", "24089", "68852", 
        !          4118:        /* 398 */       "60171", "29603", "42535", "86365", "93905",
        !          4119:                                "28237", "45317", "60718", "82001", "41679", 
        !          4120:        /* 399 */       "20679", "56304", "70043", "87568", "21386",
        !          4121:                                "59049", "78353", "48696", "77379", "55309", 
        !          4122:        /* 400 */       "23780", "28391", "05940", "55583", "81256",
        !          4123:                                "59418", "97521", "32846", "70761", "90115", 
        !          4124:        /* 401 */       "45325", "05490", "65974", "11186", "15357",
        !          4125:                                "03568", "00450", "96644", "58976", "36211", 
        !          4126:        /* 402 */       "88240", "92457", "89200", "94696", "11370",
        !          4127:                                "91157", "48487", "59501", "56983", "89795", 
        !          4128:        /* 403 */       "42789", "69758", "79701", "29511", "55968",
        !          4129:                                "41472", "89474", "84344", "80517", "07485", 
        !          4130:        /* 404 */       "97523", "17264", "82840", "59556", "37119",
        !          4131:                                "30985", "48866", "60605", "95719", "70417", 
        !          4132:        /* 405 */       "59083", "95137", "76538", "44155", "67286",
        !          4133:                                "57897", "28262", "04052", "00919", "86207", 
        !          4134:        /* 406 */       "79932", "44236", "10089", "44373", "65670",
        !          4135:                                "44285", "06903", "20834", "49701", "95735", 
        !          4136:        /* 407 */       "21149", "03425", "17594", "31427", "14262",
        !          4137:                                "32252", "68540", "39427", "44026", "47257", 
        !          4138:        /* 408 */       "45055", "95091", "08367", "28381", "57375",
        !          4139:                                "41562", "83883", "27715", "10122", "67745", 
        !          4140:        /* 409 */       "46497", "28626", "87297", "36568", "39483",
        !          4141:                                "11385", "63292", "92305", "78683", "06146", 
        !          4142:        /* 410 */       "81905", "15038", "38338", "51206", "65749",
        !          4143:                                "34119", "71516", "74068", "51094", "06665", 
        !          4144:        /* 411 */       "91884", "66762", "11428", "70908", "21506",
        !          4145:                                "00480", "94183", "78484", "66507", "75901", 
        !          4146:        /* 412 */       "25728", "52539", "86806", "69944", "65036",
        !          4147:                                "27882", "02530", "04918", "74351", "65737", 
        !          4148:        /* 413 */       "89178", "08791", "39342", "94963", "22581",
        !          4149:                                "56917", "17541", "83578", "75376", "65202", 
        !          4150:        /* 414 */       "30935", "79270", "91986", "99286", "45236",
        !          4151:                                "44720", "81915", "70881", "45886", "43213", 
        !          4152:        /* 415 */       "49789", "97081", "16075", "20517", "69980",
        !          4153:                                "25310", "91953", "01759", "67635", "88933", 
        !          4154:        /* 416 */       "54558", "18395", "73375", "62251", "58871",
        !          4155:                                "09870", "70538", "48936", "07757", "90374", 
        !          4156:        /* 417 */       "56631", "88862", "30487", "38794", "36079",
        !          4157:                                "32712", "11130", "55451", "25137", "38785", 
        !          4158:        /* 418 */       "83558", "31960", "69473", "45950", "18225",
        !          4159:                                "09871", "88502", "75179", "11551", "75664", 
        !          4160:        /* 419 */       "74321", "67351", "27703", "83717", "18913",
        !          4161:                                "42470", "08816", "37627", "14288", "62831", 
        !          4162:        /* 420 */       "44047", "67612", "72738", "26995", "50933",
        !          4163:                                "63758", "50003", "43693", "52661", "55852", 
        !          4164:        /* 421 */       "52372", "59042", "37595", "04931", "73622",
        !          4165:                                "68387", "86478", "40997", "05245", "75300", 
        !          4166:        /* 422 */       "24902", "59609", "35653", "15970", "37681",
        !          4167:                                "69365", "22236", "86374", "65550", "00343", 
        !          4168:        /* 423 */       "98377", "35354", "65770", "15365", "41422",
        !          4169:                                "71356", "16630", "40044", "19290", "66449", 
        !          4170:        /* 424 */       "53629", "79452", "71674", "30260", "97303",
        !          4171:                                "06487", "62789", "13005", "70152", "22501", 
        !          4172:        /* 425 */       "49867", "89294", "59232", "31776", "54919",
        !          4173:                                "99851", "05438", "01096", "72269", "50486", 
        !          4174:        /* 426 */       "16719", "06144", "82041", "38332", "64452",
        !          4175:                                "31840", "99287", "59928", "25503", "08407", 
        !          4176:        /* 427 */       "46970", "45907", "99238", "74547", "19704",
        !          4177:                                "72035", "26542", "54600", "79172", "58779", 
        !          4178:        /* 428 */       "35747", "78956", "11478", "41195", "58135",
        !          4179:                                "63856", "33037", "45753", "60159", "25193", 
        !          4180:        /* 429 */       "71838", "07526", "07985", "60714", "88627",
        !          4181:                                "75790", "38454", "96110", "39237", "19792", 
        !          4182:        /* 430 */       "34534", "70169", "24805", "63215", "38175",
        !          4183:                                "38784", "38855", "24826", "50917", "25147", 
        !          4184:        /* 431 */       "17082", "26997", "32295", "10894", "21805",
        !          4185:                                "65245", "85407", "37926", "69214", "38579", 
        !          4186:        /* 432 */       "84721", "23544", "88548", "65626", "75517",
        !          4187:                                "69737", "55626", "52175", "21697", "19453", 
        !          4188:        /* 433 */       "16908", "82841", "24060", "40285", "19195",
        !          4189:                                "80281", "89322", "15232", "70043", "60691", 
        !          4190:        /* 434 */       "86370", "91949", "19017", "83846", "77869",
        !          4191:                                "14321", "95102", "87073", "71467", "31305", 
        !          4192:        /* 435 */       "64677", "80358", "52629", "79419", "22359",
        !          4193:                                "87867", "48296", "50141", "46807", "82184", 
        !          4194:        /* 436 */       "95812", "84665", "74511", "59914", "04146",
        !          4195:                                "90417", "58508", "62875", "17630", "21868", 
        !          4196:        /* 437 */       "09199", "30322", "33352", "43374", "25473",
        !          4197:                                "04119", "63086", "14147", "14863", "38020", 
        !          4198:        /* 438 */       "44757", "98628", "57916", "22199", "11865",
        !          4199:                                "42911", "62651", "78290", "09392", "77294", 
        !          4200:        /* 439 */       "63168", "21043", "17409", "13786", "27475",
        !          4201:                                "75979", "89668", "43596", "74316", "84489", 
        !          4202:        /* 440 */       "54941", "95992", "45445", "41059", "55142",
        !          4203:                                "15214", "42903", "16799", "88254", "95984", 
        !          4204:        /* 441 */       "48575", "77822", "21067", "57238", "35352",
        !          4205:                                "96779", "89564", "23797", "99937", "46379", 
        !          4206:        /* 442 */       "27119", "16060", "30302", "95327", "12849",
        !          4207:                                "38111", "97090", "07598", "78473", "63079", 
        !          4208:        /* 443 */       "18570", "72803", "70040", "91385", "96436",
        !          4209:                                "96263", "17368", "56188", "85999", "50026", 
        !          4210:        /* 444 */       "36050", "73736", "13351", "48321", "28357",
        !          4211:                                "51718", "65636", "72903", "21584", "21060", 
        !          4212:        /* 445 */       "39829", "15564", "04716", "14594", "22363",
        !          4213:                                "97639", "65937", "17802", "31535", "42767", 
        !          4214:        /* 446 */       "98761", "30987", "57657", "33398", "63053",
        !          4215:                                "25926", "20944", "19306", "81727", "02695", 
        !          4216:        /* 447 */       "97479", "79172", "72764", "66446", "78864",
        !          4217:                                "12698", "15812", "97209", "38827", "91016", 
        !          4218:        /* 448 */       "91281", "57875", "45228", "49211", "69755",
        !          4219:                                "99224", "43999", "62879", "08879", "80015", 
        !          4220:        /* 449 */       "74396", "57146", "64665", "31159", "06980",
        !          4221:                                "79069", "37409", "75037", "69977", "85919", 
        !          4222:        /* 450 */       "42826", "06974", "61063", "97640", "13433",
        !          4223:                                "92528", "91311", "08440", "38840", "22362", 
        !          4224:        /* 451 */       "93929", "01836", "36590", "75052", "89475",
        !          4225:                                "15437", "65648", "99012", "70236", "12307", 
        !          4226:        /* 452 */       "83585", "00414", "62851", "48787", "28447",
        !          4227:                                "21702", "57033", "29633", "44760", "34165", 
        !          4228:        /* 453 */       "27548", "37516", "24343", "63046", "02081",
        !          4229:                                "20378", "19510", "42226", "97134", "68739", 
        !          4230:        /* 454 */       "32982", "56455", "53129", "77693", "25022",
        !          4231:                                "55534", "99375", "30086", "98001", "07432", 
        !          4232:        /* 455 */       "67126", "76656", "29347", "28492", "43108",
        !          4233:                                "64736", "32278", "84816", "80440", "30461", 
        !          4234:        /* 456 */       "00818", "09136", "01952", "48442", "91058",
        !          4235:                                "92590", "10443", "05195", "34009", "32141", 
        !          4236:        /* 457 */       "62209", "43740", "54102", "76895", "98172",
        !          4237:                                "31583", "04155", "66492", "58981", "16591", 
        !          4238:        /* 458 */       "11331", "06838", "03818", "77063", "12523",
        !          4239:                                "45570", "68970", "70055", "77751", "73743", 
        !          4240:        /* 459 */       "71732", "04704", "61384", "57343", "66682",
        !          4241:                                "44500", "89745", "10436", "67202", "36455", 
        !          4242:        /* 460 */       "42467", "88801", "91280", "01056", "27534",
        !          4243:                                "81619", "79004", "25824", "66362", "33280", 
        !          4244:        /* 461 */       "20706", "31929", "57422", "18730", "96197",
        !          4245:                                "22101", "47592", "02180", "18287", "82310", 
        !          4246:        /* 462 */       "60430", "59627", "26471", "07794", "60475",
        !          4247:                                "76713", "45427", "89654", "14370", "81674", 
        !          4248:        /* 463 */       "41246", "98416", "08669", "48883", "77154",
        !          4249:                                "09806", "94015", "60347", "20027", "08405", 
        !          4250:        /* 464 */       "33150", "27368", "53375", "70171", "59431",
        !          4251:                                "14534", "34018", "85665", "77797", "17944", 
        !          4252:        /* 465 */       "49602", "74391", "48830", "55029", "10371",
        !          4253:                                "94261", "16658", "68400", "44148", "28150", 
        !          4254:        /* 466 */       "40364", "90913", "73151", "64463", "50058",
        !          4255:                                "78191", "84439", "82478", "62398", "03113", 
        !          4256:        /* 467 */       "17578", "12830", "06571", "95934", "09132",
        !          4257:                                "25287", "78731", "80683", "67207", "76597", 
        !          4258:        /* 468 */       "42096", "34934", "76609", "52553", "47508",
        !          4259:                                "71561", "08038", "83011", "72577", "95790", 
        !          4260:        /* 469 */       "40076", "20292", "32138", "61197", "95476",
        !          4261:                                "23123", "26648", "13611", "48452", "39963", 
        !          4262:        /* 470 */       "85857", "04855", "27029", "01542", "72443",
        !          4263:                                "53688", "82635", "56264", "07977", "23090", 
        !          4264:        /* 471 */       "93553", "65434", "12124", "91087", "87800",
        !          4265:                                "95675", "99419", "44659", "30382", "55263", 
        !          4266:        /* 472 */       "82514", "86800", "16781", "65977", "65946",
        !          4267:                                "13033", "93895", "04056", "75895", "47878", 
        !          4268:        /* 473 */       "91309", "51233", "81409", "46773", "69135",
        !          4269:                                "56906", "84493", "34530", "84534", "38312", 
        !          4270:        /* 474 */       "54574", "92933", "77341", "20839", "36126",
        !          4271:                                "01143", "35356", "35459", "07959", "98335", 
        !          4272:        /* 475 */       "53266", "36146", "78047", "50607", "22486",
        !          4273:                                "63308", "08996", "96056", "39085", "26567", 
        !          4274:        /* 476 */       "06779", "62663", "30523", "47881", "41279",
        !          4275:                                "49864", "82248", "78333", "29466", "48151", 
        !          4276:        /* 477 */       "41957", "93235", "53308", "22682", "90722",
        !          4277:                                "54478", "07235", "34306", "15827", "20121", 
        !          4278:        /* 478 */       "96837", "06283", "80172", "66109", "92592",
        !          4279:                                "48238", "76428", "94546", "45430", "16288", 
        !          4280:        /* 479 */       "74839", "00740", "25553", "83767", "35900",
        !          4281:                                "05998", "07493", "46755", "11449", "88824", 
        !          4282:        /* 480 */       "44906", "33143", "07454", "56652", "34755",
        !          4283:                                "63992", "59674", "65131", "46358", "12799"
        !          4284:                                  };
        !          4285:        
        !          4286:        
        !          4287:        
        !          4288:        typedef unsigned long int sBox[256];
        !          4289:        
        !          4290:        
        !          4291:        /* The standard S boxes are defined in another file */
        !          4292:        extern sBox standardSBoxes[SBoxCount];
        !          4293:        
        !          4294:        
        !          4295:        
        !          4296:        /* The following routine is a simple error exit routine  -- it prints a
        !          4297:           message and aborts */
        !          4298:        void    errAbort (s)
        !          4299:                char   *s;
        !          4300:        {
        !          4301:                int     length;
        !          4302:        
        !          4303:                for (length = 0; s[length] != 0; length++);
        !          4304:                if (write (errorFile, s, length) != length) exit(2);
        !          4305:                if (write (errorFile, "\n", 1) != 1) exit(2);
        !          4306:                exit (1);
        !          4307:        };
        !          4308:        
        !          4309:        
        !          4310:        
        !          4311:        void    swapBytesInSBox (anSBox, row1, row2, column)
        !          4312:                sBox    anSBox;
        !          4313:                unsigned int row1, row2, column;
        !          4314:        
        !          4315:        /* Exchanges two bytes in a column in 'anSBox'.  row1 and row2 are integers
        !          4316:           between 0 and 255 inclusive.  'column' is either 0, 1, 2 or 3 and refers
        !          4317:           to the byte position in a 32-bit word.  0 is the left-most byte.   */
        !          4318:        {
        !          4319:                /* mask designates the bytes to be exchanged */
        !          4320:                unsigned long int mask;
        !          4321:                unsigned long int temp;
        !          4322:        
        !          4323:                mask = 0xFF000000;
        !          4324:        
        !          4325:                /* 'column' must be between 0 and 3 */
        !          4326:                if (column > 3)
        !          4327:                        errAbort ("bad column passed to swapBytesInSBox");
        !          4328:        
        !          4329:                /* position the mask in the appropriate column */
        !          4330:                mask >>= (column * 8);
        !          4331:        
        !          4332:        
        !          4333:                /* Swap the bytes indicated by 'mask' */
        !          4334:                temp = anSBox[row1];
        !          4335:                anSBox[row1] = (anSBox[row1] & (~mask)) | (anSBox[row2] & mask);
        !          4336:                anSBox[row2] = (anSBox[row2] & (~mask)) | (temp & mask);
        !          4337:        }
        !          4338:        
        !          4339:        
        !          4340:        unsigned int randomDigit ()
        !          4341:        /* generate a random digit in the range from 0 to 9, inclusive.  Generate the
        !          4342:           digit simply by getting the next random digit from the RAND table of
        !          4343:           random digits */
        !          4344:        {
        !          4345:                if (locationIn5DigitGroup == 5) {
        !          4346:                        locationIn5DigitGroup = 0;
        !          4347:                        locationInRANDtable++;
        !          4348:                };
        !          4349:                if (locationInRANDtable >= sizeOfRANDtableIn5DigitGroups)
        !          4350:                        errAbort ("Error in randomDigit -- attempt to ask for too many random digits");
        !          4351:                return (RANDtable[locationInRANDtable][locationIn5DigitGroup++] - '0');
        !          4352:        };
        !          4353:        
        !          4354:        
        !          4355:        unsigned int randomInRange (low, high)
        !          4356:                unsigned int low, high;
        !          4357:        
        !          4358:        /* Returns a random integer in the range from low to high, inclusive */
        !          4359:        /* gets random digits from RANDtable */
        !          4360:        {
        !          4361:                unsigned int range;     /* contains the actual range needed */
        !          4362:        
        !          4363:                /* the max possible random numbers given a certain number of digits */
        !          4364:                unsigned int maximum;
        !          4365:                unsigned int random;    /* the random number composed by appending
        !          4366:                                           digits */
        !          4367:        
        !          4368:                range = (high - low) + 1;
        !          4369:                do {
        !          4370:                        random = 0;     /* initialize */
        !          4371:                        maximum = 1;    /* initialize */
        !          4372:                        /* loop until random has as many digits as range */
        !          4373:                        while (maximum < range) {
        !          4374:                                maximum *= 10;  /* 0-n = n+1 possible random numbers */
        !          4375:                                /* add another digit to the low end */
        !          4376:                                random = (random * 10) + randomDigit ();
        !          4377:                        }
        !          4378:                }
        !          4379:                /* if random is not evenly mappable to range, try again */
        !          4380:                /* the operation (maximum/range)  TRUNCATES the result to an unsigned
        !          4381:                   int */
        !          4382:                while (random >= ((unsigned int) (maximum / range)) * range);
        !          4383:                /* map random to the range and add  low  to stay within (low,high) */
        !          4384:                return (low + (random % range));
        !          4385:        }
        !          4386:        
        !          4387:        void    checkSBoxes ()
        !          4388:        /* computes the standard S boxes from the RAND table of random digits,
        !          4389:           then compares it with standardSBoxes -- they should be equal.
        !          4390:           Uses RANDtable as the source for the random digits.  */
        !          4391:        {
        !          4392:                sBox    SBoxFromRand[SBoxCount];
        !          4393:                int SBoxIndex;
        !          4394:        
        !          4395:                /* column is from the set {0, 1, 2, 3}.  0 is the leftmost byte */
        !          4396:                unsigned int column, row;
        !          4397:                unsigned long int longRow;
        !          4398:        
        !          4399:                for (SBoxIndex = 0; SBoxIndex < SBoxCount; SBoxIndex++) {
        !          4400:        
        !          4401:                        /* Fill initial S box with a trivial permutation (0-255) */
        !          4402:                        for (longRow = 0; longRow < 256; longRow++)
        !          4403:                                SBoxFromRand[SBoxIndex][longRow] =
        !          4404:                                        longRow | (longRow << 8) | (longRow << 16) | (longRow << 24);
        !          4405:        
        !          4406:                        for (column = 0; column < 4; column++) {
        !          4407:                                for (row = 0; row < 255 /* 255 is correct */ ; row++)
        !          4408:                                        /* exchange random rows in the column.
        !          4409:                                                This ensures the column remains a permutation
        !          4410:                                                of (0-255) */
        !          4411:                                        swapBytesInSBox (SBoxFromRand[SBoxIndex],
        !          4412:                                                row, randomInRange (row, 255), column);
        !          4413:                        }
        !          4414:                        for (row = 0; row < 256; row++)
        !          4415:                                if (SBoxFromRand[SBoxIndex][row] != standardSBoxes[SBoxIndex][row])
        !          4416:                                        errAbort ("Error -- can't verify S boxes");
        !          4417:        
        !          4418:                        printf("  Verified SBox[%d]\n",SBoxIndex);
        !          4419:            };  /*  End of for (SBoxIndex....   */
        !          4420:        };
        !          4421:        
        !          4422:        
        !          4423:        
        !          4424:        void    main ()
        !          4425:                
        !          4426:        {       int i;
        !          4427:        
        !          4428:                
        !          4429:                /* Test the standard S boxes to make sure they haven't been
        !          4430:                   damaged. */
        !          4431:                /* Test to make sure each column is a permutation.  */
        !          4432:                for (i = 0; i < SBoxCount; i++) {
        !          4433:                        char    testArray[256];
        !          4434:                        int     testShift = 0;
        !          4435:                        int     j;
        !          4436:        
        !          4437:                        for (testShift = 0; testShift < 32; testShift += 8) {
        !          4438:                                for (j = 0; j < 256; j++)
        !          4439:                                        testArray[j] = 0;
        !          4440:                                for (j = 0; j < 256; j++)
        !          4441:                                        testArray[(standardSBoxes[i][j] >> testShift) & 0xff]++;
        !          4442:                                for (j = 0; j < 256; j++)
        !          4443:                                        if (testArray[j] != 1)
        !          4444:                                                errAbort ("Table error -- the standard S box is corrupted");
        !          4445:                        };
        !          4446:                };
        !          4447:        
        !          4448:                /* It looks okay.  Now check things out some more  */
        !          4449:                
        !          4450:                printf("  The standard S Boxes are permutations.\n");
        !          4451:        
        !          4452:                checkSBoxes ();
        !          4453:        
        !          4454:        
        !          4455:                exit (0);
        !          4456:        };
        !          4457: *-*-END-*-*

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.