1 /*
2 * Copyright (c) 2008-2011 WiredTiger, Inc.
3 *
4 * This is free and unencumbered software released into the public domain.
5 *
6 * Anyone is free to copy, modify, publish, use, compile, sell, or
7 * distribute this software, either in source code form or as a compiled
8 * binary, for any purpose, commercial or non-commercial, and by any
9 * means.
10 *
11 * In jurisdictions that recognize copyright laws, the author or authors
12 * of this software dedicate any and all copyright interest in the
13 * software to the public domain. We make this dedication for the benefit
14 * of the public at large and to the detriment of our heirs and
15 * successors. We intend this dedication to be an overt act of
16 * relinquishment in perpetuity of all present and future rights to this
17 * software under copyright law.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25 * OTHER DEALINGS IN THE SOFTWARE.
26 */
27
28 #include <stddef.h>
29 #include <stdint.h>
30
31 uint32_t my_crc32c_slicing(const uint8_t *, size_t);
32
33 static const uint32_t g_crc_slicing[8][256] = {
34 #ifdef WORDS_BIGENDIAN
35 /*
36 * Big endian tables have entries that are byte reversed from little
37 * endian tables.
38 */
39 {
40 0x00000000, 0x03836bf2, 0xf7703be1, 0xf4f35013,
41 0x1f979ac7, 0x1c14f135, 0xe8e7a126, 0xeb64cad4,
42 0xcf58d98a, 0xccdbb278, 0x3828e26b, 0x3bab8999,
43 0xd0cf434d, 0xd34c28bf, 0x27bf78ac, 0x243c135e,
44 0x6fc75e10, 0x6c4435e2, 0x98b765f1, 0x9b340e03,
45 0x7050c4d7, 0x73d3af25, 0x8720ff36, 0x84a394c4,
46 0xa09f879a, 0xa31cec68, 0x57efbc7b, 0x546cd789,
47 0xbf081d5d, 0xbc8b76af, 0x487826bc, 0x4bfb4d4e,
48 0xde8ebd20, 0xdd0dd6d2, 0x29fe86c1, 0x2a7ded33,
49 0xc11927e7, 0xc29a4c15, 0x36691c06, 0x35ea77f4,
50 0x11d664aa, 0x12550f58, 0xe6a65f4b, 0xe52534b9,
51 0x0e41fe6d, 0x0dc2959f, 0xf931c58c, 0xfab2ae7e,
52 0xb149e330, 0xb2ca88c2, 0x4639d8d1, 0x45bab323,
53 0xaede79f7, 0xad5d1205, 0x59ae4216, 0x5a2d29e4,
54 0x7e113aba, 0x7d925148, 0x8961015b, 0x8ae26aa9,
55 0x6186a07d, 0x6205cb8f, 0x96f69b9c, 0x9575f06e,
56 0xbc1d7b41, 0xbf9e10b3, 0x4b6d40a0, 0x48ee2b52,
57 0xa38ae186, 0xa0098a74, 0x54fada67, 0x5779b195,
58 0x7345a2cb, 0x70c6c939, 0x8435992a, 0x87b6f2d8,
59 0x6cd2380c, 0x6f5153fe, 0x9ba203ed, 0x9821681f,
60 0xd3da2551, 0xd0594ea3, 0x24aa1eb0, 0x27297542,
61 0xcc4dbf96, 0xcfced464, 0x3b3d8477, 0x38beef85,
62 0x1c82fcdb, 0x1f019729, 0xebf2c73a, 0xe871acc8,
63 0x0315661c, 0x00960dee, 0xf4655dfd, 0xf7e6360f,
64 0x6293c661, 0x6110ad93, 0x95e3fd80, 0x96609672,
65 0x7d045ca6, 0x7e873754, 0x8a746747, 0x89f70cb5,
66 0xadcb1feb, 0xae487419, 0x5abb240a, 0x59384ff8,
67 0xb25c852c, 0xb1dfeede, 0x452cbecd, 0x46afd53f,
68 0x0d549871, 0x0ed7f383, 0xfa24a390, 0xf9a7c862,
69 0x12c302b6, 0x11406944, 0xe5b33957, 0xe63052a5,
70 0xc20c41fb, 0xc18f2a09, 0x357c7a1a, 0x36ff11e8,
71 0xdd9bdb3c, 0xde18b0ce, 0x2aebe0dd, 0x29688b2f,
72 0x783bf682, 0x7bb89d70, 0x8f4bcd63, 0x8cc8a691,
73 0x67ac6c45, 0x642f07b7, 0x90dc57a4, 0x935f3c56,
74 0xb7632f08, 0xb4e044fa, 0x401314e9, 0x43907f1b,
75 0xa8f4b5cf, 0xab77de3d, 0x5f848e2e, 0x5c07e5dc,
76 0x17fca892, 0x147fc360, 0xe08c9373, 0xe30ff881,
77 0x086b3255, 0x0be859a7, 0xff1b09b4, 0xfc986246,
78 0xd8a47118, 0xdb271aea, 0x2fd44af9, 0x2c57210b,
79 0xc733ebdf, 0xc4b0802d, 0x3043d03e, 0x33c0bbcc,
80 0xa6b54ba2, 0xa5362050, 0x51c57043, 0x52461bb1,
81 0xb922d165, 0xbaa1ba97, 0x4e52ea84, 0x4dd18176,
82 0x69ed9228, 0x6a6ef9da, 0x9e9da9c9, 0x9d1ec23b,
83 0x767a08ef, 0x75f9631d, 0x810a330e, 0x828958fc,
84 0xc97215b2, 0xcaf17e40, 0x3e022e53, 0x3d8145a1,
85 0xd6e58f75, 0xd566e487, 0x2195b494, 0x2216df66,
86 0x062acc38, 0x05a9a7ca, 0xf15af7d9, 0xf2d99c2b,
87 0x19bd56ff, 0x1a3e3d0d, 0xeecd6d1e, 0xed4e06ec,
88 0xc4268dc3, 0xc7a5e631, 0x3356b622, 0x30d5ddd0,
89 0xdbb11704, 0xd8327cf6, 0x2cc12ce5, 0x2f424717,
90 0x0b7e5449, 0x08fd3fbb, 0xfc0e6fa8, 0xff8d045a,
91 0x14e9ce8e, 0x176aa57c, 0xe399f56f, 0xe01a9e9d,
92 0xabe1d3d3, 0xa862b821, 0x5c91e832, 0x5f1283c0,
93 0xb4764914, 0xb7f522e6, 0x430672f5, 0x40851907,
94 0x64b90a59, 0x673a61ab, 0x93c931b8, 0x904a5a4a,
95 0x7b2e909e, 0x78adfb6c, 0x8c5eab7f, 0x8fddc08d,
96 0x1aa830e3, 0x192b5b11, 0xedd80b02, 0xee5b60f0,
97 0x053faa24, 0x06bcc1d6, 0xf24f91c5, 0xf1ccfa37,
98 0xd5f0e969, 0xd673829b, 0x2280d288, 0x2103b97a,
99 0xca6773ae, 0xc9e4185c, 0x3d17484f, 0x3e9423bd,
100 0x756f6ef3, 0x76ec0501, 0x821f5512, 0x819c3ee0,
101 0x6af8f434, 0x697b9fc6, 0x9d88cfd5, 0x9e0ba427,
102 0xba37b779, 0xb9b4dc8b, 0x4d478c98, 0x4ec4e76a,
103 0xa5a02dbe, 0xa623464c, 0x52d0165f, 0x51537dad
104 },{
105 0x00000000, 0x7798a213, 0xee304527, 0x99a8e734,
106 0xdc618a4e, 0xabf9285d, 0x3251cf69, 0x45c96d7a,
107 0xb8c3149d, 0xcf5bb68e, 0x56f351ba, 0x216bf3a9,
108 0x64a29ed3, 0x133a3cc0, 0x8a92dbf4, 0xfd0a79e7,
109 0x81f1c53f, 0xf669672c, 0x6fc18018, 0x1859220b,
110 0x5d904f71, 0x2a08ed62, 0xb3a00a56, 0xc438a845,
111 0x3932d1a2, 0x4eaa73b1, 0xd7029485, 0xa09a3696,
112 0xe5535bec, 0x92cbf9ff, 0x0b631ecb, 0x7cfbbcd8,
113 0x02e38b7f, 0x757b296c, 0xecd3ce58, 0x9b4b6c4b,
114 0xde820131, 0xa91aa322, 0x30b24416, 0x472ae605,
115 0xba209fe2, 0xcdb83df1, 0x5410dac5, 0x238878d6,
116 0x664115ac, 0x11d9b7bf, 0x8871508b, 0xffe9f298,
117 0x83124e40, 0xf48aec53, 0x6d220b67, 0x1abaa974,
118 0x5f73c40e, 0x28eb661d, 0xb1438129, 0xc6db233a,
119 0x3bd15add, 0x4c49f8ce, 0xd5e11ffa, 0xa279bde9,
120 0xe7b0d093, 0x90287280, 0x098095b4, 0x7e1837a7,
121 0x04c617ff, 0x735eb5ec, 0xeaf652d8, 0x9d6ef0cb,
122 0xd8a79db1, 0xaf3f3fa2, 0x3697d896, 0x410f7a85,
123 0xbc050362, 0xcb9da171, 0x52354645, 0x25ade456,
124 0x6064892c, 0x17fc2b3f, 0x8e54cc0b, 0xf9cc6e18,
125 0x8537d2c0, 0xf2af70d3, 0x6b0797e7, 0x1c9f35f4,
126 0x5956588e, 0x2ecefa9d, 0xb7661da9, 0xc0febfba,
127 0x3df4c65d, 0x4a6c644e, 0xd3c4837a, 0xa45c2169,
128 0xe1954c13, 0x960dee00, 0x0fa50934, 0x783dab27,
129 0x06259c80, 0x71bd3e93, 0xe815d9a7, 0x9f8d7bb4,
130 0xda4416ce, 0xaddcb4dd, 0x347453e9, 0x43ecf1fa,
131 0xbee6881d, 0xc97e2a0e, 0x50d6cd3a, 0x274e6f29,
132 0x62870253, 0x151fa040, 0x8cb74774, 0xfb2fe567,
133 0x87d459bf, 0xf04cfbac, 0x69e41c98, 0x1e7cbe8b,
134 0x5bb5d3f1, 0x2c2d71e2, 0xb58596d6, 0xc21d34c5,
135 0x3f174d22, 0x488fef31, 0xd1270805, 0xa6bfaa16,
136 0xe376c76c, 0x94ee657f, 0x0d46824b, 0x7ade2058,
137 0xf9fac3fb, 0x8e6261e8, 0x17ca86dc, 0x605224cf,
138 0x259b49b5, 0x5203eba6, 0xcbab0c92, 0xbc33ae81,
139 0x4139d766, 0x36a17575, 0xaf099241, 0xd8913052,
140 0x9d585d28, 0xeac0ff3b, 0x7368180f, 0x04f0ba1c,
141 0x780b06c4, 0x0f93a4d7, 0x963b43e3, 0xe1a3e1f0,
142 0xa46a8c8a, 0xd3f22e99, 0x4a5ac9ad, 0x3dc26bbe,
143 0xc0c81259, 0xb750b04a, 0x2ef8577e, 0x5960f56d,
144 0x1ca99817, 0x6b313a04, 0xf299dd30, 0x85017f23,
145 0xfb194884, 0x8c81ea97, 0x15290da3, 0x62b1afb0,
146 0x2778c2ca, 0x50e060d9, 0xc94887ed, 0xbed025fe,
147 0x43da5c19, 0x3442fe0a, 0xadea193e, 0xda72bb2d,
148 0x9fbbd657, 0xe8237444, 0x718b9370, 0x06133163,
149 0x7ae88dbb, 0x0d702fa8, 0x94d8c89c, 0xe3406a8f,
150 0xa68907f5, 0xd111a5e6, 0x48b942d2, 0x3f21e0c1,
151 0xc22b9926, 0xb5b33b35, 0x2c1bdc01, 0x5b837e12,
152 0x1e4a1368, 0x69d2b17b, 0xf07a564f, 0x87e2f45c,
153 0xfd3cd404, 0x8aa47617, 0x130c9123, 0x64943330,
154 0x215d5e4a, 0x56c5fc59, 0xcf6d1b6d, 0xb8f5b97e,
155 0x45ffc099, 0x3267628a, 0xabcf85be, 0xdc5727ad,
156 0x999e4ad7, 0xee06e8c4, 0x77ae0ff0, 0x0036ade3,
157 0x7ccd113b, 0x0b55b328, 0x92fd541c, 0xe565f60f,
158 0xa0ac9b75, 0xd7343966, 0x4e9cde52, 0x39047c41,
159 0xc40e05a6, 0xb396a7b5, 0x2a3e4081, 0x5da6e292,
160 0x186f8fe8, 0x6ff72dfb, 0xf65fcacf, 0x81c768dc,
161 0xffdf5f7b, 0x8847fd68, 0x11ef1a5c, 0x6677b84f,
162 0x23bed535, 0x54267726, 0xcd8e9012, 0xba163201,
163 0x471c4be6, 0x3084e9f5, 0xa92c0ec1, 0xdeb4acd2,
164 0x9b7dc1a8, 0xece563bb, 0x754d848f, 0x02d5269c,
165 0x7e2e9a44, 0x09b63857, 0x901edf63, 0xe7867d70,
166 0xa24f100a, 0xd5d7b219, 0x4c7f552d, 0x3be7f73e,
167 0xc6ed8ed9, 0xb1752cca, 0x28ddcbfe, 0x5f4569ed,
168 0x1a8c0497, 0x6d14a684, 0xf4bc41b0, 0x8324e3a3
169 },{
170 0x00000000, 0x7e9241a5, 0x0d526f4f, 0x73c02eea,
171 0x1aa4de9e, 0x64369f3b, 0x17f6b1d1, 0x6964f074,
172 0xc53e5138, 0xbbac109d, 0xc86c3e77, 0xb6fe7fd2,
173 0xdf9a8fa6, 0xa108ce03, 0xd2c8e0e9, 0xac5aa14c,
174 0x8a7da270, 0xf4efe3d5, 0x872fcd3f, 0xf9bd8c9a,
175 0x90d97cee, 0xee4b3d4b, 0x9d8b13a1, 0xe3195204,
176 0x4f43f348, 0x31d1b2ed, 0x42119c07, 0x3c83dda2,
177 0x55e72dd6, 0x2b756c73, 0x58b54299, 0x2627033c,
178 0x14fb44e1, 0x6a690544, 0x19a92bae, 0x673b6a0b,
179 0x0e5f9a7f, 0x70cddbda, 0x030df530, 0x7d9fb495,
180 0xd1c515d9, 0xaf57547c, 0xdc977a96, 0xa2053b33,
181 0xcb61cb47, 0xb5f38ae2, 0xc633a408, 0xb8a1e5ad,
182 0x9e86e691, 0xe014a734, 0x93d489de, 0xed46c87b,
183 0x8422380f, 0xfab079aa, 0x89705740, 0xf7e216e5,
184 0x5bb8b7a9, 0x252af60c, 0x56ead8e6, 0x28789943,
185 0x411c6937, 0x3f8e2892, 0x4c4e0678, 0x32dc47dd,
186 0xd98065c7, 0xa7122462, 0xd4d20a88, 0xaa404b2d,
187 0xc324bb59, 0xbdb6fafc, 0xce76d416, 0xb0e495b3,
188 0x1cbe34ff, 0x622c755a, 0x11ec5bb0, 0x6f7e1a15,
189 0x061aea61, 0x7888abc4, 0x0b48852e, 0x75dac48b,
190 0x53fdc7b7, 0x2d6f8612, 0x5eafa8f8, 0x203de95d,
191 0x49591929, 0x37cb588c, 0x440b7666, 0x3a9937c3,
192 0x96c3968f, 0xe851d72a, 0x9b91f9c0, 0xe503b865,
193 0x8c674811, 0xf2f509b4, 0x8135275e, 0xffa766fb,
194 0xcd7b2126, 0xb3e96083, 0xc0294e69, 0xbebb0fcc,
195 0xd7dfffb8, 0xa94dbe1d, 0xda8d90f7, 0xa41fd152,
196 0x0845701e, 0x76d731bb, 0x05171f51, 0x7b855ef4,
197 0x12e1ae80, 0x6c73ef25, 0x1fb3c1cf, 0x6121806a,
198 0x47068356, 0x3994c2f3, 0x4a54ec19, 0x34c6adbc,
199 0x5da25dc8, 0x23301c6d, 0x50f03287, 0x2e627322,
200 0x8238d26e, 0xfcaa93cb, 0x8f6abd21, 0xf1f8fc84,
201 0x989c0cf0, 0xe60e4d55, 0x95ce63bf, 0xeb5c221a,
202 0x4377278b, 0x3de5662e, 0x4e2548c4, 0x30b70961,
203 0x59d3f915, 0x2741b8b0, 0x5481965a, 0x2a13d7ff,
204 0x864976b3, 0xf8db3716, 0x8b1b19fc, 0xf5895859,
205 0x9ceda82d, 0xe27fe988, 0x91bfc762, 0xef2d86c7,
206 0xc90a85fb, 0xb798c45e, 0xc458eab4, 0xbacaab11,
207 0xd3ae5b65, 0xad3c1ac0, 0xdefc342a, 0xa06e758f,
208 0x0c34d4c3, 0x72a69566, 0x0166bb8c, 0x7ff4fa29,
209 0x16900a5d, 0x68024bf8, 0x1bc26512, 0x655024b7,
210 0x578c636a, 0x291e22cf, 0x5ade0c25, 0x244c4d80,
211 0x4d28bdf4, 0x33bafc51, 0x407ad2bb, 0x3ee8931e,
212 0x92b23252, 0xec2073f7, 0x9fe05d1d, 0xe1721cb8,
213 0x8816eccc, 0xf684ad69, 0x85448383, 0xfbd6c226,
214 0xddf1c11a, 0xa36380bf, 0xd0a3ae55, 0xae31eff0,
215 0xc7551f84, 0xb9c75e21, 0xca0770cb, 0xb495316e,
216 0x18cf9022, 0x665dd187, 0x159dff6d, 0x6b0fbec8,
217 0x026b4ebc, 0x7cf90f19, 0x0f3921f3, 0x71ab6056,
218 0x9af7424c, 0xe46503e9, 0x97a52d03, 0xe9376ca6,
219 0x80539cd2, 0xfec1dd77, 0x8d01f39d, 0xf393b238,
220 0x5fc91374, 0x215b52d1, 0x529b7c3b, 0x2c093d9e,
221 0x456dcdea, 0x3bff8c4f, 0x483fa2a5, 0x36ade300,
222 0x108ae03c, 0x6e18a199, 0x1dd88f73, 0x634aced6,
223 0x0a2e3ea2, 0x74bc7f07, 0x077c51ed, 0x79ee1048,
224 0xd5b4b104, 0xab26f0a1, 0xd8e6de4b, 0xa6749fee,
225 0xcf106f9a, 0xb1822e3f, 0xc24200d5, 0xbcd04170,
226 0x8e0c06ad, 0xf09e4708, 0x835e69e2, 0xfdcc2847,
227 0x94a8d833, 0xea3a9996, 0x99fab77c, 0xe768f6d9,
228 0x4b325795, 0x35a01630, 0x466038da, 0x38f2797f,
229 0x5196890b, 0x2f04c8ae, 0x5cc4e644, 0x2256a7e1,
230 0x0471a4dd, 0x7ae3e578, 0x0923cb92, 0x77b18a37,
231 0x1ed57a43, 0x60473be6, 0x1387150c, 0x6d1554a9,
232 0xc14ff5e5, 0xbfddb440, 0xcc1d9aaa, 0xb28fdb0f,
233 0xdbeb2b7b, 0xa5796ade, 0xd6b94434, 0xa82b0591
234 },{
235 0x00000000, 0xb8aa45dd, 0x812367bf, 0x39892262,
236 0xf331227b, 0x4b9b67a6, 0x721245c4, 0xcab80019,
237 0xe66344f6, 0x5ec9012b, 0x67402349, 0xdfea6694,
238 0x1552668d, 0xadf82350, 0x94710132, 0x2cdb44ef,
239 0x3db164e9, 0x851b2134, 0xbc920356, 0x0438468b,
240 0xce804692, 0x762a034f, 0x4fa3212d, 0xf70964f0,
241 0xdbd2201f, 0x637865c2, 0x5af147a0, 0xe25b027d,
242 0x28e30264, 0x904947b9, 0xa9c065db, 0x116a2006,
243 0x8b1425d7, 0x33be600a, 0x0a374268, 0xb29d07b5,
244 0x782507ac, 0xc08f4271, 0xf9066013, 0x41ac25ce,
245 0x6d776121, 0xd5dd24fc, 0xec54069e, 0x54fe4343,
246 0x9e46435a, 0x26ec0687, 0x1f6524e5, 0xa7cf6138,
247 0xb6a5413e, 0x0e0f04e3, 0x37862681, 0x8f2c635c,
248 0x45946345, 0xfd3e2698, 0xc4b704fa, 0x7c1d4127,
249 0x50c605c8, 0xe86c4015, 0xd1e56277, 0x694f27aa,
250 0xa3f727b3, 0x1b5d626e, 0x22d4400c, 0x9a7e05d1,
251 0xe75fa6ab, 0x5ff5e376, 0x667cc114, 0xded684c9,
252 0x146e84d0, 0xacc4c10d, 0x954de36f, 0x2de7a6b2,
253 0x013ce25d, 0xb996a780, 0x801f85e2, 0x38b5c03f,
254 0xf20dc026, 0x4aa785fb, 0x732ea799, 0xcb84e244,
255 0xdaeec242, 0x6244879f, 0x5bcda5fd, 0xe367e020,
256 0x29dfe039, 0x9175a5e4, 0xa8fc8786, 0x1056c25b,
257 0x3c8d86b4, 0x8427c369, 0xbdaee10b, 0x0504a4d6,
258 0xcfbca4cf, 0x7716e112, 0x4e9fc370, 0xf63586ad,
259 0x6c4b837c, 0xd4e1c6a1, 0xed68e4c3, 0x55c2a11e,
260 0x9f7aa107, 0x27d0e4da, 0x1e59c6b8, 0xa6f38365,
261 0x8a28c78a, 0x32828257, 0x0b0ba035, 0xb3a1e5e8,
262 0x7919e5f1, 0xc1b3a02c, 0xf83a824e, 0x4090c793,
263 0x51fae795, 0xe950a248, 0xd0d9802a, 0x6873c5f7,
264 0xa2cbc5ee, 0x1a618033, 0x23e8a251, 0x9b42e78c,
265 0xb799a363, 0x0f33e6be, 0x36bac4dc, 0x8e108101,
266 0x44a88118, 0xfc02c4c5, 0xc58be6a7, 0x7d21a37a,
267 0x3fc9a052, 0x8763e58f, 0xbeeac7ed, 0x06408230,
268 0xccf88229, 0x7452c7f4, 0x4ddbe596, 0xf571a04b,
269 0xd9aae4a4, 0x6100a179, 0x5889831b, 0xe023c6c6,
270 0x2a9bc6df, 0x92318302, 0xabb8a160, 0x1312e4bd,
271 0x0278c4bb, 0xbad28166, 0x835ba304, 0x3bf1e6d9,
272 0xf149e6c0, 0x49e3a31d, 0x706a817f, 0xc8c0c4a2,
273 0xe41b804d, 0x5cb1c590, 0x6538e7f2, 0xdd92a22f,
274 0x172aa236, 0xaf80e7eb, 0x9609c589, 0x2ea38054,
275 0xb4dd8585, 0x0c77c058, 0x35fee23a, 0x8d54a7e7,
276 0x47eca7fe, 0xff46e223, 0xc6cfc041, 0x7e65859c,
277 0x52bec173, 0xea1484ae, 0xd39da6cc, 0x6b37e311,
278 0xa18fe308, 0x1925a6d5, 0x20ac84b7, 0x9806c16a,
279 0x896ce16c, 0x31c6a4b1, 0x084f86d3, 0xb0e5c30e,
280 0x7a5dc317, 0xc2f786ca, 0xfb7ea4a8, 0x43d4e175,
281 0x6f0fa59a, 0xd7a5e047, 0xee2cc225, 0x568687f8,
282 0x9c3e87e1, 0x2494c23c, 0x1d1de05e, 0xa5b7a583,
283 0xd89606f9, 0x603c4324, 0x59b56146, 0xe11f249b,
284 0x2ba72482, 0x930d615f, 0xaa84433d, 0x122e06e0,
285 0x3ef5420f, 0x865f07d2, 0xbfd625b0, 0x077c606d,
286 0xcdc46074, 0x756e25a9, 0x4ce707cb, 0xf44d4216,
287 0xe5276210, 0x5d8d27cd, 0x640405af, 0xdcae4072,
288 0x1616406b, 0xaebc05b6, 0x973527d4, 0x2f9f6209,
289 0x034426e6, 0xbbee633b, 0x82674159, 0x3acd0484,
290 0xf075049d, 0x48df4140, 0x71566322, 0xc9fc26ff,
291 0x5382232e, 0xeb2866f3, 0xd2a14491, 0x6a0b014c,
292 0xa0b30155, 0x18194488, 0x219066ea, 0x993a2337,
293 0xb5e167d8, 0x0d4b2205, 0x34c20067, 0x8c6845ba,
294 0x46d045a3, 0xfe7a007e, 0xc7f3221c, 0x7f5967c1,
295 0x6e3347c7, 0xd699021a, 0xef102078, 0x57ba65a5,
296 0x9d0265bc, 0x25a82061, 0x1c210203, 0xa48b47de,
297 0x88500331, 0x30fa46ec, 0x0973648e, 0xb1d92153,
298 0x7b61214a, 0xc3cb6497, 0xfa4246f5, 0x42e80328
299 },{
300 0x00000000, 0xac6f1138, 0x58df2270, 0xf4b03348,
301 0xb0be45e0, 0x1cd154d8, 0xe8616790, 0x440e76a8,
302 0x910b67c5, 0x3d6476fd, 0xc9d445b5, 0x65bb548d,
303 0x21b52225, 0x8dda331d, 0x796a0055, 0xd505116d,
304 0xd361228f, 0x7f0e33b7, 0x8bbe00ff, 0x27d111c7,
305 0x63df676f, 0xcfb07657, 0x3b00451f, 0x976f5427,
306 0x426a454a, 0xee055472, 0x1ab5673a, 0xb6da7602,
307 0xf2d400aa, 0x5ebb1192, 0xaa0b22da, 0x066433e2,
308 0x57b5a81b, 0xfbdab923, 0x0f6a8a6b, 0xa3059b53,
309 0xe70bedfb, 0x4b64fcc3, 0xbfd4cf8b, 0x13bbdeb3,
310 0xc6becfde, 0x6ad1dee6, 0x9e61edae, 0x320efc96,
311 0x76008a3e, 0xda6f9b06, 0x2edfa84e, 0x82b0b976,
312 0x84d48a94, 0x28bb9bac, 0xdc0ba8e4, 0x7064b9dc,
313 0x346acf74, 0x9805de4c, 0x6cb5ed04, 0xc0dafc3c,
314 0x15dfed51, 0xb9b0fc69, 0x4d00cf21, 0xe16fde19,
315 0xa561a8b1, 0x090eb989, 0xfdbe8ac1, 0x51d19bf9,
316 0xae6a5137, 0x0205400f, 0xf6b57347, 0x5ada627f,
317 0x1ed414d7, 0xb2bb05ef, 0x460b36a7, 0xea64279f,
318 0x3f6136f2, 0x930e27ca, 0x67be1482, 0xcbd105ba,
319 0x8fdf7312, 0x23b0622a, 0xd7005162, 0x7b6f405a,
320 0x7d0b73b8, 0xd1646280, 0x25d451c8, 0x89bb40f0,
321 0xcdb53658, 0x61da2760, 0x956a1428, 0x39050510,
322 0xec00147d, 0x406f0545, 0xb4df360d, 0x18b02735,
323 0x5cbe519d, 0xf0d140a5, 0x046173ed, 0xa80e62d5,
324 0xf9dff92c, 0x55b0e814, 0xa100db5c, 0x0d6fca64,
325 0x4961bccc, 0xe50eadf4, 0x11be9ebc, 0xbdd18f84,
326 0x68d49ee9, 0xc4bb8fd1, 0x300bbc99, 0x9c64ada1,
327 0xd86adb09, 0x7405ca31, 0x80b5f979, 0x2cdae841,
328 0x2abedba3, 0x86d1ca9b, 0x7261f9d3, 0xde0ee8eb,
329 0x9a009e43, 0x366f8f7b, 0xc2dfbc33, 0x6eb0ad0b,
330 0xbbb5bc66, 0x17daad5e, 0xe36a9e16, 0x4f058f2e,
331 0x0b0bf986, 0xa764e8be, 0x53d4dbf6, 0xffbbcace,
332 0x5cd5a26e, 0xf0bab356, 0x040a801e, 0xa8659126,
333 0xec6be78e, 0x4004f6b6, 0xb4b4c5fe, 0x18dbd4c6,
334 0xcddec5ab, 0x61b1d493, 0x9501e7db, 0x396ef6e3,
335 0x7d60804b, 0xd10f9173, 0x25bfa23b, 0x89d0b303,
336 0x8fb480e1, 0x23db91d9, 0xd76ba291, 0x7b04b3a9,
337 0x3f0ac501, 0x9365d439, 0x67d5e771, 0xcbbaf649,
338 0x1ebfe724, 0xb2d0f61c, 0x4660c554, 0xea0fd46c,
339 0xae01a2c4, 0x026eb3fc, 0xf6de80b4, 0x5ab1918c,
340 0x0b600a75, 0xa70f1b4d, 0x53bf2805, 0xffd0393d,
341 0xbbde4f95, 0x17b15ead, 0xe3016de5, 0x4f6e7cdd,
342 0x9a6b6db0, 0x36047c88, 0xc2b44fc0, 0x6edb5ef8,
343 0x2ad52850, 0x86ba3968, 0x720a0a20, 0xde651b18,
344 0xd80128fa, 0x746e39c2, 0x80de0a8a, 0x2cb11bb2,
345 0x68bf6d1a, 0xc4d07c22, 0x30604f6a, 0x9c0f5e52,
346 0x490a4f3f, 0xe5655e07, 0x11d56d4f, 0xbdba7c77,
347 0xf9b40adf, 0x55db1be7, 0xa16b28af, 0x0d043997,
348 0xf2bff359, 0x5ed0e261, 0xaa60d129, 0x060fc011,
349 0x4201b6b9, 0xee6ea781, 0x1ade94c9, 0xb6b185f1,
350 0x63b4949c, 0xcfdb85a4, 0x3b6bb6ec, 0x9704a7d4,
351 0xd30ad17c, 0x7f65c044, 0x8bd5f30c, 0x27bae234,
352 0x21ded1d6, 0x8db1c0ee, 0x7901f3a6, 0xd56ee29e,
353 0x91609436, 0x3d0f850e, 0xc9bfb646, 0x65d0a77e,
354 0xb0d5b613, 0x1cbaa72b, 0xe80a9463, 0x4465855b,
355 0x006bf3f3, 0xac04e2cb, 0x58b4d183, 0xf4dbc0bb,
356 0xa50a5b42, 0x09654a7a, 0xfdd57932, 0x51ba680a,
357 0x15b41ea2, 0xb9db0f9a, 0x4d6b3cd2, 0xe1042dea,
358 0x34013c87, 0x986e2dbf, 0x6cde1ef7, 0xc0b10fcf,
359 0x84bf7967, 0x28d0685f, 0xdc605b17, 0x700f4a2f,
360 0x766b79cd, 0xda0468f5, 0x2eb45bbd, 0x82db4a85,
361 0xc6d53c2d, 0x6aba2d15, 0x9e0a1e5d, 0x32650f65,
362 0xe7601e08, 0x4b0f0f30, 0xbfbf3c78, 0x13d02d40,
363 0x57de5be8, 0xfbb14ad0, 0x0f017998, 0xa36e68a0
364 },{
365 0x00000000, 0x196b30ef, 0xc3a08cdb, 0xdacbbc34,
366 0x7737f5b2, 0x6e5cc55d, 0xb4977969, 0xadfc4986,
367 0x1f180660, 0x0673368f, 0xdcb88abb, 0xc5d3ba54,
368 0x682ff3d2, 0x7144c33d, 0xab8f7f09, 0xb2e44fe6,
369 0x3e300cc0, 0x275b3c2f, 0xfd90801b, 0xe4fbb0f4,
370 0x4907f972, 0x506cc99d, 0x8aa775a9, 0x93cc4546,
371 0x21280aa0, 0x38433a4f, 0xe288867b, 0xfbe3b694,
372 0x561fff12, 0x4f74cffd, 0x95bf73c9, 0x8cd44326,
373 0x8d16f485, 0x947dc46a, 0x4eb6785e, 0x57dd48b1,
374 0xfa210137, 0xe34a31d8, 0x39818dec, 0x20eabd03,
375 0x920ef2e5, 0x8b65c20a, 0x51ae7e3e, 0x48c54ed1,
376 0xe5390757, 0xfc5237b8, 0x26998b8c, 0x3ff2bb63,
377 0xb326f845, 0xaa4dc8aa, 0x7086749e, 0x69ed4471,
378 0xc4110df7, 0xdd7a3d18, 0x07b1812c, 0x1edab1c3,
379 0xac3efe25, 0xb555ceca, 0x6f9e72fe, 0x76f54211,
380 0xdb090b97, 0xc2623b78, 0x18a9874c, 0x01c2b7a3,
381 0xeb5b040e, 0xf23034e1, 0x28fb88d5, 0x3190b83a,
382 0x9c6cf1bc, 0x8507c153, 0x5fcc7d67, 0x46a74d88,
383 0xf443026e, 0xed283281, 0x37e38eb5, 0x2e88be5a,
384 0x8374f7dc, 0x9a1fc733, 0x40d47b07, 0x59bf4be8,
385 0xd56b08ce, 0xcc003821, 0x16cb8415, 0x0fa0b4fa,
386 0xa25cfd7c, 0xbb37cd93, 0x61fc71a7, 0x78974148,
387 0xca730eae, 0xd3183e41, 0x09d38275, 0x10b8b29a,
388 0xbd44fb1c, 0xa42fcbf3, 0x7ee477c7, 0x678f4728,
389 0x664df08b, 0x7f26c064, 0xa5ed7c50, 0xbc864cbf,
390 0x117a0539, 0x081135d6, 0xd2da89e2, 0xcbb1b90d,
391 0x7955f6eb, 0x603ec604, 0xbaf57a30, 0xa39e4adf,
392 0x0e620359, 0x170933b6, 0xcdc28f82, 0xd4a9bf6d,
393 0x587dfc4b, 0x4116cca4, 0x9bdd7090, 0x82b6407f,
394 0x2f4a09f9, 0x36213916, 0xecea8522, 0xf581b5cd,
395 0x4765fa2b, 0x5e0ecac4, 0x84c576f0, 0x9dae461f,
396 0x30520f99, 0x29393f76, 0xf3f28342, 0xea99b3ad,
397 0xd6b7081c, 0xcfdc38f3, 0x151784c7, 0x0c7cb428,
398 0xa180fdae, 0xb8ebcd41, 0x62207175, 0x7b4b419a,
399 0xc9af0e7c, 0xd0c43e93, 0x0a0f82a7, 0x1364b248,
400 0xbe98fbce, 0xa7f3cb21, 0x7d387715, 0x645347fa,
401 0xe88704dc, 0xf1ec3433, 0x2b278807, 0x324cb8e8,
402 0x9fb0f16e, 0x86dbc181, 0x5c107db5, 0x457b4d5a,
403 0xf79f02bc, 0xeef43253, 0x343f8e67, 0x2d54be88,
404 0x80a8f70e, 0x99c3c7e1, 0x43087bd5, 0x5a634b3a,
405 0x5ba1fc99, 0x42cacc76, 0x98017042, 0x816a40ad,
406 0x2c96092b, 0x35fd39c4, 0xef3685f0, 0xf65db51f,
407 0x44b9faf9, 0x5dd2ca16, 0x87197622, 0x9e7246cd,
408 0x338e0f4b, 0x2ae53fa4, 0xf02e8390, 0xe945b37f,
409 0x6591f059, 0x7cfac0b6, 0xa6317c82, 0xbf5a4c6d,
410 0x12a605eb, 0x0bcd3504, 0xd1068930, 0xc86db9df,
411 0x7a89f639, 0x63e2c6d6, 0xb9297ae2, 0xa0424a0d,
412 0x0dbe038b, 0x14d53364, 0xce1e8f50, 0xd775bfbf,
413 0x3dec0c12, 0x24873cfd, 0xfe4c80c9, 0xe727b026,
414 0x4adbf9a0, 0x53b0c94f, 0x897b757b, 0x90104594,
415 0x22f40a72, 0x3b9f3a9d, 0xe15486a9, 0xf83fb646,
416 0x55c3ffc0, 0x4ca8cf2f, 0x9663731b, 0x8f0843f4,
417 0x03dc00d2, 0x1ab7303d, 0xc07c8c09, 0xd917bce6,
418 0x74ebf560, 0x6d80c58f, 0xb74b79bb, 0xae204954,
419 0x1cc406b2, 0x05af365d, 0xdf648a69, 0xc60fba86,
420 0x6bf3f300, 0x7298c3ef, 0xa8537fdb, 0xb1384f34,
421 0xb0faf897, 0xa991c878, 0x735a744c, 0x6a3144a3,
422 0xc7cd0d25, 0xdea63dca, 0x046d81fe, 0x1d06b111,
423 0xafe2fef7, 0xb689ce18, 0x6c42722c, 0x752942c3,
424 0xd8d50b45, 0xc1be3baa, 0x1b75879e, 0x021eb771,
425 0x8ecaf457, 0x97a1c4b8, 0x4d6a788c, 0x54014863,
426 0xf9fd01e5, 0xe096310a, 0x3a5d8d3e, 0x2336bdd1,
427 0x91d2f237, 0x88b9c2d8, 0x52727eec, 0x4b194e03,
428 0xe6e50785, 0xff8e376a, 0x25458b5e, 0x3c2ebbb1
429 },{
430 0x00000000, 0xc82c0368, 0x905906d0, 0x587505b8,
431 0xd1c5e0a5, 0x19e9e3cd, 0x419ce675, 0x89b0e51d,
432 0x53fd2d4e, 0x9bd12e26, 0xc3a42b9e, 0x0b8828f6,
433 0x8238cdeb, 0x4a14ce83, 0x1261cb3b, 0xda4dc853,
434 0xa6fa5b9c, 0x6ed658f4, 0x36a35d4c, 0xfe8f5e24,
435 0x773fbb39, 0xbf13b851, 0xe766bde9, 0x2f4abe81,
436 0xf50776d2, 0x3d2b75ba, 0x655e7002, 0xad72736a,
437 0x24c29677, 0xecee951f, 0xb49b90a7, 0x7cb793cf,
438 0xbd835b3d, 0x75af5855, 0x2dda5ded, 0xe5f65e85,
439 0x6c46bb98, 0xa46ab8f0, 0xfc1fbd48, 0x3433be20,
440 0xee7e7673, 0x2652751b, 0x7e2770a3, 0xb60b73cb,
441 0x3fbb96d6, 0xf79795be, 0xafe29006, 0x67ce936e,
442 0x1b7900a1, 0xd35503c9, 0x8b200671, 0x430c0519,
443 0xcabce004, 0x0290e36c, 0x5ae5e6d4, 0x92c9e5bc,
444 0x48842def, 0x80a82e87, 0xd8dd2b3f, 0x10f12857,
445 0x9941cd4a, 0x516dce22, 0x0918cb9a, 0xc134c8f2,
446 0x7a07b77a, 0xb22bb412, 0xea5eb1aa, 0x2272b2c2,
447 0xabc257df, 0x63ee54b7, 0x3b9b510f, 0xf3b75267,
448 0x29fa9a34, 0xe1d6995c, 0xb9a39ce4, 0x718f9f8c,
449 0xf83f7a91, 0x301379f9, 0x68667c41, 0xa04a7f29,
450 0xdcfdece6, 0x14d1ef8e, 0x4ca4ea36, 0x8488e95e,
451 0x0d380c43, 0xc5140f2b, 0x9d610a93, 0x554d09fb,
452 0x8f00c1a8, 0x472cc2c0, 0x1f59c778, 0xd775c410,
453 0x5ec5210d, 0x96e92265, 0xce9c27dd, 0x06b024b5,
454 0xc784ec47, 0x0fa8ef2f, 0x57ddea97, 0x9ff1e9ff,
455 0x16410ce2, 0xde6d0f8a, 0x86180a32, 0x4e34095a,
456 0x9479c109, 0x5c55c261, 0x0420c7d9, 0xcc0cc4b1,
457 0x45bc21ac, 0x8d9022c4, 0xd5e5277c, 0x1dc92414,
458 0x617eb7db, 0xa952b4b3, 0xf127b10b, 0x390bb263,
459 0xb0bb577e, 0x78975416, 0x20e251ae, 0xe8ce52c6,
460 0x32839a95, 0xfaaf99fd, 0xa2da9c45, 0x6af69f2d,
461 0xe3467a30, 0x2b6a7958, 0x731f7ce0, 0xbb337f88,
462 0xf40e6ef5, 0x3c226d9d, 0x64576825, 0xac7b6b4d,
463 0x25cb8e50, 0xede78d38, 0xb5928880, 0x7dbe8be8,
464 0xa7f343bb, 0x6fdf40d3, 0x37aa456b, 0xff864603,
465 0x7636a31e, 0xbe1aa076, 0xe66fa5ce, 0x2e43a6a6,
466 0x52f43569, 0x9ad83601, 0xc2ad33b9, 0x0a8130d1,
467 0x8331d5cc, 0x4b1dd6a4, 0x1368d31c, 0xdb44d074,
468 0x01091827, 0xc9251b4f, 0x91501ef7, 0x597c1d9f,
469 0xd0ccf882, 0x18e0fbea, 0x4095fe52, 0x88b9fd3a,
470 0x498d35c8, 0x81a136a0, 0xd9d43318, 0x11f83070,
471 0x9848d56d, 0x5064d605, 0x0811d3bd, 0xc03dd0d5,
472 0x1a701886, 0xd25c1bee, 0x8a291e56, 0x42051d3e,
473 0xcbb5f823, 0x0399fb4b, 0x5becfef3, 0x93c0fd9b,
474 0xef776e54, 0x275b6d3c, 0x7f2e6884, 0xb7026bec,
475 0x3eb28ef1, 0xf69e8d99, 0xaeeb8821, 0x66c78b49,
476 0xbc8a431a, 0x74a64072, 0x2cd345ca, 0xe4ff46a2,
477 0x6d4fa3bf, 0xa563a0d7, 0xfd16a56f, 0x353aa607,
478 0x8e09d98f, 0x4625dae7, 0x1e50df5f, 0xd67cdc37,
479 0x5fcc392a, 0x97e03a42, 0xcf953ffa, 0x07b93c92,
480 0xddf4f4c1, 0x15d8f7a9, 0x4dadf211, 0x8581f179,
481 0x0c311464, 0xc41d170c, 0x9c6812b4, 0x544411dc,
482 0x28f38213, 0xe0df817b, 0xb8aa84c3, 0x708687ab,
483 0xf93662b6, 0x311a61de, 0x696f6466, 0xa143670e,
484 0x7b0eaf5d, 0xb322ac35, 0xeb57a98d, 0x237baae5,
485 0xaacb4ff8, 0x62e74c90, 0x3a924928, 0xf2be4a40,
486 0x338a82b2, 0xfba681da, 0xa3d38462, 0x6bff870a,
487 0xe24f6217, 0x2a63617f, 0x721664c7, 0xba3a67af,
488 0x6077affc, 0xa85bac94, 0xf02ea92c, 0x3802aa44,
489 0xb1b24f59, 0x799e4c31, 0x21eb4989, 0xe9c74ae1,
490 0x9570d92e, 0x5d5cda46, 0x0529dffe, 0xcd05dc96,
491 0x44b5398b, 0x8c993ae3, 0xd4ec3f5b, 0x1cc03c33,
492 0xc68df460, 0x0ea1f708, 0x56d4f2b0, 0x9ef8f1d8,
493 0x174814c5, 0xdf6417ad, 0x87111215, 0x4f3d117d
494 },{
495 0x00000000, 0x277d3c49, 0x4efa7892, 0x698744db,
496 0x6d821d21, 0x4aff2168, 0x237865b3, 0x040559fa,
497 0xda043b42, 0xfd79070b, 0x94fe43d0, 0xb3837f99,
498 0xb7862663, 0x90fb1a2a, 0xf97c5ef1, 0xde0162b8,
499 0xb4097684, 0x93744acd, 0xfaf30e16, 0xdd8e325f,
500 0xd98b6ba5, 0xfef657ec, 0x97711337, 0xb00c2f7e,
501 0x6e0d4dc6, 0x4970718f, 0x20f73554, 0x078a091d,
502 0x038f50e7, 0x24f26cae, 0x4d752875, 0x6a08143c,
503 0x9965000d, 0xbe183c44, 0xd79f789f, 0xf0e244d6,
504 0xf4e71d2c, 0xd39a2165, 0xba1d65be, 0x9d6059f7,
505 0x43613b4f, 0x641c0706, 0x0d9b43dd, 0x2ae67f94,
506 0x2ee3266e, 0x099e1a27, 0x60195efc, 0x476462b5,
507 0x2d6c7689, 0x0a114ac0, 0x63960e1b, 0x44eb3252,
508 0x40ee6ba8, 0x679357e1, 0x0e14133a, 0x29692f73,
509 0xf7684dcb, 0xd0157182, 0xb9923559, 0x9eef0910,
510 0x9aea50ea, 0xbd976ca3, 0xd4102878, 0xf36d1431,
511 0x32cb001a, 0x15b63c53, 0x7c317888, 0x5b4c44c1,
512 0x5f491d3b, 0x78342172, 0x11b365a9, 0x36ce59e0,
513 0xe8cf3b58, 0xcfb20711, 0xa63543ca, 0x81487f83,
514 0x854d2679, 0xa2301a30, 0xcbb75eeb, 0xecca62a2,
515 0x86c2769e, 0xa1bf4ad7, 0xc8380e0c, 0xef453245,
516 0xeb406bbf, 0xcc3d57f6, 0xa5ba132d, 0x82c72f64,
517 0x5cc64ddc, 0x7bbb7195, 0x123c354e, 0x35410907,
518 0x314450fd, 0x16396cb4, 0x7fbe286f, 0x58c31426,
519 0xabae0017, 0x8cd33c5e, 0xe5547885, 0xc22944cc,
520 0xc62c1d36, 0xe151217f, 0x88d665a4, 0xafab59ed,
521 0x71aa3b55, 0x56d7071c, 0x3f5043c7, 0x182d7f8e,
522 0x1c282674, 0x3b551a3d, 0x52d25ee6, 0x75af62af,
523 0x1fa77693, 0x38da4ada, 0x515d0e01, 0x76203248,
524 0x72256bb2, 0x555857fb, 0x3cdf1320, 0x1ba22f69,
525 0xc5a34dd1, 0xe2de7198, 0x8b593543, 0xac24090a,
526 0xa82150f0, 0x8f5c6cb9, 0xe6db2862, 0xc1a6142b,
527 0x64960134, 0x43eb3d7d, 0x2a6c79a6, 0x0d1145ef,
528 0x09141c15, 0x2e69205c, 0x47ee6487, 0x609358ce,
529 0xbe923a76, 0x99ef063f, 0xf06842e4, 0xd7157ead,
530 0xd3102757, 0xf46d1b1e, 0x9dea5fc5, 0xba97638c,
531 0xd09f77b0, 0xf7e24bf9, 0x9e650f22, 0xb918336b,
532 0xbd1d6a91, 0x9a6056d8, 0xf3e71203, 0xd49a2e4a,
533 0x0a9b4cf2, 0x2de670bb, 0x44613460, 0x631c0829,
534 0x671951d3, 0x40646d9a, 0x29e32941, 0x0e9e1508,
535 0xfdf30139, 0xda8e3d70, 0xb30979ab, 0x947445e2,
536 0x90711c18, 0xb70c2051, 0xde8b648a, 0xf9f658c3,
537 0x27f73a7b, 0x008a0632, 0x690d42e9, 0x4e707ea0,
538 0x4a75275a, 0x6d081b13, 0x048f5fc8, 0x23f26381,
539 0x49fa77bd, 0x6e874bf4, 0x07000f2f, 0x207d3366,
540 0x24786a9c, 0x030556d5, 0x6a82120e, 0x4dff2e47,
541 0x93fe4cff, 0xb48370b6, 0xdd04346d, 0xfa790824,
542 0xfe7c51de, 0xd9016d97, 0xb086294c, 0x97fb1505,
543 0x565d012e, 0x71203d67, 0x18a779bc, 0x3fda45f5,
544 0x3bdf1c0f, 0x1ca22046, 0x7525649d, 0x525858d4,
545 0x8c593a6c, 0xab240625, 0xc2a342fe, 0xe5de7eb7,
546 0xe1db274d, 0xc6a61b04, 0xaf215fdf, 0x885c6396,
547 0xe25477aa, 0xc5294be3, 0xacae0f38, 0x8bd33371,
548 0x8fd66a8b, 0xa8ab56c2, 0xc12c1219, 0xe6512e50,
549 0x38504ce8, 0x1f2d70a1, 0x76aa347a, 0x51d70833,
550 0x55d251c9, 0x72af6d80, 0x1b28295b, 0x3c551512,
551 0xcf380123, 0xe8453d6a, 0x81c279b1, 0xa6bf45f8,
552 0xa2ba1c02, 0x85c7204b, 0xec406490, 0xcb3d58d9,
553 0x153c3a61, 0x32410628, 0x5bc642f3, 0x7cbb7eba,
554 0x78be2740, 0x5fc31b09, 0x36445fd2, 0x1139639b,
555 0x7b3177a7, 0x5c4c4bee, 0x35cb0f35, 0x12b6337c,
556 0x16b36a86, 0x31ce56cf, 0x58491214, 0x7f342e5d,
557 0xa1354ce5, 0x864870ac, 0xefcf3477, 0xc8b2083e,
558 0xccb751c4, 0xebca6d8d, 0x824d2956, 0xa530151f
559 }
560 #else
561 {
562 0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4,
563 0xc79a971f, 0x35f1141c, 0x26a1e7e8, 0xd4ca64eb,
564 0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b,
565 0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24,
566 0x105ec76f, 0xe235446c, 0xf165b798, 0x030e349b,
567 0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384,
568 0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54,
569 0x5d1d08bf, 0xaf768bbc, 0xbc267848, 0x4e4dfb4b,
570 0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a,
571 0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35,
572 0xaa64d611, 0x580f5512, 0x4b5fa6e6, 0xb93425e5,
573 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa,
574 0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45,
575 0xf779deae, 0x05125dad, 0x1642ae59, 0xe4292d5a,
576 0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a,
577 0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595,
578 0x417b1dbc, 0xb3109ebf, 0xa0406d4b, 0x522bee48,
579 0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957,
580 0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687,
581 0x0c38d26c, 0xfe53516f, 0xed03a29b, 0x1f682198,
582 0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927,
583 0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38,
584 0xdbfc821c, 0x2997011f, 0x3ac7f2eb, 0xc8ac71e8,
585 0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7,
586 0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096,
587 0xa65c047d, 0x5437877e, 0x4767748a, 0xb50cf789,
588 0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859,
589 0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46,
590 0x7198540d, 0x83f3d70e, 0x90a324fa, 0x62c8a7f9,
591 0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6,
592 0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36,
593 0x3cdb9bdd, 0xceb018de, 0xdde0eb2a, 0x2f8b6829,
594 0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c,
595 0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93,
596 0x082f63b7, 0xfa44e0b4, 0xe9141340, 0x1b7f9043,
597 0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c,
598 0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3,
599 0x55326b08, 0xa759e80b, 0xb4091bff, 0x466298fc,
600 0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c,
601 0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033,
602 0xa24bb5a6, 0x502036a5, 0x4370c551, 0xb11b4652,
603 0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d,
604 0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d,
605 0xef087a76, 0x1d63f975, 0x0e330a81, 0xfc588982,
606 0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d,
607 0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622,
608 0x38cc2a06, 0xcaa7a905, 0xd9f75af1, 0x2b9cd9f2,
609 0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed,
610 0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530,
611 0x0417b1db, 0xf67c32d8, 0xe52cc12c, 0x1747422f,
612 0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff,
613 0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0,
614 0xd3d3e1ab, 0x21b862a8, 0x32e8915c, 0xc083125f,
615 0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540,
616 0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90,
617 0x9e902e7b, 0x6cfbad78, 0x7fab5e8c, 0x8dc0dd8f,
618 0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee,
619 0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1,
620 0x69e9f0d5, 0x9b8273d6, 0x88d28022, 0x7ab90321,
621 0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e,
622 0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81,
623 0x34f4f86a, 0xc69f7b69, 0xd5cf889d, 0x27a40b9e,
624 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e,
625 0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351
626 },{
627 0x00000000, 0x13a29877, 0x274530ee, 0x34e7a899,
628 0x4e8a61dc, 0x5d28f9ab, 0x69cf5132, 0x7a6dc945,
629 0x9d14c3b8, 0x8eb65bcf, 0xba51f356, 0xa9f36b21,
630 0xd39ea264, 0xc03c3a13, 0xf4db928a, 0xe7790afd,
631 0x3fc5f181, 0x2c6769f6, 0x1880c16f, 0x0b225918,
632 0x714f905d, 0x62ed082a, 0x560aa0b3, 0x45a838c4,
633 0xa2d13239, 0xb173aa4e, 0x859402d7, 0x96369aa0,
634 0xec5b53e5, 0xfff9cb92, 0xcb1e630b, 0xd8bcfb7c,
635 0x7f8be302, 0x6c297b75, 0x58ced3ec, 0x4b6c4b9b,
636 0x310182de, 0x22a31aa9, 0x1644b230, 0x05e62a47,
637 0xe29f20ba, 0xf13db8cd, 0xc5da1054, 0xd6788823,
638 0xac154166, 0xbfb7d911, 0x8b507188, 0x98f2e9ff,
639 0x404e1283, 0x53ec8af4, 0x670b226d, 0x74a9ba1a,
640 0x0ec4735f, 0x1d66eb28, 0x298143b1, 0x3a23dbc6,
641 0xdd5ad13b, 0xcef8494c, 0xfa1fe1d5, 0xe9bd79a2,
642 0x93d0b0e7, 0x80722890, 0xb4958009, 0xa737187e,
643 0xff17c604, 0xecb55e73, 0xd852f6ea, 0xcbf06e9d,
644 0xb19da7d8, 0xa23f3faf, 0x96d89736, 0x857a0f41,
645 0x620305bc, 0x71a19dcb, 0x45463552, 0x56e4ad25,
646 0x2c896460, 0x3f2bfc17, 0x0bcc548e, 0x186eccf9,
647 0xc0d23785, 0xd370aff2, 0xe797076b, 0xf4359f1c,
648 0x8e585659, 0x9dface2e, 0xa91d66b7, 0xbabffec0,
649 0x5dc6f43d, 0x4e646c4a, 0x7a83c4d3, 0x69215ca4,
650 0x134c95e1, 0x00ee0d96, 0x3409a50f, 0x27ab3d78,
651 0x809c2506, 0x933ebd71, 0xa7d915e8, 0xb47b8d9f,
652 0xce1644da, 0xddb4dcad, 0xe9537434, 0xfaf1ec43,
653 0x1d88e6be, 0x0e2a7ec9, 0x3acdd650, 0x296f4e27,
654 0x53028762, 0x40a01f15, 0x7447b78c, 0x67e52ffb,
655 0xbf59d487, 0xacfb4cf0, 0x981ce469, 0x8bbe7c1e,
656 0xf1d3b55b, 0xe2712d2c, 0xd69685b5, 0xc5341dc2,
657 0x224d173f, 0x31ef8f48, 0x050827d1, 0x16aabfa6,
658 0x6cc776e3, 0x7f65ee94, 0x4b82460d, 0x5820de7a,
659 0xfbc3faf9, 0xe861628e, 0xdc86ca17, 0xcf245260,
660 0xb5499b25, 0xa6eb0352, 0x920cabcb, 0x81ae33bc,
661 0x66d73941, 0x7575a136, 0x419209af, 0x523091d8,
662 0x285d589d, 0x3bffc0ea, 0x0f186873, 0x1cbaf004,
663 0xc4060b78, 0xd7a4930f, 0xe3433b96, 0xf0e1a3e1,
664 0x8a8c6aa4, 0x992ef2d3, 0xadc95a4a, 0xbe6bc23d,
665 0x5912c8c0, 0x4ab050b7, 0x7e57f82e, 0x6df56059,
666 0x1798a91c, 0x043a316b, 0x30dd99f2, 0x237f0185,
667 0x844819fb, 0x97ea818c, 0xa30d2915, 0xb0afb162,
668 0xcac27827, 0xd960e050, 0xed8748c9, 0xfe25d0be,
669 0x195cda43, 0x0afe4234, 0x3e19eaad, 0x2dbb72da,
670 0x57d6bb9f, 0x447423e8, 0x70938b71, 0x63311306,
671 0xbb8de87a, 0xa82f700d, 0x9cc8d894, 0x8f6a40e3,
672 0xf50789a6, 0xe6a511d1, 0xd242b948, 0xc1e0213f,
673 0x26992bc2, 0x353bb3b5, 0x01dc1b2c, 0x127e835b,
674 0x68134a1e, 0x7bb1d269, 0x4f567af0, 0x5cf4e287,
675 0x04d43cfd, 0x1776a48a, 0x23910c13, 0x30339464,
676 0x4a5e5d21, 0x59fcc556, 0x6d1b6dcf, 0x7eb9f5b8,
677 0x99c0ff45, 0x8a626732, 0xbe85cfab, 0xad2757dc,
678 0xd74a9e99, 0xc4e806ee, 0xf00fae77, 0xe3ad3600,
679 0x3b11cd7c, 0x28b3550b, 0x1c54fd92, 0x0ff665e5,
680 0x759baca0, 0x663934d7, 0x52de9c4e, 0x417c0439,
681 0xa6050ec4, 0xb5a796b3, 0x81403e2a, 0x92e2a65d,
682 0xe88f6f18, 0xfb2df76f, 0xcfca5ff6, 0xdc68c781,
683 0x7b5fdfff, 0x68fd4788, 0x5c1aef11, 0x4fb87766,
684 0x35d5be23, 0x26772654, 0x12908ecd, 0x013216ba,
685 0xe64b1c47, 0xf5e98430, 0xc10e2ca9, 0xd2acb4de,
686 0xa8c17d9b, 0xbb63e5ec, 0x8f844d75, 0x9c26d502,
687 0x449a2e7e, 0x5738b609, 0x63df1e90, 0x707d86e7,
688 0x0a104fa2, 0x19b2d7d5, 0x2d557f4c, 0x3ef7e73b,
689 0xd98eedc6, 0xca2c75b1, 0xfecbdd28, 0xed69455f,
690 0x97048c1a, 0x84a6146d, 0xb041bcf4, 0xa3e32483
691 },{
692 0x00000000, 0xa541927e, 0x4f6f520d, 0xea2ec073,
693 0x9edea41a, 0x3b9f3664, 0xd1b1f617, 0x74f06469,
694 0x38513ec5, 0x9d10acbb, 0x773e6cc8, 0xd27ffeb6,
695 0xa68f9adf, 0x03ce08a1, 0xe9e0c8d2, 0x4ca15aac,
696 0x70a27d8a, 0xd5e3eff4, 0x3fcd2f87, 0x9a8cbdf9,
697 0xee7cd990, 0x4b3d4bee, 0xa1138b9d, 0x045219e3,
698 0x48f3434f, 0xedb2d131, 0x079c1142, 0xa2dd833c,
699 0xd62de755, 0x736c752b, 0x9942b558, 0x3c032726,
700 0xe144fb14, 0x4405696a, 0xae2ba919, 0x0b6a3b67,
701 0x7f9a5f0e, 0xdadbcd70, 0x30f50d03, 0x95b49f7d,
702 0xd915c5d1, 0x7c5457af, 0x967a97dc, 0x333b05a2,
703 0x47cb61cb, 0xe28af3b5, 0x08a433c6, 0xade5a1b8,
704 0x91e6869e, 0x34a714e0, 0xde89d493, 0x7bc846ed,
705 0x0f382284, 0xaa79b0fa, 0x40577089, 0xe516e2f7,
706 0xa9b7b85b, 0x0cf62a25, 0xe6d8ea56, 0x43997828,
707 0x37691c41, 0x92288e3f, 0x78064e4c, 0xdd47dc32,
708 0xc76580d9, 0x622412a7, 0x880ad2d4, 0x2d4b40aa,
709 0x59bb24c3, 0xfcfab6bd, 0x16d476ce, 0xb395e4b0,
710 0xff34be1c, 0x5a752c62, 0xb05bec11, 0x151a7e6f,
711 0x61ea1a06, 0xc4ab8878, 0x2e85480b, 0x8bc4da75,
712 0xb7c7fd53, 0x12866f2d, 0xf8a8af5e, 0x5de93d20,
713 0x29195949, 0x8c58cb37, 0x66760b44, 0xc337993a,
714 0x8f96c396, 0x2ad751e8, 0xc0f9919b, 0x65b803e5,
715 0x1148678c, 0xb409f5f2, 0x5e273581, 0xfb66a7ff,
716 0x26217bcd, 0x8360e9b3, 0x694e29c0, 0xcc0fbbbe,
717 0xb8ffdfd7, 0x1dbe4da9, 0xf7908dda, 0x52d11fa4,
718 0x1e704508, 0xbb31d776, 0x511f1705, 0xf45e857b,
719 0x80aee112, 0x25ef736c, 0xcfc1b31f, 0x6a802161,
720 0x56830647, 0xf3c29439, 0x19ec544a, 0xbcadc634,
721 0xc85da25d, 0x6d1c3023, 0x8732f050, 0x2273622e,
722 0x6ed23882, 0xcb93aafc, 0x21bd6a8f, 0x84fcf8f1,
723 0xf00c9c98, 0x554d0ee6, 0xbf63ce95, 0x1a225ceb,
724 0x8b277743, 0x2e66e53d, 0xc448254e, 0x6109b730,
725 0x15f9d359, 0xb0b84127, 0x5a968154, 0xffd7132a,
726 0xb3764986, 0x1637dbf8, 0xfc191b8b, 0x595889f5,
727 0x2da8ed9c, 0x88e97fe2, 0x62c7bf91, 0xc7862def,
728 0xfb850ac9, 0x5ec498b7, 0xb4ea58c4, 0x11abcaba,
729 0x655baed3, 0xc01a3cad, 0x2a34fcde, 0x8f756ea0,
730 0xc3d4340c, 0x6695a672, 0x8cbb6601, 0x29faf47f,
731 0x5d0a9016, 0xf84b0268, 0x1265c21b, 0xb7245065,
732 0x6a638c57, 0xcf221e29, 0x250cde5a, 0x804d4c24,
733 0xf4bd284d, 0x51fcba33, 0xbbd27a40, 0x1e93e83e,
734 0x5232b292, 0xf77320ec, 0x1d5de09f, 0xb81c72e1,
735 0xccec1688, 0x69ad84f6, 0x83834485, 0x26c2d6fb,
736 0x1ac1f1dd, 0xbf8063a3, 0x55aea3d0, 0xf0ef31ae,
737 0x841f55c7, 0x215ec7b9, 0xcb7007ca, 0x6e3195b4,
738 0x2290cf18, 0x87d15d66, 0x6dff9d15, 0xc8be0f6b,
739 0xbc4e6b02, 0x190ff97c, 0xf321390f, 0x5660ab71,
740 0x4c42f79a, 0xe90365e4, 0x032da597, 0xa66c37e9,
741 0xd29c5380, 0x77ddc1fe, 0x9df3018d, 0x38b293f3,
742 0x7413c95f, 0xd1525b21, 0x3b7c9b52, 0x9e3d092c,
743 0xeacd6d45, 0x4f8cff3b, 0xa5a23f48, 0x00e3ad36,
744 0x3ce08a10, 0x99a1186e, 0x738fd81d, 0xd6ce4a63,
745 0xa23e2e0a, 0x077fbc74, 0xed517c07, 0x4810ee79,
746 0x04b1b4d5, 0xa1f026ab, 0x4bdee6d8, 0xee9f74a6,
747 0x9a6f10cf, 0x3f2e82b1, 0xd50042c2, 0x7041d0bc,
748 0xad060c8e, 0x08479ef0, 0xe2695e83, 0x4728ccfd,
749 0x33d8a894, 0x96993aea, 0x7cb7fa99, 0xd9f668e7,
750 0x9557324b, 0x3016a035, 0xda386046, 0x7f79f238,
751 0x0b899651, 0xaec8042f, 0x44e6c45c, 0xe1a75622,
752 0xdda47104, 0x78e5e37a, 0x92cb2309, 0x378ab177,
753 0x437ad51e, 0xe63b4760, 0x0c158713, 0xa954156d,
754 0xe5f54fc1, 0x40b4ddbf, 0xaa9a1dcc, 0x0fdb8fb2,
755 0x7b2bebdb, 0xde6a79a5, 0x3444b9d6, 0x91052ba8
756 },{
757 0x00000000, 0xdd45aab8, 0xbf672381, 0x62228939,
758 0x7b2231f3, 0xa6679b4b, 0xc4451272, 0x1900b8ca,
759 0xf64463e6, 0x2b01c95e, 0x49234067, 0x9466eadf,
760 0x8d665215, 0x5023f8ad, 0x32017194, 0xef44db2c,
761 0xe964b13d, 0x34211b85, 0x560392bc, 0x8b463804,
762 0x924680ce, 0x4f032a76, 0x2d21a34f, 0xf06409f7,
763 0x1f20d2db, 0xc2657863, 0xa047f15a, 0x7d025be2,
764 0x6402e328, 0xb9474990, 0xdb65c0a9, 0x06206a11,
765 0xd725148b, 0x0a60be33, 0x6842370a, 0xb5079db2,
766 0xac072578, 0x71428fc0, 0x136006f9, 0xce25ac41,
767 0x2161776d, 0xfc24ddd5, 0x9e0654ec, 0x4343fe54,
768 0x5a43469e, 0x8706ec26, 0xe524651f, 0x3861cfa7,
769 0x3e41a5b6, 0xe3040f0e, 0x81268637, 0x5c632c8f,
770 0x45639445, 0x98263efd, 0xfa04b7c4, 0x27411d7c,
771 0xc805c650, 0x15406ce8, 0x7762e5d1, 0xaa274f69,
772 0xb327f7a3, 0x6e625d1b, 0x0c40d422, 0xd1057e9a,
773 0xaba65fe7, 0x76e3f55f, 0x14c17c66, 0xc984d6de,
774 0xd0846e14, 0x0dc1c4ac, 0x6fe34d95, 0xb2a6e72d,
775 0x5de23c01, 0x80a796b9, 0xe2851f80, 0x3fc0b538,
776 0x26c00df2, 0xfb85a74a, 0x99a72e73, 0x44e284cb,
777 0x42c2eeda, 0x9f874462, 0xfda5cd5b, 0x20e067e3,
778 0x39e0df29, 0xe4a57591, 0x8687fca8, 0x5bc25610,
779 0xb4868d3c, 0x69c32784, 0x0be1aebd, 0xd6a40405,
780 0xcfa4bccf, 0x12e11677, 0x70c39f4e, 0xad8635f6,
781 0x7c834b6c, 0xa1c6e1d4, 0xc3e468ed, 0x1ea1c255,
782 0x07a17a9f, 0xdae4d027, 0xb8c6591e, 0x6583f3a6,
783 0x8ac7288a, 0x57828232, 0x35a00b0b, 0xe8e5a1b3,
784 0xf1e51979, 0x2ca0b3c1, 0x4e823af8, 0x93c79040,
785 0x95e7fa51, 0x48a250e9, 0x2a80d9d0, 0xf7c57368,
786 0xeec5cba2, 0x3380611a, 0x51a2e823, 0x8ce7429b,
787 0x63a399b7, 0xbee6330f, 0xdcc4ba36, 0x0181108e,
788 0x1881a844, 0xc5c402fc, 0xa7e68bc5, 0x7aa3217d,
789 0x52a0c93f, 0x8fe56387, 0xedc7eabe, 0x30824006,
790 0x2982f8cc, 0xf4c75274, 0x96e5db4d, 0x4ba071f5,
791 0xa4e4aad9, 0x79a10061, 0x1b838958, 0xc6c623e0,
792 0xdfc69b2a, 0x02833192, 0x60a1b8ab, 0xbde41213,
793 0xbbc47802, 0x6681d2ba, 0x04a35b83, 0xd9e6f13b,
794 0xc0e649f1, 0x1da3e349, 0x7f816a70, 0xa2c4c0c8,
795 0x4d801be4, 0x90c5b15c, 0xf2e73865, 0x2fa292dd,
796 0x36a22a17, 0xebe780af, 0x89c50996, 0x5480a32e,
797 0x8585ddb4, 0x58c0770c, 0x3ae2fe35, 0xe7a7548d,
798 0xfea7ec47, 0x23e246ff, 0x41c0cfc6, 0x9c85657e,
799 0x73c1be52, 0xae8414ea, 0xcca69dd3, 0x11e3376b,
800 0x08e38fa1, 0xd5a62519, 0xb784ac20, 0x6ac10698,
801 0x6ce16c89, 0xb1a4c631, 0xd3864f08, 0x0ec3e5b0,
802 0x17c35d7a, 0xca86f7c2, 0xa8a47efb, 0x75e1d443,
803 0x9aa50f6f, 0x47e0a5d7, 0x25c22cee, 0xf8878656,
804 0xe1873e9c, 0x3cc29424, 0x5ee01d1d, 0x83a5b7a5,
805 0xf90696d8, 0x24433c60, 0x4661b559, 0x9b241fe1,
806 0x8224a72b, 0x5f610d93, 0x3d4384aa, 0xe0062e12,
807 0x0f42f53e, 0xd2075f86, 0xb025d6bf, 0x6d607c07,
808 0x7460c4cd, 0xa9256e75, 0xcb07e74c, 0x16424df4,
809 0x106227e5, 0xcd278d5d, 0xaf050464, 0x7240aedc,
810 0x6b401616, 0xb605bcae, 0xd4273597, 0x09629f2f,
811 0xe6264403, 0x3b63eebb, 0x59416782, 0x8404cd3a,
812 0x9d0475f0, 0x4041df48, 0x22635671, 0xff26fcc9,
813 0x2e238253, 0xf36628eb, 0x9144a1d2, 0x4c010b6a,
814 0x5501b3a0, 0x88441918, 0xea669021, 0x37233a99,
815 0xd867e1b5, 0x05224b0d, 0x6700c234, 0xba45688c,
816 0xa345d046, 0x7e007afe, 0x1c22f3c7, 0xc167597f,
817 0xc747336e, 0x1a0299d6, 0x782010ef, 0xa565ba57,
818 0xbc65029d, 0x6120a825, 0x0302211c, 0xde478ba4,
819 0x31035088, 0xec46fa30, 0x8e647309, 0x5321d9b1,
820 0x4a21617b, 0x9764cbc3, 0xf54642fa, 0x2803e842
821 },{
822 0x00000000, 0x38116fac, 0x7022df58, 0x4833b0f4,
823 0xe045beb0, 0xd854d11c, 0x906761e8, 0xa8760e44,
824 0xc5670b91, 0xfd76643d, 0xb545d4c9, 0x8d54bb65,
825 0x2522b521, 0x1d33da8d, 0x55006a79, 0x6d1105d5,
826 0x8f2261d3, 0xb7330e7f, 0xff00be8b, 0xc711d127,
827 0x6f67df63, 0x5776b0cf, 0x1f45003b, 0x27546f97,
828 0x4a456a42, 0x725405ee, 0x3a67b51a, 0x0276dab6,
829 0xaa00d4f2, 0x9211bb5e, 0xda220baa, 0xe2336406,
830 0x1ba8b557, 0x23b9dafb, 0x6b8a6a0f, 0x539b05a3,
831 0xfbed0be7, 0xc3fc644b, 0x8bcfd4bf, 0xb3debb13,
832 0xdecfbec6, 0xe6ded16a, 0xaeed619e, 0x96fc0e32,
833 0x3e8a0076, 0x069b6fda, 0x4ea8df2e, 0x76b9b082,
834 0x948ad484, 0xac9bbb28, 0xe4a80bdc, 0xdcb96470,
835 0x74cf6a34, 0x4cde0598, 0x04edb56c, 0x3cfcdac0,
836 0x51eddf15, 0x69fcb0b9, 0x21cf004d, 0x19de6fe1,
837 0xb1a861a5, 0x89b90e09, 0xc18abefd, 0xf99bd151,
838 0x37516aae, 0x0f400502, 0x4773b5f6, 0x7f62da5a,
839 0xd714d41e, 0xef05bbb2, 0xa7360b46, 0x9f2764ea,
840 0xf236613f, 0xca270e93, 0x8214be67, 0xba05d1cb,
841 0x1273df8f, 0x2a62b023, 0x625100d7, 0x5a406f7b,
842 0xb8730b7d, 0x806264d1, 0xc851d425, 0xf040bb89,
843 0x5836b5cd, 0x6027da61, 0x28146a95, 0x10050539,
844 0x7d1400ec, 0x45056f40, 0x0d36dfb4, 0x3527b018,
845 0x9d51be5c, 0xa540d1f0, 0xed736104, 0xd5620ea8,
846 0x2cf9dff9, 0x14e8b055, 0x5cdb00a1, 0x64ca6f0d,
847 0xccbc6149, 0xf4ad0ee5, 0xbc9ebe11, 0x848fd1bd,
848 0xe99ed468, 0xd18fbbc4, 0x99bc0b30, 0xa1ad649c,
849 0x09db6ad8, 0x31ca0574, 0x79f9b580, 0x41e8da2c,
850 0xa3dbbe2a, 0x9bcad186, 0xd3f96172, 0xebe80ede,
851 0x439e009a, 0x7b8f6f36, 0x33bcdfc2, 0x0badb06e,
852 0x66bcb5bb, 0x5eadda17, 0x169e6ae3, 0x2e8f054f,
853 0x86f90b0b, 0xbee864a7, 0xf6dbd453, 0xcecabbff,
854 0x6ea2d55c, 0x56b3baf0, 0x1e800a04, 0x269165a8,
855 0x8ee76bec, 0xb6f60440, 0xfec5b4b4, 0xc6d4db18,
856 0xabc5decd, 0x93d4b161, 0xdbe70195, 0xe3f66e39,
857 0x4b80607d, 0x73910fd1, 0x3ba2bf25, 0x03b3d089,
858 0xe180b48f, 0xd991db23, 0x91a26bd7, 0xa9b3047b,
859 0x01c50a3f, 0x39d46593, 0x71e7d567, 0x49f6bacb,
860 0x24e7bf1e, 0x1cf6d0b2, 0x54c56046, 0x6cd40fea,
861 0xc4a201ae, 0xfcb36e02, 0xb480def6, 0x8c91b15a,
862 0x750a600b, 0x4d1b0fa7, 0x0528bf53, 0x3d39d0ff,
863 0x954fdebb, 0xad5eb117, 0xe56d01e3, 0xdd7c6e4f,
864 0xb06d6b9a, 0x887c0436, 0xc04fb4c2, 0xf85edb6e,
865 0x5028d52a, 0x6839ba86, 0x200a0a72, 0x181b65de,
866 0xfa2801d8, 0xc2396e74, 0x8a0ade80, 0xb21bb12c,
867 0x1a6dbf68, 0x227cd0c4, 0x6a4f6030, 0x525e0f9c,
868 0x3f4f0a49, 0x075e65e5, 0x4f6dd511, 0x777cbabd,
869 0xdf0ab4f9, 0xe71bdb55, 0xaf286ba1, 0x9739040d,
870 0x59f3bff2, 0x61e2d05e, 0x29d160aa, 0x11c00f06,
871 0xb9b60142, 0x81a76eee, 0xc994de1a, 0xf185b1b6,
872 0x9c94b463, 0xa485dbcf, 0xecb66b3b, 0xd4a70497,
873 0x7cd10ad3, 0x44c0657f, 0x0cf3d58b, 0x34e2ba27,
874 0xd6d1de21, 0xeec0b18d, 0xa6f30179, 0x9ee26ed5,
875 0x36946091, 0x0e850f3d, 0x46b6bfc9, 0x7ea7d065,
876 0x13b6d5b0, 0x2ba7ba1c, 0x63940ae8, 0x5b856544,
877 0xf3f36b00, 0xcbe204ac, 0x83d1b458, 0xbbc0dbf4,
878 0x425b0aa5, 0x7a4a6509, 0x3279d5fd, 0x0a68ba51,
879 0xa21eb415, 0x9a0fdbb9, 0xd23c6b4d, 0xea2d04e1,
880 0x873c0134, 0xbf2d6e98, 0xf71ede6c, 0xcf0fb1c0,
881 0x6779bf84, 0x5f68d028, 0x175b60dc, 0x2f4a0f70,
882 0xcd796b76, 0xf56804da, 0xbd5bb42e, 0x854adb82,
883 0x2d3cd5c6, 0x152dba6a, 0x5d1e0a9e, 0x650f6532,
884 0x081e60e7, 0x300f0f4b, 0x783cbfbf, 0x402dd013,
885 0xe85bde57, 0xd04ab1fb, 0x9879010f, 0xa0686ea3
886 },{
887 0x00000000, 0xef306b19, 0xdb8ca0c3, 0x34bccbda,
888 0xb2f53777, 0x5dc55c6e, 0x697997b4, 0x8649fcad,
889 0x6006181f, 0x8f367306, 0xbb8ab8dc, 0x54bad3c5,
890 0xd2f32f68, 0x3dc34471, 0x097f8fab, 0xe64fe4b2,
891 0xc00c303e, 0x2f3c5b27, 0x1b8090fd, 0xf4b0fbe4,
892 0x72f90749, 0x9dc96c50, 0xa975a78a, 0x4645cc93,
893 0xa00a2821, 0x4f3a4338, 0x7b8688e2, 0x94b6e3fb,
894 0x12ff1f56, 0xfdcf744f, 0xc973bf95, 0x2643d48c,
895 0x85f4168d, 0x6ac47d94, 0x5e78b64e, 0xb148dd57,
896 0x370121fa, 0xd8314ae3, 0xec8d8139, 0x03bdea20,
897 0xe5f20e92, 0x0ac2658b, 0x3e7eae51, 0xd14ec548,
898 0x570739e5, 0xb83752fc, 0x8c8b9926, 0x63bbf23f,
899 0x45f826b3, 0xaac84daa, 0x9e748670, 0x7144ed69,
900 0xf70d11c4, 0x183d7add, 0x2c81b107, 0xc3b1da1e,
901 0x25fe3eac, 0xcace55b5, 0xfe729e6f, 0x1142f576,
902 0x970b09db, 0x783b62c2, 0x4c87a918, 0xa3b7c201,
903 0x0e045beb, 0xe13430f2, 0xd588fb28, 0x3ab89031,
904 0xbcf16c9c, 0x53c10785, 0x677dcc5f, 0x884da746,
905 0x6e0243f4, 0x813228ed, 0xb58ee337, 0x5abe882e,
906 0xdcf77483, 0x33c71f9a, 0x077bd440, 0xe84bbf59,
907 0xce086bd5, 0x213800cc, 0x1584cb16, 0xfab4a00f,
908 0x7cfd5ca2, 0x93cd37bb, 0xa771fc61, 0x48419778,
909 0xae0e73ca, 0x413e18d3, 0x7582d309, 0x9ab2b810,
910 0x1cfb44bd, 0xf3cb2fa4, 0xc777e47e, 0x28478f67,
911 0x8bf04d66, 0x64c0267f, 0x507ceda5, 0xbf4c86bc,
912 0x39057a11, 0xd6351108, 0xe289dad2, 0x0db9b1cb,
913 0xebf65579, 0x04c63e60, 0x307af5ba, 0xdf4a9ea3,
914 0x5903620e, 0xb6330917, 0x828fc2cd, 0x6dbfa9d4,
915 0x4bfc7d58, 0xa4cc1641, 0x9070dd9b, 0x7f40b682,
916 0xf9094a2f, 0x16392136, 0x2285eaec, 0xcdb581f5,
917 0x2bfa6547, 0xc4ca0e5e, 0xf076c584, 0x1f46ae9d,
918 0x990f5230, 0x763f3929, 0x4283f2f3, 0xadb399ea,
919 0x1c08b7d6, 0xf338dccf, 0xc7841715, 0x28b47c0c,
920 0xaefd80a1, 0x41cdebb8, 0x75712062, 0x9a414b7b,
921 0x7c0eafc9, 0x933ec4d0, 0xa7820f0a, 0x48b26413,
922 0xcefb98be, 0x21cbf3a7, 0x1577387d, 0xfa475364,
923 0xdc0487e8, 0x3334ecf1, 0x0788272b, 0xe8b84c32,
924 0x6ef1b09f, 0x81c1db86, 0xb57d105c, 0x5a4d7b45,
925 0xbc029ff7, 0x5332f4ee, 0x678e3f34, 0x88be542d,
926 0x0ef7a880, 0xe1c7c399, 0xd57b0843, 0x3a4b635a,
927 0x99fca15b, 0x76ccca42, 0x42700198, 0xad406a81,
928 0x2b09962c, 0xc439fd35, 0xf08536ef, 0x1fb55df6,
929 0xf9fab944, 0x16cad25d, 0x22761987, 0xcd46729e,
930 0x4b0f8e33, 0xa43fe52a, 0x90832ef0, 0x7fb345e9,
931 0x59f09165, 0xb6c0fa7c, 0x827c31a6, 0x6d4c5abf,
932 0xeb05a612, 0x0435cd0b, 0x308906d1, 0xdfb96dc8,
933 0x39f6897a, 0xd6c6e263, 0xe27a29b9, 0x0d4a42a0,
934 0x8b03be0d, 0x6433d514, 0x508f1ece, 0xbfbf75d7,
935 0x120cec3d, 0xfd3c8724, 0xc9804cfe, 0x26b027e7,
936 0xa0f9db4a, 0x4fc9b053, 0x7b757b89, 0x94451090,
937 0x720af422, 0x9d3a9f3b, 0xa98654e1, 0x46b63ff8,
938 0xc0ffc355, 0x2fcfa84c, 0x1b736396, 0xf443088f,
939 0xd200dc03, 0x3d30b71a, 0x098c7cc0, 0xe6bc17d9,
940 0x60f5eb74, 0x8fc5806d, 0xbb794bb7, 0x544920ae,
941 0xb206c41c, 0x5d36af05, 0x698a64df, 0x86ba0fc6,
942 0x00f3f36b, 0xefc39872, 0xdb7f53a8, 0x344f38b1,
943 0x97f8fab0, 0x78c891a9, 0x4c745a73, 0xa344316a,
944 0x250dcdc7, 0xca3da6de, 0xfe816d04, 0x11b1061d,
945 0xf7fee2af, 0x18ce89b6, 0x2c72426c, 0xc3422975,
946 0x450bd5d8, 0xaa3bbec1, 0x9e87751b, 0x71b71e02,
947 0x57f4ca8e, 0xb8c4a197, 0x8c786a4d, 0x63480154,
948 0xe501fdf9, 0x0a3196e0, 0x3e8d5d3a, 0xd1bd3623,
949 0x37f2d291, 0xd8c2b988, 0xec7e7252, 0x034e194b,
950 0x8507e5e6, 0x6a378eff, 0x5e8b4525, 0xb1bb2e3c
951 },{
952 0x00000000, 0x68032cc8, 0xd0065990, 0xb8057558,
953 0xa5e0c5d1, 0xcde3e919, 0x75e69c41, 0x1de5b089,
954 0x4e2dfd53, 0x262ed19b, 0x9e2ba4c3, 0xf628880b,
955 0xebcd3882, 0x83ce144a, 0x3bcb6112, 0x53c84dda,
956 0x9c5bfaa6, 0xf458d66e, 0x4c5da336, 0x245e8ffe,
957 0x39bb3f77, 0x51b813bf, 0xe9bd66e7, 0x81be4a2f,
958 0xd27607f5, 0xba752b3d, 0x02705e65, 0x6a7372ad,
959 0x7796c224, 0x1f95eeec, 0xa7909bb4, 0xcf93b77c,
960 0x3d5b83bd, 0x5558af75, 0xed5dda2d, 0x855ef6e5,
961 0x98bb466c, 0xf0b86aa4, 0x48bd1ffc, 0x20be3334,
962 0x73767eee, 0x1b755226, 0xa370277e, 0xcb730bb6,
963 0xd696bb3f, 0xbe9597f7, 0x0690e2af, 0x6e93ce67,
964 0xa100791b, 0xc90355d3, 0x7106208b, 0x19050c43,
965 0x04e0bcca, 0x6ce39002, 0xd4e6e55a, 0xbce5c992,
966 0xef2d8448, 0x872ea880, 0x3f2bddd8, 0x5728f110,
967 0x4acd4199, 0x22ce6d51, 0x9acb1809, 0xf2c834c1,
968 0x7ab7077a, 0x12b42bb2, 0xaab15eea, 0xc2b27222,
969 0xdf57c2ab, 0xb754ee63, 0x0f519b3b, 0x6752b7f3,
970 0x349afa29, 0x5c99d6e1, 0xe49ca3b9, 0x8c9f8f71,
971 0x917a3ff8, 0xf9791330, 0x417c6668, 0x297f4aa0,
972 0xe6ecfddc, 0x8eefd114, 0x36eaa44c, 0x5ee98884,
973 0x430c380d, 0x2b0f14c5, 0x930a619d, 0xfb094d55,
974 0xa8c1008f, 0xc0c22c47, 0x78c7591f, 0x10c475d7,
975 0x0d21c55e, 0x6522e996, 0xdd279cce, 0xb524b006,
976 0x47ec84c7, 0x2fefa80f, 0x97eadd57, 0xffe9f19f,
977 0xe20c4116, 0x8a0f6dde, 0x320a1886, 0x5a09344e,
978 0x09c17994, 0x61c2555c, 0xd9c72004, 0xb1c40ccc,
979 0xac21bc45, 0xc422908d, 0x7c27e5d5, 0x1424c91d,
980 0xdbb77e61, 0xb3b452a9, 0x0bb127f1, 0x63b20b39,
981 0x7e57bbb0, 0x16549778, 0xae51e220, 0xc652cee8,
982 0x959a8332, 0xfd99affa, 0x459cdaa2, 0x2d9ff66a,
983 0x307a46e3, 0x58796a2b, 0xe07c1f73, 0x887f33bb,
984 0xf56e0ef4, 0x9d6d223c, 0x25685764, 0x4d6b7bac,
985 0x508ecb25, 0x388de7ed, 0x808892b5, 0xe88bbe7d,
986 0xbb43f3a7, 0xd340df6f, 0x6b45aa37, 0x034686ff,
987 0x1ea33676, 0x76a01abe, 0xcea56fe6, 0xa6a6432e,
988 0x6935f452, 0x0136d89a, 0xb933adc2, 0xd130810a,
989 0xccd53183, 0xa4d61d4b, 0x1cd36813, 0x74d044db,
990 0x27180901, 0x4f1b25c9, 0xf71e5091, 0x9f1d7c59,
991 0x82f8ccd0, 0xeafbe018, 0x52fe9540, 0x3afdb988,
992 0xc8358d49, 0xa036a181, 0x1833d4d9, 0x7030f811,
993 0x6dd54898, 0x05d66450, 0xbdd31108, 0xd5d03dc0,
994 0x8618701a, 0xee1b5cd2, 0x561e298a, 0x3e1d0542,
995 0x23f8b5cb, 0x4bfb9903, 0xf3feec5b, 0x9bfdc093,
996 0x546e77ef, 0x3c6d5b27, 0x84682e7f, 0xec6b02b7,
997 0xf18eb23e, 0x998d9ef6, 0x2188ebae, 0x498bc766,
998 0x1a438abc, 0x7240a674, 0xca45d32c, 0xa246ffe4,
999 0xbfa34f6d, 0xd7a063a5, 0x6fa516fd, 0x07a63a35,
1000 0x8fd9098e, 0xe7da2546, 0x5fdf501e, 0x37dc7cd6,
1001 0x2a39cc5f, 0x423ae097, 0xfa3f95cf, 0x923cb907,
1002 0xc1f4f4dd, 0xa9f7d815, 0x11f2ad4d, 0x79f18185,
1003 0x6414310c, 0x0c171dc4, 0xb412689c, 0xdc114454,
1004 0x1382f328, 0x7b81dfe0, 0xc384aab8, 0xab878670,
1005 0xb66236f9, 0xde611a31, 0x66646f69, 0x0e6743a1,
1006 0x5daf0e7b, 0x35ac22b3, 0x8da957eb, 0xe5aa7b23,
1007 0xf84fcbaa, 0x904ce762, 0x2849923a, 0x404abef2,
1008 0xb2828a33, 0xda81a6fb, 0x6284d3a3, 0x0a87ff6b,
1009 0x17624fe2, 0x7f61632a, 0xc7641672, 0xaf673aba,
1010 0xfcaf7760, 0x94ac5ba8, 0x2ca92ef0, 0x44aa0238,
1011 0x594fb2b1, 0x314c9e79, 0x8949eb21, 0xe14ac7e9,
1012 0x2ed97095, 0x46da5c5d, 0xfedf2905, 0x96dc05cd,
1013 0x8b39b544, 0xe33a998c, 0x5b3fecd4, 0x333cc01c,
1014 0x60f48dc6, 0x08f7a10e, 0xb0f2d456, 0xd8f1f89e,
1015 0xc5144817, 0xad1764df, 0x15121187, 0x7d113d4f
1016 },{
1017 0x00000000, 0x493c7d27, 0x9278fa4e, 0xdb448769,
1018 0x211d826d, 0x6821ff4a, 0xb3657823, 0xfa590504,
1019 0x423b04da, 0x0b0779fd, 0xd043fe94, 0x997f83b3,
1020 0x632686b7, 0x2a1afb90, 0xf15e7cf9, 0xb86201de,
1021 0x847609b4, 0xcd4a7493, 0x160ef3fa, 0x5f328edd,
1022 0xa56b8bd9, 0xec57f6fe, 0x37137197, 0x7e2f0cb0,
1023 0xc64d0d6e, 0x8f717049, 0x5435f720, 0x1d098a07,
1024 0xe7508f03, 0xae6cf224, 0x7528754d, 0x3c14086a,
1025 0x0d006599, 0x443c18be, 0x9f789fd7, 0xd644e2f0,
1026 0x2c1de7f4, 0x65219ad3, 0xbe651dba, 0xf759609d,
1027 0x4f3b6143, 0x06071c64, 0xdd439b0d, 0x947fe62a,
1028 0x6e26e32e, 0x271a9e09, 0xfc5e1960, 0xb5626447,
1029 0x89766c2d, 0xc04a110a, 0x1b0e9663, 0x5232eb44,
1030 0xa86bee40, 0xe1579367, 0x3a13140e, 0x732f6929,
1031 0xcb4d68f7, 0x827115d0, 0x593592b9, 0x1009ef9e,
1032 0xea50ea9a, 0xa36c97bd, 0x782810d4, 0x31146df3,
1033 0x1a00cb32, 0x533cb615, 0x8878317c, 0xc1444c5b,
1034 0x3b1d495f, 0x72213478, 0xa965b311, 0xe059ce36,
1035 0x583bcfe8, 0x1107b2cf, 0xca4335a6, 0x837f4881,
1036 0x79264d85, 0x301a30a2, 0xeb5eb7cb, 0xa262caec,
1037 0x9e76c286, 0xd74abfa1, 0x0c0e38c8, 0x453245ef,
1038 0xbf6b40eb, 0xf6573dcc, 0x2d13baa5, 0x642fc782,
1039 0xdc4dc65c, 0x9571bb7b, 0x4e353c12, 0x07094135,
1040 0xfd504431, 0xb46c3916, 0x6f28be7f, 0x2614c358,
1041 0x1700aeab, 0x5e3cd38c, 0x857854e5, 0xcc4429c2,
1042 0x361d2cc6, 0x7f2151e1, 0xa465d688, 0xed59abaf,
1043 0x553baa71, 0x1c07d756, 0xc743503f, 0x8e7f2d18,
1044 0x7426281c, 0x3d1a553b, 0xe65ed252, 0xaf62af75,
1045 0x9376a71f, 0xda4ada38, 0x010e5d51, 0x48322076,
1046 0xb26b2572, 0xfb575855, 0x2013df3c, 0x692fa21b,
1047 0xd14da3c5, 0x9871dee2, 0x4335598b, 0x0a0924ac,
1048 0xf05021a8, 0xb96c5c8f, 0x6228dbe6, 0x2b14a6c1,
1049 0x34019664, 0x7d3deb43, 0xa6796c2a, 0xef45110d,
1050 0x151c1409, 0x5c20692e, 0x8764ee47, 0xce589360,
1051 0x763a92be, 0x3f06ef99, 0xe44268f0, 0xad7e15d7,
1052 0x572710d3, 0x1e1b6df4, 0xc55fea9d, 0x8c6397ba,
1053 0xb0779fd0, 0xf94be2f7, 0x220f659e, 0x6b3318b9,
1054 0x916a1dbd, 0xd856609a, 0x0312e7f3, 0x4a2e9ad4,
1055 0xf24c9b0a, 0xbb70e62d, 0x60346144, 0x29081c63,
1056 0xd3511967, 0x9a6d6440, 0x4129e329, 0x08159e0e,
1057 0x3901f3fd, 0x703d8eda, 0xab7909b3, 0xe2457494,
1058 0x181c7190, 0x51200cb7, 0x8a648bde, 0xc358f6f9,
1059 0x7b3af727, 0x32068a00, 0xe9420d69, 0xa07e704e,
1060 0x5a27754a, 0x131b086d, 0xc85f8f04, 0x8163f223,
1061 0xbd77fa49, 0xf44b876e, 0x2f0f0007, 0x66337d20,
1062 0x9c6a7824, 0xd5560503, 0x0e12826a, 0x472eff4d,
1063 0xff4cfe93, 0xb67083b4, 0x6d3404dd, 0x240879fa,
1064 0xde517cfe, 0x976d01d9, 0x4c2986b0, 0x0515fb97,
1065 0x2e015d56, 0x673d2071, 0xbc79a718, 0xf545da3f,
1066 0x0f1cdf3b, 0x4620a21c, 0x9d642575, 0xd4585852,
1067 0x6c3a598c, 0x250624ab, 0xfe42a3c2, 0xb77edee5,
1068 0x4d27dbe1, 0x041ba6c6, 0xdf5f21af, 0x96635c88,
1069 0xaa7754e2, 0xe34b29c5, 0x380faeac, 0x7133d38b,
1070 0x8b6ad68f, 0xc256aba8, 0x19122cc1, 0x502e51e6,
1071 0xe84c5038, 0xa1702d1f, 0x7a34aa76, 0x3308d751,
1072 0xc951d255, 0x806daf72, 0x5b29281b, 0x1215553c,
1073 0x230138cf, 0x6a3d45e8, 0xb179c281, 0xf845bfa6,
1074 0x021cbaa2, 0x4b20c785, 0x906440ec, 0xd9583dcb,
1075 0x613a3c15, 0x28064132, 0xf342c65b, 0xba7ebb7c,
1076 0x4027be78, 0x091bc35f, 0xd25f4436, 0x9b633911,
1077 0xa777317b, 0xee4b4c5c, 0x350fcb35, 0x7c33b612,
1078 0x866ab316, 0xcf56ce31, 0x14124958, 0x5d2e347f,
1079 0xe54c35a1, 0xac704886, 0x7734cfef, 0x3e08b2c8,
1080 0xc451b7cc, 0x8d6dcaeb, 0x56294d82, 0x1f1530a5
1081 }
1082 #endif
1083 };
1084
1085 /*
1086 * Return a checksum for a chunk of memory.
1087 *
1088 * Slicing-by-8 algorithm by Michael E. Kounavis and Frank L. Berry from
1089 * Intel Corp.:
1090 * http://www.intel.com/technology/comms/perfnet/download/CRC_generators.pdf
1091 *
1092 * Based on Peter Kanowski's posting:
1093 * http://www.strchr.com/crc32_popcnt
1094 *
1095 * The big endian version calculates the same result at each step, except the
1096 * value of the crc is byte reversed from what it would be at that step for
1097 * little endian.
1098 */
1099 uint32_t
my_crc32c_slicing(const uint8_t * chunk,size_t len)1100 my_crc32c_slicing(const uint8_t *chunk, size_t len)
1101 {
1102 uint32_t crc, next;
1103 size_t nqwords;
1104 const uint8_t *p;
1105
1106 crc = 0xffffffff;
1107
1108 /* Checksum one byte at a time to the first 4B boundary. */
1109 for (p = chunk;
1110 ((uintptr_t)p & (sizeof(uint32_t) - 1)) != 0 &&
1111 len > 0; ++p, --len)
1112 {
1113 #ifdef WORDS_BIGENDIAN
1114 crc = g_crc_slicing[0][((crc >> 24) ^ *p) & 0xFF] ^ (crc << 8);
1115 #else
1116 crc = g_crc_slicing[0][(crc ^ *p) & 0xFF] ^ (crc >> 8);
1117 #endif
1118 }
1119
1120 /* Checksum in 8B chunks. */
1121 for (nqwords = len / sizeof(uint64_t); nqwords; nqwords--) {
1122 crc ^= *(uint32_t *)p;
1123 p += sizeof(uint32_t);
1124 next = *(uint32_t *)p;
1125 p += sizeof(uint32_t);
1126 crc =
1127 #ifdef WORDS_BIGENDIAN
1128 g_crc_slicing[4][(crc ) & 0xFF] ^
1129 g_crc_slicing[5][(crc >> 8) & 0xFF] ^
1130 g_crc_slicing[6][(crc >> 16) & 0xFF] ^
1131 g_crc_slicing[7][(crc >> 24)] ^
1132 g_crc_slicing[0][(next ) & 0xFF] ^
1133 g_crc_slicing[1][(next >> 8) & 0xFF] ^
1134 g_crc_slicing[2][(next >> 16) & 0xFF] ^
1135 g_crc_slicing[3][(next >> 24)];
1136 #else
1137 g_crc_slicing[7][(crc ) & 0xFF] ^
1138 g_crc_slicing[6][(crc >> 8) & 0xFF] ^
1139 g_crc_slicing[5][(crc >> 16) & 0xFF] ^
1140 g_crc_slicing[4][(crc >> 24)] ^
1141 g_crc_slicing[3][(next ) & 0xFF] ^
1142 g_crc_slicing[2][(next >> 8) & 0xFF] ^
1143 g_crc_slicing[1][(next >> 16) & 0xFF] ^
1144 g_crc_slicing[0][(next >> 24)];
1145 #endif
1146 }
1147
1148 /* Checksum trailing bytes one byte at a time. */
1149 #ifdef WORDS_BIGENDIAN
1150 for (len &= 0x7; len > 0; ++p, len--)
1151 crc = g_crc_slicing[0][((crc >> 24) ^ *p) & 0xFF] ^ (crc << 8);
1152
1153 /* Do final byte swap to produce a result identical to little endian */
1154 crc =
1155 ((crc << 24) & 0xFF000000) |
1156 ((crc << 8) & 0x00FF0000) |
1157 ((crc >> 8) & 0x0000FF00) |
1158 ((crc >> 24) & 0x000000FF);
1159 #else
1160 for (len &= 0x7; len > 0; ++p, len--)
1161 crc = g_crc_slicing[0][(crc ^ *p) & 0xFF] ^ (crc >> 8);
1162 #endif
1163 return (~crc);
1164 }
1165