Fix append_* function calls
[hashcat.git] / OpenCL / m06100_a1.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _WHIRLPOOL_
7
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
10
11 #define DGST_R0 0
12 #define DGST_R1 1
13 #define DGST_R2 2
14 #define DGST_R3 3
15
16 #include "include/kernel_functions.c"
17 #include "types_ocl.c"
18 #include "common.c"
19
20 #define COMPARE_S "check_single_comp4.c"
21 #define COMPARE_M "check_multi_comp4.c"
22
23 #define R 10
24
25 #ifdef VECT_SIZE1
26 #define BOX(S,n,i) u32 ((S)[(n)][(i)])
27 #endif
28
29 #ifdef VECT_SIZE2
30 #define BOX(S,n,i) u32 ((S)[(n)][(i).s0], (S)[(n)][(i).s1])
31 #endif
32
33 __constant u32 Ch[8][256] =
34 {
35   {
36     0x18186018, 0x23238c23, 0xc6c63fc6, 0xe8e887e8,
37     0x87872687, 0xb8b8dab8, 0x01010401, 0x4f4f214f,
38     0x3636d836, 0xa6a6a2a6, 0xd2d26fd2, 0xf5f5f3f5,
39     0x7979f979, 0x6f6fa16f, 0x91917e91, 0x52525552,
40     0x60609d60, 0xbcbccabc, 0x9b9b569b, 0x8e8e028e,
41     0xa3a3b6a3, 0x0c0c300c, 0x7b7bf17b, 0x3535d435,
42     0x1d1d741d, 0xe0e0a7e0, 0xd7d77bd7, 0xc2c22fc2,
43     0x2e2eb82e, 0x4b4b314b, 0xfefedffe, 0x57574157,
44     0x15155415, 0x7777c177, 0x3737dc37, 0xe5e5b3e5,
45     0x9f9f469f, 0xf0f0e7f0, 0x4a4a354a, 0xdada4fda,
46     0x58587d58, 0xc9c903c9, 0x2929a429, 0x0a0a280a,
47     0xb1b1feb1, 0xa0a0baa0, 0x6b6bb16b, 0x85852e85,
48     0xbdbdcebd, 0x5d5d695d, 0x10104010, 0xf4f4f7f4,
49     0xcbcb0bcb, 0x3e3ef83e, 0x05051405, 0x67678167,
50     0xe4e4b7e4, 0x27279c27, 0x41411941, 0x8b8b168b,
51     0xa7a7a6a7, 0x7d7de97d, 0x95956e95, 0xd8d847d8,
52     0xfbfbcbfb, 0xeeee9fee, 0x7c7ced7c, 0x66668566,
53     0xdddd53dd, 0x17175c17, 0x47470147, 0x9e9e429e,
54     0xcaca0fca, 0x2d2db42d, 0xbfbfc6bf, 0x07071c07,
55     0xadad8ead, 0x5a5a755a, 0x83833683, 0x3333cc33,
56     0x63639163, 0x02020802, 0xaaaa92aa, 0x7171d971,
57     0xc8c807c8, 0x19196419, 0x49493949, 0xd9d943d9,
58     0xf2f2eff2, 0xe3e3abe3, 0x5b5b715b, 0x88881a88,
59     0x9a9a529a, 0x26269826, 0x3232c832, 0xb0b0fab0,
60     0xe9e983e9, 0x0f0f3c0f, 0xd5d573d5, 0x80803a80,
61     0xbebec2be, 0xcdcd13cd, 0x3434d034, 0x48483d48,
62     0xffffdbff, 0x7a7af57a, 0x90907a90, 0x5f5f615f,
63     0x20208020, 0x6868bd68, 0x1a1a681a, 0xaeae82ae,
64     0xb4b4eab4, 0x54544d54, 0x93937693, 0x22228822,
65     0x64648d64, 0xf1f1e3f1, 0x7373d173, 0x12124812,
66     0x40401d40, 0x08082008, 0xc3c32bc3, 0xecec97ec,
67     0xdbdb4bdb, 0xa1a1bea1, 0x8d8d0e8d, 0x3d3df43d,
68     0x97976697, 0x00000000, 0xcfcf1bcf, 0x2b2bac2b,
69     0x7676c576, 0x82823282, 0xd6d67fd6, 0x1b1b6c1b,
70     0xb5b5eeb5, 0xafaf86af, 0x6a6ab56a, 0x50505d50,
71     0x45450945, 0xf3f3ebf3, 0x3030c030, 0xefef9bef,
72     0x3f3ffc3f, 0x55554955, 0xa2a2b2a2, 0xeaea8fea,
73     0x65658965, 0xbabad2ba, 0x2f2fbc2f, 0xc0c027c0,
74     0xdede5fde, 0x1c1c701c, 0xfdfdd3fd, 0x4d4d294d,
75     0x92927292, 0x7575c975, 0x06061806, 0x8a8a128a,
76     0xb2b2f2b2, 0xe6e6bfe6, 0x0e0e380e, 0x1f1f7c1f,
77     0x62629562, 0xd4d477d4, 0xa8a89aa8, 0x96966296,
78     0xf9f9c3f9, 0xc5c533c5, 0x25259425, 0x59597959,
79     0x84842a84, 0x7272d572, 0x3939e439, 0x4c4c2d4c,
80     0x5e5e655e, 0x7878fd78, 0x3838e038, 0x8c8c0a8c,
81     0xd1d163d1, 0xa5a5aea5, 0xe2e2afe2, 0x61619961,
82     0xb3b3f6b3, 0x21218421, 0x9c9c4a9c, 0x1e1e781e,
83     0x43431143, 0xc7c73bc7, 0xfcfcd7fc, 0x04041004,
84     0x51515951, 0x99995e99, 0x6d6da96d, 0x0d0d340d,
85     0xfafacffa, 0xdfdf5bdf, 0x7e7ee57e, 0x24249024,
86     0x3b3bec3b, 0xabab96ab, 0xcece1fce, 0x11114411,
87     0x8f8f068f, 0x4e4e254e, 0xb7b7e6b7, 0xebeb8beb,
88     0x3c3cf03c, 0x81813e81, 0x94946a94, 0xf7f7fbf7,
89     0xb9b9deb9, 0x13134c13, 0x2c2cb02c, 0xd3d36bd3,
90     0xe7e7bbe7, 0x6e6ea56e, 0xc4c437c4, 0x03030c03,
91     0x56564556, 0x44440d44, 0x7f7fe17f, 0xa9a99ea9,
92     0x2a2aa82a, 0xbbbbd6bb, 0xc1c123c1, 0x53535153,
93     0xdcdc57dc, 0x0b0b2c0b, 0x9d9d4e9d, 0x6c6cad6c,
94     0x3131c431, 0x7474cd74, 0xf6f6fff6, 0x46460546,
95     0xacac8aac, 0x89891e89, 0x14145014, 0xe1e1a3e1,
96     0x16165816, 0x3a3ae83a, 0x6969b969, 0x09092409,
97     0x7070dd70, 0xb6b6e2b6, 0xd0d067d0, 0xeded93ed,
98     0xcccc17cc, 0x42421542, 0x98985a98, 0xa4a4aaa4,
99     0x2828a028, 0x5c5c6d5c, 0xf8f8c7f8, 0x86862286,
100   },
101   {
102     0xd8181860, 0x2623238c, 0xb8c6c63f, 0xfbe8e887,
103     0xcb878726, 0x11b8b8da, 0x09010104, 0x0d4f4f21,
104     0x9b3636d8, 0xffa6a6a2, 0x0cd2d26f, 0x0ef5f5f3,
105     0x967979f9, 0x306f6fa1, 0x6d91917e, 0xf8525255,
106     0x4760609d, 0x35bcbcca, 0x379b9b56, 0x8a8e8e02,
107     0xd2a3a3b6, 0x6c0c0c30, 0x847b7bf1, 0x803535d4,
108     0xf51d1d74, 0xb3e0e0a7, 0x21d7d77b, 0x9cc2c22f,
109     0x432e2eb8, 0x294b4b31, 0x5dfefedf, 0xd5575741,
110     0xbd151554, 0xe87777c1, 0x923737dc, 0x9ee5e5b3,
111     0x139f9f46, 0x23f0f0e7, 0x204a4a35, 0x44dada4f,
112     0xa258587d, 0xcfc9c903, 0x7c2929a4, 0x5a0a0a28,
113     0x50b1b1fe, 0xc9a0a0ba, 0x146b6bb1, 0xd985852e,
114     0x3cbdbdce, 0x8f5d5d69, 0x90101040, 0x07f4f4f7,
115     0xddcbcb0b, 0xd33e3ef8, 0x2d050514, 0x78676781,
116     0x97e4e4b7, 0x0227279c, 0x73414119, 0xa78b8b16,
117     0xf6a7a7a6, 0xb27d7de9, 0x4995956e, 0x56d8d847,
118     0x70fbfbcb, 0xcdeeee9f, 0xbb7c7ced, 0x71666685,
119     0x7bdddd53, 0xaf17175c, 0x45474701, 0x1a9e9e42,
120     0xd4caca0f, 0x582d2db4, 0x2ebfbfc6, 0x3f07071c,
121     0xacadad8e, 0xb05a5a75, 0xef838336, 0xb63333cc,
122     0x5c636391, 0x12020208, 0x93aaaa92, 0xde7171d9,
123     0xc6c8c807, 0xd1191964, 0x3b494939, 0x5fd9d943,
124     0x31f2f2ef, 0xa8e3e3ab, 0xb95b5b71, 0xbc88881a,
125     0x3e9a9a52, 0x0b262698, 0xbf3232c8, 0x59b0b0fa,
126     0xf2e9e983, 0x770f0f3c, 0x33d5d573, 0xf480803a,
127     0x27bebec2, 0xebcdcd13, 0x893434d0, 0x3248483d,
128     0x54ffffdb, 0x8d7a7af5, 0x6490907a, 0x9d5f5f61,
129     0x3d202080, 0x0f6868bd, 0xca1a1a68, 0xb7aeae82,
130     0x7db4b4ea, 0xce54544d, 0x7f939376, 0x2f222288,
131     0x6364648d, 0x2af1f1e3, 0xcc7373d1, 0x82121248,
132     0x7a40401d, 0x48080820, 0x95c3c32b, 0xdfecec97,
133     0x4ddbdb4b, 0xc0a1a1be, 0x918d8d0e, 0xc83d3df4,
134     0x5b979766, 0x00000000, 0xf9cfcf1b, 0x6e2b2bac,
135     0xe17676c5, 0xe6828232, 0x28d6d67f, 0xc31b1b6c,
136     0x74b5b5ee, 0xbeafaf86, 0x1d6a6ab5, 0xea50505d,
137     0x57454509, 0x38f3f3eb, 0xad3030c0, 0xc4efef9b,
138     0xda3f3ffc, 0xc7555549, 0xdba2a2b2, 0xe9eaea8f,
139     0x6a656589, 0x03babad2, 0x4a2f2fbc, 0x8ec0c027,
140     0x60dede5f, 0xfc1c1c70, 0x46fdfdd3, 0x1f4d4d29,
141     0x76929272, 0xfa7575c9, 0x36060618, 0xae8a8a12,
142     0x4bb2b2f2, 0x85e6e6bf, 0x7e0e0e38, 0xe71f1f7c,
143     0x55626295, 0x3ad4d477, 0x81a8a89a, 0x52969662,
144     0x62f9f9c3, 0xa3c5c533, 0x10252594, 0xab595979,
145     0xd084842a, 0xc57272d5, 0xec3939e4, 0x164c4c2d,
146     0x945e5e65, 0x9f7878fd, 0xe53838e0, 0x988c8c0a,
147     0x17d1d163, 0xe4a5a5ae, 0xa1e2e2af, 0x4e616199,
148     0x42b3b3f6, 0x34212184, 0x089c9c4a, 0xee1e1e78,
149     0x61434311, 0xb1c7c73b, 0x4ffcfcd7, 0x24040410,
150     0xe3515159, 0x2599995e, 0x226d6da9, 0x650d0d34,
151     0x79fafacf, 0x69dfdf5b, 0xa97e7ee5, 0x19242490,
152     0xfe3b3bec, 0x9aabab96, 0xf0cece1f, 0x99111144,
153     0x838f8f06, 0x044e4e25, 0x66b7b7e6, 0xe0ebeb8b,
154     0xc13c3cf0, 0xfd81813e, 0x4094946a, 0x1cf7f7fb,
155     0x18b9b9de, 0x8b13134c, 0x512c2cb0, 0x05d3d36b,
156     0x8ce7e7bb, 0x396e6ea5, 0xaac4c437, 0x1b03030c,
157     0xdc565645, 0x5e44440d, 0xa07f7fe1, 0x88a9a99e,
158     0x672a2aa8, 0x0abbbbd6, 0x87c1c123, 0xf1535351,
159     0x72dcdc57, 0x530b0b2c, 0x019d9d4e, 0x2b6c6cad,
160     0xa43131c4, 0xf37474cd, 0x15f6f6ff, 0x4c464605,
161     0xa5acac8a, 0xb589891e, 0xb4141450, 0xbae1e1a3,
162     0xa6161658, 0xf73a3ae8, 0x066969b9, 0x41090924,
163     0xd77070dd, 0x6fb6b6e2, 0x1ed0d067, 0xd6eded93,
164     0xe2cccc17, 0x68424215, 0x2c98985a, 0xeda4a4aa,
165     0x752828a0, 0x865c5c6d, 0x6bf8f8c7, 0xc2868622,
166   },
167   {
168     0x30d81818, 0x46262323, 0x91b8c6c6, 0xcdfbe8e8,
169     0x13cb8787, 0x6d11b8b8, 0x02090101, 0x9e0d4f4f,
170     0x6c9b3636, 0x51ffa6a6, 0xb90cd2d2, 0xf70ef5f5,
171     0xf2967979, 0xde306f6f, 0x3f6d9191, 0xa4f85252,
172     0xc0476060, 0x6535bcbc, 0x2b379b9b, 0x018a8e8e,
173     0x5bd2a3a3, 0x186c0c0c, 0xf6847b7b, 0x6a803535,
174     0x3af51d1d, 0xddb3e0e0, 0xb321d7d7, 0x999cc2c2,
175     0x5c432e2e, 0x96294b4b, 0xe15dfefe, 0xaed55757,
176     0x2abd1515, 0xeee87777, 0x6e923737, 0xd79ee5e5,
177     0x23139f9f, 0xfd23f0f0, 0x94204a4a, 0xa944dada,
178     0xb0a25858, 0x8fcfc9c9, 0x527c2929, 0x145a0a0a,
179     0x7f50b1b1, 0x5dc9a0a0, 0xd6146b6b, 0x17d98585,
180     0x673cbdbd, 0xba8f5d5d, 0x20901010, 0xf507f4f4,
181     0x8bddcbcb, 0x7cd33e3e, 0x0a2d0505, 0xce786767,
182     0xd597e4e4, 0x4e022727, 0x82734141, 0x0ba78b8b,
183     0x53f6a7a7, 0xfab27d7d, 0x37499595, 0xad56d8d8,
184     0xeb70fbfb, 0xc1cdeeee, 0xf8bb7c7c, 0xcc716666,
185     0xa77bdddd, 0x2eaf1717, 0x8e454747, 0x211a9e9e,
186     0x89d4caca, 0x5a582d2d, 0x632ebfbf, 0x0e3f0707,
187     0x47acadad, 0xb4b05a5a, 0x1bef8383, 0x66b63333,
188     0xc65c6363, 0x04120202, 0x4993aaaa, 0xe2de7171,
189     0x8dc6c8c8, 0x32d11919, 0x923b4949, 0xaf5fd9d9,
190     0xf931f2f2, 0xdba8e3e3, 0xb6b95b5b, 0x0dbc8888,
191     0x293e9a9a, 0x4c0b2626, 0x64bf3232, 0x7d59b0b0,
192     0xcff2e9e9, 0x1e770f0f, 0xb733d5d5, 0x1df48080,
193     0x6127bebe, 0x87ebcdcd, 0x68893434, 0x90324848,
194     0xe354ffff, 0xf48d7a7a, 0x3d649090, 0xbe9d5f5f,
195     0x403d2020, 0xd00f6868, 0x34ca1a1a, 0x41b7aeae,
196     0x757db4b4, 0xa8ce5454, 0x3b7f9393, 0x442f2222,
197     0xc8636464, 0xff2af1f1, 0xe6cc7373, 0x24821212,
198     0x807a4040, 0x10480808, 0x9b95c3c3, 0xc5dfecec,
199     0xab4ddbdb, 0x5fc0a1a1, 0x07918d8d, 0x7ac83d3d,
200     0x335b9797, 0x00000000, 0x83f9cfcf, 0x566e2b2b,
201     0xece17676, 0x19e68282, 0xb128d6d6, 0x36c31b1b,
202     0x7774b5b5, 0x43beafaf, 0xd41d6a6a, 0xa0ea5050,
203     0x8a574545, 0xfb38f3f3, 0x60ad3030, 0xc3c4efef,
204     0x7eda3f3f, 0xaac75555, 0x59dba2a2, 0xc9e9eaea,
205     0xca6a6565, 0x6903baba, 0x5e4a2f2f, 0x9d8ec0c0,
206     0xa160dede, 0x38fc1c1c, 0xe746fdfd, 0x9a1f4d4d,
207     0x39769292, 0xeafa7575, 0x0c360606, 0x09ae8a8a,
208     0x794bb2b2, 0xd185e6e6, 0x1c7e0e0e, 0x3ee71f1f,
209     0xc4556262, 0xb53ad4d4, 0x4d81a8a8, 0x31529696,
210     0xef62f9f9, 0x97a3c5c5, 0x4a102525, 0xb2ab5959,
211     0x15d08484, 0xe4c57272, 0x72ec3939, 0x98164c4c,
212     0xbc945e5e, 0xf09f7878, 0x70e53838, 0x05988c8c,
213     0xbf17d1d1, 0x57e4a5a5, 0xd9a1e2e2, 0xc24e6161,
214     0x7b42b3b3, 0x42342121, 0x25089c9c, 0x3cee1e1e,
215     0x86614343, 0x93b1c7c7, 0xe54ffcfc, 0x08240404,
216     0xa2e35151, 0x2f259999, 0xda226d6d, 0x1a650d0d,
217     0xe979fafa, 0xa369dfdf, 0xfca97e7e, 0x48192424,
218     0x76fe3b3b, 0x4b9aabab, 0x81f0cece, 0x22991111,
219     0x03838f8f, 0x9c044e4e, 0x7366b7b7, 0xcbe0ebeb,
220     0x78c13c3c, 0x1ffd8181, 0x35409494, 0xf31cf7f7,
221     0x6f18b9b9, 0x268b1313, 0x58512c2c, 0xbb05d3d3,
222     0xd38ce7e7, 0xdc396e6e, 0x95aac4c4, 0x061b0303,
223     0xacdc5656, 0x885e4444, 0xfea07f7f, 0x4f88a9a9,
224     0x54672a2a, 0x6b0abbbb, 0x9f87c1c1, 0xa6f15353,
225     0xa572dcdc, 0x16530b0b, 0x27019d9d, 0xd82b6c6c,
226     0x62a43131, 0xe8f37474, 0xf115f6f6, 0x8c4c4646,
227     0x45a5acac, 0x0fb58989, 0x28b41414, 0xdfbae1e1,
228     0x2ca61616, 0x74f73a3a, 0xd2066969, 0x12410909,
229     0xe0d77070, 0x716fb6b6, 0xbd1ed0d0, 0xc7d6eded,
230     0x85e2cccc, 0x84684242, 0x2d2c9898, 0x55eda4a4,
231     0x50752828, 0xb8865c5c, 0xed6bf8f8, 0x11c28686,
232   },
233   {
234     0x7830d818, 0xaf462623, 0xf991b8c6, 0x6fcdfbe8,
235     0xa113cb87, 0x626d11b8, 0x05020901, 0x6e9e0d4f,
236     0xee6c9b36, 0x0451ffa6, 0xbdb90cd2, 0x06f70ef5,
237     0x80f29679, 0xcede306f, 0xef3f6d91, 0x07a4f852,
238     0xfdc04760, 0x766535bc, 0xcd2b379b, 0x8c018a8e,
239     0x155bd2a3, 0x3c186c0c, 0x8af6847b, 0xe16a8035,
240     0x693af51d, 0x47ddb3e0, 0xacb321d7, 0xed999cc2,
241     0x965c432e, 0x7a96294b, 0x21e15dfe, 0x16aed557,
242     0x412abd15, 0xb6eee877, 0xeb6e9237, 0x56d79ee5,
243     0xd923139f, 0x17fd23f0, 0x7f94204a, 0x95a944da,
244     0x25b0a258, 0xca8fcfc9, 0x8d527c29, 0x22145a0a,
245     0x4f7f50b1, 0x1a5dc9a0, 0xdad6146b, 0xab17d985,
246     0x73673cbd, 0x34ba8f5d, 0x50209010, 0x03f507f4,
247     0xc08bddcb, 0xc67cd33e, 0x110a2d05, 0xe6ce7867,
248     0x53d597e4, 0xbb4e0227, 0x58827341, 0x9d0ba78b,
249     0x0153f6a7, 0x94fab27d, 0xfb374995, 0x9fad56d8,
250     0x30eb70fb, 0x71c1cdee, 0x91f8bb7c, 0xe3cc7166,
251     0x8ea77bdd, 0x4b2eaf17, 0x468e4547, 0xdc211a9e,
252     0xc589d4ca, 0x995a582d, 0x79632ebf, 0x1b0e3f07,
253     0x2347acad, 0x2fb4b05a, 0xb51bef83, 0xff66b633,
254     0xf2c65c63, 0x0a041202, 0x384993aa, 0xa8e2de71,
255     0xcf8dc6c8, 0x7d32d119, 0x70923b49, 0x9aaf5fd9,
256     0x1df931f2, 0x48dba8e3, 0x2ab6b95b, 0x920dbc88,
257     0xc8293e9a, 0xbe4c0b26, 0xfa64bf32, 0x4a7d59b0,
258     0x6acff2e9, 0x331e770f, 0xa6b733d5, 0xba1df480,
259     0x7c6127be, 0xde87ebcd, 0xe4688934, 0x75903248,
260     0x24e354ff, 0x8ff48d7a, 0xea3d6490, 0x3ebe9d5f,
261     0xa0403d20, 0xd5d00f68, 0x7234ca1a, 0x2c41b7ae,
262     0x5e757db4, 0x19a8ce54, 0xe53b7f93, 0xaa442f22,
263     0xe9c86364, 0x12ff2af1, 0xa2e6cc73, 0x5a248212,
264     0x5d807a40, 0x28104808, 0xe89b95c3, 0x7bc5dfec,
265     0x90ab4ddb, 0x1f5fc0a1, 0x8307918d, 0xc97ac83d,
266     0xf1335b97, 0x00000000, 0xd483f9cf, 0x87566e2b,
267     0xb3ece176, 0xb019e682, 0xa9b128d6, 0x7736c31b,
268     0x5b7774b5, 0x2943beaf, 0xdfd41d6a, 0x0da0ea50,
269     0x4c8a5745, 0x18fb38f3, 0xf060ad30, 0x74c3c4ef,
270     0xc37eda3f, 0x1caac755, 0x1059dba2, 0x65c9e9ea,
271     0xecca6a65, 0x686903ba, 0x935e4a2f, 0xe79d8ec0,
272     0x81a160de, 0x6c38fc1c, 0x2ee746fd, 0x649a1f4d,
273     0xe0397692, 0xbceafa75, 0x1e0c3606, 0x9809ae8a,
274     0x40794bb2, 0x59d185e6, 0x361c7e0e, 0x633ee71f,
275     0xf7c45562, 0xa3b53ad4, 0x324d81a8, 0xf4315296,
276     0x3aef62f9, 0xf697a3c5, 0xb14a1025, 0x20b2ab59,
277     0xae15d084, 0xa7e4c572, 0xdd72ec39, 0x6198164c,
278     0x3bbc945e, 0x85f09f78, 0xd870e538, 0x8605988c,
279     0xb2bf17d1, 0x0b57e4a5, 0x4dd9a1e2, 0xf8c24e61,
280     0x457b42b3, 0xa5423421, 0xd625089c, 0x663cee1e,
281     0x52866143, 0xfc93b1c7, 0x2be54ffc, 0x14082404,
282     0x08a2e351, 0xc72f2599, 0xc4da226d, 0x391a650d,
283     0x35e979fa, 0x84a369df, 0x9bfca97e, 0xb4481924,
284     0xd776fe3b, 0x3d4b9aab, 0xd181f0ce, 0x55229911,
285     0x8903838f, 0x6b9c044e, 0x517366b7, 0x60cbe0eb,
286     0xcc78c13c, 0xbf1ffd81, 0xfe354094, 0x0cf31cf7,
287     0x676f18b9, 0x5f268b13, 0x9c58512c, 0xb8bb05d3,
288     0x5cd38ce7, 0xcbdc396e, 0xf395aac4, 0x0f061b03,
289     0x13acdc56, 0x49885e44, 0x9efea07f, 0x374f88a9,
290     0x8254672a, 0x6d6b0abb, 0xe29f87c1, 0x02a6f153,
291     0x8ba572dc, 0x2716530b, 0xd327019d, 0xc1d82b6c,
292     0xf562a431, 0xb9e8f374, 0x09f115f6, 0x438c4c46,
293     0x2645a5ac, 0x970fb589, 0x4428b414, 0x42dfbae1,
294     0x4e2ca616, 0xd274f73a, 0xd0d20669, 0x2d124109,
295     0xade0d770, 0x54716fb6, 0xb7bd1ed0, 0x7ec7d6ed,
296     0xdb85e2cc, 0x57846842, 0xc22d2c98, 0x0e55eda4,
297     0x88507528, 0x31b8865c, 0x3fed6bf8, 0xa411c286,
298   },
299   {
300     0xc07830d8, 0x05af4626, 0x7ef991b8, 0x136fcdfb,
301     0x4ca113cb, 0xa9626d11, 0x08050209, 0x426e9e0d,
302     0xadee6c9b, 0x590451ff, 0xdebdb90c, 0xfb06f70e,
303     0xef80f296, 0x5fcede30, 0xfcef3f6d, 0xaa07a4f8,
304     0x27fdc047, 0x89766535, 0xaccd2b37, 0x048c018a,
305     0x71155bd2, 0x603c186c, 0xff8af684, 0xb5e16a80,
306     0xe8693af5, 0x5347ddb3, 0xf6acb321, 0x5eed999c,
307     0x6d965c43, 0x627a9629, 0xa321e15d, 0x8216aed5,
308     0xa8412abd, 0x9fb6eee8, 0xa5eb6e92, 0x7b56d79e,
309     0x8cd92313, 0xd317fd23, 0x6a7f9420, 0x9e95a944,
310     0xfa25b0a2, 0x06ca8fcf, 0x558d527c, 0x5022145a,
311     0xe14f7f50, 0x691a5dc9, 0x7fdad614, 0x5cab17d9,
312     0x8173673c, 0xd234ba8f, 0x80502090, 0xf303f507,
313     0x16c08bdd, 0xedc67cd3, 0x28110a2d, 0x1fe6ce78,
314     0x7353d597, 0x25bb4e02, 0x32588273, 0x2c9d0ba7,
315     0x510153f6, 0xcf94fab2, 0xdcfb3749, 0x8e9fad56,
316     0x8b30eb70, 0x2371c1cd, 0xc791f8bb, 0x17e3cc71,
317     0xa68ea77b, 0xb84b2eaf, 0x02468e45, 0x84dc211a,
318     0x1ec589d4, 0x75995a58, 0x9179632e, 0x381b0e3f,
319     0x012347ac, 0xea2fb4b0, 0x6cb51bef, 0x85ff66b6,
320     0x3ff2c65c, 0x100a0412, 0x39384993, 0xafa8e2de,
321     0x0ecf8dc6, 0xc87d32d1, 0x7270923b, 0x869aaf5f,
322     0xc31df931, 0x4b48dba8, 0xe22ab6b9, 0x34920dbc,
323     0xa4c8293e, 0x2dbe4c0b, 0x8dfa64bf, 0xe94a7d59,
324     0x1b6acff2, 0x78331e77, 0xe6a6b733, 0x74ba1df4,
325     0x997c6127, 0x26de87eb, 0xbde46889, 0x7a759032,
326     0xab24e354, 0xf78ff48d, 0xf4ea3d64, 0xc23ebe9d,
327     0x1da0403d, 0x67d5d00f, 0xd07234ca, 0x192c41b7,
328     0xc95e757d, 0x9a19a8ce, 0xece53b7f, 0x0daa442f,
329     0x07e9c863, 0xdb12ff2a, 0xbfa2e6cc, 0x905a2482,
330     0x3a5d807a, 0x40281048, 0x56e89b95, 0x337bc5df,
331     0x9690ab4d, 0x611f5fc0, 0x1c830791, 0xf5c97ac8,
332     0xccf1335b, 0x00000000, 0x36d483f9, 0x4587566e,
333     0x97b3ece1, 0x64b019e6, 0xfea9b128, 0xd87736c3,
334     0xc15b7774, 0x112943be, 0x77dfd41d, 0xba0da0ea,
335     0x124c8a57, 0xcb18fb38, 0x9df060ad, 0x2b74c3c4,
336     0xe5c37eda, 0x921caac7, 0x791059db, 0x0365c9e9,
337     0x0fecca6a, 0xb9686903, 0x65935e4a, 0x4ee79d8e,
338     0xbe81a160, 0xe06c38fc, 0xbb2ee746, 0x52649a1f,
339     0xe4e03976, 0x8fbceafa, 0x301e0c36, 0x249809ae,
340     0xf940794b, 0x6359d185, 0x70361c7e, 0xf8633ee7,
341     0x37f7c455, 0xeea3b53a, 0x29324d81, 0xc4f43152,
342     0x9b3aef62, 0x66f697a3, 0x35b14a10, 0xf220b2ab,
343     0x54ae15d0, 0xb7a7e4c5, 0xd5dd72ec, 0x5a619816,
344     0xca3bbc94, 0xe785f09f, 0xddd870e5, 0x14860598,
345     0xc6b2bf17, 0x410b57e4, 0x434dd9a1, 0x2ff8c24e,
346     0xf1457b42, 0x15a54234, 0x94d62508, 0xf0663cee,
347     0x22528661, 0x76fc93b1, 0xb32be54f, 0x20140824,
348     0xb208a2e3, 0xbcc72f25, 0x4fc4da22, 0x68391a65,
349     0x8335e979, 0xb684a369, 0xd79bfca9, 0x3db44819,
350     0xc5d776fe, 0x313d4b9a, 0x3ed181f0, 0x88552299,
351     0x0c890383, 0x4a6b9c04, 0xd1517366, 0x0b60cbe0,
352     0xfdcc78c1, 0x7cbf1ffd, 0xd4fe3540, 0xeb0cf31c,
353     0xa1676f18, 0x985f268b, 0x7d9c5851, 0xd6b8bb05,
354     0x6b5cd38c, 0x57cbdc39, 0x6ef395aa, 0x180f061b,
355     0x8a13acdc, 0x1a49885e, 0xdf9efea0, 0x21374f88,
356     0x4d825467, 0xb16d6b0a, 0x46e29f87, 0xa202a6f1,
357     0xae8ba572, 0x58271653, 0x9cd32701, 0x47c1d82b,
358     0x95f562a4, 0x87b9e8f3, 0xe309f115, 0x0a438c4c,
359     0x092645a5, 0x3c970fb5, 0xa04428b4, 0x5b42dfba,
360     0xb04e2ca6, 0xcdd274f7, 0x6fd0d206, 0x482d1241,
361     0xa7ade0d7, 0xd954716f, 0xceb7bd1e, 0x3b7ec7d6,
362     0x2edb85e2, 0x2a578468, 0xb4c22d2c, 0x490e55ed,
363     0x5d885075, 0xda31b886, 0x933fed6b, 0x44a411c2,
364   },
365   {
366     0x18c07830, 0x2305af46, 0xc67ef991, 0xe8136fcd,
367     0x874ca113, 0xb8a9626d, 0x01080502, 0x4f426e9e,
368     0x36adee6c, 0xa6590451, 0xd2debdb9, 0xf5fb06f7,
369     0x79ef80f2, 0x6f5fcede, 0x91fcef3f, 0x52aa07a4,
370     0x6027fdc0, 0xbc897665, 0x9baccd2b, 0x8e048c01,
371     0xa371155b, 0x0c603c18, 0x7bff8af6, 0x35b5e16a,
372     0x1de8693a, 0xe05347dd, 0xd7f6acb3, 0xc25eed99,
373     0x2e6d965c, 0x4b627a96, 0xfea321e1, 0x578216ae,
374     0x15a8412a, 0x779fb6ee, 0x37a5eb6e, 0xe57b56d7,
375     0x9f8cd923, 0xf0d317fd, 0x4a6a7f94, 0xda9e95a9,
376     0x58fa25b0, 0xc906ca8f, 0x29558d52, 0x0a502214,
377     0xb1e14f7f, 0xa0691a5d, 0x6b7fdad6, 0x855cab17,
378     0xbd817367, 0x5dd234ba, 0x10805020, 0xf4f303f5,
379     0xcb16c08b, 0x3eedc67c, 0x0528110a, 0x671fe6ce,
380     0xe47353d5, 0x2725bb4e, 0x41325882, 0x8b2c9d0b,
381     0xa7510153, 0x7dcf94fa, 0x95dcfb37, 0xd88e9fad,
382     0xfb8b30eb, 0xee2371c1, 0x7cc791f8, 0x6617e3cc,
383     0xdda68ea7, 0x17b84b2e, 0x4702468e, 0x9e84dc21,
384     0xca1ec589, 0x2d75995a, 0xbf917963, 0x07381b0e,
385     0xad012347, 0x5aea2fb4, 0x836cb51b, 0x3385ff66,
386     0x633ff2c6, 0x02100a04, 0xaa393849, 0x71afa8e2,
387     0xc80ecf8d, 0x19c87d32, 0x49727092, 0xd9869aaf,
388     0xf2c31df9, 0xe34b48db, 0x5be22ab6, 0x8834920d,
389     0x9aa4c829, 0x262dbe4c, 0x328dfa64, 0xb0e94a7d,
390     0xe91b6acf, 0x0f78331e, 0xd5e6a6b7, 0x8074ba1d,
391     0xbe997c61, 0xcd26de87, 0x34bde468, 0x487a7590,
392     0xffab24e3, 0x7af78ff4, 0x90f4ea3d, 0x5fc23ebe,
393     0x201da040, 0x6867d5d0, 0x1ad07234, 0xae192c41,
394     0xb4c95e75, 0x549a19a8, 0x93ece53b, 0x220daa44,
395     0x6407e9c8, 0xf1db12ff, 0x73bfa2e6, 0x12905a24,
396     0x403a5d80, 0x08402810, 0xc356e89b, 0xec337bc5,
397     0xdb9690ab, 0xa1611f5f, 0x8d1c8307, 0x3df5c97a,
398     0x97ccf133, 0x00000000, 0xcf36d483, 0x2b458756,
399     0x7697b3ec, 0x8264b019, 0xd6fea9b1, 0x1bd87736,
400     0xb5c15b77, 0xaf112943, 0x6a77dfd4, 0x50ba0da0,
401     0x45124c8a, 0xf3cb18fb, 0x309df060, 0xef2b74c3,
402     0x3fe5c37e, 0x55921caa, 0xa2791059, 0xea0365c9,
403     0x650fecca, 0xbab96869, 0x2f65935e, 0xc04ee79d,
404     0xdebe81a1, 0x1ce06c38, 0xfdbb2ee7, 0x4d52649a,
405     0x92e4e039, 0x758fbcea, 0x06301e0c, 0x8a249809,
406     0xb2f94079, 0xe66359d1, 0x0e70361c, 0x1ff8633e,
407     0x6237f7c4, 0xd4eea3b5, 0xa829324d, 0x96c4f431,
408     0xf99b3aef, 0xc566f697, 0x2535b14a, 0x59f220b2,
409     0x8454ae15, 0x72b7a7e4, 0x39d5dd72, 0x4c5a6198,
410     0x5eca3bbc, 0x78e785f0, 0x38ddd870, 0x8c148605,
411     0xd1c6b2bf, 0xa5410b57, 0xe2434dd9, 0x612ff8c2,
412     0xb3f1457b, 0x2115a542, 0x9c94d625, 0x1ef0663c,
413     0x43225286, 0xc776fc93, 0xfcb32be5, 0x04201408,
414     0x51b208a2, 0x99bcc72f, 0x6d4fc4da, 0x0d68391a,
415     0xfa8335e9, 0xdfb684a3, 0x7ed79bfc, 0x243db448,
416     0x3bc5d776, 0xab313d4b, 0xce3ed181, 0x11885522,
417     0x8f0c8903, 0x4e4a6b9c, 0xb7d15173, 0xeb0b60cb,
418     0x3cfdcc78, 0x817cbf1f, 0x94d4fe35, 0xf7eb0cf3,
419     0xb9a1676f, 0x13985f26, 0x2c7d9c58, 0xd3d6b8bb,
420     0xe76b5cd3, 0x6e57cbdc, 0xc46ef395, 0x03180f06,
421     0x568a13ac, 0x441a4988, 0x7fdf9efe, 0xa921374f,
422     0x2a4d8254, 0xbbb16d6b, 0xc146e29f, 0x53a202a6,
423     0xdcae8ba5, 0x0b582716, 0x9d9cd327, 0x6c47c1d8,
424     0x3195f562, 0x7487b9e8, 0xf6e309f1, 0x460a438c,
425     0xac092645, 0x893c970f, 0x14a04428, 0xe15b42df,
426     0x16b04e2c, 0x3acdd274, 0x696fd0d2, 0x09482d12,
427     0x70a7ade0, 0xb6d95471, 0xd0ceb7bd, 0xed3b7ec7,
428     0xcc2edb85, 0x422a5784, 0x98b4c22d, 0xa4490e55,
429     0x285d8850, 0x5cda31b8, 0xf8933fed, 0x8644a411,
430   },
431   {
432     0x6018c078, 0x8c2305af, 0x3fc67ef9, 0x87e8136f,
433     0x26874ca1, 0xdab8a962, 0x04010805, 0x214f426e,
434     0xd836adee, 0xa2a65904, 0x6fd2debd, 0xf3f5fb06,
435     0xf979ef80, 0xa16f5fce, 0x7e91fcef, 0x5552aa07,
436     0x9d6027fd, 0xcabc8976, 0x569baccd, 0x028e048c,
437     0xb6a37115, 0x300c603c, 0xf17bff8a, 0xd435b5e1,
438     0x741de869, 0xa7e05347, 0x7bd7f6ac, 0x2fc25eed,
439     0xb82e6d96, 0x314b627a, 0xdffea321, 0x41578216,
440     0x5415a841, 0xc1779fb6, 0xdc37a5eb, 0xb3e57b56,
441     0x469f8cd9, 0xe7f0d317, 0x354a6a7f, 0x4fda9e95,
442     0x7d58fa25, 0x03c906ca, 0xa429558d, 0x280a5022,
443     0xfeb1e14f, 0xbaa0691a, 0xb16b7fda, 0x2e855cab,
444     0xcebd8173, 0x695dd234, 0x40108050, 0xf7f4f303,
445     0x0bcb16c0, 0xf83eedc6, 0x14052811, 0x81671fe6,
446     0xb7e47353, 0x9c2725bb, 0x19413258, 0x168b2c9d,
447     0xa6a75101, 0xe97dcf94, 0x6e95dcfb, 0x47d88e9f,
448     0xcbfb8b30, 0x9fee2371, 0xed7cc791, 0x856617e3,
449     0x53dda68e, 0x5c17b84b, 0x01470246, 0x429e84dc,
450     0x0fca1ec5, 0xb42d7599, 0xc6bf9179, 0x1c07381b,
451     0x8ead0123, 0x755aea2f, 0x36836cb5, 0xcc3385ff,
452     0x91633ff2, 0x0802100a, 0x92aa3938, 0xd971afa8,
453     0x07c80ecf, 0x6419c87d, 0x39497270, 0x43d9869a,
454     0xeff2c31d, 0xabe34b48, 0x715be22a, 0x1a883492,
455     0x529aa4c8, 0x98262dbe, 0xc8328dfa, 0xfab0e94a,
456     0x83e91b6a, 0x3c0f7833, 0x73d5e6a6, 0x3a8074ba,
457     0xc2be997c, 0x13cd26de, 0xd034bde4, 0x3d487a75,
458     0xdbffab24, 0xf57af78f, 0x7a90f4ea, 0x615fc23e,
459     0x80201da0, 0xbd6867d5, 0x681ad072, 0x82ae192c,
460     0xeab4c95e, 0x4d549a19, 0x7693ece5, 0x88220daa,
461     0x8d6407e9, 0xe3f1db12, 0xd173bfa2, 0x4812905a,
462     0x1d403a5d, 0x20084028, 0x2bc356e8, 0x97ec337b,
463     0x4bdb9690, 0xbea1611f, 0x0e8d1c83, 0xf43df5c9,
464     0x6697ccf1, 0x00000000, 0x1bcf36d4, 0xac2b4587,
465     0xc57697b3, 0x328264b0, 0x7fd6fea9, 0x6c1bd877,
466     0xeeb5c15b, 0x86af1129, 0xb56a77df, 0x5d50ba0d,
467     0x0945124c, 0xebf3cb18, 0xc0309df0, 0x9bef2b74,
468     0xfc3fe5c3, 0x4955921c, 0xb2a27910, 0x8fea0365,
469     0x89650fec, 0xd2bab968, 0xbc2f6593, 0x27c04ee7,
470     0x5fdebe81, 0x701ce06c, 0xd3fdbb2e, 0x294d5264,
471     0x7292e4e0, 0xc9758fbc, 0x1806301e, 0x128a2498,
472     0xf2b2f940, 0xbfe66359, 0x380e7036, 0x7c1ff863,
473     0x956237f7, 0x77d4eea3, 0x9aa82932, 0x6296c4f4,
474     0xc3f99b3a, 0x33c566f6, 0x942535b1, 0x7959f220,
475     0x2a8454ae, 0xd572b7a7, 0xe439d5dd, 0x2d4c5a61,
476     0x655eca3b, 0xfd78e785, 0xe038ddd8, 0x0a8c1486,
477     0x63d1c6b2, 0xaea5410b, 0xafe2434d, 0x99612ff8,
478     0xf6b3f145, 0x842115a5, 0x4a9c94d6, 0x781ef066,
479     0x11432252, 0x3bc776fc, 0xd7fcb32b, 0x10042014,
480     0x5951b208, 0x5e99bcc7, 0xa96d4fc4, 0x340d6839,
481     0xcffa8335, 0x5bdfb684, 0xe57ed79b, 0x90243db4,
482     0xec3bc5d7, 0x96ab313d, 0x1fce3ed1, 0x44118855,
483     0x068f0c89, 0x254e4a6b, 0xe6b7d151, 0x8beb0b60,
484     0xf03cfdcc, 0x3e817cbf, 0x6a94d4fe, 0xfbf7eb0c,
485     0xdeb9a167, 0x4c13985f, 0xb02c7d9c, 0x6bd3d6b8,
486     0xbbe76b5c, 0xa56e57cb, 0x37c46ef3, 0x0c03180f,
487     0x45568a13, 0x0d441a49, 0xe17fdf9e, 0x9ea92137,
488     0xa82a4d82, 0xd6bbb16d, 0x23c146e2, 0x5153a202,
489     0x57dcae8b, 0x2c0b5827, 0x4e9d9cd3, 0xad6c47c1,
490     0xc43195f5, 0xcd7487b9, 0xfff6e309, 0x05460a43,
491     0x8aac0926, 0x1e893c97, 0x5014a044, 0xa3e15b42,
492     0x5816b04e, 0xe83acdd2, 0xb9696fd0, 0x2409482d,
493     0xdd70a7ad, 0xe2b6d954, 0x67d0ceb7, 0x93ed3b7e,
494     0x17cc2edb, 0x15422a57, 0x5a98b4c2, 0xaaa4490e,
495     0xa0285d88, 0x6d5cda31, 0xc7f8933f, 0x228644a4,
496   },
497   {
498     0x186018c0, 0x238c2305, 0xc63fc67e, 0xe887e813,
499     0x8726874c, 0xb8dab8a9, 0x01040108, 0x4f214f42,
500     0x36d836ad, 0xa6a2a659, 0xd26fd2de, 0xf5f3f5fb,
501     0x79f979ef, 0x6fa16f5f, 0x917e91fc, 0x525552aa,
502     0x609d6027, 0xbccabc89, 0x9b569bac, 0x8e028e04,
503     0xa3b6a371, 0x0c300c60, 0x7bf17bff, 0x35d435b5,
504     0x1d741de8, 0xe0a7e053, 0xd77bd7f6, 0xc22fc25e,
505     0x2eb82e6d, 0x4b314b62, 0xfedffea3, 0x57415782,
506     0x155415a8, 0x77c1779f, 0x37dc37a5, 0xe5b3e57b,
507     0x9f469f8c, 0xf0e7f0d3, 0x4a354a6a, 0xda4fda9e,
508     0x587d58fa, 0xc903c906, 0x29a42955, 0x0a280a50,
509     0xb1feb1e1, 0xa0baa069, 0x6bb16b7f, 0x852e855c,
510     0xbdcebd81, 0x5d695dd2, 0x10401080, 0xf4f7f4f3,
511     0xcb0bcb16, 0x3ef83eed, 0x05140528, 0x6781671f,
512     0xe4b7e473, 0x279c2725, 0x41194132, 0x8b168b2c,
513     0xa7a6a751, 0x7de97dcf, 0x956e95dc, 0xd847d88e,
514     0xfbcbfb8b, 0xee9fee23, 0x7ced7cc7, 0x66856617,
515     0xdd53dda6, 0x175c17b8, 0x47014702, 0x9e429e84,
516     0xca0fca1e, 0x2db42d75, 0xbfc6bf91, 0x071c0738,
517     0xad8ead01, 0x5a755aea, 0x8336836c, 0x33cc3385,
518     0x6391633f, 0x02080210, 0xaa92aa39, 0x71d971af,
519     0xc807c80e, 0x196419c8, 0x49394972, 0xd943d986,
520     0xf2eff2c3, 0xe3abe34b, 0x5b715be2, 0x881a8834,
521     0x9a529aa4, 0x2698262d, 0x32c8328d, 0xb0fab0e9,
522     0xe983e91b, 0x0f3c0f78, 0xd573d5e6, 0x803a8074,
523     0xbec2be99, 0xcd13cd26, 0x34d034bd, 0x483d487a,
524     0xffdbffab, 0x7af57af7, 0x907a90f4, 0x5f615fc2,
525     0x2080201d, 0x68bd6867, 0x1a681ad0, 0xae82ae19,
526     0xb4eab4c9, 0x544d549a, 0x937693ec, 0x2288220d,
527     0x648d6407, 0xf1e3f1db, 0x73d173bf, 0x12481290,
528     0x401d403a, 0x08200840, 0xc32bc356, 0xec97ec33,
529     0xdb4bdb96, 0xa1bea161, 0x8d0e8d1c, 0x3df43df5,
530     0x976697cc, 0x00000000, 0xcf1bcf36, 0x2bac2b45,
531     0x76c57697, 0x82328264, 0xd67fd6fe, 0x1b6c1bd8,
532     0xb5eeb5c1, 0xaf86af11, 0x6ab56a77, 0x505d50ba,
533     0x45094512, 0xf3ebf3cb, 0x30c0309d, 0xef9bef2b,
534     0x3ffc3fe5, 0x55495592, 0xa2b2a279, 0xea8fea03,
535     0x6589650f, 0xbad2bab9, 0x2fbc2f65, 0xc027c04e,
536     0xde5fdebe, 0x1c701ce0, 0xfdd3fdbb, 0x4d294d52,
537     0x927292e4, 0x75c9758f, 0x06180630, 0x8a128a24,
538     0xb2f2b2f9, 0xe6bfe663, 0x0e380e70, 0x1f7c1ff8,
539     0x62956237, 0xd477d4ee, 0xa89aa829, 0x966296c4,
540     0xf9c3f99b, 0xc533c566, 0x25942535, 0x597959f2,
541     0x842a8454, 0x72d572b7, 0x39e439d5, 0x4c2d4c5a,
542     0x5e655eca, 0x78fd78e7, 0x38e038dd, 0x8c0a8c14,
543     0xd163d1c6, 0xa5aea541, 0xe2afe243, 0x6199612f,
544     0xb3f6b3f1, 0x21842115, 0x9c4a9c94, 0x1e781ef0,
545     0x43114322, 0xc73bc776, 0xfcd7fcb3, 0x04100420,
546     0x515951b2, 0x995e99bc, 0x6da96d4f, 0x0d340d68,
547     0xfacffa83, 0xdf5bdfb6, 0x7ee57ed7, 0x2490243d,
548     0x3bec3bc5, 0xab96ab31, 0xce1fce3e, 0x11441188,
549     0x8f068f0c, 0x4e254e4a, 0xb7e6b7d1, 0xeb8beb0b,
550     0x3cf03cfd, 0x813e817c, 0x946a94d4, 0xf7fbf7eb,
551     0xb9deb9a1, 0x134c1398, 0x2cb02c7d, 0xd36bd3d6,
552     0xe7bbe76b, 0x6ea56e57, 0xc437c46e, 0x030c0318,
553     0x5645568a, 0x440d441a, 0x7fe17fdf, 0xa99ea921,
554     0x2aa82a4d, 0xbbd6bbb1, 0xc123c146, 0x535153a2,
555     0xdc57dcae, 0x0b2c0b58, 0x9d4e9d9c, 0x6cad6c47,
556     0x31c43195, 0x74cd7487, 0xf6fff6e3, 0x4605460a,
557     0xac8aac09, 0x891e893c, 0x145014a0, 0xe1a3e15b,
558     0x165816b0, 0x3ae83acd, 0x69b9696f, 0x09240948,
559     0x70dd70a7, 0xb6e2b6d9, 0xd067d0ce, 0xed93ed3b,
560     0xcc17cc2e, 0x4215422a, 0x985a98b4, 0xa4aaa449,
561     0x28a0285d, 0x5c6d5cda, 0xf8c7f893, 0x86228644,
562   }
563 };
564
565 __constant u32 Cl[8][256] =
566 {
567   {
568     0xc07830d8, 0x05af4626, 0x7ef991b8, 0x136fcdfb,
569     0x4ca113cb, 0xa9626d11, 0x08050209, 0x426e9e0d,
570     0xadee6c9b, 0x590451ff, 0xdebdb90c, 0xfb06f70e,
571     0xef80f296, 0x5fcede30, 0xfcef3f6d, 0xaa07a4f8,
572     0x27fdc047, 0x89766535, 0xaccd2b37, 0x048c018a,
573     0x71155bd2, 0x603c186c, 0xff8af684, 0xb5e16a80,
574     0xe8693af5, 0x5347ddb3, 0xf6acb321, 0x5eed999c,
575     0x6d965c43, 0x627a9629, 0xa321e15d, 0x8216aed5,
576     0xa8412abd, 0x9fb6eee8, 0xa5eb6e92, 0x7b56d79e,
577     0x8cd92313, 0xd317fd23, 0x6a7f9420, 0x9e95a944,
578     0xfa25b0a2, 0x06ca8fcf, 0x558d527c, 0x5022145a,
579     0xe14f7f50, 0x691a5dc9, 0x7fdad614, 0x5cab17d9,
580     0x8173673c, 0xd234ba8f, 0x80502090, 0xf303f507,
581     0x16c08bdd, 0xedc67cd3, 0x28110a2d, 0x1fe6ce78,
582     0x7353d597, 0x25bb4e02, 0x32588273, 0x2c9d0ba7,
583     0x510153f6, 0xcf94fab2, 0xdcfb3749, 0x8e9fad56,
584     0x8b30eb70, 0x2371c1cd, 0xc791f8bb, 0x17e3cc71,
585     0xa68ea77b, 0xb84b2eaf, 0x02468e45, 0x84dc211a,
586     0x1ec589d4, 0x75995a58, 0x9179632e, 0x381b0e3f,
587     0x012347ac, 0xea2fb4b0, 0x6cb51bef, 0x85ff66b6,
588     0x3ff2c65c, 0x100a0412, 0x39384993, 0xafa8e2de,
589     0x0ecf8dc6, 0xc87d32d1, 0x7270923b, 0x869aaf5f,
590     0xc31df931, 0x4b48dba8, 0xe22ab6b9, 0x34920dbc,
591     0xa4c8293e, 0x2dbe4c0b, 0x8dfa64bf, 0xe94a7d59,
592     0x1b6acff2, 0x78331e77, 0xe6a6b733, 0x74ba1df4,
593     0x997c6127, 0x26de87eb, 0xbde46889, 0x7a759032,
594     0xab24e354, 0xf78ff48d, 0xf4ea3d64, 0xc23ebe9d,
595     0x1da0403d, 0x67d5d00f, 0xd07234ca, 0x192c41b7,
596     0xc95e757d, 0x9a19a8ce, 0xece53b7f, 0x0daa442f,
597     0x07e9c863, 0xdb12ff2a, 0xbfa2e6cc, 0x905a2482,
598     0x3a5d807a, 0x40281048, 0x56e89b95, 0x337bc5df,
599     0x9690ab4d, 0x611f5fc0, 0x1c830791, 0xf5c97ac8,
600     0xccf1335b, 0x00000000, 0x36d483f9, 0x4587566e,
601     0x97b3ece1, 0x64b019e6, 0xfea9b128, 0xd87736c3,
602     0xc15b7774, 0x112943be, 0x77dfd41d, 0xba0da0ea,
603     0x124c8a57, 0xcb18fb38, 0x9df060ad, 0x2b74c3c4,
604     0xe5c37eda, 0x921caac7, 0x791059db, 0x0365c9e9,
605     0x0fecca6a, 0xb9686903, 0x65935e4a, 0x4ee79d8e,
606     0xbe81a160, 0xe06c38fc, 0xbb2ee746, 0x52649a1f,
607     0xe4e03976, 0x8fbceafa, 0x301e0c36, 0x249809ae,
608     0xf940794b, 0x6359d185, 0x70361c7e, 0xf8633ee7,
609     0x37f7c455, 0xeea3b53a, 0x29324d81, 0xc4f43152,
610     0x9b3aef62, 0x66f697a3, 0x35b14a10, 0xf220b2ab,
611     0x54ae15d0, 0xb7a7e4c5, 0xd5dd72ec, 0x5a619816,
612     0xca3bbc94, 0xe785f09f, 0xddd870e5, 0x14860598,
613     0xc6b2bf17, 0x410b57e4, 0x434dd9a1, 0x2ff8c24e,
614     0xf1457b42, 0x15a54234, 0x94d62508, 0xf0663cee,
615     0x22528661, 0x76fc93b1, 0xb32be54f, 0x20140824,
616     0xb208a2e3, 0xbcc72f25, 0x4fc4da22, 0x68391a65,
617     0x8335e979, 0xb684a369, 0xd79bfca9, 0x3db44819,
618     0xc5d776fe, 0x313d4b9a, 0x3ed181f0, 0x88552299,
619     0x0c890383, 0x4a6b9c04, 0xd1517366, 0x0b60cbe0,
620     0xfdcc78c1, 0x7cbf1ffd, 0xd4fe3540, 0xeb0cf31c,
621     0xa1676f18, 0x985f268b, 0x7d9c5851, 0xd6b8bb05,
622     0x6b5cd38c, 0x57cbdc39, 0x6ef395aa, 0x180f061b,
623     0x8a13acdc, 0x1a49885e, 0xdf9efea0, 0x21374f88,
624     0x4d825467, 0xb16d6b0a, 0x46e29f87, 0xa202a6f1,
625     0xae8ba572, 0x58271653, 0x9cd32701, 0x47c1d82b,
626     0x95f562a4, 0x87b9e8f3, 0xe309f115, 0x0a438c4c,
627     0x092645a5, 0x3c970fb5, 0xa04428b4, 0x5b42dfba,
628     0xb04e2ca6, 0xcdd274f7, 0x6fd0d206, 0x482d1241,
629     0xa7ade0d7, 0xd954716f, 0xceb7bd1e, 0x3b7ec7d6,
630     0x2edb85e2, 0x2a578468, 0xb4c22d2c, 0x490e55ed,
631     0x5d885075, 0xda31b886, 0x933fed6b, 0x44a411c2,
632   },
633   {
634     0x18c07830, 0x2305af46, 0xc67ef991, 0xe8136fcd,
635     0x874ca113, 0xb8a9626d, 0x01080502, 0x4f426e9e,
636     0x36adee6c, 0xa6590451, 0xd2debdb9, 0xf5fb06f7,
637     0x79ef80f2, 0x6f5fcede, 0x91fcef3f, 0x52aa07a4,
638     0x6027fdc0, 0xbc897665, 0x9baccd2b, 0x8e048c01,
639     0xa371155b, 0x0c603c18, 0x7bff8af6, 0x35b5e16a,
640     0x1de8693a, 0xe05347dd, 0xd7f6acb3, 0xc25eed99,
641     0x2e6d965c, 0x4b627a96, 0xfea321e1, 0x578216ae,
642     0x15a8412a, 0x779fb6ee, 0x37a5eb6e, 0xe57b56d7,
643     0x9f8cd923, 0xf0d317fd, 0x4a6a7f94, 0xda9e95a9,
644     0x58fa25b0, 0xc906ca8f, 0x29558d52, 0x0a502214,
645     0xb1e14f7f, 0xa0691a5d, 0x6b7fdad6, 0x855cab17,
646     0xbd817367, 0x5dd234ba, 0x10805020, 0xf4f303f5,
647     0xcb16c08b, 0x3eedc67c, 0x0528110a, 0x671fe6ce,
648     0xe47353d5, 0x2725bb4e, 0x41325882, 0x8b2c9d0b,
649     0xa7510153, 0x7dcf94fa, 0x95dcfb37, 0xd88e9fad,
650     0xfb8b30eb, 0xee2371c1, 0x7cc791f8, 0x6617e3cc,
651     0xdda68ea7, 0x17b84b2e, 0x4702468e, 0x9e84dc21,
652     0xca1ec589, 0x2d75995a, 0xbf917963, 0x07381b0e,
653     0xad012347, 0x5aea2fb4, 0x836cb51b, 0x3385ff66,
654     0x633ff2c6, 0x02100a04, 0xaa393849, 0x71afa8e2,
655     0xc80ecf8d, 0x19c87d32, 0x49727092, 0xd9869aaf,
656     0xf2c31df9, 0xe34b48db, 0x5be22ab6, 0x8834920d,
657     0x9aa4c829, 0x262dbe4c, 0x328dfa64, 0xb0e94a7d,
658     0xe91b6acf, 0x0f78331e, 0xd5e6a6b7, 0x8074ba1d,
659     0xbe997c61, 0xcd26de87, 0x34bde468, 0x487a7590,
660     0xffab24e3, 0x7af78ff4, 0x90f4ea3d, 0x5fc23ebe,
661     0x201da040, 0x6867d5d0, 0x1ad07234, 0xae192c41,
662     0xb4c95e75, 0x549a19a8, 0x93ece53b, 0x220daa44,
663     0x6407e9c8, 0xf1db12ff, 0x73bfa2e6, 0x12905a24,
664     0x403a5d80, 0x08402810, 0xc356e89b, 0xec337bc5,
665     0xdb9690ab, 0xa1611f5f, 0x8d1c8307, 0x3df5c97a,
666     0x97ccf133, 0x00000000, 0xcf36d483, 0x2b458756,
667     0x7697b3ec, 0x8264b019, 0xd6fea9b1, 0x1bd87736,
668     0xb5c15b77, 0xaf112943, 0x6a77dfd4, 0x50ba0da0,
669     0x45124c8a, 0xf3cb18fb, 0x309df060, 0xef2b74c3,
670     0x3fe5c37e, 0x55921caa, 0xa2791059, 0xea0365c9,
671     0x650fecca, 0xbab96869, 0x2f65935e, 0xc04ee79d,
672     0xdebe81a1, 0x1ce06c38, 0xfdbb2ee7, 0x4d52649a,
673     0x92e4e039, 0x758fbcea, 0x06301e0c, 0x8a249809,
674     0xb2f94079, 0xe66359d1, 0x0e70361c, 0x1ff8633e,
675     0x6237f7c4, 0xd4eea3b5, 0xa829324d, 0x96c4f431,
676     0xf99b3aef, 0xc566f697, 0x2535b14a, 0x59f220b2,
677     0x8454ae15, 0x72b7a7e4, 0x39d5dd72, 0x4c5a6198,
678     0x5eca3bbc, 0x78e785f0, 0x38ddd870, 0x8c148605,
679     0xd1c6b2bf, 0xa5410b57, 0xe2434dd9, 0x612ff8c2,
680     0xb3f1457b, 0x2115a542, 0x9c94d625, 0x1ef0663c,
681     0x43225286, 0xc776fc93, 0xfcb32be5, 0x04201408,
682     0x51b208a2, 0x99bcc72f, 0x6d4fc4da, 0x0d68391a,
683     0xfa8335e9, 0xdfb684a3, 0x7ed79bfc, 0x243db448,
684     0x3bc5d776, 0xab313d4b, 0xce3ed181, 0x11885522,
685     0x8f0c8903, 0x4e4a6b9c, 0xb7d15173, 0xeb0b60cb,
686     0x3cfdcc78, 0x817cbf1f, 0x94d4fe35, 0xf7eb0cf3,
687     0xb9a1676f, 0x13985f26, 0x2c7d9c58, 0xd3d6b8bb,
688     0xe76b5cd3, 0x6e57cbdc, 0xc46ef395, 0x03180f06,
689     0x568a13ac, 0x441a4988, 0x7fdf9efe, 0xa921374f,
690     0x2a4d8254, 0xbbb16d6b, 0xc146e29f, 0x53a202a6,
691     0xdcae8ba5, 0x0b582716, 0x9d9cd327, 0x6c47c1d8,
692     0x3195f562, 0x7487b9e8, 0xf6e309f1, 0x460a438c,
693     0xac092645, 0x893c970f, 0x14a04428, 0xe15b42df,
694     0x16b04e2c, 0x3acdd274, 0x696fd0d2, 0x09482d12,
695     0x70a7ade0, 0xb6d95471, 0xd0ceb7bd, 0xed3b7ec7,
696     0xcc2edb85, 0x422a5784, 0x98b4c22d, 0xa4490e55,
697     0x285d8850, 0x5cda31b8, 0xf8933fed, 0x8644a411,
698   },
699   {
700     0x6018c078, 0x8c2305af, 0x3fc67ef9, 0x87e8136f,
701     0x26874ca1, 0xdab8a962, 0x04010805, 0x214f426e,
702     0xd836adee, 0xa2a65904, 0x6fd2debd, 0xf3f5fb06,
703     0xf979ef80, 0xa16f5fce, 0x7e91fcef, 0x5552aa07,
704     0x9d6027fd, 0xcabc8976, 0x569baccd, 0x028e048c,
705     0xb6a37115, 0x300c603c, 0xf17bff8a, 0xd435b5e1,
706     0x741de869, 0xa7e05347, 0x7bd7f6ac, 0x2fc25eed,
707     0xb82e6d96, 0x314b627a, 0xdffea321, 0x41578216,
708     0x5415a841, 0xc1779fb6, 0xdc37a5eb, 0xb3e57b56,
709     0x469f8cd9, 0xe7f0d317, 0x354a6a7f, 0x4fda9e95,
710     0x7d58fa25, 0x03c906ca, 0xa429558d, 0x280a5022,
711     0xfeb1e14f, 0xbaa0691a, 0xb16b7fda, 0x2e855cab,
712     0xcebd8173, 0x695dd234, 0x40108050, 0xf7f4f303,
713     0x0bcb16c0, 0xf83eedc6, 0x14052811, 0x81671fe6,
714     0xb7e47353, 0x9c2725bb, 0x19413258, 0x168b2c9d,
715     0xa6a75101, 0xe97dcf94, 0x6e95dcfb, 0x47d88e9f,
716     0xcbfb8b30, 0x9fee2371, 0xed7cc791, 0x856617e3,
717     0x53dda68e, 0x5c17b84b, 0x01470246, 0x429e84dc,
718     0x0fca1ec5, 0xb42d7599, 0xc6bf9179, 0x1c07381b,
719     0x8ead0123, 0x755aea2f, 0x36836cb5, 0xcc3385ff,
720     0x91633ff2, 0x0802100a, 0x92aa3938, 0xd971afa8,
721     0x07c80ecf, 0x6419c87d, 0x39497270, 0x43d9869a,
722     0xeff2c31d, 0xabe34b48, 0x715be22a, 0x1a883492,
723     0x529aa4c8, 0x98262dbe, 0xc8328dfa, 0xfab0e94a,
724     0x83e91b6a, 0x3c0f7833, 0x73d5e6a6, 0x3a8074ba,
725     0xc2be997c, 0x13cd26de, 0xd034bde4, 0x3d487a75,
726     0xdbffab24, 0xf57af78f, 0x7a90f4ea, 0x615fc23e,
727     0x80201da0, 0xbd6867d5, 0x681ad072, 0x82ae192c,
728     0xeab4c95e, 0x4d549a19, 0x7693ece5, 0x88220daa,
729     0x8d6407e9, 0xe3f1db12, 0xd173bfa2, 0x4812905a,
730     0x1d403a5d, 0x20084028, 0x2bc356e8, 0x97ec337b,
731     0x4bdb9690, 0xbea1611f, 0x0e8d1c83, 0xf43df5c9,
732     0x6697ccf1, 0x00000000, 0x1bcf36d4, 0xac2b4587,
733     0xc57697b3, 0x328264b0, 0x7fd6fea9, 0x6c1bd877,
734     0xeeb5c15b, 0x86af1129, 0xb56a77df, 0x5d50ba0d,
735     0x0945124c, 0xebf3cb18, 0xc0309df0, 0x9bef2b74,
736     0xfc3fe5c3, 0x4955921c, 0xb2a27910, 0x8fea0365,
737     0x89650fec, 0xd2bab968, 0xbc2f6593, 0x27c04ee7,
738     0x5fdebe81, 0x701ce06c, 0xd3fdbb2e, 0x294d5264,
739     0x7292e4e0, 0xc9758fbc, 0x1806301e, 0x128a2498,
740     0xf2b2f940, 0xbfe66359, 0x380e7036, 0x7c1ff863,
741     0x956237f7, 0x77d4eea3, 0x9aa82932, 0x6296c4f4,
742     0xc3f99b3a, 0x33c566f6, 0x942535b1, 0x7959f220,
743     0x2a8454ae, 0xd572b7a7, 0xe439d5dd, 0x2d4c5a61,
744     0x655eca3b, 0xfd78e785, 0xe038ddd8, 0x0a8c1486,
745     0x63d1c6b2, 0xaea5410b, 0xafe2434d, 0x99612ff8,
746     0xf6b3f145, 0x842115a5, 0x4a9c94d6, 0x781ef066,
747     0x11432252, 0x3bc776fc, 0xd7fcb32b, 0x10042014,
748     0x5951b208, 0x5e99bcc7, 0xa96d4fc4, 0x340d6839,
749     0xcffa8335, 0x5bdfb684, 0xe57ed79b, 0x90243db4,
750     0xec3bc5d7, 0x96ab313d, 0x1fce3ed1, 0x44118855,
751     0x068f0c89, 0x254e4a6b, 0xe6b7d151, 0x8beb0b60,
752     0xf03cfdcc, 0x3e817cbf, 0x6a94d4fe, 0xfbf7eb0c,
753     0xdeb9a167, 0x4c13985f, 0xb02c7d9c, 0x6bd3d6b8,
754     0xbbe76b5c, 0xa56e57cb, 0x37c46ef3, 0x0c03180f,
755     0x45568a13, 0x0d441a49, 0xe17fdf9e, 0x9ea92137,
756     0xa82a4d82, 0xd6bbb16d, 0x23c146e2, 0x5153a202,
757     0x57dcae8b, 0x2c0b5827, 0x4e9d9cd3, 0xad6c47c1,
758     0xc43195f5, 0xcd7487b9, 0xfff6e309, 0x05460a43,
759     0x8aac0926, 0x1e893c97, 0x5014a044, 0xa3e15b42,
760     0x5816b04e, 0xe83acdd2, 0xb9696fd0, 0x2409482d,
761     0xdd70a7ad, 0xe2b6d954, 0x67d0ceb7, 0x93ed3b7e,
762     0x17cc2edb, 0x15422a57, 0x5a98b4c2, 0xaaa4490e,
763     0xa0285d88, 0x6d5cda31, 0xc7f8933f, 0x228644a4,
764   },
765   {
766     0x186018c0, 0x238c2305, 0xc63fc67e, 0xe887e813,
767     0x8726874c, 0xb8dab8a9, 0x01040108, 0x4f214f42,
768     0x36d836ad, 0xa6a2a659, 0xd26fd2de, 0xf5f3f5fb,
769     0x79f979ef, 0x6fa16f5f, 0x917e91fc, 0x525552aa,
770     0x609d6027, 0xbccabc89, 0x9b569bac, 0x8e028e04,
771     0xa3b6a371, 0x0c300c60, 0x7bf17bff, 0x35d435b5,
772     0x1d741de8, 0xe0a7e053, 0xd77bd7f6, 0xc22fc25e,
773     0x2eb82e6d, 0x4b314b62, 0xfedffea3, 0x57415782,
774     0x155415a8, 0x77c1779f, 0x37dc37a5, 0xe5b3e57b,
775     0x9f469f8c, 0xf0e7f0d3, 0x4a354a6a, 0xda4fda9e,
776     0x587d58fa, 0xc903c906, 0x29a42955, 0x0a280a50,
777     0xb1feb1e1, 0xa0baa069, 0x6bb16b7f, 0x852e855c,
778     0xbdcebd81, 0x5d695dd2, 0x10401080, 0xf4f7f4f3,
779     0xcb0bcb16, 0x3ef83eed, 0x05140528, 0x6781671f,
780     0xe4b7e473, 0x279c2725, 0x41194132, 0x8b168b2c,
781     0xa7a6a751, 0x7de97dcf, 0x956e95dc, 0xd847d88e,
782     0xfbcbfb8b, 0xee9fee23, 0x7ced7cc7, 0x66856617,
783     0xdd53dda6, 0x175c17b8, 0x47014702, 0x9e429e84,
784     0xca0fca1e, 0x2db42d75, 0xbfc6bf91, 0x071c0738,
785     0xad8ead01, 0x5a755aea, 0x8336836c, 0x33cc3385,
786     0x6391633f, 0x02080210, 0xaa92aa39, 0x71d971af,
787     0xc807c80e, 0x196419c8, 0x49394972, 0xd943d986,
788     0xf2eff2c3, 0xe3abe34b, 0x5b715be2, 0x881a8834,
789     0x9a529aa4, 0x2698262d, 0x32c8328d, 0xb0fab0e9,
790     0xe983e91b, 0x0f3c0f78, 0xd573d5e6, 0x803a8074,
791     0xbec2be99, 0xcd13cd26, 0x34d034bd, 0x483d487a,
792     0xffdbffab, 0x7af57af7, 0x907a90f4, 0x5f615fc2,
793     0x2080201d, 0x68bd6867, 0x1a681ad0, 0xae82ae19,
794     0xb4eab4c9, 0x544d549a, 0x937693ec, 0x2288220d,
795     0x648d6407, 0xf1e3f1db, 0x73d173bf, 0x12481290,
796     0x401d403a, 0x08200840, 0xc32bc356, 0xec97ec33,
797     0xdb4bdb96, 0xa1bea161, 0x8d0e8d1c, 0x3df43df5,
798     0x976697cc, 0x00000000, 0xcf1bcf36, 0x2bac2b45,
799     0x76c57697, 0x82328264, 0xd67fd6fe, 0x1b6c1bd8,
800     0xb5eeb5c1, 0xaf86af11, 0x6ab56a77, 0x505d50ba,
801     0x45094512, 0xf3ebf3cb, 0x30c0309d, 0xef9bef2b,
802     0x3ffc3fe5, 0x55495592, 0xa2b2a279, 0xea8fea03,
803     0x6589650f, 0xbad2bab9, 0x2fbc2f65, 0xc027c04e,
804     0xde5fdebe, 0x1c701ce0, 0xfdd3fdbb, 0x4d294d52,
805     0x927292e4, 0x75c9758f, 0x06180630, 0x8a128a24,
806     0xb2f2b2f9, 0xe6bfe663, 0x0e380e70, 0x1f7c1ff8,
807     0x62956237, 0xd477d4ee, 0xa89aa829, 0x966296c4,
808     0xf9c3f99b, 0xc533c566, 0x25942535, 0x597959f2,
809     0x842a8454, 0x72d572b7, 0x39e439d5, 0x4c2d4c5a,
810     0x5e655eca, 0x78fd78e7, 0x38e038dd, 0x8c0a8c14,
811     0xd163d1c6, 0xa5aea541, 0xe2afe243, 0x6199612f,
812     0xb3f6b3f1, 0x21842115, 0x9c4a9c94, 0x1e781ef0,
813     0x43114322, 0xc73bc776, 0xfcd7fcb3, 0x04100420,
814     0x515951b2, 0x995e99bc, 0x6da96d4f, 0x0d340d68,
815     0xfacffa83, 0xdf5bdfb6, 0x7ee57ed7, 0x2490243d,
816     0x3bec3bc5, 0xab96ab31, 0xce1fce3e, 0x11441188,
817     0x8f068f0c, 0x4e254e4a, 0xb7e6b7d1, 0xeb8beb0b,
818     0x3cf03cfd, 0x813e817c, 0x946a94d4, 0xf7fbf7eb,
819     0xb9deb9a1, 0x134c1398, 0x2cb02c7d, 0xd36bd3d6,
820     0xe7bbe76b, 0x6ea56e57, 0xc437c46e, 0x030c0318,
821     0x5645568a, 0x440d441a, 0x7fe17fdf, 0xa99ea921,
822     0x2aa82a4d, 0xbbd6bbb1, 0xc123c146, 0x535153a2,
823     0xdc57dcae, 0x0b2c0b58, 0x9d4e9d9c, 0x6cad6c47,
824     0x31c43195, 0x74cd7487, 0xf6fff6e3, 0x4605460a,
825     0xac8aac09, 0x891e893c, 0x145014a0, 0xe1a3e15b,
826     0x165816b0, 0x3ae83acd, 0x69b9696f, 0x09240948,
827     0x70dd70a7, 0xb6e2b6d9, 0xd067d0ce, 0xed93ed3b,
828     0xcc17cc2e, 0x4215422a, 0x985a98b4, 0xa4aaa449,
829     0x28a0285d, 0x5c6d5cda, 0xf8c7f893, 0x86228644,
830   },
831   {
832     0x18186018, 0x23238c23, 0xc6c63fc6, 0xe8e887e8,
833     0x87872687, 0xb8b8dab8, 0x01010401, 0x4f4f214f,
834     0x3636d836, 0xa6a6a2a6, 0xd2d26fd2, 0xf5f5f3f5,
835     0x7979f979, 0x6f6fa16f, 0x91917e91, 0x52525552,
836     0x60609d60, 0xbcbccabc, 0x9b9b569b, 0x8e8e028e,
837     0xa3a3b6a3, 0x0c0c300c, 0x7b7bf17b, 0x3535d435,
838     0x1d1d741d, 0xe0e0a7e0, 0xd7d77bd7, 0xc2c22fc2,
839     0x2e2eb82e, 0x4b4b314b, 0xfefedffe, 0x57574157,
840     0x15155415, 0x7777c177, 0x3737dc37, 0xe5e5b3e5,
841     0x9f9f469f, 0xf0f0e7f0, 0x4a4a354a, 0xdada4fda,
842     0x58587d58, 0xc9c903c9, 0x2929a429, 0x0a0a280a,
843     0xb1b1feb1, 0xa0a0baa0, 0x6b6bb16b, 0x85852e85,
844     0xbdbdcebd, 0x5d5d695d, 0x10104010, 0xf4f4f7f4,
845     0xcbcb0bcb, 0x3e3ef83e, 0x05051405, 0x67678167,
846     0xe4e4b7e4, 0x27279c27, 0x41411941, 0x8b8b168b,
847     0xa7a7a6a7, 0x7d7de97d, 0x95956e95, 0xd8d847d8,
848     0xfbfbcbfb, 0xeeee9fee, 0x7c7ced7c, 0x66668566,
849     0xdddd53dd, 0x17175c17, 0x47470147, 0x9e9e429e,
850     0xcaca0fca, 0x2d2db42d, 0xbfbfc6bf, 0x07071c07,
851     0xadad8ead, 0x5a5a755a, 0x83833683, 0x3333cc33,
852     0x63639163, 0x02020802, 0xaaaa92aa, 0x7171d971,
853     0xc8c807c8, 0x19196419, 0x49493949, 0xd9d943d9,
854     0xf2f2eff2, 0xe3e3abe3, 0x5b5b715b, 0x88881a88,
855     0x9a9a529a, 0x26269826, 0x3232c832, 0xb0b0fab0,
856     0xe9e983e9, 0x0f0f3c0f, 0xd5d573d5, 0x80803a80,
857     0xbebec2be, 0xcdcd13cd, 0x3434d034, 0x48483d48,
858     0xffffdbff, 0x7a7af57a, 0x90907a90, 0x5f5f615f,
859     0x20208020, 0x6868bd68, 0x1a1a681a, 0xaeae82ae,
860     0xb4b4eab4, 0x54544d54, 0x93937693, 0x22228822,
861     0x64648d64, 0xf1f1e3f1, 0x7373d173, 0x12124812,
862     0x40401d40, 0x08082008, 0xc3c32bc3, 0xecec97ec,
863     0xdbdb4bdb, 0xa1a1bea1, 0x8d8d0e8d, 0x3d3df43d,
864     0x97976697, 0x00000000, 0xcfcf1bcf, 0x2b2bac2b,
865     0x7676c576, 0x82823282, 0xd6d67fd6, 0x1b1b6c1b,
866     0xb5b5eeb5, 0xafaf86af, 0x6a6ab56a, 0x50505d50,
867     0x45450945, 0xf3f3ebf3, 0x3030c030, 0xefef9bef,
868     0x3f3ffc3f, 0x55554955, 0xa2a2b2a2, 0xeaea8fea,
869     0x65658965, 0xbabad2ba, 0x2f2fbc2f, 0xc0c027c0,
870     0xdede5fde, 0x1c1c701c, 0xfdfdd3fd, 0x4d4d294d,
871     0x92927292, 0x7575c975, 0x06061806, 0x8a8a128a,
872     0xb2b2f2b2, 0xe6e6bfe6, 0x0e0e380e, 0x1f1f7c1f,
873     0x62629562, 0xd4d477d4, 0xa8a89aa8, 0x96966296,
874     0xf9f9c3f9, 0xc5c533c5, 0x25259425, 0x59597959,
875     0x84842a84, 0x7272d572, 0x3939e439, 0x4c4c2d4c,
876     0x5e5e655e, 0x7878fd78, 0x3838e038, 0x8c8c0a8c,
877     0xd1d163d1, 0xa5a5aea5, 0xe2e2afe2, 0x61619961,
878     0xb3b3f6b3, 0x21218421, 0x9c9c4a9c, 0x1e1e781e,
879     0x43431143, 0xc7c73bc7, 0xfcfcd7fc, 0x04041004,
880     0x51515951, 0x99995e99, 0x6d6da96d, 0x0d0d340d,
881     0xfafacffa, 0xdfdf5bdf, 0x7e7ee57e, 0x24249024,
882     0x3b3bec3b, 0xabab96ab, 0xcece1fce, 0x11114411,
883     0x8f8f068f, 0x4e4e254e, 0xb7b7e6b7, 0xebeb8beb,
884     0x3c3cf03c, 0x81813e81, 0x94946a94, 0xf7f7fbf7,
885     0xb9b9deb9, 0x13134c13, 0x2c2cb02c, 0xd3d36bd3,
886     0xe7e7bbe7, 0x6e6ea56e, 0xc4c437c4, 0x03030c03,
887     0x56564556, 0x44440d44, 0x7f7fe17f, 0xa9a99ea9,
888     0x2a2aa82a, 0xbbbbd6bb, 0xc1c123c1, 0x53535153,
889     0xdcdc57dc, 0x0b0b2c0b, 0x9d9d4e9d, 0x6c6cad6c,
890     0x3131c431, 0x7474cd74, 0xf6f6fff6, 0x46460546,
891     0xacac8aac, 0x89891e89, 0x14145014, 0xe1e1a3e1,
892     0x16165816, 0x3a3ae83a, 0x6969b969, 0x09092409,
893     0x7070dd70, 0xb6b6e2b6, 0xd0d067d0, 0xeded93ed,
894     0xcccc17cc, 0x42421542, 0x98985a98, 0xa4a4aaa4,
895     0x2828a028, 0x5c5c6d5c, 0xf8f8c7f8, 0x86862286,
896   },
897   {
898     0xd8181860, 0x2623238c, 0xb8c6c63f, 0xfbe8e887,
899     0xcb878726, 0x11b8b8da, 0x09010104, 0x0d4f4f21,
900     0x9b3636d8, 0xffa6a6a2, 0x0cd2d26f, 0x0ef5f5f3,
901     0x967979f9, 0x306f6fa1, 0x6d91917e, 0xf8525255,
902     0x4760609d, 0x35bcbcca, 0x379b9b56, 0x8a8e8e02,
903     0xd2a3a3b6, 0x6c0c0c30, 0x847b7bf1, 0x803535d4,
904     0xf51d1d74, 0xb3e0e0a7, 0x21d7d77b, 0x9cc2c22f,
905     0x432e2eb8, 0x294b4b31, 0x5dfefedf, 0xd5575741,
906     0xbd151554, 0xe87777c1, 0x923737dc, 0x9ee5e5b3,
907     0x139f9f46, 0x23f0f0e7, 0x204a4a35, 0x44dada4f,
908     0xa258587d, 0xcfc9c903, 0x7c2929a4, 0x5a0a0a28,
909     0x50b1b1fe, 0xc9a0a0ba, 0x146b6bb1, 0xd985852e,
910     0x3cbdbdce, 0x8f5d5d69, 0x90101040, 0x07f4f4f7,
911     0xddcbcb0b, 0xd33e3ef8, 0x2d050514, 0x78676781,
912     0x97e4e4b7, 0x0227279c, 0x73414119, 0xa78b8b16,
913     0xf6a7a7a6, 0xb27d7de9, 0x4995956e, 0x56d8d847,
914     0x70fbfbcb, 0xcdeeee9f, 0xbb7c7ced, 0x71666685,
915     0x7bdddd53, 0xaf17175c, 0x45474701, 0x1a9e9e42,
916     0xd4caca0f, 0x582d2db4, 0x2ebfbfc6, 0x3f07071c,
917     0xacadad8e, 0xb05a5a75, 0xef838336, 0xb63333cc,
918     0x5c636391, 0x12020208, 0x93aaaa92, 0xde7171d9,
919     0xc6c8c807, 0xd1191964, 0x3b494939, 0x5fd9d943,
920     0x31f2f2ef, 0xa8e3e3ab, 0xb95b5b71, 0xbc88881a,
921     0x3e9a9a52, 0x0b262698, 0xbf3232c8, 0x59b0b0fa,
922     0xf2e9e983, 0x770f0f3c, 0x33d5d573, 0xf480803a,
923     0x27bebec2, 0xebcdcd13, 0x893434d0, 0x3248483d,
924     0x54ffffdb, 0x8d7a7af5, 0x6490907a, 0x9d5f5f61,
925     0x3d202080, 0x0f6868bd, 0xca1a1a68, 0xb7aeae82,
926     0x7db4b4ea, 0xce54544d, 0x7f939376, 0x2f222288,
927     0x6364648d, 0x2af1f1e3, 0xcc7373d1, 0x82121248,
928     0x7a40401d, 0x48080820, 0x95c3c32b, 0xdfecec97,
929     0x4ddbdb4b, 0xc0a1a1be, 0x918d8d0e, 0xc83d3df4,
930     0x5b979766, 0x00000000, 0xf9cfcf1b, 0x6e2b2bac,
931     0xe17676c5, 0xe6828232, 0x28d6d67f, 0xc31b1b6c,
932     0x74b5b5ee, 0xbeafaf86, 0x1d6a6ab5, 0xea50505d,
933     0x57454509, 0x38f3f3eb, 0xad3030c0, 0xc4efef9b,
934     0xda3f3ffc, 0xc7555549, 0xdba2a2b2, 0xe9eaea8f,
935     0x6a656589, 0x03babad2, 0x4a2f2fbc, 0x8ec0c027,
936     0x60dede5f, 0xfc1c1c70, 0x46fdfdd3, 0x1f4d4d29,
937     0x76929272, 0xfa7575c9, 0x36060618, 0xae8a8a12,
938     0x4bb2b2f2, 0x85e6e6bf, 0x7e0e0e38, 0xe71f1f7c,
939     0x55626295, 0x3ad4d477, 0x81a8a89a, 0x52969662,
940     0x62f9f9c3, 0xa3c5c533, 0x10252594, 0xab595979,
941     0xd084842a, 0xc57272d5, 0xec3939e4, 0x164c4c2d,
942     0x945e5e65, 0x9f7878fd, 0xe53838e0, 0x988c8c0a,
943     0x17d1d163, 0xe4a5a5ae, 0xa1e2e2af, 0x4e616199,
944     0x42b3b3f6, 0x34212184, 0x089c9c4a, 0xee1e1e78,
945     0x61434311, 0xb1c7c73b, 0x4ffcfcd7, 0x24040410,
946     0xe3515159, 0x2599995e, 0x226d6da9, 0x650d0d34,
947     0x79fafacf, 0x69dfdf5b, 0xa97e7ee5, 0x19242490,
948     0xfe3b3bec, 0x9aabab96, 0xf0cece1f, 0x99111144,
949     0x838f8f06, 0x044e4e25, 0x66b7b7e6, 0xe0ebeb8b,
950     0xc13c3cf0, 0xfd81813e, 0x4094946a, 0x1cf7f7fb,
951     0x18b9b9de, 0x8b13134c, 0x512c2cb0, 0x05d3d36b,
952     0x8ce7e7bb, 0x396e6ea5, 0xaac4c437, 0x1b03030c,
953     0xdc565645, 0x5e44440d, 0xa07f7fe1, 0x88a9a99e,
954     0x672a2aa8, 0x0abbbbd6, 0x87c1c123, 0xf1535351,
955     0x72dcdc57, 0x530b0b2c, 0x019d9d4e, 0x2b6c6cad,
956     0xa43131c4, 0xf37474cd, 0x15f6f6ff, 0x4c464605,
957     0xa5acac8a, 0xb589891e, 0xb4141450, 0xbae1e1a3,
958     0xa6161658, 0xf73a3ae8, 0x066969b9, 0x41090924,
959     0xd77070dd, 0x6fb6b6e2, 0x1ed0d067, 0xd6eded93,
960     0xe2cccc17, 0x68424215, 0x2c98985a, 0xeda4a4aa,
961     0x752828a0, 0x865c5c6d, 0x6bf8f8c7, 0xc2868622,
962   },
963   {
964     0x30d81818, 0x46262323, 0x91b8c6c6, 0xcdfbe8e8,
965     0x13cb8787, 0x6d11b8b8, 0x02090101, 0x9e0d4f4f,
966     0x6c9b3636, 0x51ffa6a6, 0xb90cd2d2, 0xf70ef5f5,
967     0xf2967979, 0xde306f6f, 0x3f6d9191, 0xa4f85252,
968     0xc0476060, 0x6535bcbc, 0x2b379b9b, 0x018a8e8e,
969     0x5bd2a3a3, 0x186c0c0c, 0xf6847b7b, 0x6a803535,
970     0x3af51d1d, 0xddb3e0e0, 0xb321d7d7, 0x999cc2c2,
971     0x5c432e2e, 0x96294b4b, 0xe15dfefe, 0xaed55757,
972     0x2abd1515, 0xeee87777, 0x6e923737, 0xd79ee5e5,
973     0x23139f9f, 0xfd23f0f0, 0x94204a4a, 0xa944dada,
974     0xb0a25858, 0x8fcfc9c9, 0x527c2929, 0x145a0a0a,
975     0x7f50b1b1, 0x5dc9a0a0, 0xd6146b6b, 0x17d98585,
976     0x673cbdbd, 0xba8f5d5d, 0x20901010, 0xf507f4f4,
977     0x8bddcbcb, 0x7cd33e3e, 0x0a2d0505, 0xce786767,
978     0xd597e4e4, 0x4e022727, 0x82734141, 0x0ba78b8b,
979     0x53f6a7a7, 0xfab27d7d, 0x37499595, 0xad56d8d8,
980     0xeb70fbfb, 0xc1cdeeee, 0xf8bb7c7c, 0xcc716666,
981     0xa77bdddd, 0x2eaf1717, 0x8e454747, 0x211a9e9e,
982     0x89d4caca, 0x5a582d2d, 0x632ebfbf, 0x0e3f0707,
983     0x47acadad, 0xb4b05a5a, 0x1bef8383, 0x66b63333,
984     0xc65c6363, 0x04120202, 0x4993aaaa, 0xe2de7171,
985     0x8dc6c8c8, 0x32d11919, 0x923b4949, 0xaf5fd9d9,
986     0xf931f2f2, 0xdba8e3e3, 0xb6b95b5b, 0x0dbc8888,
987     0x293e9a9a, 0x4c0b2626, 0x64bf3232, 0x7d59b0b0,
988     0xcff2e9e9, 0x1e770f0f, 0xb733d5d5, 0x1df48080,
989     0x6127bebe, 0x87ebcdcd, 0x68893434, 0x90324848,
990     0xe354ffff, 0xf48d7a7a, 0x3d649090, 0xbe9d5f5f,
991     0x403d2020, 0xd00f6868, 0x34ca1a1a, 0x41b7aeae,
992     0x757db4b4, 0xa8ce5454, 0x3b7f9393, 0x442f2222,
993     0xc8636464, 0xff2af1f1, 0xe6cc7373, 0x24821212,
994     0x807a4040, 0x10480808, 0x9b95c3c3, 0xc5dfecec,
995     0xab4ddbdb, 0x5fc0a1a1, 0x07918d8d, 0x7ac83d3d,
996     0x335b9797, 0x00000000, 0x83f9cfcf, 0x566e2b2b,
997     0xece17676, 0x19e68282, 0xb128d6d6, 0x36c31b1b,
998     0x7774b5b5, 0x43beafaf, 0xd41d6a6a, 0xa0ea5050,
999     0x8a574545, 0xfb38f3f3, 0x60ad3030, 0xc3c4efef,
1000     0x7eda3f3f, 0xaac75555, 0x59dba2a2, 0xc9e9eaea,
1001     0xca6a6565, 0x6903baba, 0x5e4a2f2f, 0x9d8ec0c0,
1002     0xa160dede, 0x38fc1c1c, 0xe746fdfd, 0x9a1f4d4d,
1003     0x39769292, 0xeafa7575, 0x0c360606, 0x09ae8a8a,
1004     0x794bb2b2, 0xd185e6e6, 0x1c7e0e0e, 0x3ee71f1f,
1005     0xc4556262, 0xb53ad4d4, 0x4d81a8a8, 0x31529696,
1006     0xef62f9f9, 0x97a3c5c5, 0x4a102525, 0xb2ab5959,
1007     0x15d08484, 0xe4c57272, 0x72ec3939, 0x98164c4c,
1008     0xbc945e5e, 0xf09f7878, 0x70e53838, 0x05988c8c,
1009     0xbf17d1d1, 0x57e4a5a5, 0xd9a1e2e2, 0xc24e6161,
1010     0x7b42b3b3, 0x42342121, 0x25089c9c, 0x3cee1e1e,
1011     0x86614343, 0x93b1c7c7, 0xe54ffcfc, 0x08240404,
1012     0xa2e35151, 0x2f259999, 0xda226d6d, 0x1a650d0d,
1013     0xe979fafa, 0xa369dfdf, 0xfca97e7e, 0x48192424,
1014     0x76fe3b3b, 0x4b9aabab, 0x81f0cece, 0x22991111,
1015     0x03838f8f, 0x9c044e4e, 0x7366b7b7, 0xcbe0ebeb,
1016     0x78c13c3c, 0x1ffd8181, 0x35409494, 0xf31cf7f7,
1017     0x6f18b9b9, 0x268b1313, 0x58512c2c, 0xbb05d3d3,
1018     0xd38ce7e7, 0xdc396e6e, 0x95aac4c4, 0x061b0303,
1019     0xacdc5656, 0x885e4444, 0xfea07f7f, 0x4f88a9a9,
1020     0x54672a2a, 0x6b0abbbb, 0x9f87c1c1, 0xa6f15353,
1021     0xa572dcdc, 0x16530b0b, 0x27019d9d, 0xd82b6c6c,
1022     0x62a43131, 0xe8f37474, 0xf115f6f6, 0x8c4c4646,
1023     0x45a5acac, 0x0fb58989, 0x28b41414, 0xdfbae1e1,
1024     0x2ca61616, 0x74f73a3a, 0xd2066969, 0x12410909,
1025     0xe0d77070, 0x716fb6b6, 0xbd1ed0d0, 0xc7d6eded,
1026     0x85e2cccc, 0x84684242, 0x2d2c9898, 0x55eda4a4,
1027     0x50752828, 0xb8865c5c, 0xed6bf8f8, 0x11c28686,
1028   },
1029   {
1030     0x7830d818, 0xaf462623, 0xf991b8c6, 0x6fcdfbe8,
1031     0xa113cb87, 0x626d11b8, 0x05020901, 0x6e9e0d4f,
1032     0xee6c9b36, 0x0451ffa6, 0xbdb90cd2, 0x06f70ef5,
1033     0x80f29679, 0xcede306f, 0xef3f6d91, 0x07a4f852,
1034     0xfdc04760, 0x766535bc, 0xcd2b379b, 0x8c018a8e,
1035     0x155bd2a3, 0x3c186c0c, 0x8af6847b, 0xe16a8035,
1036     0x693af51d, 0x47ddb3e0, 0xacb321d7, 0xed999cc2,
1037     0x965c432e, 0x7a96294b, 0x21e15dfe, 0x16aed557,
1038     0x412abd15, 0xb6eee877, 0xeb6e9237, 0x56d79ee5,
1039     0xd923139f, 0x17fd23f0, 0x7f94204a, 0x95a944da,
1040     0x25b0a258, 0xca8fcfc9, 0x8d527c29, 0x22145a0a,
1041     0x4f7f50b1, 0x1a5dc9a0, 0xdad6146b, 0xab17d985,
1042     0x73673cbd, 0x34ba8f5d, 0x50209010, 0x03f507f4,
1043     0xc08bddcb, 0xc67cd33e, 0x110a2d05, 0xe6ce7867,
1044     0x53d597e4, 0xbb4e0227, 0x58827341, 0x9d0ba78b,
1045     0x0153f6a7, 0x94fab27d, 0xfb374995, 0x9fad56d8,
1046     0x30eb70fb, 0x71c1cdee, 0x91f8bb7c, 0xe3cc7166,
1047     0x8ea77bdd, 0x4b2eaf17, 0x468e4547, 0xdc211a9e,
1048     0xc589d4ca, 0x995a582d, 0x79632ebf, 0x1b0e3f07,
1049     0x2347acad, 0x2fb4b05a, 0xb51bef83, 0xff66b633,
1050     0xf2c65c63, 0x0a041202, 0x384993aa, 0xa8e2de71,
1051     0xcf8dc6c8, 0x7d32d119, 0x70923b49, 0x9aaf5fd9,
1052     0x1df931f2, 0x48dba8e3, 0x2ab6b95b, 0x920dbc88,
1053     0xc8293e9a, 0xbe4c0b26, 0xfa64bf32, 0x4a7d59b0,
1054     0x6acff2e9, 0x331e770f, 0xa6b733d5, 0xba1df480,
1055     0x7c6127be, 0xde87ebcd, 0xe4688934, 0x75903248,
1056     0x24e354ff, 0x8ff48d7a, 0xea3d6490, 0x3ebe9d5f,
1057     0xa0403d20, 0xd5d00f68, 0x7234ca1a, 0x2c41b7ae,
1058     0x5e757db4, 0x19a8ce54, 0xe53b7f93, 0xaa442f22,
1059     0xe9c86364, 0x12ff2af1, 0xa2e6cc73, 0x5a248212,
1060     0x5d807a40, 0x28104808, 0xe89b95c3, 0x7bc5dfec,
1061     0x90ab4ddb, 0x1f5fc0a1, 0x8307918d, 0xc97ac83d,
1062     0xf1335b97, 0x00000000, 0xd483f9cf, 0x87566e2b,
1063     0xb3ece176, 0xb019e682, 0xa9b128d6, 0x7736c31b,
1064     0x5b7774b5, 0x2943beaf, 0xdfd41d6a, 0x0da0ea50,
1065     0x4c8a5745, 0x18fb38f3, 0xf060ad30, 0x74c3c4ef,
1066     0xc37eda3f, 0x1caac755, 0x1059dba2, 0x65c9e9ea,
1067     0xecca6a65, 0x686903ba, 0x935e4a2f, 0xe79d8ec0,
1068     0x81a160de, 0x6c38fc1c, 0x2ee746fd, 0x649a1f4d,
1069     0xe0397692, 0xbceafa75, 0x1e0c3606, 0x9809ae8a,
1070     0x40794bb2, 0x59d185e6, 0x361c7e0e, 0x633ee71f,
1071     0xf7c45562, 0xa3b53ad4, 0x324d81a8, 0xf4315296,
1072     0x3aef62f9, 0xf697a3c5, 0xb14a1025, 0x20b2ab59,
1073     0xae15d084, 0xa7e4c572, 0xdd72ec39, 0x6198164c,
1074     0x3bbc945e, 0x85f09f78, 0xd870e538, 0x8605988c,
1075     0xb2bf17d1, 0x0b57e4a5, 0x4dd9a1e2, 0xf8c24e61,
1076     0x457b42b3, 0xa5423421, 0xd625089c, 0x663cee1e,
1077     0x52866143, 0xfc93b1c7, 0x2be54ffc, 0x14082404,
1078     0x08a2e351, 0xc72f2599, 0xc4da226d, 0x391a650d,
1079     0x35e979fa, 0x84a369df, 0x9bfca97e, 0xb4481924,
1080     0xd776fe3b, 0x3d4b9aab, 0xd181f0ce, 0x55229911,
1081     0x8903838f, 0x6b9c044e, 0x517366b7, 0x60cbe0eb,
1082     0xcc78c13c, 0xbf1ffd81, 0xfe354094, 0x0cf31cf7,
1083     0x676f18b9, 0x5f268b13, 0x9c58512c, 0xb8bb05d3,
1084     0x5cd38ce7, 0xcbdc396e, 0xf395aac4, 0x0f061b03,
1085     0x13acdc56, 0x49885e44, 0x9efea07f, 0x374f88a9,
1086     0x8254672a, 0x6d6b0abb, 0xe29f87c1, 0x02a6f153,
1087     0x8ba572dc, 0x2716530b, 0xd327019d, 0xc1d82b6c,
1088     0xf562a431, 0xb9e8f374, 0x09f115f6, 0x438c4c46,
1089     0x2645a5ac, 0x970fb589, 0x4428b414, 0x42dfbae1,
1090     0x4e2ca616, 0xd274f73a, 0xd0d20669, 0x2d124109,
1091     0xade0d770, 0x54716fb6, 0xb7bd1ed0, 0x7ec7d6ed,
1092     0xdb85e2cc, 0x57846842, 0xc22d2c98, 0x0e55eda4,
1093     0x88507528, 0x31b8865c, 0x3fed6bf8, 0xa411c286,
1094   },
1095 };
1096
1097 __constant u32 rch[R + 1] =
1098 {
1099   0x00000000,
1100   0x1823c6e8,
1101   0x36a6d2f5,
1102   0x60bc9b8e,
1103   0x1de0d7c2,
1104   0x157737e5,
1105   0x58c9290a,
1106   0xbd5d10f4,
1107   0xe427418b,
1108   0xfbee7c66,
1109   0xca2dbf07,
1110 };
1111
1112 __constant u32 rcl[R + 1] =
1113 {
1114   0x00000000,
1115   0x87b8014f,
1116   0x796f9152,
1117   0xa30c7b35,
1118   0x2e4bfe57,
1119   0x9ff04ada,
1120   0xb1a06b85,
1121   0xcb3e0567,
1122   0xa77d95d8,
1123   0xdd17479e,
1124   0xad5a8333,
1125 };
1126
1127 // this is a highly optimized that assumes dgst[16] = { 0 }; only reuse of no 2nd transform is needed
1128
1129 static void whirlpool_transform (const u32 w[16], u32 dgst[16], __local u32 s_Ch[8][256], __local u32 s_Cl[8][256])
1130 {
1131   u32 Kh[8];
1132   u32 Kl[8];
1133
1134   Kh[0] = 0x300beec0;
1135   Kl[0] = 0xaf902967;
1136   Kh[1] = 0x28282828;
1137   Kl[1] = 0x28282828;
1138   Kh[2] = 0x28282828;
1139   Kl[2] = 0x28282828;
1140   Kh[3] = 0x28282828;
1141   Kl[3] = 0x28282828;
1142   Kh[4] = 0x28282828;
1143   Kl[4] = 0x28282828;
1144   Kh[5] = 0x28282828;
1145   Kl[5] = 0x28282828;
1146   Kh[6] = 0x28282828;
1147   Kl[6] = 0x28282828;
1148   Kh[7] = 0x28282828;
1149   Kl[7] = 0x28282828;
1150
1151   u32 stateh[8];
1152   u32 statel[8];
1153
1154   stateh[0] = w[ 0];
1155   statel[0] = w[ 1];
1156   stateh[1] = w[ 2];
1157   statel[1] = w[ 3];
1158   stateh[2] = w[ 4];
1159   statel[2] = w[ 5];
1160   stateh[3] = w[ 6];
1161   statel[3] = w[ 7];
1162   stateh[4] = w[ 8];
1163   statel[4] = w[ 9];
1164   stateh[5] = w[10];
1165   statel[5] = w[11];
1166   stateh[6] = w[12];
1167   statel[6] = w[13];
1168   stateh[7] = w[14];
1169   statel[7] = w[15];
1170
1171   u32 Lh[8];
1172   u32 Ll[8];
1173
1174   #pragma unroll
1175   for (int i = 0; i < 8; i++)
1176   {
1177     const u32 Lp0 = stateh[(i + 8) & 7] >> 24;
1178     const u32 Lp1 = stateh[(i + 7) & 7] >> 16;
1179     const u32 Lp2 = stateh[(i + 6) & 7] >>  8;
1180     const u32 Lp3 = stateh[(i + 5) & 7] >>  0;
1181     const u32 Lp4 = statel[(i + 4) & 7] >> 24;
1182     const u32 Lp5 = statel[(i + 3) & 7] >> 16;
1183     const u32 Lp6 = statel[(i + 2) & 7] >>  8;
1184     const u32 Lp7 = statel[(i + 1) & 7] >>  0;
1185
1186     Lh[i] = BOX (s_Ch, 0, Lp0 & 0xff)
1187           ^ BOX (s_Ch, 1, Lp1 & 0xff)
1188           ^ BOX (s_Ch, 2, Lp2 & 0xff)
1189           ^ BOX (s_Ch, 3, Lp3 & 0xff)
1190           ^ BOX (s_Ch, 4, Lp4 & 0xff)
1191           ^ BOX (s_Ch, 5, Lp5 & 0xff)
1192           ^ BOX (s_Ch, 6, Lp6 & 0xff)
1193           ^ BOX (s_Ch, 7, Lp7 & 0xff);
1194
1195     Ll[i] = BOX (s_Cl, 0, Lp0 & 0xff)
1196           ^ BOX (s_Cl, 1, Lp1 & 0xff)
1197           ^ BOX (s_Cl, 2, Lp2 & 0xff)
1198           ^ BOX (s_Cl, 3, Lp3 & 0xff)
1199           ^ BOX (s_Cl, 4, Lp4 & 0xff)
1200           ^ BOX (s_Cl, 5, Lp5 & 0xff)
1201           ^ BOX (s_Cl, 6, Lp6 & 0xff)
1202           ^ BOX (s_Cl, 7, Lp7 & 0xff);
1203   }
1204
1205   stateh[0] = Lh[0] ^ Kh[0];
1206   statel[0] = Ll[0] ^ Kl[0];
1207   stateh[1] = Lh[1] ^ Kh[1];
1208   statel[1] = Ll[1] ^ Kl[1];
1209   stateh[2] = Lh[2] ^ Kh[2];
1210   statel[2] = Ll[2] ^ Kl[2];
1211   stateh[3] = Lh[3] ^ Kh[3];
1212   statel[3] = Ll[3] ^ Kl[3];
1213   stateh[4] = Lh[4] ^ Kh[4];
1214   statel[4] = Ll[4] ^ Kl[4];
1215   stateh[5] = Lh[5] ^ Kh[5];
1216   statel[5] = Ll[5] ^ Kl[5];
1217   stateh[6] = Lh[6] ^ Kh[6];
1218   statel[6] = Ll[6] ^ Kl[6];
1219   stateh[7] = Lh[7] ^ Kh[7];
1220   statel[7] = Ll[7] ^ Kl[7];
1221
1222   for (int r = 2; r <= R; r++)
1223   {
1224     u32 Lh[8];
1225     u32 Ll[8];
1226
1227     #pragma unroll
1228     for (int i = 0; i < 8; i++)
1229     {
1230       const u32 Lp0 = Kh[(i + 8) & 7] >> 24;
1231       const u32 Lp1 = Kh[(i + 7) & 7] >> 16;
1232       const u32 Lp2 = Kh[(i + 6) & 7] >>  8;
1233       const u32 Lp3 = Kh[(i + 5) & 7] >>  0;
1234       const u32 Lp4 = Kl[(i + 4) & 7] >> 24;
1235       const u32 Lp5 = Kl[(i + 3) & 7] >> 16;
1236       const u32 Lp6 = Kl[(i + 2) & 7] >>  8;
1237       const u32 Lp7 = Kl[(i + 1) & 7] >>  0;
1238
1239       Lh[i] = BOX (s_Ch, 0, Lp0 & 0xff)
1240             ^ BOX (s_Ch, 1, Lp1 & 0xff)
1241             ^ BOX (s_Ch, 2, Lp2 & 0xff)
1242             ^ BOX (s_Ch, 3, Lp3 & 0xff)
1243             ^ BOX (s_Ch, 4, Lp4 & 0xff)
1244             ^ BOX (s_Ch, 5, Lp5 & 0xff)
1245             ^ BOX (s_Ch, 6, Lp6 & 0xff)
1246             ^ BOX (s_Ch, 7, Lp7 & 0xff);
1247
1248       Ll[i] = BOX (s_Cl, 0, Lp0 & 0xff)
1249             ^ BOX (s_Cl, 1, Lp1 & 0xff)
1250             ^ BOX (s_Cl, 2, Lp2 & 0xff)
1251             ^ BOX (s_Cl, 3, Lp3 & 0xff)
1252             ^ BOX (s_Cl, 4, Lp4 & 0xff)
1253             ^ BOX (s_Cl, 5, Lp5 & 0xff)
1254             ^ BOX (s_Cl, 6, Lp6 & 0xff)
1255             ^ BOX (s_Cl, 7, Lp7 & 0xff);
1256     }
1257
1258     Kh[0] = Lh[0] ^ rch[r];
1259     Kl[0] = Ll[0] ^ rcl[r];
1260     Kh[1] = Lh[1];
1261     Kl[1] = Ll[1];
1262     Kh[2] = Lh[2];
1263     Kl[2] = Ll[2];
1264     Kh[3] = Lh[3];
1265     Kl[3] = Ll[3];
1266     Kh[4] = Lh[4];
1267     Kl[4] = Ll[4];
1268     Kh[5] = Lh[5];
1269     Kl[5] = Ll[5];
1270     Kh[6] = Lh[6];
1271     Kl[6] = Ll[6];
1272     Kh[7] = Lh[7];
1273     Kl[7] = Ll[7];
1274
1275     #pragma unroll 8
1276     for (int i = 0; i < 8; i++)
1277     {
1278       const u32 Lp0 = stateh[(i + 8) & 7] >> 24;
1279       const u32 Lp1 = stateh[(i + 7) & 7] >> 16;
1280       const u32 Lp2 = stateh[(i + 6) & 7] >>  8;
1281       const u32 Lp3 = stateh[(i + 5) & 7] >>  0;
1282       const u32 Lp4 = statel[(i + 4) & 7] >> 24;
1283       const u32 Lp5 = statel[(i + 3) & 7] >> 16;
1284       const u32 Lp6 = statel[(i + 2) & 7] >>  8;
1285       const u32 Lp7 = statel[(i + 1) & 7] >>  0;
1286
1287       Lh[i] = BOX (s_Ch, 0, Lp0 & 0xff)
1288             ^ BOX (s_Ch, 1, Lp1 & 0xff)
1289             ^ BOX (s_Ch, 2, Lp2 & 0xff)
1290             ^ BOX (s_Ch, 3, Lp3 & 0xff)
1291             ^ BOX (s_Ch, 4, Lp4 & 0xff)
1292             ^ BOX (s_Ch, 5, Lp5 & 0xff)
1293             ^ BOX (s_Ch, 6, Lp6 & 0xff)
1294             ^ BOX (s_Ch, 7, Lp7 & 0xff);
1295
1296       Ll[i] = BOX (s_Cl, 0, Lp0 & 0xff)
1297             ^ BOX (s_Cl, 1, Lp1 & 0xff)
1298             ^ BOX (s_Cl, 2, Lp2 & 0xff)
1299             ^ BOX (s_Cl, 3, Lp3 & 0xff)
1300             ^ BOX (s_Cl, 4, Lp4 & 0xff)
1301             ^ BOX (s_Cl, 5, Lp5 & 0xff)
1302             ^ BOX (s_Cl, 6, Lp6 & 0xff)
1303             ^ BOX (s_Cl, 7, Lp7 & 0xff);
1304     }
1305
1306     stateh[0] = Lh[0] ^ Kh[0];
1307     statel[0] = Ll[0] ^ Kl[0];
1308     stateh[1] = Lh[1] ^ Kh[1];
1309     statel[1] = Ll[1] ^ Kl[1];
1310     stateh[2] = Lh[2] ^ Kh[2];
1311     statel[2] = Ll[2] ^ Kl[2];
1312     stateh[3] = Lh[3] ^ Kh[3];
1313     statel[3] = Ll[3] ^ Kl[3];
1314     stateh[4] = Lh[4] ^ Kh[4];
1315     statel[4] = Ll[4] ^ Kl[4];
1316     stateh[5] = Lh[5] ^ Kh[5];
1317     statel[5] = Ll[5] ^ Kl[5];
1318     stateh[6] = Lh[6] ^ Kh[6];
1319     statel[6] = Ll[6] ^ Kl[6];
1320     stateh[7] = Lh[7] ^ Kh[7];
1321     statel[7] = Ll[7] ^ Kl[7];
1322   }
1323
1324   dgst[ 0] = stateh[0] ^ w[ 0];
1325   dgst[ 1] = statel[0] ^ w[ 1];
1326   dgst[ 2] = stateh[1] ^ w[ 2];
1327   dgst[ 3] = statel[1] ^ w[ 3];
1328   dgst[ 4] = stateh[2] ^ w[ 4];
1329   dgst[ 5] = statel[2] ^ w[ 5];
1330   dgst[ 6] = stateh[3] ^ w[ 6];
1331   dgst[ 7] = statel[3] ^ w[ 7];
1332   dgst[ 8] = stateh[4] ^ w[ 8];
1333   dgst[ 9] = statel[4] ^ w[ 9];
1334   dgst[10] = stateh[5] ^ w[10];
1335   dgst[11] = statel[5] ^ w[11];
1336   dgst[12] = stateh[6] ^ w[12];
1337   dgst[13] = statel[6] ^ w[13];
1338   dgst[14] = stateh[7] ^ w[14];
1339   dgst[15] = statel[7] ^ w[15];
1340 }
1341
1342 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06100_m04 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global netntlm_t *netntlm_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1343 {
1344   /**
1345    * modifier
1346    */
1347
1348   const u32 lid = get_local_id (0);
1349
1350   /**
1351    * base
1352    */
1353
1354   const u32 gid = get_global_id (0);
1355
1356   u32 wordl0[4];
1357
1358   wordl0[0] = pws[gid].i[ 0];
1359   wordl0[1] = pws[gid].i[ 1];
1360   wordl0[2] = pws[gid].i[ 2];
1361   wordl0[3] = pws[gid].i[ 3];
1362
1363   u32 wordl1[4];
1364
1365   wordl1[0] = pws[gid].i[ 4];
1366   wordl1[1] = pws[gid].i[ 5];
1367   wordl1[2] = pws[gid].i[ 6];
1368   wordl1[3] = pws[gid].i[ 7];
1369
1370   u32 wordl2[4];
1371
1372   wordl2[0] = 0;
1373   wordl2[1] = 0;
1374   wordl2[2] = 0;
1375   wordl2[3] = 0;
1376
1377   u32 wordl3[4];
1378
1379   wordl3[0] = 0;
1380   wordl3[1] = 0;
1381   wordl3[2] = 0;
1382   wordl3[3] = 0;
1383
1384   const u32 pw_l_len = pws[gid].pw_len;
1385
1386   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
1387   {
1388     append_0x80_2x4 (wordl0, wordl1, pw_l_len);
1389
1390     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
1391   }
1392
1393   /**
1394    * modifier
1395    */
1396
1397   __local u32 s_Ch[8][256];
1398   __local u32 s_Cl[8][256];
1399
1400   const u32 lid4 = lid * 4;
1401
1402   for (u32 i = 0; i < 8; i++)
1403   {
1404     s_Ch[i][lid4 + 0] = Ch[i][lid4 + 0];
1405     s_Ch[i][lid4 + 1] = Ch[i][lid4 + 1];
1406     s_Ch[i][lid4 + 2] = Ch[i][lid4 + 2];
1407     s_Ch[i][lid4 + 3] = Ch[i][lid4 + 3];
1408     s_Cl[i][lid4 + 0] = Cl[i][lid4 + 0];
1409     s_Cl[i][lid4 + 1] = Cl[i][lid4 + 1];
1410     s_Cl[i][lid4 + 2] = Cl[i][lid4 + 2];
1411     s_Cl[i][lid4 + 3] = Cl[i][lid4 + 3];
1412   }
1413
1414   barrier (CLK_LOCAL_MEM_FENCE);
1415
1416   if (gid >= gid_max) return;
1417
1418   /**
1419    * loop
1420    */
1421
1422   for (u32 il_pos = 0; il_pos < combs_cnt; il_pos++)
1423   {
1424     const u32 pw_r_len = combs_buf[il_pos].pw_len;
1425
1426     const u32 pw_len = pw_l_len + pw_r_len;
1427
1428     u32 wordr0[4];
1429
1430     wordr0[0] = combs_buf[il_pos].i[0];
1431     wordr0[1] = combs_buf[il_pos].i[1];
1432     wordr0[2] = combs_buf[il_pos].i[2];
1433     wordr0[3] = combs_buf[il_pos].i[3];
1434
1435     u32 wordr1[4];
1436
1437     wordr1[0] = combs_buf[il_pos].i[4];
1438     wordr1[1] = combs_buf[il_pos].i[5];
1439     wordr1[2] = combs_buf[il_pos].i[6];
1440     wordr1[3] = combs_buf[il_pos].i[7];
1441
1442     u32 wordr2[4];
1443
1444     wordr2[0] = 0;
1445     wordr2[1] = 0;
1446     wordr2[2] = 0;
1447     wordr2[3] = 0;
1448
1449     u32 wordr3[4];
1450
1451     wordr3[0] = 0;
1452     wordr3[1] = 0;
1453     wordr3[2] = 0;
1454     wordr3[3] = 0;
1455
1456     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
1457     {
1458       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
1459     }
1460
1461     u32 w0[4];
1462
1463     w0[0] = wordl0[0] | wordr0[0];
1464     w0[1] = wordl0[1] | wordr0[1];
1465     w0[2] = wordl0[2] | wordr0[2];
1466     w0[3] = wordl0[3] | wordr0[3];
1467
1468     u32 w1[4];
1469
1470     w1[0] = wordl1[0] | wordr1[0];
1471     w1[1] = wordl1[1] | wordr1[1];
1472     w1[2] = wordl1[2] | wordr1[2];
1473     w1[3] = wordl1[3] | wordr1[3];
1474
1475     u32 w2[4];
1476
1477     w2[0] = wordl2[0] | wordr2[0];
1478     w2[1] = wordl2[1] | wordr2[1];
1479     w2[2] = wordl2[2] | wordr2[2];
1480     w2[3] = wordl2[3] | wordr2[3];
1481
1482     u32 w3[4];
1483
1484     w3[0] = wordl3[0] | wordr3[0];
1485     w3[1] = wordl3[1] | wordr3[1];
1486     w3[2] = 0;
1487     w3[3] = 0;
1488
1489     u32 wl[16];
1490
1491     wl[ 0] = swap_workaround (w0[0]);
1492     wl[ 1] = swap_workaround (w0[1]);
1493     wl[ 2] = swap_workaround (w0[2]);
1494     wl[ 3] = swap_workaround (w0[3]);
1495     wl[ 4] = swap_workaround (w1[0]);
1496     wl[ 5] = swap_workaround (w1[1]);
1497     wl[ 6] = swap_workaround (w1[2]);
1498     wl[ 7] = swap_workaround (w1[3]);
1499     wl[ 8] = 0;
1500     wl[ 9] = 0;
1501     wl[10] = 0;
1502     wl[11] = 0;
1503     wl[12] = 0;
1504     wl[13] = 0;
1505     wl[14] = 0;
1506     wl[15] = pw_len * 8;
1507
1508     u32 dgst[16];
1509
1510     dgst[ 0] = 0;
1511     dgst[ 1] = 0;
1512     dgst[ 2] = 0;
1513     dgst[ 3] = 0;
1514     dgst[ 4] = 0;
1515     dgst[ 5] = 0;
1516     dgst[ 6] = 0;
1517     dgst[ 7] = 0;
1518     dgst[ 8] = 0;
1519     dgst[ 9] = 0;
1520     dgst[10] = 0;
1521     dgst[11] = 0;
1522     dgst[12] = 0;
1523     dgst[13] = 0;
1524     dgst[14] = 0;
1525     dgst[15] = 0;
1526
1527     whirlpool_transform (wl, dgst, s_Ch, s_Cl);
1528
1529     const u32 r0 = dgst[0];
1530     const u32 r1 = dgst[1];
1531     const u32 r2 = dgst[2];
1532     const u32 r3 = dgst[3];
1533
1534     #include COMPARE_M
1535   }
1536 }
1537
1538 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06100_m08 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1539 {
1540 }
1541
1542 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06100_m16 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1543 {
1544 }
1545
1546 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06100_s04 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global netntlm_t *netntlm_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1547 {
1548   /**
1549    * modifier
1550    */
1551
1552   const u32 lid = get_local_id (0);
1553
1554   /**
1555    * base
1556    */
1557
1558   const u32 gid = get_global_id (0);
1559
1560   u32 wordl0[4];
1561
1562   wordl0[0] = pws[gid].i[ 0];
1563   wordl0[1] = pws[gid].i[ 1];
1564   wordl0[2] = pws[gid].i[ 2];
1565   wordl0[3] = pws[gid].i[ 3];
1566
1567   u32 wordl1[4];
1568
1569   wordl1[0] = pws[gid].i[ 4];
1570   wordl1[1] = pws[gid].i[ 5];
1571   wordl1[2] = pws[gid].i[ 6];
1572   wordl1[3] = pws[gid].i[ 7];
1573
1574   u32 wordl2[4];
1575
1576   wordl2[0] = 0;
1577   wordl2[1] = 0;
1578   wordl2[2] = 0;
1579   wordl2[3] = 0;
1580
1581   u32 wordl3[4];
1582
1583   wordl3[0] = 0;
1584   wordl3[1] = 0;
1585   wordl3[2] = 0;
1586   wordl3[3] = 0;
1587
1588   const u32 pw_l_len = pws[gid].pw_len;
1589
1590   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
1591   {
1592     append_0x80_2x4 (wordl0, wordl1, pw_l_len);
1593
1594     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
1595   }
1596
1597   /**
1598    * modifier
1599    */
1600
1601   __local u32 s_Ch[8][256];
1602   __local u32 s_Cl[8][256];
1603
1604   const u32 lid4 = lid * 4;
1605
1606   for (u32 i = 0; i < 8; i++)
1607   {
1608     s_Ch[i][lid4 + 0] = Ch[i][lid4 + 0];
1609     s_Ch[i][lid4 + 1] = Ch[i][lid4 + 1];
1610     s_Ch[i][lid4 + 2] = Ch[i][lid4 + 2];
1611     s_Ch[i][lid4 + 3] = Ch[i][lid4 + 3];
1612     s_Cl[i][lid4 + 0] = Cl[i][lid4 + 0];
1613     s_Cl[i][lid4 + 1] = Cl[i][lid4 + 1];
1614     s_Cl[i][lid4 + 2] = Cl[i][lid4 + 2];
1615     s_Cl[i][lid4 + 3] = Cl[i][lid4 + 3];
1616   }
1617
1618   barrier (CLK_LOCAL_MEM_FENCE);
1619
1620   if (gid >= gid_max) return;
1621
1622   /**
1623    * digest
1624    */
1625
1626   const u32 search[4] =
1627   {
1628     digests_buf[digests_offset].digest_buf[DGST_R0],
1629     digests_buf[digests_offset].digest_buf[DGST_R1],
1630     digests_buf[digests_offset].digest_buf[DGST_R2],
1631     digests_buf[digests_offset].digest_buf[DGST_R3]
1632   };
1633
1634   /**
1635    * loop
1636    */
1637
1638   for (u32 il_pos = 0; il_pos < combs_cnt; il_pos++)
1639   {
1640     const u32 pw_r_len = combs_buf[il_pos].pw_len;
1641
1642     const u32 pw_len = pw_l_len + pw_r_len;
1643
1644     u32 wordr0[4];
1645
1646     wordr0[0] = combs_buf[il_pos].i[0];
1647     wordr0[1] = combs_buf[il_pos].i[1];
1648     wordr0[2] = combs_buf[il_pos].i[2];
1649     wordr0[3] = combs_buf[il_pos].i[3];
1650
1651     u32 wordr1[4];
1652
1653     wordr1[0] = combs_buf[il_pos].i[4];
1654     wordr1[1] = combs_buf[il_pos].i[5];
1655     wordr1[2] = combs_buf[il_pos].i[6];
1656     wordr1[3] = combs_buf[il_pos].i[7];
1657
1658     u32 wordr2[4];
1659
1660     wordr2[0] = 0;
1661     wordr2[1] = 0;
1662     wordr2[2] = 0;
1663     wordr2[3] = 0;
1664
1665     u32 wordr3[4];
1666
1667     wordr3[0] = 0;
1668     wordr3[1] = 0;
1669     wordr3[2] = 0;
1670     wordr3[3] = 0;
1671
1672     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
1673     {
1674       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
1675     }
1676
1677     u32 w0[4];
1678
1679     w0[0] = wordl0[0] | wordr0[0];
1680     w0[1] = wordl0[1] | wordr0[1];
1681     w0[2] = wordl0[2] | wordr0[2];
1682     w0[3] = wordl0[3] | wordr0[3];
1683
1684     u32 w1[4];
1685
1686     w1[0] = wordl1[0] | wordr1[0];
1687     w1[1] = wordl1[1] | wordr1[1];
1688     w1[2] = wordl1[2] | wordr1[2];
1689     w1[3] = wordl1[3] | wordr1[3];
1690
1691     u32 w2[4];
1692
1693     w2[0] = wordl2[0] | wordr2[0];
1694     w2[1] = wordl2[1] | wordr2[1];
1695     w2[2] = wordl2[2] | wordr2[2];
1696     w2[3] = wordl2[3] | wordr2[3];
1697
1698     u32 w3[4];
1699
1700     w3[0] = wordl3[0] | wordr3[0];
1701     w3[1] = wordl3[1] | wordr3[1];
1702     w3[2] = 0;
1703     w3[3] = 0;
1704
1705     u32 wl[16];
1706
1707     wl[ 0] = swap_workaround (w0[0]);
1708     wl[ 1] = swap_workaround (w0[1]);
1709     wl[ 2] = swap_workaround (w0[2]);
1710     wl[ 3] = swap_workaround (w0[3]);
1711     wl[ 4] = swap_workaround (w1[0]);
1712     wl[ 5] = swap_workaround (w1[1]);
1713     wl[ 6] = swap_workaround (w1[2]);
1714     wl[ 7] = swap_workaround (w1[3]);
1715     wl[ 8] = 0;
1716     wl[ 9] = 0;
1717     wl[10] = 0;
1718     wl[11] = 0;
1719     wl[12] = 0;
1720     wl[13] = 0;
1721     wl[14] = 0;
1722     wl[15] = pw_len * 8;
1723
1724     u32 dgst[16];
1725
1726     dgst[ 0] = 0;
1727     dgst[ 1] = 0;
1728     dgst[ 2] = 0;
1729     dgst[ 3] = 0;
1730     dgst[ 4] = 0;
1731     dgst[ 5] = 0;
1732     dgst[ 6] = 0;
1733     dgst[ 7] = 0;
1734     dgst[ 8] = 0;
1735     dgst[ 9] = 0;
1736     dgst[10] = 0;
1737     dgst[11] = 0;
1738     dgst[12] = 0;
1739     dgst[13] = 0;
1740     dgst[14] = 0;
1741     dgst[15] = 0;
1742
1743     whirlpool_transform (wl, dgst, s_Ch, s_Cl);
1744
1745     const u32 r0 = dgst[0];
1746     const u32 r1 = dgst[1];
1747     const u32 r2 = dgst[2];
1748     const u32 r3 = dgst[3];
1749
1750     #include COMPARE_S
1751   }
1752 }
1753
1754 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06100_s08 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1755 {
1756 }
1757
1758 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06100_s16 (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1759 {
1760 }