Home | History | Annotate | Download | only in ext2fs
      1 /*
      2  * crc32c.c
      3  *
      4  * August 26, 2011 Darrick J. Wong <djwong at us.ibm.com>
      5  * Reuse Bob Pearson's slice-by-8 implementation for e2fsprogs.
      6  *
      7  * July 20, 2011 Bob Pearson <rpearson at systemfabricworks.com>
      8  * added slice by 8 algorithm to the existing conventional and
      9  * slice by 4 algorithms.
     10  *
     11  * Oct 15, 2000 Matt Domsch <Matt_Domsch (at) dell.com>
     12  * Nicer crc32 functions/docs submitted by linux (at) horizon.com.  Thanks!
     13  * Code was from the public domain, copyright abandoned.  Code was
     14  * subsequently included in the kernel, thus was re-licensed under the
     15  * GNU GPL v2.
     16  *
     17  * Oct 12, 2000 Matt Domsch <Matt_Domsch (at) dell.com>
     18  * Same crc32 function was used in 5 other places in the kernel.
     19  * I made one version, and deleted the others.
     20  * There are various incantations of crc32().  Some use a seed of 0 or ~0.
     21  * Some xor at the end with ~0.  The generic crc32() function takes
     22  * seed as an argument, and doesn't xor at the end.  Then individual
     23  * users can do whatever they need.
     24  *   drivers/net/smc9194.c uses seed ~0, doesn't xor with ~0.
     25  *   fs/jffs2 uses seed 0, doesn't xor with ~0.
     26  *   fs/partitions/efi.c uses seed ~0, xor's with ~0.
     27  *
     28  * This source code is licensed under the GNU General Public License,
     29  * Version 2.  See the file COPYING for more details.
     30  */
     31 #include "config.h"
     32 #include <stdint.h>
     33 #include <stdlib.h>
     34 #include <stdio.h>
     35 #define min(x, y)		((x) > (y) ? (y) : (x))
     36 #define __ALIGN_KERNEL_MASK(x, mask)	(((x) + (mask)) & ~(mask))
     37 #define __ALIGN_KERNEL(x, a)	__ALIGN_KERNEL_MASK(x, (__typeof__(x))(a) - 1)
     38 #define ALIGN(x, a)		__ALIGN_KERNEL((x), (a))
     39 #define PTR_ALIGN(p, a)		((__typeof__(p))ALIGN((unsigned long)(p), (a)))
     40 #include "crc32c_defs.h"
     41 
     42 #include "ext2fs.h"
     43 #ifdef WORDS_BIGENDIAN
     44 #define __constant_cpu_to_le32(x) ___constant_swab32((x))
     45 #define __constant_cpu_to_be32(x) (x)
     46 #define __be32_to_cpu(x) (x)
     47 #define __cpu_to_be32(x) (x)
     48 #define __cpu_to_le32(x) (ext2fs_cpu_to_le32((x)))
     49 #define __le32_to_cpu(x) (ext2fs_le32_to_cpu((x)))
     50 #else
     51 #define __constant_cpu_to_le32(x) (x)
     52 #define __constant_cpu_to_be32(x) ___constant_swab32((x))
     53 #define __be32_to_cpu(x) (ext2fs_be32_to_cpu((x)))
     54 #define __cpu_to_be32(x) (ext2fs_cpu_to_be32((x)))
     55 #define __cpu_to_le32(x) (x)
     56 #define __le32_to_cpu(x) (x)
     57 #endif
     58 
     59 #if CRC_LE_BITS > 8
     60 # define tole(x) __constant_cpu_to_le32(x)
     61 #else
     62 # define tole(x) (x)
     63 #endif
     64 
     65 #if CRC_BE_BITS > 8
     66 # define tobe(x) __constant_cpu_to_be32(x)
     67 #else
     68 # define tobe(x) (x)
     69 #endif
     70 
     71 #include "crc32c_table.h"
     72 
     73 #if CRC_LE_BITS > 8 || CRC_BE_BITS > 8
     74 
     75 /* implements slicing-by-4 or slicing-by-8 algorithm */
     76 static inline uint32_t
     77 crc32_body(uint32_t crc, unsigned char const *buf, size_t len,
     78 	   const uint32_t (*tab)[256])
     79 {
     80 # ifndef WORDS_BIGENDIAN
     81 #  define DO_CRC(x) (crc = t0[(crc ^ (x)) & 255] ^ (crc >> 8))
     82 #  define DO_CRC4 (t3[(q) & 255] ^ t2[(q >> 8) & 255] ^ \
     83 		   t1[(q >> 16) & 255] ^ t0[(q >> 24) & 255])
     84 #  define DO_CRC8 (t7[(q) & 255] ^ t6[(q >> 8) & 255] ^ \
     85 		   t5[(q >> 16) & 255] ^ t4[(q >> 24) & 255])
     86 # else
     87 #  define DO_CRC(x) (crc = t0[((crc >> 24) ^ (x)) & 255] ^ (crc << 8))
     88 #  define DO_CRC4 (t0[(q) & 255] ^ t1[(q >> 8) & 255] ^ \
     89 		   t2[(q >> 16) & 255] ^ t3[(q >> 24) & 255])
     90 #  define DO_CRC8 (t4[(q) & 255] ^ t5[(q >> 8) & 255] ^ \
     91 		   t6[(q >> 16) & 255] ^ t7[(q >> 24) & 255])
     92 # endif
     93 	const uint32_t *b;
     94 	size_t rem_len;
     95 	const uint32_t *t0 = tab[0], *t1 = tab[1], *t2 = tab[2], *t3 = tab[3];
     96 	const uint32_t *t4 = tab[4], *t5 = tab[5], *t6 = tab[6], *t7 = tab[7];
     97 	uint32_t q;
     98 
     99 	/* Align it */
    100 	if (unlikely((uintptr_t)buf & 3 && len)) {
    101 		do {
    102 			DO_CRC(*buf++);
    103 		} while ((--len) && ((uintptr_t)buf)&3);
    104 	}
    105 
    106 # if CRC_LE_BITS == 32
    107 	rem_len = len & 3;
    108 	len = len >> 2;
    109 # else
    110 	rem_len = len & 7;
    111 	len = len >> 3;
    112 # endif
    113 
    114 	b = (const uint32_t *)buf;
    115 	for (--b; len; --len) {
    116 		q = crc ^ *++b; /* use pre increment for speed */
    117 # if CRC_LE_BITS == 32
    118 		crc = DO_CRC4;
    119 # else
    120 		crc = DO_CRC8;
    121 		q = *++b;
    122 		crc ^= DO_CRC4;
    123 # endif
    124 	}
    125 	len = rem_len;
    126 	/* And the last few bytes */
    127 	if (len) {
    128 		const uint8_t *p = (const uint8_t *)(b + 1) - 1;
    129 		do {
    130 			DO_CRC(*++p); /* use pre increment for speed */
    131 		} while (--len);
    132 	}
    133 	return crc;
    134 #undef DO_CRC
    135 #undef DO_CRC4
    136 #undef DO_CRC8
    137 }
    138 #endif
    139 
    140 /**
    141  * crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32
    142  * @crc: seed value for computation.  ~0 for Ethernet, sometimes 0 for
    143  *	other uses, or the previous crc32 value if computing incrementally.
    144  * @p: pointer to buffer over which CRC is run
    145  * @len: length of buffer @p
    146  */
    147 static inline uint32_t crc32_le_generic(uint32_t crc, unsigned char const *p,
    148 					size_t len, const uint32_t (*tab)[256],
    149 					uint32_t polynomial EXT2FS_ATTR((unused)))
    150 {
    151 #if CRC_LE_BITS == 1
    152 	int i;
    153 	while (len--) {
    154 		crc ^= *p++;
    155 		for (i = 0; i < 8; i++)
    156 			crc = (crc >> 1) ^ ((crc & 1) ? polynomial : 0);
    157 	}
    158 # elif CRC_LE_BITS == 2
    159 	while (len--) {
    160 		crc ^= *p++;
    161 		crc = (crc >> 2) ^ tab[0][crc & 3];
    162 		crc = (crc >> 2) ^ tab[0][crc & 3];
    163 		crc = (crc >> 2) ^ tab[0][crc & 3];
    164 		crc = (crc >> 2) ^ tab[0][crc & 3];
    165 	}
    166 # elif CRC_LE_BITS == 4
    167 	while (len--) {
    168 		crc ^= *p++;
    169 		crc = (crc >> 4) ^ tab[0][crc & 15];
    170 		crc = (crc >> 4) ^ tab[0][crc & 15];
    171 	}
    172 # elif CRC_LE_BITS == 8
    173 	/* aka Sarwate algorithm */
    174 	while (len--) {
    175 		crc ^= *p++;
    176 		crc = (crc >> 8) ^ tab[0][crc & 255];
    177 	}
    178 # else
    179 	crc = __cpu_to_le32(crc);
    180 	crc = crc32_body(crc, p, len, tab);
    181 	crc = __le32_to_cpu(crc);
    182 #endif
    183 	return crc;
    184 }
    185 
    186 uint32_t ext2fs_crc32c_le(uint32_t crc, unsigned char const *p, size_t len)
    187 {
    188 	return crc32_le_generic(crc, p, len, crc32ctable_le, CRC32C_POLY_LE);
    189 }
    190 
    191 /**
    192  * crc32_be() - Calculate bitwise big-endian Ethernet AUTODIN II CRC32
    193  * @crc: seed value for computation.  ~0 for Ethernet, sometimes 0 for
    194  *	other uses, or the previous crc32 value if computing incrementally.
    195  * @p: pointer to buffer over which CRC is run
    196  * @len: length of buffer @p
    197  */
    198 static inline uint32_t crc32_be_generic(uint32_t crc, unsigned char const *p,
    199 					size_t len, const uint32_t (*tab)[256],
    200 					uint32_t polynomial EXT2FS_ATTR((unused)))
    201 {
    202 #if CRC_BE_BITS == 1
    203 	int i;
    204 	while (len--) {
    205 		crc ^= *p++ << 24;
    206 		for (i = 0; i < 8; i++)
    207 			crc =
    208 			    (crc << 1) ^ ((crc & 0x80000000) ? polynomial :
    209 					  0);
    210 	}
    211 # elif CRC_BE_BITS == 2
    212 	while (len--) {
    213 		crc ^= *p++ << 24;
    214 		crc = (crc << 2) ^ tab[0][crc >> 30];
    215 		crc = (crc << 2) ^ tab[0][crc >> 30];
    216 		crc = (crc << 2) ^ tab[0][crc >> 30];
    217 		crc = (crc << 2) ^ tab[0][crc >> 30];
    218 	}
    219 # elif CRC_BE_BITS == 4
    220 	while (len--) {
    221 		crc ^= *p++ << 24;
    222 		crc = (crc << 4) ^ tab[0][crc >> 28];
    223 		crc = (crc << 4) ^ tab[0][crc >> 28];
    224 	}
    225 # elif CRC_BE_BITS == 8
    226 	while (len--) {
    227 		crc ^= *p++ << 24;
    228 		crc = (crc << 8) ^ tab[0][crc >> 24];
    229 	}
    230 # else
    231 	crc = __cpu_to_be32(crc);
    232 	crc = crc32_body(crc, p, len, tab);
    233 	crc = __be32_to_cpu(crc);
    234 # endif
    235 	return crc;
    236 }
    237 
    238 uint32_t ext2fs_crc32_be(uint32_t crc, unsigned char const *p, size_t len)
    239 {
    240 	return crc32_be_generic(crc, p, len, crc32table_be, CRCPOLY_BE);
    241 }
    242 
    243 #ifdef UNITTEST
    244 static uint8_t test_buf[] = {
    245 	0xd9, 0xd7, 0x6a, 0x13, 0x3a, 0xb1, 0x05, 0x48,
    246 	0xda, 0xad, 0x14, 0xbd, 0x03, 0x3a, 0x58, 0x5e,
    247 	0x6e, 0xd1, 0x56, 0xc9, 0x2e, 0xc4, 0xcb, 0x6b,
    248 	0xe8, 0x77, 0x52, 0x37, 0x4e, 0x0f, 0x55, 0xd2,
    249 	0x12, 0x65, 0x90, 0xc2, 0x41, 0x49, 0x81, 0x01,
    250 	0xf5, 0x01, 0xeb, 0x2d, 0x78, 0x74, 0x23, 0x5d,
    251 	0x84, 0x5c, 0x81, 0x92, 0x21, 0xe9, 0x8d, 0x1d,
    252 	0x89, 0xf2, 0x4a, 0xac, 0xdd, 0xf9, 0xaf, 0xee,
    253 	0x44, 0xe7, 0x6e, 0xed, 0xfb, 0xd8, 0x89, 0x0e,
    254 	0x96, 0x62, 0xcd, 0xa4, 0x4b, 0xa9, 0xe5, 0x45,
    255 	0xb1, 0x29, 0x9b, 0x0f, 0xfc, 0xbd, 0x83, 0xab,
    256 	0xa8, 0x54, 0x96, 0x44, 0x2c, 0x7f, 0xbb, 0xe7,
    257 	0x52, 0x29, 0x08, 0xee, 0x14, 0xc5, 0xc2, 0xec,
    258 	0x5a, 0xeb, 0x40, 0x40, 0xea, 0xd1, 0x3d, 0x15,
    259 	0x73, 0xaa, 0x8c, 0x73, 0xfc, 0xf2, 0x2b, 0x49,
    260 	0x0b, 0x13, 0x96, 0xd9, 0x8e, 0x4b, 0xbc, 0xe0,
    261 	0xf4, 0xd2, 0xe0, 0x2e, 0x7a, 0xf0, 0x5d, 0x1f,
    262 	0xd2, 0x92, 0x97, 0xe0, 0xaa, 0x59, 0xab, 0xc9,
    263 	0x5c, 0xa6, 0x51, 0x1a, 0xe3, 0xd6, 0x06, 0xb9,
    264 	0xae, 0xb8, 0x76, 0x36, 0x79, 0x37, 0x52, 0xf6,
    265 	0x34, 0xaf, 0x27, 0x19, 0xe1, 0xc0, 0x2b, 0xdd,
    266 	0x01, 0x15, 0xcd, 0xce, 0x44, 0xf6, 0x4c, 0x18,
    267 	0x92, 0x69, 0xbe, 0x8a, 0x76, 0x23, 0x52, 0x13,
    268 	0x3f, 0xf9, 0xe0, 0xf5, 0x06, 0x28, 0x7c, 0xc7,
    269 	0xf3, 0x42, 0x0f, 0xdd, 0x40, 0x33, 0xf7, 0x99,
    270 	0xe2, 0xad, 0x26, 0xd9, 0x53, 0x10, 0x72, 0x0c,
    271 	0x4e, 0x43, 0x4c, 0x61, 0xfe, 0xd9, 0xc1, 0x16,
    272 	0xa1, 0x93, 0xca, 0x3c, 0x75, 0x7f, 0x07, 0x7a,
    273 	0x65, 0xb3, 0x53, 0x2a, 0x52, 0x00, 0xa0, 0x62,
    274 	0xe0, 0xa3, 0x1f, 0xad, 0xd7, 0xbb, 0xc0, 0x83,
    275 	0x5d, 0x54, 0x87, 0x5f, 0xc8, 0x2f, 0xc8, 0xbf,
    276 	0x69, 0x04, 0x91, 0xc8, 0xa6, 0x1d, 0x4d, 0x46,
    277 	0x91, 0xfc, 0x26, 0xf4, 0x16, 0xd1, 0xa4, 0xbf,
    278 	0x5c, 0xa2, 0x6c, 0xdd, 0xb4, 0x40, 0xf2, 0x2e,
    279 	0xa2, 0xad, 0xf7, 0xf4, 0xa5, 0x8a, 0x3e, 0x23,
    280 	0x64, 0x08, 0xc8, 0xa1, 0xa0, 0xf0, 0x5d, 0x70,
    281 	0xd2, 0x77, 0xfd, 0xc8, 0x50, 0x83, 0x0f, 0xd6,
    282 	0x2b, 0xe4, 0x1f, 0x52, 0x34, 0x33, 0x68, 0xfd,
    283 	0x92, 0xbe, 0x9f, 0x97, 0x6b, 0x8d, 0x81, 0x91,
    284 	0x0f, 0xef, 0x65, 0xc8, 0x0d, 0x15, 0x01, 0x77,
    285 	0x58, 0xb2, 0xf4, 0x1b, 0x06, 0x7e, 0xf5, 0xca,
    286 	0x15, 0x2e, 0x38, 0xd8, 0x81, 0x1c, 0x1c, 0xa0,
    287 	0xb6, 0x13, 0x6a, 0x2b, 0x71, 0x34, 0x52, 0xd7,
    288 	0x1d, 0xbd, 0x37, 0x59, 0xbc, 0x86, 0x25, 0x2b,
    289 	0xa8, 0x93, 0xce, 0x1a, 0x03, 0x16, 0xfe, 0x01,
    290 	0x57, 0x99, 0x24, 0x25, 0x2c, 0xb3, 0xab, 0x1e,
    291 	0x2d, 0x65, 0x20, 0x89, 0x17, 0x02, 0x0e, 0x0a,
    292 	0xf5, 0x1e, 0xc7, 0xff, 0x1f, 0x61, 0xa9, 0x54,
    293 	0x18, 0xd4, 0xba, 0x50, 0x57, 0x02, 0xa1, 0xab,
    294 	0x22, 0x2e, 0x07, 0xea, 0xa9, 0xa3, 0x83, 0x4f,
    295 	0x27, 0xf5, 0xc5, 0xee, 0x3c, 0x3b, 0x10, 0xad,
    296 	0x32, 0x2b, 0x1c, 0x03, 0xcb, 0xaf, 0x98, 0x83,
    297 	0x54, 0xc3, 0x68, 0x63, 0xd4, 0xe0, 0x0e, 0x3c,
    298 	0x1a, 0x4e, 0xc0, 0x81, 0xd0, 0xe8, 0x6a, 0x62,
    299 	0x6b, 0x3e, 0x6f, 0xc4, 0xc6, 0x33, 0x4e, 0x26,
    300 	0x21, 0xf5, 0x04, 0xdf, 0xfa, 0xce, 0x45, 0xaf,
    301 	0xdc, 0x5e, 0x1b, 0xad, 0x93, 0xca, 0xf5, 0xcf,
    302 	0xd7, 0xee, 0x0c, 0x5c, 0x5e, 0xb4, 0xf0, 0x92,
    303 	0xd2, 0xf2, 0xf0, 0xa9, 0x1e, 0xab, 0x80, 0x68,
    304 	0x46, 0xef, 0xcc, 0x26, 0x0c, 0x5c, 0xdd, 0x4e,
    305 	0x83, 0xb8, 0xb9, 0x53, 0x6e, 0xf8, 0x93, 0x38,
    306 	0x67, 0xa4, 0x41, 0x87, 0x72, 0xe7, 0x7e, 0x86,
    307 	0xc9, 0x49, 0x00, 0x33, 0xb1, 0x38, 0x6c, 0x71,
    308 	0xd7, 0x1d, 0x8e, 0x61, 0x01, 0xb6, 0x57, 0xa9,
    309 	0xf1, 0xac, 0x15, 0xc2, 0x83, 0x77, 0xca, 0x64,
    310 	0xca, 0x7b, 0x6c, 0xa1, 0x10, 0x1b, 0x13, 0xd0,
    311 	0xd3, 0x9e, 0x9e, 0x10, 0x70, 0xc8, 0x1a, 0xbb,
    312 	0x3f, 0x19, 0x86, 0xab, 0x01, 0x0e, 0xea, 0x34,
    313 	0x22, 0xea, 0xe2, 0x15, 0xb7, 0xed, 0x21, 0x21,
    314 	0x75, 0xa5, 0xe7, 0x08, 0xa1, 0x38, 0xe0, 0x91,
    315 	0x05, 0x60, 0xea, 0xa7, 0x50, 0x27, 0x18, 0x07,
    316 	0x9d, 0xe0, 0x18, 0x2b, 0xd4, 0x07, 0x59, 0x00,
    317 	0xe6, 0x45, 0x18, 0x2a, 0x30, 0x6e, 0xf3, 0xb4,
    318 	0xd0, 0xef, 0xa6, 0x5b, 0x71, 0xa2, 0x5a, 0x3b,
    319 	0x89, 0x4c, 0xaf, 0x3f, 0xcb, 0x9f, 0x03, 0xfb,
    320 	0x43, 0x7c, 0x6b, 0xd3, 0x6a, 0xea, 0xce, 0x4a,
    321 	0x5f, 0x64, 0xb5, 0x62, 0xda, 0x5d, 0x27, 0xb7,
    322 	0xb8, 0x11, 0xca, 0x33, 0x30, 0xec, 0x70, 0xf0,
    323 	0x1b, 0x03, 0x50, 0xff, 0x5e, 0xa6, 0x08, 0xde,
    324 	0x37, 0x70, 0xc0, 0x81, 0x55, 0x60, 0x17, 0xa1,
    325 	0x85, 0xae, 0x26, 0x44, 0xe4, 0x67, 0x3c, 0x91,
    326 	0xfd, 0xc4, 0x3d, 0x97, 0x72, 0x23, 0xf3, 0x3c,
    327 	0x8f, 0xe0, 0xe2, 0xf2, 0x09, 0x96, 0x10, 0x67,
    328 	0xb5, 0xfe, 0xff, 0x3d, 0x4a, 0xc8, 0x62, 0x11,
    329 	0xa5, 0x98, 0xc1, 0x2d, 0x40, 0x82, 0x88, 0x8b,
    330 	0xe5, 0xb0, 0x75, 0xbf, 0x2f, 0xa8, 0x6a, 0x55,
    331 	0x49, 0x2e, 0x9c, 0x29, 0xd2, 0x7c, 0xbf, 0xf3,
    332 	0xaa, 0x3a, 0x16, 0x4a, 0xa4, 0x15, 0xf3, 0x48,
    333 	0xde, 0x38, 0x13, 0x44, 0x26, 0x02, 0xe6, 0xe9,
    334 	0xa8, 0x24, 0x89, 0xb5, 0x43, 0x95, 0xe4, 0x4c,
    335 	0xc3, 0xa0, 0xdf, 0xcc, 0x42, 0xf8, 0x8d, 0xb0,
    336 	0x3b, 0xea, 0x10, 0xb7, 0xe1, 0x40, 0x54, 0xb9,
    337 	0xa3, 0x2d, 0xfb, 0xb4, 0x91, 0xc0, 0x3e, 0x94,
    338 	0xf1, 0xa1, 0x3c, 0xbe, 0xef, 0xb8, 0x70, 0x55,
    339 	0x0a, 0x26, 0x93, 0xbf, 0xe6, 0x21, 0x92, 0x32,
    340 	0x3c, 0x39, 0x27, 0x6a, 0x23, 0x48, 0x02, 0x35,
    341 	0x3c, 0xd4, 0xcc, 0x04, 0xc0, 0x4e, 0xa7, 0x02,
    342 	0x63, 0x37, 0xc2, 0xb8, 0x56, 0x1d, 0x57, 0x57,
    343 	0x42, 0x04, 0x8d, 0xee, 0xcf, 0x8b, 0xc9, 0xc3,
    344 	0xba, 0x3b, 0x15, 0xd7, 0xaf, 0xbf, 0x9e, 0xcd,
    345 	0x44, 0xcf, 0xf0, 0x00, 0xb7, 0x3a, 0xfc, 0xa8,
    346 	0x12, 0xab, 0x3a, 0x62, 0x01, 0x21, 0x46, 0xe9,
    347 	0x1e, 0x48, 0x37, 0xfc, 0x13, 0x4d, 0xf6, 0x2a,
    348 	0x72, 0x40, 0x75, 0x38, 0x71, 0xf2, 0x17, 0x20,
    349 	0x2c, 0xdd, 0xc0, 0x49, 0xbc, 0x63, 0x33, 0xea,
    350 	0x06, 0x75, 0x41, 0xe7, 0x5c, 0x1f, 0xfb, 0xf9,
    351 	0x68, 0x83, 0xc2, 0x5a, 0x4a, 0x1e, 0x61, 0x08,
    352 	0x57, 0xf3, 0x00, 0xba, 0x77, 0x92, 0x63, 0xa5,
    353 	0xb7, 0xfe, 0x97, 0x22, 0xda, 0x5e, 0xd3, 0xaf,
    354 	0xbc, 0x89, 0x0d, 0x4c, 0x37, 0xa9, 0x27, 0x4a,
    355 	0x7f, 0xdb, 0x81, 0x39, 0x11, 0x86, 0x12, 0xf9,
    356 	0x10, 0x50, 0xe4, 0xdb, 0x72, 0xf9, 0xae, 0x10,
    357 	0x7c, 0xed, 0x50, 0x5c, 0x61, 0xeb, 0x42, 0x1e,
    358 	0xa4, 0xf4, 0xf0, 0xfa, 0x45, 0x4d, 0x95, 0x2b,
    359 	0xd4, 0x67, 0x4a, 0xe3, 0x8a, 0x15, 0x55, 0x92,
    360 	0x77, 0x64, 0x8c, 0x51, 0x38, 0xf9, 0x26, 0x3e,
    361 	0x68, 0xe2, 0xac, 0xbb, 0x64, 0x77, 0xe2, 0x82,
    362 	0xa4, 0x42, 0x41, 0x38, 0xa0, 0xf0, 0xc9, 0xd8,
    363 	0x6c, 0xe0, 0xef, 0x4c, 0xda, 0xb4, 0x92, 0xef,
    364 	0x1b, 0xe3, 0x9b, 0xc1, 0x44, 0x3c, 0xb9, 0xb7,
    365 	0x39, 0xac, 0x5c, 0x32, 0x39, 0xb4, 0x21, 0x85,
    366 	0x93, 0xbc, 0xf2, 0x51, 0x43, 0xb7, 0xae, 0x1e,
    367 	0x61, 0x9c, 0x38, 0x9c, 0xaa, 0xff, 0xde, 0xfc,
    368 	0xbf, 0x85, 0xef, 0x17, 0x34, 0x36, 0x71, 0x5f,
    369 	0x04, 0x16, 0xa6, 0x9e, 0xfd, 0x3a, 0x03, 0xd8,
    370 	0xbf, 0x71, 0x70, 0x20, 0x8f, 0x7c, 0xfb, 0xff,
    371 	0x61, 0xe0, 0xe2, 0x60, 0xa7, 0xb1, 0xc0, 0xe0,
    372 	0xd9, 0x3f, 0xdc, 0x8d, 0x4a, 0xa4, 0x52, 0x61,
    373 	0xaf, 0x9d, 0xdf, 0x8a, 0x0d, 0x41, 0xc0, 0x25,
    374 	0x68, 0x12, 0x7b, 0xd5, 0xc7, 0xdb, 0x68, 0x70,
    375 	0x2d, 0x7d, 0x95, 0x12, 0x03, 0x23, 0x0c, 0xe8,
    376 	0x14, 0x41, 0x11, 0x28, 0xec, 0x9d, 0xd3, 0x28,
    377 	0x77, 0x7a, 0x3c, 0x93, 0x8e, 0x5c, 0x7e, 0xb3,
    378 	0x42, 0x9a, 0x18, 0x25, 0x93, 0xc8, 0xea, 0x43,
    379 	0x1b, 0xbe, 0xd5, 0x27, 0xf1, 0xd4, 0xe0, 0x1e,
    380 	0xce, 0xc7, 0xc7, 0x2c, 0x25, 0x35, 0x58, 0xb8,
    381 	0x6c, 0xf3, 0xa2, 0xad, 0xe7, 0x58, 0x49, 0x47,
    382 	0xf7, 0xca, 0xde, 0x8b, 0x81, 0xb7, 0x75, 0xf4,
    383 	0x95, 0xa7, 0x5c, 0xc3, 0x2c, 0x0e, 0x1c, 0x52,
    384 	0x9a, 0xc3, 0x2a, 0x00, 0x21, 0xa7, 0x51, 0x6b,
    385 	0xf0, 0x05, 0x87, 0x8c, 0x42, 0x1b, 0xc3, 0x2e,
    386 	0xa3, 0x76, 0x22, 0xd5, 0x7f, 0x56, 0x10, 0xef,
    387 	0x98, 0x85, 0x65, 0x86, 0x71, 0x87, 0xd2, 0x8c,
    388 	0xc0, 0x47, 0x20, 0xe8, 0xb5, 0x1c, 0xe3, 0xdd,
    389 	0x3c, 0x5c, 0x03, 0xbb, 0x0e, 0x97, 0x3b, 0xe1,
    390 	0x56, 0x9a, 0xd5, 0x0a, 0x63, 0xd5, 0x33, 0xaf,
    391 	0x36, 0xca, 0xcf, 0x8f, 0x00, 0x28, 0xa3, 0x45,
    392 	0xb8, 0xcd, 0xde, 0x73, 0xd4, 0xfa, 0x2d, 0x6f,
    393 	0xdb, 0x93, 0xaa, 0xdd, 0x7f, 0xd2, 0x22, 0x9c,
    394 	0x96, 0x48, 0x1e, 0xa8, 0x63, 0xbe, 0xbc, 0x0d,
    395 	0x14, 0x3c, 0x2e, 0x11, 0x1f, 0xd2, 0xf4, 0x57,
    396 	0xb3, 0x47, 0xf8, 0xa6, 0x1b, 0xc3, 0xa7, 0x95,
    397 	0x2d, 0xd4, 0xca, 0xb8, 0x0d, 0xfb, 0x06, 0x85,
    398 	0xda, 0x63, 0xf0, 0x3e, 0x9d, 0x5e, 0xee, 0xce,
    399 	0xed, 0x74, 0x1d, 0x2c, 0x97, 0x3f, 0x71, 0x95,
    400 	0x12, 0x03, 0xc5, 0x92, 0x46, 0x84, 0x1b, 0x07,
    401 	0xe6, 0xb4, 0x1d, 0x3a, 0xf1, 0x89, 0x90, 0x50,
    402 	0x10, 0x29, 0x34, 0xc0, 0x90, 0xbe, 0x4a, 0xa9,
    403 	0x0d, 0xb0, 0x7b, 0xfb, 0x35, 0xee, 0x4e, 0x34,
    404 	0xec, 0x5a, 0x58, 0xbc, 0xb8, 0xda, 0x38, 0x88,
    405 	0x8c, 0x74, 0x1e, 0xc9, 0xab, 0x78, 0x2e, 0x2a,
    406 	0x17, 0x8a, 0x43, 0x3d, 0xa1, 0x2a, 0x41, 0xb5,
    407 	0xd6, 0xe8, 0x5b, 0xc5, 0x4a, 0x1c, 0x3c, 0x9f,
    408 	0x8d, 0x3a, 0x69, 0x88, 0xf8, 0x80, 0xd2, 0x11,
    409 	0xfc, 0x7e, 0x80, 0x8e, 0x7f, 0x85, 0x64, 0x9c,
    410 	0x46, 0x58, 0xc8, 0x48, 0x98, 0x4b, 0xf5, 0x73,
    411 	0x3f, 0x49, 0xce, 0x53, 0x2c, 0xd5, 0xfc, 0x33,
    412 	0xf1, 0x6f, 0xd8, 0xe9, 0x2e, 0x70, 0x2e, 0xdc,
    413 	0xe5, 0x43, 0x80, 0x38, 0xf2, 0x87, 0xed, 0x85,
    414 	0xe4, 0x3e, 0x45, 0x14, 0x20, 0xcf, 0xa0, 0x61,
    415 	0x4f, 0xe8, 0xd7, 0x5b, 0xb3, 0x0d, 0x0e, 0x4e,
    416 	0x4d, 0xce, 0xbe, 0xba, 0xaa, 0x90, 0x09, 0xcb,
    417 	0x4b, 0x5d, 0x08, 0xff, 0x52, 0xd5, 0x23, 0xbc,
    418 	0xad, 0x8d, 0xd3, 0x06, 0x4a, 0xa0, 0x51, 0x56,
    419 	0xa7, 0xd8, 0x33, 0xab, 0xbc, 0xd0, 0xdf, 0x92,
    420 	0x87, 0x20, 0x2d, 0x7b, 0x5e, 0xfa, 0x30, 0xa7,
    421 	0x06, 0x06, 0xe5, 0x4f, 0x2c, 0xb5, 0x61, 0xd7,
    422 	0x54, 0xd3, 0xdf, 0xd0, 0x0a, 0xb0, 0x06, 0xce,
    423 	0xf6, 0x86, 0xb7, 0x8e, 0xaa, 0x7b, 0x78, 0xd5,
    424 	0xb9, 0xeb, 0x07, 0xac, 0x5f, 0xc5, 0xd2, 0x8c,
    425 	0x40, 0xe0, 0x7f, 0x98, 0xd4, 0xe5, 0x4b, 0xca,
    426 	0xfb, 0x47, 0xef, 0xef, 0xb9, 0x4d, 0x6d, 0x8f,
    427 	0x82, 0x68, 0x74, 0x84, 0xe0, 0x0a, 0x93, 0x0f,
    428 	0xb2, 0x01, 0xa9, 0x9f, 0x68, 0x6a, 0xe8, 0xf7,
    429 	0xfb, 0x0b, 0xde, 0x17, 0xe0, 0x30, 0x38, 0x51,
    430 	0xbc, 0x07, 0xb8, 0x2c, 0x91, 0x0f, 0xc1, 0x0e,
    431 	0xa6, 0xf9, 0xf0, 0xd5, 0x48, 0x76, 0x8a, 0xde,
    432 	0x74, 0xe3, 0x30, 0x65, 0x56, 0xb3, 0x5c, 0xe2,
    433 	0x89, 0x8d, 0xda, 0x80, 0xad, 0x0f, 0x22, 0xfb,
    434 	0x24, 0x1d, 0x16, 0xdd, 0x34, 0x4b, 0x90, 0x58,
    435 	0x4e, 0x0c, 0x13, 0x28, 0xcf, 0x1d, 0xa4, 0xaa,
    436 	0xb7, 0xf3, 0xb1, 0x66, 0xad, 0x3b, 0xcf, 0x79,
    437 	0x12, 0x04, 0xd7, 0x79, 0xd9, 0x5f, 0xdf, 0x89,
    438 	0xb2, 0x5b, 0xa7, 0x9a, 0x26, 0x1e, 0x67, 0x46,
    439 	0x7c, 0x66, 0x95, 0x67, 0xe6, 0x45, 0x8b, 0x1f,
    440 	0x65, 0x79, 0x9f, 0x6d, 0x11, 0x81, 0x17, 0x0d,
    441 	0x11, 0xb0, 0x5c, 0xb4, 0xc7, 0x27, 0x87, 0xab,
    442 	0x5d, 0x0a, 0x18, 0xae, 0x4e, 0x06, 0xa3, 0x3d,
    443 	0xc7, 0xb0, 0x22, 0xba, 0x03, 0xa4, 0x0f, 0xe5,
    444 	0x1c, 0x72, 0x2a, 0x04, 0xce, 0x83, 0xe9, 0xf3,
    445 	0xd7, 0xc9, 0x67, 0x6c, 0x1e, 0x6b, 0x3c, 0x9b,
    446 	0x0b, 0x5e, 0x6a, 0xa6, 0x79, 0x0a, 0xf1, 0xbe,
    447 	0xd7, 0xb4, 0x6f, 0x45, 0x1e, 0xfb, 0x78, 0x97,
    448 	0xaf, 0x34, 0x76, 0x95, 0x52, 0xf7, 0x3d, 0x5d,
    449 	0x07, 0x28, 0x57, 0x9c, 0x4a, 0x0f, 0xcf, 0x0b,
    450 	0x1b, 0xc4, 0xc2, 0x72, 0xd7, 0x72, 0x38, 0x9b,
    451 	0xea, 0xeb, 0xee, 0xae, 0x34, 0xc8, 0x01, 0xd7,
    452 	0xa5, 0xe3, 0xce, 0x41, 0xad, 0x02, 0x60, 0x23,
    453 	0x18, 0x36, 0xba, 0x17, 0xfa, 0xcf, 0xe4, 0xda,
    454 	0xdc, 0xfc, 0x82, 0xdc, 0x7c, 0x11, 0xf4, 0xb8,
    455 	0x52, 0x5d, 0xf7, 0x2f, 0xc8, 0xfe, 0x4a, 0xe6,
    456 	0xb9, 0xaf, 0x4b, 0x17, 0x18, 0x91, 0xc2, 0xfe,
    457 	0xd7, 0x3a, 0x77, 0x0c, 0xa0, 0x43, 0x9c, 0x6f,
    458 	0x13, 0x06, 0xbe, 0x6e, 0xe0, 0x1a, 0x3c, 0xf3,
    459 	0xf5, 0xcc, 0x78, 0xfb, 0x5d, 0xd5, 0xda, 0xb7,
    460 	0x58, 0xea, 0x86, 0x42, 0x6b, 0x32, 0xff, 0xb2,
    461 	0xe2, 0xee, 0x03, 0x1f, 0xf4, 0xef, 0xdb, 0x53,
    462 	0x79, 0xd5, 0x4e, 0xaf, 0x60, 0x8e, 0x02, 0xc2,
    463 	0xcc, 0x39, 0x97, 0x7b, 0xfd, 0xa1, 0xf8, 0x7a,
    464 	0x26, 0xe8, 0x55, 0xd6, 0xa4, 0x8b, 0xa0, 0x1b,
    465 	0x2d, 0x63, 0xaa, 0x73, 0x71, 0x6e, 0xbf, 0x8b,
    466 	0x3b, 0xe3, 0x1b, 0x0d, 0xbb, 0x2e, 0x44, 0x09,
    467 	0x64, 0xac, 0xc7, 0x9e, 0xb5, 0xc6, 0x77, 0xb0,
    468 	0x79, 0xb3, 0xaa, 0xfc, 0x67, 0x57, 0x9a, 0x50,
    469 	0x81, 0x37, 0x14, 0x7c, 0xd7, 0xa0, 0xd4, 0x6a,
    470 	0x79, 0x84, 0x51, 0x0e, 0x95, 0x0a, 0x30, 0xa3,
    471 	0x60, 0x55, 0x48, 0x05, 0x16, 0xae, 0x43, 0x90,
    472 	0xdc, 0x8e, 0x09, 0xbe, 0x79, 0xf6, 0x90, 0x74,
    473 	0xf8, 0x20, 0x96, 0x4d, 0xa7, 0xf5, 0x1a, 0x2b,
    474 	0xc7, 0x15, 0x9d, 0x18, 0xf7, 0x94, 0x87, 0xf7,
    475 	0xf4, 0xfb, 0x0d, 0x61, 0xb6, 0xd7, 0xbe, 0x10,
    476 	0x8e, 0x47, 0x3c, 0x10, 0x44, 0x90, 0x52, 0x21,
    477 	0x83, 0xc0, 0xf5, 0x99, 0xaa, 0xbc, 0xf6, 0x55,
    478 	0xae, 0xf5, 0xb2, 0xa4, 0xcd, 0x4d, 0xb9, 0x38,
    479 	0x6c, 0xbc, 0x80, 0xc3, 0xad, 0xf4, 0x46, 0x31,
    480 	0x01, 0x58, 0x2d, 0x88, 0x57, 0xc3, 0x23, 0xd1,
    481 	0x64, 0xc9, 0xa3, 0x21, 0x6b, 0x8b, 0x8a, 0x23,
    482 	0x2c, 0x4f, 0xa9, 0xcd, 0x67, 0xfa, 0x77, 0xad,
    483 	0xa3, 0x16, 0xa2, 0xe5, 0x19, 0x14, 0x70, 0x41,
    484 	0x5b, 0xda, 0x14, 0xde, 0xe3, 0xe5, 0xc1, 0x15,
    485 	0xb4, 0x77, 0xa4, 0x9b, 0xb8, 0xb1, 0x28, 0x51,
    486 	0x30, 0xb4, 0xf1, 0xf3, 0xf8, 0x6d, 0xd0, 0xc3,
    487 	0x8c, 0x4c, 0x76, 0xb0, 0x9a, 0xdf, 0xc8, 0xbe,
    488 	0xf8, 0x4a, 0x61, 0x6e, 0x3e, 0xd6, 0x3c, 0xe8,
    489 	0xde, 0x56, 0xa0, 0x9c, 0x25, 0xbe, 0xce, 0x93,
    490 	0x1f, 0x88, 0xfb, 0x9a, 0x1a, 0xe2, 0xff, 0x88,
    491 	0xad, 0x10, 0xcb, 0x6c, 0xd6, 0xe7, 0x39, 0x0b,
    492 	0xe5, 0x1a, 0x06, 0x05, 0x64, 0x5b, 0x0a, 0xdf,
    493 	0x22, 0x58, 0xd7, 0xfb, 0x88, 0x12, 0xdd, 0xb7,
    494 	0x52, 0x3a, 0xc9, 0xbf, 0x49, 0xdf, 0x8c, 0x87,
    495 	0x9f, 0x84, 0xb5, 0x0a, 0xf6, 0x00, 0x52, 0xae,
    496 	0x67, 0x12, 0x1a, 0x8c, 0x71, 0x15, 0xf5, 0xa1,
    497 	0x13, 0x39, 0xf0, 0x91, 0x7e, 0x88, 0x7c, 0xb3,
    498 	0x95, 0x50, 0x02, 0xa6, 0x63, 0xb5, 0x64, 0xfb,
    499 	0x90, 0x87, 0x61, 0xe2, 0x27, 0xaf, 0x11, 0x0c,
    500 	0x73, 0x83, 0xef, 0xa9, 0x28, 0xfe, 0xc8, 0x85,
    501 	0x1a, 0x3a, 0xde, 0xf2, 0xe5, 0x25, 0x64, 0x6d,
    502 	0xaa, 0x41, 0x4c, 0x80, 0x2e, 0x84, 0xff, 0xc1,
    503 	0xc0, 0x54, 0x0c, 0x29, 0x1b, 0xa3, 0x07, 0x7c,
    504 	0x33, 0x4c, 0x10, 0xf6, 0x6f, 0x79, 0xdf, 0xd3,
    505 	0xf0, 0x24, 0x57, 0xf1, 0x60, 0xe1, 0xf0, 0xbd,
    506 	0xc4, 0x1f, 0xf4, 0x67, 0xd2, 0xd3, 0xcc, 0x6a,
    507 	0x07, 0x72, 0x44, 0x16, 0x85, 0x46, 0xd0, 0x73,
    508 	0x87, 0xa9, 0xc7, 0x2f, 0xd1, 0xf5, 0xec, 0xe3,
    509 	0x28, 0xa3, 0x93, 0x4f, 0xd7, 0x76, 0xc1, 0x3c,
    510 	0x0d, 0x13, 0x33, 0xcf, 0x5b, 0xbd, 0x6a, 0x52,
    511 	0x4e, 0xee, 0xc8, 0x5e, 0xa1, 0x58, 0x4a, 0x08,
    512 	0x81, 0xd9, 0x23, 0xcc, 0xfb, 0x1c, 0xb2, 0xd8,
    513 	0xa3, 0xe4, 0x53, 0xfe, 0xf4, 0x4b, 0x48, 0xc1,
    514 	0x20, 0xa4, 0x97, 0xf8, 0x38, 0xa3, 0x69, 0xc1,
    515 	0x11, 0xf0, 0xa1, 0x3b, 0xa9, 0x9a, 0x12, 0x61,
    516 	0xe8, 0x8d, 0x99, 0x44, 0x3f, 0x94, 0x72, 0x82,
    517 	0x19, 0x96, 0x62, 0xb0, 0xa6, 0x64, 0x05, 0x19,
    518 	0x8f, 0xd6, 0x5d, 0x05, 0xbf, 0x79, 0x9e, 0x9d,
    519 	0xe4, 0x93, 0x4c, 0xad, 0x61, 0x8c, 0x18, 0xda,
    520 	0xb6, 0x2e, 0xb3, 0xca, 0x14, 0x4d, 0x53, 0xa4,
    521 	0x97, 0x27, 0x10, 0x56, 0xa2, 0x67, 0x5a, 0x5a,
    522 	0x5e, 0x13, 0xc0, 0xdb, 0xa7, 0x9f, 0x45, 0x5b,
    523 	0xeb, 0x1a, 0x14, 0x0c, 0x8c, 0x38, 0x5e, 0x77,
    524 	0x9a, 0xec, 0x75, 0x68, 0x93, 0x65, 0x02, 0x9c,
    525 	0xfb, 0x62, 0x60, 0x49, 0xdd, 0xb2, 0x2a, 0x67,
    526 	0x86, 0xe3, 0x8a, 0x7d, 0x8c, 0x46, 0x78, 0x81,
    527 	0x60, 0x69, 0xf2, 0x3f, 0x74, 0x11, 0x35, 0xff,
    528 	0x77, 0xa3, 0x66, 0x20, 0xfc, 0x98, 0x4a, 0x35,
    529 	0x7a, 0x52, 0xe4, 0x90, 0x13, 0x80, 0xb9, 0xa6,
    530 	0x73, 0x7a, 0x7d, 0x66, 0x6e, 0x6b, 0xb6, 0x43,
    531 	0x10, 0xd5, 0x91, 0x2b, 0x66, 0xdd, 0x89, 0x87,
    532 	0xe3, 0x8c, 0x58, 0x53, 0x2f, 0x40, 0x74, 0x45,
    533 	0x1b, 0x77, 0x7a, 0xa4, 0x44, 0x19, 0x78, 0xba,
    534 	0x87, 0x10, 0x41, 0x31, 0x32, 0x5f, 0x87, 0x68,
    535 	0xde, 0x43, 0x4a, 0xef, 0x33, 0xb3, 0x11, 0x83,
    536 	0xa9, 0xc2, 0x6f, 0x8d, 0x34, 0xe2, 0x95, 0x84,
    537 	0x3a, 0x4f, 0x6f, 0x8c, 0x31, 0x1d, 0xb6, 0xf5,
    538 	0x95, 0x0d, 0x01, 0x11, 0x20, 0xdf, 0x72, 0xf3,
    539 	0x3f, 0x9a, 0x33, 0xaa, 0xb1, 0x06, 0x6a, 0x63,
    540 	0x47, 0x91, 0x01, 0xdf, 0xb3, 0x54, 0x36, 0xfd,
    541 	0x06, 0x2d, 0xb8, 0x08, 0xe3, 0xd3, 0x65, 0xac,
    542 	0x66, 0x03, 0xee, 0xa4, 0x63, 0xbd, 0xd4, 0xce,
    543 	0xbd, 0x79, 0xa7, 0x48, 0x38, 0xc5, 0x7d, 0xb5,
    544 	0x71, 0x9a, 0x3c, 0x11, 0x7c, 0x6c, 0xe2, 0x54,
    545 	0x02, 0x5d, 0x42, 0xab, 0x25, 0x93, 0x66, 0x01,
    546 	0x37, 0x78, 0x35, 0x4a, 0x8c, 0x19, 0x4d, 0x00,
    547 	0x75, 0x4f, 0xcc, 0xc0, 0x26, 0x82, 0xc1, 0x35,
    548 	0x8c, 0xc7, 0xc2, 0x59, 0x01, 0x3e, 0x98, 0x22,
    549 	0x88, 0x9c, 0x90, 0x75, 0x05, 0x33, 0x07, 0xb9,
    550 	0x39, 0x81, 0x38, 0x58, 0x10, 0x29, 0xcf, 0xc8,
    551 	0x98, 0xb2, 0x03, 0xd7, 0x5b, 0xb3, 0x18, 0xba,
    552 	0x34, 0x0c, 0x9f, 0xab, 0xd7, 0xed, 0x29, 0x82,
    553 	0x41, 0xe0, 0x20, 0x97, 0x57, 0x92, 0xb2, 0xb8,
    554 	0x10, 0x2d, 0x0b, 0xa2, 0xc5, 0x8f, 0x90, 0x6f,
    555 	0xed, 0x12, 0x56, 0x25, 0xbe, 0xfd, 0x75, 0xf7,
    556 	0xb6, 0xf8, 0x40, 0x67, 0x39, 0x11, 0xfa, 0x15,
    557 	0xae, 0x6a, 0x54, 0x5f, 0x32, 0x2b, 0xf8, 0x48,
    558 	0x55, 0xbe, 0x86, 0x2f, 0x69, 0x48, 0x5b, 0x5d,
    559 	0x4d, 0xb7, 0x35, 0xaa, 0xb6, 0x91, 0x88, 0x19,
    560 	0x96, 0x1c, 0x68, 0xf6, 0x85, 0x9e, 0xb3, 0xb2,
    561 	0xa3, 0x32, 0xd4, 0x52, 0x70, 0xb7, 0x62, 0xe3,
    562 	0x14, 0xb6, 0x78, 0x5f, 0x1b, 0x1d, 0x04, 0x9c,
    563 	0x26, 0x0c, 0x33, 0x94, 0xb1, 0x97, 0x08, 0xdb,
    564 	0x0b, 0x39, 0x29, 0xd4, 0xbc, 0x6d, 0xdf, 0x02,
    565 	0xc6, 0x99, 0xab, 0x99, 0x32, 0xe5, 0xce, 0x51,
    566 	0x4f, 0xae, 0xb8, 0x8b, 0xe0, 0xaf, 0x07, 0xc4,
    567 	0xf9, 0x41, 0x7c, 0x59, 0xa0, 0xac, 0x74, 0x4d,
    568 	0x7e, 0x43, 0x77, 0x9c, 0x06, 0x49, 0x79, 0x8a,
    569 	0x14, 0x73, 0x93, 0xa8, 0x5b, 0x1b, 0x34, 0x29,
    570 	0x78, 0x04, 0x2f, 0xd7, 0x1f, 0x13, 0x90, 0xe0,
    571 	0xdd, 0x3b, 0x42, 0x6b, 0x79, 0x6e, 0x52, 0xc7,
    572 	0x0f, 0x38, 0xda, 0x01, 0x2c, 0x8d, 0xe6, 0x94,
    573 	0x5d, 0x59, 0x27, 0x1d, 0x10, 0x4e, 0x11, 0x36,
    574 	0xfb, 0x53, 0x16, 0x05, 0x25, 0xf2, 0x64, 0xd8,
    575 	0xf9, 0xcd, 0x5c, 0xfe, 0xb4, 0x18, 0x44, 0x80,
    576 	0x10, 0xbc, 0x3d, 0xf3, 0x1d, 0x5a, 0xf0, 0xc1,
    577 	0xc3, 0x55, 0xff, 0x41, 0x3e, 0xe3, 0xef, 0x44,
    578 	0xb2, 0xc0, 0x01, 0x18, 0xa2, 0x49, 0x88, 0x78,
    579 	0x0d, 0x4c, 0xc8, 0x73, 0xcf, 0x30, 0x85, 0x3a,
    580 	0x88, 0x90, 0x01, 0xcf, 0x69, 0x53, 0xa3, 0x18,
    581 	0x3f, 0xd6, 0xe7, 0x94, 0x14, 0xa7, 0xae, 0xcd,
    582 	0x6f, 0x11, 0x72, 0xfe, 0x2b, 0xb0, 0x81, 0x53,
    583 	0xea, 0x67, 0xd6, 0xe4, 0xca, 0x42, 0xa0, 0xf9,
    584 	0xb1, 0xd4, 0xb5, 0x3b, 0xc9, 0xf0, 0x36, 0xc1,
    585 	0x1c, 0xf4, 0xb1, 0xf6, 0x84, 0xd0, 0x86, 0x6c,
    586 	0x76, 0x9a, 0x03, 0xc2, 0xb6, 0x2e, 0x9a, 0x46,
    587 	0xf5, 0x5f, 0x2c, 0x38, 0xac, 0xad, 0x6f, 0x2e,
    588 	0x7a, 0x18, 0x2d, 0x22, 0x95, 0x5e, 0x5e, 0xc9,
    589 	0x7a, 0x0a, 0x56, 0xe1, 0xc7, 0x15, 0xfd, 0xbf,
    590 	0xff, 0xf7, 0x7e, 0x85, 0x20, 0xa9, 0x8a, 0x9c,
    591 	0xa9, 0x7d, 0xe8, 0xed, 0xfc, 0x7f, 0xbb, 0xf0,
    592 	0x05, 0x3f, 0xce, 0x4f, 0x4c, 0xee, 0xa4, 0xa0,
    593 	0xcc, 0x9c, 0x62, 0x1e, 0xd6, 0xd0, 0x30, 0x37,
    594 	0xb8, 0x98, 0x56, 0x1d, 0xaa, 0xd6, 0x5e, 0x73,
    595 	0x12, 0xe4, 0x88, 0x82, 0x48, 0x64, 0x06, 0xd7,
    596 	0x2a, 0x31, 0x50, 0x7b, 0x10, 0x17, 0xb8, 0x4c,
    597 	0x5a, 0x8d, 0xf1, 0xfc, 0xf1, 0x33, 0x3b, 0x98,
    598 	0x42, 0x18, 0x5b, 0x35, 0x78, 0xca, 0x8e, 0x41,
    599 	0x52, 0xae, 0x6d, 0xe1, 0xa2, 0x9d, 0x5b, 0xbd,
    600 	0xf3, 0x5f, 0x49, 0xc1, 0x27, 0x06, 0xc1, 0xaf,
    601 	0xc0, 0xa3, 0x9d, 0xf3, 0x1c, 0x8e, 0x90, 0x8a,
    602 	0xb0, 0x69, 0xb0, 0xc5, 0x11, 0x0c, 0x91, 0x14,
    603 	0x1f, 0x5e, 0x10, 0xe1, 0x1d, 0x14, 0x30, 0x54,
    604 	0x1e, 0x17, 0x3d, 0x31, 0x7b, 0xbf, 0x2f, 0x9d,
    605 	0x6d, 0x63, 0x32, 0xf0, 0x9d, 0x9f, 0x95, 0x3d,
    606 	0x0b, 0xd2, 0x4d, 0x10, 0xe2, 0x3f, 0x67, 0x69,
    607 	0x43, 0x9a, 0x4a, 0x2c, 0x54, 0x71, 0xa8, 0xa0,
    608 	0x9e, 0x9f, 0x10, 0xaf, 0x1b, 0xce, 0x99, 0xe3,
    609 	0x25, 0x32, 0x10, 0x54, 0x80, 0xfe, 0xda, 0x57,
    610 	0xd0, 0xb2, 0x92, 0x7f, 0xbb, 0x5f, 0xe7, 0x4d,
    611 	0x1b, 0x3d, 0x46, 0x4d, 0xe4, 0x4c, 0xd6, 0xaf,
    612 	0x1a, 0x32, 0x12, 0x40, 0xb8, 0x84, 0x8e, 0xe4,
    613 	0x80, 0xce, 0x7e, 0xc1, 0x13, 0x8b, 0xb0, 0xb7,
    614 	0x6f, 0x24, 0xba, 0x85, 0x50, 0x83, 0xc3, 0xcf,
    615 	0x19, 0xb3, 0xf0, 0xc7, 0xee, 0x68, 0xbe, 0x9e,
    616 	0x6d, 0xb9, 0xfb, 0xd5, 0x29, 0xce, 0x82, 0xcd,
    617 	0x69, 0x16, 0x68, 0x6b, 0x6a, 0xf4, 0x02, 0x32,
    618 	0xce, 0x60, 0x37, 0x0c, 0xb9, 0x38, 0x92, 0x9c,
    619 	0x42, 0xa9, 0x0b, 0x53, 0x96, 0xfe, 0x39, 0xc1,
    620 	0x24, 0x65, 0x9b, 0xcd, 0xe7, 0x8d, 0x36, 0x07,
    621 	0x9f, 0x1d, 0x35, 0x8e, 0xdc, 0x4c, 0xb5, 0x68,
    622 	0xc5, 0xfd, 0x44, 0x19, 0xf2, 0x6c, 0x59, 0x1c,
    623 	0xb1, 0x0b, 0x35, 0x48, 0x86, 0x1a, 0x05, 0x22,
    624 	0x03, 0x0c, 0x0c, 0xa2, 0x92, 0x90, 0x35, 0xfb,
    625 	0x37, 0x94, 0xc7, 0x15, 0x84, 0xae, 0xe8, 0x05,
    626 	0xa0, 0xf7, 0x30, 0x11, 0x5c, 0xe4, 0x5d, 0x3e,
    627 	0x12, 0x54, 0x80, 0x54, 0x6b, 0x09, 0x8c, 0xce,
    628 	0x80, 0x5e, 0xa7, 0xc8, 0x6a, 0x0c, 0x56, 0xe1,
    629 	0x18, 0x7d, 0xc9, 0x39, 0xc1, 0xef, 0xe3, 0x25,
    630 	0xa0, 0x8b, 0x2f, 0x60, 0x3a, 0x43, 0x39, 0xa6,
    631 	0x28, 0x28, 0x7b, 0x4c, 0x77, 0xd4, 0x49, 0x61,
    632 	0x46, 0xe9, 0x1b, 0x45, 0xd6, 0xb1, 0x56, 0xe1,
    633 	0x7d, 0x34, 0xcd, 0x06, 0xb6, 0x67, 0x8d, 0x7d,
    634 	0x7a, 0xe2, 0xbe, 0x68, 0x35, 0xa6, 0x78, 0xe5,
    635 	0x47, 0x48, 0xb7, 0xc7, 0xde, 0xcd, 0xc9, 0x05,
    636 	0xb4, 0xe7, 0x50, 0x48, 0xe1, 0x4b, 0xfe, 0x76,
    637 	0x77, 0xc6, 0xf7, 0x5f, 0xcb, 0xc2, 0xa8, 0xd7,
    638 	0xd6, 0x8a, 0xe5, 0x49, 0xd9, 0xca, 0x45, 0xf4,
    639 	0xda, 0xcd, 0x33, 0xd1, 0x59, 0x2d, 0x9e, 0xc1,
    640 	0x5c, 0xe6, 0x01, 0x18, 0xb8, 0xf0, 0x5e, 0xb1,
    641 	0x69, 0x95, 0x2f, 0x02, 0x2a, 0xe7, 0x4a, 0xd7,
    642 	0xd1, 0xc3, 0xd5, 0x6f, 0x15, 0xc8, 0xdc, 0x29,
    643 	0xde, 0xb9, 0x3f, 0x8b, 0xa6, 0xbc, 0xdd, 0x25,
    644 	0x84, 0x35, 0x3c, 0x90, 0x2d, 0xc2, 0x1e, 0x98,
    645 	0x8a, 0x50, 0x09, 0x77, 0x42, 0xe9, 0x35, 0x8a,
    646 	0x7c, 0x97, 0xbf, 0xe8, 0xbf, 0x56, 0xd0, 0x8b,
    647 	0x65, 0xd3, 0xaf, 0x1e, 0x05, 0x94, 0xfa, 0xac,
    648 	0xa8, 0x2b, 0x28, 0xcb, 0x37, 0x3e, 0xe8, 0xbb,
    649 	0x66, 0x3a, 0xed, 0xb2, 0x48, 0x10, 0x0f, 0x3a,
    650 	0x5a, 0xc5, 0xdb, 0x26, 0x0e, 0xaa, 0x5e, 0x69,
    651 	0x15, 0xd6, 0x81, 0xae, 0xbd, 0xe6, 0x03, 0xf1,
    652 	0xf6, 0x37, 0xc8, 0xde, 0x70, 0x1f, 0x64, 0xb9,
    653 	0x5e, 0xbf, 0x2e, 0x4f, 0xb1, 0xea, 0xa0, 0x17,
    654 	0xe6, 0x7c, 0xf9, 0x2f, 0x1e, 0xd8, 0x58, 0xde,
    655 	0xa7, 0xf0, 0x46, 0x52, 0x95, 0xdf, 0xa4, 0x96,
    656 	0xd0, 0xc4, 0x97, 0x2b, 0x95, 0xcd, 0x5e, 0x40,
    657 	0x23, 0x5c, 0x10, 0xee, 0xba, 0x72, 0x9b, 0xcf,
    658 	0x0b, 0xe8, 0x18, 0x3a, 0x70, 0xd2, 0x5e, 0x07,
    659 	0x68, 0x93, 0xef, 0x4a, 0x5b, 0x8d, 0x72, 0x41,
    660 	0x4e, 0xea, 0x33, 0x6a, 0x0a, 0x5e, 0xfb, 0x02,
    661 	0x3f, 0xd4, 0xed, 0x5b, 0xe0, 0x42, 0x84, 0xd4,
    662 	0xaa, 0x85, 0xdc, 0x5b, 0x67, 0xee, 0x71, 0x67,
    663 	0xba, 0x8e, 0xd2, 0xbe, 0x61, 0xdf, 0x5a, 0x26,
    664 	0xb9, 0xf0, 0x77, 0x81, 0x53, 0x24, 0x16, 0xcb,
    665 	0x8c, 0xb8, 0x06, 0x6e, 0x68, 0xda, 0xc8, 0x2d,
    666 	0x17, 0x54, 0xdb, 0x46, 0xcb, 0xfd, 0x1f, 0x3d,
    667 	0x94, 0x81, 0x09, 0x4b, 0xfa, 0xb1, 0x46, 0xd9,
    668 	0x11, 0xa3, 0xb7, 0x31, 0x9c, 0xd2, 0x38, 0xd6,
    669 	0xba, 0x3d, 0xa3, 0x74, 0xd8, 0xf1, 0x24, 0xe8,
    670 	0x9c, 0xcb, 0x1d, 0xf9, 0x4a, 0xf7, 0xc8, 0x4b,
    671 	0xfe, 0x97, 0x7c, 0xa1, 0x02, 0xeb, 0x40, 0xc3,
    672 	0x89, 0x71, 0x01, 0xcd, 0x33, 0x2a, 0xc2, 0x82,
    673 	0xce, 0x62, 0x8d, 0x53, 0x7c, 0xdf, 0xce, 0xd7,
    674 	0xf5, 0xa8, 0x4f, 0xf2, 0xf2, 0x2e, 0xc1, 0xeb,
    675 	0x97, 0x99, 0x37, 0x3c, 0x53, 0xa6, 0xb4, 0x46,
    676 	0x05, 0x64, 0x92, 0x87, 0x08, 0x3c, 0x23, 0x4b,
    677 	0x9d, 0x67, 0x18, 0xf9, 0xe2, 0x0b, 0x1c, 0x39,
    678 	0xd3, 0x87, 0x70, 0xc0, 0xb9, 0x1e, 0x52, 0x0a,
    679 	0x0f, 0x48, 0xe2, 0xe7, 0x51, 0x72, 0x94, 0xf7,
    680 	0xa3, 0xdc, 0xe5, 0x66, 0x33, 0x39, 0x54, 0x06,
    681 	0x55, 0x93, 0x30, 0xf9, 0x5e, 0x76, 0x8f, 0xe0,
    682 	0x59, 0x4d, 0x0d, 0xa7, 0xf5, 0xbe, 0xdb, 0x20,
    683 	0xad, 0x0d, 0x76, 0x88, 0x5f, 0x9c, 0x7c, 0x75,
    684 	0x2f, 0x2a, 0x0b, 0x79, 0x6e, 0xd3, 0xe2, 0x66,
    685 	0xf5, 0x4a, 0x2d, 0x87, 0x87, 0x49, 0x84, 0x17,
    686 	0xa2, 0x62, 0x4c, 0xbb, 0xe4, 0x6e, 0x98, 0x10,
    687 	0xc9, 0xfb, 0x8a, 0x04, 0x68, 0x8d, 0x22, 0x66,
    688 	0xad, 0xea, 0x2a, 0xc9, 0x97, 0x2d, 0x3c, 0xbc,
    689 	0xd0, 0x77, 0x5f, 0xe6, 0xb8, 0x7f, 0xe6, 0xf6,
    690 	0x39, 0xbf, 0x56, 0x0e, 0x26, 0x6d, 0xc5, 0x3e,
    691 	0x53, 0x19, 0xd6, 0xb4, 0x57, 0x36, 0xa3, 0xc6,
    692 	0xd3, 0x3d, 0x66, 0x79, 0x30, 0x5c, 0x14, 0x0c,
    693 	0x0f, 0x3e, 0x96, 0xae, 0x90, 0x97, 0xab, 0x0d,
    694 	0x9f, 0xc3, 0xe7, 0x66, 0x3e, 0xe0, 0x31, 0x43,
    695 	0x4b, 0x01, 0xb3, 0x0e, 0x9e, 0x8c, 0x82, 0x4a,
    696 	0x8c, 0xc7, 0x79, 0x85, 0xdf, 0x75, 0x0d, 0xb4,
    697 	0x2b, 0x03, 0x14, 0xef, 0x72, 0x58, 0xfd, 0x64,
    698 	0xc8, 0xe3, 0x0d, 0x9a, 0x14, 0x6f, 0x76, 0xf9,
    699 	0x46, 0xd1, 0xd2, 0x81, 0xb3, 0x16, 0x6e, 0xc7,
    700 	0x76, 0x82, 0xce, 0xf4, 0xee, 0x33, 0x00, 0xe6,
    701 	0x77, 0xc4, 0xad, 0x4f, 0x06, 0xa7, 0x48, 0x80,
    702 	0x9e, 0x21, 0x66, 0xca, 0x75, 0x69, 0x57, 0xcb,
    703 	0xf0, 0x67, 0x6a, 0xaa, 0x8f, 0x88, 0x14, 0xbd,
    704 	0x65, 0x62, 0xe2, 0xad, 0xcc, 0x22, 0x88, 0x7b,
    705 	0x94, 0xbd, 0x0e, 0xcd, 0xb6, 0x69, 0xa2, 0xcb,
    706 	0x7d, 0x57, 0x5c, 0xb4, 0x92, 0x80, 0x13, 0x99,
    707 	0x84, 0xf3, 0x79, 0x0a, 0x2d, 0x70, 0xa4, 0xe0,
    708 	0xde, 0xc6, 0x32, 0xb0, 0x8a, 0x62, 0xb5, 0xcf,
    709 	0xfa, 0x5e, 0x5a, 0x92, 0x32, 0x7d, 0x34, 0x07,
    710 	0xb5, 0x52, 0x3a, 0xb5, 0x7d, 0x0f, 0xa1, 0xba,
    711 	0x56, 0xd0, 0x07, 0x76, 0x11, 0xf2, 0xc3, 0x33,
    712 	0x9d, 0xbd, 0x12, 0x35, 0x5e, 0xf7, 0x05, 0x88,
    713 	0x76, 0x94, 0xa6, 0xbf, 0xed, 0xb8, 0xa4, 0xa2,
    714 	0x0c, 0xbe, 0x0f, 0x6a, 0xaf, 0xf3, 0x1b, 0x33,
    715 	0x4a, 0xb7, 0x68, 0x3f, 0xbe, 0x95, 0x13, 0x97,
    716 	0x0f, 0x15, 0x17, 0x1b, 0x23, 0xaa, 0x08, 0x78,
    717 	0xa6, 0x5b, 0x08, 0xa2, 0x9d, 0x03, 0xa8, 0xa7,
    718 	0x39, 0xdc, 0xbc, 0x9a, 0x85, 0xf5, 0xe5, 0x55,
    719 	0x59, 0x3c, 0xef, 0xf9, 0x3f, 0x22, 0x8e, 0xf8,
    720 	0xd8, 0x3e, 0x02, 0x0b, 0xd8, 0x78, 0x4b, 0x15,
    721 	0x7f, 0xaa, 0x2c, 0xff, 0xbe, 0x77, 0x33, 0xc7,
    722 	0x6a, 0x12, 0xaa, 0xa4, 0xbe, 0xc0, 0x3b, 0xcb,
    723 	0x13, 0x9d, 0x9c, 0x5a, 0x9f, 0x8a, 0x57, 0x36,
    724 	0x4f, 0x02, 0x5a, 0xf8, 0x1d, 0x97, 0x77, 0x43,
    725 	0xc8, 0xa5, 0xb7, 0x9b, 0x10, 0x98, 0xfd, 0x58,
    726 	0xbf, 0x42, 0xf6, 0xbf, 0xff, 0x6c, 0x40, 0x18,
    727 	0x18, 0xdf, 0xac, 0x57, 0x71, 0xea, 0xcc, 0x8e,
    728 	0xfd, 0xfe, 0x10, 0xfb, 0xb9, 0xfe, 0xbc, 0x9a,
    729 	0x9c, 0x27, 0xe4, 0x10, 0x15, 0x94, 0x41, 0xa1,
    730 	0xcc, 0xf6, 0x25, 0x49, 0x4f, 0x96, 0xc1, 0x8c,
    731 	0x9e, 0x3e, 0x18, 0x29, 0x49, 0x92, 0xe7, 0xfe,
    732 	0x22, 0xff, 0xed, 0x02, 0x16, 0x90, 0xef, 0xac,
    733 	0xec, 0x95, 0x1d, 0x5b, 0x94, 0x9c, 0xf6, 0x7c,
    734 	0x1b, 0x5a, 0x9d, 0xb0, 0x9b, 0x05, 0x36, 0xbf,
    735 	0xef, 0xec, 0x63, 0x35, 0x40, 0x24, 0x45, 0x40,
    736 	0x30, 0x1a, 0x9b, 0x90, 0xc3, 0xc2, 0xf7, 0x37,
    737 	0xfb, 0x08, 0x8e, 0x48, 0x19, 0x48, 0xed, 0xa8,
    738 	0xa8, 0x04, 0x6f, 0xd0, 0x33, 0xe9, 0xb8, 0x8d,
    739 	0xe7, 0x1e, 0x5c, 0x47, 0x74, 0xc0, 0x66, 0x30,
    740 	0x4e, 0xa7, 0x86, 0x73, 0xf1, 0xe5, 0x78, 0xa6,
    741 	0xe0, 0xc1, 0xda, 0x13, 0x72, 0x07, 0x85, 0x34,
    742 	0x63, 0x95, 0x49, 0x30, 0x4b, 0x9d, 0x03, 0xf1,
    743 	0x7a, 0x6b, 0x91, 0xa2, 0x85, 0x41, 0xf9, 0x4a,
    744 	0xd6, 0xff, 0xff, 0x86, 0xf7, 0xf0, 0xce, 0xb9,
    745 	0x07, 0xf1, 0x88, 0x04, 0x33, 0xaa, 0xeb, 0x54,
    746 	0xb2, 0x1c, 0x8e, 0x2e, 0x7b, 0x04, 0xa8, 0xcc,
    747 	0x2c, 0x7a, 0xb3, 0xad, 0x1a, 0x89, 0x38, 0x89,
    748 	0xd7, 0x11, 0x3a, 0x8c, 0xcf, 0xe3, 0xc5, 0xba,
    749 	0xb0, 0xcc, 0xc4, 0xe3, 0x33, 0xf3, 0x18, 0xba,
    750 	0xec, 0x56, 0xd9, 0x1c, 0x40, 0x70, 0x0d, 0x4e,
    751 	0x97, 0x01, 0x23, 0xf3, 0x5a, 0xdc, 0xbf, 0x68,
    752 	0x93, 0xc2, 0x1d, 0x8a, 0x96, 0xb7, 0xac, 0x18,
    753 	0x6f, 0xf7, 0x84, 0x71, 0x0d, 0x3d, 0xf8, 0xba,
    754 	0xdf, 0xb6, 0x89, 0x1d, 0x78, 0x19, 0xf2, 0x59,
    755 	0xe9, 0x15, 0x55, 0x29, 0x73, 0x50, 0x59, 0x14,
    756 	0x02, 0x21, 0x16, 0x8f, 0x0f, 0xdf, 0xa5, 0xf0,
    757 };
    758 
    759 static struct crc_test {
    760 	uint32_t crc;		/* random starting crc */
    761 	uint32_t start;		/* random offset in buf */
    762 	uint32_t length;	/* random length of test */
    763 	uint32_t crc32c_le;	/* expected crc32c_le result */
    764 	uint32_t crc32_be;	/* expected crc32_be result */
    765 } test[] = {
    766 	{0xffffffff, 0x00000000, 0x00001000, 0x13934bef, 0xd8ddcdc3},
    767 	{0xfe7328ea, 0x00000763, 0x00000717, 0xed2c0d70, 0xc863aef8},
    768 	{0x4c40684e, 0x00000721, 0x0000011e, 0xd7f46ccc, 0x173a11c4},
    769 	{0x6b487f90, 0x00000264, 0x000007bc, 0x759e9939, 0xd6307c56},
    770 	{0x9f5810db, 0x00000afa, 0x00000255, 0x2685197f, 0x2e5c9201},
    771 	{0xb15c4755, 0x00000d5b, 0x000002a4, 0xd8fadcb5, 0xf682c4be},
    772 	{0x06518253, 0x00000ffb, 0x00000004, 0xabee2433, 0x3d8abdf9},
    773 	{0xd9e71c55, 0x00000a2a, 0x00000259, 0x96682af2, 0x47b4d26c},
    774 	{0x0c1ae843, 0x00000ce4, 0x0000031b, 0x7b637c43, 0x62b47e8b},
    775 	{0xec3cd517, 0x000002ff, 0x00000566, 0x5d719a77, 0xff5bc5b7},
    776 	{0x77828e95, 0x0000067f, 0x0000038f, 0x43ee5b6c, 0x1a0cfacd},
    777 	{0xec87b4e3, 0x00000d1c, 0x000002e3, 0x2ddd2eee, 0x275118a7},
    778 	{0x412158bb, 0x00000eee, 0x00000111, 0x67b38ba2, 0xa74ecff5},
    779 	{0x2e52de3e, 0x00000c4a, 0x000003b5, 0xbcc5d61d, 0xbd800707},
    780 	{0x6ddaae8b, 0x00000d99, 0x00000266, 0x8b535544, 0xecbde1a1},
    781 	{0x049b6cb1, 0x000009c5, 0x000000b0, 0xfc22cabc, 0xfb78eb9f},
    782 	{0x77d4b954, 0x0000028a, 0x000007fa, 0x71d00923, 0x8c116f85},
    783 	{0x5e192355, 0x00000ac1, 0x000001fa, 0xb966b81a, 0x5aa17bbe},
    784 	{0x7d80b71d, 0x00000213, 0x000001e0, 0x2bba371a, 0xb5906aa6},
    785 	{0x01f6f1e4, 0x000001d6, 0x00000395, 0xb7e8a647, 0x3ad112b1},
    786 	{0x1dfabb13, 0x00000e14, 0x000001eb, 0x53917fba, 0xbaee0339},
    787 	{0xb00a4449, 0x00000bf6, 0x00000409, 0xedecb577, 0x6f3a3979},
    788 	{0x7ecd3981, 0x0000083f, 0x0000016b, 0xefef62b9, 0xe3e52eed},
    789 	{0xf8f330d2, 0x000004be, 0x00000757, 0x9357c9f3, 0x0835bc1b},
    790 	{0x03c38af2, 0x00000d23, 0x000002dc, 0x360fa8c0, 0x2ca885e6},
    791 	{0x687bb79b, 0x00000f3d, 0x000000c2, 0x448d3be2, 0x79be2f78},
    792 	{0x6710f550, 0x000009e9, 0x00000603, 0xdbfd1998, 0x1d25f627},
    793 	{0x873171d1, 0x00000787, 0x000004d5, 0xab7f1b62, 0xa76a5656},
    794 	{0x373b1314, 0x00000f0f, 0x000000f0, 0x184098ab, 0xba273974},
    795 	{0x90fad9cd, 0x00000ead, 0x00000152, 0x23ce52ff, 0xb7bc958c},
    796 	{0x19676fe7, 0x0000007d, 0x0000070d, 0xf8a76f1e, 0xf882b644},
    797 	{0x89facd45, 0x000005f3, 0x00000473, 0x4331a006, 0xe9dc1396},
    798 	{0x6f173747, 0x00000fc3, 0x0000003c, 0xb012f08e, 0xc6b888ee},
    799 	{0x4b44a106, 0x0000075a, 0x0000008b, 0xf6f7ac38, 0x60cd2b74},
    800 	{0xb620ad06, 0x00000774, 0x0000017e, 0xd34558e6, 0x3a0a615b},
    801 	{0x976f21e9, 0x000008d7, 0x0000034a, 0xe533aa3a, 0xa99e60be},
    802 	{0x687628c0, 0x000006c5, 0x0000061b, 0x3a840b15, 0x9bfcaef2},
    803 	{0xe24ac108, 0x00000cd0, 0x0000032f, 0x51010ae8, 0x20958672},
    804 	{0x361c44a3, 0x00000304, 0x00000719, 0xfd7bd481, 0xd70ff2b2},
    805 	{0xd93ff95e, 0x00000db7, 0x0000008e, 0xcfbbc304, 0xad716acd},
    806 	{0xed752d12, 0x00000883, 0x00000091, 0x65a6c868, 0x95c71c7b},
    807 	{0xb4ff4b54, 0x000003d3, 0x000001c1, 0xf82597e7, 0x44b7f99b},
    808 	{0x111b520f, 0x00000708, 0x000000eb, 0xc3e109f3, 0x71bc01ee},
    809 	{0x62c806f2, 0x00000ba3, 0x0000045c, 0x874d3a72, 0xc539b753},
    810 	{0x40d97470, 0x000005e1, 0x0000058d, 0x87a9684f, 0xea6073a5},
    811 	{0x4312179c, 0x00000056, 0x0000070e, 0x809a00f5, 0x209aea3b},
    812 	{0x13d5f84c, 0x00000a2d, 0x00000104, 0xf3d27578, 0xe087a8b6},
    813 	{0x1f302cb2, 0x00000151, 0x00000014, 0x1e162693, 0x95e4b90e},
    814 	{0xe491db24, 0x00000600, 0x000006f6, 0x7ff09615, 0x77611523},
    815 	{0xf9a98069, 0x000002ba, 0x000002ad, 0x01af7387, 0xea925faa},
    816 	{0xe9c477ad, 0x0000015f, 0x00000778, 0x6facf9a0, 0x1130f736},
    817 	{0x353f32b2, 0x0000087c, 0x00000783, 0x6cc964ea, 0x32459994},
    818 	{0x78e1b24f, 0x00000650, 0x000006a8, 0xb3bb7c27, 0x5a632f78},
    819 	{0x61aa400e, 0x00000049, 0x00000254, 0xb8cd1681, 0xdf2652d5},
    820 	{0xb84b10b0, 0x00000f73, 0x0000008c, 0x406a6450, 0x3619d31b},
    821 	{0x9fa99c9c, 0x00000a7c, 0x000004d7, 0xfb3d21b4, 0xea31c743},
    822 	{0x3fc9ebe3, 0x00000cd9, 0x000000d6, 0x43803f9c, 0x1f76a809},
    823 	{0x529879cd, 0x000002f2, 0x00000595, 0x78b4c6a6, 0x63b9b93f},
    824 	{0x3a933019, 0x00000516, 0x00000266, 0xdcb45436, 0x8f99c98c},
    825 	{0x887b4977, 0x00000227, 0x0000038d, 0xc5f7c3d9, 0xaf5e3091},
    826 	{0x770745de, 0x000008c6, 0x00000739, 0xf69145e8, 0x53d0dce1},
    827 	{0x28be3b47, 0x00000c46, 0x0000032b, 0x764c028f, 0x106d0905},
    828 	{0x5013a050, 0x00000cf6, 0x00000309, 0xea8fe164, 0x62180b57},
    829 	{0x2ec4c9ba, 0x000006e8, 0x0000078d, 0xa35557a9, 0xf44430a4},
    830 	{0xa9f950c9, 0x00000d33, 0x000002cc, 0x41ea8618, 0x587b4eb3},
    831 	{0x5b520229, 0x000007b2, 0x00000484, 0x44569f1f, 0x92406c32},
    832 	{0xd8dcbbfc, 0x0000002f, 0x0000048c, 0xdb88ab8b, 0x13bfe70e},
    833 	{0x25529792, 0x00000d1d, 0x000002e2, 0x20cda404, 0x19d3b4e4},
    834 	{0x9f3f6d71, 0x00000238, 0x0000079a, 0x0720443e, 0x3c107021},
    835 	{0x64121215, 0x000007ff, 0x0000038f, 0x6aacff2c, 0xb82fdc3e},
    836 	{0xfb6cdde0, 0x00000ef8, 0x00000107, 0xbd43a0f1, 0xab0d3c1d},
    837 	{0x221c9d6f, 0x000007b6, 0x0000014f, 0xb67f834b, 0x1371ad05},
    838 	{0x030e1de4, 0x00000836, 0x000004b4, 0x0d67d26a, 0xe2e72df1},
    839 	{0xb56fa6cf, 0x00000c07, 0x000003f8, 0x60601ac1, 0x039de73e},
    840 	{0xb55c89f5, 0x0000098e, 0x000001d4, 0x2400efbe, 0xfe39a2bb},
    841 	{0x5e90b6d5, 0x0000070b, 0x000003ea, 0x3bb5d6ea, 0xf0f794a0},
    842 	{0x2a7045ae, 0x00000961, 0x00000633, 0xfca89e4b, 0xe66ce41c},
    843 	{0x8b374ea9, 0x000006ba, 0x00000780, 0xbce036ed, 0x4cb28ef7},
    844 	{0x8bd90bc9, 0x00000562, 0x00000369, 0xcb26a24b, 0x40236d1d},
    845 	{0x5b1b1762, 0x000000fd, 0x0000051a, 0x33cdda07, 0xc32e420a},
    846 	{0xa4153555, 0x0000058f, 0x000005c7, 0xbe50eeca, 0x83a67f35},
    847 	{0x0be1f931, 0x00000651, 0x00000672, 0x95a25753, 0x88f1aac1},
    848 	{0xb7e78618, 0x00000a7f, 0x000002bb, 0xe06bcc1c, 0x74274f66},
    849 	{0x4a9bc41b, 0x00000e51, 0x000001ae, 0x709e8d2c, 0x54eff534},
    850 	{0xfc359d13, 0x00000440, 0x000002f8, 0x0a58451f, 0x55e9363f},
    851 	{0x5aa48619, 0x000006d1, 0x00000284, 0x928ead83, 0x31041c06},
    852 	{0xa609afa8, 0x0000053e, 0x00000272, 0xb048c141, 0x4704efba},
    853 	{0x3f108afb, 0x00000949, 0x00000150, 0x9a6bb5bc, 0x4e4430c8},
    854 	{0x79bec2d3, 0x000008ed, 0x00000712, 0x32692d57, 0x11d52a7b},
    855 	{0x9429e067, 0x00000bc3, 0x0000043c, 0x5295ceff, 0x04640f4d},
    856 	{0xae58b96a, 0x0000082d, 0x000007d2, 0xc2a681ba, 0xf7ca4a2c},
    857 	{0x95df24be, 0x00000985, 0x000004c1, 0x3a287765, 0x2c4af003},
    858 	{0x5e94976f, 0x00000596, 0x000004ed, 0xff00c489, 0x5ae11687},
    859 	{0xf5e5f1de, 0x00000d31, 0x000002ce, 0x35f28e91, 0x30d47957},
    860 	{0xa2c219cf, 0x00000a3c, 0x00000374, 0x707d21eb, 0x2a14a255},
    861 	{0xf21b6ceb, 0x00000919, 0x00000135, 0x0847fb8b, 0xcb8d3b93},
    862 	{0xaa988728, 0x00000787, 0x00000771, 0x885aeaa4, 0x6531b509},
    863 	{0xaa5dfaac, 0x000003e5, 0x0000051b, 0x52c48ab7, 0xe43cc5e9},
    864 	{0x0a053968, 0x00000d2a, 0x000002d5, 0x7a90256d, 0x8004765c},
    865 	{0x1421dc20, 0x00000eef, 0x00000110, 0x97d6da24, 0x1378f6ff},
    866 	{0xb47c2166, 0x00000a6a, 0x00000209, 0xcfd6cc52, 0x676e14a5},
    867 	{0x77dd1955, 0x000000de, 0x00000266, 0xba74bcaa, 0xc71b429c},
    868 	{0x68a03cc2, 0x0000082f, 0x000007b0, 0x752bd5d8, 0x19ed14aa},
    869 	{0x0226b0a3, 0x00000a5f, 0x000005a0, 0x82de4970, 0xf654d3ed},
    870 	{0x637bf3b1, 0x00000d93, 0x0000026c, 0x5c7115cb, 0x3cccb57e},
    871 	{0x3b120edf, 0x00000c13, 0x000003ec, 0x80d7d20f, 0x92132798},
    872 	{0xe2456780, 0x000002eb, 0x00000641, 0xc0a5d289, 0x6160c87a},
    873 	{0x9b2e7125, 0x00000c0c, 0x000003f3, 0xcc15f57e, 0x6f00f637},
    874 	{0x153033ef, 0x00000787, 0x000006b6, 0x3cde443b, 0xb46caa6e},
    875 	{0x18458b3f, 0x0000066c, 0x00000561, 0x9a2bd8c6, 0xb6c29121},
    876 	{0x4ff9d4b9, 0x00000c8f, 0x0000033a, 0xd0ee6d6d, 0xc81cf380},
    877 	{0xdf84b5d9, 0x00000802, 0x0000029a, 0xdab0d74a, 0xb2464559},
    878 	{0x81ee15df, 0x000003ce, 0x00000725, 0x9942e2de, 0x4ccf571b},
    879 	{0x5c768e04, 0x00000afd, 0x00000160, 0x36110831, 0xae0b305a},
    880 	{0xe5e18094, 0x00000b4b, 0x000000a0, 0xffa3e4a7, 0x6c8a4f09},
    881 	{0xed7263b6, 0x00000d0d, 0x000002f2, 0xb0006a35, 0x7e04af8c},
    882 	{0x5bfde7d7, 0x000006fb, 0x00000554, 0xa4193b76, 0xb3a91d12},
    883 	{0x67f4a743, 0x00000b85, 0x0000047a, 0xf05c8d8f, 0xfb472fdf},
    884 	{0xf13bdf22, 0x00000ff7, 0x00000008, 0x816351eb, 0xf347f235},
    885 	{0x08ecc608, 0x00000d5d, 0x00000098, 0x90492772, 0x0b7f1521},
    886 	{0x296f52ba, 0x000004f9, 0x00000788, 0x5e5a4896, 0x1cc67088},
    887 	{0xbe4624c2, 0x00000427, 0x000004ef, 0xcd267b94, 0x550caefd},
    888 	{0x906f7c7c, 0x00000a05, 0x0000003f, 0x03fcfc33, 0x9ed82a02},
    889 	{0x8f7b323e, 0x00000458, 0x000004c7, 0xcd4969c8, 0x633c38a8},
    890 	{0x88d6593d, 0x00000597, 0x000005b5, 0xf199cd3b, 0x0491452f},
    891 	{0x978a7768, 0x00000268, 0x000001d3, 0xb28c95bd, 0x1a42fe61},
    892 	{0x857a621e, 0x000007a7, 0x000003a8, 0xf4bf84ab, 0xcd0694c6},
    893 	{0xb0e121ef, 0x000005be, 0x00000644, 0x28747c14, 0xf0510c72},
    894 	{0, 0, 0, 0, 0},
    895 };
    896 
    897 static int test_crc32c(void)
    898 {
    899 	struct crc_test *t = test;
    900 	int failures = 0;
    901 
    902 	while (t->length) {
    903 		uint32_t be, le;
    904 		le = ext2fs_crc32c_le(t->crc, test_buf + t->start, t->length);
    905 		be = ext2fs_crc32_be(t->crc, test_buf + t->start, t->length);
    906 		if (le != t->crc32c_le) {
    907 			printf("Test %d LE fails, %x != %x\n",
    908 			       (int) (t - test), le, t->crc32c_le);
    909 			failures++;
    910 		}
    911 		if (be != t->crc32_be) {
    912 			printf("Test %d BE fails, %x != %x\n",
    913 			       (int) (t - test), be, t->crc32_be);
    914 			failures++;
    915 		}
    916 		t++;
    917 	}
    918 
    919 	return failures;
    920 }
    921 
    922 int main(int argc, char *argv[])
    923 {
    924 	int ret;
    925 
    926 	ret = test_crc32c();
    927 	if (!ret)
    928 		printf("No failures.\n");
    929 
    930 	return ret;
    931 }
    932 #endif /* UNITTEST */
    933