xref: /aosp_15_r20/external/grpc-grpc/test/cpp/microbenchmarks/huffman_geometries/decode_huff_13_7_10.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1 // Copyright 2023 gRPC authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 // This file is autogenerated: see
16 // tools/codegen/core/gen_huffman_decompressor.cc
17 
18 #ifndef GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_13_7_10_H
19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_13_7_10_H
20 #include <cstddef>
21 #include <cstdint>
22 
23 #include <grpc/support/port_platform.h>
24 namespace grpc_core {
25 namespace geometry_13_7_10 {
26 class HuffDecoderCommon {
27  protected:
GetOp2(size_t i)28   static inline uint64_t GetOp2(size_t i) { return table2_0_ops_[i]; }
GetEmit2(size_t,size_t emit)29   static inline uint64_t GetEmit2(size_t, size_t emit) {
30     return table2_0_emit_[emit];
31   }
GetOp3(size_t i)32   static inline uint64_t GetOp3(size_t i) { return table3_0_ops_[i]; }
GetEmit3(size_t,size_t emit)33   static inline uint64_t GetEmit3(size_t, size_t emit) {
34     return table3_0_emit_[emit];
35   }
GetOp4(size_t i)36   static inline uint64_t GetOp4(size_t i) {
37     return table4_ops_[i >> 6][i & 0x3f];
38   }
GetEmit4(size_t i,size_t emit)39   static inline uint64_t GetEmit4(size_t i, size_t emit) {
40     return table4_emit_[i >> 6][emit];
41   }
GetOp5(size_t i)42   static inline uint64_t GetOp5(size_t i) {
43     return table5_ops_[i >> 7][i & 0x7f];
44   }
GetEmit5(size_t i,size_t emit)45   static inline uint64_t GetEmit5(size_t i, size_t emit) {
46     return table5_emit_[i >> 7][emit];
47   }
GetOp6(size_t i)48   static inline uint64_t GetOp6(size_t i) {
49     return table6_ops_[i >> 5][i & 0x1f];
50   }
GetEmit6(size_t i,size_t emit)51   static inline uint64_t GetEmit6(size_t i, size_t emit) {
52     return table6_emit_[i >> 5][emit];
53   }
GetOp7(size_t i)54   static inline uint64_t GetOp7(size_t i) {
55     return table7_ops_[i >> 6][i & 0x3f];
56   }
GetEmit7(size_t i,size_t emit)57   static inline uint64_t GetEmit7(size_t i, size_t emit) {
58     return table7_emit_[i >> 6][emit];
59   }
GetOp8(size_t i)60   static inline uint64_t GetOp8(size_t i) {
61     return table8_inner_[i >> 6][table8_outer_[i >> 6][i & 0x3f]];
62   }
GetEmit8(size_t i,size_t emit)63   static inline uint64_t GetEmit8(size_t i, size_t emit) {
64     return table8_emit_[i >> 6][emit];
65   }
GetOp9(size_t i)66   static inline uint64_t GetOp9(size_t i) {
67     return table9_ops_[i >> 5][i & 0x1f];
68   }
GetEmit9(size_t i,size_t emit)69   static inline uint64_t GetEmit9(size_t i, size_t emit) {
70     return table9_emit_[i >> 5][emit];
71   }
GetOp1(size_t i)72   static inline uint64_t GetOp1(size_t i) {
73     return table1_inner_[i >> 6][table1_outer_[i >> 6][i & 0x3f]];
74   }
GetEmit1(size_t i,size_t emit)75   static inline uint64_t GetEmit1(size_t i, size_t emit) {
76     return table1_emit_[i >> 6][emit];
77   }
GetOp10(size_t i)78   static inline uint64_t GetOp10(size_t i) { return i ? 3 : 1; }
GetEmit10(size_t,size_t emit)79   static inline uint64_t GetEmit10(size_t, size_t emit) {
80     return emit ? 125 : 94;
81   }
GetOp12(size_t i)82   static inline uint64_t GetOp12(size_t i) {
83     return (i < 2 ? (i ? 2 : 0) : ((i - 2) ? 1 : 4));
84   }
GetEmit12(size_t,size_t emit)85   static inline uint64_t GetEmit12(size_t, size_t emit) {
86     return (emit < 1 ? (((void)emit, 60)) : ((emit - 1) ? 123 : 96));
87   }
GetOp13(size_t i)88   static inline uint64_t GetOp13(size_t i) {
89     return table13_0_inner_[table13_0_outer_[i]];
90   }
GetEmit13(size_t,size_t emit)91   static inline uint64_t GetEmit13(size_t, size_t emit) {
92     return (emit < 1 ? (((void)emit, 60)) : ((emit - 1) ? 123 : 96));
93   }
GetOp14(size_t i)94   static inline uint64_t GetOp14(size_t i) {
95     return table13_0_inner_[table14_0_outer_[i]];
96   }
GetEmit14(size_t,size_t emit)97   static inline uint64_t GetEmit14(size_t, size_t emit) {
98     return (emit < 1 ? (((void)emit, 60)) : ((emit - 1) ? 123 : 96));
99   }
GetOp15(size_t i)100   static inline uint64_t GetOp15(size_t i) { return table15_0_ops_[i]; }
GetEmit15(size_t,size_t emit)101   static inline uint64_t GetEmit15(size_t, size_t emit) {
102     return (emit < 1 ? (((void)emit, 60)) : ((emit - 1) ? 123 : 96));
103   }
GetOp16(size_t i)104   static inline uint64_t GetOp16(size_t i) { return table16_0_ops_[i]; }
GetEmit16(size_t,size_t emit)105   static inline uint64_t GetEmit16(size_t, size_t emit) {
106     return table16_0_emit_[emit];
107   }
GetOp11(size_t i)108   static inline uint64_t GetOp11(size_t i) {
109     return table11_ops_[i >> 5][i & 0x1f];
110   }
GetEmit11(size_t i,size_t emit)111   static inline uint64_t GetEmit11(size_t i, size_t emit) {
112     return table11_emit_[i >> 5][emit];
113   }
GetOp17(size_t i)114   static inline uint64_t GetOp17(size_t i) { return i ? 3 : 1; }
GetEmit17(size_t,size_t emit)115   static inline uint64_t GetEmit17(size_t, size_t emit) {
116     return emit ? 161 : 153;
117   }
GetOp18(size_t i)118   static inline uint64_t GetOp18(size_t i) { return i ? 3 : 1; }
GetEmit18(size_t,size_t emit)119   static inline uint64_t GetEmit18(size_t, size_t emit) {
120     return emit ? 172 : 167;
121   }
GetOp19(size_t i)122   static inline uint64_t GetOp19(size_t i) { return i ? 3 : 1; }
GetEmit19(size_t,size_t emit)123   static inline uint64_t GetEmit19(size_t, size_t emit) { return emit + 176; }
GetOp20(size_t i)124   static inline uint64_t GetOp20(size_t i) { return i ? 3 : 1; }
GetEmit20(size_t,size_t emit)125   static inline uint64_t GetEmit20(size_t, size_t emit) {
126     return emit ? 209 : 179;
127   }
GetOp21(size_t i)128   static inline uint64_t GetOp21(size_t i) { return i ? 3 : 1; }
GetEmit21(size_t,size_t emit)129   static inline uint64_t GetEmit21(size_t, size_t emit) { return emit + 216; }
GetOp22(size_t i)130   static inline uint64_t GetOp22(size_t i) { return i ? 3 : 1; }
GetEmit22(size_t,size_t emit)131   static inline uint64_t GetEmit22(size_t, size_t emit) {
132     return emit ? 229 : 227;
133   }
GetOp23(size_t i)134   static inline uint64_t GetOp23(size_t i) {
135     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
136   }
GetEmit23(size_t,size_t emit)137   static inline uint64_t GetEmit23(size_t, size_t emit) {
138     return (emit < 2 ? (emit + 133) : ((emit - 2) ? 146 : 136));
139   }
GetOp24(size_t i)140   static inline uint64_t GetOp24(size_t i) {
141     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
142   }
GetEmit24(size_t,size_t emit)143   static inline uint64_t GetEmit24(size_t, size_t emit) {
144     return (emit < 2 ? (emit ? 156 : 154) : ((emit - 2) ? 163 : 160));
145   }
GetOp25(size_t i)146   static inline uint64_t GetOp25(size_t i) {
147     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
148   }
GetEmit25(size_t,size_t emit)149   static inline uint64_t GetEmit25(size_t, size_t emit) {
150     return (emit < 2 ? (emit ? 169 : 164) : ((emit - 2) ? 173 : 170));
151   }
GetOp26(size_t i)152   static inline uint64_t GetOp26(size_t i) {
153     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
154   }
GetEmit26(size_t,size_t emit)155   static inline uint64_t GetEmit26(size_t, size_t emit) {
156     return (emit < 2 ? (emit ? 181 : 178) : ((emit - 2) + 185));
157   }
GetOp27(size_t i)158   static inline uint64_t GetOp27(size_t i) {
159     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
160   }
GetEmit27(size_t,size_t emit)161   static inline uint64_t GetEmit27(size_t, size_t emit) {
162     return (emit < 2 ? (emit ? 189 : 187) : ((emit - 2) ? 196 : 190));
163   }
GetOp28(size_t i)164   static inline uint64_t GetOp28(size_t i) {
165     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
166   }
GetEmit28(size_t,size_t emit)167   static inline uint64_t GetEmit28(size_t, size_t emit) {
168     return (emit < 2 ? (emit ? 228 : 198) : ((emit - 2) + 232));
169   }
GetOp29(size_t i)170   static inline uint64_t GetOp29(size_t i) { return table29_0_inner_[i]; }
GetEmit29(size_t,size_t emit)171   static inline uint64_t GetEmit29(size_t, size_t emit) {
172     return table29_0_emit_[emit];
173   }
GetOp30(size_t i)174   static inline uint64_t GetOp30(size_t i) { return table29_0_inner_[i]; }
GetEmit30(size_t,size_t emit)175   static inline uint64_t GetEmit30(size_t, size_t emit) {
176     return table30_0_emit_[emit];
177   }
GetOp31(size_t i)178   static inline uint64_t GetOp31(size_t i) { return table29_0_inner_[i]; }
GetEmit31(size_t,size_t emit)179   static inline uint64_t GetEmit31(size_t, size_t emit) {
180     return table31_0_emit_[emit];
181   }
GetOp33(size_t i)182   static inline uint64_t GetOp33(size_t i) { return i; }
GetEmit33(size_t,size_t emit)183   static inline uint64_t GetEmit33(size_t, size_t emit) {
184     return ((void)emit, 230);
185   }
GetOp32(size_t i)186   static inline uint64_t GetOp32(size_t i) {
187     return ((i < 1 ? (((void)i, 0)) : ((i - 1))) < 1
188                 ? (((void)(i < 1 ? (((void)i, 0)) : ((i - 1))), 1))
189                 : (((i < 1 ? (((void)i, 0)) : ((i - 1))) - 1) ? 10 : 6));
190   }
GetEmit32(size_t,size_t emit)191   static inline uint64_t GetEmit32(size_t, size_t emit) {
192     return (emit < 1 ? (((void)emit, 230)) : ((emit - 1) ? 132 : 129));
193   }
GetOp35(size_t i)194   static inline uint64_t GetOp35(size_t i) {
195     return table35_0_inner_[(i < 5 ? (i) : (((void)(i - 5), 5)))];
196   }
GetEmit35(size_t,size_t emit)197   static inline uint64_t GetEmit35(size_t, size_t emit) {
198     return table35_0_emit_[emit];
199   }
GetOp34(size_t i)200   static inline uint64_t GetOp34(size_t i) {
201     return table34_0_inner_[(i < 9 ? (i / 2 + 0) : ((i - 9) + 4))];
202   }
GetEmit34(size_t,size_t emit)203   static inline uint64_t GetEmit34(size_t, size_t emit) {
204     return table34_0_emit_[emit];
205   }
GetOp37(size_t i)206   static inline uint64_t GetOp37(size_t i) {
207     return table37_0_inner_[(i < 6 ? (i) : ((i - 6) / 9 + 6))];
208   }
GetEmit37(size_t,size_t emit)209   static inline uint64_t GetEmit37(size_t, size_t emit) {
210     return table37_0_emit_[emit];
211   }
GetOp38(size_t i)212   static inline uint64_t GetOp38(size_t i) { return table38_0_ops_[i]; }
GetEmit38(size_t,size_t emit)213   static inline uint64_t GetEmit38(size_t, size_t emit) {
214     return table38_0_emit_[emit];
215   }
GetOp39(size_t i)216   static inline uint64_t GetOp39(size_t i) { return table39_0_ops_[i]; }
GetEmit39(size_t,size_t emit)217   static inline uint64_t GetEmit39(size_t, size_t emit) {
218     return table39_0_emit_[emit];
219   }
GetOp40(size_t i)220   static inline uint64_t GetOp40(size_t i) { return table40_0_ops_[i]; }
GetEmit40(size_t,size_t emit)221   static inline uint64_t GetEmit40(size_t, size_t emit) {
222     return table40_0_emit_[emit];
223   }
GetOp41(size_t i)224   static inline uint64_t GetOp41(size_t i) {
225     return table41_ops_[i >> 7][i & 0x7f];
226   }
GetEmit41(size_t i,size_t emit)227   static inline uint64_t GetEmit41(size_t i, size_t emit) {
228     return table41_emit_[i >> 7][emit];
229   }
GetOp42(size_t i)230   static inline uint64_t GetOp42(size_t i) {
231     return table42_ops_[i >> 6][i & 0x3f];
232   }
GetEmit42(size_t i,size_t emit)233   static inline uint64_t GetEmit42(size_t i, size_t emit) {
234     return table42_emit_[i >> 6][emit];
235   }
GetOp36(size_t i)236   static inline uint64_t GetOp36(size_t i) {
237     return table36_ops_[i >> 6][i & 0x3f];
238   }
GetEmit36(size_t i,size_t emit)239   static inline uint64_t GetEmit36(size_t i, size_t emit) {
240     return table36_emit_[i >> 6][emit];
241   }
242 
243  private:
244   static const uint8_t table2_0_emit_[10];
245   static const uint8_t table2_0_ops_[32];
246   static const uint8_t table3_0_emit_[36];
247   static const uint8_t table3_0_ops_[64];
248   static const uint8_t table4_0_emit_[22];
249   static const uint8_t table4_0_ops_[64];
250   static const uint8_t table4_1_emit_[46];
251   static const uint8_t table4_1_ops_[64];
252   static const uint8_t* const table4_emit_[2];
253   static const uint8_t* const table4_ops_[2];
254   static const uint8_t table5_0_ops_[128];
255   static const uint8_t table5_1_emit_[52];
256   static const uint8_t table5_1_ops_[128];
257   static const uint8_t* const table5_emit_[2];
258   static const uint8_t* const table5_ops_[2];
259   static const uint8_t table6_0_emit_[2];
260   static const uint8_t table6_0_ops_[32];
261   static const uint8_t table6_1_emit_[2];
262   static const uint8_t table6_2_emit_[2];
263   static const uint8_t table6_3_emit_[2];
264   static const uint8_t table6_4_emit_[2];
265   static const uint8_t table6_5_emit_[4];
266   static const uint8_t table6_5_ops_[32];
267   static const uint8_t table6_6_emit_[4];
268   static const uint8_t table6_7_emit_[4];
269   static const uint8_t table6_8_emit_[4];
270   static const uint8_t table6_9_emit_[4];
271   static const uint8_t table6_10_emit_[4];
272   static const uint8_t table6_11_emit_[6];
273   static const uint8_t table6_11_ops_[32];
274   static const uint8_t table6_12_emit_[8];
275   static const uint8_t table6_12_ops_[32];
276   static const uint8_t table6_13_emit_[8];
277   static const uint8_t table6_14_emit_[8];
278   static const uint8_t table6_15_emit_[10];
279   static const uint8_t table6_15_ops_[32];
280   static const uint8_t* const table6_emit_[16];
281   static const uint8_t* const table6_ops_[16];
282   static const uint8_t table7_0_emit_[36];
283   static const uint8_t table7_0_ops_[64];
284   static const uint8_t table7_1_emit_[36];
285   static const uint8_t table7_1_ops_[64];
286   static const uint8_t table7_2_emit_[36];
287   static const uint8_t table7_2_ops_[64];
288   static const uint8_t table7_3_emit_[36];
289   static const uint8_t table7_3_ops_[64];
290   static const uint8_t table7_4_emit_[38];
291   static const uint8_t table7_4_ops_[64];
292   static const uint8_t table7_5_ops_[64];
293   static const uint8_t table7_11_ops_[64];
294   static const uint8_t table7_12_ops_[64];
295   static const uint8_t table7_15_emit_[15];
296   static const uint8_t table7_15_ops_[64];
297   static const uint8_t* const table7_emit_[16];
298   static const uint8_t* const table7_ops_[16];
299   static const uint8_t table8_0_emit_[71];
300   static const uint16_t table8_0_inner_[38];
301   static const uint8_t table8_0_outer_[64];
302   static const uint8_t table8_1_emit_[71];
303   static const uint16_t table8_1_inner_[38];
304   static const uint8_t table8_2_emit_[71];
305   static const uint16_t table8_2_inner_[38];
306   static const uint8_t table8_3_emit_[71];
307   static const uint16_t table8_3_inner_[38];
308   static const uint8_t table8_4_emit_[71];
309   static const uint16_t table8_4_inner_[38];
310   static const uint8_t table8_5_emit_[71];
311   static const uint16_t table8_5_inner_[38];
312   static const uint8_t table8_6_emit_[71];
313   static const uint16_t table8_6_inner_[38];
314   static const uint8_t table8_7_emit_[71];
315   static const uint16_t table8_7_inner_[38];
316   static const uint8_t table8_8_emit_[71];
317   static const uint16_t table8_8_inner_[38];
318   static const uint8_t table8_9_emit_[71];
319   static const uint16_t table8_9_inner_[38];
320   static const uint8_t table8_10_emit_[40];
321   static const uint16_t table8_10_inner_[23];
322   static const uint8_t table8_10_outer_[64];
323   static const uint8_t table8_11_emit_[40];
324   static const uint8_t table8_12_emit_[40];
325   static const uint8_t table8_13_emit_[40];
326   static const uint8_t table8_14_emit_[40];
327   static const uint8_t table8_15_emit_[40];
328   static const uint8_t table8_16_emit_[40];
329   static const uint8_t table8_17_emit_[40];
330   static const uint8_t table8_18_emit_[40];
331   static const uint8_t table8_19_emit_[40];
332   static const uint8_t table8_20_emit_[40];
333   static const uint8_t table8_21_emit_[40];
334   static const uint8_t table8_22_emit_[40];
335   static const uint8_t table8_23_emit_[4];
336   static const uint16_t table8_23_inner_[5];
337   static const uint8_t table8_23_outer_[64];
338   static const uint8_t table8_24_emit_[4];
339   static const uint8_t table8_25_emit_[4];
340   static const uint8_t table8_26_emit_[4];
341   static const uint8_t table8_27_emit_[4];
342   static const uint8_t table8_28_emit_[4];
343   static const uint8_t table8_29_emit_[4];
344   static const uint8_t table8_30_emit_[4];
345   static const uint8_t table8_31_emit_[14];
346   static const uint16_t table8_31_inner_[16];
347   static const uint8_t table8_31_outer_[64];
348   static const uint8_t* const table8_emit_[32];
349   static const uint16_t* const table8_inner_[32];
350   static const uint8_t* const table8_outer_[32];
351   static const uint8_t table9_0_emit_[15];
352   static const uint8_t table9_0_ops_[32];
353   static const uint8_t table9_1_emit_[28];
354   static const uint8_t table9_1_ops_[32];
355   static const uint8_t table9_2_emit_[36];
356   static const uint8_t table9_2_ops_[32];
357   static const uint8_t table9_3_emit_[56];
358   static const uint8_t table9_3_ops_[32];
359   static const uint8_t table9_4_emit_[15];
360   static const uint8_t table9_4_ops_[32];
361   static const uint8_t table9_5_emit_[28];
362   static const uint8_t table9_6_emit_[36];
363   static const uint8_t table9_7_emit_[56];
364   static const uint8_t table9_8_emit_[15];
365   static const uint8_t table9_8_ops_[32];
366   static const uint8_t table9_9_emit_[28];
367   static const uint8_t table9_10_emit_[36];
368   static const uint8_t table9_11_emit_[56];
369   static const uint8_t table9_12_emit_[15];
370   static const uint8_t table9_12_ops_[32];
371   static const uint8_t table9_13_emit_[28];
372   static const uint8_t table9_14_emit_[36];
373   static const uint8_t table9_15_emit_[56];
374   static const uint8_t table9_16_emit_[15];
375   static const uint8_t table9_16_ops_[32];
376   static const uint8_t table9_17_emit_[28];
377   static const uint8_t table9_18_emit_[36];
378   static const uint8_t table9_19_emit_[56];
379   static const uint8_t table9_20_emit_[15];
380   static const uint8_t table9_20_ops_[32];
381   static const uint8_t table9_21_emit_[28];
382   static const uint8_t table9_22_emit_[36];
383   static const uint8_t table9_23_emit_[56];
384   static const uint8_t table9_24_emit_[15];
385   static const uint8_t table9_24_ops_[32];
386   static const uint8_t table9_25_emit_[28];
387   static const uint8_t table9_26_emit_[36];
388   static const uint8_t table9_27_emit_[56];
389   static const uint8_t table9_28_emit_[16];
390   static const uint8_t table9_28_ops_[32];
391   static const uint8_t table9_29_emit_[28];
392   static const uint8_t table9_30_emit_[36];
393   static const uint8_t table9_31_emit_[56];
394   static const uint8_t table9_32_emit_[16];
395   static const uint8_t table9_33_emit_[27];
396   static const uint8_t table9_33_ops_[32];
397   static const uint8_t table9_34_emit_[36];
398   static const uint8_t table9_35_emit_[56];
399   static const uint8_t table9_36_emit_[16];
400   static const uint8_t table9_37_emit_[27];
401   static const uint8_t table9_37_ops_[32];
402   static const uint8_t table9_38_emit_[36];
403   static const uint8_t table9_39_emit_[56];
404   static const uint8_t table9_40_emit_[43];
405   static const uint8_t table9_40_ops_[32];
406   static const uint8_t table9_41_emit_[28];
407   static const uint8_t table9_41_ops_[32];
408   static const uint8_t table9_42_emit_[43];
409   static const uint8_t table9_42_ops_[32];
410   static const uint8_t table9_43_emit_[28];
411   static const uint8_t table9_44_emit_[43];
412   static const uint8_t table9_44_ops_[32];
413   static const uint8_t table9_45_emit_[28];
414   static const uint8_t table9_46_emit_[43];
415   static const uint8_t table9_46_ops_[32];
416   static const uint8_t table9_47_emit_[28];
417   static const uint8_t table9_48_emit_[43];
418   static const uint8_t table9_48_ops_[32];
419   static const uint8_t table9_49_emit_[28];
420   static const uint8_t table9_50_emit_[43];
421   static const uint8_t table9_50_ops_[32];
422   static const uint8_t table9_51_emit_[28];
423   static const uint8_t table9_52_emit_[43];
424   static const uint8_t table9_52_ops_[32];
425   static const uint8_t table9_53_emit_[28];
426   static const uint8_t table9_54_emit_[43];
427   static const uint8_t table9_54_ops_[32];
428   static const uint8_t table9_55_emit_[28];
429   static const uint8_t table9_56_emit_[43];
430   static const uint8_t table9_56_ops_[32];
431   static const uint8_t table9_57_emit_[28];
432   static const uint8_t table9_58_emit_[43];
433   static const uint8_t table9_58_ops_[32];
434   static const uint8_t table9_59_emit_[28];
435   static const uint8_t table9_60_emit_[43];
436   static const uint8_t table9_60_ops_[32];
437   static const uint8_t table9_61_emit_[28];
438   static const uint8_t table9_62_emit_[44];
439   static const uint8_t table9_62_ops_[32];
440   static const uint8_t table9_63_emit_[28];
441   static const uint8_t table9_64_emit_[44];
442   static const uint8_t table9_65_emit_[27];
443   static const uint8_t table9_65_ops_[32];
444   static const uint8_t table9_66_emit_[44];
445   static const uint8_t table9_67_emit_[27];
446   static const uint8_t table9_67_ops_[32];
447   static const uint8_t table9_68_emit_[44];
448   static const uint8_t table9_69_emit_[27];
449   static const uint8_t table9_69_ops_[32];
450   static const uint8_t table9_70_emit_[44];
451   static const uint8_t table9_71_emit_[27];
452   static const uint8_t table9_71_ops_[32];
453   static const uint8_t table9_72_emit_[44];
454   static const uint8_t table9_73_emit_[27];
455   static const uint8_t table9_73_ops_[32];
456   static const uint8_t table9_74_emit_[44];
457   static const uint8_t table9_75_emit_[27];
458   static const uint8_t table9_75_ops_[32];
459   static const uint8_t table9_76_emit_[44];
460   static const uint8_t table9_77_emit_[27];
461   static const uint8_t table9_77_ops_[32];
462   static const uint8_t table9_78_emit_[44];
463   static const uint8_t table9_79_emit_[27];
464   static const uint8_t table9_79_ops_[32];
465   static const uint8_t table9_80_emit_[44];
466   static const uint8_t table9_81_emit_[27];
467   static const uint8_t table9_81_ops_[32];
468   static const uint8_t table9_82_emit_[44];
469   static const uint8_t table9_83_emit_[27];
470   static const uint8_t table9_83_ops_[32];
471   static const uint8_t table9_84_emit_[44];
472   static const uint8_t table9_85_emit_[27];
473   static const uint8_t table9_85_ops_[32];
474   static const uint8_t table9_86_emit_[44];
475   static const uint8_t table9_87_emit_[27];
476   static const uint8_t table9_87_ops_[32];
477   static const uint8_t table9_88_emit_[44];
478   static const uint8_t table9_89_emit_[27];
479   static const uint8_t table9_89_ops_[32];
480   static const uint8_t table9_90_emit_[44];
481   static const uint8_t table9_91_emit_[28];
482   static const uint8_t table9_92_emit_[20];
483   static const uint8_t table9_92_ops_[32];
484   static const uint8_t table9_93_emit_[20];
485   static const uint8_t table9_94_emit_[20];
486   static const uint8_t table9_95_emit_[20];
487   static const uint8_t table9_96_emit_[20];
488   static const uint8_t table9_97_emit_[20];
489   static const uint8_t table9_98_emit_[20];
490   static const uint8_t table9_99_emit_[20];
491   static const uint8_t table9_100_emit_[20];
492   static const uint8_t table9_101_emit_[20];
493   static const uint8_t table9_102_emit_[20];
494   static const uint8_t table9_103_emit_[20];
495   static const uint8_t table9_104_emit_[20];
496   static const uint8_t table9_105_emit_[20];
497   static const uint8_t table9_106_emit_[20];
498   static const uint8_t table9_107_emit_[20];
499   static const uint8_t table9_108_emit_[20];
500   static const uint8_t table9_109_emit_[20];
501   static const uint8_t table9_110_emit_[20];
502   static const uint8_t table9_111_emit_[20];
503   static const uint8_t table9_112_emit_[20];
504   static const uint8_t table9_113_emit_[20];
505   static const uint8_t table9_114_emit_[20];
506   static const uint8_t table9_115_emit_[20];
507   static const uint8_t table9_116_emit_[20];
508   static const uint8_t table9_117_emit_[20];
509   static const uint8_t table9_118_emit_[20];
510   static const uint8_t table9_119_emit_[20];
511   static const uint8_t table9_120_emit_[20];
512   static const uint8_t table9_121_emit_[20];
513   static const uint8_t table9_122_emit_[20];
514   static const uint8_t table9_123_emit_[20];
515   static const uint8_t table9_124_emit_[2];
516   static const uint8_t table9_124_ops_[32];
517   static const uint8_t table9_125_emit_[2];
518   static const uint8_t table9_126_emit_[2];
519   static const uint8_t table9_127_emit_[10];
520   static const uint8_t table9_127_ops_[32];
521   static const uint8_t* const table9_emit_[128];
522   static const uint8_t* const table9_ops_[128];
523   static const uint16_t table1_0_inner_[8];
524   static const uint8_t table1_0_outer_[64];
525   static const uint16_t table1_1_inner_[14];
526   static const uint8_t table1_1_outer_[64];
527   static const uint16_t table1_2_inner_[18];
528   static const uint8_t table1_2_outer_[64];
529   static const uint8_t table1_3_emit_[68];
530   static const uint16_t table1_3_inner_[35];
531   static const uint8_t table1_3_outer_[64];
532   static const uint16_t table1_4_inner_[8];
533   static const uint8_t table1_7_emit_[68];
534   static const uint16_t table1_8_inner_[8];
535   static const uint8_t table1_11_emit_[68];
536   static const uint16_t table1_12_inner_[8];
537   static const uint8_t table1_15_emit_[68];
538   static const uint16_t table1_16_inner_[8];
539   static const uint8_t table1_19_emit_[68];
540   static const uint16_t table1_20_inner_[8];
541   static const uint8_t table1_23_emit_[68];
542   static const uint16_t table1_24_inner_[8];
543   static const uint8_t table1_27_emit_[68];
544   static const uint16_t table1_28_inner_[8];
545   static const uint8_t table1_31_emit_[68];
546   static const uint16_t table1_33_inner_[14];
547   static const uint8_t table1_35_emit_[68];
548   static const uint16_t table1_37_inner_[14];
549   static const uint8_t table1_39_emit_[68];
550   static const uint16_t table1_40_inner_[22];
551   static const uint8_t table1_40_outer_[64];
552   static const uint8_t table1_41_emit_[92];
553   static const uint16_t table1_41_inner_[47];
554   static const uint8_t table1_41_outer_[64];
555   static const uint16_t table1_42_inner_[22];
556   static const uint8_t table1_43_emit_[92];
557   static const uint16_t table1_44_inner_[22];
558   static const uint8_t table1_45_emit_[92];
559   static const uint16_t table1_46_inner_[22];
560   static const uint8_t table1_47_emit_[92];
561   static const uint16_t table1_48_inner_[22];
562   static const uint8_t table1_49_emit_[92];
563   static const uint16_t table1_50_inner_[22];
564   static const uint8_t table1_51_emit_[92];
565   static const uint16_t table1_52_inner_[22];
566   static const uint8_t table1_53_emit_[92];
567   static const uint16_t table1_54_inner_[22];
568   static const uint8_t table1_55_emit_[92];
569   static const uint16_t table1_56_inner_[22];
570   static const uint8_t table1_57_emit_[92];
571   static const uint16_t table1_58_inner_[22];
572   static const uint8_t table1_59_emit_[92];
573   static const uint16_t table1_60_inner_[22];
574   static const uint8_t table1_61_emit_[92];
575   static const uint16_t table1_62_inner_[22];
576   static const uint8_t table1_63_emit_[92];
577   static const uint8_t table1_65_emit_[91];
578   static const uint16_t table1_65_inner_[47];
579   static const uint8_t table1_67_emit_[91];
580   static const uint16_t table1_67_inner_[47];
581   static const uint8_t table1_69_emit_[91];
582   static const uint16_t table1_69_inner_[47];
583   static const uint8_t table1_71_emit_[91];
584   static const uint16_t table1_71_inner_[47];
585   static const uint8_t table1_73_emit_[91];
586   static const uint16_t table1_73_inner_[47];
587   static const uint8_t table1_75_emit_[91];
588   static const uint16_t table1_75_inner_[47];
589   static const uint8_t table1_77_emit_[91];
590   static const uint16_t table1_77_inner_[47];
591   static const uint8_t table1_79_emit_[91];
592   static const uint16_t table1_79_inner_[47];
593   static const uint8_t table1_81_emit_[91];
594   static const uint16_t table1_81_inner_[47];
595   static const uint8_t table1_83_emit_[91];
596   static const uint16_t table1_83_inner_[47];
597   static const uint8_t table1_85_emit_[91];
598   static const uint16_t table1_85_inner_[47];
599   static const uint8_t table1_87_emit_[91];
600   static const uint16_t table1_87_inner_[47];
601   static const uint8_t table1_89_emit_[91];
602   static const uint16_t table1_89_inner_[47];
603   static const uint8_t table1_91_emit_[91];
604   static const uint16_t table1_91_inner_[47];
605   static const uint8_t table1_92_emit_[72];
606   static const uint16_t table1_92_inner_[37];
607   static const uint8_t table1_92_outer_[64];
608   static const uint8_t table1_93_emit_[72];
609   static const uint8_t table1_94_emit_[72];
610   static const uint8_t table1_95_emit_[72];
611   static const uint8_t table1_96_emit_[72];
612   static const uint8_t table1_97_emit_[72];
613   static const uint8_t table1_98_emit_[72];
614   static const uint8_t table1_99_emit_[72];
615   static const uint8_t table1_100_emit_[72];
616   static const uint8_t table1_101_emit_[72];
617   static const uint8_t table1_102_emit_[72];
618   static const uint8_t table1_103_emit_[72];
619   static const uint8_t table1_104_emit_[72];
620   static const uint8_t table1_105_emit_[72];
621   static const uint8_t table1_106_emit_[72];
622   static const uint8_t table1_107_emit_[72];
623   static const uint8_t table1_108_emit_[72];
624   static const uint8_t table1_109_emit_[72];
625   static const uint8_t table1_110_emit_[72];
626   static const uint8_t table1_111_emit_[72];
627   static const uint8_t table1_112_emit_[72];
628   static const uint8_t table1_113_emit_[72];
629   static const uint8_t table1_114_emit_[72];
630   static const uint8_t table1_115_emit_[72];
631   static const uint8_t table1_116_emit_[72];
632   static const uint8_t table1_117_emit_[72];
633   static const uint8_t table1_118_emit_[72];
634   static const uint8_t table1_119_emit_[72];
635   static const uint8_t table1_120_emit_[72];
636   static const uint8_t table1_121_emit_[72];
637   static const uint8_t table1_122_emit_[72];
638   static const uint8_t table1_123_emit_[72];
639   static const uint8_t table1_124_emit_[40];
640   static const uint16_t table1_124_inner_[22];
641   static const uint8_t table1_124_outer_[64];
642   static const uint8_t table1_125_emit_[40];
643   static const uint8_t table1_126_emit_[40];
644   static const uint8_t table1_127_emit_[16];
645   static const uint16_t table1_127_inner_[18];
646   static const uint8_t table1_127_outer_[64];
647   static const uint8_t* const table1_emit_[128];
648   static const uint16_t* const table1_inner_[128];
649   static const uint8_t* const table1_outer_[128];
650   static const uint8_t table13_0_inner_[5];
651   static const uint8_t table13_0_outer_[8];
652   static const uint8_t table14_0_outer_[16];
653   static const uint8_t table15_0_ops_[32];
654   static const uint8_t table16_0_emit_[6];
655   static const uint8_t table16_0_ops_[64];
656   static const uint8_t table11_0_emit_[1];
657   static const uint16_t table11_0_ops_[32];
658   static const uint8_t table11_1_emit_[1];
659   static const uint8_t table11_2_emit_[1];
660   static const uint8_t table11_3_emit_[11];
661   static const uint16_t table11_3_ops_[32];
662   static const uint8_t* const table11_emit_[4];
663   static const uint16_t* const table11_ops_[4];
664   static const uint8_t table29_0_emit_[8];
665   static const uint8_t table29_0_inner_[8];
666   static const uint8_t table30_0_emit_[8];
667   static const uint8_t table31_0_emit_[8];
668   static const uint8_t table35_0_emit_[5];
669   static const uint8_t table35_0_inner_[6];
670   static const uint8_t table34_0_emit_[11];
671   static const uint8_t table34_0_inner_[11];
672   static const uint8_t table37_0_emit_[6];
673   static const uint8_t table37_0_inner_[8];
674   static const uint8_t table38_0_emit_[10];
675   static const uint8_t table38_0_ops_[32];
676   static const uint8_t table39_0_emit_[25];
677   static const uint8_t table39_0_ops_[64];
678   static const uint8_t table40_0_emit_[44];
679   static const uint8_t table40_0_ops_[128];
680   static const uint8_t table41_0_ops_[128];
681   static const uint8_t table41_1_emit_[63];
682   static const uint8_t table41_1_ops_[128];
683   static const uint8_t* const table41_emit_[2];
684   static const uint8_t* const table41_ops_[2];
685   static const uint8_t table42_0_emit_[40];
686   static const uint8_t table42_0_ops_[64];
687   static const uint8_t table42_1_emit_[40];
688   static const uint8_t table42_2_emit_[40];
689   static const uint8_t table42_3_emit_[4];
690   static const uint8_t table42_4_emit_[8];
691   static const uint8_t table42_5_emit_[9];
692   static const uint8_t table42_5_ops_[64];
693   static const uint8_t table42_6_emit_[16];
694   static const uint8_t table42_6_ops_[64];
695   static const uint8_t table42_7_emit_[30];
696   static const uint8_t table42_7_ops_[64];
697   static const uint8_t* const table42_emit_[8];
698   static const uint8_t* const table42_ops_[8];
699   static const uint8_t table36_0_emit_[1];
700   static const uint16_t table36_0_ops_[64];
701   static const uint8_t table36_1_emit_[1];
702   static const uint8_t table36_2_emit_[1];
703   static const uint8_t table36_3_emit_[1];
704   static const uint8_t table36_4_emit_[1];
705   static const uint8_t table36_5_emit_[1];
706   static const uint8_t table36_6_emit_[2];
707   static const uint16_t table36_6_ops_[64];
708   static const uint8_t table36_7_emit_[2];
709   static const uint8_t table36_8_emit_[4];
710   static const uint16_t table36_8_ops_[64];
711   static const uint8_t table36_9_emit_[4];
712   static const uint8_t table36_10_emit_[4];
713   static const uint8_t table36_11_emit_[5];
714   static const uint16_t table36_11_ops_[64];
715   static const uint8_t table36_12_emit_[8];
716   static const uint16_t table36_12_ops_[64];
717   static const uint8_t table36_13_emit_[8];
718   static const uint8_t table36_14_emit_[15];
719   static const uint16_t table36_14_ops_[64];
720   static const uint8_t table36_15_emit_[18];
721   static const uint16_t table36_15_ops_[64];
722   static const uint8_t* const table36_emit_[16];
723   static const uint16_t* const table36_ops_[16];
724 };
725 template <typename F>
726 class HuffDecoder : public HuffDecoderCommon {
727  public:
HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)728   HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end)
729       : sink_(sink), begin_(begin), end_(end) {}
Run()730   bool Run() {
731     while (!done_) {
732       if (!RefillTo13()) {
733         Done0();
734         break;
735       }
736       const auto index = (buffer_ >> (buffer_len_ - 13)) & 0x1fff;
737       const auto op = GetOp1(index);
738       const int consumed = op & 15;
739       buffer_len_ -= consumed;
740       const auto emit_ofs = op >> 6;
741       switch ((op >> 4) & 3) {
742         case 0: {
743           sink_(GetEmit1(index, emit_ofs + 0));
744           sink_(GetEmit1(index, emit_ofs + 1));
745           break;
746         }
747         case 1: {
748           sink_(GetEmit1(index, emit_ofs + 0));
749           break;
750         }
751         case 2: {
752           DecodeStep0();
753           break;
754         }
755         case 3: {
756           DecodeStep1();
757           break;
758         }
759       }
760     }
761     return ok_;
762   }
763 
764  private:
RefillTo13()765   bool RefillTo13() {
766     switch (buffer_len_) {
767       case 0: {
768         return Read2to8Bytes();
769       }
770       case 1:
771       case 2:
772       case 3:
773       case 4: {
774         return Read2to7Bytes();
775       }
776       case 5:
777       case 6:
778       case 7:
779       case 8: {
780         return Read1to7Bytes();
781       }
782       case 9:
783       case 10:
784       case 11:
785       case 12: {
786         return Read1to6Bytes();
787       }
788     }
789     return true;
790   }
Read2to8Bytes()791   bool Read2to8Bytes() {
792     switch (end_ - begin_) {
793       case 0:
794       case 1: {
795         return false;
796       }
797       case 2: {
798         Fill2();
799         return true;
800       }
801       case 3: {
802         Fill3();
803         return true;
804       }
805       case 4: {
806         Fill4();
807         return true;
808       }
809       case 5: {
810         Fill5();
811         return true;
812       }
813       case 6: {
814         Fill6();
815         return true;
816       }
817       case 7: {
818         Fill7();
819         return true;
820       }
821       default: {
822         Fill8();
823         return true;
824       }
825     }
826   }
Fill2()827   void Fill2() {
828     buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) |
829               (static_cast<uint64_t>(begin_[1]) << 0);
830     begin_ += 2;
831     buffer_len_ += 16;
832   }
Fill3()833   void Fill3() {
834     buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) |
835               (static_cast<uint64_t>(begin_[1]) << 8) |
836               (static_cast<uint64_t>(begin_[2]) << 0);
837     begin_ += 3;
838     buffer_len_ += 24;
839   }
Fill4()840   void Fill4() {
841     buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) |
842               (static_cast<uint64_t>(begin_[1]) << 16) |
843               (static_cast<uint64_t>(begin_[2]) << 8) |
844               (static_cast<uint64_t>(begin_[3]) << 0);
845     begin_ += 4;
846     buffer_len_ += 32;
847   }
Fill5()848   void Fill5() {
849     buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) |
850               (static_cast<uint64_t>(begin_[1]) << 24) |
851               (static_cast<uint64_t>(begin_[2]) << 16) |
852               (static_cast<uint64_t>(begin_[3]) << 8) |
853               (static_cast<uint64_t>(begin_[4]) << 0);
854     begin_ += 5;
855     buffer_len_ += 40;
856   }
Fill6()857   void Fill6() {
858     buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) |
859               (static_cast<uint64_t>(begin_[1]) << 32) |
860               (static_cast<uint64_t>(begin_[2]) << 24) |
861               (static_cast<uint64_t>(begin_[3]) << 16) |
862               (static_cast<uint64_t>(begin_[4]) << 8) |
863               (static_cast<uint64_t>(begin_[5]) << 0);
864     begin_ += 6;
865     buffer_len_ += 48;
866   }
Fill7()867   void Fill7() {
868     buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) |
869               (static_cast<uint64_t>(begin_[1]) << 40) |
870               (static_cast<uint64_t>(begin_[2]) << 32) |
871               (static_cast<uint64_t>(begin_[3]) << 24) |
872               (static_cast<uint64_t>(begin_[4]) << 16) |
873               (static_cast<uint64_t>(begin_[5]) << 8) |
874               (static_cast<uint64_t>(begin_[6]) << 0);
875     begin_ += 7;
876     buffer_len_ += 56;
877   }
Fill8()878   void Fill8() {
879     buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) |
880               (static_cast<uint64_t>(begin_[1]) << 48) |
881               (static_cast<uint64_t>(begin_[2]) << 40) |
882               (static_cast<uint64_t>(begin_[3]) << 32) |
883               (static_cast<uint64_t>(begin_[4]) << 24) |
884               (static_cast<uint64_t>(begin_[5]) << 16) |
885               (static_cast<uint64_t>(begin_[6]) << 8) |
886               (static_cast<uint64_t>(begin_[7]) << 0);
887     begin_ += 8;
888     buffer_len_ += 64;
889   }
Read2to7Bytes()890   bool Read2to7Bytes() {
891     switch (end_ - begin_) {
892       case 0:
893       case 1: {
894         return false;
895       }
896       case 2: {
897         Fill2();
898         return true;
899       }
900       case 3: {
901         Fill3();
902         return true;
903       }
904       case 4: {
905         Fill4();
906         return true;
907       }
908       case 5: {
909         Fill5();
910         return true;
911       }
912       case 6: {
913         Fill6();
914         return true;
915       }
916       default: {
917         Fill7();
918         return true;
919       }
920     }
921   }
Read1to7Bytes()922   bool Read1to7Bytes() {
923     switch (end_ - begin_) {
924       case 0: {
925         return false;
926       }
927       case 1: {
928         Fill1();
929         return true;
930       }
931       case 2: {
932         Fill2();
933         return true;
934       }
935       case 3: {
936         Fill3();
937         return true;
938       }
939       case 4: {
940         Fill4();
941         return true;
942       }
943       case 5: {
944         Fill5();
945         return true;
946       }
947       case 6: {
948         Fill6();
949         return true;
950       }
951       default: {
952         Fill7();
953         return true;
954       }
955     }
956   }
Fill1()957   void Fill1() {
958     buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0);
959     begin_ += 1;
960     buffer_len_ += 8;
961   }
Read1to6Bytes()962   bool Read1to6Bytes() {
963     switch (end_ - begin_) {
964       case 0: {
965         return false;
966       }
967       case 1: {
968         Fill1();
969         return true;
970       }
971       case 2: {
972         Fill2();
973         return true;
974       }
975       case 3: {
976         Fill3();
977         return true;
978       }
979       case 4: {
980         Fill4();
981         return true;
982       }
983       case 5: {
984         Fill5();
985         return true;
986       }
987       default: {
988         Fill6();
989         return true;
990       }
991     }
992   }
Done0()993   void Done0() {
994     done_ = true;
995     switch (end_ - begin_) {
996       case 1: {
997         Fill1();
998         break;
999       }
1000     }
1001     switch (buffer_len_) {
1002       case 1:
1003       case 2:
1004       case 3:
1005       case 4: {
1006         ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1;
1007         return;
1008       }
1009       case 5: {
1010         const auto index = buffer_ & 31;
1011         const auto op = GetOp2(index);
1012         switch (op & 3) {
1013           case 0: {
1014             sink_(GetEmit2(index, (op >> 2) + 0));
1015             break;
1016           }
1017           case 1: {
1018             ok_ = false;
1019             break;
1020           }
1021         }
1022         return;
1023       }
1024       case 6: {
1025         const auto index = buffer_ & 63;
1026         const auto op = GetOp3(index);
1027         switch (op & 3) {
1028           case 0: {
1029             ok_ = false;
1030             break;
1031           }
1032           case 1: {
1033             sink_(GetEmit3(index, (op >> 2) + 0));
1034             break;
1035           }
1036         }
1037         return;
1038       }
1039       case 7: {
1040         const auto index = buffer_ & 127;
1041         const auto op = GetOp4(index);
1042         switch (op & 3) {
1043           case 0: {
1044             ok_ = false;
1045             break;
1046           }
1047           case 1: {
1048             sink_(GetEmit4(index, (op >> 2) + 0));
1049             break;
1050           }
1051         }
1052         return;
1053       }
1054       case 8: {
1055         const auto index = buffer_ & 255;
1056         const auto op = GetOp5(index);
1057         switch (op & 3) {
1058           case 0: {
1059             ok_ = false;
1060             break;
1061           }
1062           case 1: {
1063             sink_(GetEmit5(index, (op >> 2) + 0));
1064             break;
1065           }
1066         }
1067         return;
1068       }
1069       case 9: {
1070         const auto index = buffer_ & 511;
1071         const auto op = GetOp6(index);
1072         switch (op & 3) {
1073           case 0: {
1074             ok_ = false;
1075             break;
1076           }
1077           case 1: {
1078             sink_(GetEmit6(index, (op >> 2) + 0));
1079             break;
1080           }
1081         }
1082         return;
1083       }
1084       case 10: {
1085         const auto index = buffer_ & 1023;
1086         const auto op = GetOp7(index);
1087         switch (op & 3) {
1088           case 0: {
1089             sink_(GetEmit7(index, (op >> 2) + 0));
1090             sink_(GetEmit7(index, (op >> 2) + 1));
1091             break;
1092           }
1093           case 1: {
1094             ok_ = false;
1095             break;
1096           }
1097           case 2: {
1098             sink_(GetEmit7(index, (op >> 2) + 0));
1099             break;
1100           }
1101         }
1102         return;
1103       }
1104       case 11: {
1105         const auto index = buffer_ & 2047;
1106         const auto op = GetOp8(index);
1107         switch (op & 3) {
1108           case 0: {
1109             ok_ = false;
1110             break;
1111           }
1112           case 1: {
1113             sink_(GetEmit8(index, (op >> 2) + 0));
1114             sink_(GetEmit8(index, (op >> 2) + 1));
1115             break;
1116           }
1117           case 2: {
1118             sink_(GetEmit8(index, (op >> 2) + 0));
1119             break;
1120           }
1121         }
1122         return;
1123       }
1124       case 12: {
1125         const auto index = buffer_ & 4095;
1126         const auto op = GetOp9(index);
1127         switch (op & 3) {
1128           case 0: {
1129             ok_ = false;
1130             break;
1131           }
1132           case 1: {
1133             sink_(GetEmit9(index, (op >> 2) + 0));
1134             sink_(GetEmit9(index, (op >> 2) + 1));
1135             break;
1136           }
1137           case 2: {
1138             sink_(GetEmit9(index, (op >> 2) + 0));
1139             break;
1140           }
1141         }
1142         return;
1143       }
1144       case 0: {
1145         return;
1146       }
1147     }
1148   }
DecodeStep0()1149   void DecodeStep0() {
1150     if (!RefillTo1()) {
1151       Done1();
1152       return;
1153     }
1154     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1155     const auto op = GetOp10(index);
1156     const int consumed = op & 1;
1157     buffer_len_ -= consumed;
1158     const auto emit_ofs = op >> 1;
1159     sink_(GetEmit10(index, emit_ofs + 0));
1160   }
RefillTo1()1161   bool RefillTo1() {
1162     switch (buffer_len_) {
1163       case 0: {
1164         return Read1to8Bytes();
1165       }
1166     }
1167     return true;
1168   }
Read1to8Bytes()1169   bool Read1to8Bytes() {
1170     switch (end_ - begin_) {
1171       case 0: {
1172         return false;
1173       }
1174       case 1: {
1175         Fill1();
1176         return true;
1177       }
1178       case 2: {
1179         Fill2();
1180         return true;
1181       }
1182       case 3: {
1183         Fill3();
1184         return true;
1185       }
1186       case 4: {
1187         Fill4();
1188         return true;
1189       }
1190       case 5: {
1191         Fill5();
1192         return true;
1193       }
1194       case 6: {
1195         Fill6();
1196         return true;
1197       }
1198       case 7: {
1199         Fill7();
1200         return true;
1201       }
1202       default: {
1203         Fill8();
1204         return true;
1205       }
1206     }
1207   }
Done1()1208   void Done1() {
1209     done_ = true;
1210     ok_ = false;
1211   }
DecodeStep1()1212   void DecodeStep1() {
1213     if (!RefillTo7()) {
1214       Done2();
1215       return;
1216     }
1217     const auto index = (buffer_ >> (buffer_len_ - 7)) & 0x7f;
1218     const auto op = GetOp11(index);
1219     const int consumed = op & 7;
1220     buffer_len_ -= consumed;
1221     const auto emit_ofs = op >> 8;
1222     switch ((op >> 3) & 31) {
1223       case 0: {
1224         sink_(GetEmit11(index, emit_ofs + 0));
1225         break;
1226       }
1227       case 1: {
1228         DecodeStep2();
1229         break;
1230       }
1231       case 2: {
1232         DecodeStep3();
1233         break;
1234       }
1235       case 3: {
1236         DecodeStep4();
1237         break;
1238       }
1239       case 4: {
1240         DecodeStep5();
1241         break;
1242       }
1243       case 5: {
1244         DecodeStep6();
1245         break;
1246       }
1247       case 6: {
1248         DecodeStep7();
1249         break;
1250       }
1251       case 7: {
1252         DecodeStep17();
1253         break;
1254       }
1255       case 8: {
1256         DecodeStep8();
1257         break;
1258       }
1259       case 9: {
1260         DecodeStep9();
1261         break;
1262       }
1263       case 10: {
1264         DecodeStep10();
1265         break;
1266       }
1267       case 11: {
1268         DecodeStep11();
1269         break;
1270       }
1271       case 12: {
1272         DecodeStep12();
1273         break;
1274       }
1275       case 13: {
1276         DecodeStep13();
1277         break;
1278       }
1279       case 14: {
1280         DecodeStep14();
1281         break;
1282       }
1283       case 15: {
1284         DecodeStep15();
1285         break;
1286       }
1287       case 16: {
1288         DecodeStep16();
1289         break;
1290       }
1291       case 17: {
1292         DecodeStep18();
1293         break;
1294       }
1295       case 18: {
1296         DecodeStep19();
1297         break;
1298       }
1299     }
1300   }
RefillTo7()1301   bool RefillTo7() {
1302     switch (buffer_len_) {
1303       case 0: {
1304         return Read1to8Bytes();
1305       }
1306       case 1:
1307       case 2:
1308       case 3:
1309       case 4:
1310       case 5:
1311       case 6: {
1312         return Read1to7Bytes();
1313       }
1314     }
1315     return true;
1316   }
Done2()1317   void Done2() {
1318     done_ = true;
1319     switch (buffer_len_) {
1320       case 1: {
1321         ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1;
1322         return;
1323       }
1324       case 2: {
1325         const auto index = buffer_ & 3;
1326         const auto op = GetOp12(index);
1327         switch (op & 1) {
1328           case 0: {
1329             sink_(GetEmit12(index, (op >> 1) + 0));
1330             break;
1331           }
1332         }
1333         return;
1334       }
1335       case 3: {
1336         const auto index = buffer_ & 7;
1337         const auto op = GetOp13(index);
1338         switch (op & 3) {
1339           case 0: {
1340             ok_ = false;
1341             break;
1342           }
1343           case 1: {
1344             sink_(GetEmit13(index, (op >> 2) + 0));
1345             break;
1346           }
1347         }
1348         return;
1349       }
1350       case 4: {
1351         const auto index = buffer_ & 15;
1352         const auto op = GetOp14(index);
1353         switch (op & 3) {
1354           case 0: {
1355             ok_ = false;
1356             break;
1357           }
1358           case 1: {
1359             sink_(GetEmit14(index, (op >> 2) + 0));
1360             break;
1361           }
1362         }
1363         return;
1364       }
1365       case 5: {
1366         const auto index = buffer_ & 31;
1367         const auto op = GetOp15(index);
1368         switch (op & 3) {
1369           case 0: {
1370             ok_ = false;
1371             break;
1372           }
1373           case 1: {
1374             sink_(GetEmit15(index, (op >> 2) + 0));
1375             break;
1376           }
1377         }
1378         return;
1379       }
1380       case 6: {
1381         const auto index = buffer_ & 63;
1382         const auto op = GetOp16(index);
1383         switch (op & 3) {
1384           case 0: {
1385             ok_ = false;
1386             break;
1387           }
1388           case 1: {
1389             sink_(GetEmit16(index, (op >> 2) + 0));
1390             break;
1391           }
1392         }
1393         return;
1394       }
1395       case 0: {
1396         return;
1397       }
1398     }
1399   }
DecodeStep2()1400   void DecodeStep2() {
1401     if (!RefillTo1()) {
1402       Done3();
1403       return;
1404     }
1405     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1406     const auto op = GetOp17(index);
1407     const int consumed = op & 1;
1408     buffer_len_ -= consumed;
1409     const auto emit_ofs = op >> 1;
1410     sink_(GetEmit17(index, emit_ofs + 0));
1411   }
Done3()1412   void Done3() {
1413     done_ = true;
1414     ok_ = false;
1415   }
DecodeStep3()1416   void DecodeStep3() {
1417     if (!RefillTo1()) {
1418       Done4();
1419       return;
1420     }
1421     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1422     const auto op = GetOp18(index);
1423     const int consumed = op & 1;
1424     buffer_len_ -= consumed;
1425     const auto emit_ofs = op >> 1;
1426     sink_(GetEmit18(index, emit_ofs + 0));
1427   }
Done4()1428   void Done4() {
1429     done_ = true;
1430     ok_ = false;
1431   }
DecodeStep4()1432   void DecodeStep4() {
1433     if (!RefillTo1()) {
1434       Done5();
1435       return;
1436     }
1437     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1438     const auto op = GetOp19(index);
1439     const int consumed = op & 1;
1440     buffer_len_ -= consumed;
1441     const auto emit_ofs = op >> 1;
1442     sink_(GetEmit19(index, emit_ofs + 0));
1443   }
Done5()1444   void Done5() {
1445     done_ = true;
1446     ok_ = false;
1447   }
DecodeStep5()1448   void DecodeStep5() {
1449     if (!RefillTo1()) {
1450       Done6();
1451       return;
1452     }
1453     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1454     const auto op = GetOp20(index);
1455     const int consumed = op & 1;
1456     buffer_len_ -= consumed;
1457     const auto emit_ofs = op >> 1;
1458     sink_(GetEmit20(index, emit_ofs + 0));
1459   }
Done6()1460   void Done6() {
1461     done_ = true;
1462     ok_ = false;
1463   }
DecodeStep6()1464   void DecodeStep6() {
1465     if (!RefillTo1()) {
1466       Done7();
1467       return;
1468     }
1469     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1470     const auto op = GetOp21(index);
1471     const int consumed = op & 1;
1472     buffer_len_ -= consumed;
1473     const auto emit_ofs = op >> 1;
1474     sink_(GetEmit21(index, emit_ofs + 0));
1475   }
Done7()1476   void Done7() {
1477     done_ = true;
1478     ok_ = false;
1479   }
DecodeStep7()1480   void DecodeStep7() {
1481     if (!RefillTo1()) {
1482       Done8();
1483       return;
1484     }
1485     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1486     const auto op = GetOp22(index);
1487     const int consumed = op & 1;
1488     buffer_len_ -= consumed;
1489     const auto emit_ofs = op >> 1;
1490     sink_(GetEmit22(index, emit_ofs + 0));
1491   }
Done8()1492   void Done8() {
1493     done_ = true;
1494     ok_ = false;
1495   }
DecodeStep8()1496   void DecodeStep8() {
1497     if (!RefillTo2()) {
1498       Done9();
1499       return;
1500     }
1501     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1502     const auto op = GetOp23(index);
1503     const int consumed = op & 3;
1504     buffer_len_ -= consumed;
1505     const auto emit_ofs = op >> 2;
1506     sink_(GetEmit23(index, emit_ofs + 0));
1507   }
RefillTo2()1508   bool RefillTo2() {
1509     switch (buffer_len_) {
1510       case 0: {
1511         return Read1to8Bytes();
1512       }
1513       case 1: {
1514         return Read1to7Bytes();
1515       }
1516     }
1517     return true;
1518   }
Done9()1519   void Done9() {
1520     done_ = true;
1521     switch (buffer_len_) {
1522       case 1:
1523       case 0: {
1524         ok_ = false;
1525         return;
1526       }
1527     }
1528   }
DecodeStep9()1529   void DecodeStep9() {
1530     if (!RefillTo2()) {
1531       Done10();
1532       return;
1533     }
1534     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1535     const auto op = GetOp24(index);
1536     const int consumed = op & 3;
1537     buffer_len_ -= consumed;
1538     const auto emit_ofs = op >> 2;
1539     sink_(GetEmit24(index, emit_ofs + 0));
1540   }
Done10()1541   void Done10() {
1542     done_ = true;
1543     switch (buffer_len_) {
1544       case 1:
1545       case 0: {
1546         ok_ = false;
1547         return;
1548       }
1549     }
1550   }
DecodeStep10()1551   void DecodeStep10() {
1552     if (!RefillTo2()) {
1553       Done11();
1554       return;
1555     }
1556     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1557     const auto op = GetOp25(index);
1558     const int consumed = op & 3;
1559     buffer_len_ -= consumed;
1560     const auto emit_ofs = op >> 2;
1561     sink_(GetEmit25(index, emit_ofs + 0));
1562   }
Done11()1563   void Done11() {
1564     done_ = true;
1565     switch (buffer_len_) {
1566       case 1:
1567       case 0: {
1568         ok_ = false;
1569         return;
1570       }
1571     }
1572   }
DecodeStep11()1573   void DecodeStep11() {
1574     if (!RefillTo2()) {
1575       Done12();
1576       return;
1577     }
1578     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1579     const auto op = GetOp26(index);
1580     const int consumed = op & 3;
1581     buffer_len_ -= consumed;
1582     const auto emit_ofs = op >> 2;
1583     sink_(GetEmit26(index, emit_ofs + 0));
1584   }
Done12()1585   void Done12() {
1586     done_ = true;
1587     switch (buffer_len_) {
1588       case 1:
1589       case 0: {
1590         ok_ = false;
1591         return;
1592       }
1593     }
1594   }
DecodeStep12()1595   void DecodeStep12() {
1596     if (!RefillTo2()) {
1597       Done13();
1598       return;
1599     }
1600     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1601     const auto op = GetOp27(index);
1602     const int consumed = op & 3;
1603     buffer_len_ -= consumed;
1604     const auto emit_ofs = op >> 2;
1605     sink_(GetEmit27(index, emit_ofs + 0));
1606   }
Done13()1607   void Done13() {
1608     done_ = true;
1609     switch (buffer_len_) {
1610       case 1:
1611       case 0: {
1612         ok_ = false;
1613         return;
1614       }
1615     }
1616   }
DecodeStep13()1617   void DecodeStep13() {
1618     if (!RefillTo2()) {
1619       Done14();
1620       return;
1621     }
1622     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1623     const auto op = GetOp28(index);
1624     const int consumed = op & 3;
1625     buffer_len_ -= consumed;
1626     const auto emit_ofs = op >> 2;
1627     sink_(GetEmit28(index, emit_ofs + 0));
1628   }
Done14()1629   void Done14() {
1630     done_ = true;
1631     switch (buffer_len_) {
1632       case 1:
1633       case 0: {
1634         ok_ = false;
1635         return;
1636       }
1637     }
1638   }
DecodeStep14()1639   void DecodeStep14() {
1640     if (!RefillTo3()) {
1641       Done15();
1642       return;
1643     }
1644     const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7;
1645     const auto op = GetOp29(index);
1646     const int consumed = op & 3;
1647     buffer_len_ -= consumed;
1648     const auto emit_ofs = op >> 2;
1649     sink_(GetEmit29(index, emit_ofs + 0));
1650   }
RefillTo3()1651   bool RefillTo3() {
1652     switch (buffer_len_) {
1653       case 0: {
1654         return Read1to8Bytes();
1655       }
1656       case 1:
1657       case 2: {
1658         return Read1to7Bytes();
1659       }
1660     }
1661     return true;
1662   }
Done15()1663   void Done15() {
1664     done_ = true;
1665     switch (buffer_len_) {
1666       case 1:
1667       case 2:
1668       case 0: {
1669         ok_ = false;
1670         return;
1671       }
1672     }
1673   }
DecodeStep15()1674   void DecodeStep15() {
1675     if (!RefillTo3()) {
1676       Done16();
1677       return;
1678     }
1679     const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7;
1680     const auto op = GetOp30(index);
1681     const int consumed = op & 3;
1682     buffer_len_ -= consumed;
1683     const auto emit_ofs = op >> 2;
1684     sink_(GetEmit30(index, emit_ofs + 0));
1685   }
Done16()1686   void Done16() {
1687     done_ = true;
1688     switch (buffer_len_) {
1689       case 1:
1690       case 2:
1691       case 0: {
1692         ok_ = false;
1693         return;
1694       }
1695     }
1696   }
DecodeStep16()1697   void DecodeStep16() {
1698     if (!RefillTo3()) {
1699       Done17();
1700       return;
1701     }
1702     const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7;
1703     const auto op = GetOp31(index);
1704     const int consumed = op & 3;
1705     buffer_len_ -= consumed;
1706     const auto emit_ofs = op >> 2;
1707     sink_(GetEmit31(index, emit_ofs + 0));
1708   }
Done17()1709   void Done17() {
1710     done_ = true;
1711     switch (buffer_len_) {
1712       case 1:
1713       case 2:
1714       case 0: {
1715         ok_ = false;
1716         return;
1717       }
1718     }
1719   }
DecodeStep17()1720   void DecodeStep17() {
1721     if (!RefillTo2()) {
1722       Done18();
1723       return;
1724     }
1725     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1726     const auto op = GetOp32(index);
1727     const int consumed = op & 3;
1728     buffer_len_ -= consumed;
1729     const auto emit_ofs = op >> 2;
1730     sink_(GetEmit32(index, emit_ofs + 0));
1731   }
Done18()1732   void Done18() {
1733     done_ = true;
1734     switch (buffer_len_) {
1735       case 1: {
1736         const auto index = buffer_ & 1;
1737         const auto op = GetOp33(index);
1738         switch (op & 1) {
1739           case 0: {
1740             sink_(GetEmit33(index, (op >> 1) + 0));
1741             break;
1742           }
1743           case 1: {
1744             ok_ = false;
1745             break;
1746           }
1747         }
1748         return;
1749       }
1750       case 0: {
1751         ok_ = false;
1752         return;
1753       }
1754     }
1755   }
DecodeStep18()1756   void DecodeStep18() {
1757     if (!RefillTo4()) {
1758       Done19();
1759       return;
1760     }
1761     const auto index = (buffer_ >> (buffer_len_ - 4)) & 0xf;
1762     const auto op = GetOp34(index);
1763     const int consumed = op & 7;
1764     buffer_len_ -= consumed;
1765     const auto emit_ofs = op >> 3;
1766     sink_(GetEmit34(index, emit_ofs + 0));
1767   }
RefillTo4()1768   bool RefillTo4() {
1769     switch (buffer_len_) {
1770       case 0: {
1771         return Read1to8Bytes();
1772       }
1773       case 1:
1774       case 2:
1775       case 3: {
1776         return Read1to7Bytes();
1777       }
1778     }
1779     return true;
1780   }
Done19()1781   void Done19() {
1782     done_ = true;
1783     switch (buffer_len_) {
1784       case 1:
1785       case 2:
1786       case 0: {
1787         ok_ = false;
1788         return;
1789       }
1790       case 3: {
1791         const auto index = buffer_ & 7;
1792         const auto op = GetOp35(index);
1793         switch (op & 1) {
1794           case 0: {
1795             sink_(GetEmit35(index, (op >> 1) + 0));
1796             break;
1797           }
1798           case 1: {
1799             ok_ = false;
1800             break;
1801           }
1802         }
1803         return;
1804       }
1805     }
1806   }
DecodeStep19()1807   void DecodeStep19() {
1808     if (!RefillTo10()) {
1809       Done20();
1810       return;
1811     }
1812     const auto index = (buffer_ >> (buffer_len_ - 10)) & 0x3ff;
1813     const auto op = GetOp36(index);
1814     const int consumed = op & 15;
1815     buffer_len_ -= consumed;
1816     const auto emit_ofs = op >> 5;
1817     switch ((op >> 4) & 1) {
1818       case 0: {
1819         sink_(GetEmit36(index, emit_ofs + 0));
1820         break;
1821       }
1822       case 1: {
1823         begin_ = end_;
1824         buffer_len_ = 0;
1825         break;
1826       }
1827     }
1828   }
RefillTo10()1829   bool RefillTo10() {
1830     switch (buffer_len_) {
1831       case 0: {
1832         return Read2to8Bytes();
1833       }
1834       case 1: {
1835         return Read2to7Bytes();
1836       }
1837       case 2:
1838       case 3:
1839       case 4:
1840       case 5:
1841       case 6:
1842       case 7:
1843       case 8: {
1844         return Read1to7Bytes();
1845       }
1846       case 9: {
1847         return Read1to6Bytes();
1848       }
1849     }
1850     return true;
1851   }
Done20()1852   void Done20() {
1853     done_ = true;
1854     switch (end_ - begin_) {
1855       case 1: {
1856         Fill1();
1857         break;
1858       }
1859     }
1860     switch (buffer_len_) {
1861       case 1:
1862       case 2:
1863       case 3: {
1864         ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1;
1865         return;
1866       }
1867       case 4: {
1868         const auto index = buffer_ & 15;
1869         const auto op = GetOp37(index);
1870         switch (op & 3) {
1871           case 0: {
1872             sink_(GetEmit37(index, (op >> 2) + 0));
1873             break;
1874           }
1875           case 1: {
1876             ok_ = false;
1877             break;
1878           }
1879         }
1880         return;
1881       }
1882       case 5: {
1883         const auto index = buffer_ & 31;
1884         const auto op = GetOp38(index);
1885         switch (op & 3) {
1886           case 0: {
1887             ok_ = false;
1888             break;
1889           }
1890           case 1: {
1891             sink_(GetEmit38(index, (op >> 2) + 0));
1892             break;
1893           }
1894         }
1895         return;
1896       }
1897       case 6: {
1898         const auto index = buffer_ & 63;
1899         const auto op = GetOp39(index);
1900         switch (op & 3) {
1901           case 0: {
1902             ok_ = false;
1903             break;
1904           }
1905           case 1: {
1906             sink_(GetEmit39(index, (op >> 2) + 0));
1907             break;
1908           }
1909         }
1910         return;
1911       }
1912       case 7: {
1913         const auto index = buffer_ & 127;
1914         const auto op = GetOp40(index);
1915         switch (op & 3) {
1916           case 0: {
1917             ok_ = false;
1918             break;
1919           }
1920           case 1: {
1921             sink_(GetEmit40(index, (op >> 2) + 0));
1922             break;
1923           }
1924         }
1925         return;
1926       }
1927       case 8: {
1928         const auto index = buffer_ & 255;
1929         const auto op = GetOp41(index);
1930         switch (op & 3) {
1931           case 0: {
1932             ok_ = false;
1933             break;
1934           }
1935           case 1: {
1936             sink_(GetEmit41(index, (op >> 2) + 0));
1937             break;
1938           }
1939         }
1940         return;
1941       }
1942       case 9: {
1943         const auto index = buffer_ & 511;
1944         const auto op = GetOp42(index);
1945         switch (op & 3) {
1946           case 0: {
1947             sink_(GetEmit42(index, (op >> 2) + 0));
1948             sink_(GetEmit42(index, (op >> 2) + 1));
1949             break;
1950           }
1951           case 1: {
1952             ok_ = false;
1953             break;
1954           }
1955           case 2: {
1956             sink_(GetEmit42(index, (op >> 2) + 0));
1957             break;
1958           }
1959         }
1960         return;
1961       }
1962       case 0: {
1963         return;
1964       }
1965     }
1966   }
1967   F sink_;
1968   const uint8_t* begin_;
1969   const uint8_t* const end_;
1970   uint64_t buffer_ = 0;
1971   int buffer_len_ = 0;
1972   bool ok_ = true;
1973   bool done_ = false;
1974 };
1975 }  // namespace geometry_13_7_10
1976 }  // namespace grpc_core
1977 #endif  // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_13_7_10_H
1978