]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - lib/crc32.c
crc32: add note about this patchset to crc32.c
[mirror_ubuntu-artful-kernel.git] / lib / crc32.c
CommitLineData
1da177e4 1/*
78dff418
BP
2 * Aug 8, 2011 Bob Pearson with help from Joakim Tjernlund and George Spelvin
3 * cleaned up code to current version of sparse and added the slicing-by-8
4 * algorithm to the closely similar existing slicing-by-4 algorithm.
5 *
1da177e4
LT
6 * Oct 15, 2000 Matt Domsch <Matt_Domsch@dell.com>
7 * Nicer crc32 functions/docs submitted by linux@horizon.com. Thanks!
8 * Code was from the public domain, copyright abandoned. Code was
9 * subsequently included in the kernel, thus was re-licensed under the
10 * GNU GPL v2.
11 *
12 * Oct 12, 2000 Matt Domsch <Matt_Domsch@dell.com>
13 * Same crc32 function was used in 5 other places in the kernel.
14 * I made one version, and deleted the others.
15 * There are various incantations of crc32(). Some use a seed of 0 or ~0.
16 * Some xor at the end with ~0. The generic crc32() function takes
17 * seed as an argument, and doesn't xor at the end. Then individual
18 * users can do whatever they need.
19 * drivers/net/smc9194.c uses seed ~0, doesn't xor with ~0.
20 * fs/jffs2 uses seed 0, doesn't xor with ~0.
21 * fs/partitions/efi.c uses seed ~0, xor's with ~0.
22 *
23 * This source code is licensed under the GNU General Public License,
24 * Version 2. See the file COPYING for more details.
25 */
26
fbedceb1
BP
27/* see: Documentation/crc32.txt for a description of algorithms */
28
1da177e4 29#include <linux/crc32.h>
1da177e4 30#include <linux/module.h>
1da177e4 31#include <linux/types.h>
1da177e4 32#include "crc32defs.h"
60e58d5c 33
9a1dbf6a 34#if CRC_LE_BITS > 8
ce4320dd 35# define tole(x) ((__force u32) __constant_cpu_to_le32(x))
1da177e4 36#else
4f2a9463
JT
37# define tole(x) (x)
38#endif
39
9a1dbf6a 40#if CRC_BE_BITS > 8
ce4320dd 41# define tobe(x) ((__force u32) __constant_cpu_to_be32(x))
4f2a9463
JT
42#else
43# define tobe(x) (x)
1da177e4 44#endif
60e58d5c 45
1da177e4
LT
46#include "crc32table.h"
47
48MODULE_AUTHOR("Matt Domsch <Matt_Domsch@dell.com>");
49MODULE_DESCRIPTION("Ethernet CRC32 calculations");
50MODULE_LICENSE("GPL");
51
9a1dbf6a 52#if CRC_LE_BITS > 8 || CRC_BE_BITS > 8
ddcaccbc 53
324eb0f1 54/* implements slicing-by-4 or slicing-by-8 algorithm */
ddcaccbc 55static inline u32
836e2af9 56crc32_body(u32 crc, unsigned char const *buf, size_t len, const u32 (*tab)[256])
ddcaccbc 57{
0d2daf5c 58# ifdef __LITTLE_ENDIAN
5742332d 59# define DO_CRC(x) crc = t0[(crc ^ (x)) & 255] ^ (crc >> 8)
324eb0f1
BP
60# define DO_CRC4 (t3[(q) & 255] ^ t2[(q >> 8) & 255] ^ \
61 t1[(q >> 16) & 255] ^ t0[(q >> 24) & 255])
62# define DO_CRC8 (t7[(q) & 255] ^ t6[(q >> 8) & 255] ^ \
63 t5[(q >> 16) & 255] ^ t4[(q >> 24) & 255])
ddcaccbc 64# else
5742332d 65# define DO_CRC(x) crc = t0[((crc >> 24) ^ (x)) & 255] ^ (crc << 8)
324eb0f1
BP
66# define DO_CRC4 (t0[(q) & 255] ^ t1[(q >> 8) & 255] ^ \
67 t2[(q >> 16) & 255] ^ t3[(q >> 24) & 255])
68# define DO_CRC8 (t4[(q) & 255] ^ t5[(q >> 8) & 255] ^ \
69 t6[(q >> 16) & 255] ^ t7[(q >> 24) & 255])
ddcaccbc 70# endif
4f2a9463 71 const u32 *b;
ddcaccbc 72 size_t rem_len;
0292c497
BP
73# ifdef CONFIG_X86
74 size_t i;
75# endif
5742332d 76 const u32 *t0=tab[0], *t1=tab[1], *t2=tab[2], *t3=tab[3];
324eb0f1
BP
77 const u32 *t4 = tab[4], *t5 = tab[5], *t6 = tab[6], *t7 = tab[7];
78 u32 q;
ddcaccbc
JT
79
80 /* Align it */
4f2a9463 81 if (unlikely((long)buf & 3 && len)) {
ddcaccbc 82 do {
4f2a9463
JT
83 DO_CRC(*buf++);
84 } while ((--len) && ((long)buf)&3);
ddcaccbc 85 }
324eb0f1
BP
86
87# if CRC_LE_BITS == 32
ddcaccbc 88 rem_len = len & 3;
ddcaccbc 89 len = len >> 2;
324eb0f1
BP
90# else
91 rem_len = len & 7;
92 len = len >> 3;
93# endif
94
4f2a9463 95 b = (const u32 *)buf;
0292c497
BP
96# ifdef CONFIG_X86
97 --b;
98 for (i = 0; i < len; i++) {
99# else
ddcaccbc 100 for (--b; len; --len) {
0292c497 101# endif
324eb0f1
BP
102 q = crc ^ *++b; /* use pre increment for speed */
103# if CRC_LE_BITS == 32
104 crc = DO_CRC4;
105# else
106 crc = DO_CRC8;
107 q = *++b;
108 crc ^= DO_CRC4;
109# endif
ddcaccbc
JT
110 }
111 len = rem_len;
112 /* And the last few bytes */
113 if (len) {
114 u8 *p = (u8 *)(b + 1) - 1;
0292c497
BP
115# ifdef CONFIG_X86
116 for (i = 0; i < len; i++)
117 DO_CRC(*++p); /* use pre increment for speed */
118# else
ddcaccbc
JT
119 do {
120 DO_CRC(*++p); /* use pre increment for speed */
121 } while (--len);
0292c497 122# endif
ddcaccbc
JT
123 }
124 return crc;
4f2a9463 125#undef DO_CRC
836e2af9 126#undef DO_CRC4
324eb0f1 127#undef DO_CRC8
ddcaccbc
JT
128}
129#endif
60e58d5c 130
2f72100c
RD
131/**
132 * crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32
133 * @crc: seed value for computation. ~0 for Ethernet, sometimes 0 for
134 * other uses, or the previous crc32 value if computing incrementally.
135 * @p: pointer to buffer over which CRC is run
136 * @len: length of buffer @p
137 */
e8c44319 138u32 __pure crc32_le(u32 crc, unsigned char const *p, size_t len)
1da177e4 139{
60e58d5c 140#if CRC_LE_BITS == 1
1da177e4
LT
141 int i;
142 while (len--) {
143 crc ^= *p++;
144 for (i = 0; i < 8; i++)
145 crc = (crc >> 1) ^ ((crc & 1) ? CRCPOLY_LE : 0);
146 }
60e58d5c 147# elif CRC_LE_BITS == 2
1da177e4
LT
148 while (len--) {
149 crc ^= *p++;
60e58d5c
BP
150 crc = (crc >> 2) ^ crc32table_le[0][crc & 3];
151 crc = (crc >> 2) ^ crc32table_le[0][crc & 3];
152 crc = (crc >> 2) ^ crc32table_le[0][crc & 3];
153 crc = (crc >> 2) ^ crc32table_le[0][crc & 3];
1da177e4 154 }
60e58d5c 155# elif CRC_LE_BITS == 4
1da177e4
LT
156 while (len--) {
157 crc ^= *p++;
60e58d5c
BP
158 crc = (crc >> 4) ^ crc32table_le[0][crc & 15];
159 crc = (crc >> 4) ^ crc32table_le[0][crc & 15];
1da177e4 160 }
60e58d5c 161# elif CRC_LE_BITS == 8
9a1dbf6a
BP
162 /* aka Sarwate algorithm */
163 while (len--) {
164 crc ^= *p++;
165 crc = (crc >> 8) ^ crc32table_le[0][crc & 255];
166 }
167# else
60e58d5c
BP
168 const u32 (*tab)[] = crc32table_le;
169
ce4320dd 170 crc = (__force u32) __cpu_to_le32(crc);
60e58d5c 171 crc = crc32_body(crc, p, len, tab);
ce4320dd 172 crc = __le32_to_cpu((__force __le32)crc);
60e58d5c 173#endif
1da177e4 174 return crc;
1da177e4 175}
60e58d5c 176EXPORT_SYMBOL(crc32_le);
1da177e4 177
2f72100c
RD
178/**
179 * crc32_be() - Calculate bitwise big-endian Ethernet AUTODIN II CRC32
180 * @crc: seed value for computation. ~0 for Ethernet, sometimes 0 for
181 * other uses, or the previous crc32 value if computing incrementally.
182 * @p: pointer to buffer over which CRC is run
183 * @len: length of buffer @p
184 */
e8c44319 185u32 __pure crc32_be(u32 crc, unsigned char const *p, size_t len)
1da177e4 186{
60e58d5c 187#if CRC_BE_BITS == 1
1da177e4
LT
188 int i;
189 while (len--) {
190 crc ^= *p++ << 24;
191 for (i = 0; i < 8; i++)
192 crc =
193 (crc << 1) ^ ((crc & 0x80000000) ? CRCPOLY_BE :
194 0);
195 }
60e58d5c 196# elif CRC_BE_BITS == 2
1da177e4
LT
197 while (len--) {
198 crc ^= *p++ << 24;
60e58d5c
BP
199 crc = (crc << 2) ^ crc32table_be[0][crc >> 30];
200 crc = (crc << 2) ^ crc32table_be[0][crc >> 30];
201 crc = (crc << 2) ^ crc32table_be[0][crc >> 30];
202 crc = (crc << 2) ^ crc32table_be[0][crc >> 30];
1da177e4 203 }
60e58d5c 204# elif CRC_BE_BITS == 4
1da177e4
LT
205 while (len--) {
206 crc ^= *p++ << 24;
60e58d5c
BP
207 crc = (crc << 4) ^ crc32table_be[0][crc >> 28];
208 crc = (crc << 4) ^ crc32table_be[0][crc >> 28];
1da177e4 209 }
60e58d5c 210# elif CRC_BE_BITS == 8
9a1dbf6a
BP
211 while (len--) {
212 crc ^= *p++ << 24;
213 crc = (crc << 8) ^ crc32table_be[0][crc >> 24];
214 }
215# else
60e58d5c
BP
216 const u32 (*tab)[] = crc32table_be;
217
ce4320dd 218 crc = (__force u32) __cpu_to_be32(crc);
60e58d5c 219 crc = crc32_body(crc, p, len, tab);
ce4320dd 220 crc = __be32_to_cpu((__force __be32)crc);
1da177e4 221# endif
60e58d5c 222 return crc;
1da177e4 223}
1da177e4 224EXPORT_SYMBOL(crc32_be);
1da177e4 225
3863ef31 226#ifdef CONFIG_CRC32_SELFTEST
1da177e4 227
3863ef31
BP
228/* 4096 random bytes */
229static u8 __attribute__((__aligned__(8))) test_buf[] =
1da177e4 230{
3863ef31
BP
231 0x5b, 0x85, 0x21, 0xcb, 0x09, 0x68, 0x7d, 0x30,
232 0xc7, 0x69, 0xd7, 0x30, 0x92, 0xde, 0x59, 0xe4,
233 0xc9, 0x6e, 0x8b, 0xdb, 0x98, 0x6b, 0xaa, 0x60,
234 0xa8, 0xb5, 0xbc, 0x6c, 0xa9, 0xb1, 0x5b, 0x2c,
235 0xea, 0xb4, 0x92, 0x6a, 0x3f, 0x79, 0x91, 0xe4,
236 0xe9, 0x70, 0x51, 0x8c, 0x7f, 0x95, 0x6f, 0x1a,
237 0x56, 0xa1, 0x5c, 0x27, 0x03, 0x67, 0x9f, 0x3a,
238 0xe2, 0x31, 0x11, 0x29, 0x6b, 0x98, 0xfc, 0xc4,
239 0x53, 0x24, 0xc5, 0x8b, 0xce, 0x47, 0xb2, 0xb9,
240 0x32, 0xcb, 0xc1, 0xd0, 0x03, 0x57, 0x4e, 0xd4,
241 0xe9, 0x3c, 0xa1, 0x63, 0xcf, 0x12, 0x0e, 0xca,
242 0xe1, 0x13, 0xd1, 0x93, 0xa6, 0x88, 0x5c, 0x61,
243 0x5b, 0xbb, 0xf0, 0x19, 0x46, 0xb4, 0xcf, 0x9e,
244 0xb6, 0x6b, 0x4c, 0x3a, 0xcf, 0x60, 0xf9, 0x7a,
245 0x8d, 0x07, 0x63, 0xdb, 0x40, 0xe9, 0x0b, 0x6f,
246 0xad, 0x97, 0xf1, 0xed, 0xd0, 0x1e, 0x26, 0xfd,
247 0xbf, 0xb7, 0xc8, 0x04, 0x94, 0xf8, 0x8b, 0x8c,
248 0xf1, 0xab, 0x7a, 0xd4, 0xdd, 0xf3, 0xe8, 0x88,
249 0xc3, 0xed, 0x17, 0x8a, 0x9b, 0x40, 0x0d, 0x53,
250 0x62, 0x12, 0x03, 0x5f, 0x1b, 0x35, 0x32, 0x1f,
251 0xb4, 0x7b, 0x93, 0x78, 0x0d, 0xdb, 0xce, 0xa4,
252 0xc0, 0x47, 0xd5, 0xbf, 0x68, 0xe8, 0x5d, 0x74,
253 0x8f, 0x8e, 0x75, 0x1c, 0xb2, 0x4f, 0x9a, 0x60,
254 0xd1, 0xbe, 0x10, 0xf4, 0x5c, 0xa1, 0x53, 0x09,
255 0xa5, 0xe0, 0x09, 0x54, 0x85, 0x5c, 0xdc, 0x07,
256 0xe7, 0x21, 0x69, 0x7b, 0x8a, 0xfd, 0x90, 0xf1,
257 0x22, 0xd0, 0xb4, 0x36, 0x28, 0xe6, 0xb8, 0x0f,
258 0x39, 0xde, 0xc8, 0xf3, 0x86, 0x60, 0x34, 0xd2,
259 0x5e, 0xdf, 0xfd, 0xcf, 0x0f, 0xa9, 0x65, 0xf0,
260 0xd5, 0x4d, 0x96, 0x40, 0xe3, 0xdf, 0x3f, 0x95,
261 0x5a, 0x39, 0x19, 0x93, 0xf4, 0x75, 0xce, 0x22,
262 0x00, 0x1c, 0x93, 0xe2, 0x03, 0x66, 0xf4, 0x93,
263 0x73, 0x86, 0x81, 0x8e, 0x29, 0x44, 0x48, 0x86,
264 0x61, 0x7c, 0x48, 0xa3, 0x43, 0xd2, 0x9c, 0x8d,
265 0xd4, 0x95, 0xdd, 0xe1, 0x22, 0x89, 0x3a, 0x40,
266 0x4c, 0x1b, 0x8a, 0x04, 0xa8, 0x09, 0x69, 0x8b,
267 0xea, 0xc6, 0x55, 0x8e, 0x57, 0xe6, 0x64, 0x35,
268 0xf0, 0xc7, 0x16, 0x9f, 0x5d, 0x5e, 0x86, 0x40,
269 0x46, 0xbb, 0xe5, 0x45, 0x88, 0xfe, 0xc9, 0x63,
270 0x15, 0xfb, 0xf5, 0xbd, 0x71, 0x61, 0xeb, 0x7b,
271 0x78, 0x70, 0x07, 0x31, 0x03, 0x9f, 0xb2, 0xc8,
272 0xa7, 0xab, 0x47, 0xfd, 0xdf, 0xa0, 0x78, 0x72,
273 0xa4, 0x2a, 0xe4, 0xb6, 0xba, 0xc0, 0x1e, 0x86,
274 0x71, 0xe6, 0x3d, 0x18, 0x37, 0x70, 0xe6, 0xff,
275 0xe0, 0xbc, 0x0b, 0x22, 0xa0, 0x1f, 0xd3, 0xed,
276 0xa2, 0x55, 0x39, 0xab, 0xa8, 0x13, 0x73, 0x7c,
277 0x3f, 0xb2, 0xd6, 0x19, 0xac, 0xff, 0x99, 0xed,
278 0xe8, 0xe6, 0xa6, 0x22, 0xe3, 0x9c, 0xf1, 0x30,
279 0xdc, 0x01, 0x0a, 0x56, 0xfa, 0xe4, 0xc9, 0x99,
280 0xdd, 0xa8, 0xd8, 0xda, 0x35, 0x51, 0x73, 0xb4,
281 0x40, 0x86, 0x85, 0xdb, 0x5c, 0xd5, 0x85, 0x80,
282 0x14, 0x9c, 0xfd, 0x98, 0xa9, 0x82, 0xc5, 0x37,
283 0xff, 0x32, 0x5d, 0xd0, 0x0b, 0xfa, 0xdc, 0x04,
284 0x5e, 0x09, 0xd2, 0xca, 0x17, 0x4b, 0x1a, 0x8e,
285 0x15, 0xe1, 0xcc, 0x4e, 0x52, 0x88, 0x35, 0xbd,
286 0x48, 0xfe, 0x15, 0xa0, 0x91, 0xfd, 0x7e, 0x6c,
287 0x0e, 0x5d, 0x79, 0x1b, 0x81, 0x79, 0xd2, 0x09,
288 0x34, 0x70, 0x3d, 0x81, 0xec, 0xf6, 0x24, 0xbb,
289 0xfb, 0xf1, 0x7b, 0xdf, 0x54, 0xea, 0x80, 0x9b,
290 0xc7, 0x99, 0x9e, 0xbd, 0x16, 0x78, 0x12, 0x53,
291 0x5e, 0x01, 0xa7, 0x4e, 0xbd, 0x67, 0xe1, 0x9b,
292 0x4c, 0x0e, 0x61, 0x45, 0x97, 0xd2, 0xf0, 0x0f,
293 0xfe, 0x15, 0x08, 0xb7, 0x11, 0x4c, 0xe7, 0xff,
294 0x81, 0x53, 0xff, 0x91, 0x25, 0x38, 0x7e, 0x40,
295 0x94, 0xe5, 0xe0, 0xad, 0xe6, 0xd9, 0x79, 0xb6,
296 0x92, 0xc9, 0xfc, 0xde, 0xc3, 0x1a, 0x23, 0xbb,
297 0xdd, 0xc8, 0x51, 0x0c, 0x3a, 0x72, 0xfa, 0x73,
298 0x6f, 0xb7, 0xee, 0x61, 0x39, 0x03, 0x01, 0x3f,
299 0x7f, 0x94, 0x2e, 0x2e, 0xba, 0x3a, 0xbb, 0xb4,
300 0xfa, 0x6a, 0x17, 0xfe, 0xea, 0xef, 0x5e, 0x66,
301 0x97, 0x3f, 0x32, 0x3d, 0xd7, 0x3e, 0xb1, 0xf1,
302 0x6c, 0x14, 0x4c, 0xfd, 0x37, 0xd3, 0x38, 0x80,
303 0xfb, 0xde, 0xa6, 0x24, 0x1e, 0xc8, 0xca, 0x7f,
304 0x3a, 0x93, 0xd8, 0x8b, 0x18, 0x13, 0xb2, 0xe5,
305 0xe4, 0x93, 0x05, 0x53, 0x4f, 0x84, 0x66, 0xa7,
306 0x58, 0x5c, 0x7b, 0x86, 0x52, 0x6d, 0x0d, 0xce,
307 0xa4, 0x30, 0x7d, 0xb6, 0x18, 0x9f, 0xeb, 0xff,
308 0x22, 0xbb, 0x72, 0x29, 0xb9, 0x44, 0x0b, 0x48,
309 0x1e, 0x84, 0x71, 0x81, 0xe3, 0x6d, 0x73, 0x26,
310 0x92, 0xb4, 0x4d, 0x2a, 0x29, 0xb8, 0x1f, 0x72,
311 0xed, 0xd0, 0xe1, 0x64, 0x77, 0xea, 0x8e, 0x88,
312 0x0f, 0xef, 0x3f, 0xb1, 0x3b, 0xad, 0xf9, 0xc9,
313 0x8b, 0xd0, 0xac, 0xc6, 0xcc, 0xa9, 0x40, 0xcc,
314 0x76, 0xf6, 0x3b, 0x53, 0xb5, 0x88, 0xcb, 0xc8,
315 0x37, 0xf1, 0xa2, 0xba, 0x23, 0x15, 0x99, 0x09,
316 0xcc, 0xe7, 0x7a, 0x3b, 0x37, 0xf7, 0x58, 0xc8,
317 0x46, 0x8c, 0x2b, 0x2f, 0x4e, 0x0e, 0xa6, 0x5c,
318 0xea, 0x85, 0x55, 0xba, 0x02, 0x0e, 0x0e, 0x48,
319 0xbc, 0xe1, 0xb1, 0x01, 0x35, 0x79, 0x13, 0x3d,
320 0x1b, 0xc0, 0x53, 0x68, 0x11, 0xe7, 0x95, 0x0f,
321 0x9d, 0x3f, 0x4c, 0x47, 0x7b, 0x4d, 0x1c, 0xae,
322 0x50, 0x9b, 0xcb, 0xdd, 0x05, 0x8d, 0x9a, 0x97,
323 0xfd, 0x8c, 0xef, 0x0c, 0x1d, 0x67, 0x73, 0xa8,
324 0x28, 0x36, 0xd5, 0xb6, 0x92, 0x33, 0x40, 0x75,
325 0x0b, 0x51, 0xc3, 0x64, 0xba, 0x1d, 0xc2, 0xcc,
326 0xee, 0x7d, 0x54, 0x0f, 0x27, 0x69, 0xa7, 0x27,
327 0x63, 0x30, 0x29, 0xd9, 0xc8, 0x84, 0xd8, 0xdf,
328 0x9f, 0x68, 0x8d, 0x04, 0xca, 0xa6, 0xc5, 0xc7,
329 0x7a, 0x5c, 0xc8, 0xd1, 0xcb, 0x4a, 0xec, 0xd0,
330 0xd8, 0x20, 0x69, 0xc5, 0x17, 0xcd, 0x78, 0xc8,
331 0x75, 0x23, 0x30, 0x69, 0xc9, 0xd4, 0xea, 0x5c,
332 0x4f, 0x6b, 0x86, 0x3f, 0x8b, 0xfe, 0xee, 0x44,
333 0xc9, 0x7c, 0xb7, 0xdd, 0x3e, 0xe5, 0xec, 0x54,
334 0x03, 0x3e, 0xaa, 0x82, 0xc6, 0xdf, 0xb2, 0x38,
335 0x0e, 0x5d, 0xb3, 0x88, 0xd9, 0xd3, 0x69, 0x5f,
336 0x8f, 0x70, 0x8a, 0x7e, 0x11, 0xd9, 0x1e, 0x7b,
337 0x38, 0xf1, 0x42, 0x1a, 0xc0, 0x35, 0xf5, 0xc7,
338 0x36, 0x85, 0xf5, 0xf7, 0xb8, 0x7e, 0xc7, 0xef,
339 0x18, 0xf1, 0x63, 0xd6, 0x7a, 0xc6, 0xc9, 0x0e,
340 0x4d, 0x69, 0x4f, 0x84, 0xef, 0x26, 0x41, 0x0c,
341 0xec, 0xc7, 0xe0, 0x7e, 0x3c, 0x67, 0x01, 0x4c,
342 0x62, 0x1a, 0x20, 0x6f, 0xee, 0x47, 0x4d, 0xc0,
343 0x99, 0x13, 0x8d, 0x91, 0x4a, 0x26, 0xd4, 0x37,
344 0x28, 0x90, 0x58, 0x75, 0x66, 0x2b, 0x0a, 0xdf,
345 0xda, 0xee, 0x92, 0x25, 0x90, 0x62, 0x39, 0x9e,
346 0x44, 0x98, 0xad, 0xc1, 0x88, 0xed, 0xe4, 0xb4,
347 0xaf, 0xf5, 0x8c, 0x9b, 0x48, 0x4d, 0x56, 0x60,
348 0x97, 0x0f, 0x61, 0x59, 0x9e, 0xa6, 0x27, 0xfe,
349 0xc1, 0x91, 0x15, 0x38, 0xb8, 0x0f, 0xae, 0x61,
350 0x7d, 0x26, 0x13, 0x5a, 0x73, 0xff, 0x1c, 0xa3,
351 0x61, 0x04, 0x58, 0x48, 0x55, 0x44, 0x11, 0xfe,
352 0x15, 0xca, 0xc3, 0xbd, 0xca, 0xc5, 0xb4, 0x40,
353 0x5d, 0x1b, 0x7f, 0x39, 0xb5, 0x9c, 0x35, 0xec,
354 0x61, 0x15, 0x32, 0x32, 0xb8, 0x4e, 0x40, 0x9f,
355 0x17, 0x1f, 0x0a, 0x4d, 0xa9, 0x91, 0xef, 0xb7,
356 0xb0, 0xeb, 0xc2, 0x83, 0x9a, 0x6c, 0xd2, 0x79,
357 0x43, 0x78, 0x5e, 0x2f, 0xe5, 0xdd, 0x1a, 0x3c,
358 0x45, 0xab, 0x29, 0x40, 0x3a, 0x37, 0x5b, 0x6f,
359 0xd7, 0xfc, 0x48, 0x64, 0x3c, 0x49, 0xfb, 0x21,
360 0xbe, 0xc3, 0xff, 0x07, 0xfb, 0x17, 0xe9, 0xc9,
361 0x0c, 0x4c, 0x5c, 0x15, 0x9e, 0x8e, 0x22, 0x30,
362 0x0a, 0xde, 0x48, 0x7f, 0xdb, 0x0d, 0xd1, 0x2b,
363 0x87, 0x38, 0x9e, 0xcc, 0x5a, 0x01, 0x16, 0xee,
364 0x75, 0x49, 0x0d, 0x30, 0x01, 0x34, 0x6a, 0xb6,
365 0x9a, 0x5a, 0x2a, 0xec, 0xbb, 0x48, 0xac, 0xd3,
366 0x77, 0x83, 0xd8, 0x08, 0x86, 0x4f, 0x48, 0x09,
367 0x29, 0x41, 0x79, 0xa1, 0x03, 0x12, 0xc4, 0xcd,
368 0x90, 0x55, 0x47, 0x66, 0x74, 0x9a, 0xcc, 0x4f,
369 0x35, 0x8c, 0xd6, 0x98, 0xef, 0xeb, 0x45, 0xb9,
370 0x9a, 0x26, 0x2f, 0x39, 0xa5, 0x70, 0x6d, 0xfc,
371 0xb4, 0x51, 0xee, 0xf4, 0x9c, 0xe7, 0x38, 0x59,
372 0xad, 0xf4, 0xbc, 0x46, 0xff, 0x46, 0x8e, 0x60,
373 0x9c, 0xa3, 0x60, 0x1d, 0xf8, 0x26, 0x72, 0xf5,
374 0x72, 0x9d, 0x68, 0x80, 0x04, 0xf6, 0x0b, 0xa1,
375 0x0a, 0xd5, 0xa7, 0x82, 0x3a, 0x3e, 0x47, 0xa8,
376 0x5a, 0xde, 0x59, 0x4f, 0x7b, 0x07, 0xb3, 0xe9,
377 0x24, 0x19, 0x3d, 0x34, 0x05, 0xec, 0xf1, 0xab,
378 0x6e, 0x64, 0x8f, 0xd3, 0xe6, 0x41, 0x86, 0x80,
379 0x70, 0xe3, 0x8d, 0x60, 0x9c, 0x34, 0x25, 0x01,
380 0x07, 0x4d, 0x19, 0x41, 0x4e, 0x3d, 0x5c, 0x7e,
381 0xa8, 0xf5, 0xcc, 0xd5, 0x7b, 0xe2, 0x7d, 0x3d,
382 0x49, 0x86, 0x7d, 0x07, 0xb7, 0x10, 0xe3, 0x35,
383 0xb8, 0x84, 0x6d, 0x76, 0xab, 0x17, 0xc6, 0x38,
384 0xb4, 0xd3, 0x28, 0x57, 0xad, 0xd3, 0x88, 0x5a,
385 0xda, 0xea, 0xc8, 0x94, 0xcc, 0x37, 0x19, 0xac,
386 0x9c, 0x9f, 0x4b, 0x00, 0x15, 0xc0, 0xc8, 0xca,
387 0x1f, 0x15, 0xaa, 0xe0, 0xdb, 0xf9, 0x2f, 0x57,
388 0x1b, 0x24, 0xc7, 0x6f, 0x76, 0x29, 0xfb, 0xed,
389 0x25, 0x0d, 0xc0, 0xfe, 0xbd, 0x5a, 0xbf, 0x20,
390 0x08, 0x51, 0x05, 0xec, 0x71, 0xa3, 0xbf, 0xef,
391 0x5e, 0x99, 0x75, 0xdb, 0x3c, 0x5f, 0x9a, 0x8c,
392 0xbb, 0x19, 0x5c, 0x0e, 0x93, 0x19, 0xf8, 0x6a,
393 0xbc, 0xf2, 0x12, 0x54, 0x2f, 0xcb, 0x28, 0x64,
394 0x88, 0xb3, 0x92, 0x0d, 0x96, 0xd1, 0xa6, 0xe4,
395 0x1f, 0xf1, 0x4d, 0xa4, 0xab, 0x1c, 0xee, 0x54,
396 0xf2, 0xad, 0x29, 0x6d, 0x32, 0x37, 0xb2, 0x16,
397 0x77, 0x5c, 0xdc, 0x2e, 0x54, 0xec, 0x75, 0x26,
398 0xc6, 0x36, 0xd9, 0x17, 0x2c, 0xf1, 0x7a, 0xdc,
399 0x4b, 0xf1, 0xe2, 0xd9, 0x95, 0xba, 0xac, 0x87,
400 0xc1, 0xf3, 0x8e, 0x58, 0x08, 0xd8, 0x87, 0x60,
401 0xc9, 0xee, 0x6a, 0xde, 0xa4, 0xd2, 0xfc, 0x0d,
402 0xe5, 0x36, 0xc4, 0x5c, 0x52, 0xb3, 0x07, 0x54,
403 0x65, 0x24, 0xc1, 0xb1, 0xd1, 0xb1, 0x53, 0x13,
404 0x31, 0x79, 0x7f, 0x05, 0x76, 0xeb, 0x37, 0x59,
405 0x15, 0x2b, 0xd1, 0x3f, 0xac, 0x08, 0x97, 0xeb,
406 0x91, 0x98, 0xdf, 0x6c, 0x09, 0x0d, 0x04, 0x9f,
407 0xdc, 0x3b, 0x0e, 0x60, 0x68, 0x47, 0x23, 0x15,
408 0x16, 0xc6, 0x0b, 0x35, 0xf8, 0x77, 0xa2, 0x78,
409 0x50, 0xd4, 0x64, 0x22, 0x33, 0xff, 0xfb, 0x93,
410 0x71, 0x46, 0x50, 0x39, 0x1b, 0x9c, 0xea, 0x4e,
411 0x8d, 0x0c, 0x37, 0xe5, 0x5c, 0x51, 0x3a, 0x31,
412 0xb2, 0x85, 0x84, 0x3f, 0x41, 0xee, 0xa2, 0xc1,
413 0xc6, 0x13, 0x3b, 0x54, 0x28, 0xd2, 0x18, 0x37,
414 0xcc, 0x46, 0x9f, 0x6a, 0x91, 0x3d, 0x5a, 0x15,
415 0x3c, 0x89, 0xa3, 0x61, 0x06, 0x7d, 0x2e, 0x78,
416 0xbe, 0x7d, 0x40, 0xba, 0x2f, 0x95, 0xb1, 0x2f,
417 0x87, 0x3b, 0x8a, 0xbe, 0x6a, 0xf4, 0xc2, 0x31,
418 0x74, 0xee, 0x91, 0xe0, 0x23, 0xaa, 0x5d, 0x7f,
419 0xdd, 0xf0, 0x44, 0x8c, 0x0b, 0x59, 0x2b, 0xfc,
420 0x48, 0x3a, 0xdf, 0x07, 0x05, 0x38, 0x6c, 0xc9,
421 0xeb, 0x18, 0x24, 0x68, 0x8d, 0x58, 0x98, 0xd3,
422 0x31, 0xa3, 0xe4, 0x70, 0x59, 0xb1, 0x21, 0xbe,
423 0x7e, 0x65, 0x7d, 0xb8, 0x04, 0xab, 0xf6, 0xe4,
424 0xd7, 0xda, 0xec, 0x09, 0x8f, 0xda, 0x6d, 0x24,
425 0x07, 0xcc, 0x29, 0x17, 0x05, 0x78, 0x1a, 0xc1,
426 0xb1, 0xce, 0xfc, 0xaa, 0x2d, 0xe7, 0xcc, 0x85,
427 0x84, 0x84, 0x03, 0x2a, 0x0c, 0x3f, 0xa9, 0xf8,
428 0xfd, 0x84, 0x53, 0x59, 0x5c, 0xf0, 0xd4, 0x09,
429 0xf0, 0xd2, 0x6c, 0x32, 0x03, 0xb0, 0xa0, 0x8c,
430 0x52, 0xeb, 0x23, 0x91, 0x88, 0x43, 0x13, 0x46,
431 0xf6, 0x1e, 0xb4, 0x1b, 0xf5, 0x8e, 0x3a, 0xb5,
432 0x3d, 0x00, 0xf6, 0xe5, 0x08, 0x3d, 0x5f, 0x39,
433 0xd3, 0x21, 0x69, 0xbc, 0x03, 0x22, 0x3a, 0xd2,
434 0x5c, 0x84, 0xf8, 0x15, 0xc4, 0x80, 0x0b, 0xbc,
435 0x29, 0x3c, 0xf3, 0x95, 0x98, 0xcd, 0x8f, 0x35,
436 0xbc, 0xa5, 0x3e, 0xfc, 0xd4, 0x13, 0x9e, 0xde,
437 0x4f, 0xce, 0x71, 0x9d, 0x09, 0xad, 0xf2, 0x80,
438 0x6b, 0x65, 0x7f, 0x03, 0x00, 0x14, 0x7c, 0x15,
439 0x85, 0x40, 0x6d, 0x70, 0xea, 0xdc, 0xb3, 0x63,
440 0x35, 0x4f, 0x4d, 0xe0, 0xd9, 0xd5, 0x3c, 0x58,
441 0x56, 0x23, 0x80, 0xe2, 0x36, 0xdd, 0x75, 0x1d,
442 0x94, 0x11, 0x41, 0x8e, 0xe0, 0x81, 0x8e, 0xcf,
443 0xe0, 0xe5, 0xf6, 0xde, 0xd1, 0xe7, 0x04, 0x12,
444 0x79, 0x92, 0x2b, 0x71, 0x2a, 0x79, 0x8b, 0x7c,
445 0x44, 0x79, 0x16, 0x30, 0x4e, 0xf4, 0xf6, 0x9b,
446 0xb7, 0x40, 0xa3, 0x5a, 0xa7, 0x69, 0x3e, 0xc1,
447 0x3a, 0x04, 0xd0, 0x88, 0xa0, 0x3b, 0xdd, 0xc6,
448 0x9e, 0x7e, 0x1e, 0x1e, 0x8f, 0x44, 0xf7, 0x73,
449 0x67, 0x1e, 0x1a, 0x78, 0xfa, 0x62, 0xf4, 0xa9,
450 0xa8, 0xc6, 0x5b, 0xb8, 0xfa, 0x06, 0x7d, 0x5e,
451 0x38, 0x1c, 0x9a, 0x39, 0xe9, 0x39, 0x98, 0x22,
452 0x0b, 0xa7, 0xac, 0x0b, 0xf3, 0xbc, 0xf1, 0xeb,
453 0x8c, 0x81, 0xe3, 0x48, 0x8a, 0xed, 0x42, 0xc2,
454 0x38, 0xcf, 0x3e, 0xda, 0xd2, 0x89, 0x8d, 0x9c,
455 0x53, 0xb5, 0x2f, 0x41, 0x01, 0x26, 0x84, 0x9c,
456 0xa3, 0x56, 0xf6, 0x49, 0xc7, 0xd4, 0x9f, 0x93,
457 0x1b, 0x96, 0x49, 0x5e, 0xad, 0xb3, 0x84, 0x1f,
458 0x3c, 0xa4, 0xe0, 0x9b, 0xd1, 0x90, 0xbc, 0x38,
459 0x6c, 0xdd, 0x95, 0x4d, 0x9d, 0xb1, 0x71, 0x57,
460 0x2d, 0x34, 0xe8, 0xb8, 0x42, 0xc7, 0x99, 0x03,
461 0xc7, 0x07, 0x30, 0x65, 0x91, 0x55, 0xd5, 0x90,
462 0x70, 0x97, 0x37, 0x68, 0xd4, 0x11, 0xf9, 0xe8,
463 0xce, 0xec, 0xdc, 0x34, 0xd5, 0xd3, 0xb7, 0xc4,
464 0xb8, 0x97, 0x05, 0x92, 0xad, 0xf8, 0xe2, 0x36,
465 0x64, 0x41, 0xc9, 0xc5, 0x41, 0x77, 0x52, 0xd7,
466 0x2c, 0xa5, 0x24, 0x2f, 0xd9, 0x34, 0x0b, 0x47,
467 0x35, 0xa7, 0x28, 0x8b, 0xc5, 0xcd, 0xe9, 0x46,
468 0xac, 0x39, 0x94, 0x3c, 0x10, 0xc6, 0x29, 0x73,
469 0x0e, 0x0e, 0x5d, 0xe0, 0x71, 0x03, 0x8a, 0x72,
470 0x0e, 0x26, 0xb0, 0x7d, 0x84, 0xed, 0x95, 0x23,
471 0x49, 0x5a, 0x45, 0x83, 0x45, 0x60, 0x11, 0x4a,
472 0x46, 0x31, 0xd4, 0xd8, 0x16, 0x54, 0x98, 0x58,
473 0xed, 0x6d, 0xcc, 0x5d, 0xd6, 0x50, 0x61, 0x9f,
474 0x9d, 0xc5, 0x3e, 0x9d, 0x32, 0x47, 0xde, 0x96,
475 0xe1, 0x5d, 0xd8, 0xf8, 0xb4, 0x69, 0x6f, 0xb9,
476 0x15, 0x90, 0x57, 0x7a, 0xf6, 0xad, 0xb0, 0x5b,
477 0xf5, 0xa6, 0x36, 0x94, 0xfd, 0x84, 0xce, 0x1c,
478 0x0f, 0x4b, 0xd0, 0xc2, 0x5b, 0x6b, 0x56, 0xef,
479 0x73, 0x93, 0x0b, 0xc3, 0xee, 0xd9, 0xcf, 0xd3,
480 0xa4, 0x22, 0x58, 0xcd, 0x50, 0x6e, 0x65, 0xf4,
481 0xe9, 0xb7, 0x71, 0xaf, 0x4b, 0xb3, 0xb6, 0x2f,
482 0x0f, 0x0e, 0x3b, 0xc9, 0x85, 0x14, 0xf5, 0x17,
483 0xe8, 0x7a, 0x3a, 0xbf, 0x5f, 0x5e, 0xf8, 0x18,
484 0x48, 0xa6, 0x72, 0xab, 0x06, 0x95, 0xe9, 0xc8,
485 0xa7, 0xf4, 0x32, 0x44, 0x04, 0x0c, 0x84, 0x98,
486 0x73, 0xe3, 0x89, 0x8d, 0x5f, 0x7e, 0x4a, 0x42,
487 0x8f, 0xc5, 0x28, 0xb1, 0x82, 0xef, 0x1c, 0x97,
488 0x31, 0x3b, 0x4d, 0xe0, 0x0e, 0x10, 0x10, 0x97,
489 0x93, 0x49, 0x78, 0x2f, 0x0d, 0x86, 0x8b, 0xa1,
490 0x53, 0xa9, 0x81, 0x20, 0x79, 0xe7, 0x07, 0x77,
491 0xb6, 0xac, 0x5e, 0xd2, 0x05, 0xcd, 0xe9, 0xdb,
492 0x8a, 0x94, 0x82, 0x8a, 0x23, 0xb9, 0x3d, 0x1c,
493 0xa9, 0x7d, 0x72, 0x4a, 0xed, 0x33, 0xa3, 0xdb,
494 0x21, 0xa7, 0x86, 0x33, 0x45, 0xa5, 0xaa, 0x56,
495 0x45, 0xb5, 0x83, 0x29, 0x40, 0x47, 0x79, 0x04,
496 0x6e, 0xb9, 0x95, 0xd0, 0x81, 0x77, 0x2d, 0x48,
497 0x1e, 0xfe, 0xc3, 0xc2, 0x1e, 0xe5, 0xf2, 0xbe,
498 0xfd, 0x3b, 0x94, 0x9f, 0xc4, 0xc4, 0x26, 0x9d,
499 0xe4, 0x66, 0x1e, 0x19, 0xee, 0x6c, 0x79, 0x97,
500 0x11, 0x31, 0x4b, 0x0d, 0x01, 0xcb, 0xde, 0xa8,
501 0xf6, 0x6d, 0x7c, 0x39, 0x46, 0x4e, 0x7e, 0x3f,
502 0x94, 0x17, 0xdf, 0xa1, 0x7d, 0xd9, 0x1c, 0x8e,
503 0xbc, 0x7d, 0x33, 0x7d, 0xe3, 0x12, 0x40, 0xca,
504 0xab, 0x37, 0x11, 0x46, 0xd4, 0xae, 0xef, 0x44,
505 0xa2, 0xb3, 0x6a, 0x66, 0x0e, 0x0c, 0x90, 0x7f,
506 0xdf, 0x5c, 0x66, 0x5f, 0xf2, 0x94, 0x9f, 0xa6,
507 0x73, 0x4f, 0xeb, 0x0d, 0xad, 0xbf, 0xc0, 0x63,
508 0x5c, 0xdc, 0x46, 0x51, 0xe8, 0x8e, 0x90, 0x19,
509 0xa8, 0xa4, 0x3c, 0x91, 0x79, 0xfa, 0x7e, 0x58,
510 0x85, 0x13, 0x55, 0xc5, 0x19, 0x82, 0x37, 0x1b,
511 0x0a, 0x02, 0x1f, 0x99, 0x6b, 0x18, 0xf1, 0x28,
512 0x08, 0xa2, 0x73, 0xb8, 0x0f, 0x2e, 0xcd, 0xbf,
513 0xf3, 0x86, 0x7f, 0xea, 0xef, 0xd0, 0xbb, 0xa6,
514 0x21, 0xdf, 0x49, 0x73, 0x51, 0xcc, 0x36, 0xd3,
515 0x3e, 0xa0, 0xf8, 0x44, 0xdf, 0xd3, 0xa6, 0xbe,
516 0x8a, 0xd4, 0x57, 0xdd, 0x72, 0x94, 0x61, 0x0f,
517 0x82, 0xd1, 0x07, 0xb8, 0x7c, 0x18, 0x83, 0xdf,
518 0x3a, 0xe5, 0x50, 0x6a, 0x82, 0x20, 0xac, 0xa9,
519 0xa8, 0xff, 0xd9, 0xf3, 0x77, 0x33, 0x5a, 0x9e,
520 0x7f, 0x6d, 0xfe, 0x5d, 0x33, 0x41, 0x42, 0xe7,
521 0x6c, 0x19, 0xe0, 0x44, 0x8a, 0x15, 0xf6, 0x70,
522 0x98, 0xb7, 0x68, 0x4d, 0xfa, 0x97, 0x39, 0xb0,
523 0x8e, 0xe8, 0x84, 0x8b, 0x75, 0x30, 0xb7, 0x7d,
524 0x92, 0x69, 0x20, 0x9c, 0x81, 0xfb, 0x4b, 0xf4,
525 0x01, 0x50, 0xeb, 0xce, 0x0c, 0x1c, 0x6c, 0xb5,
526 0x4a, 0xd7, 0x27, 0x0c, 0xce, 0xbb, 0xe5, 0x85,
527 0xf0, 0xb6, 0xee, 0xd5, 0x70, 0xdd, 0x3b, 0xfc,
528 0xd4, 0x99, 0xf1, 0x33, 0xdd, 0x8b, 0xc4, 0x2f,
529 0xae, 0xab, 0x74, 0x96, 0x32, 0xc7, 0x4c, 0x56,
530 0x3c, 0x89, 0x0f, 0x96, 0x0b, 0x42, 0xc0, 0xcb,
531 0xee, 0x0f, 0x0b, 0x8c, 0xfb, 0x7e, 0x47, 0x7b,
532 0x64, 0x48, 0xfd, 0xb2, 0x00, 0x80, 0x89, 0xa5,
533 0x13, 0x55, 0x62, 0xfc, 0x8f, 0xe2, 0x42, 0x03,
534 0xb7, 0x4e, 0x2a, 0x79, 0xb4, 0x82, 0xea, 0x23,
535 0x49, 0xda, 0xaf, 0x52, 0x63, 0x1e, 0x60, 0x03,
536 0x89, 0x06, 0x44, 0x46, 0x08, 0xc3, 0xc4, 0x87,
537 0x70, 0x2e, 0xda, 0x94, 0xad, 0x6b, 0xe0, 0xe4,
538 0xd1, 0x8a, 0x06, 0xc2, 0xa8, 0xc0, 0xa7, 0x43,
539 0x3c, 0x47, 0x52, 0x0e, 0xc3, 0x77, 0x81, 0x11,
540 0x67, 0x0e, 0xa0, 0x70, 0x04, 0x47, 0x29, 0x40,
541 0x86, 0x0d, 0x34, 0x56, 0xa7, 0xc9, 0x35, 0x59,
542 0x68, 0xdc, 0x93, 0x81, 0x70, 0xee, 0x86, 0xd9,
543 0x80, 0x06, 0x40, 0x4f, 0x1a, 0x0d, 0x40, 0x30,
544 0x0b, 0xcb, 0x96, 0x47, 0xc1, 0xb7, 0x52, 0xfd,
545 0x56, 0xe0, 0x72, 0x4b, 0xfb, 0xbd, 0x92, 0x45,
546 0x61, 0x71, 0xc2, 0x33, 0x11, 0xbf, 0x52, 0x83,
547 0x79, 0x26, 0xe0, 0x49, 0x6b, 0xb7, 0x05, 0x8b,
548 0xe8, 0x0e, 0x87, 0x31, 0xd7, 0x9d, 0x8a, 0xf5,
549 0xc0, 0x5f, 0x2e, 0x58, 0x4a, 0xdb, 0x11, 0xb3,
550 0x6c, 0x30, 0x2a, 0x46, 0x19, 0xe3, 0x27, 0x84,
551 0x1f, 0x63, 0x6e, 0xf6, 0x57, 0xc7, 0xc9, 0xd8,
552 0x5e, 0xba, 0xb3, 0x87, 0xd5, 0x83, 0x26, 0x34,
553 0x21, 0x9e, 0x65, 0xde, 0x42, 0xd3, 0xbe, 0x7b,
554 0xbc, 0x91, 0x71, 0x44, 0x4d, 0x99, 0x3b, 0x31,
555 0xe5, 0x3f, 0x11, 0x4e, 0x7f, 0x13, 0x51, 0x3b,
556 0xae, 0x79, 0xc9, 0xd3, 0x81, 0x8e, 0x25, 0x40,
557 0x10, 0xfc, 0x07, 0x1e, 0xf9, 0x7b, 0x9a, 0x4b,
558 0x6c, 0xe3, 0xb3, 0xad, 0x1a, 0x0a, 0xdd, 0x9e,
559 0x59, 0x0c, 0xa2, 0xcd, 0xae, 0x48, 0x4a, 0x38,
560 0x5b, 0x47, 0x41, 0x94, 0x65, 0x6b, 0xbb, 0xeb,
561 0x5b, 0xe3, 0xaf, 0x07, 0x5b, 0xd4, 0x4a, 0xa2,
562 0xc9, 0x5d, 0x2f, 0x64, 0x03, 0xd7, 0x3a, 0x2c,
563 0x6e, 0xce, 0x76, 0x95, 0xb4, 0xb3, 0xc0, 0xf1,
564 0xe2, 0x45, 0x73, 0x7a, 0x5c, 0xab, 0xc1, 0xfc,
565 0x02, 0x8d, 0x81, 0x29, 0xb3, 0xac, 0x07, 0xec,
566 0x40, 0x7d, 0x45, 0xd9, 0x7a, 0x59, 0xee, 0x34,
567 0xf0, 0xe9, 0xd5, 0x7b, 0x96, 0xb1, 0x3d, 0x95,
568 0xcc, 0x86, 0xb5, 0xb6, 0x04, 0x2d, 0xb5, 0x92,
569 0x7e, 0x76, 0xf4, 0x06, 0xa9, 0xa3, 0x12, 0x0f,
570 0xb1, 0xaf, 0x26, 0xba, 0x7c, 0xfc, 0x7e, 0x1c,
571 0xbc, 0x2c, 0x49, 0x97, 0x53, 0x60, 0x13, 0x0b,
572 0xa6, 0x61, 0x83, 0x89, 0x42, 0xd4, 0x17, 0x0c,
573 0x6c, 0x26, 0x52, 0xc3, 0xb3, 0xd4, 0x67, 0xf5,
574 0xe3, 0x04, 0xb7, 0xf4, 0xcb, 0x80, 0xb8, 0xcb,
575 0x77, 0x56, 0x3e, 0xaa, 0x57, 0x54, 0xee, 0xb4,
576 0x2c, 0x67, 0xcf, 0xf2, 0xdc, 0xbe, 0x55, 0xf9,
577 0x43, 0x1f, 0x6e, 0x22, 0x97, 0x67, 0x7f, 0xc4,
578 0xef, 0xb1, 0x26, 0x31, 0x1e, 0x27, 0xdf, 0x41,
579 0x80, 0x47, 0x6c, 0xe2, 0xfa, 0xa9, 0x8c, 0x2a,
580 0xf6, 0xf2, 0xab, 0xf0, 0x15, 0xda, 0x6c, 0xc8,
581 0xfe, 0xb5, 0x23, 0xde, 0xa9, 0x05, 0x3f, 0x06,
582 0x54, 0x4c, 0xcd, 0xe1, 0xab, 0xfc, 0x0e, 0x62,
583 0x33, 0x31, 0x73, 0x2c, 0x76, 0xcb, 0xb4, 0x47,
584 0x1e, 0x20, 0xad, 0xd8, 0xf2, 0x31, 0xdd, 0xc4,
585 0x8b, 0x0c, 0x77, 0xbe, 0xe1, 0x8b, 0x26, 0x00,
586 0x02, 0x58, 0xd6, 0x8d, 0xef, 0xad, 0x74, 0x67,
587 0xab, 0x3f, 0xef, 0xcb, 0x6f, 0xb0, 0xcc, 0x81,
588 0x44, 0x4c, 0xaf, 0xe9, 0x49, 0x4f, 0xdb, 0xa0,
589 0x25, 0xa4, 0xf0, 0x89, 0xf1, 0xbe, 0xd8, 0x10,
590 0xff, 0xb1, 0x3b, 0x4b, 0xfa, 0x98, 0xf5, 0x79,
591 0x6d, 0x1e, 0x69, 0x4d, 0x57, 0xb1, 0xc8, 0x19,
592 0x1b, 0xbd, 0x1e, 0x8c, 0x84, 0xb7, 0x7b, 0xe8,
593 0xd2, 0x2d, 0x09, 0x41, 0x41, 0x37, 0x3d, 0xb1,
594 0x6f, 0x26, 0x5d, 0x71, 0x16, 0x3d, 0xb7, 0x83,
595 0x27, 0x2c, 0xa7, 0xb6, 0x50, 0xbd, 0x91, 0x86,
596 0xab, 0x24, 0xa1, 0x38, 0xfd, 0xea, 0x71, 0x55,
597 0x7e, 0x9a, 0x07, 0x77, 0x4b, 0xfa, 0x61, 0x66,
598 0x20, 0x1e, 0x28, 0x95, 0x18, 0x1b, 0xa4, 0xa0,
599 0xfd, 0xc0, 0x89, 0x72, 0x43, 0xd9, 0x3b, 0x49,
600 0x5a, 0x3f, 0x9d, 0xbf, 0xdb, 0xb4, 0x46, 0xea,
601 0x42, 0x01, 0x77, 0x23, 0x68, 0x95, 0xb6, 0x24,
602 0xb3, 0xa8, 0x6c, 0x28, 0x3b, 0x11, 0x40, 0x7e,
603 0x18, 0x65, 0x6d, 0xd8, 0x24, 0x42, 0x7d, 0x88,
604 0xc0, 0x52, 0xd9, 0x05, 0xe4, 0x95, 0x90, 0x87,
605 0x8c, 0xf4, 0xd0, 0x6b, 0xb9, 0x83, 0x99, 0x34,
606 0x6d, 0xfe, 0x54, 0x40, 0x94, 0x52, 0x21, 0x4f,
607 0x14, 0x25, 0xc5, 0xd6, 0x5e, 0x95, 0xdc, 0x0a,
608 0x2b, 0x89, 0x20, 0x11, 0x84, 0x48, 0xd6, 0x3a,
609 0xcd, 0x5c, 0x24, 0xad, 0x62, 0xe3, 0xb1, 0x93,
610 0x25, 0x8d, 0xcd, 0x7e, 0xfc, 0x27, 0xa3, 0x37,
611 0xfd, 0x84, 0xfc, 0x1b, 0xb2, 0xf1, 0x27, 0x38,
612 0x5a, 0xb7, 0xfc, 0xf2, 0xfa, 0x95, 0x66, 0xd4,
613 0xfb, 0xba, 0xa7, 0xd7, 0xa3, 0x72, 0x69, 0x48,
614 0x48, 0x8c, 0xeb, 0x28, 0x89, 0xfe, 0x33, 0x65,
615 0x5a, 0x36, 0x01, 0x7e, 0x06, 0x79, 0x0a, 0x09,
616 0x3b, 0x74, 0x11, 0x9a, 0x6e, 0xbf, 0xd4, 0x9e,
617 0x58, 0x90, 0x49, 0x4f, 0x4d, 0x08, 0xd4, 0xe5,
618 0x4a, 0x09, 0x21, 0xef, 0x8b, 0xb8, 0x74, 0x3b,
619 0x91, 0xdd, 0x36, 0x85, 0x60, 0x2d, 0xfa, 0xd4,
620 0x45, 0x7b, 0x45, 0x53, 0xf5, 0x47, 0x87, 0x7e,
621 0xa6, 0x37, 0xc8, 0x78, 0x7a, 0x68, 0x9d, 0x8d,
622 0x65, 0x2c, 0x0e, 0x91, 0x5c, 0xa2, 0x60, 0xf0,
623 0x8e, 0x3f, 0xe9, 0x1a, 0xcd, 0xaa, 0xe7, 0xd5,
624 0x77, 0x18, 0xaf, 0xc9, 0xbc, 0x18, 0xea, 0x48,
625 0x1b, 0xfb, 0x22, 0x48, 0x70, 0x16, 0x29, 0x9e,
626 0x5b, 0xc1, 0x2c, 0x66, 0x23, 0xbc, 0xf0, 0x1f,
627 0xef, 0xaf, 0xe4, 0xd6, 0x04, 0x19, 0x82, 0x7a,
628 0x0b, 0xba, 0x4b, 0x46, 0xb1, 0x6a, 0x85, 0x5d,
629 0xb4, 0x73, 0xd6, 0x21, 0xa1, 0x71, 0x60, 0x14,
630 0xee, 0x0a, 0x77, 0xc4, 0x66, 0x2e, 0xf9, 0x69,
631 0x30, 0xaf, 0x41, 0x0b, 0xc8, 0x83, 0x3c, 0x53,
632 0x99, 0x19, 0x27, 0x46, 0xf7, 0x41, 0x6e, 0x56,
633 0xdc, 0x94, 0x28, 0x67, 0x4e, 0xb7, 0x25, 0x48,
634 0x8a, 0xc2, 0xe0, 0x60, 0x96, 0xcc, 0x18, 0xf4,
635 0x84, 0xdd, 0xa7, 0x5e, 0x3e, 0x05, 0x0b, 0x26,
636 0x26, 0xb2, 0x5c, 0x1f, 0x57, 0x1a, 0x04, 0x7e,
637 0x6a, 0xe3, 0x2f, 0xb4, 0x35, 0xb6, 0x38, 0x40,
638 0x40, 0xcd, 0x6f, 0x87, 0x2e, 0xef, 0xa3, 0xd7,
639 0xa9, 0xc2, 0xe8, 0x0d, 0x27, 0xdf, 0x44, 0x62,
640 0x99, 0xa0, 0xfc, 0xcf, 0x81, 0x78, 0xcb, 0xfe,
641 0xe5, 0xa0, 0x03, 0x4e, 0x6c, 0xd7, 0xf4, 0xaf,
642 0x7a, 0xbb, 0x61, 0x82, 0xfe, 0x71, 0x89, 0xb2,
643 0x22, 0x7c, 0x8e, 0x83, 0x04, 0xce, 0xf6, 0x5d,
644 0x84, 0x8f, 0x95, 0x6a, 0x7f, 0xad, 0xfd, 0x32,
645 0x9c, 0x5e, 0xe4, 0x9c, 0x89, 0x60, 0x54, 0xaa,
646 0x96, 0x72, 0xd2, 0xd7, 0x36, 0x85, 0xa9, 0x45,
647 0xd2, 0x2a, 0xa1, 0x81, 0x49, 0x6f, 0x7e, 0x04,
648 0xfa, 0xe2, 0xfe, 0x90, 0x26, 0x77, 0x5a, 0x33,
649 0xb8, 0x04, 0x9a, 0x7a, 0xe6, 0x4c, 0x4f, 0xad,
650 0x72, 0x96, 0x08, 0x28, 0x58, 0x13, 0xf8, 0xc4,
651 0x1c, 0xf0, 0xc3, 0x45, 0x95, 0x49, 0x20, 0x8c,
652 0x9f, 0x39, 0x70, 0xe1, 0x77, 0xfe, 0xd5, 0x4b,
653 0xaf, 0x86, 0xda, 0xef, 0x22, 0x06, 0x83, 0x36,
654 0x29, 0x12, 0x11, 0x40, 0xbc, 0x3b, 0x86, 0xaa,
655 0xaa, 0x65, 0x60, 0xc3, 0x80, 0xca, 0xed, 0xa9,
656 0xf3, 0xb0, 0x79, 0x96, 0xa2, 0x55, 0x27, 0x28,
657 0x55, 0x73, 0x26, 0xa5, 0x50, 0xea, 0x92, 0x4b,
658 0x3c, 0x5c, 0x82, 0x33, 0xf0, 0x01, 0x3f, 0x03,
659 0xc1, 0x08, 0x05, 0xbf, 0x98, 0xf4, 0x9b, 0x6d,
660 0xa5, 0xa8, 0xb4, 0x82, 0x0c, 0x06, 0xfa, 0xff,
661 0x2d, 0x08, 0xf3, 0x05, 0x4f, 0x57, 0x2a, 0x39,
662 0xd4, 0x83, 0x0d, 0x75, 0x51, 0xd8, 0x5b, 0x1b,
663 0xd3, 0x51, 0x5a, 0x32, 0x2a, 0x9b, 0x32, 0xb2,
664 0xf2, 0xa4, 0x96, 0x12, 0xf2, 0xae, 0x40, 0x34,
665 0x67, 0xa8, 0xf5, 0x44, 0xd5, 0x35, 0x53, 0xfe,
666 0xa3, 0x60, 0x96, 0x63, 0x0f, 0x1f, 0x6e, 0xb0,
667 0x5a, 0x42, 0xa6, 0xfc, 0x51, 0x0b, 0x60, 0x27,
668 0xbc, 0x06, 0x71, 0xed, 0x65, 0x5b, 0x23, 0x86,
669 0x4a, 0x07, 0x3b, 0x22, 0x07, 0x46, 0xe6, 0x90,
670 0x3e, 0xf3, 0x25, 0x50, 0x1b, 0x4c, 0x7f, 0x03,
671 0x08, 0xa8, 0x36, 0x6b, 0x87, 0xe5, 0xe3, 0xdb,
672 0x9a, 0x38, 0x83, 0xff, 0x9f, 0x1a, 0x9f, 0x57,
673 0xa4, 0x2a, 0xf6, 0x37, 0xbc, 0x1a, 0xff, 0xc9,
674 0x1e, 0x35, 0x0c, 0xc3, 0x7c, 0xa3, 0xb2, 0xe5,
675 0xd2, 0xc6, 0xb4, 0x57, 0x47, 0xe4, 0x32, 0x16,
676 0x6d, 0xa9, 0xae, 0x64, 0xe6, 0x2d, 0x8d, 0xc5,
677 0x8d, 0x50, 0x8e, 0xe8, 0x1a, 0x22, 0x34, 0x2a,
678 0xd9, 0xeb, 0x51, 0x90, 0x4a, 0xb1, 0x41, 0x7d,
679 0x64, 0xf9, 0xb9, 0x0d, 0xf6, 0x23, 0x33, 0xb0,
680 0x33, 0xf4, 0xf7, 0x3f, 0x27, 0x84, 0xc6, 0x0f,
681 0x54, 0xa5, 0xc0, 0x2e, 0xec, 0x0b, 0x3a, 0x48,
682 0x6e, 0x80, 0x35, 0x81, 0x43, 0x9b, 0x90, 0xb1,
683 0xd0, 0x2b, 0xea, 0x21, 0xdc, 0xda, 0x5b, 0x09,
684 0xf4, 0xcc, 0x10, 0xb4, 0xc7, 0xfe, 0x79, 0x51,
685 0xc3, 0xc5, 0xac, 0x88, 0x74, 0x84, 0x0b, 0x4b,
686 0xca, 0x79, 0x16, 0x29, 0xfb, 0x69, 0x54, 0xdf,
687 0x41, 0x7e, 0xe9, 0xc7, 0x8e, 0xea, 0xa5, 0xfe,
688 0xfc, 0x76, 0x0e, 0x90, 0xc4, 0x92, 0x38, 0xad,
689 0x7b, 0x48, 0xe6, 0x6e, 0xf7, 0x21, 0xfd, 0x4e,
690 0x93, 0x0a, 0x7b, 0x41, 0x83, 0x68, 0xfb, 0x57,
691 0x51, 0x76, 0x34, 0xa9, 0x6c, 0x00, 0xaa, 0x4f,
692 0x66, 0x65, 0x98, 0x4a, 0x4f, 0xa3, 0xa0, 0xef,
693 0x69, 0x3f, 0xe3, 0x1c, 0x92, 0x8c, 0xfd, 0xd8,
694 0xe8, 0xde, 0x7c, 0x7f, 0x3e, 0x84, 0x8e, 0x69,
695 0x3c, 0xf1, 0xf2, 0x05, 0x46, 0xdc, 0x2f, 0x9d,
696 0x5e, 0x6e, 0x4c, 0xfb, 0xb5, 0x99, 0x2a, 0x59,
697 0x63, 0xc1, 0x34, 0xbc, 0x57, 0xc0, 0x0d, 0xb9,
698 0x61, 0x25, 0xf3, 0x33, 0x23, 0x51, 0xb6, 0x0d,
699 0x07, 0xa6, 0xab, 0x94, 0x4a, 0xb7, 0x2a, 0xea,
700 0xee, 0xac, 0xa3, 0xc3, 0x04, 0x8b, 0x0e, 0x56,
701 0xfe, 0x44, 0xa7, 0x39, 0xe2, 0xed, 0xed, 0xb4,
702 0x22, 0x2b, 0xac, 0x12, 0x32, 0x28, 0x91, 0xd8,
703 0xa5, 0xab, 0xff, 0x5f, 0xe0, 0x4b, 0xda, 0x78,
704 0x17, 0xda, 0xf1, 0x01, 0x5b, 0xcd, 0xe2, 0x5f,
705 0x50, 0x45, 0x73, 0x2b, 0xe4, 0x76, 0x77, 0xf4,
706 0x64, 0x1d, 0x43, 0xfb, 0x84, 0x7a, 0xea, 0x91,
707 0xae, 0xf9, 0x9e, 0xb7, 0xb4, 0xb0, 0x91, 0x5f,
708 0x16, 0x35, 0x9a, 0x11, 0xb8, 0xc7, 0xc1, 0x8c,
709 0xc6, 0x10, 0x8d, 0x2f, 0x63, 0x4a, 0xa7, 0x57,
710 0x3a, 0x51, 0xd6, 0x32, 0x2d, 0x64, 0x72, 0xd4,
711 0x66, 0xdc, 0x10, 0xa6, 0x67, 0xd6, 0x04, 0x23,
712 0x9d, 0x0a, 0x11, 0x77, 0xdd, 0x37, 0x94, 0x17,
713 0x3c, 0xbf, 0x8b, 0x65, 0xb0, 0x2e, 0x5e, 0x66,
714 0x47, 0x64, 0xac, 0xdd, 0xf0, 0x84, 0xfd, 0x39,
715 0xfa, 0x15, 0x5d, 0xef, 0xae, 0xca, 0xc1, 0x36,
716 0xa7, 0x5c, 0xbf, 0xc7, 0x08, 0xc2, 0x66, 0x00,
717 0x74, 0x74, 0x4e, 0x27, 0x3f, 0x55, 0x8a, 0xb7,
718 0x38, 0x66, 0x83, 0x6d, 0xcf, 0x99, 0x9e, 0x60,
719 0x8f, 0xdd, 0x2e, 0x62, 0x22, 0x0e, 0xef, 0x0c,
720 0x98, 0xa7, 0x85, 0x74, 0x3b, 0x9d, 0xec, 0x9e,
721 0xa9, 0x19, 0x72, 0xa5, 0x7f, 0x2c, 0x39, 0xb7,
722 0x7d, 0xb7, 0xf1, 0x12, 0x65, 0x27, 0x4b, 0x5a,
723 0xde, 0x17, 0xfe, 0xad, 0x44, 0xf3, 0x20, 0x4d,
724 0xfd, 0xe4, 0x1f, 0xb5, 0x81, 0xb0, 0x36, 0x37,
725 0x08, 0x6f, 0xc3, 0x0c, 0xe9, 0x85, 0x98, 0x82,
726 0xa9, 0x62, 0x0c, 0xc4, 0x97, 0xc0, 0x50, 0xc8,
727 0xa7, 0x3c, 0x50, 0x9f, 0x43, 0xb9, 0xcd, 0x5e,
728 0x4d, 0xfa, 0x1c, 0x4b, 0x0b, 0xa9, 0x98, 0x85,
729 0x38, 0x92, 0xac, 0x8d, 0xe4, 0xad, 0x9b, 0x98,
730 0xab, 0xd9, 0x38, 0xac, 0x62, 0x52, 0xa3, 0x22,
731 0x63, 0x0f, 0xbf, 0x95, 0x48, 0xdf, 0x69, 0xe7,
732 0x8b, 0x33, 0xd5, 0xb2, 0xbd, 0x05, 0x49, 0x49,
733 0x9d, 0x57, 0x73, 0x19, 0x33, 0xae, 0xfa, 0x33,
734 0xf1, 0x19, 0xa8, 0x80, 0xce, 0x04, 0x9f, 0xbc,
735 0x1d, 0x65, 0x82, 0x1b, 0xe5, 0x3a, 0x51, 0xc8,
736 0x1c, 0x21, 0xe3, 0x5d, 0xf3, 0x7d, 0x9b, 0x2f,
737 0x2c, 0x1d, 0x4a, 0x7f, 0x9b, 0x68, 0x35, 0xa3,
738 0xb2, 0x50, 0xf7, 0x62, 0x79, 0xcd, 0xf4, 0x98,
739 0x4f, 0xe5, 0x63, 0x7c, 0x3e, 0x45, 0x31, 0x8c,
740 0x16, 0xa0, 0x12, 0xc8, 0x58, 0xce, 0x39, 0xa6,
741 0xbc, 0x54, 0xdb, 0xc5, 0xe0, 0xd5, 0xba, 0xbc,
742 0xb9, 0x04, 0xf4, 0x8d, 0xe8, 0x2f, 0x15, 0x9d,
743};
744
745/* 100 test cases */
746static struct crc_test {
747 u32 crc; /* random starting crc */
748 u32 start; /* random 6 bit offset in buf */
749 u32 length; /* random 11 bit length of test */
750 u32 crc_le; /* expected crc32_le result */
751 u32 crc_be; /* expected crc32_be result */
752} test[] =
1da177e4 753{
3863ef31
BP
754 {0x674bf11d, 0x00000038, 0x00000542, 0x0af6d466, 0xd8b6e4c1},
755 {0x35c672c6, 0x0000003a, 0x000001aa, 0xc6d3dfba, 0x28aaf3ad},
756 {0x496da28e, 0x00000039, 0x000005af, 0xd933660f, 0x5d57e81f},
757 {0x09a9b90e, 0x00000027, 0x000001f8, 0xb45fe007, 0xf45fca9a},
758 {0xdc97e5a9, 0x00000025, 0x000003b6, 0xf81a3562, 0xe0126ba2},
759 {0x47c58900, 0x0000000a, 0x000000b9, 0x8e58eccf, 0xf3afc793},
760 {0x292561e8, 0x0000000c, 0x00000403, 0xa2ba8aaf, 0x0b797aed},
761 {0x415037f6, 0x00000003, 0x00000676, 0xa17d52e8, 0x7f0fdf35},
762 {0x3466e707, 0x00000026, 0x00000042, 0x258319be, 0x75c484a2},
763 {0xafd1281b, 0x00000023, 0x000002ee, 0x4428eaf8, 0x06c7ad10},
764 {0xd3857b18, 0x00000028, 0x000004a2, 0x5c430821, 0xb062b7cb},
765 {0x1d825a8f, 0x0000002b, 0x0000050b, 0xd2c45f0c, 0xd68634e0},
766 {0x5033e3bc, 0x0000000b, 0x00000078, 0xa3ea4113, 0xac6d31fb},
767 {0x94f1fb5e, 0x0000000f, 0x000003a2, 0xfbfc50b1, 0x3cfe50ed},
768 {0xc9a0fe14, 0x00000009, 0x00000473, 0x5fb61894, 0x87070591},
769 {0x88a034b1, 0x0000001c, 0x000005ad, 0xc1b16053, 0x46f95c67},
770 {0xf0f72239, 0x00000020, 0x0000026d, 0xa6fa58f3, 0xf8c2c1dd},
771 {0xcc20a5e3, 0x0000003b, 0x0000067a, 0x7740185a, 0x308b979a},
772 {0xce589c95, 0x0000002b, 0x00000641, 0xd055e987, 0x40aae25b},
773 {0x78edc885, 0x00000035, 0x000005be, 0xa39cb14b, 0x035b0d1f},
774 {0x9d40a377, 0x0000003b, 0x00000038, 0x1f47ccd2, 0x197fbc9d},
775 {0x703d0e01, 0x0000003c, 0x000006f1, 0x88735e7c, 0xfed57c5a},
776 {0x776bf505, 0x0000000f, 0x000005b2, 0x5cc4fc01, 0xf32efb97},
777 {0x4a3e7854, 0x00000027, 0x000004b8, 0x8d923c82, 0x0cbfb4a2},
778 {0x209172dd, 0x0000003b, 0x00000356, 0xb89e9c2b, 0xd7868138},
779 {0x3ba4cc5b, 0x0000002f, 0x00000203, 0xe51601a9, 0x5b2a1032},
780 {0xfc62f297, 0x00000000, 0x00000079, 0x71a8e1a2, 0x5d88685f},
781 {0x64280b8b, 0x00000016, 0x000007ab, 0x0fa7a30c, 0xda3a455f},
782 {0x97dd724b, 0x00000033, 0x000007ad, 0x5788b2f4, 0xd7326d32},
783 {0x61394b52, 0x00000035, 0x00000571, 0xc66525f1, 0xcabe7fef},
784 {0x29b4faff, 0x00000024, 0x0000006e, 0xca13751e, 0x993648e0},
785 {0x29bfb1dc, 0x0000000b, 0x00000244, 0x436c43f7, 0x429f7a59},
786 {0x86ae934b, 0x00000035, 0x00000104, 0x0760ec93, 0x9cf7d0f4},
787 {0xc4c1024e, 0x0000002e, 0x000006b1, 0x6516a3ec, 0x19321f9c},
788 {0x3287a80a, 0x00000026, 0x00000496, 0x0b257eb1, 0x754ebd51},
789 {0xa4db423e, 0x00000023, 0x0000045d, 0x9b3a66dc, 0x873e9f11},
790 {0x7a1078df, 0x00000015, 0x0000014a, 0x8c2484c5, 0x6a628659},
791 {0x6048bd5b, 0x00000006, 0x0000006a, 0x897e3559, 0xac9961af},
792 {0xd8f9ea20, 0x0000003d, 0x00000277, 0x60eb905b, 0xed2aaf99},
793 {0xea5ec3b4, 0x0000002a, 0x000004fe, 0x869965dc, 0x6c1f833b},
794 {0x2dfb005d, 0x00000016, 0x00000345, 0x6a3b117e, 0xf05e8521},
795 {0x5a214ade, 0x00000020, 0x000005b6, 0x467f70be, 0xcb22ccd3},
796 {0xf0ab9cca, 0x00000032, 0x00000515, 0xed223df3, 0x7f3ef01d},
797 {0x91b444f9, 0x0000002e, 0x000007f8, 0x84e9a983, 0x5676756f},
798 {0x1b5d2ddb, 0x0000002e, 0x0000012c, 0xba638c4c, 0x3f42047b},
799 {0xd824d1bb, 0x0000003a, 0x000007b5, 0x6288653b, 0x3a3ebea0},
800 {0x0470180c, 0x00000034, 0x000001f0, 0x9d5b80d6, 0x3de08195},
801 {0xffaa3a3f, 0x00000036, 0x00000299, 0xf3a82ab8, 0x53e0c13d},
802 {0x6406cfeb, 0x00000023, 0x00000600, 0xa920b8e8, 0xe4e2acf4},
803 {0xb24aaa38, 0x0000003e, 0x000004a1, 0x657cc328, 0x5077b2c3},
804 {0x58b2ab7c, 0x00000039, 0x000002b4, 0x3a17ee7e, 0x9dcb3643},
805 {0x3db85970, 0x00000006, 0x000002b6, 0x95268b59, 0xb9812c10},
806 {0x857830c5, 0x00000003, 0x00000590, 0x4ef439d5, 0xf042161d},
807 {0xe1fcd978, 0x0000003e, 0x000007d8, 0xae8d8699, 0xce0a1ef5},
808 {0xb982a768, 0x00000016, 0x000006e0, 0x62fad3df, 0x5f8a067b},
809 {0x1d581ce8, 0x0000001e, 0x0000058b, 0xf0f5da53, 0x26e39eee},
810 {0x2456719b, 0x00000025, 0x00000503, 0x4296ac64, 0xd50e4c14},
811 {0xfae6d8f2, 0x00000000, 0x0000055d, 0x057fdf2e, 0x2a31391a},
812 {0xcba828e3, 0x00000039, 0x000002ce, 0xe3f22351, 0x8f00877b},
813 {0x13d25952, 0x0000000a, 0x0000072d, 0x76d4b4cc, 0x5eb67ec3},
814 {0x0342be3f, 0x00000015, 0x00000599, 0xec75d9f1, 0x9d4d2826},
815 {0xeaa344e0, 0x00000014, 0x000004d8, 0x72a4c981, 0x2064ea06},
816 {0xbbb52021, 0x0000003b, 0x00000272, 0x04af99fc, 0xaf042d35},
817 {0xb66384dc, 0x0000001d, 0x000007fc, 0xd7629116, 0x782bd801},
818 {0x616c01b6, 0x00000022, 0x000002c8, 0x5b1dab30, 0x783ce7d2},
819 {0xce2bdaad, 0x00000016, 0x0000062a, 0x932535c8, 0x3f02926d},
820 {0x00fe84d7, 0x00000005, 0x00000205, 0x850e50aa, 0x753d649c},
821 {0xbebdcb4c, 0x00000006, 0x0000055d, 0xbeaa37a2, 0x2d8c9eba},
822 {0xd8b1a02a, 0x00000010, 0x00000387, 0x5017d2fc, 0x503541a5},
823 {0x3b96cad2, 0x00000036, 0x00000347, 0x1d2372ae, 0x926cd90b},
824 {0xc94c1ed7, 0x00000005, 0x0000038b, 0x9e9fdb22, 0x144a9178},
825 {0x1aad454e, 0x00000025, 0x000002b2, 0xc3f6315c, 0x5c7a35b3},
826 {0xa4fec9a6, 0x00000000, 0x000006d6, 0x90be5080, 0xa4107605},
827 {0x1bbe71e2, 0x0000001f, 0x000002fd, 0x4e504c3b, 0x284ccaf1},
828 {0x4201c7e4, 0x00000002, 0x000002b7, 0x7822e3f9, 0x0cc912a9},
829 {0x23fddc96, 0x00000003, 0x00000627, 0x8a385125, 0x07767e78},
830 {0xd82ba25c, 0x00000016, 0x0000063e, 0x98e4148a, 0x283330c9},
831 {0x786f2032, 0x0000002d, 0x0000060f, 0xf201600a, 0xf561bfcd},
832 {0xfebe4e1f, 0x0000002a, 0x000004f2, 0x95e51961, 0xfd80dcab},
833 {0x1a6e0a39, 0x00000008, 0x00000672, 0x8af6c2a5, 0x78dd84cb},
834 {0x56000ab8, 0x0000000e, 0x000000e5, 0x36bacb8f, 0x22ee1f77},
835 {0x4717fe0c, 0x00000000, 0x000006ec, 0x8439f342, 0x5c8e03da},
836 {0xd5d5d68e, 0x0000003c, 0x000003a3, 0x46fff083, 0x177d1b39},
837 {0xc25dd6c6, 0x00000024, 0x000006c0, 0x5ceb8eb4, 0x892b0d16},
838 {0xe9b11300, 0x00000023, 0x00000683, 0x07a5d59a, 0x6c6a3208},
839 {0x95cd285e, 0x00000001, 0x00000047, 0x7b3a4368, 0x0202c07e},
840 {0xd9245a25, 0x0000001e, 0x000003a6, 0xd33c1841, 0x1936c0d5},
841 {0x103279db, 0x00000006, 0x0000039b, 0xca09b8a0, 0x77d62892},
842 {0x1cba3172, 0x00000027, 0x000001c8, 0xcb377194, 0xebe682db},
843 {0x8f613739, 0x0000000c, 0x000001df, 0xb4b0bc87, 0x7710bd43},
844 {0x1c6aa90d, 0x0000001b, 0x0000053c, 0x70559245, 0xda7894ac},
845 {0xaabe5b93, 0x0000003d, 0x00000715, 0xcdbf42fa, 0x0c3b99e7},
846 {0xf15dd038, 0x00000006, 0x000006db, 0x6e104aea, 0x8d5967f2},
847 {0x584dd49c, 0x00000020, 0x000007bc, 0x36b6cfd6, 0xad4e23b2},
848 {0x5d8c9506, 0x00000020, 0x00000470, 0x4c62378e, 0x31d92640},
849 {0xb80d17b0, 0x00000032, 0x00000346, 0x22a5bb88, 0x9a7ec89f},
850 {0xdaf0592e, 0x00000023, 0x000007b0, 0x3cab3f99, 0x9b1fdd99},
851 {0x4793cc85, 0x0000000d, 0x00000706, 0xe82e04f6, 0xed3db6b7},
852 {0x82ebf64e, 0x00000009, 0x000007c3, 0x69d590a9, 0x9efa8499},
853 {0xb18a0319, 0x00000026, 0x000007db, 0x1cf98dcc, 0x8fa9ad6a},
854};
855
856#include <linux/time.h>
857
858static int __init crc32_init(void)
1da177e4 859{
3863ef31
BP
860 int i;
861 int errors = 0;
862 int bytes = 0;
863 struct timespec start, stop;
864 u64 nsec;
865 unsigned long flags;
1da177e4 866
3863ef31
BP
867 /* keep static to prevent cache warming code from
868 * getting eliminated by the compiler */
869 static u32 crc;
1da177e4 870
3863ef31
BP
871 /* pre-warm the cache */
872 for (i = 0; i < 100; i++) {
873 bytes += 2*test[i].length;
1da177e4 874
3863ef31
BP
875 crc ^= crc32_le(test[i].crc, test_buf +
876 test[i].start, test[i].length);
877
878 crc ^= crc32_be(test[i].crc, test_buf +
879 test[i].start, test[i].length);
1da177e4
LT
880 }
881
3863ef31
BP
882 /* reduce OS noise */
883 local_irq_save(flags);
884 local_irq_disable();
885
886 getnstimeofday(&start);
887 for (i = 0; i < 100; i++) {
888 if (test[i].crc_le != crc32_le(test[i].crc, test_buf +
889 test[i].start, test[i].length))
890 errors++;
891
892 if (test[i].crc_be != crc32_be(test[i].crc, test_buf +
893 test[i].start, test[i].length))
894 errors++;
1da177e4 895 }
3863ef31 896 getnstimeofday(&stop);
1da177e4 897
3863ef31
BP
898 local_irq_restore(flags);
899 local_irq_enable();
1da177e4 900
3863ef31
BP
901 nsec = stop.tv_nsec - start.tv_nsec +
902 1000000000 * (stop.tv_sec - start.tv_sec);
1da177e4 903
3863ef31
BP
904 pr_info("crc32: CRC_LE_BITS = %d, CRC_BE BITS = %d\n",
905 CRC_LE_BITS, CRC_BE_BITS);
906
907 if (errors)
908 pr_warn("crc32: %d self tests failed\n", errors);
909 else {
910 pr_info("crc32: self tests passed, processed %d bytes in %lld nsec\n",
911 bytes, nsec);
1da177e4 912 }
3863ef31 913
1da177e4
LT
914 return 0;
915}
916
3863ef31
BP
917static void __exit crc32_exit(void)
918{
919}
920
921module_init(crc32_init);
922module_exit(crc32_exit);
923#endif /* CONFIG_CRC32_SELFTEST */