1// Licensed to the Apache Software Foundation (ASF) under one
2// or more contributor license agreements.  See the NOTICE file
3// distributed with this work for additional information
4// regarding copyright ownership.  The ASF licenses this file
5// to you under the Apache License, Version 2.0 (the
6// "License"); you may not use this file except in compliance
7// with the License.  You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
16
17package utils
18
19import (
20	"encoding/binary"
21	"io"
22)
23
24type unpackFunc func(in io.Reader, out []uint32)
25
26func unpack1_32(in io.Reader, out []uint32) {
27	var inl uint32
28	binary.Read(in, binary.LittleEndian, &inl)
29	for idx := range out[:32] {
30		out[idx] = (inl >> idx) & 1
31	}
32}
33
34func unpack2_32(in io.Reader, out []uint32) {
35	var inl uint32
36	binary.Read(in, binary.LittleEndian, &inl)
37	out[0] = (inl >> 0) % (1 << 2)
38	out[1] = (inl >> 2) % (1 << 2)
39	out[2] = (inl >> 4) % (1 << 2)
40	out[3] = (inl >> 6) % (1 << 2)
41	out[4] = (inl >> 8) % (1 << 2)
42	out[5] = (inl >> 10) % (1 << 2)
43	out[6] = (inl >> 12) % (1 << 2)
44	out[7] = (inl >> 14) % (1 << 2)
45	out[8] = (inl >> 16) % (1 << 2)
46	out[9] = (inl >> 18) % (1 << 2)
47	out[10] = (inl >> 20) % (1 << 2)
48	out[11] = (inl >> 22) % (1 << 2)
49	out[12] = (inl >> 24) % (1 << 2)
50	out[13] = (inl >> 26) % (1 << 2)
51	out[14] = (inl >> 28) % (1 << 2)
52	out[15] = (inl >> 30)
53	binary.Read(in, binary.LittleEndian, &inl)
54	out[16] = (inl >> 0) % (1 << 2)
55	out[17] = (inl >> 2) % (1 << 2)
56	out[18] = (inl >> 4) % (1 << 2)
57	out[19] = (inl >> 6) % (1 << 2)
58	out[20] = (inl >> 8) % (1 << 2)
59	out[21] = (inl >> 10) % (1 << 2)
60	out[22] = (inl >> 12) % (1 << 2)
61	out[23] = (inl >> 14) % (1 << 2)
62	out[24] = (inl >> 16) % (1 << 2)
63	out[25] = (inl >> 18) % (1 << 2)
64	out[26] = (inl >> 20) % (1 << 2)
65	out[27] = (inl >> 22) % (1 << 2)
66	out[28] = (inl >> 24) % (1 << 2)
67	out[29] = (inl >> 26) % (1 << 2)
68	out[30] = (inl >> 28) % (1 << 2)
69	out[31] = (inl >> 30)
70}
71
72func unpack3_32(in io.Reader, out []uint32) {
73	var inl uint32
74	binary.Read(in, binary.LittleEndian, &inl)
75	out[0] = (inl >> 0) % (1 << 3)
76	out[1] = (inl >> 3) % (1 << 3)
77	out[2] = (inl >> 6) % (1 << 3)
78	out[3] = (inl >> 9) % (1 << 3)
79	out[4] = (inl >> 12) % (1 << 3)
80	out[5] = (inl >> 15) % (1 << 3)
81	out[6] = (inl >> 18) % (1 << 3)
82	out[7] = (inl >> 21) % (1 << 3)
83	out[8] = (inl >> 24) % (1 << 3)
84	out[9] = (inl >> 27) % (1 << 3)
85	out[10] = (inl >> 30)
86	binary.Read(in, binary.LittleEndian, &inl)
87	out[10] |= (inl % (1 << 1)) << (3 - 1)
88	out[11] = (inl >> 1) % (1 << 3)
89	out[12] = (inl >> 4) % (1 << 3)
90	out[13] = (inl >> 7) % (1 << 3)
91	out[14] = (inl >> 10) % (1 << 3)
92	out[15] = (inl >> 13) % (1 << 3)
93	out[16] = (inl >> 16) % (1 << 3)
94	out[17] = (inl >> 19) % (1 << 3)
95	out[18] = (inl >> 22) % (1 << 3)
96	out[19] = (inl >> 25) % (1 << 3)
97	out[20] = (inl >> 28) % (1 << 3)
98	out[21] = (inl >> 31) % (1 << 3)
99	binary.Read(in, binary.LittleEndian, &inl)
100	out[21] |= (inl % (1 << 2)) << (3 - 2)
101	out[22] = (inl >> 2) % (1 << 3)
102	out[23] = (inl >> 5) % (1 << 3)
103	out[24] = (inl >> 8) % (1 << 3)
104	out[25] = (inl >> 11) % (1 << 3)
105	out[26] = (inl >> 14) % (1 << 3)
106	out[27] = (inl >> 17) % (1 << 3)
107	out[28] = (inl >> 20) % (1 << 3)
108	out[29] = (inl >> 23) % (1 << 3)
109	out[30] = (inl >> 26) % (1 << 3)
110	out[31] = (inl >> 29)
111}
112
113func unpack4_32(in io.Reader, out []uint32) {
114	var inl uint32
115	binary.Read(in, binary.LittleEndian, &inl)
116	for i := 0; i < 28; i += 4 {
117		out[i/4] = (inl >> i) % (1 << 4)
118	}
119	out[7] = (inl >> 28)
120	binary.Read(in, binary.LittleEndian, &inl)
121	for i := 0; i < 28; i += 4 {
122		out[8+i/4] = (inl >> i) % (1 << 4)
123	}
124	out[15] = (inl >> 28)
125	binary.Read(in, binary.LittleEndian, &inl)
126	for i := 0; i < 28; i += 4 {
127		out[16+i/4] = (inl >> i) % (1 << 4)
128	}
129	out[23] = (inl >> 28)
130	binary.Read(in, binary.LittleEndian, &inl)
131	for i := 0; i < 28; i += 4 {
132		out[24+i/4] = (inl >> i) % (1 << 4)
133	}
134	out[31] = (inl >> 28)
135}
136
137func unpack5_32(in io.Reader, out []uint32) {
138	var inl uint32
139	binary.Read(in, binary.LittleEndian, &inl)
140	out[0] = (inl >> 0) % (1 << 5)
141	out[1] = (inl >> 5) % (1 << 5)
142	out[2] = (inl >> 10) % (1 << 5)
143	out[3] = (inl >> 15) % (1 << 5)
144	out[4] = (inl >> 20) % (1 << 5)
145	out[5] = (inl >> 25) % (1 << 5)
146	out[6] = (inl >> 30)
147	binary.Read(in, binary.LittleEndian, &inl)
148	out[6] |= (inl % (1 << 3)) << (5 - 3)
149	out[7] = (inl >> 3) % (1 << 5)
150	out[8] = (inl >> 8) % (1 << 5)
151	out[9] = (inl >> 13) % (1 << 5)
152	out[10] = (inl >> 18) % (1 << 5)
153	out[11] = (inl >> 23) % (1 << 5)
154	out[12] = (inl >> 28)
155	binary.Read(in, binary.LittleEndian, &inl)
156	out[12] |= (inl % (1 << 1)) << (5 - 1)
157	out[13] = (inl >> 1) % (1 << 5)
158	out[14] = (inl >> 6) % (1 << 5)
159	out[15] = (inl >> 11) % (1 << 5)
160	out[16] = (inl >> 16) % (1 << 5)
161	out[17] = (inl >> 21) % (1 << 5)
162	out[18] = (inl >> 26) % (1 << 5)
163	out[19] = (inl >> 31)
164	binary.Read(in, binary.LittleEndian, &inl)
165	out[19] |= (inl % (1 << 4)) << (5 - 4)
166	out[20] = (inl >> 4) % (1 << 5)
167	out[21] = (inl >> 9) % (1 << 5)
168	out[22] = (inl >> 14) % (1 << 5)
169	out[23] = (inl >> 19) % (1 << 5)
170	out[24] = (inl >> 24) % (1 << 5)
171	out[25] = (inl >> 29)
172	binary.Read(in, binary.LittleEndian, &inl)
173	out[25] |= (inl % (1 << 2)) << (5 - 2)
174	out[26] = (inl >> 2) % (1 << 5)
175	out[27] = (inl >> 7) % (1 << 5)
176	out[28] = (inl >> 12) % (1 << 5)
177	out[29] = (inl >> 17) % (1 << 5)
178	out[30] = (inl >> 22) % (1 << 5)
179	out[31] = (inl >> 27)
180}
181
182func unpack6_32(in io.Reader, out []uint32) {
183	var inl uint32
184	binary.Read(in, binary.LittleEndian, &inl)
185	out[0] = (inl >> 0) % (1 << 6)
186	out[1] = (inl >> 6) % (1 << 6)
187	out[2] = (inl >> 12) % (1 << 6)
188	out[3] = (inl >> 18) % (1 << 6)
189	out[4] = (inl >> 24) % (1 << 6)
190	out[5] = (inl >> 30)
191	binary.Read(in, binary.LittleEndian, &inl)
192	out[5] |= (inl % (1 << 4)) << (6 - 4)
193	out[6] = (inl >> 4) % (1 << 6)
194	out[7] = (inl >> 10) % (1 << 6)
195	out[8] = (inl >> 16) % (1 << 6)
196	out[9] = (inl >> 22) % (1 << 6)
197	out[10] = (inl >> 28)
198	binary.Read(in, binary.LittleEndian, &inl)
199	out[10] |= (inl % (1 << 2)) << (6 - 2)
200	out[11] = (inl >> 2) % (1 << 6)
201	out[12] = (inl >> 8) % (1 << 6)
202	out[13] = (inl >> 14) % (1 << 6)
203	out[14] = (inl >> 20) % (1 << 6)
204	out[15] = (inl >> 26)
205	binary.Read(in, binary.LittleEndian, &inl)
206	out[16] = (inl >> 0) % (1 << 6)
207	out[17] = (inl >> 6) % (1 << 6)
208	out[18] = (inl >> 12) % (1 << 6)
209	out[19] = (inl >> 18) % (1 << 6)
210	out[20] = (inl >> 24) % (1 << 6)
211	out[21] = (inl >> 30)
212	binary.Read(in, binary.LittleEndian, &inl)
213	out[21] |= (inl % (1 << 4)) << (6 - 4)
214	out[22] = (inl >> 4) % (1 << 6)
215	out[23] = (inl >> 10) % (1 << 6)
216	out[24] = (inl >> 16) % (1 << 6)
217	out[25] = (inl >> 22) % (1 << 6)
218	out[26] = (inl >> 28)
219	binary.Read(in, binary.LittleEndian, &inl)
220	out[26] |= (inl % (1 << 2)) << (6 - 2)
221	out[27] = (inl >> 2) % (1 << 6)
222	out[28] = (inl >> 8) % (1 << 6)
223	out[29] = (inl >> 14) % (1 << 6)
224	out[30] = (inl >> 20) % (1 << 6)
225	out[31] = (inl >> 26)
226}
227
228func unpack7_32(in io.Reader, out []uint32) {
229	var inl uint32
230	binary.Read(in, binary.LittleEndian, &inl)
231	out[0] = (inl >> 0) % (1 << 7)
232	out[1] = (inl >> 7) % (1 << 7)
233	out[2] = (inl >> 14) % (1 << 7)
234	out[3] = (inl >> 21) % (1 << 7)
235	out[4] = (inl >> 28)
236	binary.Read(in, binary.LittleEndian, &inl)
237	out[4] |= (inl % (1 << 3)) << (7 - 3)
238	out[5] = (inl >> 3) % (1 << 7)
239	out[6] = (inl >> 10) % (1 << 7)
240	out[7] = (inl >> 17) % (1 << 7)
241	out[8] = (inl >> 24) % (1 << 7)
242	out[9] = (inl >> 31)
243	binary.Read(in, binary.LittleEndian, &inl)
244	out[9] |= (inl % (1 << 6)) << (7 - 6)
245	out[10] = (inl >> 6) % (1 << 7)
246	out[11] = (inl >> 13) % (1 << 7)
247	out[12] = (inl >> 20) % (1 << 7)
248	out[13] = (inl >> 27)
249	binary.Read(in, binary.LittleEndian, &inl)
250	out[13] |= (inl % (1 << 2)) << (7 - 2)
251	out[14] = (inl >> 2) % (1 << 7)
252	out[15] = (inl >> 9) % (1 << 7)
253	out[16] = (inl >> 16) % (1 << 7)
254	out[17] = (inl >> 23) % (1 << 7)
255	out[18] = (inl >> 30)
256	binary.Read(in, binary.LittleEndian, &inl)
257	out[18] |= (inl % (1 << 5)) << (7 - 5)
258	out[19] = (inl >> 5) % (1 << 7)
259	out[20] = (inl >> 12) % (1 << 7)
260	out[21] = (inl >> 19) % (1 << 7)
261	out[22] = (inl >> 26)
262	binary.Read(in, binary.LittleEndian, &inl)
263	out[22] |= (inl % (1 << 1)) << (7 - 1)
264	out[23] = (inl >> 1) % (1 << 7)
265	out[24] = (inl >> 8) % (1 << 7)
266	out[25] = (inl >> 15) % (1 << 7)
267	out[26] = (inl >> 22) % (1 << 7)
268	out[27] = (inl >> 29)
269	binary.Read(in, binary.LittleEndian, &inl)
270	out[27] |= (inl % (1 << 4)) << (7 - 4)
271	out[28] = (inl >> 4) % (1 << 7)
272	out[29] = (inl >> 11) % (1 << 7)
273	out[30] = (inl >> 18) % (1 << 7)
274	out[31] = (inl >> 25)
275}
276
277func unpack8_32(in io.Reader, out []uint32) {
278	var inl uint32
279	binary.Read(in, binary.LittleEndian, &inl)
280	for i := 0; i < 24; i += 8 {
281		out[0+i/8] = (inl >> i) % (1 << 8)
282	}
283	out[3] = (inl >> 24)
284	binary.Read(in, binary.LittleEndian, &inl)
285	for i := 0; i < 24; i += 8 {
286		out[4+i/8] = (inl >> i) % (1 << 8)
287	}
288	out[7] = (inl >> 24)
289	binary.Read(in, binary.LittleEndian, &inl)
290	for i := 0; i < 24; i += 8 {
291		out[8+i/8] = (inl >> i) % (1 << 8)
292	}
293	out[11] = (inl >> 24)
294	binary.Read(in, binary.LittleEndian, &inl)
295	for i := 0; i < 24; i += 8 {
296		out[12+i/8] = (inl >> i) % (1 << 8)
297	}
298	out[15] = (inl >> 24)
299	binary.Read(in, binary.LittleEndian, &inl)
300	for i := 0; i < 24; i += 8 {
301		out[16+i/8] = (inl >> i) % (1 << 8)
302	}
303	out[19] = (inl >> 24)
304	binary.Read(in, binary.LittleEndian, &inl)
305	for i := 0; i < 24; i += 8 {
306		out[20+i/8] = (inl >> i) % (1 << 8)
307	}
308	out[23] = (inl >> 24)
309	binary.Read(in, binary.LittleEndian, &inl)
310	for i := 0; i < 24; i += 8 {
311		out[24+i/8] = (inl >> i) % (1 << 8)
312	}
313	out[27] = (inl >> 24)
314	binary.Read(in, binary.LittleEndian, &inl)
315	for i := 0; i < 24; i += 8 {
316		out[28+i/8] = (inl >> i) % (1 << 8)
317	}
318	out[31] = (inl >> 24)
319}
320
321func unpack9_32(in io.Reader, out []uint32) {
322	var inl uint32
323	binary.Read(in, binary.LittleEndian, &inl)
324	out[0] = (inl >> 0) % (1 << 9)
325	out[1] = (inl >> 9) % (1 << 9)
326	out[2] = (inl >> 18) % (1 << 9)
327	out[3] = (inl >> 27)
328	binary.Read(in, binary.LittleEndian, &inl)
329	out[3] |= (inl % (1 << 4)) << (9 - 4)
330	out[4] = (inl >> 4) % (1 << 9)
331	out[5] = (inl >> 13) % (1 << 9)
332	out[6] = (inl >> 22) % (1 << 9)
333	out[7] = (inl >> 31)
334	binary.Read(in, binary.LittleEndian, &inl)
335	out[7] |= (inl % (1 << 8)) << (9 - 8)
336	out[8] = (inl >> 8) % (1 << 9)
337	out[9] = (inl >> 17) % (1 << 9)
338	out[10] = (inl >> 26)
339	binary.Read(in, binary.LittleEndian, &inl)
340	out[10] |= (inl % (1 << 3)) << (9 - 3)
341	out[11] = (inl >> 3) % (1 << 9)
342	out[12] = (inl >> 12) % (1 << 9)
343	out[13] = (inl >> 21) % (1 << 9)
344	out[14] = (inl >> 30)
345	binary.Read(in, binary.LittleEndian, &inl)
346	out[14] |= (inl % (1 << 7)) << (9 - 7)
347	out[15] = (inl >> 7) % (1 << 9)
348	out[16] = (inl >> 16) % (1 << 9)
349	out[17] = (inl >> 25)
350	binary.Read(in, binary.LittleEndian, &inl)
351	out[17] |= (inl % (1 << 2)) << (9 - 2)
352	out[18] = (inl >> 2) % (1 << 9)
353	out[19] = (inl >> 11) % (1 << 9)
354	out[20] = (inl >> 20) % (1 << 9)
355	out[21] = (inl >> 29)
356	binary.Read(in, binary.LittleEndian, &inl)
357	out[21] |= (inl % (1 << 6)) << (9 - 6)
358	out[22] = (inl >> 6) % (1 << 9)
359	out[23] = (inl >> 15) % (1 << 9)
360	out[24] = (inl >> 24)
361	binary.Read(in, binary.LittleEndian, &inl)
362	out[24] |= (inl % (1 << 1)) << (9 - 1)
363	out[25] = (inl >> 1) % (1 << 9)
364	out[26] = (inl >> 10) % (1 << 9)
365	out[27] = (inl >> 19) % (1 << 9)
366	out[28] = (inl >> 28)
367	binary.Read(in, binary.LittleEndian, &inl)
368	out[28] |= (inl % (1 << 5)) << (9 - 5)
369	out[29] = (inl >> 5) % (1 << 9)
370	out[30] = (inl >> 14) % (1 << 9)
371	out[31] = (inl >> 23)
372}
373
374func unpack10_32(in io.Reader, out []uint32) {
375	var inl uint32
376	binary.Read(in, binary.LittleEndian, &inl)
377	out[0] = (inl >> 0) % (1 << 10)
378	out[1] = (inl >> 10) % (1 << 10)
379	out[2] = (inl >> 20) % (1 << 10)
380	out[3] = (inl >> 30)
381	binary.Read(in, binary.LittleEndian, &inl)
382	out[3] |= (inl % (1 << 8)) << (10 - 8)
383	out[4] = (inl >> 8) % (1 << 10)
384	out[5] = (inl >> 18) % (1 << 10)
385	out[6] = (inl >> 28)
386	binary.Read(in, binary.LittleEndian, &inl)
387	out[6] |= (inl % (1 << 6)) << (10 - 6)
388	out[7] = (inl >> 6) % (1 << 10)
389	out[8] = (inl >> 16) % (1 << 10)
390	out[9] = (inl >> 26)
391	binary.Read(in, binary.LittleEndian, &inl)
392	out[9] |= (inl % (1 << 4)) << (10 - 4)
393	out[10] = (inl >> 4) % (1 << 10)
394	out[11] = (inl >> 14) % (1 << 10)
395	out[12] = (inl >> 24)
396	binary.Read(in, binary.LittleEndian, &inl)
397	out[12] |= (inl % (1 << 2)) << (10 - 2)
398	out[13] = (inl >> 2) % (1 << 10)
399	out[14] = (inl >> 12) % (1 << 10)
400	out[15] = (inl >> 22)
401	binary.Read(in, binary.LittleEndian, &inl)
402	out[16] = (inl >> 0) % (1 << 10)
403	out[17] = (inl >> 10) % (1 << 10)
404	out[18] = (inl >> 20) % (1 << 10)
405	out[19] = (inl >> 30)
406	binary.Read(in, binary.LittleEndian, &inl)
407	out[19] |= (inl % (1 << 8)) << (10 - 8)
408	out[20] = (inl >> 8) % (1 << 10)
409	out[21] = (inl >> 18) % (1 << 10)
410	out[22] = (inl >> 28)
411	binary.Read(in, binary.LittleEndian, &inl)
412	out[22] |= (inl % (1 << 6)) << (10 - 6)
413	out[23] = (inl >> 6) % (1 << 10)
414	out[24] = (inl >> 16) % (1 << 10)
415	out[25] = (inl >> 26)
416	binary.Read(in, binary.LittleEndian, &inl)
417	out[25] |= (inl % (1 << 4)) << (10 - 4)
418	out[26] = (inl >> 4) % (1 << 10)
419	out[27] = (inl >> 14) % (1 << 10)
420	out[28] = (inl >> 24)
421	binary.Read(in, binary.LittleEndian, &inl)
422	out[28] |= (inl % (1 << 2)) << (10 - 2)
423	out[29] = (inl >> 2) % (1 << 10)
424	out[30] = (inl >> 12) % (1 << 10)
425	out[31] = (inl >> 22)
426}
427
428func unpack11_32(in io.Reader, out []uint32) {
429	var inl uint32
430	binary.Read(in, binary.LittleEndian, &inl)
431	out[0] = (inl >> 0) % (1 << 11)
432	out[1] = (inl >> 11) % (1 << 11)
433	out[2] = (inl >> 22)
434	binary.Read(in, binary.LittleEndian, &inl)
435	out[2] |= (inl % (1 << 1)) << (11 - 1)
436	out[3] = (inl >> 1) % (1 << 11)
437	out[4] = (inl >> 12) % (1 << 11)
438	out[5] = (inl >> 23)
439	binary.Read(in, binary.LittleEndian, &inl)
440	out[5] |= (inl % (1 << 2)) << (11 - 2)
441	out[6] = (inl >> 2) % (1 << 11)
442	out[7] = (inl >> 13) % (1 << 11)
443	out[8] = (inl >> 24)
444	binary.Read(in, binary.LittleEndian, &inl)
445	out[8] |= (inl % (1 << 3)) << (11 - 3)
446	out[9] = (inl >> 3) % (1 << 11)
447	out[10] = (inl >> 14) % (1 << 11)
448	out[11] = (inl >> 25)
449	binary.Read(in, binary.LittleEndian, &inl)
450	out[11] |= (inl % (1 << 4)) << (11 - 4)
451	out[12] = (inl >> 4) % (1 << 11)
452	out[13] = (inl >> 15) % (1 << 11)
453	out[14] = (inl >> 26)
454	binary.Read(in, binary.LittleEndian, &inl)
455	out[14] |= (inl % (1 << 5)) << (11 - 5)
456	out[15] = (inl >> 5) % (1 << 11)
457	out[16] = (inl >> 16) % (1 << 11)
458	out[17] = (inl >> 27)
459	binary.Read(in, binary.LittleEndian, &inl)
460	out[17] |= (inl % (1 << 6)) << (11 - 6)
461	out[18] = (inl >> 6) % (1 << 11)
462	out[19] = (inl >> 17) % (1 << 11)
463	out[20] = (inl >> 28)
464	binary.Read(in, binary.LittleEndian, &inl)
465	out[20] |= (inl % (1 << 7)) << (11 - 7)
466	out[21] = (inl >> 7) % (1 << 11)
467	out[22] = (inl >> 18) % (1 << 11)
468	out[23] = (inl >> 29)
469	binary.Read(in, binary.LittleEndian, &inl)
470	out[23] |= (inl % (1 << 8)) << (11 - 8)
471	out[24] = (inl >> 8) % (1 << 11)
472	out[25] = (inl >> 19) % (1 << 11)
473	out[26] = (inl >> 30)
474	binary.Read(in, binary.LittleEndian, &inl)
475	out[26] |= (inl % (1 << 9)) << (11 - 9)
476	out[27] = (inl >> 9) % (1 << 11)
477	out[28] = (inl >> 20) % (1 << 11)
478	out[29] = (inl >> 31)
479	binary.Read(in, binary.LittleEndian, &inl)
480	out[29] |= (inl % (1 << 10)) << (11 - 10)
481	out[30] = (inl >> 10) % (1 << 11)
482	out[31] = (inl >> 21)
483}
484
485func unpack12_32(in io.Reader, out []uint32) {
486	var inl uint32
487	binary.Read(in, binary.LittleEndian, &inl)
488	out[0] = (inl >> 0) % (1 << 12)
489	out[1] = (inl >> 12) % (1 << 12)
490	out[2] = (inl >> 24)
491	binary.Read(in, binary.LittleEndian, &inl)
492	out[2] |= (inl % (1 << 4)) << (12 - 4)
493	out[3] = (inl >> 4) % (1 << 12)
494	out[4] = (inl >> 16) % (1 << 12)
495	out[5] = (inl >> 28)
496	binary.Read(in, binary.LittleEndian, &inl)
497	out[5] |= (inl % (1 << 8)) << (12 - 8)
498	out[6] = (inl >> 8) % (1 << 12)
499	out[7] = (inl >> 20)
500	binary.Read(in, binary.LittleEndian, &inl)
501	out[8] = (inl >> 0) % (1 << 12)
502	out[9] = (inl >> 12) % (1 << 12)
503	out[10] = (inl >> 24)
504	binary.Read(in, binary.LittleEndian, &inl)
505	out[10] |= (inl % (1 << 4)) << (12 - 4)
506	out[11] = (inl >> 4) % (1 << 12)
507	out[12] = (inl >> 16) % (1 << 12)
508	out[13] = (inl >> 28)
509	binary.Read(in, binary.LittleEndian, &inl)
510	out[13] |= (inl % (1 << 8)) << (12 - 8)
511	out[14] = (inl >> 8) % (1 << 12)
512	out[15] = (inl >> 20)
513	binary.Read(in, binary.LittleEndian, &inl)
514	out[16] = (inl >> 0) % (1 << 12)
515	out[17] = (inl >> 12) % (1 << 12)
516	out[18] = (inl >> 24)
517	binary.Read(in, binary.LittleEndian, &inl)
518	out[18] |= (inl % (1 << 4)) << (12 - 4)
519	out[19] = (inl >> 4) % (1 << 12)
520	out[20] = (inl >> 16) % (1 << 12)
521	out[21] = (inl >> 28)
522	binary.Read(in, binary.LittleEndian, &inl)
523	out[21] |= (inl % (1 << 8)) << (12 - 8)
524	out[22] = (inl >> 8) % (1 << 12)
525	out[23] = (inl >> 20)
526	binary.Read(in, binary.LittleEndian, &inl)
527	out[24] = (inl >> 0) % (1 << 12)
528	out[25] = (inl >> 12) % (1 << 12)
529	out[26] = (inl >> 24)
530	binary.Read(in, binary.LittleEndian, &inl)
531	out[26] |= (inl % (1 << 4)) << (12 - 4)
532	out[27] = (inl >> 4) % (1 << 12)
533	out[28] = (inl >> 16) % (1 << 12)
534	out[29] = (inl >> 28)
535	binary.Read(in, binary.LittleEndian, &inl)
536	out[29] |= (inl % (1 << 8)) << (12 - 8)
537	out[30] = (inl >> 8) % (1 << 12)
538	out[31] = (inl >> 20)
539}
540
541func unpack13_32(in io.Reader, out []uint32) {
542	var inl uint32
543	binary.Read(in, binary.LittleEndian, &inl)
544	out[0] = (inl >> 0) % (1 << 13)
545	out[1] = (inl >> 13) % (1 << 13)
546	out[2] = (inl >> 26)
547	binary.Read(in, binary.LittleEndian, &inl)
548	out[2] |= (inl % (1 << 7)) << (13 - 7)
549	out[3] = (inl >> 7) % (1 << 13)
550	out[4] = (inl >> 20)
551	binary.Read(in, binary.LittleEndian, &inl)
552	out[4] |= (inl % (1 << 1)) << (13 - 1)
553	out[5] = (inl >> 1) % (1 << 13)
554	out[6] = (inl >> 14) % (1 << 13)
555	out[7] = (inl >> 27)
556	binary.Read(in, binary.LittleEndian, &inl)
557	out[7] |= (inl % (1 << 8)) << (13 - 8)
558	out[8] = (inl >> 8) % (1 << 13)
559	out[9] = (inl >> 21)
560	binary.Read(in, binary.LittleEndian, &inl)
561	out[9] |= (inl % (1 << 2)) << (13 - 2)
562	out[10] = (inl >> 2) % (1 << 13)
563	out[11] = (inl >> 15) % (1 << 13)
564	out[12] = (inl >> 28)
565	binary.Read(in, binary.LittleEndian, &inl)
566	out[12] |= (inl % (1 << 9)) << (13 - 9)
567	out[13] = (inl >> 9) % (1 << 13)
568	out[14] = (inl >> 22)
569	binary.Read(in, binary.LittleEndian, &inl)
570	out[14] |= (inl % (1 << 3)) << (13 - 3)
571	out[15] = (inl >> 3) % (1 << 13)
572	out[16] = (inl >> 16) % (1 << 13)
573	out[17] = (inl >> 29)
574	binary.Read(in, binary.LittleEndian, &inl)
575	out[17] |= (inl % (1 << 10)) << (13 - 10)
576	out[18] = (inl >> 10) % (1 << 13)
577	out[19] = (inl >> 23)
578	binary.Read(in, binary.LittleEndian, &inl)
579	out[19] |= (inl % (1 << 4)) << (13 - 4)
580	out[20] = (inl >> 4) % (1 << 13)
581	out[21] = (inl >> 17) % (1 << 13)
582	out[22] = (inl >> 30)
583	binary.Read(in, binary.LittleEndian, &inl)
584	out[22] |= (inl % (1 << 11)) << (13 - 11)
585	out[23] = (inl >> 11) % (1 << 13)
586	out[24] = (inl >> 24)
587	binary.Read(in, binary.LittleEndian, &inl)
588	out[24] |= (inl % (1 << 5)) << (13 - 5)
589	out[25] = (inl >> 5) % (1 << 13)
590	out[26] = (inl >> 18) % (1 << 13)
591	out[27] = (inl >> 31)
592	binary.Read(in, binary.LittleEndian, &inl)
593	out[27] |= (inl % (1 << 12)) << (13 - 12)
594	out[28] = (inl >> 12) % (1 << 13)
595	out[29] = (inl >> 25)
596	binary.Read(in, binary.LittleEndian, &inl)
597	out[29] |= (inl % (1 << 6)) << (13 - 6)
598	out[30] = (inl >> 6) % (1 << 13)
599	out[31] = (inl >> 19)
600}
601
602func unpack14_32(in io.Reader, out []uint32) {
603	var inl uint32
604	binary.Read(in, binary.LittleEndian, &inl)
605	out[0] = (inl >> 0) % (1 << 14)
606	out[1] = (inl >> 14) % (1 << 14)
607	out[2] = (inl >> 28)
608	binary.Read(in, binary.LittleEndian, &inl)
609	out[2] |= (inl % (1 << 10)) << (14 - 10)
610	out[3] = (inl >> 10) % (1 << 14)
611	out[4] = (inl >> 24)
612	binary.Read(in, binary.LittleEndian, &inl)
613	out[4] |= (inl % (1 << 6)) << (14 - 6)
614	out[5] = (inl >> 6) % (1 << 14)
615	out[6] = (inl >> 20)
616	binary.Read(in, binary.LittleEndian, &inl)
617	out[6] |= (inl % (1 << 2)) << (14 - 2)
618	out[7] = (inl >> 2) % (1 << 14)
619	out[8] = (inl >> 16) % (1 << 14)
620	out[9] = (inl >> 30)
621	binary.Read(in, binary.LittleEndian, &inl)
622	out[9] |= (inl % (1 << 12)) << (14 - 12)
623	out[10] = (inl >> 12) % (1 << 14)
624	out[11] = (inl >> 26)
625	binary.Read(in, binary.LittleEndian, &inl)
626	out[11] |= (inl % (1 << 8)) << (14 - 8)
627	out[12] = (inl >> 8) % (1 << 14)
628	out[13] = (inl >> 22)
629	binary.Read(in, binary.LittleEndian, &inl)
630	out[13] |= (inl % (1 << 4)) << (14 - 4)
631	out[14] = (inl >> 4) % (1 << 14)
632	out[15] = (inl >> 18)
633	binary.Read(in, binary.LittleEndian, &inl)
634	out[16] = (inl >> 0) % (1 << 14)
635	out[17] = (inl >> 14) % (1 << 14)
636	out[18] = (inl >> 28)
637	binary.Read(in, binary.LittleEndian, &inl)
638	out[18] |= (inl % (1 << 10)) << (14 - 10)
639	out[19] = (inl >> 10) % (1 << 14)
640	out[20] = (inl >> 24)
641	binary.Read(in, binary.LittleEndian, &inl)
642	out[20] |= (inl % (1 << 6)) << (14 - 6)
643	out[21] = (inl >> 6) % (1 << 14)
644	out[22] = (inl >> 20)
645	binary.Read(in, binary.LittleEndian, &inl)
646	out[22] |= (inl % (1 << 2)) << (14 - 2)
647	out[23] = (inl >> 2) % (1 << 14)
648	out[24] = (inl >> 16) % (1 << 14)
649	out[25] = (inl >> 30)
650	binary.Read(in, binary.LittleEndian, &inl)
651	out[25] |= (inl % (1 << 12)) << (14 - 12)
652	out[26] = (inl >> 12) % (1 << 14)
653	out[27] = (inl >> 26)
654	binary.Read(in, binary.LittleEndian, &inl)
655	out[27] |= (inl % (1 << 8)) << (14 - 8)
656	out[28] = (inl >> 8) % (1 << 14)
657	out[29] = (inl >> 22)
658	binary.Read(in, binary.LittleEndian, &inl)
659	out[29] |= (inl % (1 << 4)) << (14 - 4)
660	out[30] = (inl >> 4) % (1 << 14)
661	out[31] = (inl >> 18)
662}
663
664func unpack15_32(in io.Reader, out []uint32) {
665	var inl uint32
666	binary.Read(in, binary.LittleEndian, &inl)
667	out[0] = (inl >> 0) % (1 << 15)
668	out[1] = (inl >> 15) % (1 << 15)
669	out[2] = (inl >> 30)
670	binary.Read(in, binary.LittleEndian, &inl)
671	out[2] |= (inl % (1 << 13)) << (15 - 13)
672	out[3] = (inl >> 13) % (1 << 15)
673	out[4] = (inl >> 28)
674	binary.Read(in, binary.LittleEndian, &inl)
675	out[4] |= (inl % (1 << 11)) << (15 - 11)
676	out[5] = (inl >> 11) % (1 << 15)
677	out[6] = (inl >> 26)
678	binary.Read(in, binary.LittleEndian, &inl)
679	out[6] |= (inl % (1 << 9)) << (15 - 9)
680	out[7] = (inl >> 9) % (1 << 15)
681	out[8] = (inl >> 24)
682	binary.Read(in, binary.LittleEndian, &inl)
683	out[8] |= (inl % (1 << 7)) << (15 - 7)
684	out[9] = (inl >> 7) % (1 << 15)
685	out[10] = (inl >> 22)
686	binary.Read(in, binary.LittleEndian, &inl)
687	out[10] |= (inl % (1 << 5)) << (15 - 5)
688	out[11] = (inl >> 5) % (1 << 15)
689	out[12] = (inl >> 20)
690	binary.Read(in, binary.LittleEndian, &inl)
691	out[12] |= (inl % (1 << 3)) << (15 - 3)
692	out[13] = (inl >> 3) % (1 << 15)
693	out[14] = (inl >> 18)
694	binary.Read(in, binary.LittleEndian, &inl)
695	out[14] |= (inl % (1 << 1)) << (15 - 1)
696	out[15] = (inl >> 1) % (1 << 15)
697	out[16] = (inl >> 16) % (1 << 15)
698	out[17] = (inl >> 31)
699	binary.Read(in, binary.LittleEndian, &inl)
700	out[17] |= (inl % (1 << 14)) << (15 - 14)
701	out[18] = (inl >> 14) % (1 << 15)
702	out[19] = (inl >> 29)
703	binary.Read(in, binary.LittleEndian, &inl)
704	out[19] |= (inl % (1 << 12)) << (15 - 12)
705	out[20] = (inl >> 12) % (1 << 15)
706	out[21] = (inl >> 27)
707	binary.Read(in, binary.LittleEndian, &inl)
708	out[21] |= (inl % (1 << 10)) << (15 - 10)
709	out[22] = (inl >> 10) % (1 << 15)
710	out[23] = (inl >> 25)
711	binary.Read(in, binary.LittleEndian, &inl)
712	out[23] |= (inl % (1 << 8)) << (15 - 8)
713	out[24] = (inl >> 8) % (1 << 15)
714	out[25] = (inl >> 23)
715	binary.Read(in, binary.LittleEndian, &inl)
716	out[25] |= (inl % (1 << 6)) << (15 - 6)
717	out[26] = (inl >> 6) % (1 << 15)
718	out[27] = (inl >> 21)
719	binary.Read(in, binary.LittleEndian, &inl)
720	out[27] |= (inl % (1 << 4)) << (15 - 4)
721	out[28] = (inl >> 4) % (1 << 15)
722	out[29] = (inl >> 19)
723	binary.Read(in, binary.LittleEndian, &inl)
724	out[29] |= (inl % (1 << 2)) << (15 - 2)
725	out[30] = (inl >> 2) % (1 << 15)
726	out[31] = (inl >> 17)
727}
728
729func unpack16_32(in io.Reader, out []uint32) {
730	var inl uint32
731	for i := 0; i < 16; i++ {
732		binary.Read(in, binary.LittleEndian, &inl)
733		out[i*2] = (inl >> 0) % (1 << 16)
734		out[(i*2)+1] = (inl >> 16)
735	}
736}
737
738func unpack17_32(in io.Reader, out []uint32) {
739	var inl uint32
740	binary.Read(in, binary.LittleEndian, &inl)
741	out[0] = (inl >> 0) % (1 << 17)
742	out[1] = (inl >> 17)
743	binary.Read(in, binary.LittleEndian, &inl)
744	out[1] |= (inl % (1 << 2)) << (17 - 2)
745	out[2] = (inl >> 2) % (1 << 17)
746	out[3] = (inl >> 19)
747	binary.Read(in, binary.LittleEndian, &inl)
748	out[3] |= (inl % (1 << 4)) << (17 - 4)
749	out[4] = (inl >> 4) % (1 << 17)
750	out[5] = (inl >> 21)
751	binary.Read(in, binary.LittleEndian, &inl)
752	out[5] |= (inl % (1 << 6)) << (17 - 6)
753	out[6] = (inl >> 6) % (1 << 17)
754	out[7] = (inl >> 23)
755	binary.Read(in, binary.LittleEndian, &inl)
756	out[7] |= (inl % (1 << 8)) << (17 - 8)
757	out[8] = (inl >> 8) % (1 << 17)
758	out[9] = (inl >> 25)
759	binary.Read(in, binary.LittleEndian, &inl)
760	out[9] |= (inl % (1 << 10)) << (17 - 10)
761	out[10] = (inl >> 10) % (1 << 17)
762	out[11] = (inl >> 27)
763	binary.Read(in, binary.LittleEndian, &inl)
764	out[11] |= (inl % (1 << 12)) << (17 - 12)
765	out[12] = (inl >> 12) % (1 << 17)
766	out[13] = (inl >> 29)
767	binary.Read(in, binary.LittleEndian, &inl)
768	out[13] |= (inl % (1 << 14)) << (17 - 14)
769	out[14] = (inl >> 14) % (1 << 17)
770	out[15] = (inl >> 31)
771	binary.Read(in, binary.LittleEndian, &inl)
772	out[15] |= (inl % (1 << 16)) << (17 - 16)
773	out[16] = (inl >> 16)
774	binary.Read(in, binary.LittleEndian, &inl)
775	out[16] |= (inl % (1 << 1)) << (17 - 1)
776	out[17] = (inl >> 1) % (1 << 17)
777	out[18] = (inl >> 18)
778	binary.Read(in, binary.LittleEndian, &inl)
779	out[18] |= (inl % (1 << 3)) << (17 - 3)
780	out[19] = (inl >> 3) % (1 << 17)
781	out[20] = (inl >> 20)
782	binary.Read(in, binary.LittleEndian, &inl)
783	out[20] |= (inl % (1 << 5)) << (17 - 5)
784	out[21] = (inl >> 5) % (1 << 17)
785	out[22] = (inl >> 22)
786	binary.Read(in, binary.LittleEndian, &inl)
787	out[22] |= (inl % (1 << 7)) << (17 - 7)
788	out[23] = (inl >> 7) % (1 << 17)
789	out[24] = (inl >> 24)
790	binary.Read(in, binary.LittleEndian, &inl)
791	out[24] |= (inl % (1 << 9)) << (17 - 9)
792	out[25] = (inl >> 9) % (1 << 17)
793	out[26] = (inl >> 26)
794	binary.Read(in, binary.LittleEndian, &inl)
795	out[26] |= (inl % (1 << 11)) << (17 - 11)
796	out[27] = (inl >> 11) % (1 << 17)
797	out[28] = (inl >> 28)
798	binary.Read(in, binary.LittleEndian, &inl)
799	out[28] |= (inl % (1 << 13)) << (17 - 13)
800	out[29] = (inl >> 13) % (1 << 17)
801	out[30] = (inl >> 30)
802	binary.Read(in, binary.LittleEndian, &inl)
803	out[30] |= (inl % (1 << 15)) << (17 - 15)
804	out[31] = (inl >> 15)
805}
806
807func unpack18_32(in io.Reader, out []uint32) {
808	var inl uint32
809	binary.Read(in, binary.LittleEndian, &inl)
810	out[0] = (inl >> 0) % (1 << 18)
811	out[1] = (inl >> 18)
812	binary.Read(in, binary.LittleEndian, &inl)
813	out[1] |= (inl % (1 << 4)) << (18 - 4)
814	out[2] = (inl >> 4) % (1 << 18)
815	out[3] = (inl >> 22)
816	binary.Read(in, binary.LittleEndian, &inl)
817	out[3] |= (inl % (1 << 8)) << (18 - 8)
818	out[4] = (inl >> 8) % (1 << 18)
819	out[5] = (inl >> 26)
820	binary.Read(in, binary.LittleEndian, &inl)
821	out[5] |= (inl % (1 << 12)) << (18 - 12)
822	out[6] = (inl >> 12) % (1 << 18)
823	out[7] = (inl >> 30)
824	binary.Read(in, binary.LittleEndian, &inl)
825	out[7] |= (inl % (1 << 16)) << (18 - 16)
826	out[8] = (inl >> 16)
827	binary.Read(in, binary.LittleEndian, &inl)
828	out[8] |= (inl % (1 << 2)) << (18 - 2)
829	out[9] = (inl >> 2) % (1 << 18)
830	out[10] = (inl >> 20)
831	binary.Read(in, binary.LittleEndian, &inl)
832	out[10] |= (inl % (1 << 6)) << (18 - 6)
833	out[11] = (inl >> 6) % (1 << 18)
834	out[12] = (inl >> 24)
835	binary.Read(in, binary.LittleEndian, &inl)
836	out[12] |= (inl % (1 << 10)) << (18 - 10)
837	out[13] = (inl >> 10) % (1 << 18)
838	out[14] = (inl >> 28)
839	binary.Read(in, binary.LittleEndian, &inl)
840	out[14] |= (inl % (1 << 14)) << (18 - 14)
841	out[15] = (inl >> 14)
842	binary.Read(in, binary.LittleEndian, &inl)
843	out[16] = (inl >> 0) % (1 << 18)
844	out[17] = (inl >> 18)
845	binary.Read(in, binary.LittleEndian, &inl)
846	out[17] |= (inl % (1 << 4)) << (18 - 4)
847	out[18] = (inl >> 4) % (1 << 18)
848	out[19] = (inl >> 22)
849	binary.Read(in, binary.LittleEndian, &inl)
850	out[19] |= (inl % (1 << 8)) << (18 - 8)
851	out[20] = (inl >> 8) % (1 << 18)
852	out[21] = (inl >> 26)
853	binary.Read(in, binary.LittleEndian, &inl)
854	out[21] |= (inl % (1 << 12)) << (18 - 12)
855	out[22] = (inl >> 12) % (1 << 18)
856	out[23] = (inl >> 30)
857	binary.Read(in, binary.LittleEndian, &inl)
858	out[23] |= (inl % (1 << 16)) << (18 - 16)
859	out[24] = (inl >> 16)
860	binary.Read(in, binary.LittleEndian, &inl)
861	out[24] |= (inl % (1 << 2)) << (18 - 2)
862	out[25] = (inl >> 2) % (1 << 18)
863	out[26] = (inl >> 20)
864	binary.Read(in, binary.LittleEndian, &inl)
865	out[26] |= (inl % (1 << 6)) << (18 - 6)
866	out[27] = (inl >> 6) % (1 << 18)
867	out[28] = (inl >> 24)
868	binary.Read(in, binary.LittleEndian, &inl)
869	out[28] |= (inl % (1 << 10)) << (18 - 10)
870	out[29] = (inl >> 10) % (1 << 18)
871	out[30] = (inl >> 28)
872	binary.Read(in, binary.LittleEndian, &inl)
873	out[30] |= (inl % (1 << 14)) << (18 - 14)
874	out[31] = (inl >> 14)
875}
876
877func unpack19_32(in io.Reader, out []uint32) {
878	var inl uint32
879	binary.Read(in, binary.LittleEndian, &inl)
880	out[0] = (inl >> 0) % (1 << 19)
881	out[1] = (inl >> 19)
882	binary.Read(in, binary.LittleEndian, &inl)
883	out[1] |= (inl % (1 << 6)) << (19 - 6)
884	out[2] = (inl >> 6) % (1 << 19)
885	out[3] = (inl >> 25)
886	binary.Read(in, binary.LittleEndian, &inl)
887	out[3] |= (inl % (1 << 12)) << (19 - 12)
888	out[4] = (inl >> 12) % (1 << 19)
889	out[5] = (inl >> 31)
890	binary.Read(in, binary.LittleEndian, &inl)
891	out[5] |= (inl % (1 << 18)) << (19 - 18)
892	out[6] = (inl >> 18)
893	binary.Read(in, binary.LittleEndian, &inl)
894	out[6] |= (inl % (1 << 5)) << (19 - 5)
895	out[7] = (inl >> 5) % (1 << 19)
896	out[8] = (inl >> 24)
897	binary.Read(in, binary.LittleEndian, &inl)
898	out[8] |= (inl % (1 << 11)) << (19 - 11)
899	out[9] = (inl >> 11) % (1 << 19)
900	out[10] = (inl >> 30)
901	binary.Read(in, binary.LittleEndian, &inl)
902	out[10] |= (inl % (1 << 17)) << (19 - 17)
903	out[11] = (inl >> 17)
904	binary.Read(in, binary.LittleEndian, &inl)
905	out[11] |= (inl % (1 << 4)) << (19 - 4)
906	out[12] = (inl >> 4) % (1 << 19)
907	out[13] = (inl >> 23)
908	binary.Read(in, binary.LittleEndian, &inl)
909	out[13] |= (inl % (1 << 10)) << (19 - 10)
910	out[14] = (inl >> 10) % (1 << 19)
911	out[15] = (inl >> 29)
912	binary.Read(in, binary.LittleEndian, &inl)
913	out[15] |= (inl % (1 << 16)) << (19 - 16)
914	out[16] = (inl >> 16)
915	binary.Read(in, binary.LittleEndian, &inl)
916	out[16] |= (inl % (1 << 3)) << (19 - 3)
917	out[17] = (inl >> 3) % (1 << 19)
918	out[18] = (inl >> 22)
919	binary.Read(in, binary.LittleEndian, &inl)
920	out[18] |= (inl % (1 << 9)) << (19 - 9)
921	out[19] = (inl >> 9) % (1 << 19)
922	out[20] = (inl >> 28)
923	binary.Read(in, binary.LittleEndian, &inl)
924	out[20] |= (inl % (1 << 15)) << (19 - 15)
925	out[21] = (inl >> 15)
926	binary.Read(in, binary.LittleEndian, &inl)
927	out[21] |= (inl % (1 << 2)) << (19 - 2)
928	out[22] = (inl >> 2) % (1 << 19)
929	out[23] = (inl >> 21)
930	binary.Read(in, binary.LittleEndian, &inl)
931	out[23] |= (inl % (1 << 8)) << (19 - 8)
932	out[24] = (inl >> 8) % (1 << 19)
933	out[25] = (inl >> 27)
934	binary.Read(in, binary.LittleEndian, &inl)
935	out[25] |= (inl % (1 << 14)) << (19 - 14)
936	out[26] = (inl >> 14)
937	binary.Read(in, binary.LittleEndian, &inl)
938	out[26] |= (inl % (1 << 1)) << (19 - 1)
939	out[27] = (inl >> 1) % (1 << 19)
940	out[28] = (inl >> 20)
941	binary.Read(in, binary.LittleEndian, &inl)
942	out[28] |= (inl % (1 << 7)) << (19 - 7)
943	out[29] = (inl >> 7) % (1 << 19)
944	out[30] = (inl >> 26)
945	binary.Read(in, binary.LittleEndian, &inl)
946	out[30] |= (inl % (1 << 13)) << (19 - 13)
947	out[31] = (inl >> 13)
948}
949
950func unpack20_32(in io.Reader, out []uint32) {
951	var inl uint32
952	binary.Read(in, binary.LittleEndian, &inl)
953	out[0] = (inl >> 0) % (1 << 20)
954	out[1] = (inl >> 20)
955	binary.Read(in, binary.LittleEndian, &inl)
956	out[1] |= (inl % (1 << 8)) << (20 - 8)
957	out[2] = (inl >> 8) % (1 << 20)
958	out[3] = (inl >> 28)
959	binary.Read(in, binary.LittleEndian, &inl)
960	out[3] |= (inl % (1 << 16)) << (20 - 16)
961	out[4] = (inl >> 16)
962	binary.Read(in, binary.LittleEndian, &inl)
963	out[4] |= (inl % (1 << 4)) << (20 - 4)
964	out[5] = (inl >> 4) % (1 << 20)
965	out[6] = (inl >> 24)
966	binary.Read(in, binary.LittleEndian, &inl)
967	out[6] |= (inl % (1 << 12)) << (20 - 12)
968	out[7] = (inl >> 12)
969	binary.Read(in, binary.LittleEndian, &inl)
970	out[8] = (inl >> 0) % (1 << 20)
971	out[9] = (inl >> 20)
972	binary.Read(in, binary.LittleEndian, &inl)
973	out[9] |= (inl % (1 << 8)) << (20 - 8)
974	out[10] = (inl >> 8) % (1 << 20)
975	out[11] = (inl >> 28)
976	binary.Read(in, binary.LittleEndian, &inl)
977	out[11] |= (inl % (1 << 16)) << (20 - 16)
978	out[12] = (inl >> 16)
979	binary.Read(in, binary.LittleEndian, &inl)
980	out[12] |= (inl % (1 << 4)) << (20 - 4)
981	out[13] = (inl >> 4) % (1 << 20)
982	out[14] = (inl >> 24)
983	binary.Read(in, binary.LittleEndian, &inl)
984	out[14] |= (inl % (1 << 12)) << (20 - 12)
985	out[15] = (inl >> 12)
986	binary.Read(in, binary.LittleEndian, &inl)
987	out[16] = (inl >> 0) % (1 << 20)
988	out[17] = (inl >> 20)
989	binary.Read(in, binary.LittleEndian, &inl)
990	out[17] |= (inl % (1 << 8)) << (20 - 8)
991	out[18] = (inl >> 8) % (1 << 20)
992	out[19] = (inl >> 28)
993	binary.Read(in, binary.LittleEndian, &inl)
994	out[19] |= (inl % (1 << 16)) << (20 - 16)
995	out[20] = (inl >> 16)
996	binary.Read(in, binary.LittleEndian, &inl)
997	out[20] |= (inl % (1 << 4)) << (20 - 4)
998	out[21] = (inl >> 4) % (1 << 20)
999	out[22] = (inl >> 24)
1000	binary.Read(in, binary.LittleEndian, &inl)
1001	out[22] |= (inl % (1 << 12)) << (20 - 12)
1002	out[23] = (inl >> 12)
1003	binary.Read(in, binary.LittleEndian, &inl)
1004	out[24] = (inl >> 0) % (1 << 20)
1005	out[25] = (inl >> 20)
1006	binary.Read(in, binary.LittleEndian, &inl)
1007	out[25] |= (inl % (1 << 8)) << (20 - 8)
1008	out[26] = (inl >> 8) % (1 << 20)
1009	out[27] = (inl >> 28)
1010	binary.Read(in, binary.LittleEndian, &inl)
1011	out[27] |= (inl % (1 << 16)) << (20 - 16)
1012	out[28] = (inl >> 16)
1013	binary.Read(in, binary.LittleEndian, &inl)
1014	out[28] |= (inl % (1 << 4)) << (20 - 4)
1015	out[29] = (inl >> 4) % (1 << 20)
1016	out[30] = (inl >> 24)
1017	binary.Read(in, binary.LittleEndian, &inl)
1018	out[30] |= (inl % (1 << 12)) << (20 - 12)
1019	out[31] = (inl >> 12)
1020}
1021
1022func unpack21_32(in io.Reader, out []uint32) {
1023	var inl uint32
1024	binary.Read(in, binary.LittleEndian, &inl)
1025	out[0] = (inl >> 0) % (1 << 21)
1026	out[1] = (inl >> 21)
1027	binary.Read(in, binary.LittleEndian, &inl)
1028	out[1] |= (inl % (1 << 10)) << (21 - 10)
1029	out[2] = (inl >> 10) % (1 << 21)
1030	out[3] = (inl >> 31)
1031	binary.Read(in, binary.LittleEndian, &inl)
1032	out[3] |= (inl % (1 << 20)) << (21 - 20)
1033	out[4] = (inl >> 20)
1034	binary.Read(in, binary.LittleEndian, &inl)
1035	out[4] |= (inl % (1 << 9)) << (21 - 9)
1036	out[5] = (inl >> 9) % (1 << 21)
1037	out[6] = (inl >> 30)
1038	binary.Read(in, binary.LittleEndian, &inl)
1039	out[6] |= (inl % (1 << 19)) << (21 - 19)
1040	out[7] = (inl >> 19)
1041	binary.Read(in, binary.LittleEndian, &inl)
1042	out[7] |= (inl % (1 << 8)) << (21 - 8)
1043	out[8] = (inl >> 8) % (1 << 21)
1044	out[9] = (inl >> 29)
1045	binary.Read(in, binary.LittleEndian, &inl)
1046	out[9] |= (inl % (1 << 18)) << (21 - 18)
1047	out[10] = (inl >> 18)
1048	binary.Read(in, binary.LittleEndian, &inl)
1049	out[10] |= (inl % (1 << 7)) << (21 - 7)
1050	out[11] = (inl >> 7) % (1 << 21)
1051	out[12] = (inl >> 28)
1052	binary.Read(in, binary.LittleEndian, &inl)
1053	out[12] |= (inl % (1 << 17)) << (21 - 17)
1054	out[13] = (inl >> 17)
1055	binary.Read(in, binary.LittleEndian, &inl)
1056	out[13] |= (inl % (1 << 6)) << (21 - 6)
1057	out[14] = (inl >> 6) % (1 << 21)
1058	out[15] = (inl >> 27)
1059	binary.Read(in, binary.LittleEndian, &inl)
1060	out[15] |= (inl % (1 << 16)) << (21 - 16)
1061	out[16] = (inl >> 16)
1062	binary.Read(in, binary.LittleEndian, &inl)
1063	out[16] |= (inl % (1 << 5)) << (21 - 5)
1064	out[17] = (inl >> 5) % (1 << 21)
1065	out[18] = (inl >> 26)
1066	binary.Read(in, binary.LittleEndian, &inl)
1067	out[18] |= (inl % (1 << 15)) << (21 - 15)
1068	out[19] = (inl >> 15)
1069	binary.Read(in, binary.LittleEndian, &inl)
1070	out[19] |= (inl % (1 << 4)) << (21 - 4)
1071	out[20] = (inl >> 4) % (1 << 21)
1072	out[21] = (inl >> 25)
1073	binary.Read(in, binary.LittleEndian, &inl)
1074	out[21] |= (inl % (1 << 14)) << (21 - 14)
1075	out[22] = (inl >> 14)
1076	binary.Read(in, binary.LittleEndian, &inl)
1077	out[22] |= (inl % (1 << 3)) << (21 - 3)
1078	out[23] = (inl >> 3) % (1 << 21)
1079	out[24] = (inl >> 24)
1080	binary.Read(in, binary.LittleEndian, &inl)
1081	out[24] |= (inl % (1 << 13)) << (21 - 13)
1082	out[25] = (inl >> 13)
1083	binary.Read(in, binary.LittleEndian, &inl)
1084	out[25] |= (inl % (1 << 2)) << (21 - 2)
1085	out[26] = (inl >> 2) % (1 << 21)
1086	out[27] = (inl >> 23)
1087	binary.Read(in, binary.LittleEndian, &inl)
1088	out[27] |= (inl % (1 << 12)) << (21 - 12)
1089	out[28] = (inl >> 12)
1090	binary.Read(in, binary.LittleEndian, &inl)
1091	out[28] |= (inl % (1 << 1)) << (21 - 1)
1092	out[29] = (inl >> 1) % (1 << 21)
1093	out[30] = (inl >> 22)
1094	binary.Read(in, binary.LittleEndian, &inl)
1095	out[30] |= (inl % (1 << 11)) << (21 - 11)
1096	out[31] = (inl >> 11)
1097}
1098
1099func unpack22_32(in io.Reader, out []uint32) {
1100	var inl uint32
1101	binary.Read(in, binary.LittleEndian, &inl)
1102	out[0] = (inl >> 0) % (1 << 22)
1103	out[1] = (inl >> 22)
1104	binary.Read(in, binary.LittleEndian, &inl)
1105	out[1] |= (inl % (1 << 12)) << (22 - 12)
1106	out[2] = (inl >> 12)
1107	binary.Read(in, binary.LittleEndian, &inl)
1108	out[2] |= (inl % (1 << 2)) << (22 - 2)
1109	out[3] = (inl >> 2) % (1 << 22)
1110	out[4] = (inl >> 24)
1111	binary.Read(in, binary.LittleEndian, &inl)
1112	out[4] |= (inl % (1 << 14)) << (22 - 14)
1113	out[5] = (inl >> 14)
1114	binary.Read(in, binary.LittleEndian, &inl)
1115	out[5] |= (inl % (1 << 4)) << (22 - 4)
1116	out[6] = (inl >> 4) % (1 << 22)
1117	out[7] = (inl >> 26)
1118	binary.Read(in, binary.LittleEndian, &inl)
1119	out[7] |= (inl % (1 << 16)) << (22 - 16)
1120	out[8] = (inl >> 16)
1121	binary.Read(in, binary.LittleEndian, &inl)
1122	out[8] |= (inl % (1 << 6)) << (22 - 6)
1123	out[9] = (inl >> 6) % (1 << 22)
1124	out[10] = (inl >> 28)
1125	binary.Read(in, binary.LittleEndian, &inl)
1126	out[10] |= (inl % (1 << 18)) << (22 - 18)
1127	out[11] = (inl >> 18)
1128	binary.Read(in, binary.LittleEndian, &inl)
1129	out[11] |= (inl % (1 << 8)) << (22 - 8)
1130	out[12] = (inl >> 8) % (1 << 22)
1131	out[13] = (inl >> 30)
1132	binary.Read(in, binary.LittleEndian, &inl)
1133	out[13] |= (inl % (1 << 20)) << (22 - 20)
1134	out[14] = (inl >> 20)
1135	binary.Read(in, binary.LittleEndian, &inl)
1136	out[14] |= (inl % (1 << 10)) << (22 - 10)
1137	out[15] = (inl >> 10)
1138	binary.Read(in, binary.LittleEndian, &inl)
1139	out[16] = (inl >> 0) % (1 << 22)
1140	out[17] = (inl >> 22)
1141	binary.Read(in, binary.LittleEndian, &inl)
1142	out[17] |= (inl % (1 << 12)) << (22 - 12)
1143	out[18] = (inl >> 12)
1144	binary.Read(in, binary.LittleEndian, &inl)
1145	out[18] |= (inl % (1 << 2)) << (22 - 2)
1146	out[19] = (inl >> 2) % (1 << 22)
1147	out[20] = (inl >> 24)
1148	binary.Read(in, binary.LittleEndian, &inl)
1149	out[20] |= (inl % (1 << 14)) << (22 - 14)
1150	out[21] = (inl >> 14)
1151	binary.Read(in, binary.LittleEndian, &inl)
1152	out[21] |= (inl % (1 << 4)) << (22 - 4)
1153	out[22] = (inl >> 4) % (1 << 22)
1154	out[23] = (inl >> 26)
1155	binary.Read(in, binary.LittleEndian, &inl)
1156	out[23] |= (inl % (1 << 16)) << (22 - 16)
1157	out[24] = (inl >> 16)
1158	binary.Read(in, binary.LittleEndian, &inl)
1159	out[24] |= (inl % (1 << 6)) << (22 - 6)
1160	out[25] = (inl >> 6) % (1 << 22)
1161	out[26] = (inl >> 28)
1162	binary.Read(in, binary.LittleEndian, &inl)
1163	out[26] |= (inl % (1 << 18)) << (22 - 18)
1164	out[27] = (inl >> 18)
1165	binary.Read(in, binary.LittleEndian, &inl)
1166	out[27] |= (inl % (1 << 8)) << (22 - 8)
1167	out[28] = (inl >> 8) % (1 << 22)
1168	out[29] = (inl >> 30)
1169	binary.Read(in, binary.LittleEndian, &inl)
1170	out[29] |= (inl % (1 << 20)) << (22 - 20)
1171	out[30] = (inl >> 20)
1172	binary.Read(in, binary.LittleEndian, &inl)
1173	out[30] |= (inl % (1 << 10)) << (22 - 10)
1174	out[31] = (inl >> 10)
1175}
1176
1177func unpack23_32(in io.Reader, out []uint32) {
1178	var inl uint32
1179	binary.Read(in, binary.LittleEndian, &inl)
1180	out[0] = (inl >> 0) % (1 << 23)
1181	out[1] = (inl >> 23)
1182	binary.Read(in, binary.LittleEndian, &inl)
1183	out[1] |= (inl % (1 << 14)) << (23 - 14)
1184	out[2] = (inl >> 14)
1185	binary.Read(in, binary.LittleEndian, &inl)
1186	out[2] |= (inl % (1 << 5)) << (23 - 5)
1187	out[3] = (inl >> 5) % (1 << 23)
1188	out[4] = (inl >> 28)
1189	binary.Read(in, binary.LittleEndian, &inl)
1190	out[4] |= (inl % (1 << 19)) << (23 - 19)
1191	out[5] = (inl >> 19)
1192	binary.Read(in, binary.LittleEndian, &inl)
1193	out[5] |= (inl % (1 << 10)) << (23 - 10)
1194	out[6] = (inl >> 10)
1195	binary.Read(in, binary.LittleEndian, &inl)
1196	out[6] |= (inl % (1 << 1)) << (23 - 1)
1197	out[7] = (inl >> 1) % (1 << 23)
1198	out[8] = (inl >> 24)
1199	binary.Read(in, binary.LittleEndian, &inl)
1200	out[8] |= (inl % (1 << 15)) << (23 - 15)
1201	out[9] = (inl >> 15)
1202	binary.Read(in, binary.LittleEndian, &inl)
1203	out[9] |= (inl % (1 << 6)) << (23 - 6)
1204	out[10] = (inl >> 6) % (1 << 23)
1205	out[11] = (inl >> 29)
1206	binary.Read(in, binary.LittleEndian, &inl)
1207	out[11] |= (inl % (1 << 20)) << (23 - 20)
1208	out[12] = (inl >> 20)
1209	binary.Read(in, binary.LittleEndian, &inl)
1210	out[12] |= (inl % (1 << 11)) << (23 - 11)
1211	out[13] = (inl >> 11)
1212	binary.Read(in, binary.LittleEndian, &inl)
1213	out[13] |= (inl % (1 << 2)) << (23 - 2)
1214	out[14] = (inl >> 2) % (1 << 23)
1215	out[15] = (inl >> 25)
1216	binary.Read(in, binary.LittleEndian, &inl)
1217	out[15] |= (inl % (1 << 16)) << (23 - 16)
1218	out[16] = (inl >> 16)
1219	binary.Read(in, binary.LittleEndian, &inl)
1220	out[16] |= (inl % (1 << 7)) << (23 - 7)
1221	out[17] = (inl >> 7) % (1 << 23)
1222	out[18] = (inl >> 30)
1223	binary.Read(in, binary.LittleEndian, &inl)
1224	out[18] |= (inl % (1 << 21)) << (23 - 21)
1225	out[19] = (inl >> 21)
1226	binary.Read(in, binary.LittleEndian, &inl)
1227	out[19] |= (inl % (1 << 12)) << (23 - 12)
1228	out[20] = (inl >> 12)
1229	binary.Read(in, binary.LittleEndian, &inl)
1230	out[20] |= (inl % (1 << 3)) << (23 - 3)
1231	out[21] = (inl >> 3) % (1 << 23)
1232	out[22] = (inl >> 26)
1233	binary.Read(in, binary.LittleEndian, &inl)
1234	out[22] |= (inl % (1 << 17)) << (23 - 17)
1235	out[23] = (inl >> 17)
1236	binary.Read(in, binary.LittleEndian, &inl)
1237	out[23] |= (inl % (1 << 8)) << (23 - 8)
1238	out[24] = (inl >> 8) % (1 << 23)
1239	out[25] = (inl >> 31)
1240	binary.Read(in, binary.LittleEndian, &inl)
1241	out[25] |= (inl % (1 << 22)) << (23 - 22)
1242	out[26] = (inl >> 22)
1243	binary.Read(in, binary.LittleEndian, &inl)
1244	out[26] |= (inl % (1 << 13)) << (23 - 13)
1245	out[27] = (inl >> 13)
1246	binary.Read(in, binary.LittleEndian, &inl)
1247	out[27] |= (inl % (1 << 4)) << (23 - 4)
1248	out[28] = (inl >> 4) % (1 << 23)
1249	out[29] = (inl >> 27)
1250	binary.Read(in, binary.LittleEndian, &inl)
1251	out[29] |= (inl % (1 << 18)) << (23 - 18)
1252	out[30] = (inl >> 18)
1253	binary.Read(in, binary.LittleEndian, &inl)
1254	out[30] |= (inl % (1 << 9)) << (23 - 9)
1255	out[31] = (inl >> 9)
1256}
1257
1258func unpack24_32(in io.Reader, out []uint32) {
1259	var inl uint32
1260	for i := 0; i < 8; i++ {
1261		base := i * 4
1262
1263		binary.Read(in, binary.LittleEndian, &inl)
1264		out[base] = (inl >> 0) % (1 << 24)
1265		out[base+1] = (inl >> 24)
1266		binary.Read(in, binary.LittleEndian, &inl)
1267		out[base+1] |= (inl % (1 << 16)) << (24 - 16)
1268		out[base+2] = (inl >> 16)
1269		binary.Read(in, binary.LittleEndian, &inl)
1270		out[base+2] |= (inl % (1 << 8)) << (24 - 8)
1271		out[base+3] = (inl >> 8)
1272	}
1273}
1274
1275func unpack25_32(in io.Reader, out []uint32) {
1276	var inl uint32
1277	binary.Read(in, binary.LittleEndian, &inl)
1278	out[0] = (inl >> 0) % (1 << 25)
1279	out[1] = (inl >> 25)
1280	binary.Read(in, binary.LittleEndian, &inl)
1281	out[1] |= (inl % (1 << 18)) << (25 - 18)
1282	out[2] = (inl >> 18)
1283	binary.Read(in, binary.LittleEndian, &inl)
1284	out[2] |= (inl % (1 << 11)) << (25 - 11)
1285	out[3] = (inl >> 11)
1286	binary.Read(in, binary.LittleEndian, &inl)
1287	out[3] |= (inl % (1 << 4)) << (25 - 4)
1288	out[4] = (inl >> 4) % (1 << 25)
1289	out[5] = (inl >> 29)
1290	binary.Read(in, binary.LittleEndian, &inl)
1291	out[5] |= (inl % (1 << 22)) << (25 - 22)
1292	out[6] = (inl >> 22)
1293	binary.Read(in, binary.LittleEndian, &inl)
1294	out[6] |= (inl % (1 << 15)) << (25 - 15)
1295	out[7] = (inl >> 15)
1296	binary.Read(in, binary.LittleEndian, &inl)
1297	out[7] |= (inl % (1 << 8)) << (25 - 8)
1298	out[8] = (inl >> 8)
1299	binary.Read(in, binary.LittleEndian, &inl)
1300	out[8] |= (inl % (1 << 1)) << (25 - 1)
1301	out[9] = (inl >> 1) % (1 << 25)
1302	out[10] = (inl >> 26)
1303	binary.Read(in, binary.LittleEndian, &inl)
1304	out[10] |= (inl % (1 << 19)) << (25 - 19)
1305	out[11] = (inl >> 19)
1306	binary.Read(in, binary.LittleEndian, &inl)
1307	out[11] |= (inl % (1 << 12)) << (25 - 12)
1308	out[12] = (inl >> 12)
1309	binary.Read(in, binary.LittleEndian, &inl)
1310	out[12] |= (inl % (1 << 5)) << (25 - 5)
1311	out[13] = (inl >> 5) % (1 << 25)
1312	out[14] = (inl >> 30)
1313	binary.Read(in, binary.LittleEndian, &inl)
1314	out[14] |= (inl % (1 << 23)) << (25 - 23)
1315	out[15] = (inl >> 23)
1316	binary.Read(in, binary.LittleEndian, &inl)
1317	out[15] |= (inl % (1 << 16)) << (25 - 16)
1318	out[16] = (inl >> 16)
1319	binary.Read(in, binary.LittleEndian, &inl)
1320	out[16] |= (inl % (1 << 9)) << (25 - 9)
1321	out[17] = (inl >> 9)
1322	binary.Read(in, binary.LittleEndian, &inl)
1323	out[17] |= (inl % (1 << 2)) << (25 - 2)
1324	out[18] = (inl >> 2) % (1 << 25)
1325	out[19] = (inl >> 27)
1326	binary.Read(in, binary.LittleEndian, &inl)
1327	out[19] |= (inl % (1 << 20)) << (25 - 20)
1328	out[20] = (inl >> 20)
1329	binary.Read(in, binary.LittleEndian, &inl)
1330	out[20] |= (inl % (1 << 13)) << (25 - 13)
1331	out[21] = (inl >> 13)
1332	binary.Read(in, binary.LittleEndian, &inl)
1333	out[21] |= (inl % (1 << 6)) << (25 - 6)
1334	out[22] = (inl >> 6) % (1 << 25)
1335	out[23] = (inl >> 31)
1336	binary.Read(in, binary.LittleEndian, &inl)
1337	out[23] |= (inl % (1 << 24)) << (25 - 24)
1338	out[24] = (inl >> 24)
1339	binary.Read(in, binary.LittleEndian, &inl)
1340	out[24] |= (inl % (1 << 17)) << (25 - 17)
1341	out[25] = (inl >> 17)
1342	binary.Read(in, binary.LittleEndian, &inl)
1343	out[25] |= (inl % (1 << 10)) << (25 - 10)
1344	out[26] = (inl >> 10)
1345	binary.Read(in, binary.LittleEndian, &inl)
1346	out[26] |= (inl % (1 << 3)) << (25 - 3)
1347	out[27] = (inl >> 3) % (1 << 25)
1348	out[28] = (inl >> 28)
1349	binary.Read(in, binary.LittleEndian, &inl)
1350	out[28] |= (inl % (1 << 21)) << (25 - 21)
1351	out[29] = (inl >> 21)
1352	binary.Read(in, binary.LittleEndian, &inl)
1353	out[29] |= (inl % (1 << 14)) << (25 - 14)
1354	out[30] = (inl >> 14)
1355	binary.Read(in, binary.LittleEndian, &inl)
1356	out[30] |= (inl % (1 << 7)) << (25 - 7)
1357	out[31] = (inl >> 7)
1358}
1359
1360func unpack26_32(in io.Reader, out []uint32) {
1361	var inl uint32
1362	binary.Read(in, binary.LittleEndian, &inl)
1363	out[0] = (inl >> 0) % (1 << 26)
1364	out[1] = (inl >> 26)
1365	binary.Read(in, binary.LittleEndian, &inl)
1366	out[1] |= (inl % (1 << 20)) << (26 - 20)
1367	out[2] = (inl >> 20)
1368	binary.Read(in, binary.LittleEndian, &inl)
1369	out[2] |= (inl % (1 << 14)) << (26 - 14)
1370	out[3] = (inl >> 14)
1371	binary.Read(in, binary.LittleEndian, &inl)
1372	out[3] |= (inl % (1 << 8)) << (26 - 8)
1373	out[4] = (inl >> 8)
1374	binary.Read(in, binary.LittleEndian, &inl)
1375	out[4] |= (inl % (1 << 2)) << (26 - 2)
1376	out[5] = (inl >> 2) % (1 << 26)
1377	out[6] = (inl >> 28)
1378	binary.Read(in, binary.LittleEndian, &inl)
1379	out[6] |= (inl % (1 << 22)) << (26 - 22)
1380	out[7] = (inl >> 22)
1381	binary.Read(in, binary.LittleEndian, &inl)
1382	out[7] |= (inl % (1 << 16)) << (26 - 16)
1383	out[8] = (inl >> 16)
1384	binary.Read(in, binary.LittleEndian, &inl)
1385	out[8] |= (inl % (1 << 10)) << (26 - 10)
1386	out[9] = (inl >> 10)
1387	binary.Read(in, binary.LittleEndian, &inl)
1388	out[9] |= (inl % (1 << 4)) << (26 - 4)
1389	out[10] = (inl >> 4) % (1 << 26)
1390	out[11] = (inl >> 30)
1391	binary.Read(in, binary.LittleEndian, &inl)
1392	out[11] |= (inl % (1 << 24)) << (26 - 24)
1393	out[12] = (inl >> 24)
1394	binary.Read(in, binary.LittleEndian, &inl)
1395	out[12] |= (inl % (1 << 18)) << (26 - 18)
1396	out[13] = (inl >> 18)
1397	binary.Read(in, binary.LittleEndian, &inl)
1398	out[13] |= (inl % (1 << 12)) << (26 - 12)
1399	out[14] = (inl >> 12)
1400	binary.Read(in, binary.LittleEndian, &inl)
1401	out[14] |= (inl % (1 << 6)) << (26 - 6)
1402	out[15] = (inl >> 6)
1403	binary.Read(in, binary.LittleEndian, &inl)
1404	out[16] = (inl >> 0) % (1 << 26)
1405	out[17] = (inl >> 26)
1406	binary.Read(in, binary.LittleEndian, &inl)
1407	out[17] |= (inl % (1 << 20)) << (26 - 20)
1408	out[18] = (inl >> 20)
1409	binary.Read(in, binary.LittleEndian, &inl)
1410	out[18] |= (inl % (1 << 14)) << (26 - 14)
1411	out[19] = (inl >> 14)
1412	binary.Read(in, binary.LittleEndian, &inl)
1413	out[19] |= (inl % (1 << 8)) << (26 - 8)
1414	out[20] = (inl >> 8)
1415	binary.Read(in, binary.LittleEndian, &inl)
1416	out[20] |= (inl % (1 << 2)) << (26 - 2)
1417	out[21] = (inl >> 2) % (1 << 26)
1418	out[22] = (inl >> 28)
1419	binary.Read(in, binary.LittleEndian, &inl)
1420	out[22] |= (inl % (1 << 22)) << (26 - 22)
1421	out[23] = (inl >> 22)
1422	binary.Read(in, binary.LittleEndian, &inl)
1423	out[23] |= (inl % (1 << 16)) << (26 - 16)
1424	out[24] = (inl >> 16)
1425	binary.Read(in, binary.LittleEndian, &inl)
1426	out[24] |= (inl % (1 << 10)) << (26 - 10)
1427	out[25] = (inl >> 10)
1428	binary.Read(in, binary.LittleEndian, &inl)
1429	out[25] |= (inl % (1 << 4)) << (26 - 4)
1430	out[26] = (inl >> 4) % (1 << 26)
1431	out[27] = (inl >> 30)
1432	binary.Read(in, binary.LittleEndian, &inl)
1433	out[27] |= (inl % (1 << 24)) << (26 - 24)
1434	out[28] = (inl >> 24)
1435	binary.Read(in, binary.LittleEndian, &inl)
1436	out[28] |= (inl % (1 << 18)) << (26 - 18)
1437	out[29] = (inl >> 18)
1438	binary.Read(in, binary.LittleEndian, &inl)
1439	out[29] |= (inl % (1 << 12)) << (26 - 12)
1440	out[30] = (inl >> 12)
1441	binary.Read(in, binary.LittleEndian, &inl)
1442	out[30] |= (inl % (1 << 6)) << (26 - 6)
1443	out[31] = (inl >> 6)
1444}
1445
1446func unpack27_32(in io.Reader, out []uint32) {
1447	var inl uint32
1448	binary.Read(in, binary.LittleEndian, &inl)
1449	out[0] = (inl >> 0) % (1 << 27)
1450	out[1] = (inl >> 27)
1451	binary.Read(in, binary.LittleEndian, &inl)
1452	out[1] |= (inl % (1 << 22)) << (27 - 22)
1453	out[2] = (inl >> 22)
1454	binary.Read(in, binary.LittleEndian, &inl)
1455	out[2] |= (inl % (1 << 17)) << (27 - 17)
1456	out[3] = (inl >> 17)
1457	binary.Read(in, binary.LittleEndian, &inl)
1458	out[3] |= (inl % (1 << 12)) << (27 - 12)
1459	out[4] = (inl >> 12)
1460	binary.Read(in, binary.LittleEndian, &inl)
1461	out[4] |= (inl % (1 << 7)) << (27 - 7)
1462	out[5] = (inl >> 7)
1463	binary.Read(in, binary.LittleEndian, &inl)
1464	out[5] |= (inl % (1 << 2)) << (27 - 2)
1465	out[6] = (inl >> 2) % (1 << 27)
1466	out[7] = (inl >> 29)
1467	binary.Read(in, binary.LittleEndian, &inl)
1468	out[7] |= (inl % (1 << 24)) << (27 - 24)
1469	out[8] = (inl >> 24)
1470	binary.Read(in, binary.LittleEndian, &inl)
1471	out[8] |= (inl % (1 << 19)) << (27 - 19)
1472	out[9] = (inl >> 19)
1473	binary.Read(in, binary.LittleEndian, &inl)
1474	out[9] |= (inl % (1 << 14)) << (27 - 14)
1475	out[10] = (inl >> 14)
1476	binary.Read(in, binary.LittleEndian, &inl)
1477	out[10] |= (inl % (1 << 9)) << (27 - 9)
1478	out[11] = (inl >> 9)
1479	binary.Read(in, binary.LittleEndian, &inl)
1480	out[11] |= (inl % (1 << 4)) << (27 - 4)
1481	out[12] = (inl >> 4) % (1 << 27)
1482	out[13] = (inl >> 31)
1483	binary.Read(in, binary.LittleEndian, &inl)
1484	out[13] |= (inl % (1 << 26)) << (27 - 26)
1485	out[14] = (inl >> 26)
1486	binary.Read(in, binary.LittleEndian, &inl)
1487	out[14] |= (inl % (1 << 21)) << (27 - 21)
1488	out[15] = (inl >> 21)
1489	binary.Read(in, binary.LittleEndian, &inl)
1490	out[15] |= (inl % (1 << 16)) << (27 - 16)
1491	out[16] = (inl >> 16)
1492	binary.Read(in, binary.LittleEndian, &inl)
1493	out[16] |= (inl % (1 << 11)) << (27 - 11)
1494	out[17] = (inl >> 11)
1495	binary.Read(in, binary.LittleEndian, &inl)
1496	out[17] |= (inl % (1 << 6)) << (27 - 6)
1497	out[18] = (inl >> 6)
1498	binary.Read(in, binary.LittleEndian, &inl)
1499	out[18] |= (inl % (1 << 1)) << (27 - 1)
1500	out[19] = (inl >> 1) % (1 << 27)
1501	out[20] = (inl >> 28)
1502	binary.Read(in, binary.LittleEndian, &inl)
1503	out[20] |= (inl % (1 << 23)) << (27 - 23)
1504	out[21] = (inl >> 23)
1505	binary.Read(in, binary.LittleEndian, &inl)
1506	out[21] |= (inl % (1 << 18)) << (27 - 18)
1507	out[22] = (inl >> 18)
1508	binary.Read(in, binary.LittleEndian, &inl)
1509	out[22] |= (inl % (1 << 13)) << (27 - 13)
1510	out[23] = (inl >> 13)
1511	binary.Read(in, binary.LittleEndian, &inl)
1512	out[23] |= (inl % (1 << 8)) << (27 - 8)
1513	out[24] = (inl >> 8)
1514	binary.Read(in, binary.LittleEndian, &inl)
1515	out[24] |= (inl % (1 << 3)) << (27 - 3)
1516	out[25] = (inl >> 3) % (1 << 27)
1517	out[26] = (inl >> 30)
1518	binary.Read(in, binary.LittleEndian, &inl)
1519	out[26] |= (inl % (1 << 25)) << (27 - 25)
1520	out[27] = (inl >> 25)
1521	binary.Read(in, binary.LittleEndian, &inl)
1522	out[27] |= (inl % (1 << 20)) << (27 - 20)
1523	out[28] = (inl >> 20)
1524	binary.Read(in, binary.LittleEndian, &inl)
1525	out[28] |= (inl % (1 << 15)) << (27 - 15)
1526	out[29] = (inl >> 15)
1527	binary.Read(in, binary.LittleEndian, &inl)
1528	out[29] |= (inl % (1 << 10)) << (27 - 10)
1529	out[30] = (inl >> 10)
1530	binary.Read(in, binary.LittleEndian, &inl)
1531	out[30] |= (inl % (1 << 5)) << (27 - 5)
1532	out[31] = (inl >> 5)
1533}
1534
1535func unpack28_32(in io.Reader, out []uint32) {
1536	var inl uint32
1537	for i := 0; i < 4; i++ {
1538		base := i * 8
1539
1540		binary.Read(in, binary.LittleEndian, &inl)
1541		out[base] = (inl >> 0) % (1 << 28)
1542		out[base+1] = (inl >> 28)
1543		binary.Read(in, binary.LittleEndian, &inl)
1544		out[base+1] |= (inl % (1 << 24)) << (28 - 24)
1545		out[base+2] = (inl >> 24)
1546		binary.Read(in, binary.LittleEndian, &inl)
1547		out[base+2] |= (inl % (1 << 20)) << (28 - 20)
1548		out[base+3] = (inl >> 20)
1549		binary.Read(in, binary.LittleEndian, &inl)
1550		out[base+3] |= (inl % (1 << 16)) << (28 - 16)
1551		out[base+4] = (inl >> 16)
1552		binary.Read(in, binary.LittleEndian, &inl)
1553		out[base+4] |= (inl % (1 << 12)) << (28 - 12)
1554		out[base+5] = (inl >> 12)
1555		binary.Read(in, binary.LittleEndian, &inl)
1556		out[base+5] |= (inl % (1 << 8)) << (28 - 8)
1557		out[base+6] = (inl >> 8)
1558		binary.Read(in, binary.LittleEndian, &inl)
1559		out[base+6] |= (inl % (1 << 4)) << (28 - 4)
1560		out[base+7] = (inl >> 4)
1561	}
1562}
1563
1564func unpack29_32(in io.Reader, out []uint32) {
1565	var inl uint32
1566	binary.Read(in, binary.LittleEndian, &inl)
1567	out[0] = (inl >> 0) % (1 << 29)
1568	out[1] = (inl >> 29)
1569	binary.Read(in, binary.LittleEndian, &inl)
1570	out[1] |= (inl % (1 << 26)) << (29 - 26)
1571	out[2] = (inl >> 26)
1572	binary.Read(in, binary.LittleEndian, &inl)
1573	out[2] |= (inl % (1 << 23)) << (29 - 23)
1574	out[3] = (inl >> 23)
1575	binary.Read(in, binary.LittleEndian, &inl)
1576	out[3] |= (inl % (1 << 20)) << (29 - 20)
1577	out[4] = (inl >> 20)
1578	binary.Read(in, binary.LittleEndian, &inl)
1579	out[4] |= (inl % (1 << 17)) << (29 - 17)
1580	out[5] = (inl >> 17)
1581	binary.Read(in, binary.LittleEndian, &inl)
1582	out[5] |= (inl % (1 << 14)) << (29 - 14)
1583	out[6] = (inl >> 14)
1584	binary.Read(in, binary.LittleEndian, &inl)
1585	out[6] |= (inl % (1 << 11)) << (29 - 11)
1586	out[7] = (inl >> 11)
1587	binary.Read(in, binary.LittleEndian, &inl)
1588	out[7] |= (inl % (1 << 8)) << (29 - 8)
1589	out[8] = (inl >> 8)
1590	binary.Read(in, binary.LittleEndian, &inl)
1591	out[8] |= (inl % (1 << 5)) << (29 - 5)
1592	out[9] = (inl >> 5)
1593	binary.Read(in, binary.LittleEndian, &inl)
1594	out[9] |= (inl % (1 << 2)) << (29 - 2)
1595	out[10] = (inl >> 2) % (1 << 29)
1596	out[11] = (inl >> 31)
1597	binary.Read(in, binary.LittleEndian, &inl)
1598	out[11] |= (inl % (1 << 28)) << (29 - 28)
1599	out[12] = (inl >> 28)
1600	binary.Read(in, binary.LittleEndian, &inl)
1601	out[12] |= (inl % (1 << 25)) << (29 - 25)
1602	out[13] = (inl >> 25)
1603	binary.Read(in, binary.LittleEndian, &inl)
1604	out[13] |= (inl % (1 << 22)) << (29 - 22)
1605	out[14] = (inl >> 22)
1606	binary.Read(in, binary.LittleEndian, &inl)
1607	out[14] |= (inl % (1 << 19)) << (29 - 19)
1608	out[15] = (inl >> 19)
1609	binary.Read(in, binary.LittleEndian, &inl)
1610	out[15] |= (inl % (1 << 16)) << (29 - 16)
1611	out[16] = (inl >> 16)
1612	binary.Read(in, binary.LittleEndian, &inl)
1613	out[16] |= (inl % (1 << 13)) << (29 - 13)
1614	out[17] = (inl >> 13)
1615	binary.Read(in, binary.LittleEndian, &inl)
1616	out[17] |= (inl % (1 << 10)) << (29 - 10)
1617	out[18] = (inl >> 10)
1618	binary.Read(in, binary.LittleEndian, &inl)
1619	out[18] |= (inl % (1 << 7)) << (29 - 7)
1620	out[19] = (inl >> 7)
1621	binary.Read(in, binary.LittleEndian, &inl)
1622	out[19] |= (inl % (1 << 4)) << (29 - 4)
1623	out[20] = (inl >> 4)
1624	binary.Read(in, binary.LittleEndian, &inl)
1625	out[20] |= (inl % (1 << 1)) << (29 - 1)
1626	out[21] = (inl >> 1) % (1 << 29)
1627	out[22] = (inl >> 30)
1628	binary.Read(in, binary.LittleEndian, &inl)
1629	out[22] |= (inl % (1 << 27)) << (29 - 27)
1630	out[23] = (inl >> 27)
1631	binary.Read(in, binary.LittleEndian, &inl)
1632	out[23] |= (inl % (1 << 24)) << (29 - 24)
1633	out[24] = (inl >> 24)
1634	binary.Read(in, binary.LittleEndian, &inl)
1635	out[24] |= (inl % (1 << 21)) << (29 - 21)
1636	out[25] = (inl >> 21)
1637	binary.Read(in, binary.LittleEndian, &inl)
1638	out[25] |= (inl % (1 << 18)) << (29 - 18)
1639	out[26] = (inl >> 18)
1640	binary.Read(in, binary.LittleEndian, &inl)
1641	out[26] |= (inl % (1 << 15)) << (29 - 15)
1642	out[27] = (inl >> 15)
1643	binary.Read(in, binary.LittleEndian, &inl)
1644	out[27] |= (inl % (1 << 12)) << (29 - 12)
1645	out[28] = (inl >> 12)
1646	binary.Read(in, binary.LittleEndian, &inl)
1647	out[28] |= (inl % (1 << 9)) << (29 - 9)
1648	out[29] = (inl >> 9)
1649	binary.Read(in, binary.LittleEndian, &inl)
1650	out[29] |= (inl % (1 << 6)) << (29 - 6)
1651	out[30] = (inl >> 6)
1652	binary.Read(in, binary.LittleEndian, &inl)
1653	out[30] |= (inl % (1 << 3)) << (29 - 3)
1654	out[31] = (inl >> 3)
1655}
1656
1657func unpack30_32(in io.Reader, out []uint32) {
1658	var inl uint32
1659	binary.Read(in, binary.LittleEndian, &inl)
1660	out[0] = (inl >> 0) % (1 << 30)
1661	out[1] = (inl >> 30)
1662	binary.Read(in, binary.LittleEndian, &inl)
1663	out[1] |= (inl % (1 << 28)) << (30 - 28)
1664	out[2] = (inl >> 28)
1665	binary.Read(in, binary.LittleEndian, &inl)
1666	out[2] |= (inl % (1 << 26)) << (30 - 26)
1667	out[3] = (inl >> 26)
1668	binary.Read(in, binary.LittleEndian, &inl)
1669	out[3] |= (inl % (1 << 24)) << (30 - 24)
1670	out[4] = (inl >> 24)
1671	binary.Read(in, binary.LittleEndian, &inl)
1672	out[4] |= (inl % (1 << 22)) << (30 - 22)
1673	out[5] = (inl >> 22)
1674	binary.Read(in, binary.LittleEndian, &inl)
1675	out[5] |= (inl % (1 << 20)) << (30 - 20)
1676	out[6] = (inl >> 20)
1677	binary.Read(in, binary.LittleEndian, &inl)
1678	out[6] |= (inl % (1 << 18)) << (30 - 18)
1679	out[7] = (inl >> 18)
1680	binary.Read(in, binary.LittleEndian, &inl)
1681	out[7] |= (inl % (1 << 16)) << (30 - 16)
1682	out[8] = (inl >> 16)
1683	binary.Read(in, binary.LittleEndian, &inl)
1684	out[8] |= (inl % (1 << 14)) << (30 - 14)
1685	out[9] = (inl >> 14)
1686	binary.Read(in, binary.LittleEndian, &inl)
1687	out[9] |= (inl % (1 << 12)) << (30 - 12)
1688	out[10] = (inl >> 12)
1689	binary.Read(in, binary.LittleEndian, &inl)
1690	out[10] |= (inl % (1 << 10)) << (30 - 10)
1691	out[11] = (inl >> 10)
1692	binary.Read(in, binary.LittleEndian, &inl)
1693	out[11] |= (inl % (1 << 8)) << (30 - 8)
1694	out[12] = (inl >> 8)
1695	binary.Read(in, binary.LittleEndian, &inl)
1696	out[12] |= (inl % (1 << 6)) << (30 - 6)
1697	out[13] = (inl >> 6)
1698	binary.Read(in, binary.LittleEndian, &inl)
1699	out[13] |= (inl % (1 << 4)) << (30 - 4)
1700	out[14] = (inl >> 4)
1701	binary.Read(in, binary.LittleEndian, &inl)
1702	out[14] |= (inl % (1 << 2)) << (30 - 2)
1703	out[15] = (inl >> 2)
1704	binary.Read(in, binary.LittleEndian, &inl)
1705	out[16] = (inl >> 0) % (1 << 30)
1706	out[17] = (inl >> 30)
1707	binary.Read(in, binary.LittleEndian, &inl)
1708	out[17] |= (inl % (1 << 28)) << (30 - 28)
1709	out[18] = (inl >> 28)
1710	binary.Read(in, binary.LittleEndian, &inl)
1711	out[18] |= (inl % (1 << 26)) << (30 - 26)
1712	out[19] = (inl >> 26)
1713	binary.Read(in, binary.LittleEndian, &inl)
1714	out[19] |= (inl % (1 << 24)) << (30 - 24)
1715	out[20] = (inl >> 24)
1716	binary.Read(in, binary.LittleEndian, &inl)
1717	out[20] |= (inl % (1 << 22)) << (30 - 22)
1718	out[21] = (inl >> 22)
1719	binary.Read(in, binary.LittleEndian, &inl)
1720	out[21] |= (inl % (1 << 20)) << (30 - 20)
1721	out[22] = (inl >> 20)
1722	binary.Read(in, binary.LittleEndian, &inl)
1723	out[22] |= (inl % (1 << 18)) << (30 - 18)
1724	out[23] = (inl >> 18)
1725	binary.Read(in, binary.LittleEndian, &inl)
1726	out[23] |= (inl % (1 << 16)) << (30 - 16)
1727	out[24] = (inl >> 16)
1728	binary.Read(in, binary.LittleEndian, &inl)
1729	out[24] |= (inl % (1 << 14)) << (30 - 14)
1730	out[25] = (inl >> 14)
1731	binary.Read(in, binary.LittleEndian, &inl)
1732	out[25] |= (inl % (1 << 12)) << (30 - 12)
1733	out[26] = (inl >> 12)
1734	binary.Read(in, binary.LittleEndian, &inl)
1735	out[26] |= (inl % (1 << 10)) << (30 - 10)
1736	out[27] = (inl >> 10)
1737	binary.Read(in, binary.LittleEndian, &inl)
1738	out[27] |= (inl % (1 << 8)) << (30 - 8)
1739	out[28] = (inl >> 8)
1740	binary.Read(in, binary.LittleEndian, &inl)
1741	out[28] |= (inl % (1 << 6)) << (30 - 6)
1742	out[29] = (inl >> 6)
1743	binary.Read(in, binary.LittleEndian, &inl)
1744	out[29] |= (inl % (1 << 4)) << (30 - 4)
1745	out[30] = (inl >> 4)
1746	binary.Read(in, binary.LittleEndian, &inl)
1747	out[30] |= (inl % (1 << 2)) << (30 - 2)
1748	out[31] = (inl >> 2)
1749}
1750
1751func unpack31_32(in io.Reader, out []uint32) {
1752	var inl uint32
1753	binary.Read(in, binary.LittleEndian, &inl)
1754	out[0] = (inl >> 0) % (1 << 31)
1755	out[1] = (inl >> 31)
1756	binary.Read(in, binary.LittleEndian, &inl)
1757	out[1] |= (inl % (1 << 30)) << (31 - 30)
1758	out[2] = (inl >> 30)
1759	binary.Read(in, binary.LittleEndian, &inl)
1760	out[2] |= (inl % (1 << 29)) << (31 - 29)
1761	out[3] = (inl >> 29)
1762	binary.Read(in, binary.LittleEndian, &inl)
1763	out[3] |= (inl % (1 << 28)) << (31 - 28)
1764	out[4] = (inl >> 28)
1765	binary.Read(in, binary.LittleEndian, &inl)
1766	out[4] |= (inl % (1 << 27)) << (31 - 27)
1767	out[5] = (inl >> 27)
1768	binary.Read(in, binary.LittleEndian, &inl)
1769	out[5] |= (inl % (1 << 26)) << (31 - 26)
1770	out[6] = (inl >> 26)
1771	binary.Read(in, binary.LittleEndian, &inl)
1772	out[6] |= (inl % (1 << 25)) << (31 - 25)
1773	out[7] = (inl >> 25)
1774	binary.Read(in, binary.LittleEndian, &inl)
1775	out[7] |= (inl % (1 << 24)) << (31 - 24)
1776	out[8] = (inl >> 24)
1777	binary.Read(in, binary.LittleEndian, &inl)
1778	out[8] |= (inl % (1 << 23)) << (31 - 23)
1779	out[9] = (inl >> 23)
1780	binary.Read(in, binary.LittleEndian, &inl)
1781	out[9] |= (inl % (1 << 22)) << (31 - 22)
1782	out[10] = (inl >> 22)
1783	binary.Read(in, binary.LittleEndian, &inl)
1784	out[10] |= (inl % (1 << 21)) << (31 - 21)
1785	out[11] = (inl >> 21)
1786	binary.Read(in, binary.LittleEndian, &inl)
1787	out[11] |= (inl % (1 << 20)) << (31 - 20)
1788	out[12] = (inl >> 20)
1789	binary.Read(in, binary.LittleEndian, &inl)
1790	out[12] |= (inl % (1 << 19)) << (31 - 19)
1791	out[13] = (inl >> 19)
1792	binary.Read(in, binary.LittleEndian, &inl)
1793	out[13] |= (inl % (1 << 18)) << (31 - 18)
1794	out[14] = (inl >> 18)
1795	binary.Read(in, binary.LittleEndian, &inl)
1796	out[14] |= (inl % (1 << 17)) << (31 - 17)
1797	out[15] = (inl >> 17)
1798	binary.Read(in, binary.LittleEndian, &inl)
1799	out[15] |= (inl % (1 << 16)) << (31 - 16)
1800	out[16] = (inl >> 16)
1801	binary.Read(in, binary.LittleEndian, &inl)
1802	out[16] |= (inl % (1 << 15)) << (31 - 15)
1803	out[17] = (inl >> 15)
1804	binary.Read(in, binary.LittleEndian, &inl)
1805	out[17] |= (inl % (1 << 14)) << (31 - 14)
1806	out[18] = (inl >> 14)
1807	binary.Read(in, binary.LittleEndian, &inl)
1808	out[18] |= (inl % (1 << 13)) << (31 - 13)
1809	out[19] = (inl >> 13)
1810	binary.Read(in, binary.LittleEndian, &inl)
1811	out[19] |= (inl % (1 << 12)) << (31 - 12)
1812	out[20] = (inl >> 12)
1813	binary.Read(in, binary.LittleEndian, &inl)
1814	out[20] |= (inl % (1 << 11)) << (31 - 11)
1815	out[21] = (inl >> 11)
1816	binary.Read(in, binary.LittleEndian, &inl)
1817	out[21] |= (inl % (1 << 10)) << (31 - 10)
1818	out[22] = (inl >> 10)
1819	binary.Read(in, binary.LittleEndian, &inl)
1820	out[22] |= (inl % (1 << 9)) << (31 - 9)
1821	out[23] = (inl >> 9)
1822	binary.Read(in, binary.LittleEndian, &inl)
1823	out[23] |= (inl % (1 << 8)) << (31 - 8)
1824	out[24] = (inl >> 8)
1825	binary.Read(in, binary.LittleEndian, &inl)
1826	out[24] |= (inl % (1 << 7)) << (31 - 7)
1827	out[25] = (inl >> 7)
1828	binary.Read(in, binary.LittleEndian, &inl)
1829	out[25] |= (inl % (1 << 6)) << (31 - 6)
1830	out[26] = (inl >> 6)
1831	binary.Read(in, binary.LittleEndian, &inl)
1832	out[26] |= (inl % (1 << 5)) << (31 - 5)
1833	out[27] = (inl >> 5)
1834	binary.Read(in, binary.LittleEndian, &inl)
1835	out[27] |= (inl % (1 << 4)) << (31 - 4)
1836	out[28] = (inl >> 4)
1837	binary.Read(in, binary.LittleEndian, &inl)
1838	out[28] |= (inl % (1 << 3)) << (31 - 3)
1839	out[29] = (inl >> 3)
1840	binary.Read(in, binary.LittleEndian, &inl)
1841	out[29] |= (inl % (1 << 2)) << (31 - 2)
1842	out[30] = (inl >> 2)
1843	binary.Read(in, binary.LittleEndian, &inl)
1844	out[30] |= (inl % (1 << 1)) << (31 - 1)
1845	out[31] = (inl >> 1)
1846}
1847
1848func unpack32_32(in io.Reader, out []uint32) {
1849	for idx := range out[:32] {
1850		binary.Read(in, binary.LittleEndian, &out[idx])
1851	}
1852}
1853
1854func nullunpack32(_ io.Reader, out []uint32) {
1855	out[0] = 0
1856	for i := 1; i < 32; i *= 2 {
1857		copy(out[i:], out[:i])
1858	}
1859}
1860
1861func unpack32Default(in io.Reader, out []uint32, nbits int) int {
1862	batch := len(out) / 32 * 32
1863	nloops := batch / 32
1864
1865	var f unpackFunc
1866	switch nbits {
1867	case 0:
1868		f = nullunpack32
1869	case 1:
1870		f = unpack1_32
1871	case 2:
1872		f = unpack2_32
1873	case 3:
1874		f = unpack3_32
1875	case 4:
1876		f = unpack4_32
1877	case 5:
1878		f = unpack5_32
1879	case 6:
1880		f = unpack6_32
1881	case 7:
1882		f = unpack7_32
1883	case 8:
1884		f = unpack8_32
1885	case 9:
1886		f = unpack9_32
1887	case 10:
1888		f = unpack10_32
1889	case 11:
1890		f = unpack11_32
1891	case 12:
1892		f = unpack12_32
1893	case 13:
1894		f = unpack13_32
1895	case 14:
1896		f = unpack14_32
1897	case 15:
1898		f = unpack15_32
1899	case 16:
1900		f = unpack16_32
1901	case 17:
1902		f = unpack17_32
1903	case 18:
1904		f = unpack18_32
1905	case 19:
1906		f = unpack19_32
1907	case 20:
1908		f = unpack20_32
1909	case 21:
1910		f = unpack21_32
1911	case 22:
1912		f = unpack22_32
1913	case 23:
1914		f = unpack23_32
1915	case 24:
1916		f = unpack24_32
1917	case 25:
1918		f = unpack25_32
1919	case 26:
1920		f = unpack26_32
1921	case 27:
1922		f = unpack27_32
1923	case 28:
1924		f = unpack28_32
1925	case 29:
1926		f = unpack29_32
1927	case 30:
1928		f = unpack30_32
1929	case 31:
1930		f = unpack31_32
1931	case 32:
1932		f = unpack32_32
1933	default:
1934		return 0
1935	}
1936
1937	for i := 0; i < nloops; i++ {
1938		f(in, out[i*32:])
1939	}
1940	return batch
1941}
1942