From 918f6b32151f50440cb5ce57846e1ba1360e8dda Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Wed, 9 Apr 2025 20:45:14 +0200
Subject: [PATCH 07/10] avcodec/hq_hqa: Use ff_vlc_init_from_lengths()

This allows to avoid the codes table; furthermore, given
that the runs fit into seven bits and level into nine,
one can put them into one int16_t and use as symbols table
in ff_vlc_init_from_lengths().

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/hq_hqa.c     |  20 +-
 libavcodec/hq_hqadata.h | 497 +++++++++++++++++-----------------------
 2 files changed, 216 insertions(+), 301 deletions(-)

diff --git a/libavcodec/hq_hqa.c b/libavcodec/hq_hqa.c
index f67d6286b0..11388fb9fc 100644
--- a/libavcodec/hq_hqa.c
+++ b/libavcodec/hq_hqa.c
@@ -376,24 +376,22 @@ static int hq_hqa_decode_frame(AVCodecContext *avctx, AVFrame *pic,
 
 static av_cold void hq_init_static(void)
 {
-    VLC_INIT_STATIC_TABLE(hq_ac_rvlc, 9, NUM_HQ_AC_ENTRIES,
-                          hq_ac_bits, 1, 1, hq_ac_codes, 2, 2, 0);
+    VLC_INIT_STATIC_TABLE_FROM_LENGTHS(hq_ac_rvlc, 9, NUM_HQ_AC_ENTRIES,
+                                       hq_ac_lens, 1, hq_ac_sym, 2, 2, 0, 0);
 
     for (size_t i = 0; i < FF_ARRAY_ELEMS(hq_ac_rvlc); ++i) {
         int len = hq_ac_rvlc[i].len;
-        int sym = hq_ac_rvlc[i].sym, level = sym;
-        int run;
+        int sym = (int16_t)hq_ac_rvlc[i].sym, level = sym;
+
+        // The invalid code has been remapped to HQ_AC_INVALID_RUN,
+        // so the VLC is complete.
+        av_assert1(len != 0);
 
         if (len > 0) {
-            level = hq_ac_syms[sym];
-            run   = hq_ac_skips[sym] + 1;
-        } else if (len < 0) { // More bits needed
-            run   = 0;
-        } else { // Invalid code
-            run = HQ_AC_INVALID_RUN;
+            level = sym >> 7;
+            hq_ac_rvlc[i].run = sym & 0x7F;
         }
         hq_ac_rvlc[i].len8  = len;
-        hq_ac_rvlc[i].run   = run;
         hq_ac_rvlc[i].level = level;
     }
 
diff --git a/libavcodec/hq_hqadata.h b/libavcodec/hq_hqadata.h
index e723cefaac..10120ee94f 100644
--- a/libavcodec/hq_hqadata.h
+++ b/libavcodec/hq_hqadata.h
@@ -23,7 +23,7 @@
 
 #include <stdint.h>
 
-#define NUM_HQ_AC_ENTRIES 746
+#define NUM_HQ_AC_ENTRIES 747 // includes one invalid entry
 #define NUM_HQ_PROFILES   22
 #define NUM_HQ_QUANTS     16
 
@@ -1157,298 +1157,215 @@ static const uint8_t hq_quant_map[NUM_HQ_QUANTS][2][4] =
 
 #define HQ_AC_INVALID_RUN 0
 
-static const uint8_t hq_ac_bits[NUM_HQ_AC_ENTRIES] = {
-     3,  3,  4,  4,  4,  5,  5,  5,  5,  5,  5,  6,  6,  6,  6,  6,
-     6,  6,  6,  7,  7,  7,  7,  7,  7,  7,  7,  8,  8,  8,  8,  8,
-     8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,
-     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
-     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10,
-    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11,
-    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12,
-    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13,
-    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-    16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-};
-
-static const uint16_t hq_ac_codes[NUM_HQ_AC_ENTRIES] = {
-    0x0000, 0x0001, 0x0004, 0x0005, 0x0006, 0x000E, 0x000F, 0x0010,
-    0x0011, 0x0012, 0x0013, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C,
-    0x002D, 0x002E, 0x002F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064,
-    0x0065, 0x0066, 0x0067, 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4,
-    0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC,
-    0x00DD, 0x00DE, 0x00DF, 0x01C0, 0x01C1, 0x01C2, 0x01C3, 0x01C4,
-    0x01C5, 0x01C6, 0x01C7, 0x01C8, 0x01C9, 0x01CA, 0x01CB, 0x01CC,
-    0x01CD, 0x01CE, 0x01CF, 0x01D0, 0x01D1, 0x01D2, 0x01D3, 0x01D4,
-    0x01D5, 0x01D6, 0x01D7, 0x01D8, 0x01D9, 0x01DA, 0x01DB, 0x01DC,
-    0x01DD, 0x01DE, 0x01DF, 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4,
-    0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC,
-    0x03CD, 0x03CE, 0x03CF, 0x03D0, 0x03D1, 0x03D2, 0x03D3, 0x03D4,
-    0x03D5, 0x03D6, 0x03D7, 0x03D8, 0x03D9, 0x03DA, 0x03DB, 0x03DC,
-    0x03DD, 0x03DE, 0x03DF, 0x07C0, 0x07C1, 0x07C2, 0x07C3, 0x07C4,
-    0x07C5, 0x07C6, 0x07C7, 0x07C8, 0x07C9, 0x07CA, 0x07CB, 0x07CC,
-    0x07CD, 0x07CE, 0x07CF, 0x0FA0, 0x0FA1, 0x0FA2, 0x0FA3, 0x0FA4,
-    0x0FA5, 0x0FA6, 0x0FA7, 0x0FA8, 0x0FA9, 0x0FAA, 0x0FAB, 0x0FAC,
-    0x0FAD, 0x0FAE, 0x0FAF, 0x1F60, 0x1F61, 0x1F62, 0x1F63, 0x1F64,
-    0x1F65, 0x1F66, 0x1F67, 0x1F68, 0x1F69, 0x1F6A, 0x1F6B, 0x1F6C,
-    0x1F6D, 0x1F6E, 0x1F6F, 0x1F70, 0x1F71, 0x1F72, 0x1F73, 0x1F74,
-    0x1F75, 0x1F76, 0x1F77, 0x1F78, 0x1F79, 0x1F7A, 0x1F7B, 0x1F7C,
-    0x1F7D, 0x1F7E, 0x1F7F, 0x1F80, 0x1F81, 0x1F82, 0x1F83, 0x1F84,
-    0x1F85, 0x1F86, 0x1F87, 0x1F88, 0x1F89, 0x1F8A, 0x1F8B, 0x1F8C,
-    0x1F8D, 0x1F8E, 0x1F8F, 0x1F90, 0x1F91, 0x1F92, 0x1F93, 0x1F94,
-    0x1F95, 0x1F96, 0x1F97, 0x1F98, 0x1F99, 0x1F9A, 0x1F9B, 0x1F9C,
-    0x1F9D, 0x1F9E, 0x1F9F, 0x1FA0, 0x1FA1, 0x1FA2, 0x1FA3, 0x1FA4,
-    0x1FA5, 0x1FA6, 0x1FA7, 0x1FA8, 0x1FA9, 0x1FAA, 0x1FAB, 0x1FAC,
-    0x1FAD, 0x1FAE, 0x1FAF, 0x1FB0, 0x1FB1, 0x1FB2, 0x1FB3, 0x1FB4,
-    0x1FB5, 0x1FB6, 0x1FB7, 0x1FB8, 0x1FB9, 0x1FBA, 0x1FBB, 0x1FBC,
-    0x1FBD, 0x1FBE, 0x1FBF, 0xFE00, 0xFE02, 0xFE03, 0xFE04, 0xFE05,
-    0xFE06, 0xFE07, 0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 0xFE0C, 0xFE0D,
-    0xFE0E, 0xFE0F, 0xFE10, 0xFE11, 0xFE12, 0xFE13, 0xFE14, 0xFE15,
-    0xFE16, 0xFE17, 0xFE18, 0xFE19, 0xFE1A, 0xFE1B, 0xFE1C, 0xFE1D,
-    0xFE1E, 0xFE1F, 0xFE20, 0xFE21, 0xFE22, 0xFE23, 0xFE24, 0xFE25,
-    0xFE26, 0xFE27, 0xFE28, 0xFE29, 0xFE2A, 0xFE2B, 0xFE2C, 0xFE2D,
-    0xFE2E, 0xFE2F, 0xFE30, 0xFE31, 0xFE32, 0xFE33, 0xFE34, 0xFE35,
-    0xFE36, 0xFE37, 0xFE38, 0xFE39, 0xFE3A, 0xFE3B, 0xFE3C, 0xFE3D,
-    0xFE3E, 0xFE3F, 0xFE40, 0xFE41, 0xFE42, 0xFE43, 0xFE44, 0xFE45,
-    0xFE46, 0xFE47, 0xFE48, 0xFE49, 0xFE4A, 0xFE4B, 0xFE4C, 0xFE4D,
-    0xFE4E, 0xFE4F, 0xFE50, 0xFE51, 0xFE52, 0xFE53, 0xFE54, 0xFE55,
-    0xFE56, 0xFE57, 0xFE58, 0xFE59, 0xFE5A, 0xFE5B, 0xFE5C, 0xFE5D,
-    0xFE5E, 0xFE5F, 0xFE60, 0xFE61, 0xFE62, 0xFE63, 0xFE64, 0xFE65,
-    0xFE66, 0xFE67, 0xFE68, 0xFE69, 0xFE6A, 0xFE6B, 0xFE6C, 0xFE6D,
-    0xFE6E, 0xFE6F, 0xFE70, 0xFE71, 0xFE72, 0xFE73, 0xFE74, 0xFE75,
-    0xFE76, 0xFE77, 0xFE78, 0xFE79, 0xFE7A, 0xFE7B, 0xFE7C, 0xFE7D,
-    0xFE7E, 0xFE7F, 0xFE80, 0xFE81, 0xFE82, 0xFE83, 0xFE84, 0xFE85,
-    0xFE86, 0xFE87, 0xFE88, 0xFE89, 0xFE8A, 0xFE8B, 0xFE8C, 0xFE8D,
-    0xFE8E, 0xFE8F, 0xFE90, 0xFE91, 0xFE92, 0xFE93, 0xFE94, 0xFE95,
-    0xFE96, 0xFE97, 0xFE98, 0xFE99, 0xFE9A, 0xFE9B, 0xFE9C, 0xFE9D,
-    0xFE9E, 0xFE9F, 0xFEA0, 0xFEA1, 0xFEA2, 0xFEA3, 0xFEA4, 0xFEA5,
-    0xFEA6, 0xFEA7, 0xFEA8, 0xFEA9, 0xFEAA, 0xFEAB, 0xFEAC, 0xFEAD,
-    0xFEAE, 0xFEAF, 0xFEB0, 0xFEB1, 0xFEB2, 0xFEB3, 0xFEB4, 0xFEB5,
-    0xFEB6, 0xFEB7, 0xFEB8, 0xFEB9, 0xFEBA, 0xFEBB, 0xFEBC, 0xFEBD,
-    0xFEBE, 0xFEBF, 0xFEC0, 0xFEC1, 0xFEC2, 0xFEC3, 0xFEC4, 0xFEC5,
-    0xFEC6, 0xFEC7, 0xFEC8, 0xFEC9, 0xFECA, 0xFECB, 0xFECC, 0xFECD,
-    0xFECE, 0xFECF, 0xFED0, 0xFED1, 0xFED2, 0xFED3, 0xFED4, 0xFED5,
-    0xFED6, 0xFED7, 0xFED8, 0xFED9, 0xFEDA, 0xFEDB, 0xFEDC, 0xFEDD,
-    0xFEDE, 0xFEDF, 0xFEE0, 0xFEE1, 0xFEE2, 0xFEE3, 0xFEE4, 0xFEE5,
-    0xFEE6, 0xFEE7, 0xFEE8, 0xFEE9, 0xFEEA, 0xFEEB, 0xFEEC, 0xFEED,
-    0xFEEE, 0xFEEF, 0xFEF0, 0xFEF1, 0xFEF2, 0xFEF3, 0xFEF4, 0xFEF5,
-    0xFEF6, 0xFEF7, 0xFEF8, 0xFEF9, 0xFEFA, 0xFEFB, 0xFEFC, 0xFEFD,
-    0xFEFE, 0xFEFF, 0xFF00, 0xFF01, 0xFF02, 0xFF03, 0xFF04, 0xFF05,
-    0xFF06, 0xFF07, 0xFF08, 0xFF09, 0xFF0A, 0xFF0B, 0xFF0C, 0xFF0D,
-    0xFF0E, 0xFF0F, 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15,
-    0xFF16, 0xFF17, 0xFF18, 0xFF19, 0xFF1A, 0xFF1B, 0xFF1C, 0xFF1D,
-    0xFF1E, 0xFF1F, 0xFF20, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25,
-    0xFF26, 0xFF27, 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D,
-    0xFF2E, 0xFF2F, 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35,
-    0xFF36, 0xFF37, 0xFF38, 0xFF39, 0xFF3A, 0xFF3B, 0xFF3C, 0xFF3D,
-    0xFF3E, 0xFF3F, 0xFF40, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45,
-    0xFF46, 0xFF47, 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D,
-    0xFF4E, 0xFF4F, 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55,
-    0xFF56, 0xFF57, 0xFF58, 0xFF59, 0xFF5A, 0xFF5B, 0xFF5C, 0xFF5D,
-    0xFF5E, 0xFF5F, 0xFF60, 0xFF61, 0xFF62, 0xFF63, 0xFF64, 0xFF65,
-    0xFF66, 0xFF67, 0xFF68, 0xFF69, 0xFF6A, 0xFF6B, 0xFF6C, 0xFF6D,
-    0xFF6E, 0xFF6F, 0xFF70, 0xFF71, 0xFF72, 0xFF73, 0xFF74, 0xFF75,
-    0xFF76, 0xFF77, 0xFF78, 0xFF79, 0xFF7A, 0xFF7B, 0xFF7C, 0xFF7D,
-    0xFF7E, 0xFF7F, 0xFF80, 0xFF81, 0xFF82, 0xFF83, 0xFF84, 0xFF85,
-    0xFF86, 0xFF87, 0xFF88, 0xFF89, 0xFF8A, 0xFF8B, 0xFF8C, 0xFF8D,
-    0xFF8E, 0xFF8F, 0xFF90, 0xFF91, 0xFF92, 0xFF93, 0xFF94, 0xFF95,
-    0xFF96, 0xFF97, 0xFF98, 0xFF99, 0xFF9A, 0xFF9B, 0xFF9C, 0xFF9D,
-    0xFF9E, 0xFF9F, 0xFFA0, 0xFFA1, 0xFFA2, 0xFFA3, 0xFFA4, 0xFFA5,
-    0xFFA6, 0xFFA7, 0xFFA8, 0xFFA9, 0xFFAA, 0xFFAB, 0xFFAC, 0xFFAD,
-    0xFFAE, 0xFFAF, 0xFFB0, 0xFFB1, 0xFFB2, 0xFFB3, 0xFFB4, 0xFFB5,
-    0xFFB6, 0xFFB7, 0xFFB8, 0xFFB9, 0xFFBA, 0xFFBB, 0xFFBC, 0xFFBD,
-    0xFFBE, 0xFFBF, 0xFFC0, 0xFFC1, 0xFFC2, 0xFFC3, 0xFFC4, 0xFFC5,
-    0xFFC6, 0xFFC7, 0xFFC8, 0xFFC9, 0xFFCA, 0xFFCB, 0xFFCC, 0xFFCD,
-    0xFFCE, 0xFFCF, 0xFFD0, 0xFFD1, 0xFFD2, 0xFFD3, 0xFFD4, 0xFFD5,
-    0xFFD6, 0xFFD7, 0xFFD8, 0xFFD9, 0xFFDA, 0xFFDB, 0xFFDC, 0xFFDD,
-    0xFFDE, 0xFFDF, 0xFFE0, 0xFFE1, 0xFFE2, 0xFFE3, 0xFFE4, 0xFFE5,
-    0xFFE6, 0xFFE7, 0xFFE8, 0xFFE9, 0xFFEA, 0xFFEB, 0xFFEC, 0xFFED,
-    0xFFEE, 0xFFEF, 0xFFF0, 0xFFF1, 0xFFF2, 0xFFF3, 0xFFF4, 0xFFF5,
-    0xFFF6, 0xFFF7, 0xFFF8, 0xFFF9, 0xFFFA, 0xFFFB, 0xFFFC, 0xFFFD,
-    0xFFFE, 0xFFFF,
-};
+#define E(level, skip) ((level * (1 << 7)) | (skip + 1))
+// The invalid entry has length 16 and is mapped to an invalid run.
+#define INVALID_ENT HQ_AC_INVALID_RUN
+#define INV 16
 
-static const uint8_t hq_ac_skips[NUM_HQ_AC_ENTRIES] = {
-     0,  0,  0,  0, 64,  1,  1,  0,  0,  0,  0,  2,  2,  1,  1,  0,
-     0,  0,  0,  3,  3,  4,  4,  0,  0,  0,  0,  5,  5,  6,  6,  2,
-     2,  1,  1,  1,  1,  0,  0,  0,  0,  0,  0,  7,  7,  8,  8,  9,
-     9, 10, 10,  3,  3,  4,  4,  2,  2,  1,  1,  1,  1,  1,  1,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 11, 11, 12, 12, 13,
-    13, 14, 14,  5,  5,  6,  6,  3,  3,  4,  4,  2,  2,  2,  2,  1,
-     1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  5,  5,  3,  3,  3,
-     3,  2,  2,  1,  1,  1,  1,  1,  1,  0,  1,  6,  6,  4,  4,  3,
-     3,  1,  1,  1,  1,  1,  1,  2,  3,  4,  5,  7,  7,  8,  8,  9,
-     9, 10, 10,  7,  7,  8,  8,  4,  4,  3,  3,  2,  2,  2,  2,  2,
-     2,  2,  2,  2,  2,  1,  1,  1,  1,  1,  1,  0,  1,  2,  3,  4,
-     5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
-    21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
-    37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
-    53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+static const int16_t hq_ac_sym[NUM_HQ_AC_ENTRIES] = {
+    E(   1,  0), E(  -1,  0), E(   2,  0), E(  -2,  0), E(   0, 64),
+    E(   1,  1), E(  -1,  1), E(   3,  0), E(  -3,  0), E(   4,  0),
+    E(  -4,  0), E(   1,  2), E(  -1,  2), E(   2,  1), E(  -2,  1),
+    E(   5,  0), E(  -5,  0), E(   6,  0), E(  -6,  0), E(   1,  3),
+    E(  -1,  3), E(   1,  4), E(  -1,  4), E(   7,  0), E(  -7,  0),
+    E(   8,  0), E(  -8,  0), E(   1,  5), E(  -1,  5), E(   1,  6),
+    E(  -1,  6), E(   2,  2), E(  -2,  2), E(   3,  1), E(  -3,  1),
+    E(   4,  1), E(  -4,  1), E(   9,  0), E(  -9,  0), E(  10,  0),
+    E( -10,  0), E(  11,  0), E( -11,  0), E(   1,  7), E(  -1,  7),
+    E(   1,  8), E(  -1,  8), E(   1,  9), E(  -1,  9), E(   1, 10),
+    E(  -1, 10), E(   2,  3), E(  -2,  3), E(   2,  4), E(  -2,  4),
+    E(   3,  2), E(  -3,  2), E(   5,  1), E(  -5,  1), E(   6,  1),
+    E(  -6,  1), E(   7,  1), E(  -7,  1), E(  12,  0), E( -12,  0),
+    E(  13,  0), E( -13,  0), E(  14,  0), E( -14,  0), E(  15,  0),
+    E( -15,  0), E(  16,  0), E( -16,  0), E(  17,  0), E( -17,  0),
+    E(   1, 11), E(  -1, 11), E(   1, 12), E(  -1, 12), E(   1, 13),
+    E(  -1, 13), E(   1, 14), E(  -1, 14), E(   2,  5), E(  -2,  5),
+    E(   2,  6), E(  -2,  6), E(   3,  3), E(  -3,  3), E(   3,  4),
+    E(  -3,  4), E(   4,  2), E(  -4,  2), E(   5,  2), E(  -5,  2),
+    E(   8,  1), E(  -8,  1), E(  18,  0), E( -18,  0), E(  19,  0),
+    E( -19,  0), E(  20,  0), E( -20,  0), E(  21,  0), E( -21,  0),
+    E(  22,  0), E( -22,  0), E(   3,  5), E(  -3,  5), E(   4,  3),
+    E(  -4,  3), E(   5,  3), E(  -5,  3), E(   6,  2), E(  -6,  2),
+    E(   9,  1), E(  -9,  1), E(  10,  1), E( -10,  1), E(  11,  1),
+    E( -11,  1), E(   0,  0), E(   0,  1), E(   3,  6), E(  -3,  6),
+    E(   4,  4), E(  -4,  4), E(   6,  3), E(  -6,  3), E(  12,  1),
+    E( -12,  1), E(  13,  1), E( -13,  1), E(  14,  1), E( -14,  1),
+    E(   0,  2), E(   0,  3), E(   0,  4), E(   0,  5), E(   2,  7),
+    E(  -2,  7), E(   2,  8), E(  -2,  8), E(   2,  9), E(  -2,  9),
+    E(   2, 10), E(  -2, 10), E(   3,  7), E(  -3,  7), E(   3,  8),
+    E(  -3,  8), E(   5,  4), E(  -5,  4), E(   7,  3), E(  -7,  3),
+    E(   7,  2), E(  -7,  2), E(   8,  2), E(  -8,  2), E(   9,  2),
+    E(  -9,  2), E(  10,  2), E( -10,  2), E(  11,  2), E( -11,  2),
+    E(  15,  1), E( -15,  1), E(  16,  1), E( -16,  1), E(  17,  1),
+    E( -17,  1), E(   0,  0), E(   0,  1), E(   0,  2), E(   0,  3),
+    E(   0,  4), E(   0,  5), E(   0,  6), E(   0,  7), E(   0,  8),
+    E(   0,  9), E(   0, 10), E(   0, 11), E(   0, 12), E(   0, 13),
+    E(   0, 14), E(   0, 15), E(   0, 16), E(   0, 17), E(   0, 18),
+    E(   0, 19), E(   0, 20), E(   0, 21), E(   0, 22), E(   0, 23),
+    E(   0, 24), E(   0, 25), E(   0, 26), E(   0, 27), E(   0, 28),
+    E(   0, 29), E(   0, 30), E(   0, 31), E(   0, 32), E(   0, 33),
+    E(   0, 34), E(   0, 35), E(   0, 36), E(   0, 37), E(   0, 38),
+    E(   0, 39), E(   0, 40), E(   0, 41), E(   0, 42), E(   0, 43),
+    E(   0, 44), E(   0, 45), E(   0, 46), E(   0, 47), E(   0, 48),
+    E(   0, 49), E(   0, 50), E(   0, 51), E(   0, 52), E(   0, 53),
+    E(   0, 54), E(   0, 55), E(   0, 56), E(   0, 57), E(   0, 58),
+    E(   0, 59), E(   0, 60), E(   0, 61), E(   0, 62), E(   0, 63),
+    E(   0,  0), INVALID_ENT, E(   1,  0), E(  -1,  0), E(   2,  0),
+    E(  -2,  0), E(   3,  0), E(  -3,  0), E(   4,  0), E(  -4,  0),
+    E(   5,  0), E(  -5,  0), E(   6,  0), E(  -6,  0), E(   7,  0),
+    E(  -7,  0), E(   8,  0), E(  -8,  0), E(   9,  0), E(  -9,  0),
+    E(  10,  0), E( -10,  0), E(  11,  0), E( -11,  0), E(  12,  0),
+    E( -12,  0), E(  13,  0), E( -13,  0), E(  14,  0), E( -14,  0),
+    E(  15,  0), E( -15,  0), E(  16,  0), E( -16,  0), E(  17,  0),
+    E( -17,  0), E(  18,  0), E( -18,  0), E(  19,  0), E( -19,  0),
+    E(  20,  0), E( -20,  0), E(  21,  0), E( -21,  0), E(  22,  0),
+    E( -22,  0), E(  23,  0), E( -23,  0), E(  24,  0), E( -24,  0),
+    E(  25,  0), E( -25,  0), E(  26,  0), E( -26,  0), E(  27,  0),
+    E( -27,  0), E(  28,  0), E( -28,  0), E(  29,  0), E( -29,  0),
+    E(  30,  0), E( -30,  0), E(  31,  0), E( -31,  0), E(  32,  0),
+    E( -32,  0), E(  33,  0), E( -33,  0), E(  34,  0), E( -34,  0),
+    E(  35,  0), E( -35,  0), E(  36,  0), E( -36,  0), E(  37,  0),
+    E( -37,  0), E(  38,  0), E( -38,  0), E(  39,  0), E( -39,  0),
+    E(  40,  0), E( -40,  0), E(  41,  0), E( -41,  0), E(  42,  0),
+    E( -42,  0), E(  43,  0), E( -43,  0), E(  44,  0), E( -44,  0),
+    E(  45,  0), E( -45,  0), E(  46,  0), E( -46,  0), E(  47,  0),
+    E( -47,  0), E(  48,  0), E( -48,  0), E(  49,  0), E( -49,  0),
+    E(  50,  0), E( -50,  0), E(  51,  0), E( -51,  0), E(  52,  0),
+    E( -52,  0), E(  53,  0), E( -53,  0), E(  54,  0), E( -54,  0),
+    E(  55,  0), E( -55,  0), E(  56,  0), E( -56,  0), E(  57,  0),
+    E( -57,  0), E(  58,  0), E( -58,  0), E(  59,  0), E( -59,  0),
+    E(  60,  0), E( -60,  0), E(  61,  0), E( -61,  0), E(  62,  0),
+    E( -62,  0), E(  63,  0), E( -63,  0), E(  64,  0), E( -64,  0),
+    E(  65,  0), E( -65,  0), E(  66,  0), E( -66,  0), E(  67,  0),
+    E( -67,  0), E(  68,  0), E( -68,  0), E(  69,  0), E( -69,  0),
+    E(  70,  0), E( -70,  0), E(  71,  0), E( -71,  0), E(  72,  0),
+    E( -72,  0), E(  73,  0), E( -73,  0), E(  74,  0), E( -74,  0),
+    E(  75,  0), E( -75,  0), E(  76,  0), E( -76,  0), E(  77,  0),
+    E( -77,  0), E(  78,  0), E( -78,  0), E(  79,  0), E( -79,  0),
+    E(  80,  0), E( -80,  0), E(  81,  0), E( -81,  0), E(  82,  0),
+    E( -82,  0), E(  83,  0), E( -83,  0), E(  84,  0), E( -84,  0),
+    E(  85,  0), E( -85,  0), E(  86,  0), E( -86,  0), E(  87,  0),
+    E( -87,  0), E(  88,  0), E( -88,  0), E(  89,  0), E( -89,  0),
+    E(  90,  0), E( -90,  0), E(  91,  0), E( -91,  0), E(  92,  0),
+    E( -92,  0), E(  93,  0), E( -93,  0), E(  94,  0), E( -94,  0),
+    E(  95,  0), E( -95,  0), E(  96,  0), E( -96,  0), E(  97,  0),
+    E( -97,  0), E(  98,  0), E( -98,  0), E(  99,  0), E( -99,  0),
+    E( 100,  0), E(-100,  0), E( 101,  0), E(-101,  0), E( 102,  0),
+    E(-102,  0), E( 103,  0), E(-103,  0), E( 104,  0), E(-104,  0),
+    E( 105,  0), E(-105,  0), E( 106,  0), E(-106,  0), E( 107,  0),
+    E(-107,  0), E( 108,  0), E(-108,  0), E( 109,  0), E(-109,  0),
+    E( 110,  0), E(-110,  0), E( 111,  0), E(-111,  0), E( 112,  0),
+    E(-112,  0), E( 113,  0), E(-113,  0), E( 114,  0), E(-114,  0),
+    E( 115,  0), E(-115,  0), E( 116,  0), E(-116,  0), E( 117,  0),
+    E(-117,  0), E( 118,  0), E(-118,  0), E( 119,  0), E(-119,  0),
+    E( 120,  0), E(-120,  0), E( 121,  0), E(-121,  0), E( 122,  0),
+    E(-122,  0), E( 123,  0), E(-123,  0), E( 124,  0), E(-124,  0),
+    E( 125,  0), E(-125,  0), E( 126,  0), E(-126,  0), E( 127,  0),
+    E(-127,  0), E( 128,  0), E(-128,  0), E( 129,  0), E(-129,  0),
+    E( 130,  0), E(-130,  0), E( 131,  0), E(-131,  0), E( 132,  0),
+    E(-132,  0), E( 133,  0), E(-133,  0), E( 134,  0), E(-134,  0),
+    E( 135,  0), E(-135,  0), E( 136,  0), E(-136,  0), E( 137,  0),
+    E(-137,  0), E( 138,  0), E(-138,  0), E( 139,  0), E(-139,  0),
+    E( 140,  0), E(-140,  0), E( 141,  0), E(-141,  0), E( 142,  0),
+    E(-142,  0), E( 143,  0), E(-143,  0), E( 144,  0), E(-144,  0),
+    E( 145,  0), E(-145,  0), E( 146,  0), E(-146,  0), E( 147,  0),
+    E(-147,  0), E( 148,  0), E(-148,  0), E( 149,  0), E(-149,  0),
+    E( 150,  0), E(-150,  0), E( 151,  0), E(-151,  0), E( 152,  0),
+    E(-152,  0), E( 153,  0), E(-153,  0), E( 154,  0), E(-154,  0),
+    E( 155,  0), E(-155,  0), E( 156,  0), E(-156,  0), E( 157,  0),
+    E(-157,  0), E( 158,  0), E(-158,  0), E( 159,  0), E(-159,  0),
+    E( 160,  0), E(-160,  0), E( 161,  0), E(-161,  0), E( 162,  0),
+    E(-162,  0), E( 163,  0), E(-163,  0), E( 164,  0), E(-164,  0),
+    E( 165,  0), E(-165,  0), E( 166,  0), E(-166,  0), E( 167,  0),
+    E(-167,  0), E( 168,  0), E(-168,  0), E( 169,  0), E(-169,  0),
+    E( 170,  0), E(-170,  0), E( 171,  0), E(-171,  0), E( 172,  0),
+    E(-172,  0), E( 173,  0), E(-173,  0), E( 174,  0), E(-174,  0),
+    E( 175,  0), E(-175,  0), E( 176,  0), E(-176,  0), E( 177,  0),
+    E(-177,  0), E( 178,  0), E(-178,  0), E( 179,  0), E(-179,  0),
+    E( 180,  0), E(-180,  0), E( 181,  0), E(-181,  0), E( 182,  0),
+    E(-182,  0), E( 183,  0), E(-183,  0), E( 184,  0), E(-184,  0),
+    E( 185,  0), E(-185,  0), E( 186,  0), E(-186,  0), E( 187,  0),
+    E(-187,  0), E( 188,  0), E(-188,  0), E( 189,  0), E(-189,  0),
+    E( 190,  0), E(-190,  0), E( 191,  0), E(-191,  0), E( 192,  0),
+    E(-192,  0), E( 193,  0), E(-193,  0), E( 194,  0), E(-194,  0),
+    E( 195,  0), E(-195,  0), E( 196,  0), E(-196,  0), E( 197,  0),
+    E(-197,  0), E( 198,  0), E(-198,  0), E( 199,  0), E(-199,  0),
+    E( 200,  0), E(-200,  0), E( 201,  0), E(-201,  0), E( 202,  0),
+    E(-202,  0), E( 203,  0), E(-203,  0), E( 204,  0), E(-204,  0),
+    E( 205,  0), E(-205,  0), E( 206,  0), E(-206,  0), E( 207,  0),
+    E(-207,  0), E( 208,  0), E(-208,  0), E( 209,  0), E(-209,  0),
+    E( 210,  0), E(-210,  0), E( 211,  0), E(-211,  0), E( 212,  0),
+    E(-212,  0), E( 213,  0), E(-213,  0), E( 214,  0), E(-214,  0),
+    E( 215,  0), E(-215,  0), E( 216,  0), E(-216,  0), E( 217,  0),
+    E(-217,  0), E( 218,  0), E(-218,  0), E( 219,  0), E(-219,  0),
+    E( 220,  0), E(-220,  0), E( 221,  0), E(-221,  0), E( 222,  0),
+    E(-222,  0), E( 223,  0), E(-223,  0), E( 224,  0), E(-224,  0),
+    E( 225,  0), E(-225,  0), E( 226,  0), E(-226,  0), E( 227,  0),
+    E(-227,  0), E( 228,  0), E(-228,  0), E( 229,  0), E(-229,  0),
+    E( 230,  0), E(-230,  0), E( 231,  0), E(-231,  0), E( 232,  0),
+    E(-232,  0), E( 233,  0), E(-233,  0), E( 234,  0), E(-234,  0),
+    E( 235,  0), E(-235,  0), E( 236,  0), E(-236,  0), E( 237,  0),
+    E(-237,  0), E( 238,  0), E(-238,  0), E( 239,  0), E(-239,  0),
+    E( 240,  0), E(-240,  0), E( 241,  0), E(-241,  0), E( 242,  0),
+    E(-242,  0), E( 243,  0), E(-243,  0), E( 244,  0), E(-244,  0),
+    E( 245,  0), E(-245,  0), E( 246,  0), E(-246,  0), E( 247,  0),
+    E(-247,  0), E( 248,  0), E(-248,  0), E( 249,  0), E(-249,  0),
+    E( 250,  0), E(-250,  0), E( 251,  0), E(-251,  0), E( 252,  0),
+    E(-252,  0), E( 253,  0), E(-253,  0), E( 254,  0), E(-254,  0),
+    E( 255,  0), E(-255,  0),
 };
 
-static const int16_t hq_ac_syms[NUM_HQ_AC_ENTRIES] = {
-      1,   -1,   2,   -2,   0,    1,  -1,    3,
-     -3,    4,  -4,    1,  -1,    2,  -2,    5,
-     -5,    6,  -6,    1,  -1,    1,  -1,    7,
-     -7,    8,  -8,    1,  -1,    1,  -1,    2,
-     -2,    3,  -3,    4,  -4,    9,  -9,   10,
-    -10,   11, -11,    1,  -1,    1,  -1,    1,
-     -1,    1,  -1,    2,  -2,    2,  -2,    3,
-     -3,    5,  -5,    6,  -6,    7,  -7,   12,
-    -12,   13, -13,   14, -14,   15, -15,   16,
-    -16,   17, -17,    1,  -1,    1,  -1,    1,
-     -1,    1,  -1,    2,  -2,    2,  -2,    3,
-     -3,    3,  -3,    4,  -4,    5,  -5,    8,
-     -8,   18, -18,   19, -19,   20, -20,   21,
-    -21,   22, -22,    3,  -3,    4,  -4,    5,
-     -5,    6,  -6,    9,  -9,   10, -10,   11,
-    -11,    0,   0,    3,  -3,    4,  -4,    6,
-     -6,   12, -12,   13, -13,   14, -14,    0,
-      0,    0,   0,    2,  -2,    2,  -2,    2,
-     -2,    2,  -2,    3,  -3,    3,  -3,    5,
-     -5,    7,  -7,    7,  -7,    8,  -8,    9,
-     -9,   10, -10,   11, -11,   15, -15,   16,
-    -16,   17, -17,    0,   0,    0,   0,    0,
-      0,    0,   0,    0,   0,    0,   0,    0,
-      0,    0,   0,    0,   0,    0,   0,    0,
-      0,    0,   0,    0,   0,    0,   0,    0,
-      0,    0,   0,    0,   0,    0,   0,    0,
-      0,    0,   0,    0,   0,    0,   0,    0,
-      0,    0,   0,    0,   0,    0,   0,    0,
-      0,    0,   0,    0,   0,    0,   0,    0,
-      0,    0,   0,    0,   1,   -1,   2,   -2,
-      3,   -3,   4,   -4,   5,   -5,   6,   -6,
-      7,   -7,   8,   -8,   9,   -9,  10,  -10,
-     11,  -11,  12,  -12,  13,  -13,  14,  -14,
-     15,  -15,  16,  -16,  17,  -17,  18,  -18,
-     19,  -19,  20,  -20,  21,  -21,  22,  -22,
-     23,  -23,  24,  -24,  25,  -25,  26,  -26,
-     27,  -27,  28,  -28,  29,  -29,  30,  -30,
-     31,  -31,  32,  -32,  33,  -33,  34,  -34,
-     35,  -35,  36,  -36,  37,  -37,  38,  -38,
-     39,  -39,  40,  -40,  41,  -41,  42,  -42,
-     43,  -43,  44,  -44,  45,  -45,  46,  -46,
-     47,  -47,  48,  -48,  49,  -49,  50,  -50,
-     51,  -51,  52,  -52,  53,  -53,  54,  -54,
-     55,  -55,  56,  -56,  57,  -57,  58,  -58,
-     59,  -59,  60,  -60,  61,  -61,  62,  -62,
-     63,  -63,  64,  -64,  65,  -65,  66,  -66,
-     67,  -67,  68,  -68,  69,  -69,  70,  -70,
-     71,  -71,  72,  -72,  73,  -73,  74,  -74,
-     75,  -75,  76,  -76,  77,  -77,  78,  -78,
-     79,  -79,  80,  -80,  81,  -81,  82,  -82,
-     83,  -83,  84,  -84,  85,  -85,  86,  -86,
-     87,  -87,  88,  -88,  89,  -89,  90,  -90,
-     91,  -91,  92,  -92,  93,  -93,  94,  -94,
-     95,  -95,  96,  -96,  97,  -97,  98,  -98,
-     99,  -99, 100, -100, 101, -101, 102, -102,
-    103, -103, 104, -104, 105, -105, 106, -106,
-    107, -107, 108, -108, 109, -109, 110, -110,
-    111, -111, 112, -112, 113, -113, 114, -114,
-    115, -115, 116, -116, 117, -117, 118, -118,
-    119, -119, 120, -120, 121, -121, 122, -122,
-    123, -123, 124, -124, 125, -125, 126, -126,
-    127, -127, 128, -128, 129, -129, 130, -130,
-    131, -131, 132, -132, 133, -133, 134, -134,
-    135, -135, 136, -136, 137, -137, 138, -138,
-    139, -139, 140, -140, 141, -141, 142, -142,
-    143, -143, 144, -144, 145, -145, 146, -146,
-    147, -147, 148, -148, 149, -149, 150, -150,
-    151, -151, 152, -152, 153, -153, 154, -154,
-    155, -155, 156, -156, 157, -157, 158, -158,
-    159, -159, 160, -160, 161, -161, 162, -162,
-    163, -163, 164, -164, 165, -165, 166, -166,
-    167, -167, 168, -168, 169, -169, 170, -170,
-    171, -171, 172, -172, 173, -173, 174, -174,
-    175, -175, 176, -176, 177, -177, 178, -178,
-    179, -179, 180, -180, 181, -181, 182, -182,
-    183, -183, 184, -184, 185, -185, 186, -186,
-    187, -187, 188, -188, 189, -189, 190, -190,
-    191, -191, 192, -192, 193, -193, 194, -194,
-    195, -195, 196, -196, 197, -197, 198, -198,
-    199, -199, 200, -200, 201, -201, 202, -202,
-    203, -203, 204, -204, 205, -205, 206, -206,
-    207, -207, 208, -208, 209, -209, 210, -210,
-    211, -211, 212, -212, 213, -213, 214, -214,
-    215, -215, 216, -216, 217, -217, 218, -218,
-    219, -219, 220, -220, 221, -221, 222, -222,
-    223, -223, 224, -224, 225, -225, 226, -226,
-    227, -227, 228, -228, 229, -229, 230, -230,
-    231, -231, 232, -232, 233, -233, 234, -234,
-    235, -235, 236, -236, 237, -237, 238, -238,
-    239, -239, 240, -240, 241, -241, 242, -242,
-    243, -243, 244, -244, 245, -245, 246, -246,
-    247, -247, 248, -248, 249, -249, 250, -250,
-    251, -251, 252, -252, 253, -253, 254, -254,
-    255, -255,
+static const uint8_t hq_ac_lens[NUM_HQ_AC_ENTRIES] = {
+     3,  3,  4,  4,  4,  5,  5,  5,  5,  5,  5,  6,  6,  6,  6,
+     6,  6,  6,  6,  7,  7,  7,  7,  7,  7,  7,  7,  8,  8,  8,
+     8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  9,  9,
+     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
+     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+    10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+    11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+    12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 16, INV,16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
 };
 
 /* tables section - one per supported profile */
-- 
2.45.2