0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 #include <linux/crc32.h>
0028 #include <linux/module.h>
0029 #include <linux/sched.h>
0030
0031 #include "crc32defs.h"
0032
0033
0034 static u8 const __aligned(8) test_buf[] __initconst =
0035 {
0036 0x5b, 0x85, 0x21, 0xcb, 0x09, 0x68, 0x7d, 0x30,
0037 0xc7, 0x69, 0xd7, 0x30, 0x92, 0xde, 0x59, 0xe4,
0038 0xc9, 0x6e, 0x8b, 0xdb, 0x98, 0x6b, 0xaa, 0x60,
0039 0xa8, 0xb5, 0xbc, 0x6c, 0xa9, 0xb1, 0x5b, 0x2c,
0040 0xea, 0xb4, 0x92, 0x6a, 0x3f, 0x79, 0x91, 0xe4,
0041 0xe9, 0x70, 0x51, 0x8c, 0x7f, 0x95, 0x6f, 0x1a,
0042 0x56, 0xa1, 0x5c, 0x27, 0x03, 0x67, 0x9f, 0x3a,
0043 0xe2, 0x31, 0x11, 0x29, 0x6b, 0x98, 0xfc, 0xc4,
0044 0x53, 0x24, 0xc5, 0x8b, 0xce, 0x47, 0xb2, 0xb9,
0045 0x32, 0xcb, 0xc1, 0xd0, 0x03, 0x57, 0x4e, 0xd4,
0046 0xe9, 0x3c, 0xa1, 0x63, 0xcf, 0x12, 0x0e, 0xca,
0047 0xe1, 0x13, 0xd1, 0x93, 0xa6, 0x88, 0x5c, 0x61,
0048 0x5b, 0xbb, 0xf0, 0x19, 0x46, 0xb4, 0xcf, 0x9e,
0049 0xb6, 0x6b, 0x4c, 0x3a, 0xcf, 0x60, 0xf9, 0x7a,
0050 0x8d, 0x07, 0x63, 0xdb, 0x40, 0xe9, 0x0b, 0x6f,
0051 0xad, 0x97, 0xf1, 0xed, 0xd0, 0x1e, 0x26, 0xfd,
0052 0xbf, 0xb7, 0xc8, 0x04, 0x94, 0xf8, 0x8b, 0x8c,
0053 0xf1, 0xab, 0x7a, 0xd4, 0xdd, 0xf3, 0xe8, 0x88,
0054 0xc3, 0xed, 0x17, 0x8a, 0x9b, 0x40, 0x0d, 0x53,
0055 0x62, 0x12, 0x03, 0x5f, 0x1b, 0x35, 0x32, 0x1f,
0056 0xb4, 0x7b, 0x93, 0x78, 0x0d, 0xdb, 0xce, 0xa4,
0057 0xc0, 0x47, 0xd5, 0xbf, 0x68, 0xe8, 0x5d, 0x74,
0058 0x8f, 0x8e, 0x75, 0x1c, 0xb2, 0x4f, 0x9a, 0x60,
0059 0xd1, 0xbe, 0x10, 0xf4, 0x5c, 0xa1, 0x53, 0x09,
0060 0xa5, 0xe0, 0x09, 0x54, 0x85, 0x5c, 0xdc, 0x07,
0061 0xe7, 0x21, 0x69, 0x7b, 0x8a, 0xfd, 0x90, 0xf1,
0062 0x22, 0xd0, 0xb4, 0x36, 0x28, 0xe6, 0xb8, 0x0f,
0063 0x39, 0xde, 0xc8, 0xf3, 0x86, 0x60, 0x34, 0xd2,
0064 0x5e, 0xdf, 0xfd, 0xcf, 0x0f, 0xa9, 0x65, 0xf0,
0065 0xd5, 0x4d, 0x96, 0x40, 0xe3, 0xdf, 0x3f, 0x95,
0066 0x5a, 0x39, 0x19, 0x93, 0xf4, 0x75, 0xce, 0x22,
0067 0x00, 0x1c, 0x93, 0xe2, 0x03, 0x66, 0xf4, 0x93,
0068 0x73, 0x86, 0x81, 0x8e, 0x29, 0x44, 0x48, 0x86,
0069 0x61, 0x7c, 0x48, 0xa3, 0x43, 0xd2, 0x9c, 0x8d,
0070 0xd4, 0x95, 0xdd, 0xe1, 0x22, 0x89, 0x3a, 0x40,
0071 0x4c, 0x1b, 0x8a, 0x04, 0xa8, 0x09, 0x69, 0x8b,
0072 0xea, 0xc6, 0x55, 0x8e, 0x57, 0xe6, 0x64, 0x35,
0073 0xf0, 0xc7, 0x16, 0x9f, 0x5d, 0x5e, 0x86, 0x40,
0074 0x46, 0xbb, 0xe5, 0x45, 0x88, 0xfe, 0xc9, 0x63,
0075 0x15, 0xfb, 0xf5, 0xbd, 0x71, 0x61, 0xeb, 0x7b,
0076 0x78, 0x70, 0x07, 0x31, 0x03, 0x9f, 0xb2, 0xc8,
0077 0xa7, 0xab, 0x47, 0xfd, 0xdf, 0xa0, 0x78, 0x72,
0078 0xa4, 0x2a, 0xe4, 0xb6, 0xba, 0xc0, 0x1e, 0x86,
0079 0x71, 0xe6, 0x3d, 0x18, 0x37, 0x70, 0xe6, 0xff,
0080 0xe0, 0xbc, 0x0b, 0x22, 0xa0, 0x1f, 0xd3, 0xed,
0081 0xa2, 0x55, 0x39, 0xab, 0xa8, 0x13, 0x73, 0x7c,
0082 0x3f, 0xb2, 0xd6, 0x19, 0xac, 0xff, 0x99, 0xed,
0083 0xe8, 0xe6, 0xa6, 0x22, 0xe3, 0x9c, 0xf1, 0x30,
0084 0xdc, 0x01, 0x0a, 0x56, 0xfa, 0xe4, 0xc9, 0x99,
0085 0xdd, 0xa8, 0xd8, 0xda, 0x35, 0x51, 0x73, 0xb4,
0086 0x40, 0x86, 0x85, 0xdb, 0x5c, 0xd5, 0x85, 0x80,
0087 0x14, 0x9c, 0xfd, 0x98, 0xa9, 0x82, 0xc5, 0x37,
0088 0xff, 0x32, 0x5d, 0xd0, 0x0b, 0xfa, 0xdc, 0x04,
0089 0x5e, 0x09, 0xd2, 0xca, 0x17, 0x4b, 0x1a, 0x8e,
0090 0x15, 0xe1, 0xcc, 0x4e, 0x52, 0x88, 0x35, 0xbd,
0091 0x48, 0xfe, 0x15, 0xa0, 0x91, 0xfd, 0x7e, 0x6c,
0092 0x0e, 0x5d, 0x79, 0x1b, 0x81, 0x79, 0xd2, 0x09,
0093 0x34, 0x70, 0x3d, 0x81, 0xec, 0xf6, 0x24, 0xbb,
0094 0xfb, 0xf1, 0x7b, 0xdf, 0x54, 0xea, 0x80, 0x9b,
0095 0xc7, 0x99, 0x9e, 0xbd, 0x16, 0x78, 0x12, 0x53,
0096 0x5e, 0x01, 0xa7, 0x4e, 0xbd, 0x67, 0xe1, 0x9b,
0097 0x4c, 0x0e, 0x61, 0x45, 0x97, 0xd2, 0xf0, 0x0f,
0098 0xfe, 0x15, 0x08, 0xb7, 0x11, 0x4c, 0xe7, 0xff,
0099 0x81, 0x53, 0xff, 0x91, 0x25, 0x38, 0x7e, 0x40,
0100 0x94, 0xe5, 0xe0, 0xad, 0xe6, 0xd9, 0x79, 0xb6,
0101 0x92, 0xc9, 0xfc, 0xde, 0xc3, 0x1a, 0x23, 0xbb,
0102 0xdd, 0xc8, 0x51, 0x0c, 0x3a, 0x72, 0xfa, 0x73,
0103 0x6f, 0xb7, 0xee, 0x61, 0x39, 0x03, 0x01, 0x3f,
0104 0x7f, 0x94, 0x2e, 0x2e, 0xba, 0x3a, 0xbb, 0xb4,
0105 0xfa, 0x6a, 0x17, 0xfe, 0xea, 0xef, 0x5e, 0x66,
0106 0x97, 0x3f, 0x32, 0x3d, 0xd7, 0x3e, 0xb1, 0xf1,
0107 0x6c, 0x14, 0x4c, 0xfd, 0x37, 0xd3, 0x38, 0x80,
0108 0xfb, 0xde, 0xa6, 0x24, 0x1e, 0xc8, 0xca, 0x7f,
0109 0x3a, 0x93, 0xd8, 0x8b, 0x18, 0x13, 0xb2, 0xe5,
0110 0xe4, 0x93, 0x05, 0x53, 0x4f, 0x84, 0x66, 0xa7,
0111 0x58, 0x5c, 0x7b, 0x86, 0x52, 0x6d, 0x0d, 0xce,
0112 0xa4, 0x30, 0x7d, 0xb6, 0x18, 0x9f, 0xeb, 0xff,
0113 0x22, 0xbb, 0x72, 0x29, 0xb9, 0x44, 0x0b, 0x48,
0114 0x1e, 0x84, 0x71, 0x81, 0xe3, 0x6d, 0x73, 0x26,
0115 0x92, 0xb4, 0x4d, 0x2a, 0x29, 0xb8, 0x1f, 0x72,
0116 0xed, 0xd0, 0xe1, 0x64, 0x77, 0xea, 0x8e, 0x88,
0117 0x0f, 0xef, 0x3f, 0xb1, 0x3b, 0xad, 0xf9, 0xc9,
0118 0x8b, 0xd0, 0xac, 0xc6, 0xcc, 0xa9, 0x40, 0xcc,
0119 0x76, 0xf6, 0x3b, 0x53, 0xb5, 0x88, 0xcb, 0xc8,
0120 0x37, 0xf1, 0xa2, 0xba, 0x23, 0x15, 0x99, 0x09,
0121 0xcc, 0xe7, 0x7a, 0x3b, 0x37, 0xf7, 0x58, 0xc8,
0122 0x46, 0x8c, 0x2b, 0x2f, 0x4e, 0x0e, 0xa6, 0x5c,
0123 0xea, 0x85, 0x55, 0xba, 0x02, 0x0e, 0x0e, 0x48,
0124 0xbc, 0xe1, 0xb1, 0x01, 0x35, 0x79, 0x13, 0x3d,
0125 0x1b, 0xc0, 0x53, 0x68, 0x11, 0xe7, 0x95, 0x0f,
0126 0x9d, 0x3f, 0x4c, 0x47, 0x7b, 0x4d, 0x1c, 0xae,
0127 0x50, 0x9b, 0xcb, 0xdd, 0x05, 0x8d, 0x9a, 0x97,
0128 0xfd, 0x8c, 0xef, 0x0c, 0x1d, 0x67, 0x73, 0xa8,
0129 0x28, 0x36, 0xd5, 0xb6, 0x92, 0x33, 0x40, 0x75,
0130 0x0b, 0x51, 0xc3, 0x64, 0xba, 0x1d, 0xc2, 0xcc,
0131 0xee, 0x7d, 0x54, 0x0f, 0x27, 0x69, 0xa7, 0x27,
0132 0x63, 0x30, 0x29, 0xd9, 0xc8, 0x84, 0xd8, 0xdf,
0133 0x9f, 0x68, 0x8d, 0x04, 0xca, 0xa6, 0xc5, 0xc7,
0134 0x7a, 0x5c, 0xc8, 0xd1, 0xcb, 0x4a, 0xec, 0xd0,
0135 0xd8, 0x20, 0x69, 0xc5, 0x17, 0xcd, 0x78, 0xc8,
0136 0x75, 0x23, 0x30, 0x69, 0xc9, 0xd4, 0xea, 0x5c,
0137 0x4f, 0x6b, 0x86, 0x3f, 0x8b, 0xfe, 0xee, 0x44,
0138 0xc9, 0x7c, 0xb7, 0xdd, 0x3e, 0xe5, 0xec, 0x54,
0139 0x03, 0x3e, 0xaa, 0x82, 0xc6, 0xdf, 0xb2, 0x38,
0140 0x0e, 0x5d, 0xb3, 0x88, 0xd9, 0xd3, 0x69, 0x5f,
0141 0x8f, 0x70, 0x8a, 0x7e, 0x11, 0xd9, 0x1e, 0x7b,
0142 0x38, 0xf1, 0x42, 0x1a, 0xc0, 0x35, 0xf5, 0xc7,
0143 0x36, 0x85, 0xf5, 0xf7, 0xb8, 0x7e, 0xc7, 0xef,
0144 0x18, 0xf1, 0x63, 0xd6, 0x7a, 0xc6, 0xc9, 0x0e,
0145 0x4d, 0x69, 0x4f, 0x84, 0xef, 0x26, 0x41, 0x0c,
0146 0xec, 0xc7, 0xe0, 0x7e, 0x3c, 0x67, 0x01, 0x4c,
0147 0x62, 0x1a, 0x20, 0x6f, 0xee, 0x47, 0x4d, 0xc0,
0148 0x99, 0x13, 0x8d, 0x91, 0x4a, 0x26, 0xd4, 0x37,
0149 0x28, 0x90, 0x58, 0x75, 0x66, 0x2b, 0x0a, 0xdf,
0150 0xda, 0xee, 0x92, 0x25, 0x90, 0x62, 0x39, 0x9e,
0151 0x44, 0x98, 0xad, 0xc1, 0x88, 0xed, 0xe4, 0xb4,
0152 0xaf, 0xf5, 0x8c, 0x9b, 0x48, 0x4d, 0x56, 0x60,
0153 0x97, 0x0f, 0x61, 0x59, 0x9e, 0xa6, 0x27, 0xfe,
0154 0xc1, 0x91, 0x15, 0x38, 0xb8, 0x0f, 0xae, 0x61,
0155 0x7d, 0x26, 0x13, 0x5a, 0x73, 0xff, 0x1c, 0xa3,
0156 0x61, 0x04, 0x58, 0x48, 0x55, 0x44, 0x11, 0xfe,
0157 0x15, 0xca, 0xc3, 0xbd, 0xca, 0xc5, 0xb4, 0x40,
0158 0x5d, 0x1b, 0x7f, 0x39, 0xb5, 0x9c, 0x35, 0xec,
0159 0x61, 0x15, 0x32, 0x32, 0xb8, 0x4e, 0x40, 0x9f,
0160 0x17, 0x1f, 0x0a, 0x4d, 0xa9, 0x91, 0xef, 0xb7,
0161 0xb0, 0xeb, 0xc2, 0x83, 0x9a, 0x6c, 0xd2, 0x79,
0162 0x43, 0x78, 0x5e, 0x2f, 0xe5, 0xdd, 0x1a, 0x3c,
0163 0x45, 0xab, 0x29, 0x40, 0x3a, 0x37, 0x5b, 0x6f,
0164 0xd7, 0xfc, 0x48, 0x64, 0x3c, 0x49, 0xfb, 0x21,
0165 0xbe, 0xc3, 0xff, 0x07, 0xfb, 0x17, 0xe9, 0xc9,
0166 0x0c, 0x4c, 0x5c, 0x15, 0x9e, 0x8e, 0x22, 0x30,
0167 0x0a, 0xde, 0x48, 0x7f, 0xdb, 0x0d, 0xd1, 0x2b,
0168 0x87, 0x38, 0x9e, 0xcc, 0x5a, 0x01, 0x16, 0xee,
0169 0x75, 0x49, 0x0d, 0x30, 0x01, 0x34, 0x6a, 0xb6,
0170 0x9a, 0x5a, 0x2a, 0xec, 0xbb, 0x48, 0xac, 0xd3,
0171 0x77, 0x83, 0xd8, 0x08, 0x86, 0x4f, 0x48, 0x09,
0172 0x29, 0x41, 0x79, 0xa1, 0x03, 0x12, 0xc4, 0xcd,
0173 0x90, 0x55, 0x47, 0x66, 0x74, 0x9a, 0xcc, 0x4f,
0174 0x35, 0x8c, 0xd6, 0x98, 0xef, 0xeb, 0x45, 0xb9,
0175 0x9a, 0x26, 0x2f, 0x39, 0xa5, 0x70, 0x6d, 0xfc,
0176 0xb4, 0x51, 0xee, 0xf4, 0x9c, 0xe7, 0x38, 0x59,
0177 0xad, 0xf4, 0xbc, 0x46, 0xff, 0x46, 0x8e, 0x60,
0178 0x9c, 0xa3, 0x60, 0x1d, 0xf8, 0x26, 0x72, 0xf5,
0179 0x72, 0x9d, 0x68, 0x80, 0x04, 0xf6, 0x0b, 0xa1,
0180 0x0a, 0xd5, 0xa7, 0x82, 0x3a, 0x3e, 0x47, 0xa8,
0181 0x5a, 0xde, 0x59, 0x4f, 0x7b, 0x07, 0xb3, 0xe9,
0182 0x24, 0x19, 0x3d, 0x34, 0x05, 0xec, 0xf1, 0xab,
0183 0x6e, 0x64, 0x8f, 0xd3, 0xe6, 0x41, 0x86, 0x80,
0184 0x70, 0xe3, 0x8d, 0x60, 0x9c, 0x34, 0x25, 0x01,
0185 0x07, 0x4d, 0x19, 0x41, 0x4e, 0x3d, 0x5c, 0x7e,
0186 0xa8, 0xf5, 0xcc, 0xd5, 0x7b, 0xe2, 0x7d, 0x3d,
0187 0x49, 0x86, 0x7d, 0x07, 0xb7, 0x10, 0xe3, 0x35,
0188 0xb8, 0x84, 0x6d, 0x76, 0xab, 0x17, 0xc6, 0x38,
0189 0xb4, 0xd3, 0x28, 0x57, 0xad, 0xd3, 0x88, 0x5a,
0190 0xda, 0xea, 0xc8, 0x94, 0xcc, 0x37, 0x19, 0xac,
0191 0x9c, 0x9f, 0x4b, 0x00, 0x15, 0xc0, 0xc8, 0xca,
0192 0x1f, 0x15, 0xaa, 0xe0, 0xdb, 0xf9, 0x2f, 0x57,
0193 0x1b, 0x24, 0xc7, 0x6f, 0x76, 0x29, 0xfb, 0xed,
0194 0x25, 0x0d, 0xc0, 0xfe, 0xbd, 0x5a, 0xbf, 0x20,
0195 0x08, 0x51, 0x05, 0xec, 0x71, 0xa3, 0xbf, 0xef,
0196 0x5e, 0x99, 0x75, 0xdb, 0x3c, 0x5f, 0x9a, 0x8c,
0197 0xbb, 0x19, 0x5c, 0x0e, 0x93, 0x19, 0xf8, 0x6a,
0198 0xbc, 0xf2, 0x12, 0x54, 0x2f, 0xcb, 0x28, 0x64,
0199 0x88, 0xb3, 0x92, 0x0d, 0x96, 0xd1, 0xa6, 0xe4,
0200 0x1f, 0xf1, 0x4d, 0xa4, 0xab, 0x1c, 0xee, 0x54,
0201 0xf2, 0xad, 0x29, 0x6d, 0x32, 0x37, 0xb2, 0x16,
0202 0x77, 0x5c, 0xdc, 0x2e, 0x54, 0xec, 0x75, 0x26,
0203 0xc6, 0x36, 0xd9, 0x17, 0x2c, 0xf1, 0x7a, 0xdc,
0204 0x4b, 0xf1, 0xe2, 0xd9, 0x95, 0xba, 0xac, 0x87,
0205 0xc1, 0xf3, 0x8e, 0x58, 0x08, 0xd8, 0x87, 0x60,
0206 0xc9, 0xee, 0x6a, 0xde, 0xa4, 0xd2, 0xfc, 0x0d,
0207 0xe5, 0x36, 0xc4, 0x5c, 0x52, 0xb3, 0x07, 0x54,
0208 0x65, 0x24, 0xc1, 0xb1, 0xd1, 0xb1, 0x53, 0x13,
0209 0x31, 0x79, 0x7f, 0x05, 0x76, 0xeb, 0x37, 0x59,
0210 0x15, 0x2b, 0xd1, 0x3f, 0xac, 0x08, 0x97, 0xeb,
0211 0x91, 0x98, 0xdf, 0x6c, 0x09, 0x0d, 0x04, 0x9f,
0212 0xdc, 0x3b, 0x0e, 0x60, 0x68, 0x47, 0x23, 0x15,
0213 0x16, 0xc6, 0x0b, 0x35, 0xf8, 0x77, 0xa2, 0x78,
0214 0x50, 0xd4, 0x64, 0x22, 0x33, 0xff, 0xfb, 0x93,
0215 0x71, 0x46, 0x50, 0x39, 0x1b, 0x9c, 0xea, 0x4e,
0216 0x8d, 0x0c, 0x37, 0xe5, 0x5c, 0x51, 0x3a, 0x31,
0217 0xb2, 0x85, 0x84, 0x3f, 0x41, 0xee, 0xa2, 0xc1,
0218 0xc6, 0x13, 0x3b, 0x54, 0x28, 0xd2, 0x18, 0x37,
0219 0xcc, 0x46, 0x9f, 0x6a, 0x91, 0x3d, 0x5a, 0x15,
0220 0x3c, 0x89, 0xa3, 0x61, 0x06, 0x7d, 0x2e, 0x78,
0221 0xbe, 0x7d, 0x40, 0xba, 0x2f, 0x95, 0xb1, 0x2f,
0222 0x87, 0x3b, 0x8a, 0xbe, 0x6a, 0xf4, 0xc2, 0x31,
0223 0x74, 0xee, 0x91, 0xe0, 0x23, 0xaa, 0x5d, 0x7f,
0224 0xdd, 0xf0, 0x44, 0x8c, 0x0b, 0x59, 0x2b, 0xfc,
0225 0x48, 0x3a, 0xdf, 0x07, 0x05, 0x38, 0x6c, 0xc9,
0226 0xeb, 0x18, 0x24, 0x68, 0x8d, 0x58, 0x98, 0xd3,
0227 0x31, 0xa3, 0xe4, 0x70, 0x59, 0xb1, 0x21, 0xbe,
0228 0x7e, 0x65, 0x7d, 0xb8, 0x04, 0xab, 0xf6, 0xe4,
0229 0xd7, 0xda, 0xec, 0x09, 0x8f, 0xda, 0x6d, 0x24,
0230 0x07, 0xcc, 0x29, 0x17, 0x05, 0x78, 0x1a, 0xc1,
0231 0xb1, 0xce, 0xfc, 0xaa, 0x2d, 0xe7, 0xcc, 0x85,
0232 0x84, 0x84, 0x03, 0x2a, 0x0c, 0x3f, 0xa9, 0xf8,
0233 0xfd, 0x84, 0x53, 0x59, 0x5c, 0xf0, 0xd4, 0x09,
0234 0xf0, 0xd2, 0x6c, 0x32, 0x03, 0xb0, 0xa0, 0x8c,
0235 0x52, 0xeb, 0x23, 0x91, 0x88, 0x43, 0x13, 0x46,
0236 0xf6, 0x1e, 0xb4, 0x1b, 0xf5, 0x8e, 0x3a, 0xb5,
0237 0x3d, 0x00, 0xf6, 0xe5, 0x08, 0x3d, 0x5f, 0x39,
0238 0xd3, 0x21, 0x69, 0xbc, 0x03, 0x22, 0x3a, 0xd2,
0239 0x5c, 0x84, 0xf8, 0x15, 0xc4, 0x80, 0x0b, 0xbc,
0240 0x29, 0x3c, 0xf3, 0x95, 0x98, 0xcd, 0x8f, 0x35,
0241 0xbc, 0xa5, 0x3e, 0xfc, 0xd4, 0x13, 0x9e, 0xde,
0242 0x4f, 0xce, 0x71, 0x9d, 0x09, 0xad, 0xf2, 0x80,
0243 0x6b, 0x65, 0x7f, 0x03, 0x00, 0x14, 0x7c, 0x15,
0244 0x85, 0x40, 0x6d, 0x70, 0xea, 0xdc, 0xb3, 0x63,
0245 0x35, 0x4f, 0x4d, 0xe0, 0xd9, 0xd5, 0x3c, 0x58,
0246 0x56, 0x23, 0x80, 0xe2, 0x36, 0xdd, 0x75, 0x1d,
0247 0x94, 0x11, 0x41, 0x8e, 0xe0, 0x81, 0x8e, 0xcf,
0248 0xe0, 0xe5, 0xf6, 0xde, 0xd1, 0xe7, 0x04, 0x12,
0249 0x79, 0x92, 0x2b, 0x71, 0x2a, 0x79, 0x8b, 0x7c,
0250 0x44, 0x79, 0x16, 0x30, 0x4e, 0xf4, 0xf6, 0x9b,
0251 0xb7, 0x40, 0xa3, 0x5a, 0xa7, 0x69, 0x3e, 0xc1,
0252 0x3a, 0x04, 0xd0, 0x88, 0xa0, 0x3b, 0xdd, 0xc6,
0253 0x9e, 0x7e, 0x1e, 0x1e, 0x8f, 0x44, 0xf7, 0x73,
0254 0x67, 0x1e, 0x1a, 0x78, 0xfa, 0x62, 0xf4, 0xa9,
0255 0xa8, 0xc6, 0x5b, 0xb8, 0xfa, 0x06, 0x7d, 0x5e,
0256 0x38, 0x1c, 0x9a, 0x39, 0xe9, 0x39, 0x98, 0x22,
0257 0x0b, 0xa7, 0xac, 0x0b, 0xf3, 0xbc, 0xf1, 0xeb,
0258 0x8c, 0x81, 0xe3, 0x48, 0x8a, 0xed, 0x42, 0xc2,
0259 0x38, 0xcf, 0x3e, 0xda, 0xd2, 0x89, 0x8d, 0x9c,
0260 0x53, 0xb5, 0x2f, 0x41, 0x01, 0x26, 0x84, 0x9c,
0261 0xa3, 0x56, 0xf6, 0x49, 0xc7, 0xd4, 0x9f, 0x93,
0262 0x1b, 0x96, 0x49, 0x5e, 0xad, 0xb3, 0x84, 0x1f,
0263 0x3c, 0xa4, 0xe0, 0x9b, 0xd1, 0x90, 0xbc, 0x38,
0264 0x6c, 0xdd, 0x95, 0x4d, 0x9d, 0xb1, 0x71, 0x57,
0265 0x2d, 0x34, 0xe8, 0xb8, 0x42, 0xc7, 0x99, 0x03,
0266 0xc7, 0x07, 0x30, 0x65, 0x91, 0x55, 0xd5, 0x90,
0267 0x70, 0x97, 0x37, 0x68, 0xd4, 0x11, 0xf9, 0xe8,
0268 0xce, 0xec, 0xdc, 0x34, 0xd5, 0xd3, 0xb7, 0xc4,
0269 0xb8, 0x97, 0x05, 0x92, 0xad, 0xf8, 0xe2, 0x36,
0270 0x64, 0x41, 0xc9, 0xc5, 0x41, 0x77, 0x52, 0xd7,
0271 0x2c, 0xa5, 0x24, 0x2f, 0xd9, 0x34, 0x0b, 0x47,
0272 0x35, 0xa7, 0x28, 0x8b, 0xc5, 0xcd, 0xe9, 0x46,
0273 0xac, 0x39, 0x94, 0x3c, 0x10, 0xc6, 0x29, 0x73,
0274 0x0e, 0x0e, 0x5d, 0xe0, 0x71, 0x03, 0x8a, 0x72,
0275 0x0e, 0x26, 0xb0, 0x7d, 0x84, 0xed, 0x95, 0x23,
0276 0x49, 0x5a, 0x45, 0x83, 0x45, 0x60, 0x11, 0x4a,
0277 0x46, 0x31, 0xd4, 0xd8, 0x16, 0x54, 0x98, 0x58,
0278 0xed, 0x6d, 0xcc, 0x5d, 0xd6, 0x50, 0x61, 0x9f,
0279 0x9d, 0xc5, 0x3e, 0x9d, 0x32, 0x47, 0xde, 0x96,
0280 0xe1, 0x5d, 0xd8, 0xf8, 0xb4, 0x69, 0x6f, 0xb9,
0281 0x15, 0x90, 0x57, 0x7a, 0xf6, 0xad, 0xb0, 0x5b,
0282 0xf5, 0xa6, 0x36, 0x94, 0xfd, 0x84, 0xce, 0x1c,
0283 0x0f, 0x4b, 0xd0, 0xc2, 0x5b, 0x6b, 0x56, 0xef,
0284 0x73, 0x93, 0x0b, 0xc3, 0xee, 0xd9, 0xcf, 0xd3,
0285 0xa4, 0x22, 0x58, 0xcd, 0x50, 0x6e, 0x65, 0xf4,
0286 0xe9, 0xb7, 0x71, 0xaf, 0x4b, 0xb3, 0xb6, 0x2f,
0287 0x0f, 0x0e, 0x3b, 0xc9, 0x85, 0x14, 0xf5, 0x17,
0288 0xe8, 0x7a, 0x3a, 0xbf, 0x5f, 0x5e, 0xf8, 0x18,
0289 0x48, 0xa6, 0x72, 0xab, 0x06, 0x95, 0xe9, 0xc8,
0290 0xa7, 0xf4, 0x32, 0x44, 0x04, 0x0c, 0x84, 0x98,
0291 0x73, 0xe3, 0x89, 0x8d, 0x5f, 0x7e, 0x4a, 0x42,
0292 0x8f, 0xc5, 0x28, 0xb1, 0x82, 0xef, 0x1c, 0x97,
0293 0x31, 0x3b, 0x4d, 0xe0, 0x0e, 0x10, 0x10, 0x97,
0294 0x93, 0x49, 0x78, 0x2f, 0x0d, 0x86, 0x8b, 0xa1,
0295 0x53, 0xa9, 0x81, 0x20, 0x79, 0xe7, 0x07, 0x77,
0296 0xb6, 0xac, 0x5e, 0xd2, 0x05, 0xcd, 0xe9, 0xdb,
0297 0x8a, 0x94, 0x82, 0x8a, 0x23, 0xb9, 0x3d, 0x1c,
0298 0xa9, 0x7d, 0x72, 0x4a, 0xed, 0x33, 0xa3, 0xdb,
0299 0x21, 0xa7, 0x86, 0x33, 0x45, 0xa5, 0xaa, 0x56,
0300 0x45, 0xb5, 0x83, 0x29, 0x40, 0x47, 0x79, 0x04,
0301 0x6e, 0xb9, 0x95, 0xd0, 0x81, 0x77, 0x2d, 0x48,
0302 0x1e, 0xfe, 0xc3, 0xc2, 0x1e, 0xe5, 0xf2, 0xbe,
0303 0xfd, 0x3b, 0x94, 0x9f, 0xc4, 0xc4, 0x26, 0x9d,
0304 0xe4, 0x66, 0x1e, 0x19, 0xee, 0x6c, 0x79, 0x97,
0305 0x11, 0x31, 0x4b, 0x0d, 0x01, 0xcb, 0xde, 0xa8,
0306 0xf6, 0x6d, 0x7c, 0x39, 0x46, 0x4e, 0x7e, 0x3f,
0307 0x94, 0x17, 0xdf, 0xa1, 0x7d, 0xd9, 0x1c, 0x8e,
0308 0xbc, 0x7d, 0x33, 0x7d, 0xe3, 0x12, 0x40, 0xca,
0309 0xab, 0x37, 0x11, 0x46, 0xd4, 0xae, 0xef, 0x44,
0310 0xa2, 0xb3, 0x6a, 0x66, 0x0e, 0x0c, 0x90, 0x7f,
0311 0xdf, 0x5c, 0x66, 0x5f, 0xf2, 0x94, 0x9f, 0xa6,
0312 0x73, 0x4f, 0xeb, 0x0d, 0xad, 0xbf, 0xc0, 0x63,
0313 0x5c, 0xdc, 0x46, 0x51, 0xe8, 0x8e, 0x90, 0x19,
0314 0xa8, 0xa4, 0x3c, 0x91, 0x79, 0xfa, 0x7e, 0x58,
0315 0x85, 0x13, 0x55, 0xc5, 0x19, 0x82, 0x37, 0x1b,
0316 0x0a, 0x02, 0x1f, 0x99, 0x6b, 0x18, 0xf1, 0x28,
0317 0x08, 0xa2, 0x73, 0xb8, 0x0f, 0x2e, 0xcd, 0xbf,
0318 0xf3, 0x86, 0x7f, 0xea, 0xef, 0xd0, 0xbb, 0xa6,
0319 0x21, 0xdf, 0x49, 0x73, 0x51, 0xcc, 0x36, 0xd3,
0320 0x3e, 0xa0, 0xf8, 0x44, 0xdf, 0xd3, 0xa6, 0xbe,
0321 0x8a, 0xd4, 0x57, 0xdd, 0x72, 0x94, 0x61, 0x0f,
0322 0x82, 0xd1, 0x07, 0xb8, 0x7c, 0x18, 0x83, 0xdf,
0323 0x3a, 0xe5, 0x50, 0x6a, 0x82, 0x20, 0xac, 0xa9,
0324 0xa8, 0xff, 0xd9, 0xf3, 0x77, 0x33, 0x5a, 0x9e,
0325 0x7f, 0x6d, 0xfe, 0x5d, 0x33, 0x41, 0x42, 0xe7,
0326 0x6c, 0x19, 0xe0, 0x44, 0x8a, 0x15, 0xf6, 0x70,
0327 0x98, 0xb7, 0x68, 0x4d, 0xfa, 0x97, 0x39, 0xb0,
0328 0x8e, 0xe8, 0x84, 0x8b, 0x75, 0x30, 0xb7, 0x7d,
0329 0x92, 0x69, 0x20, 0x9c, 0x81, 0xfb, 0x4b, 0xf4,
0330 0x01, 0x50, 0xeb, 0xce, 0x0c, 0x1c, 0x6c, 0xb5,
0331 0x4a, 0xd7, 0x27, 0x0c, 0xce, 0xbb, 0xe5, 0x85,
0332 0xf0, 0xb6, 0xee, 0xd5, 0x70, 0xdd, 0x3b, 0xfc,
0333 0xd4, 0x99, 0xf1, 0x33, 0xdd, 0x8b, 0xc4, 0x2f,
0334 0xae, 0xab, 0x74, 0x96, 0x32, 0xc7, 0x4c, 0x56,
0335 0x3c, 0x89, 0x0f, 0x96, 0x0b, 0x42, 0xc0, 0xcb,
0336 0xee, 0x0f, 0x0b, 0x8c, 0xfb, 0x7e, 0x47, 0x7b,
0337 0x64, 0x48, 0xfd, 0xb2, 0x00, 0x80, 0x89, 0xa5,
0338 0x13, 0x55, 0x62, 0xfc, 0x8f, 0xe2, 0x42, 0x03,
0339 0xb7, 0x4e, 0x2a, 0x79, 0xb4, 0x82, 0xea, 0x23,
0340 0x49, 0xda, 0xaf, 0x52, 0x63, 0x1e, 0x60, 0x03,
0341 0x89, 0x06, 0x44, 0x46, 0x08, 0xc3, 0xc4, 0x87,
0342 0x70, 0x2e, 0xda, 0x94, 0xad, 0x6b, 0xe0, 0xe4,
0343 0xd1, 0x8a, 0x06, 0xc2, 0xa8, 0xc0, 0xa7, 0x43,
0344 0x3c, 0x47, 0x52, 0x0e, 0xc3, 0x77, 0x81, 0x11,
0345 0x67, 0x0e, 0xa0, 0x70, 0x04, 0x47, 0x29, 0x40,
0346 0x86, 0x0d, 0x34, 0x56, 0xa7, 0xc9, 0x35, 0x59,
0347 0x68, 0xdc, 0x93, 0x81, 0x70, 0xee, 0x86, 0xd9,
0348 0x80, 0x06, 0x40, 0x4f, 0x1a, 0x0d, 0x40, 0x30,
0349 0x0b, 0xcb, 0x96, 0x47, 0xc1, 0xb7, 0x52, 0xfd,
0350 0x56, 0xe0, 0x72, 0x4b, 0xfb, 0xbd, 0x92, 0x45,
0351 0x61, 0x71, 0xc2, 0x33, 0x11, 0xbf, 0x52, 0x83,
0352 0x79, 0x26, 0xe0, 0x49, 0x6b, 0xb7, 0x05, 0x8b,
0353 0xe8, 0x0e, 0x87, 0x31, 0xd7, 0x9d, 0x8a, 0xf5,
0354 0xc0, 0x5f, 0x2e, 0x58, 0x4a, 0xdb, 0x11, 0xb3,
0355 0x6c, 0x30, 0x2a, 0x46, 0x19, 0xe3, 0x27, 0x84,
0356 0x1f, 0x63, 0x6e, 0xf6, 0x57, 0xc7, 0xc9, 0xd8,
0357 0x5e, 0xba, 0xb3, 0x87, 0xd5, 0x83, 0x26, 0x34,
0358 0x21, 0x9e, 0x65, 0xde, 0x42, 0xd3, 0xbe, 0x7b,
0359 0xbc, 0x91, 0x71, 0x44, 0x4d, 0x99, 0x3b, 0x31,
0360 0xe5, 0x3f, 0x11, 0x4e, 0x7f, 0x13, 0x51, 0x3b,
0361 0xae, 0x79, 0xc9, 0xd3, 0x81, 0x8e, 0x25, 0x40,
0362 0x10, 0xfc, 0x07, 0x1e, 0xf9, 0x7b, 0x9a, 0x4b,
0363 0x6c, 0xe3, 0xb3, 0xad, 0x1a, 0x0a, 0xdd, 0x9e,
0364 0x59, 0x0c, 0xa2, 0xcd, 0xae, 0x48, 0x4a, 0x38,
0365 0x5b, 0x47, 0x41, 0x94, 0x65, 0x6b, 0xbb, 0xeb,
0366 0x5b, 0xe3, 0xaf, 0x07, 0x5b, 0xd4, 0x4a, 0xa2,
0367 0xc9, 0x5d, 0x2f, 0x64, 0x03, 0xd7, 0x3a, 0x2c,
0368 0x6e, 0xce, 0x76, 0x95, 0xb4, 0xb3, 0xc0, 0xf1,
0369 0xe2, 0x45, 0x73, 0x7a, 0x5c, 0xab, 0xc1, 0xfc,
0370 0x02, 0x8d, 0x81, 0x29, 0xb3, 0xac, 0x07, 0xec,
0371 0x40, 0x7d, 0x45, 0xd9, 0x7a, 0x59, 0xee, 0x34,
0372 0xf0, 0xe9, 0xd5, 0x7b, 0x96, 0xb1, 0x3d, 0x95,
0373 0xcc, 0x86, 0xb5, 0xb6, 0x04, 0x2d, 0xb5, 0x92,
0374 0x7e, 0x76, 0xf4, 0x06, 0xa9, 0xa3, 0x12, 0x0f,
0375 0xb1, 0xaf, 0x26, 0xba, 0x7c, 0xfc, 0x7e, 0x1c,
0376 0xbc, 0x2c, 0x49, 0x97, 0x53, 0x60, 0x13, 0x0b,
0377 0xa6, 0x61, 0x83, 0x89, 0x42, 0xd4, 0x17, 0x0c,
0378 0x6c, 0x26, 0x52, 0xc3, 0xb3, 0xd4, 0x67, 0xf5,
0379 0xe3, 0x04, 0xb7, 0xf4, 0xcb, 0x80, 0xb8, 0xcb,
0380 0x77, 0x56, 0x3e, 0xaa, 0x57, 0x54, 0xee, 0xb4,
0381 0x2c, 0x67, 0xcf, 0xf2, 0xdc, 0xbe, 0x55, 0xf9,
0382 0x43, 0x1f, 0x6e, 0x22, 0x97, 0x67, 0x7f, 0xc4,
0383 0xef, 0xb1, 0x26, 0x31, 0x1e, 0x27, 0xdf, 0x41,
0384 0x80, 0x47, 0x6c, 0xe2, 0xfa, 0xa9, 0x8c, 0x2a,
0385 0xf6, 0xf2, 0xab, 0xf0, 0x15, 0xda, 0x6c, 0xc8,
0386 0xfe, 0xb5, 0x23, 0xde, 0xa9, 0x05, 0x3f, 0x06,
0387 0x54, 0x4c, 0xcd, 0xe1, 0xab, 0xfc, 0x0e, 0x62,
0388 0x33, 0x31, 0x73, 0x2c, 0x76, 0xcb, 0xb4, 0x47,
0389 0x1e, 0x20, 0xad, 0xd8, 0xf2, 0x31, 0xdd, 0xc4,
0390 0x8b, 0x0c, 0x77, 0xbe, 0xe1, 0x8b, 0x26, 0x00,
0391 0x02, 0x58, 0xd6, 0x8d, 0xef, 0xad, 0x74, 0x67,
0392 0xab, 0x3f, 0xef, 0xcb, 0x6f, 0xb0, 0xcc, 0x81,
0393 0x44, 0x4c, 0xaf, 0xe9, 0x49, 0x4f, 0xdb, 0xa0,
0394 0x25, 0xa4, 0xf0, 0x89, 0xf1, 0xbe, 0xd8, 0x10,
0395 0xff, 0xb1, 0x3b, 0x4b, 0xfa, 0x98, 0xf5, 0x79,
0396 0x6d, 0x1e, 0x69, 0x4d, 0x57, 0xb1, 0xc8, 0x19,
0397 0x1b, 0xbd, 0x1e, 0x8c, 0x84, 0xb7, 0x7b, 0xe8,
0398 0xd2, 0x2d, 0x09, 0x41, 0x41, 0x37, 0x3d, 0xb1,
0399 0x6f, 0x26, 0x5d, 0x71, 0x16, 0x3d, 0xb7, 0x83,
0400 0x27, 0x2c, 0xa7, 0xb6, 0x50, 0xbd, 0x91, 0x86,
0401 0xab, 0x24, 0xa1, 0x38, 0xfd, 0xea, 0x71, 0x55,
0402 0x7e, 0x9a, 0x07, 0x77, 0x4b, 0xfa, 0x61, 0x66,
0403 0x20, 0x1e, 0x28, 0x95, 0x18, 0x1b, 0xa4, 0xa0,
0404 0xfd, 0xc0, 0x89, 0x72, 0x43, 0xd9, 0x3b, 0x49,
0405 0x5a, 0x3f, 0x9d, 0xbf, 0xdb, 0xb4, 0x46, 0xea,
0406 0x42, 0x01, 0x77, 0x23, 0x68, 0x95, 0xb6, 0x24,
0407 0xb3, 0xa8, 0x6c, 0x28, 0x3b, 0x11, 0x40, 0x7e,
0408 0x18, 0x65, 0x6d, 0xd8, 0x24, 0x42, 0x7d, 0x88,
0409 0xc0, 0x52, 0xd9, 0x05, 0xe4, 0x95, 0x90, 0x87,
0410 0x8c, 0xf4, 0xd0, 0x6b, 0xb9, 0x83, 0x99, 0x34,
0411 0x6d, 0xfe, 0x54, 0x40, 0x94, 0x52, 0x21, 0x4f,
0412 0x14, 0x25, 0xc5, 0xd6, 0x5e, 0x95, 0xdc, 0x0a,
0413 0x2b, 0x89, 0x20, 0x11, 0x84, 0x48, 0xd6, 0x3a,
0414 0xcd, 0x5c, 0x24, 0xad, 0x62, 0xe3, 0xb1, 0x93,
0415 0x25, 0x8d, 0xcd, 0x7e, 0xfc, 0x27, 0xa3, 0x37,
0416 0xfd, 0x84, 0xfc, 0x1b, 0xb2, 0xf1, 0x27, 0x38,
0417 0x5a, 0xb7, 0xfc, 0xf2, 0xfa, 0x95, 0x66, 0xd4,
0418 0xfb, 0xba, 0xa7, 0xd7, 0xa3, 0x72, 0x69, 0x48,
0419 0x48, 0x8c, 0xeb, 0x28, 0x89, 0xfe, 0x33, 0x65,
0420 0x5a, 0x36, 0x01, 0x7e, 0x06, 0x79, 0x0a, 0x09,
0421 0x3b, 0x74, 0x11, 0x9a, 0x6e, 0xbf, 0xd4, 0x9e,
0422 0x58, 0x90, 0x49, 0x4f, 0x4d, 0x08, 0xd4, 0xe5,
0423 0x4a, 0x09, 0x21, 0xef, 0x8b, 0xb8, 0x74, 0x3b,
0424 0x91, 0xdd, 0x36, 0x85, 0x60, 0x2d, 0xfa, 0xd4,
0425 0x45, 0x7b, 0x45, 0x53, 0xf5, 0x47, 0x87, 0x7e,
0426 0xa6, 0x37, 0xc8, 0x78, 0x7a, 0x68, 0x9d, 0x8d,
0427 0x65, 0x2c, 0x0e, 0x91, 0x5c, 0xa2, 0x60, 0xf0,
0428 0x8e, 0x3f, 0xe9, 0x1a, 0xcd, 0xaa, 0xe7, 0xd5,
0429 0x77, 0x18, 0xaf, 0xc9, 0xbc, 0x18, 0xea, 0x48,
0430 0x1b, 0xfb, 0x22, 0x48, 0x70, 0x16, 0x29, 0x9e,
0431 0x5b, 0xc1, 0x2c, 0x66, 0x23, 0xbc, 0xf0, 0x1f,
0432 0xef, 0xaf, 0xe4, 0xd6, 0x04, 0x19, 0x82, 0x7a,
0433 0x0b, 0xba, 0x4b, 0x46, 0xb1, 0x6a, 0x85, 0x5d,
0434 0xb4, 0x73, 0xd6, 0x21, 0xa1, 0x71, 0x60, 0x14,
0435 0xee, 0x0a, 0x77, 0xc4, 0x66, 0x2e, 0xf9, 0x69,
0436 0x30, 0xaf, 0x41, 0x0b, 0xc8, 0x83, 0x3c, 0x53,
0437 0x99, 0x19, 0x27, 0x46, 0xf7, 0x41, 0x6e, 0x56,
0438 0xdc, 0x94, 0x28, 0x67, 0x4e, 0xb7, 0x25, 0x48,
0439 0x8a, 0xc2, 0xe0, 0x60, 0x96, 0xcc, 0x18, 0xf4,
0440 0x84, 0xdd, 0xa7, 0x5e, 0x3e, 0x05, 0x0b, 0x26,
0441 0x26, 0xb2, 0x5c, 0x1f, 0x57, 0x1a, 0x04, 0x7e,
0442 0x6a, 0xe3, 0x2f, 0xb4, 0x35, 0xb6, 0x38, 0x40,
0443 0x40, 0xcd, 0x6f, 0x87, 0x2e, 0xef, 0xa3, 0xd7,
0444 0xa9, 0xc2, 0xe8, 0x0d, 0x27, 0xdf, 0x44, 0x62,
0445 0x99, 0xa0, 0xfc, 0xcf, 0x81, 0x78, 0xcb, 0xfe,
0446 0xe5, 0xa0, 0x03, 0x4e, 0x6c, 0xd7, 0xf4, 0xaf,
0447 0x7a, 0xbb, 0x61, 0x82, 0xfe, 0x71, 0x89, 0xb2,
0448 0x22, 0x7c, 0x8e, 0x83, 0x04, 0xce, 0xf6, 0x5d,
0449 0x84, 0x8f, 0x95, 0x6a, 0x7f, 0xad, 0xfd, 0x32,
0450 0x9c, 0x5e, 0xe4, 0x9c, 0x89, 0x60, 0x54, 0xaa,
0451 0x96, 0x72, 0xd2, 0xd7, 0x36, 0x85, 0xa9, 0x45,
0452 0xd2, 0x2a, 0xa1, 0x81, 0x49, 0x6f, 0x7e, 0x04,
0453 0xfa, 0xe2, 0xfe, 0x90, 0x26, 0x77, 0x5a, 0x33,
0454 0xb8, 0x04, 0x9a, 0x7a, 0xe6, 0x4c, 0x4f, 0xad,
0455 0x72, 0x96, 0x08, 0x28, 0x58, 0x13, 0xf8, 0xc4,
0456 0x1c, 0xf0, 0xc3, 0x45, 0x95, 0x49, 0x20, 0x8c,
0457 0x9f, 0x39, 0x70, 0xe1, 0x77, 0xfe, 0xd5, 0x4b,
0458 0xaf, 0x86, 0xda, 0xef, 0x22, 0x06, 0x83, 0x36,
0459 0x29, 0x12, 0x11, 0x40, 0xbc, 0x3b, 0x86, 0xaa,
0460 0xaa, 0x65, 0x60, 0xc3, 0x80, 0xca, 0xed, 0xa9,
0461 0xf3, 0xb0, 0x79, 0x96, 0xa2, 0x55, 0x27, 0x28,
0462 0x55, 0x73, 0x26, 0xa5, 0x50, 0xea, 0x92, 0x4b,
0463 0x3c, 0x5c, 0x82, 0x33, 0xf0, 0x01, 0x3f, 0x03,
0464 0xc1, 0x08, 0x05, 0xbf, 0x98, 0xf4, 0x9b, 0x6d,
0465 0xa5, 0xa8, 0xb4, 0x82, 0x0c, 0x06, 0xfa, 0xff,
0466 0x2d, 0x08, 0xf3, 0x05, 0x4f, 0x57, 0x2a, 0x39,
0467 0xd4, 0x83, 0x0d, 0x75, 0x51, 0xd8, 0x5b, 0x1b,
0468 0xd3, 0x51, 0x5a, 0x32, 0x2a, 0x9b, 0x32, 0xb2,
0469 0xf2, 0xa4, 0x96, 0x12, 0xf2, 0xae, 0x40, 0x34,
0470 0x67, 0xa8, 0xf5, 0x44, 0xd5, 0x35, 0x53, 0xfe,
0471 0xa3, 0x60, 0x96, 0x63, 0x0f, 0x1f, 0x6e, 0xb0,
0472 0x5a, 0x42, 0xa6, 0xfc, 0x51, 0x0b, 0x60, 0x27,
0473 0xbc, 0x06, 0x71, 0xed, 0x65, 0x5b, 0x23, 0x86,
0474 0x4a, 0x07, 0x3b, 0x22, 0x07, 0x46, 0xe6, 0x90,
0475 0x3e, 0xf3, 0x25, 0x50, 0x1b, 0x4c, 0x7f, 0x03,
0476 0x08, 0xa8, 0x36, 0x6b, 0x87, 0xe5, 0xe3, 0xdb,
0477 0x9a, 0x38, 0x83, 0xff, 0x9f, 0x1a, 0x9f, 0x57,
0478 0xa4, 0x2a, 0xf6, 0x37, 0xbc, 0x1a, 0xff, 0xc9,
0479 0x1e, 0x35, 0x0c, 0xc3, 0x7c, 0xa3, 0xb2, 0xe5,
0480 0xd2, 0xc6, 0xb4, 0x57, 0x47, 0xe4, 0x32, 0x16,
0481 0x6d, 0xa9, 0xae, 0x64, 0xe6, 0x2d, 0x8d, 0xc5,
0482 0x8d, 0x50, 0x8e, 0xe8, 0x1a, 0x22, 0x34, 0x2a,
0483 0xd9, 0xeb, 0x51, 0x90, 0x4a, 0xb1, 0x41, 0x7d,
0484 0x64, 0xf9, 0xb9, 0x0d, 0xf6, 0x23, 0x33, 0xb0,
0485 0x33, 0xf4, 0xf7, 0x3f, 0x27, 0x84, 0xc6, 0x0f,
0486 0x54, 0xa5, 0xc0, 0x2e, 0xec, 0x0b, 0x3a, 0x48,
0487 0x6e, 0x80, 0x35, 0x81, 0x43, 0x9b, 0x90, 0xb1,
0488 0xd0, 0x2b, 0xea, 0x21, 0xdc, 0xda, 0x5b, 0x09,
0489 0xf4, 0xcc, 0x10, 0xb4, 0xc7, 0xfe, 0x79, 0x51,
0490 0xc3, 0xc5, 0xac, 0x88, 0x74, 0x84, 0x0b, 0x4b,
0491 0xca, 0x79, 0x16, 0x29, 0xfb, 0x69, 0x54, 0xdf,
0492 0x41, 0x7e, 0xe9, 0xc7, 0x8e, 0xea, 0xa5, 0xfe,
0493 0xfc, 0x76, 0x0e, 0x90, 0xc4, 0x92, 0x38, 0xad,
0494 0x7b, 0x48, 0xe6, 0x6e, 0xf7, 0x21, 0xfd, 0x4e,
0495 0x93, 0x0a, 0x7b, 0x41, 0x83, 0x68, 0xfb, 0x57,
0496 0x51, 0x76, 0x34, 0xa9, 0x6c, 0x00, 0xaa, 0x4f,
0497 0x66, 0x65, 0x98, 0x4a, 0x4f, 0xa3, 0xa0, 0xef,
0498 0x69, 0x3f, 0xe3, 0x1c, 0x92, 0x8c, 0xfd, 0xd8,
0499 0xe8, 0xde, 0x7c, 0x7f, 0x3e, 0x84, 0x8e, 0x69,
0500 0x3c, 0xf1, 0xf2, 0x05, 0x46, 0xdc, 0x2f, 0x9d,
0501 0x5e, 0x6e, 0x4c, 0xfb, 0xb5, 0x99, 0x2a, 0x59,
0502 0x63, 0xc1, 0x34, 0xbc, 0x57, 0xc0, 0x0d, 0xb9,
0503 0x61, 0x25, 0xf3, 0x33, 0x23, 0x51, 0xb6, 0x0d,
0504 0x07, 0xa6, 0xab, 0x94, 0x4a, 0xb7, 0x2a, 0xea,
0505 0xee, 0xac, 0xa3, 0xc3, 0x04, 0x8b, 0x0e, 0x56,
0506 0xfe, 0x44, 0xa7, 0x39, 0xe2, 0xed, 0xed, 0xb4,
0507 0x22, 0x2b, 0xac, 0x12, 0x32, 0x28, 0x91, 0xd8,
0508 0xa5, 0xab, 0xff, 0x5f, 0xe0, 0x4b, 0xda, 0x78,
0509 0x17, 0xda, 0xf1, 0x01, 0x5b, 0xcd, 0xe2, 0x5f,
0510 0x50, 0x45, 0x73, 0x2b, 0xe4, 0x76, 0x77, 0xf4,
0511 0x64, 0x1d, 0x43, 0xfb, 0x84, 0x7a, 0xea, 0x91,
0512 0xae, 0xf9, 0x9e, 0xb7, 0xb4, 0xb0, 0x91, 0x5f,
0513 0x16, 0x35, 0x9a, 0x11, 0xb8, 0xc7, 0xc1, 0x8c,
0514 0xc6, 0x10, 0x8d, 0x2f, 0x63, 0x4a, 0xa7, 0x57,
0515 0x3a, 0x51, 0xd6, 0x32, 0x2d, 0x64, 0x72, 0xd4,
0516 0x66, 0xdc, 0x10, 0xa6, 0x67, 0xd6, 0x04, 0x23,
0517 0x9d, 0x0a, 0x11, 0x77, 0xdd, 0x37, 0x94, 0x17,
0518 0x3c, 0xbf, 0x8b, 0x65, 0xb0, 0x2e, 0x5e, 0x66,
0519 0x47, 0x64, 0xac, 0xdd, 0xf0, 0x84, 0xfd, 0x39,
0520 0xfa, 0x15, 0x5d, 0xef, 0xae, 0xca, 0xc1, 0x36,
0521 0xa7, 0x5c, 0xbf, 0xc7, 0x08, 0xc2, 0x66, 0x00,
0522 0x74, 0x74, 0x4e, 0x27, 0x3f, 0x55, 0x8a, 0xb7,
0523 0x38, 0x66, 0x83, 0x6d, 0xcf, 0x99, 0x9e, 0x60,
0524 0x8f, 0xdd, 0x2e, 0x62, 0x22, 0x0e, 0xef, 0x0c,
0525 0x98, 0xa7, 0x85, 0x74, 0x3b, 0x9d, 0xec, 0x9e,
0526 0xa9, 0x19, 0x72, 0xa5, 0x7f, 0x2c, 0x39, 0xb7,
0527 0x7d, 0xb7, 0xf1, 0x12, 0x65, 0x27, 0x4b, 0x5a,
0528 0xde, 0x17, 0xfe, 0xad, 0x44, 0xf3, 0x20, 0x4d,
0529 0xfd, 0xe4, 0x1f, 0xb5, 0x81, 0xb0, 0x36, 0x37,
0530 0x08, 0x6f, 0xc3, 0x0c, 0xe9, 0x85, 0x98, 0x82,
0531 0xa9, 0x62, 0x0c, 0xc4, 0x97, 0xc0, 0x50, 0xc8,
0532 0xa7, 0x3c, 0x50, 0x9f, 0x43, 0xb9, 0xcd, 0x5e,
0533 0x4d, 0xfa, 0x1c, 0x4b, 0x0b, 0xa9, 0x98, 0x85,
0534 0x38, 0x92, 0xac, 0x8d, 0xe4, 0xad, 0x9b, 0x98,
0535 0xab, 0xd9, 0x38, 0xac, 0x62, 0x52, 0xa3, 0x22,
0536 0x63, 0x0f, 0xbf, 0x95, 0x48, 0xdf, 0x69, 0xe7,
0537 0x8b, 0x33, 0xd5, 0xb2, 0xbd, 0x05, 0x49, 0x49,
0538 0x9d, 0x57, 0x73, 0x19, 0x33, 0xae, 0xfa, 0x33,
0539 0xf1, 0x19, 0xa8, 0x80, 0xce, 0x04, 0x9f, 0xbc,
0540 0x1d, 0x65, 0x82, 0x1b, 0xe5, 0x3a, 0x51, 0xc8,
0541 0x1c, 0x21, 0xe3, 0x5d, 0xf3, 0x7d, 0x9b, 0x2f,
0542 0x2c, 0x1d, 0x4a, 0x7f, 0x9b, 0x68, 0x35, 0xa3,
0543 0xb2, 0x50, 0xf7, 0x62, 0x79, 0xcd, 0xf4, 0x98,
0544 0x4f, 0xe5, 0x63, 0x7c, 0x3e, 0x45, 0x31, 0x8c,
0545 0x16, 0xa0, 0x12, 0xc8, 0x58, 0xce, 0x39, 0xa6,
0546 0xbc, 0x54, 0xdb, 0xc5, 0xe0, 0xd5, 0xba, 0xbc,
0547 0xb9, 0x04, 0xf4, 0x8d, 0xe8, 0x2f, 0x15, 0x9d,
0548 };
0549
0550
0551 static struct crc_test {
0552 u32 crc;
0553 u32 start;
0554 u32 length;
0555 u32 crc_le;
0556 u32 crc_be;
0557 u32 crc32c_le;
0558 } const test[] __initconst =
0559 {
0560 {0x674bf11d, 0x00000038, 0x00000542, 0x0af6d466, 0xd8b6e4c1, 0xf6e93d6c},
0561 {0x35c672c6, 0x0000003a, 0x000001aa, 0xc6d3dfba, 0x28aaf3ad, 0x0fe92aca},
0562 {0x496da28e, 0x00000039, 0x000005af, 0xd933660f, 0x5d57e81f, 0x52e1ebb8},
0563 {0x09a9b90e, 0x00000027, 0x000001f8, 0xb45fe007, 0xf45fca9a, 0x0798af9a},
0564 {0xdc97e5a9, 0x00000025, 0x000003b6, 0xf81a3562, 0xe0126ba2, 0x18eb3152},
0565 {0x47c58900, 0x0000000a, 0x000000b9, 0x8e58eccf, 0xf3afc793, 0xd00d08c7},
0566 {0x292561e8, 0x0000000c, 0x00000403, 0xa2ba8aaf, 0x0b797aed, 0x8ba966bc},
0567 {0x415037f6, 0x00000003, 0x00000676, 0xa17d52e8, 0x7f0fdf35, 0x11d694a2},
0568 {0x3466e707, 0x00000026, 0x00000042, 0x258319be, 0x75c484a2, 0x6ab3208d},
0569 {0xafd1281b, 0x00000023, 0x000002ee, 0x4428eaf8, 0x06c7ad10, 0xba4603c5},
0570 {0xd3857b18, 0x00000028, 0x000004a2, 0x5c430821, 0xb062b7cb, 0xe6071c6f},
0571 {0x1d825a8f, 0x0000002b, 0x0000050b, 0xd2c45f0c, 0xd68634e0, 0x179ec30a},
0572 {0x5033e3bc, 0x0000000b, 0x00000078, 0xa3ea4113, 0xac6d31fb, 0x0903beb8},
0573 {0x94f1fb5e, 0x0000000f, 0x000003a2, 0xfbfc50b1, 0x3cfe50ed, 0x6a7cb4fa},
0574 {0xc9a0fe14, 0x00000009, 0x00000473, 0x5fb61894, 0x87070591, 0xdb535801},
0575 {0x88a034b1, 0x0000001c, 0x000005ad, 0xc1b16053, 0x46f95c67, 0x92bed597},
0576 {0xf0f72239, 0x00000020, 0x0000026d, 0xa6fa58f3, 0xf8c2c1dd, 0x192a3f1b},
0577 {0xcc20a5e3, 0x0000003b, 0x0000067a, 0x7740185a, 0x308b979a, 0xccbaec1a},
0578 {0xce589c95, 0x0000002b, 0x00000641, 0xd055e987, 0x40aae25b, 0x7eabae4d},
0579 {0x78edc885, 0x00000035, 0x000005be, 0xa39cb14b, 0x035b0d1f, 0x28c72982},
0580 {0x9d40a377, 0x0000003b, 0x00000038, 0x1f47ccd2, 0x197fbc9d, 0xc3cd4d18},
0581 {0x703d0e01, 0x0000003c, 0x000006f1, 0x88735e7c, 0xfed57c5a, 0xbca8f0e7},
0582 {0x776bf505, 0x0000000f, 0x000005b2, 0x5cc4fc01, 0xf32efb97, 0x713f60b3},
0583 {0x4a3e7854, 0x00000027, 0x000004b8, 0x8d923c82, 0x0cbfb4a2, 0xebd08fd5},
0584 {0x209172dd, 0x0000003b, 0x00000356, 0xb89e9c2b, 0xd7868138, 0x64406c59},
0585 {0x3ba4cc5b, 0x0000002f, 0x00000203, 0xe51601a9, 0x5b2a1032, 0x7421890e},
0586 {0xfc62f297, 0x00000000, 0x00000079, 0x71a8e1a2, 0x5d88685f, 0xe9347603},
0587 {0x64280b8b, 0x00000016, 0x000007ab, 0x0fa7a30c, 0xda3a455f, 0x1bef9060},
0588 {0x97dd724b, 0x00000033, 0x000007ad, 0x5788b2f4, 0xd7326d32, 0x34720072},
0589 {0x61394b52, 0x00000035, 0x00000571, 0xc66525f1, 0xcabe7fef, 0x48310f59},
0590 {0x29b4faff, 0x00000024, 0x0000006e, 0xca13751e, 0x993648e0, 0x783a4213},
0591 {0x29bfb1dc, 0x0000000b, 0x00000244, 0x436c43f7, 0x429f7a59, 0x9e8efd41},
0592 {0x86ae934b, 0x00000035, 0x00000104, 0x0760ec93, 0x9cf7d0f4, 0xfc3d34a5},
0593 {0xc4c1024e, 0x0000002e, 0x000006b1, 0x6516a3ec, 0x19321f9c, 0x17a52ae2},
0594 {0x3287a80a, 0x00000026, 0x00000496, 0x0b257eb1, 0x754ebd51, 0x886d935a},
0595 {0xa4db423e, 0x00000023, 0x0000045d, 0x9b3a66dc, 0x873e9f11, 0xeaaeaeb2},
0596 {0x7a1078df, 0x00000015, 0x0000014a, 0x8c2484c5, 0x6a628659, 0x8e900a4b},
0597 {0x6048bd5b, 0x00000006, 0x0000006a, 0x897e3559, 0xac9961af, 0xd74662b1},
0598 {0xd8f9ea20, 0x0000003d, 0x00000277, 0x60eb905b, 0xed2aaf99, 0xd26752ba},
0599 {0xea5ec3b4, 0x0000002a, 0x000004fe, 0x869965dc, 0x6c1f833b, 0x8b1fcd62},
0600 {0x2dfb005d, 0x00000016, 0x00000345, 0x6a3b117e, 0xf05e8521, 0xf54342fe},
0601 {0x5a214ade, 0x00000020, 0x000005b6, 0x467f70be, 0xcb22ccd3, 0x5b95b988},
0602 {0xf0ab9cca, 0x00000032, 0x00000515, 0xed223df3, 0x7f3ef01d, 0x2e1176be},
0603 {0x91b444f9, 0x0000002e, 0x000007f8, 0x84e9a983, 0x5676756f, 0x66120546},
0604 {0x1b5d2ddb, 0x0000002e, 0x0000012c, 0xba638c4c, 0x3f42047b, 0xf256a5cc},
0605 {0xd824d1bb, 0x0000003a, 0x000007b5, 0x6288653b, 0x3a3ebea0, 0x4af1dd69},
0606 {0x0470180c, 0x00000034, 0x000001f0, 0x9d5b80d6, 0x3de08195, 0x56f0a04a},
0607 {0xffaa3a3f, 0x00000036, 0x00000299, 0xf3a82ab8, 0x53e0c13d, 0x74f6b6b2},
0608 {0x6406cfeb, 0x00000023, 0x00000600, 0xa920b8e8, 0xe4e2acf4, 0x085951fd},
0609 {0xb24aaa38, 0x0000003e, 0x000004a1, 0x657cc328, 0x5077b2c3, 0xc65387eb},
0610 {0x58b2ab7c, 0x00000039, 0x000002b4, 0x3a17ee7e, 0x9dcb3643, 0x1ca9257b},
0611 {0x3db85970, 0x00000006, 0x000002b6, 0x95268b59, 0xb9812c10, 0xfd196d76},
0612 {0x857830c5, 0x00000003, 0x00000590, 0x4ef439d5, 0xf042161d, 0x5ef88339},
0613 {0xe1fcd978, 0x0000003e, 0x000007d8, 0xae8d8699, 0xce0a1ef5, 0x2c3714d9},
0614 {0xb982a768, 0x00000016, 0x000006e0, 0x62fad3df, 0x5f8a067b, 0x58576548},
0615 {0x1d581ce8, 0x0000001e, 0x0000058b, 0xf0f5da53, 0x26e39eee, 0xfd7c57de},
0616 {0x2456719b, 0x00000025, 0x00000503, 0x4296ac64, 0xd50e4c14, 0xd5fedd59},
0617 {0xfae6d8f2, 0x00000000, 0x0000055d, 0x057fdf2e, 0x2a31391a, 0x1cc3b17b},
0618 {0xcba828e3, 0x00000039, 0x000002ce, 0xe3f22351, 0x8f00877b, 0x270eed73},
0619 {0x13d25952, 0x0000000a, 0x0000072d, 0x76d4b4cc, 0x5eb67ec3, 0x91ecbb11},
0620 {0x0342be3f, 0x00000015, 0x00000599, 0xec75d9f1, 0x9d4d2826, 0x05ed8d0c},
0621 {0xeaa344e0, 0x00000014, 0x000004d8, 0x72a4c981, 0x2064ea06, 0x0b09ad5b},
0622 {0xbbb52021, 0x0000003b, 0x00000272, 0x04af99fc, 0xaf042d35, 0xf8d511fb},
0623 {0xb66384dc, 0x0000001d, 0x000007fc, 0xd7629116, 0x782bd801, 0x5ad832cc},
0624 {0x616c01b6, 0x00000022, 0x000002c8, 0x5b1dab30, 0x783ce7d2, 0x1214d196},
0625 {0xce2bdaad, 0x00000016, 0x0000062a, 0x932535c8, 0x3f02926d, 0x5747218a},
0626 {0x00fe84d7, 0x00000005, 0x00000205, 0x850e50aa, 0x753d649c, 0xde8f14de},
0627 {0xbebdcb4c, 0x00000006, 0x0000055d, 0xbeaa37a2, 0x2d8c9eba, 0x3563b7b9},
0628 {0xd8b1a02a, 0x00000010, 0x00000387, 0x5017d2fc, 0x503541a5, 0x071475d0},
0629 {0x3b96cad2, 0x00000036, 0x00000347, 0x1d2372ae, 0x926cd90b, 0x54c79d60},
0630 {0xc94c1ed7, 0x00000005, 0x0000038b, 0x9e9fdb22, 0x144a9178, 0x4c53eee6},
0631 {0x1aad454e, 0x00000025, 0x000002b2, 0xc3f6315c, 0x5c7a35b3, 0x10137a3c},
0632 {0xa4fec9a6, 0x00000000, 0x000006d6, 0x90be5080, 0xa4107605, 0xaa9d6c73},
0633 {0x1bbe71e2, 0x0000001f, 0x000002fd, 0x4e504c3b, 0x284ccaf1, 0xb63d23e7},
0634 {0x4201c7e4, 0x00000002, 0x000002b7, 0x7822e3f9, 0x0cc912a9, 0x7f53e9cf},
0635 {0x23fddc96, 0x00000003, 0x00000627, 0x8a385125, 0x07767e78, 0x13c1cd83},
0636 {0xd82ba25c, 0x00000016, 0x0000063e, 0x98e4148a, 0x283330c9, 0x49ff5867},
0637 {0x786f2032, 0x0000002d, 0x0000060f, 0xf201600a, 0xf561bfcd, 0x8467f211},
0638 {0xfebe4e1f, 0x0000002a, 0x000004f2, 0x95e51961, 0xfd80dcab, 0x3f9683b2},
0639 {0x1a6e0a39, 0x00000008, 0x00000672, 0x8af6c2a5, 0x78dd84cb, 0x76a3f874},
0640 {0x56000ab8, 0x0000000e, 0x000000e5, 0x36bacb8f, 0x22ee1f77, 0x863b702f},
0641 {0x4717fe0c, 0x00000000, 0x000006ec, 0x8439f342, 0x5c8e03da, 0xdc6c58ff},
0642 {0xd5d5d68e, 0x0000003c, 0x000003a3, 0x46fff083, 0x177d1b39, 0x0622cc95},
0643 {0xc25dd6c6, 0x00000024, 0x000006c0, 0x5ceb8eb4, 0x892b0d16, 0xe85605cd},
0644 {0xe9b11300, 0x00000023, 0x00000683, 0x07a5d59a, 0x6c6a3208, 0x31da5f06},
0645 {0x95cd285e, 0x00000001, 0x00000047, 0x7b3a4368, 0x0202c07e, 0xa1f2e784},
0646 {0xd9245a25, 0x0000001e, 0x000003a6, 0xd33c1841, 0x1936c0d5, 0xb07cc616},
0647 {0x103279db, 0x00000006, 0x0000039b, 0xca09b8a0, 0x77d62892, 0xbf943b6c},
0648 {0x1cba3172, 0x00000027, 0x000001c8, 0xcb377194, 0xebe682db, 0x2c01af1c},
0649 {0x8f613739, 0x0000000c, 0x000001df, 0xb4b0bc87, 0x7710bd43, 0x0fe5f56d},
0650 {0x1c6aa90d, 0x0000001b, 0x0000053c, 0x70559245, 0xda7894ac, 0xf8943b2d},
0651 {0xaabe5b93, 0x0000003d, 0x00000715, 0xcdbf42fa, 0x0c3b99e7, 0xe4d89272},
0652 {0xf15dd038, 0x00000006, 0x000006db, 0x6e104aea, 0x8d5967f2, 0x7c2f6bbb},
0653 {0x584dd49c, 0x00000020, 0x000007bc, 0x36b6cfd6, 0xad4e23b2, 0xabbf388b},
0654 {0x5d8c9506, 0x00000020, 0x00000470, 0x4c62378e, 0x31d92640, 0x1dca1f4e},
0655 {0xb80d17b0, 0x00000032, 0x00000346, 0x22a5bb88, 0x9a7ec89f, 0x5c170e23},
0656 {0xdaf0592e, 0x00000023, 0x000007b0, 0x3cab3f99, 0x9b1fdd99, 0xc0e9d672},
0657 {0x4793cc85, 0x0000000d, 0x00000706, 0xe82e04f6, 0xed3db6b7, 0xc18bdc86},
0658 {0x82ebf64e, 0x00000009, 0x000007c3, 0x69d590a9, 0x9efa8499, 0xa874fcdd},
0659 {0xb18a0319, 0x00000026, 0x000007db, 0x1cf98dcc, 0x8fa9ad6a, 0x9dc0bb48},
0660 };
0661
0662 #include <linux/time.h>
0663
0664 static int __init crc32c_test(void)
0665 {
0666 int i;
0667 int errors = 0;
0668 int bytes = 0;
0669 u64 nsec;
0670 unsigned long flags;
0671
0672
0673
0674 static u32 crc;
0675
0676
0677 for (i = 0; i < 100; i++) {
0678 bytes += test[i].length;
0679
0680 crc ^= __crc32c_le(test[i].crc, test_buf +
0681 test[i].start, test[i].length);
0682 }
0683
0684
0685 local_irq_save(flags);
0686
0687 nsec = ktime_get_ns();
0688 for (i = 0; i < 100; i++) {
0689 if (test[i].crc32c_le != __crc32c_le(test[i].crc, test_buf +
0690 test[i].start, test[i].length))
0691 errors++;
0692 }
0693 nsec = ktime_get_ns() - nsec;
0694
0695 local_irq_restore(flags);
0696
0697 pr_info("crc32c: CRC_LE_BITS = %d\n", CRC_LE_BITS);
0698
0699 if (errors)
0700 pr_warn("crc32c: %d self tests failed\n", errors);
0701 else {
0702 pr_info("crc32c: self tests passed, processed %d bytes in %lld nsec\n",
0703 bytes, nsec);
0704 }
0705
0706 return 0;
0707 }
0708
0709 static int __init crc32c_combine_test(void)
0710 {
0711 int i, j;
0712 int errors = 0, runs = 0;
0713
0714 for (i = 0; i < 10; i++) {
0715 u32 crc_full;
0716
0717 crc_full = __crc32c_le(test[i].crc, test_buf + test[i].start,
0718 test[i].length);
0719 for (j = 0; j <= test[i].length; ++j) {
0720 u32 crc1, crc2;
0721 u32 len1 = j, len2 = test[i].length - j;
0722
0723 crc1 = __crc32c_le(test[i].crc, test_buf +
0724 test[i].start, len1);
0725 crc2 = __crc32c_le(0, test_buf + test[i].start +
0726 len1, len2);
0727
0728 if (!(crc_full == __crc32c_le_combine(crc1, crc2, len2) &&
0729 crc_full == test[i].crc32c_le))
0730 errors++;
0731 runs++;
0732 cond_resched();
0733 }
0734 }
0735
0736 if (errors)
0737 pr_warn("crc32c_combine: %d/%d self tests failed\n", errors, runs);
0738 else
0739 pr_info("crc32c_combine: %d self tests passed\n", runs);
0740
0741 return 0;
0742 }
0743
0744 static int __init crc32_test(void)
0745 {
0746 int i;
0747 int errors = 0;
0748 int bytes = 0;
0749 u64 nsec;
0750 unsigned long flags;
0751
0752
0753
0754 static u32 crc;
0755
0756
0757 for (i = 0; i < 100; i++) {
0758 bytes += 2*test[i].length;
0759
0760 crc ^= crc32_le(test[i].crc, test_buf +
0761 test[i].start, test[i].length);
0762
0763 crc ^= crc32_be(test[i].crc, test_buf +
0764 test[i].start, test[i].length);
0765 }
0766
0767
0768 local_irq_save(flags);
0769
0770 nsec = ktime_get_ns();
0771 for (i = 0; i < 100; i++) {
0772 if (test[i].crc_le != crc32_le(test[i].crc, test_buf +
0773 test[i].start, test[i].length))
0774 errors++;
0775
0776 if (test[i].crc_be != crc32_be(test[i].crc, test_buf +
0777 test[i].start, test[i].length))
0778 errors++;
0779 }
0780 nsec = ktime_get_ns() - nsec;
0781
0782 local_irq_restore(flags);
0783
0784 pr_info("crc32: CRC_LE_BITS = %d, CRC_BE BITS = %d\n",
0785 CRC_LE_BITS, CRC_BE_BITS);
0786
0787 if (errors)
0788 pr_warn("crc32: %d self tests failed\n", errors);
0789 else {
0790 pr_info("crc32: self tests passed, processed %d bytes in %lld nsec\n",
0791 bytes, nsec);
0792 }
0793
0794 return 0;
0795 }
0796
0797 static int __init crc32_combine_test(void)
0798 {
0799 int i, j;
0800 int errors = 0, runs = 0;
0801
0802 for (i = 0; i < 10; i++) {
0803 u32 crc_full;
0804
0805 crc_full = crc32_le(test[i].crc, test_buf + test[i].start,
0806 test[i].length);
0807 for (j = 0; j <= test[i].length; ++j) {
0808 u32 crc1, crc2;
0809 u32 len1 = j, len2 = test[i].length - j;
0810
0811 crc1 = crc32_le(test[i].crc, test_buf +
0812 test[i].start, len1);
0813 crc2 = crc32_le(0, test_buf + test[i].start +
0814 len1, len2);
0815
0816 if (!(crc_full == crc32_le_combine(crc1, crc2, len2) &&
0817 crc_full == test[i].crc_le))
0818 errors++;
0819 runs++;
0820 cond_resched();
0821 }
0822 }
0823
0824 if (errors)
0825 pr_warn("crc32_combine: %d/%d self tests failed\n", errors, runs);
0826 else
0827 pr_info("crc32_combine: %d self tests passed\n", runs);
0828
0829 return 0;
0830 }
0831
0832 static int __init crc32test_init(void)
0833 {
0834 crc32_test();
0835 crc32c_test();
0836
0837 crc32_combine_test();
0838 crc32c_combine_test();
0839
0840 return 0;
0841 }
0842
0843 static void __exit crc32_exit(void)
0844 {
0845 }
0846
0847 module_init(crc32test_init);
0848 module_exit(crc32_exit);
0849
0850 MODULE_AUTHOR("Matt Domsch <Matt_Domsch@dell.com>");
0851 MODULE_DESCRIPTION("CRC32 selftest");
0852 MODULE_LICENSE("GPL");