changes.
authoryeom <yeom>
Thu, 28 Jul 2011 09:02:08 +0000 (09:02 +0000)
committeryeom <yeom>
Thu, 28 Jul 2011 09:02:08 +0000 (09:02 +0000)
Robust/src/Tests/ssJava/mp3decoder/HuffData.java [new file with mode: 0644]
Robust/src/Tests/ssJava/mp3decoder/LayerIIIDecoder.java
Robust/src/Tests/ssJava/mp3decoder/huffcodetab.java

diff --git a/Robust/src/Tests/ssJava/mp3decoder/HuffData.java b/Robust/src/Tests/ssJava/mp3decoder/HuffData.java
new file mode 100644 (file)
index 0000000..6cc74cf
--- /dev/null
@@ -0,0 +1,18 @@
+// need to have this class for liner type system
+public class HuffData {
+
+  public int x;
+  public int y;
+  public int w;
+  public int v;
+  public BitReserve br;
+
+  public HuffData(int x, int y, int w, int v, BitReserve br) {
+    this.x = x;
+    this.y = y;
+    this.w = w;
+    this.v = v;
+    this.br = br;
+  }
+
+}
index 48b0d1b2729ece17813be6fb41ad933c4ab8dde7..b96aa0195e0a8aa294eb35d4dbf27c152224ddc2 100644 (file)
@@ -46,8 +46,8 @@
 // 9th added for get_LSF_scale_factors
 // 10th added for get_scale_factors
 // llth added for decode
 // 9th added for get_LSF_scale_factors
 // 10th added for get_scale_factors
 // llth added for decode
-// @LATTICE("NZ*,SI<SF1,RO<SI1,SI1<NZ,NZ<SI,SI1<SBI,SBI<SI,BUF<FT,SFB<SF1,SF1<SF0,SF0<HD1,BR<ST,ST,FT<SP,SP<OUT,OUT<SI1,SI1<SI,OUT<CH0,P2S<CH0,CH0<MAX0,MAX0<BR1,FS<BR1,BR1<BR,BR<HD1,HD1<HD,OUT*,BR1*,SI1*,MAX0*,CH0*,FS<BR,BR<SF,LR<IR,IR<IP,IP<SF,LR<K,K<F,LR<VAR,VAR<F,VAR<RAW,CSH<F,SAM<O,O<F,NS<SI,SI<CH,SFREQ<H,MAX<H,H<CH,FLCH<CH,FLCH<WC,SF<SFT,SFT<NS,NS<C,TS<RAW,O<TS,LY<F,C*,FS*,IP*,IR*,LR*,K*,O*,TS*,TS<BT,BT<GR,GR<SI,LR<S,S<ME,ME<CH,K<SH,K<LSF,LSF<H,LSF<CH,IP<SH,SH<J,J<S,S<ME,SH<SFREQ,SH<RO,IP<TMP2,LSF<H,TMP2<F,J*,SH*,O<RO2,RO2<RO3,RO3<RO4,RO4<RO5,O<RO1,RO1<RO5,RO5<RO6,RO6<RO7,RO7<RO8,RO8<RO9,RO9<SFREQ,RO9<F,RO1*,RO4*,RO5*,RO6*,RO9*,VAR<HD3,HD3<HD2,HD1<SFREQ,HD1<RAW,HD2*,HD3*,SFB<GLSFD5,GLSFD5<NS,GLSFD5<GLSFD4,NS<GLSFD3,GLSFD4<GLSFD3,GLSFD3<GLSFD2,GLSFD2<GLSFD1,GLSFD1<SI,GLSFD5*,SF<GLSFF4,GLSFF4<GLSFF3,GLSFF3<GLSFF2,GLSFF2<GLSFF1,GLSFF1<SI,GLSFF4*,GLSFF3*,GLSFF2*,SF<GSF5,GSF5<GSF4,GSF4<GSF3,GSF3<GSF2,GSF2<GSF1,GSF1<SI,GSF5*,GSF4*,O<D3,D3<D2,D2<D1,D1<FLCH,D1*,D2*")
-@LATTICE("LR*,OUT<LR,LR<RO,C*,NZ*,SI<SF1,RO<SI1,SI1<NZ,NZ<SI,SI1<SBI,SBI<SI,BUF<FT,SFB<SF1,SF1<SF0,SF0<HD1,BR<ST,ST,FT<SP,SP<OUT,OUT<SI1,SI1<SI,OUT<CH0,P2S<CH0,CH0<MAX0,MAX0<BR1,FS<BR1,BR1<BR,BR<HD1,HD1<HD,OUT*,BR1*,SI1*,MAX0*,CH0*,RAW,TS,NS,F,C,K,LY,VAR,IR,IP,CSH,GLSFD3,GLSFD4,GLSFD5,GLSFF4,GLSFF2,GLSFF3,GLSFF1,GSF4,GSF5,GSF1,GSF2,GSF3,HD2,HD3,BT,GR,RO6,RO5,RO9,RO8,RO7,RO4,RO1,RO3,RO2,SH,ME,TMP2,S,LSF,J")
+// @LATTICE("SF0*,SFB_SH<NS,NS<SI,SFB_SH*,SFB<SFB_SH,C,C*,SI1<SF2,SF2<SFB,SF1<BR,LR*,OUT<LR,LR<RO,NZ*,SI<SF1,RO<SI1,SI1<NZ,NZ<SI,SI1<SBI,SBI<SI,BUF<FT,SF1<SF0,SF0<HD1,BR<ST,ST,FT<SP,SP<OUT,OUT<SI1,SI1<SI,OUT<CH0,P2S<CH0,CH0<MAX0,MAX0<BR1,FS<BR1,BR1<BR,BR<HD1,HD1<HD,OUT*,BR1*,SI1*,MAX0*,CH0*,RAW,TS,F,C,K,LY,VAR,IR,IP,CSH,GLSFD3,GLSFD4,GLSFD5,GLSFF4,GLSFF2,GLSFF3,GLSFF1,GSF4,GSF5,GSF1,GSF2,GSF3,HD2,HD3,BT,GR,RO6,RO5,RO9,RO8,RO7,RO4,RO1,RO3,RO2,SH,ME,TMP2,S,LSF,J")
+@LATTICE("SI<P2S,SF1<CH0,SF0*,SFB_SH<NS,NS<SI,SFB_SH*,SFB<SFB_SH,C,C*,SI1<SF2,SF2<SFB,SF1<BR,LR*,OUT<LR,LR<RO,NZ*,SI<SF1,RO<SI1,SI1<NZ,NZ<SI,SI1<SBI,SBI<SI,BUF<FT,SF1<SF0,SF0<HD1,BR<ST,ST,FT<SP,SP<OUT,OUT<SI1,SI1<SI,P2S<CH0,CH0<MAX0,MAX0<BR1,FS<BR1,BR1<BR,BR<HD1,HD1<HD,OUT*,BR1*,SI1*,MAX0*,CH0*,RAW,TS,F,C,K,LY,VAR,IR,IP,CSH,GLSFD3,GLSFD4,GLSFD5,GLSFF4,GLSFF2,GLSFF3,GLSFF1,GSF4,GSF5,GSF1,GSF2,GSF3,HD2,HD3,BT,GR,RO6,RO5,RO9,RO8,RO7,RO4,RO1,RO3,RO2,SH,ME,TMP2,S,LSF,J")
 @METHODDEFAULT("OUT<V,V<THIS,THIS<SH,SH<IN,SH*,THISLOC=THIS,GLOBALLOC=IN")
 final class LayerIIIDecoder implements FrameDecoder {
   static final double d43 = (4.0 / 3.0);
 @METHODDEFAULT("OUT<V,V<THIS,THIS<SH,SH<IN,SH*,THISLOC=THIS,GLOBALLOC=IN")
 final class LayerIIIDecoder implements FrameDecoder {
   static final double d43 = (4.0 / 3.0);
@@ -90,7 +90,7 @@ final class LayerIIIDecoder implements FrameDecoder {
   private III_side_info_t si;
 
   // @LOC("SBT") private temporaire2[] III_scalefac_t;
   private III_side_info_t si;
 
   // @LOC("SBT") private temporaire2[] III_scalefac_t;
-  @LOC("SF1")
+  @LOC("SF2")
   private temporaire2[] scalefac;
   // private III_scalefac_t scalefac;
 
   private temporaire2[] scalefac;
   // private III_scalefac_t scalefac;
 
@@ -458,17 +458,20 @@ final class LayerIIIDecoder implements FrameDecoder {
    * Reads the side info from the stream, assuming the entire. frame has been
    * read already. Mono : 136 bits (= 17 bytes) Stereo : 256 bits (= 32 bytes)
    */
    * Reads the side info from the stream, assuming the entire. frame has been
    * read already. Mono : 136 bits (= 17 bytes) Stereo : 256 bits (= 32 bytes)
    */
-  @RETURNLOC("OUT")
+  @LATTICE("OUT<THIS,THISLOC=THIS,RETURNLOC=OUT")
   private boolean get_side_info() {
   private boolean get_side_info() {
-    @LOC("IN") int ch;
-    @LOC("IN") int gr;
+
+    @LOC("THIS,LayerIIIDecoder.CH0") int ch;
+    @LOC("THIS,LayerIIIDecoder.CH0") int gr;
+
     if (header.version() == Header.MPEG1) {
 
       si.main_data_begin = stream.get_bits(9);
     if (header.version() == Header.MPEG1) {
 
       si.main_data_begin = stream.get_bits(9);
-      if (channels == 1)
+      if (channels == 1) {
         si.private_bits = stream.get_bits(5);
         si.private_bits = stream.get_bits(5);
-      else
+      } else {
         si.private_bits = stream.get_bits(3);
         si.private_bits = stream.get_bits(3);
+      }
 
       for (ch = 0; ch < channels; ch++) {
         si.ch[ch].scfsi[0] = stream.get_bits(1);
 
       for (ch = 0; ch < channels; ch++) {
         si.ch[ch].scfsi[0] = stream.get_bits(1);
@@ -582,23 +585,24 @@ final class LayerIIIDecoder implements FrameDecoder {
   private void get_scale_factors(@LOC("THIS,LayerIIIDecoder.SF0") int ch,
       @LOC("THIS,LayerIIIDecoder.SF0") int gr) {
 
   private void get_scale_factors(@LOC("THIS,LayerIIIDecoder.SF0") int ch,
       @LOC("THIS,LayerIIIDecoder.SF0") int gr) {
 
-    @LOC("THIS,LayerIIIDecoder.GSF4") int sfb;
-    @LOC("THIS,LayerIIIDecoder.GSF5") int window;
-    @LOC("THIS,LayerIIIDecoder.GSF1") gr_info_s gr_info = (si.ch[ch].gr[gr]);
-    @LOC("THIS,LayerIIIDecoder.GSF2") int scale_comp = gr_info.scalefac_compress;
-    @LOC("THIS,LayerIIIDecoder.GSF3") int length0 = slen[0][scale_comp];
-    @LOC("THIS,LayerIIIDecoder.GSF3") int length1 = slen[1][scale_comp];
+    // gr_info_s gr_info = (si.ch[ch].gr[gr]); remove alias
 
 
-    if ((gr_info.window_switching_flag != 0) && (gr_info.block_type == 2)) {
-      if ((gr_info.mixed_block_flag) != 0) { // MIXED
+    @LOC("THIS,LayerIIIDecoder.SFB_SH") int sfb;
+    @LOC("THIS,LayerIIIDecoder.SFB_SH") int window;
+    @LOC("THIS,LayerIIIDecoder.SFB_SH") int scale_comp = si.ch[ch].gr[gr].scalefac_compress;
+    @LOC("THIS,LayerIIIDecoder.SFB_SH") int length0 = slen[0][scale_comp];
+    @LOC("THIS,LayerIIIDecoder.SFB_SH") int length1 = slen[1][scale_comp];
+
+    if ((si.ch[ch].gr[gr].window_switching_flag != 0) && (si.ch[ch].gr[gr].block_type == 2)) {
+      if ((si.ch[ch].gr[gr].mixed_block_flag) != 0) { // MIXED
         for (sfb = 0; sfb < 8; sfb++)
         for (sfb = 0; sfb < 8; sfb++)
-          scalefac[ch].l[sfb] = br.hgetbits(slen[0][gr_info.scalefac_compress]);
+          scalefac[ch].l[sfb] = br.hgetbits(slen[0][si.ch[ch].gr[gr].scalefac_compress]);
         for (sfb = 3; sfb < 6; sfb++)
           for (window = 0; window < 3; window++)
         for (sfb = 3; sfb < 6; sfb++)
           for (window = 0; window < 3; window++)
-            scalefac[ch].s[window][sfb] = br.hgetbits(slen[0][gr_info.scalefac_compress]);
+            scalefac[ch].s[window][sfb] = br.hgetbits(slen[0][si.ch[ch].gr[gr].scalefac_compress]);
         for (sfb = 6; sfb < 12; sfb++)
           for (window = 0; window < 3; window++)
         for (sfb = 6; sfb < 12; sfb++)
           for (window = 0; window < 3; window++)
-            scalefac[ch].s[window][sfb] = br.hgetbits(slen[1][gr_info.scalefac_compress]);
+            scalefac[ch].s[window][sfb] = br.hgetbits(slen[1][si.ch[ch].gr[gr].scalefac_compress]);
         for (sfb = 12, window = 0; window < 3; window++)
           scalefac[ch].s[window][sfb] = 0;
 
         for (sfb = 12, window = 0; window < 3; window++)
           scalefac[ch].s[window][sfb] = 0;
 
@@ -691,19 +695,23 @@ final class LayerIIIDecoder implements FrameDecoder {
   private final int[] new_slen = new int[4];
 
   // ssjava
   private final int[] new_slen = new int[4];
 
   // ssjava
-  @LATTICE("THIS<IN,THIS<I,THIS<X,THIS<M,I*,X*,M*,THISLOC=THIS,GLOBALLOC=THIS")
-  private void get_LSF_scale_data(@LOC("IN") int ch, @LOC("IN") int gr) {
+  // @LATTICE("THIS<IN,THIS<I,THIS<X,THIS<M,I*,X*,M*,THISLOC=THIS,GLOBALLOC=THIS")
+  @LATTICE("M<THIS,THIS<IN,THIS<C,C*,M*,THISLOC=THIS,GLOBALLOC=THIS")
+  private void get_LSF_scale_data(@LOC("THIS,LayerIIIDecoder.SF0") int ch,
+      @LOC("THIS,LayerIIIDecoder.SF0") int gr) {
 
     @LOC("THIS,LayerIIIDecoder.HD1") int mode_ext = header.mode_extension();
     // @LOC("THIS,LayerIIIDecoder.GLSFD1") gr_info_s gr_info =
     // (si.ch[ch].gr[gr]); // remove alias
 
 
     @LOC("THIS,LayerIIIDecoder.HD1") int mode_ext = header.mode_extension();
     // @LOC("THIS,LayerIIIDecoder.GLSFD1") gr_info_s gr_info =
     // (si.ch[ch].gr[gr]); // remove alias
 
-    @LOC("THIS,LayerIIIDecoder.SI1") int scalefac_comp = si.ch[ch].gr[gr].scalefac_compress;
-    @LOC("THIS,LayerIIIDecoder.SI1") int blocktypenumber;
+    @LOC("THIS,LayerIIIDecoder.SI,LayerIIIDecoder$III_side_info_t.CH,LayerIIIDecoder$temporaire.GR,LayerIIIDecoder$gr_info_s.V") int scalefac_comp =
+        si.ch[ch].gr[gr].scalefac_compress;
+    @LOC("THIS,LayerIIIDecoder.SI") int blocktypenumber;
 
 
-    @LOC("THIS,LayerIIIDecoder.GLSFD3") int int_scalefac_comp;
-    @LOC("M") int m;
-    @LOC("THIS,LayerIIIDecoder.GLSFD4") int blocknumber = 0;
+    @LOC("THIS,LayerIIIDecoder.SI,LayerIIIDecoder$III_side_info_t.CH,LayerIIIDecoder$temporaire.GR,LayerIIIDecoder$gr_info_s.V") int int_scalefac_comp;
+    @LOC("THIS,LayerIIIDecoder.SFB_SH") int m;
+    @LOC("THIS,LayerIIIDecoder.SI,LayerIIIDecoder$III_side_info_t.CH,LayerIIIDecoder$temporaire.GR,LayerIIIDecoder$gr_info_s.V") int blocknumber =
+        0;
 
     if (si.ch[ch].gr[gr].block_type == 2) {
       if (si.ch[ch].gr[gr].mixed_block_flag == 0) {
 
     if (si.ch[ch].gr[gr].block_type == 2) {
       if (si.ch[ch].gr[gr].mixed_block_flag == 0) {
@@ -775,13 +783,13 @@ final class LayerIIIDecoder implements FrameDecoder {
       }
     }
 
       }
     }
 
-    for (@LOC("X") int x = 0; x < 45; x++)
+    for (@LOC("C") int x = 0; x < 45; x++)
       // why 45, not 54?
       scalefac_buffer[x] = 0;
 
     m = 0;
       // why 45, not 54?
       scalefac_buffer[x] = 0;
 
     m = 0;
-    for (@LOC("I") int i = 0; i < 4; i++) {
-      for (@LOC("THIS,LayerIIIDecoder.GLSFD5") int j = 0; j < nr_of_sfb_block[blocknumber][blocktypenumber][i]; j++) {
+    for (@LOC("C") int i = 0; i < 4; i++) {
+      for (@LOC("THIS,LayerIIIDecoder.SFB_SH") int j = 0; j < nr_of_sfb_block[blocknumber][blocktypenumber][i]; j++) {
         scalefac_buffer[m] = (new_slen[i] == 0) ? 0 : br.hgetbits(new_slen[i]);
         m++;
 
         scalefac_buffer[m] = (new_slen[i] == 0) ? 0 : br.hgetbits(new_slen[i]);
         m++;
 
@@ -795,15 +803,16 @@ final class LayerIIIDecoder implements FrameDecoder {
   @LATTICE("THIS<IN,THISLOC=THIS,GLOBALLOC=IN")
   private void get_LSF_scale_factors(@LOC("THIS,LayerIIIDecoder.SF0") int ch,
       @LOC("THIS,LayerIIIDecoder.SF0") int gr) {
   @LATTICE("THIS<IN,THISLOC=THIS,GLOBALLOC=IN")
   private void get_LSF_scale_factors(@LOC("THIS,LayerIIIDecoder.SF0") int ch,
       @LOC("THIS,LayerIIIDecoder.SF0") int gr) {
-    @LOC("THIS,LayerIIIDecoder.GLSFF4") int m = 0;
-    @LOC("THIS,LayerIIIDecoder.GLSFF2") int sfb;
-    @LOC("THIS,LayerIIIDecoder.GLSFF3") int window;
-    @LOC("THIS,LayerIIIDecoder.GLSFF1") gr_info_s gr_info = (si.ch[ch].gr[gr]);
+
+    @LOC("THIS,LayerIIIDecoder.SFB_SH") int sfb;
+    @LOC("THIS,LayerIIIDecoder.SFB_SH") int m = 0;
+    @LOC("THIS,LayerIIIDecoder.SFB_SH") int window;
+    // gr_info_s gr_info = (si.ch[ch].gr[gr]); // remove alias
 
     get_LSF_scale_data(ch, gr);
 
 
     get_LSF_scale_data(ch, gr);
 
-    if ((gr_info.window_switching_flag != 0) && (gr_info.block_type == 2)) {
-      if (gr_info.mixed_block_flag != 0) { // MIXED
+    if ((si.ch[ch].gr[gr].window_switching_flag != 0) && (si.ch[ch].gr[gr].block_type == 2)) {
+      if (si.ch[ch].gr[gr].mixed_block_flag != 0) { // MIXED
         for (sfb = 0; sfb < 8; sfb++) {
           scalefac[ch].l[sfb] = scalefac_buffer[m];
           m++;
         for (sfb = 0; sfb < 8; sfb++) {
           scalefac[ch].l[sfb] = scalefac_buffer[m];
           m++;
@@ -843,35 +852,38 @@ final class LayerIIIDecoder implements FrameDecoder {
   /**
         *
         */
   /**
         *
         */
-  @LOC("LY")
-  int[] x = { 0 };
-  @LOC("F")
-  int[] y = { 0 };
-  @LOC("LY")
-  int[] v = { 0 };
-  @LOC("LY")
-  int[] w = { 0 };
-
-  @LATTICE("H<I,I<R,R<B1,B1<B,B<THIS,THIS<IN,I*,THISLOC=THIS,GLOBALLOC=IN")
+  // @LOC("LY")
+  // int[] x = { 0 };
+  // @LOC("F")
+  // int[] y = { 0 };
+  // @LOC("LY")
+  // int[] v = { 0 };
+  // @LOC("LY")
+  // int[] w = { 0 };
+
+  // @LATTICE("H<I,I<R,R<B1,B1<B,B<THIS,THIS<IN,I*,THISLOC=THIS,GLOBALLOC=IN")
+  @LATTICE("BUF<THIS,BUF*,R,B,B1,H,I,THIS<IN,I*,THISLOC=THIS")
   private void huffman_decode(@LOC("THIS,LayerIIIDecoder.HD1") int ch,
       @LOC("THIS,LayerIIIDecoder.HD1") int gr) {
 
   private void huffman_decode(@LOC("THIS,LayerIIIDecoder.HD1") int ch,
       @LOC("THIS,LayerIIIDecoder.HD1") int gr) {
 
-    x[0] = 0;
-    y[0] = 0;
-    v[0] = 0;
-    w[0] = 0;
+    // x[0] = 0;
+    // y[0] = 0;
+    // v[0] = 0;
+    // w[0] = 0;
+    @LOC("I") int x;
+    @LOC("I") int y;
+    @LOC("I") int v;
+    @LOC("I") int w;
+
+    @LOC("THIS,LayerIIIDecoder.NS") int part2_3_end = part2_start + si.ch[ch].gr[gr].part2_3_length;
 
 
-    @LOC("THIS,LayerIIIDecoder.HD1") int part2_3_end =
-        part2_start + si.ch[ch].gr[gr].part2_3_length;
     @LOC("THIS,LayerIIIDecoder.HD2") int num_bits;
     @LOC("THIS,LayerIIIDecoder.HD2") int num_bits;
-    @LOC("R") int region1Start;
-    @LOC("R") int region2Start;
+    @LOC("THIS,LayerIIIDecoder.SI1") int region1Start;
+    @LOC("THIS,LayerIIIDecoder.SI1") int region2Start;
     @LOC("THIS,LayerIIIDecoder.HD3") int index;
 
     @LOC("THIS,LayerIIIDecoder.HD3") int index;
 
-    @LOC("B") int buf;
-    @LOC("B1") int buf1;
-
-    @LOC("H") huffcodetab h;
+    @LOC("THIS,LayerIIIDecoder.SI1") int buf;
+    @LOC("THIS,LayerIIIDecoder.SI1") int buf1;
 
     // Find region boundary for short block case
 
 
     // Find region boundary for short block case
 
@@ -888,47 +900,67 @@ final class LayerIIIDecoder implements FrameDecoder {
       buf = si.ch[ch].gr[gr].region0_count + 1;
       buf1 = buf + si.ch[ch].gr[gr].region1_count + 1;
 
       buf = si.ch[ch].gr[gr].region0_count + 1;
       buf1 = buf + si.ch[ch].gr[gr].region1_count + 1;
 
-      if (buf1 > sfBandIndex[sfreq].l.length - 1)
+      if (buf1 > sfBandIndex[sfreq].l.length - 1) {
         buf1 = sfBandIndex[sfreq].l.length - 1;
         buf1 = sfBandIndex[sfreq].l.length - 1;
+      }
 
       region1Start = sfBandIndex[sfreq].l[buf];
       region2Start = sfBandIndex[sfreq].l[buf1]; /* MI */
     }
 
     index = 0;
 
       region1Start = sfBandIndex[sfreq].l[buf];
       region2Start = sfBandIndex[sfreq].l[buf1]; /* MI */
     }
 
     index = 0;
+    @LOC("I") int h;
     // Read bigvalues area
     for (@LOC("I") int i = 0; i < (si.ch[ch].gr[gr].big_values << 1); i += 2) {
     // Read bigvalues area
     for (@LOC("I") int i = 0; i < (si.ch[ch].gr[gr].big_values << 1); i += 2) {
-      if (i < region1Start)
-        h = huffcodetab.ht[si.ch[ch].gr[gr].table_select[0]];
-      else if (i < region2Start)
-        h = huffcodetab.ht[si.ch[ch].gr[gr].table_select[1]];
-      else
-        h = huffcodetab.ht[si.ch[ch].gr[gr].table_select[2]];
+      if (i < region1Start) {
+        // huffcodetab.huffman_decoder(h, x, y, v, w, br);
+        h = si.ch[ch].gr[gr].table_select[0];
+      } else if (i < region2Start) {
+        h = si.ch[ch].gr[gr].table_select[1];
+        // h = huffcodetab.ht[si.ch[ch].gr[gr].table_select[1]];
+      } else {
+        h = si.ch[ch].gr[gr].table_select[2];
+        // h = huffcodetab.ht[si.ch[ch].gr[gr].table_select[2]];
+      }
+
+      @LOC("I") HuffData huffData = huffcodetab.huffman_decoder(h, new HuffData(x, y, v, w, br));
+      x = huffData.x;
+      y = huffData.y;
+      v = huffData.v;
+      w = huffData.w;
+      br = huffData.br;
 
 
-      huffcodetab.huffman_decoder(h, x, y, v, w, br);
       // if (index >= is_1d.length)
       // System.out.println("i0="+i+"/"+(si.ch[ch].gr[gr].big_values<<1)+" Index="+index+" is_1d="+is_1d.length);
 
       // if (index >= is_1d.length)
       // System.out.println("i0="+i+"/"+(si.ch[ch].gr[gr].big_values<<1)+" Index="+index+" is_1d="+is_1d.length);
 
-      is_1d[index++] = x[0];
-      is_1d[index++] = y[0];
+      is_1d[index++] = x;
+      is_1d[index++] = y;
 
 
-      CheckSumHuff = CheckSumHuff + x[0] + y[0];
+      CheckSumHuff = CheckSumHuff + x + y;
       // System.out.println("x = "+x[0]+" y = "+y[0]);
     }
 
     // Read count1 area
       // System.out.println("x = "+x[0]+" y = "+y[0]);
     }
 
     // Read count1 area
-    h = huffcodetab.ht[si.ch[ch].gr[gr].count1table_select + 32];
+    // h = huffcodetab.ht[si.ch[ch].gr[gr].count1table_select + 32];
     num_bits = br.hsstell();
 
     while ((num_bits < part2_3_end) && (index < 576)) {
 
     num_bits = br.hsstell();
 
     while ((num_bits < part2_3_end) && (index < 576)) {
 
-      huffcodetab.huffman_decoder(h, x, y, v, w, br);
-
-      is_1d[index++] = v[0];
-      is_1d[index++] = w[0];
-      is_1d[index++] = x[0];
-      is_1d[index++] = y[0];
-      CheckSumHuff = CheckSumHuff + v[0] + w[0] + x[0] + y[0];
+      // huffcodetab.huffman_decoder(h, x, y, v, w, br);
+      @LOC("I") HuffData huffData2 =
+          huffcodetab.huffman_decoder(si.ch[ch].gr[gr].count1table_select + 32, new HuffData(x, y,
+              v, w, br));
+      x = huffData2.x;
+      y = huffData2.y;
+      v = huffData2.v;
+      w = huffData2.w;
+      br = huffData2.br;
+
+      is_1d[index++] = v;
+      is_1d[index++] = w;
+      is_1d[index++] = x;
+      is_1d[index++] = y;
+      CheckSumHuff = CheckSumHuff + v + w + x + y;
       // System.out.println("v = "+v[0]+" w = "+w[0]);
       // System.out.println("x = "+x[0]+" y = "+y[0]);
       num_bits = br.hsstell();
       // System.out.println("v = "+v[0]+" w = "+w[0]);
       // System.out.println("x = "+x[0]+" y = "+y[0]);
       num_bits = br.hsstell();
@@ -2094,35 +2126,35 @@ final class LayerIIIDecoder implements FrameDecoder {
     }
   }
 
     }
   }
 
-  @LATTICE("N<VAR")
+  @LATTICE("V,V*")
   static class gr_info_s {
   static class gr_info_s {
-    @LOC("VAR")
+    @LOC("V")
     public int part2_3_length = 0;
     public int part2_3_length = 0;
-    @LOC("VAR")
+    @LOC("V")
     public int big_values = 0;
     public int big_values = 0;
-    @LOC("VAR")
+    @LOC("V")
     public int global_gain = 0;
     public int global_gain = 0;
-    @LOC("VAR")
+    @LOC("V")
     public int scalefac_compress = 0;
     public int scalefac_compress = 0;
-    @LOC("VAR")
+    @LOC("V")
     public int window_switching_flag = 0;
     public int window_switching_flag = 0;
-    @LOC("VAR")
+    @LOC("V")
     public int block_type = 0;
     public int block_type = 0;
-    @LOC("VAR")
+    @LOC("V")
     public int mixed_block_flag = 0;
     public int mixed_block_flag = 0;
-    @LOC("VAR")
+    @LOC("V")
     public int[] table_select;
     public int[] table_select;
-    @LOC("VAR")
+    @LOC("V")
     public int[] subblock_gain;
     public int[] subblock_gain;
-    @LOC("VAR")
+    @LOC("V")
     public int region0_count = 0;
     public int region0_count = 0;
-    @LOC("VAR")
+    @LOC("V")
     public int region1_count = 0;
     public int region1_count = 0;
-    @LOC("VAR")
+    @LOC("V")
     public int preflag = 0;
     public int preflag = 0;
-    @LOC("VAR")
+    @LOC("V")
     public int scalefac_scale = 0;
     public int scalefac_scale = 0;
-    @LOC("VAR")
+    @LOC("V")
     public int count1table_select = 0;
 
     /**
     public int count1table_select = 0;
 
     /**
@@ -2200,18 +2232,15 @@ final class LayerIIIDecoder implements FrameDecoder {
   // }
   // }
 
   // }
   // }
 
-  @LOC("F")
   private static final int slen[][] = { { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 },
       { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 } };
 
   private static final int slen[][] = { { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 },
       { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 } };
 
-  @LOC("F")
   public static final int pretab[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3,
       2, 0 };
 
   @LOC("SBI")
   private SBI[] sfBandIndex; // Init in the constructor.
 
   public static final int pretab[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3,
       2, 0 };
 
   @LOC("SBI")
   private SBI[] sfBandIndex; // Init in the constructor.
 
-  @LOC("F")
   public static final float two_to_negative_half_pow[] = { 1.0000000000E+00f, 7.0710678119E-01f,
       5.0000000000E-01f, 3.5355339059E-01f, 2.5000000000E-01f, 1.7677669530E-01f,
       1.2500000000E-01f, 8.8388347648E-02f, 6.2500000000E-02f, 4.4194173824E-02f,
   public static final float two_to_negative_half_pow[] = { 1.0000000000E+00f, 7.0710678119E-01f,
       5.0000000000E-01f, 3.5355339059E-01f, 2.5000000000E-01f, 1.7677669530E-01f,
       1.2500000000E-01f, 8.8388347648E-02f, 6.2500000000E-02f, 4.4194173824E-02f,
@@ -2243,7 +2272,6 @@ final class LayerIIIDecoder implements FrameDecoder {
     return t43;
   }
 
     return t43;
   }
 
-  @LOC("F")
   public static final float io[][] = {
       { 1.0000000000E+00f, 8.4089641526E-01f, 7.0710678119E-01f, 5.9460355751E-01f,
           5.0000000001E-01f, 4.2044820763E-01f, 3.5355339060E-01f, 2.9730177876E-01f,
   public static final float io[][] = {
       { 1.0000000000E+00f, 8.4089641526E-01f, 7.0710678119E-01f, 5.9460355751E-01f,
           5.0000000001E-01f, 4.2044820763E-01f, 3.5355339060E-01f, 2.9730177876E-01f,
@@ -2262,7 +2290,6 @@ final class LayerIIIDecoder implements FrameDecoder {
           2.4414062501E-04f, 1.7263349151E-04f, 1.2207031251E-04f, 8.6316745755E-05f,
           6.1035156254E-05f, 4.3158372878E-05f, 3.0517578127E-05f, 2.1579186439E-05f } };
 
           2.4414062501E-04f, 1.7263349151E-04f, 1.2207031251E-04f, 8.6316745755E-05f,
           6.1035156254E-05f, 4.3158372878E-05f, 3.0517578127E-05f, 2.1579186439E-05f } };
 
-  @LOC("F")
   public static final float TAN12[] = { 0.0f, 0.26794919f, 0.57735027f, 1.0f, 1.73205081f,
       3.73205081f, 9.9999999e10f, -3.73205081f, -1.73205081f, -1.0f, -0.57735027f, -0.26794919f,
       0.0f, 0.26794919f, 0.57735027f, 1.0f };
   public static final float TAN12[] = { 0.0f, 0.26794919f, 0.57735027f, 1.0f, 1.73205081f,
       3.73205081f, 9.9999999e10f, -3.73205081f, -1.73205081f, -1.0f, -0.57735027f, -0.26794919f,
       0.0f, 0.26794919f, 0.57735027f, 1.0f };
@@ -2600,7 +2627,6 @@ final class LayerIIIDecoder implements FrameDecoder {
   /***************************************************************/
   /* INV_MDCT */
   /***************************************************************/
   /***************************************************************/
   /* INV_MDCT */
   /***************************************************************/
-  @LOC("F")
   public static final float win[][] = {
       { -1.6141214951E-02f, -5.3603178919E-02f, -1.0070713296E-01f, -1.6280817573E-01f,
           -4.9999999679E-01f, -3.8388735032E-01f, -6.2061144372E-01f, -1.1659756083E+00f,
   public static final float win[][] = {
       { -1.6141214951E-02f, -5.3603178919E-02f, -1.0070713296E-01f, -1.6280817573E-01f,
           -4.9999999679E-01f, -3.8388735032E-01f, -6.2061144372E-01f, -1.1659756083E+00f,
@@ -2667,7 +2693,6 @@ final class LayerIIIDecoder implements FrameDecoder {
   @LOC("F")
   public Sftable sftable;
 
   @LOC("F")
   public Sftable sftable;
 
-  @LOC("NS")
   public static final int nr_of_sfb_block[][][] = {
       { { 6, 5, 5, 5 }, { 9, 9, 9, 9 }, { 6, 9, 9, 9 } },
       { { 6, 5, 7, 3 }, { 9, 9, 12, 6 }, { 6, 9, 12, 6 } },
   public static final int nr_of_sfb_block[][][] = {
       { { 6, 5, 5, 5 }, { 9, 9, 9, 9 }, { 6, 9, 9, 9 } },
       { { 6, 5, 7, 3 }, { 9, 9, 12, 6 }, { 6, 9, 12, 6 } },
index 1769d0f31311f662af48cdf4564a0bdc7b7980f8..4600c915675e374094fa5dbe2dfb799ce5c82b34 100644 (file)
  *----------------------------------------------------------------------\r
  */\r
 \r
  *----------------------------------------------------------------------\r
  */\r
 \r
-\r
 /**\r
  * Class to implements Huffman decoder.\r
  */\r
 @LATTICE("FIELD<FINAL")\r
 @METHODDEFAULT("OUT<V,V<SH,SH<IN,SH*,THISLOC=IN,GLOBALLOC=IN")\r
 /**\r
  * Class to implements Huffman decoder.\r
  */\r
 @LATTICE("FIELD<FINAL")\r
 @METHODDEFAULT("OUT<V,V<SH,SH<IN,SH*,THISLOC=IN,GLOBALLOC=IN")\r
-final class huffcodetab\r
-{\r
-  private static final int      MXOFF=250;\r
-  private static final int      HTN=34;\r
-  \r
-  @LOC("FIELD") private char                            tablename0 = ' ';      /* string, containing table_description   */\r
-  @LOC("FIELD") private char                            tablename1 = ' ';      /* string, containing table_description   */\r
-  @LOC("FIELD") private char                            tablename2 = ' ';      /* string, containing table_description   */\r
-  \r
-  @LOC("FIELD") private int                             xlen;                          /* max. x-index+                          */\r
-  @LOC("FIELD") private int                             ylen;                  /* max. y-index+                                          */\r
-  @LOC("FIELD") private int                             linbits;                       /* number of linbits                      */\r
-  @LOC("FIELD") private int                             linmax;                        /* max number to be stored in linbits     */\r
-  @LOC("FIELD") private int                             ref;                           /* a positive value indicates a reference */\r
-  @LOC("FIELD") private int[]                           table=null;            /* pointer to array[xlen][ylen]               */\r
-  @LOC("FIELD") private int[]                           hlen=null;             /* pointer to array[xlen][ylen]               */\r
-  @LOC("FIELD") private int[][]                         val=null;                      /* decoder tree                               */\r
-  @LOC("FIELD") private int                             treelen;                   /* length of decoder tree                 */\r
-\r
-  @LOC("FINAL") private static int ValTab0[][] = {\r
-       {0,0}   // dummy\r
-       };\r
-\r
-  @LOC("FINAL") private static int ValTab1[][] = {\r
-       {2,1},{0,0},{2,1},{0,16},{2,1},{0,1},{0,17},\r
-       };\r
-       \r
-  @LOC("FINAL") private static int ValTab2[][] = {\r
-       {2,1},{0,0},{4,1},{2,1},{0,16},{0,1},{2,1},{0,17},{4,1},{2,1},\r
-       {0,32},{0,33},{2,1},{0,18},{2,1},{0,2},{0,34},\r
-       };\r
-       \r
-  @LOC("FINAL") private static int ValTab3[][] = {\r
-       {4,1},{2,1},{0,0},{0,1},{2,1},{0,17},{2,1},{0,16},{4,1},{2,1},\r
-       {0,32},{0,33},{2,1},{0,18},{2,1},{0,2},{0,34},\r
-       };\r
-\r
-  @LOC("FINAL") private static int ValTab4[][] = {{0,0}};      // dummy\r
-\r
-  @LOC("FINAL") private static int ValTab5[][] = {\r
-       {2,1},{0,0},{4,1},{2,1},{0,16},{0,1},{2,1},{0,17},{8,1},{4,1},\r
-       {2,1},{0,32},{0,2},{2,1},{0,33},{0,18},{8,1},{4,1},{2,1},{0,34},\r
-       {0,48},{2,1},{0,3},{0,19},{2,1},{0,49},{2,1},{0,50},{2,1},{0,35},\r
-       {0,51},\r
-       };\r
-\r
-  @LOC("FINAL") private static int ValTab6[][] = {\r
-       {6,1},{4,1},{2,1},{0,0},{0,16},{0,17},{6,1},{2,1},{0,1},{2,1},\r
-       {0,32},{0,33},{6,1},{2,1},{0,18},{2,1},{0,2},{0,34},{4,1},{2,1},\r
-       {0,49},{0,19},{4,1},{2,1},{0,48},{0,50},{2,1},{0,35},{2,1},{0,3},\r
-       {0,51},\r
-       };\r
-       \r
-  @LOC("FINAL") private static int ValTab7[][] = {\r
-       {2,1},{0,0},{4,1},{2,1},{0,16},{0,1},{8,1},{2,1},{0,17},{4,1},\r
-       {2,1},{0,32},{0,2},{0,33},{18,1},{6,1},{2,1},{0,18},{2,1},{0,34},\r
-       {0,48},{4,1},{2,1},{0,49},{0,19},{4,1},{2,1},{0,3},{0,50},{2,1},\r
-       {0,35},{0,4},{10,1},{4,1},{2,1},{0,64},{0,65},{2,1},{0,20},{2,1},\r
-       {0,66},{0,36},{12,1},{6,1},{4,1},{2,1},{0,51},{0,67},{0,80},{4,1},\r
-       {2,1},{0,52},{0,5},{0,81},{6,1},{2,1},{0,21},{2,1},{0,82},{0,37},\r
-       {4,1},{2,1},{0,68},{0,53},{4,1},{2,1},{0,83},{0,84},{2,1},{0,69},\r
-       {0,85},\r
-       };\r
-       \r
-  @LOC("FINAL") private static int ValTab8[][] = {\r
-       {6,1},{2,1},{0,0},{2,1},{0,16},{0,1},{2,1},{0,17},{4,1},{2,1},\r
-       {0,33},{0,18},{14,1},{4,1},{2,1},{0,32},{0,2},{2,1},{0,34},{4,1},\r
-       {2,1},{0,48},{0,3},{2,1},{0,49},{0,19},{14,1},{8,1},{4,1},{2,1},\r
-       {0,50},{0,35},{2,1},{0,64},{0,4},{2,1},{0,65},{2,1},{0,20},{0,66},\r
-       {12,1},{6,1},{2,1},{0,36},{2,1},{0,51},{0,80},{4,1},{2,1},{0,67},\r
-       {0,52},{0,81},{6,1},{2,1},{0,21},{2,1},{0,5},{0,82},{6,1},{2,1},\r
-       {0,37},{2,1},{0,68},{0,53},{2,1},{0,83},{2,1},{0,69},{2,1},{0,84},\r
-       {0,85},\r
-       };\r
-       \r
-  @LOC("FINAL") private static int ValTab9[][] = {\r
-       {8,1},{4,1},{2,1},{0,0},{0,16},{2,1},{0,1},{0,17},{10,1},{4,1},\r
-       {2,1},{0,32},{0,33},{2,1},{0,18},{2,1},{0,2},{0,34},{12,1},{6,1},\r
-       {4,1},{2,1},{0,48},{0,3},{0,49},{2,1},{0,19},{2,1},{0,50},{0,35},\r
-       {12,1},{4,1},{2,1},{0,65},{0,20},{4,1},{2,1},{0,64},{0,51},{2,1},\r
-       {0,66},{0,36},{10,1},{6,1},{4,1},{2,1},{0,4},{0,80},{0,67},{2,1},\r
-       {0,52},{0,81},{8,1},{4,1},{2,1},{0,21},{0,82},{2,1},{0,37},{0,68},\r
-       {6,1},{4,1},{2,1},{0,5},{0,84},{0,83},{2,1},{0,53},{2,1},{0,69},\r
-       {0,85},\r
-       };\r
-       \r
-  @LOC("FINAL") private static int ValTab10[][] = {\r
-       {2,1},{0,0},{4,1},{2,1},{0,16},{0,1},{10,1},{2,1},{0,17},{4,1},\r
-       {2,1},{0,32},{0,2},{2,1},{0,33},{0,18},{28,1},{8,1},{4,1},{2,1},\r
-       {0,34},{0,48},{2,1},{0,49},{0,19},{8,1},{4,1},{2,1},{0,3},{0,50},\r
-       {2,1},{0,35},{0,64},{4,1},{2,1},{0,65},{0,20},{4,1},{2,1},{0,4},\r
-       {0,51},{2,1},{0,66},{0,36},{28,1},{10,1},{6,1},{4,1},{2,1},{0,80},\r
-       {0,5},{0,96},{2,1},{0,97},{0,22},{12,1},{6,1},{4,1},{2,1},{0,67},\r
-       {0,52},{0,81},{2,1},{0,21},{2,1},{0,82},{0,37},{4,1},{2,1},{0,38},\r
-       {0,54},{0,113},{20,1},{8,1},{2,1},{0,23},{4,1},{2,1},{0,68},{0,83},\r
-       {0,6},{6,1},{4,1},{2,1},{0,53},{0,69},{0,98},{2,1},{0,112},{2,1},\r
-       {0,7},{0,100},{14,1},{4,1},{2,1},{0,114},{0,39},{6,1},{2,1},{0,99},\r
-       {2,1},{0,84},{0,85},{2,1},{0,70},{0,115},{8,1},{4,1},{2,1},{0,55},\r
-       {0,101},{2,1},{0,86},{0,116},{6,1},{2,1},{0,71},{2,1},{0,102},{0,117},\r
-       {4,1},{2,1},{0,87},{0,118},{2,1},{0,103},{0,119},\r
-       };\r
-\r
-  @LOC("FINAL") private static int ValTab11[][] = {\r
-       {6,1},{2,1},{0,0},{2,1},{0,16},{0,1},{8,1},{2,1},{0,17},{4,1},\r
-       {2,1},{0,32},{0,2},{0,18},{24,1},{8,1},{2,1},{0,33},{2,1},{0,34},\r
-       {2,1},{0,48},{0,3},{4,1},{2,1},{0,49},{0,19},{4,1},{2,1},{0,50},\r
-       {0,35},{4,1},{2,1},{0,64},{0,4},{2,1},{0,65},{0,20},{30,1},{16,1},\r
-       {10,1},{4,1},{2,1},{0,66},{0,36},{4,1},{2,1},{0,51},{0,67},{0,80},\r
-       {4,1},{2,1},{0,52},{0,81},{0,97},{6,1},{2,1},{0,22},{2,1},{0,6},\r
-       {0,38},{2,1},{0,98},{2,1},{0,21},{2,1},{0,5},{0,82},{16,1},{10,1},\r
-       {6,1},{4,1},{2,1},{0,37},{0,68},{0,96},{2,1},{0,99},{0,54},{4,1},\r
-       {2,1},{0,112},{0,23},{0,113},{16,1},{6,1},{4,1},{2,1},{0,7},{0,100},\r
-       {0,114},{2,1},{0,39},{4,1},{2,1},{0,83},{0,53},{2,1},{0,84},{0,69},\r
-       {10,1},{4,1},{2,1},{0,70},{0,115},{2,1},{0,55},{2,1},{0,101},{0,86},\r
-       {10,1},{6,1},{4,1},{2,1},{0,85},{0,87},{0,116},{2,1},{0,71},{0,102},\r
-       {4,1},{2,1},{0,117},{0,118},{2,1},{0,103},{0,119},\r
-       };\r
-\r
-  @LOC("FINAL") private static int ValTab12[][] = {\r
-       {12,1},{4,1},{2,1},{0,16},{0,1},{2,1},{0,17},{2,1},{0,0},{2,1},\r
-       {0,32},{0,2},{16,1},{4,1},{2,1},{0,33},{0,18},{4,1},{2,1},{0,34},\r
-       {0,49},{2,1},{0,19},{2,1},{0,48},{2,1},{0,3},{0,64},{26,1},{8,1},\r
-       {4,1},{2,1},{0,50},{0,35},{2,1},{0,65},{0,51},{10,1},{4,1},{2,1},\r
-       {0,20},{0,66},{2,1},{0,36},{2,1},{0,4},{0,80},{4,1},{2,1},{0,67},\r
-       {0,52},{2,1},{0,81},{0,21},{28,1},{14,1},{8,1},{4,1},{2,1},{0,82},\r
-       {0,37},{2,1},{0,83},{0,53},{4,1},{2,1},{0,96},{0,22},{0,97},{4,1},\r
-       {2,1},{0,98},{0,38},{6,1},{4,1},{2,1},{0,5},{0,6},{0,68},{2,1},\r
-       {0,84},{0,69},{18,1},{10,1},{4,1},{2,1},{0,99},{0,54},{4,1},{2,1},\r
-       {0,112},{0,7},{0,113},{4,1},{2,1},{0,23},{0,100},{2,1},{0,70},{0,114},\r
-       {10,1},{6,1},{2,1},{0,39},{2,1},{0,85},{0,115},{2,1},{0,55},{0,86},\r
-       {8,1},{4,1},{2,1},{0,101},{0,116},{2,1},{0,71},{0,102},{4,1},{2,1},\r
-       {0,117},{0,87},{2,1},{0,118},{2,1},{0,103},{0,119},\r
-       };\r
-\r
-  @LOC("FINAL") private static int ValTab13[][] = {\r
-       {2,1},{0,0},{6,1},{2,1},{0,16},{2,1},{0,1},{0,17},{28,1},{8,1},\r
-       {4,1},{2,1},{0,32},{0,2},{2,1},{0,33},{0,18},{8,1},{4,1},{2,1},\r
-       {0,34},{0,48},{2,1},{0,3},{0,49},{6,1},{2,1},{0,19},{2,1},{0,50},\r
-       {0,35},{4,1},{2,1},{0,64},{0,4},{0,65},{70,1},{28,1},{14,1},{6,1},\r
-       {2,1},{0,20},{2,1},{0,51},{0,66},{4,1},{2,1},{0,36},{0,80},{2,1},\r
-       {0,67},{0,52},{4,1},{2,1},{0,81},{0,21},{4,1},{2,1},{0,5},{0,82},\r
-       {2,1},{0,37},{2,1},{0,68},{0,83},{14,1},{8,1},{4,1},{2,1},{0,96},\r
-       {0,6},{2,1},{0,97},{0,22},{4,1},{2,1},{0,128},{0,8},{0,129},{16,1},\r
-       {8,1},{4,1},{2,1},{0,53},{0,98},{2,1},{0,38},{0,84},{4,1},{2,1},\r
-       {0,69},{0,99},{2,1},{0,54},{0,112},{6,1},{4,1},{2,1},{0,7},{0,85},\r
-       {0,113},{2,1},{0,23},{2,1},{0,39},{0,55},{72,1},{24,1},{12,1},{4,1},\r
-       {2,1},{0,24},{0,130},{2,1},{0,40},{4,1},{2,1},{0,100},{0,70},{0,114},\r
-       {8,1},{4,1},{2,1},{0,132},{0,72},{2,1},{0,144},{0,9},{2,1},{0,145},\r
-       {0,25},{24,1},{14,1},{8,1},{4,1},{2,1},{0,115},{0,101},{2,1},{0,86},\r
-       {0,116},{4,1},{2,1},{0,71},{0,102},{0,131},{6,1},{2,1},{0,56},{2,1},\r
-       {0,117},{0,87},{2,1},{0,146},{0,41},{14,1},{8,1},{4,1},{2,1},{0,103},\r
-       {0,133},{2,1},{0,88},{0,57},{2,1},{0,147},{2,1},{0,73},{0,134},{6,1},\r
-       {2,1},{0,160},{2,1},{0,104},{0,10},{2,1},{0,161},{0,26},{68,1},{24,1},\r
-       {12,1},{4,1},{2,1},{0,162},{0,42},{4,1},{2,1},{0,149},{0,89},{2,1},\r
-       {0,163},{0,58},{8,1},{4,1},{2,1},{0,74},{0,150},{2,1},{0,176},{0,11},\r
-       {2,1},{0,177},{0,27},{20,1},{8,1},{2,1},{0,178},{4,1},{2,1},{0,118},\r
-       {0,119},{0,148},{6,1},{4,1},{2,1},{0,135},{0,120},{0,164},{4,1},{2,1},\r
-       {0,105},{0,165},{0,43},{12,1},{6,1},{4,1},{2,1},{0,90},{0,136},{0,179},\r
-       {2,1},{0,59},{2,1},{0,121},{0,166},{6,1},{4,1},{2,1},{0,106},{0,180},\r
-       {0,192},{4,1},{2,1},{0,12},{0,152},{0,193},{60,1},{22,1},{10,1},{6,1},\r
-       {2,1},{0,28},{2,1},{0,137},{0,181},{2,1},{0,91},{0,194},{4,1},{2,1},\r
-       {0,44},{0,60},{4,1},{2,1},{0,182},{0,107},{2,1},{0,196},{0,76},{16,1},\r
-       {8,1},{4,1},{2,1},{0,168},{0,138},{2,1},{0,208},{0,13},{2,1},{0,209},\r
-       {2,1},{0,75},{2,1},{0,151},{0,167},{12,1},{6,1},{2,1},{0,195},{2,1},\r
-       {0,122},{0,153},{4,1},{2,1},{0,197},{0,92},{0,183},{4,1},{2,1},{0,29},\r
-       {0,210},{2,1},{0,45},{2,1},{0,123},{0,211},{52,1},{28,1},{12,1},{4,1},\r
-       {2,1},{0,61},{0,198},{4,1},{2,1},{0,108},{0,169},{2,1},{0,154},{0,212},\r
-       {8,1},{4,1},{2,1},{0,184},{0,139},{2,1},{0,77},{0,199},{4,1},{2,1},\r
-       {0,124},{0,213},{2,1},{0,93},{0,224},{10,1},{4,1},{2,1},{0,225},{0,30},\r
-       {4,1},{2,1},{0,14},{0,46},{0,226},{8,1},{4,1},{2,1},{0,227},{0,109},\r
-       {2,1},{0,140},{0,228},{4,1},{2,1},{0,229},{0,186},{0,240},{38,1},{16,1},\r
-       {4,1},{2,1},{0,241},{0,31},{6,1},{4,1},{2,1},{0,170},{0,155},{0,185},\r
-       {2,1},{0,62},{2,1},{0,214},{0,200},{12,1},{6,1},{2,1},{0,78},{2,1},\r
-       {0,215},{0,125},{2,1},{0,171},{2,1},{0,94},{0,201},{6,1},{2,1},{0,15},\r
-       {2,1},{0,156},{0,110},{2,1},{0,242},{0,47},{32,1},{16,1},{6,1},{4,1},\r
-       {2,1},{0,216},{0,141},{0,63},{6,1},{2,1},{0,243},{2,1},{0,230},{0,202},\r
-       {2,1},{0,244},{0,79},{8,1},{4,1},{2,1},{0,187},{0,172},{2,1},{0,231},\r
-       {0,245},{4,1},{2,1},{0,217},{0,157},{2,1},{0,95},{0,232},{30,1},{12,1},\r
-       {6,1},{2,1},{0,111},{2,1},{0,246},{0,203},{4,1},{2,1},{0,188},{0,173},\r
-       {0,218},{8,1},{2,1},{0,247},{4,1},{2,1},{0,126},{0,127},{0,142},{6,1},\r
-       {4,1},{2,1},{0,158},{0,174},{0,204},{2,1},{0,248},{0,143},{18,1},{8,1},\r
-       {4,1},{2,1},{0,219},{0,189},{2,1},{0,234},{0,249},{4,1},{2,1},{0,159},\r
-       {0,235},{2,1},{0,190},{2,1},{0,205},{0,250},{14,1},{4,1},{2,1},{0,221},\r
-       {0,236},{6,1},{4,1},{2,1},{0,233},{0,175},{0,220},{2,1},{0,206},{0,251},\r
-       {8,1},{4,1},{2,1},{0,191},{0,222},{2,1},{0,207},{0,238},{4,1},{2,1},\r
-       {0,223},{0,239},{2,1},{0,255},{2,1},{0,237},{2,1},{0,253},{2,1},{0,252},\r
-       {0,254},\r
-       };\r
-\r
-  @LOC("FINAL") private static int ValTab14[][] = {\r
-       {0,0}  // dummy\r
-       };\r
-\r
-  @LOC("FINAL") private static int ValTab15[][] = {\r
-       {16,1},{6,1},{2,1},{0,0},{2,1},{0,16},{0,1},{2,1},{0,17},{4,1},\r
-       {2,1},{0,32},{0,2},{2,1},{0,33},{0,18},{50,1},{16,1},{6,1},{2,1},\r
-       {0,34},{2,1},{0,48},{0,49},{6,1},{2,1},{0,19},{2,1},{0,3},{0,64},\r
-       {2,1},{0,50},{0,35},{14,1},{6,1},{4,1},{2,1},{0,4},{0,20},{0,65},\r
-       {4,1},{2,1},{0,51},{0,66},{2,1},{0,36},{0,67},{10,1},{6,1},{2,1},\r
-       {0,52},{2,1},{0,80},{0,5},{2,1},{0,81},{0,21},{4,1},{2,1},{0,82},\r
-       {0,37},{4,1},{2,1},{0,68},{0,83},{0,97},{90,1},{36,1},{18,1},{10,1},\r
-       {6,1},{2,1},{0,53},{2,1},{0,96},{0,6},{2,1},{0,22},{0,98},{4,1},\r
-       {2,1},{0,38},{0,84},{2,1},{0,69},{0,99},{10,1},{6,1},{2,1},{0,54},\r
-       {2,1},{0,112},{0,7},{2,1},{0,113},{0,85},{4,1},{2,1},{0,23},{0,100},\r
-       {2,1},{0,114},{0,39},{24,1},{16,1},{8,1},{4,1},{2,1},{0,70},{0,115},\r
-       {2,1},{0,55},{0,101},{4,1},{2,1},{0,86},{0,128},{2,1},{0,8},{0,116},\r
-       {4,1},{2,1},{0,129},{0,24},{2,1},{0,130},{0,40},{16,1},{8,1},{4,1},\r
-       {2,1},{0,71},{0,102},{2,1},{0,131},{0,56},{4,1},{2,1},{0,117},{0,87},\r
-       {2,1},{0,132},{0,72},{6,1},{4,1},{2,1},{0,144},{0,25},{0,145},{4,1},\r
-       {2,1},{0,146},{0,118},{2,1},{0,103},{0,41},{92,1},{36,1},{18,1},{10,1},\r
-       {4,1},{2,1},{0,133},{0,88},{4,1},{2,1},{0,9},{0,119},{0,147},{4,1},\r
-       {2,1},{0,57},{0,148},{2,1},{0,73},{0,134},{10,1},{6,1},{2,1},{0,104},\r
-       {2,1},{0,160},{0,10},{2,1},{0,161},{0,26},{4,1},{2,1},{0,162},{0,42},\r
-       {2,1},{0,149},{0,89},{26,1},{14,1},{6,1},{2,1},{0,163},{2,1},{0,58},\r
-       {0,135},{4,1},{2,1},{0,120},{0,164},{2,1},{0,74},{0,150},{6,1},{4,1},\r
-       {2,1},{0,105},{0,176},{0,177},{4,1},{2,1},{0,27},{0,165},{0,178},{14,1},\r
-       {8,1},{4,1},{2,1},{0,90},{0,43},{2,1},{0,136},{0,151},{2,1},{0,179},\r
-       {2,1},{0,121},{0,59},{8,1},{4,1},{2,1},{0,106},{0,180},{2,1},{0,75},\r
-       {0,193},{4,1},{2,1},{0,152},{0,137},{2,1},{0,28},{0,181},{80,1},{34,1},\r
-       {16,1},{6,1},{4,1},{2,1},{0,91},{0,44},{0,194},{6,1},{4,1},{2,1},\r
-       {0,11},{0,192},{0,166},{2,1},{0,167},{0,122},{10,1},{4,1},{2,1},{0,195},\r
-       {0,60},{4,1},{2,1},{0,12},{0,153},{0,182},{4,1},{2,1},{0,107},{0,196},\r
-       {2,1},{0,76},{0,168},{20,1},{10,1},{4,1},{2,1},{0,138},{0,197},{4,1},\r
-       {2,1},{0,208},{0,92},{0,209},{4,1},{2,1},{0,183},{0,123},{2,1},{0,29},\r
-       {2,1},{0,13},{0,45},{12,1},{4,1},{2,1},{0,210},{0,211},{4,1},{2,1},\r
-       {0,61},{0,198},{2,1},{0,108},{0,169},{6,1},{4,1},{2,1},{0,154},{0,184},\r
-       {0,212},{4,1},{2,1},{0,139},{0,77},{2,1},{0,199},{0,124},{68,1},{34,1},\r
-       {18,1},{10,1},{4,1},{2,1},{0,213},{0,93},{4,1},{2,1},{0,224},{0,14},\r
-       {0,225},{4,1},{2,1},{0,30},{0,226},{2,1},{0,170},{0,46},{8,1},{4,1},\r
-       {2,1},{0,185},{0,155},{2,1},{0,227},{0,214},{4,1},{2,1},{0,109},{0,62},\r
-       {2,1},{0,200},{0,140},{16,1},{8,1},{4,1},{2,1},{0,228},{0,78},{2,1},\r
-       {0,215},{0,125},{4,1},{2,1},{0,229},{0,186},{2,1},{0,171},{0,94},{8,1},\r
-       {4,1},{2,1},{0,201},{0,156},{2,1},{0,241},{0,31},{6,1},{4,1},{2,1},\r
-       {0,240},{0,110},{0,242},{2,1},{0,47},{0,230},{38,1},{18,1},{8,1},{4,1},\r
-       {2,1},{0,216},{0,243},{2,1},{0,63},{0,244},{6,1},{2,1},{0,79},{2,1},\r
-       {0,141},{0,217},{2,1},{0,187},{0,202},{8,1},{4,1},{2,1},{0,172},{0,231},\r
-       {2,1},{0,126},{0,245},{8,1},{4,1},{2,1},{0,157},{0,95},{2,1},{0,232},\r
-       {0,142},{2,1},{0,246},{0,203},{34,1},{18,1},{10,1},{6,1},{4,1},{2,1},\r
-       {0,15},{0,174},{0,111},{2,1},{0,188},{0,218},{4,1},{2,1},{0,173},{0,247},\r
-       {2,1},{0,127},{0,233},{8,1},{4,1},{2,1},{0,158},{0,204},{2,1},{0,248},\r
-       {0,143},{4,1},{2,1},{0,219},{0,189},{2,1},{0,234},{0,249},{16,1},{8,1},\r
-       {4,1},{2,1},{0,159},{0,220},{2,1},{0,205},{0,235},{4,1},{2,1},{0,190},\r
-       {0,250},{2,1},{0,175},{0,221},{14,1},{6,1},{4,1},{2,1},{0,236},{0,206},\r
-       {0,251},{4,1},{2,1},{0,191},{0,237},{2,1},{0,222},{0,252},{6,1},{4,1},\r
-       {2,1},{0,207},{0,253},{0,238},{4,1},{2,1},{0,223},{0,254},{2,1},{0,239},\r
-       {0,255},\r
-       };\r
-\r
-  @LOC("FINAL") private static int  ValTab16[][] = {\r
-       {2,1},{0,0},{6,1},{2,1},{0,16},{2,1},{0,1},{0,17},{42,1},{8,1},\r
-       {4,1},{2,1},{0,32},{0,2},{2,1},{0,33},{0,18},{10,1},{6,1},{2,1},\r
-       {0,34},{2,1},{0,48},{0,3},{2,1},{0,49},{0,19},{10,1},{4,1},{2,1},\r
-       {0,50},{0,35},{4,1},{2,1},{0,64},{0,4},{0,65},{6,1},{2,1},{0,20},\r
-       {2,1},{0,51},{0,66},{4,1},{2,1},{0,36},{0,80},{2,1},{0,67},{0,52},\r
-       {138,1},{40,1},{16,1},{6,1},{4,1},{2,1},{0,5},{0,21},{0,81},{4,1},\r
-       {2,1},{0,82},{0,37},{4,1},{2,1},{0,68},{0,53},{0,83},{10,1},{6,1},\r
-       {4,1},{2,1},{0,96},{0,6},{0,97},{2,1},{0,22},{0,98},{8,1},{4,1},\r
-       {2,1},{0,38},{0,84},{2,1},{0,69},{0,99},{4,1},{2,1},{0,54},{0,112},\r
-       {0,113},{40,1},{18,1},{8,1},{2,1},{0,23},{2,1},{0,7},{2,1},{0,85},\r
-       {0,100},{4,1},{2,1},{0,114},{0,39},{4,1},{2,1},{0,70},{0,101},{0,115},\r
-       {10,1},{6,1},{2,1},{0,55},{2,1},{0,86},{0,8},{2,1},{0,128},{0,129},\r
-       {6,1},{2,1},{0,24},{2,1},{0,116},{0,71},{2,1},{0,130},{2,1},{0,40},\r
-       {0,102},{24,1},{14,1},{8,1},{4,1},{2,1},{0,131},{0,56},{2,1},{0,117},\r
-       {0,132},{4,1},{2,1},{0,72},{0,144},{0,145},{6,1},{2,1},{0,25},{2,1},\r
-       {0,9},{0,118},{2,1},{0,146},{0,41},{14,1},{8,1},{4,1},{2,1},{0,133},\r
-       {0,88},{2,1},{0,147},{0,57},{4,1},{2,1},{0,160},{0,10},{0,26},{8,1},\r
-       {2,1},{0,162},{2,1},{0,103},{2,1},{0,87},{0,73},{6,1},{2,1},{0,148},\r
-       {2,1},{0,119},{0,134},{2,1},{0,161},{2,1},{0,104},{0,149},{220,1},{126,1},\r
-       {50,1},{26,1},{12,1},{6,1},{2,1},{0,42},{2,1},{0,89},{0,58},{2,1},\r
-       {0,163},{2,1},{0,135},{0,120},{8,1},{4,1},{2,1},{0,164},{0,74},{2,1},\r
-       {0,150},{0,105},{4,1},{2,1},{0,176},{0,11},{0,177},{10,1},{4,1},{2,1},\r
-       {0,27},{0,178},{2,1},{0,43},{2,1},{0,165},{0,90},{6,1},{2,1},{0,179},\r
-       {2,1},{0,166},{0,106},{4,1},{2,1},{0,180},{0,75},{2,1},{0,12},{0,193},\r
-       {30,1},{14,1},{6,1},{4,1},{2,1},{0,181},{0,194},{0,44},{4,1},{2,1},\r
-       {0,167},{0,195},{2,1},{0,107},{0,196},{8,1},{2,1},{0,29},{4,1},{2,1},\r
-       {0,136},{0,151},{0,59},{4,1},{2,1},{0,209},{0,210},{2,1},{0,45},{0,211},\r
-       {18,1},{6,1},{4,1},{2,1},{0,30},{0,46},{0,226},{6,1},{4,1},{2,1},\r
-       {0,121},{0,152},{0,192},{2,1},{0,28},{2,1},{0,137},{0,91},{14,1},{6,1},\r
-       {2,1},{0,60},{2,1},{0,122},{0,182},{4,1},{2,1},{0,76},{0,153},{2,1},\r
-       {0,168},{0,138},{6,1},{2,1},{0,13},{2,1},{0,197},{0,92},{4,1},{2,1},\r
-       {0,61},{0,198},{2,1},{0,108},{0,154},{88,1},{86,1},{36,1},{16,1},{8,1},\r
-       {4,1},{2,1},{0,139},{0,77},{2,1},{0,199},{0,124},{4,1},{2,1},{0,213},\r
-       {0,93},{2,1},{0,224},{0,14},{8,1},{2,1},{0,227},{4,1},{2,1},{0,208},\r
-       {0,183},{0,123},{6,1},{4,1},{2,1},{0,169},{0,184},{0,212},{2,1},{0,225},\r
-       {2,1},{0,170},{0,185},{24,1},{10,1},{6,1},{4,1},{2,1},{0,155},{0,214},\r
-       {0,109},{2,1},{0,62},{0,200},{6,1},{4,1},{2,1},{0,140},{0,228},{0,78},\r
-       {4,1},{2,1},{0,215},{0,229},{2,1},{0,186},{0,171},{12,1},{4,1},{2,1},\r
-       {0,156},{0,230},{4,1},{2,1},{0,110},{0,216},{2,1},{0,141},{0,187},{8,1},\r
-       {4,1},{2,1},{0,231},{0,157},{2,1},{0,232},{0,142},{4,1},{2,1},{0,203},\r
-       {0,188},{0,158},{0,241},{2,1},{0,31},{2,1},{0,15},{0,47},{66,1},{56,1},\r
-       {2,1},{0,242},{52,1},{50,1},{20,1},{8,1},{2,1},{0,189},{2,1},{0,94},\r
-       {2,1},{0,125},{0,201},{6,1},{2,1},{0,202},{2,1},{0,172},{0,126},{4,1},\r
-       {2,1},{0,218},{0,173},{0,204},{10,1},{6,1},{2,1},{0,174},{2,1},{0,219},\r
-       {0,220},{2,1},{0,205},{0,190},{6,1},{4,1},{2,1},{0,235},{0,237},{0,238},\r
-       {6,1},{4,1},{2,1},{0,217},{0,234},{0,233},{2,1},{0,222},{4,1},{2,1},\r
-       {0,221},{0,236},{0,206},{0,63},{0,240},{4,1},{2,1},{0,243},{0,244},{2,1},\r
-       {0,79},{2,1},{0,245},{0,95},{10,1},{2,1},{0,255},{4,1},{2,1},{0,246},\r
-       {0,111},{2,1},{0,247},{0,127},{12,1},{6,1},{2,1},{0,143},{2,1},{0,248},\r
-       {0,249},{4,1},{2,1},{0,159},{0,250},{0,175},{8,1},{4,1},{2,1},{0,251},\r
-       {0,191},{2,1},{0,252},{0,207},{4,1},{2,1},{0,253},{0,223},{2,1},{0,254},\r
-       {0,239},\r
-       };\r
-       \r
-  @LOC("FINAL") private static int ValTab24[][] = {\r
-       {60,1},{8,1},{4,1},{2,1},{0,0},{0,16},{2,1},{0,1},{0,17},{14,1},\r
-       {6,1},{4,1},{2,1},{0,32},{0,2},{0,33},{2,1},{0,18},{2,1},{0,34},\r
-       {2,1},{0,48},{0,3},{14,1},{4,1},{2,1},{0,49},{0,19},{4,1},{2,1},\r
-       {0,50},{0,35},{4,1},{2,1},{0,64},{0,4},{0,65},{8,1},{4,1},{2,1},\r
-       {0,20},{0,51},{2,1},{0,66},{0,36},{6,1},{4,1},{2,1},{0,67},{0,52},\r
-       {0,81},{6,1},{4,1},{2,1},{0,80},{0,5},{0,21},{2,1},{0,82},{0,37},\r
-       {250,1},{98,1},{34,1},{18,1},{10,1},{4,1},{2,1},{0,68},{0,83},{2,1},\r
-       {0,53},{2,1},{0,96},{0,6},{4,1},{2,1},{0,97},{0,22},{2,1},{0,98},\r
-       {0,38},{8,1},{4,1},{2,1},{0,84},{0,69},{2,1},{0,99},{0,54},{4,1},\r
-       {2,1},{0,113},{0,85},{2,1},{0,100},{0,70},{32,1},{14,1},{6,1},{2,1},\r
-       {0,114},{2,1},{0,39},{0,55},{2,1},{0,115},{4,1},{2,1},{0,112},{0,7},\r
-       {0,23},{10,1},{4,1},{2,1},{0,101},{0,86},{4,1},{2,1},{0,128},{0,8},\r
-       {0,129},{4,1},{2,1},{0,116},{0,71},{2,1},{0,24},{0,130},{16,1},{8,1},\r
-       {4,1},{2,1},{0,40},{0,102},{2,1},{0,131},{0,56},{4,1},{2,1},{0,117},\r
-       {0,87},{2,1},{0,132},{0,72},{8,1},{4,1},{2,1},{0,145},{0,25},{2,1},\r
-       {0,146},{0,118},{4,1},{2,1},{0,103},{0,41},{2,1},{0,133},{0,88},{92,1},\r
-       {34,1},{16,1},{8,1},{4,1},{2,1},{0,147},{0,57},{2,1},{0,148},{0,73},\r
-       {4,1},{2,1},{0,119},{0,134},{2,1},{0,104},{0,161},{8,1},{4,1},{2,1},\r
-       {0,162},{0,42},{2,1},{0,149},{0,89},{4,1},{2,1},{0,163},{0,58},{2,1},\r
-       {0,135},{2,1},{0,120},{0,74},{22,1},{12,1},{4,1},{2,1},{0,164},{0,150},\r
-       {4,1},{2,1},{0,105},{0,177},{2,1},{0,27},{0,165},{6,1},{2,1},{0,178},\r
-       {2,1},{0,90},{0,43},{2,1},{0,136},{0,179},{16,1},{10,1},{6,1},{2,1},\r
-       {0,144},{2,1},{0,9},{0,160},{2,1},{0,151},{0,121},{4,1},{2,1},{0,166},\r
-       {0,106},{0,180},{12,1},{6,1},{2,1},{0,26},{2,1},{0,10},{0,176},{2,1},\r
-       {0,59},{2,1},{0,11},{0,192},{4,1},{2,1},{0,75},{0,193},{2,1},{0,152},\r
-       {0,137},{67,1},{34,1},{16,1},{8,1},{4,1},{2,1},{0,28},{0,181},{2,1},\r
-       {0,91},{0,194},{4,1},{2,1},{0,44},{0,167},{2,1},{0,122},{0,195},{10,1},\r
-       {6,1},{2,1},{0,60},{2,1},{0,12},{0,208},{2,1},{0,182},{0,107},{4,1},\r
-       {2,1},{0,196},{0,76},{2,1},{0,153},{0,168},{16,1},{8,1},{4,1},{2,1},\r
-       {0,138},{0,197},{2,1},{0,92},{0,209},{4,1},{2,1},{0,183},{0,123},{2,1},\r
-       {0,29},{0,210},{9,1},{4,1},{2,1},{0,45},{0,211},{2,1},{0,61},{0,198},\r
-       {85,250},{4,1},{2,1},{0,108},{0,169},{2,1},{0,154},{0,212},{32,1},{16,1},\r
-       {8,1},{4,1},{2,1},{0,184},{0,139},{2,1},{0,77},{0,199},{4,1},{2,1},\r
-       {0,124},{0,213},{2,1},{0,93},{0,225},{8,1},{4,1},{2,1},{0,30},{0,226},\r
-       {2,1},{0,170},{0,185},{4,1},{2,1},{0,155},{0,227},{2,1},{0,214},{0,109},\r
-       {20,1},{10,1},{6,1},{2,1},{0,62},{2,1},{0,46},{0,78},{2,1},{0,200},\r
-       {0,140},{4,1},{2,1},{0,228},{0,215},{4,1},{2,1},{0,125},{0,171},{0,229},\r
-       {10,1},{4,1},{2,1},{0,186},{0,94},{2,1},{0,201},{2,1},{0,156},{0,110},\r
-       {8,1},{2,1},{0,230},{2,1},{0,13},{2,1},{0,224},{0,14},{4,1},{2,1},\r
-       {0,216},{0,141},{2,1},{0,187},{0,202},{74,1},{2,1},{0,255},{64,1},{58,1},\r
-       {32,1},{16,1},{8,1},{4,1},{2,1},{0,172},{0,231},{2,1},{0,126},{0,217},\r
-       {4,1},{2,1},{0,157},{0,232},{2,1},{0,142},{0,203},{8,1},{4,1},{2,1},\r
-       {0,188},{0,218},{2,1},{0,173},{0,233},{4,1},{2,1},{0,158},{0,204},{2,1},\r
-       {0,219},{0,189},{16,1},{8,1},{4,1},{2,1},{0,234},{0,174},{2,1},{0,220},\r
-       {0,205},{4,1},{2,1},{0,235},{0,190},{2,1},{0,221},{0,236},{8,1},{4,1},\r
-       {2,1},{0,206},{0,237},{2,1},{0,222},{0,238},{0,15},{4,1},{2,1},{0,240},\r
-       {0,31},{0,241},{4,1},{2,1},{0,242},{0,47},{2,1},{0,243},{0,63},{18,1},\r
-       {8,1},{4,1},{2,1},{0,244},{0,79},{2,1},{0,245},{0,95},{4,1},{2,1},\r
-       {0,246},{0,111},{2,1},{0,247},{2,1},{0,127},{0,143},{10,1},{4,1},{2,1},\r
-       {0,248},{0,249},{4,1},{2,1},{0,159},{0,175},{0,250},{8,1},{4,1},{2,1},\r
-       {0,251},{0,191},{2,1},{0,252},{0,207},{4,1},{2,1},{0,253},{0,223},{2,1},\r
-       {0,254},{0,239},\r
-       };\r
-       \r
-  @LOC("FINAL") private static int ValTab32[][] = {\r
-       {2,1},{0,0},{8,1},{4,1},{2,1},{0,8},{0,4},{2,1},{0,1},{0,2},\r
-       {8,1},{4,1},{2,1},{0,12},{0,10},{2,1},{0,3},{0,6},{6,1},{2,1},\r
-       {0,9},{2,1},{0,5},{0,7},{4,1},{2,1},{0,14},{0,13},{2,1},{0,15},\r
-       {0,11},\r
-       };\r
-\r
-  @LOC("FINAL") private static int ValTab33[][] = {\r
-       {16,1},{8,1},{4,1},{2,1},{0,0},{0,1},{2,1},{0,2},{0,3},{4,1},\r
-       {2,1},{0,4},{0,5},{2,1},{0,6},{0,7},{8,1},{4,1},{2,1},{0,8},\r
-       {0,9},{2,1},{0,10},{0,11},{4,1},{2,1},{0,12},{0,13},{2,1},{0,14},\r
-       {0,15},\r
-       };\r
-\r
-\r
-  @LOC("FINAL") public static huffcodetab[]  ht = null;     /* Simulate extern struct                 */\r
-\r
-  @LOC("FINAL") private static int[] bitbuf = new int[32];\r
-  \r
+final class huffcodetab {\r
+  private static final int MXOFF = 250;\r
+  private static final int HTN = 34;\r
+\r
+  @LOC("FIELD")\r
+  private char tablename0 = ' '; /* string, containing table_description */\r
+  @LOC("FIELD")\r
+  private char tablename1 = ' '; /* string, containing table_description */\r
+  @LOC("FIELD")\r
+  private char tablename2 = ' '; /* string, containing table_description */\r
+\r
+  @LOC("FIELD")\r
+  private int xlen; /* max. x-index+ */\r
+  @LOC("FIELD")\r
+  private int ylen; /* max. y-index+ */\r
+  @LOC("FIELD")\r
+  private int linbits; /* number of linbits */\r
+  @LOC("FIELD")\r
+  private int linmax; /* max number to be stored in linbits */\r
+  @LOC("FIELD")\r
+  private int ref; /* a positive value indicates a reference */\r
+  @LOC("FIELD")\r
+  private int[] table = null; /* pointer to array[xlen][ylen] */\r
+  @LOC("FIELD")\r
+  private int[] hlen = null; /* pointer to array[xlen][ylen] */\r
+  @LOC("FIELD")\r
+  private int[][] val = null; /* decoder tree */\r
+  @LOC("FIELD")\r
+  private int treelen; /* length of decoder tree */\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab0[][] = { { 0, 0 } // dummy\r
+      };\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab1[][] = { { 2, 1 }, { 0, 0 }, { 2, 1 }, { 0, 16 }, { 2, 1 }, { 0, 1 },\r
+      { 0, 17 }, };\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab2[][] = { { 2, 1 }, { 0, 0 }, { 4, 1 }, { 2, 1 }, { 0, 16 }, { 0, 1 },\r
+      { 2, 1 }, { 0, 17 }, { 4, 1 }, { 2, 1 }, { 0, 32 }, { 0, 33 }, { 2, 1 }, { 0, 18 }, { 2, 1 },\r
+      { 0, 2 }, { 0, 34 }, };\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab3[][] = { { 4, 1 }, { 2, 1 }, { 0, 0 }, { 0, 1 }, { 2, 1 }, { 0, 17 },\r
+      { 2, 1 }, { 0, 16 }, { 4, 1 }, { 2, 1 }, { 0, 32 }, { 0, 33 }, { 2, 1 }, { 0, 18 }, { 2, 1 },\r
+      { 0, 2 }, { 0, 34 }, };\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab4[][] = { { 0, 0 } }; // dummy\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab5[][] = { { 2, 1 }, { 0, 0 }, { 4, 1 }, { 2, 1 }, { 0, 16 }, { 0, 1 },\r
+      { 2, 1 }, { 0, 17 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 32 }, { 0, 2 }, { 2, 1 }, { 0, 33 },\r
+      { 0, 18 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 34 }, { 0, 48 }, { 2, 1 }, { 0, 3 }, { 0, 19 },\r
+      { 2, 1 }, { 0, 49 }, { 2, 1 }, { 0, 50 }, { 2, 1 }, { 0, 35 }, { 0, 51 }, };\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab6[][] = { { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 0 }, { 0, 16 }, { 0, 17 },\r
+      { 6, 1 }, { 2, 1 }, { 0, 1 }, { 2, 1 }, { 0, 32 }, { 0, 33 }, { 6, 1 }, { 2, 1 }, { 0, 18 },\r
+      { 2, 1 }, { 0, 2 }, { 0, 34 }, { 4, 1 }, { 2, 1 }, { 0, 49 }, { 0, 19 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 48 }, { 0, 50 }, { 2, 1 }, { 0, 35 }, { 2, 1 }, { 0, 3 }, { 0, 51 }, };\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab7[][] = { { 2, 1 }, { 0, 0 }, { 4, 1 }, { 2, 1 }, { 0, 16 }, { 0, 1 },\r
+      { 8, 1 }, { 2, 1 }, { 0, 17 }, { 4, 1 }, { 2, 1 }, { 0, 32 }, { 0, 2 }, { 0, 33 }, { 18, 1 },\r
+      { 6, 1 }, { 2, 1 }, { 0, 18 }, { 2, 1 }, { 0, 34 }, { 0, 48 }, { 4, 1 }, { 2, 1 }, { 0, 49 },\r
+      { 0, 19 }, { 4, 1 }, { 2, 1 }, { 0, 3 }, { 0, 50 }, { 2, 1 }, { 0, 35 }, { 0, 4 }, { 10, 1 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 64 }, { 0, 65 }, { 2, 1 }, { 0, 20 }, { 2, 1 }, { 0, 66 },\r
+      { 0, 36 }, { 12, 1 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 51 }, { 0, 67 }, { 0, 80 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 52 }, { 0, 5 }, { 0, 81 }, { 6, 1 }, { 2, 1 }, { 0, 21 }, { 2, 1 },\r
+      { 0, 82 }, { 0, 37 }, { 4, 1 }, { 2, 1 }, { 0, 68 }, { 0, 53 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 83 }, { 0, 84 }, { 2, 1 }, { 0, 69 }, { 0, 85 }, };\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab8[][] = { { 6, 1 }, { 2, 1 }, { 0, 0 }, { 2, 1 }, { 0, 16 }, { 0, 1 },\r
+      { 2, 1 }, { 0, 17 }, { 4, 1 }, { 2, 1 }, { 0, 33 }, { 0, 18 }, { 14, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 32 }, { 0, 2 }, { 2, 1 }, { 0, 34 }, { 4, 1 }, { 2, 1 }, { 0, 48 }, { 0, 3 }, { 2, 1 },\r
+      { 0, 49 }, { 0, 19 }, { 14, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 50 }, { 0, 35 },\r
+      { 2, 1 }, { 0, 64 }, { 0, 4 }, { 2, 1 }, { 0, 65 }, { 2, 1 }, { 0, 20 }, { 0, 66 },\r
+      { 12, 1 }, { 6, 1 }, { 2, 1 }, { 0, 36 }, { 2, 1 }, { 0, 51 }, { 0, 80 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 67 }, { 0, 52 }, { 0, 81 }, { 6, 1 }, { 2, 1 }, { 0, 21 }, { 2, 1 }, { 0, 5 },\r
+      { 0, 82 }, { 6, 1 }, { 2, 1 }, { 0, 37 }, { 2, 1 }, { 0, 68 }, { 0, 53 }, { 2, 1 },\r
+      { 0, 83 }, { 2, 1 }, { 0, 69 }, { 2, 1 }, { 0, 84 }, { 0, 85 }, };\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab9[][] = { { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 0 }, { 0, 16 }, { 2, 1 },\r
+      { 0, 1 }, { 0, 17 }, { 10, 1 }, { 4, 1 }, { 2, 1 }, { 0, 32 }, { 0, 33 }, { 2, 1 },\r
+      { 0, 18 }, { 2, 1 }, { 0, 2 }, { 0, 34 }, { 12, 1 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 48 },\r
+      { 0, 3 }, { 0, 49 }, { 2, 1 }, { 0, 19 }, { 2, 1 }, { 0, 50 }, { 0, 35 }, { 12, 1 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 65 }, { 0, 20 }, { 4, 1 }, { 2, 1 }, { 0, 64 }, { 0, 51 }, { 2, 1 },\r
+      { 0, 66 }, { 0, 36 }, { 10, 1 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 4 }, { 0, 80 },\r
+      { 0, 67 }, { 2, 1 }, { 0, 52 }, { 0, 81 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 21 },\r
+      { 0, 82 }, { 2, 1 }, { 0, 37 }, { 0, 68 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 5 }, { 0, 84 },\r
+      { 0, 83 }, { 2, 1 }, { 0, 53 }, { 2, 1 }, { 0, 69 }, { 0, 85 }, };\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab10[][] = { { 2, 1 }, { 0, 0 }, { 4, 1 }, { 2, 1 }, { 0, 16 }, { 0, 1 },\r
+      { 10, 1 }, { 2, 1 }, { 0, 17 }, { 4, 1 }, { 2, 1 }, { 0, 32 }, { 0, 2 }, { 2, 1 }, { 0, 33 },\r
+      { 0, 18 }, { 28, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 34 }, { 0, 48 }, { 2, 1 },\r
+      { 0, 49 }, { 0, 19 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 3 }, { 0, 50 }, { 2, 1 }, { 0, 35 },\r
+      { 0, 64 }, { 4, 1 }, { 2, 1 }, { 0, 65 }, { 0, 20 }, { 4, 1 }, { 2, 1 }, { 0, 4 }, { 0, 51 },\r
+      { 2, 1 }, { 0, 66 }, { 0, 36 }, { 28, 1 }, { 10, 1 }, { 6, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 80 }, { 0, 5 }, { 0, 96 }, { 2, 1 }, { 0, 97 }, { 0, 22 }, { 12, 1 }, { 6, 1 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 67 }, { 0, 52 }, { 0, 81 }, { 2, 1 }, { 0, 21 }, { 2, 1 },\r
+      { 0, 82 }, { 0, 37 }, { 4, 1 }, { 2, 1 }, { 0, 38 }, { 0, 54 }, { 0, 113 }, { 20, 1 },\r
+      { 8, 1 }, { 2, 1 }, { 0, 23 }, { 4, 1 }, { 2, 1 }, { 0, 68 }, { 0, 83 }, { 0, 6 }, { 6, 1 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 53 }, { 0, 69 }, { 0, 98 }, { 2, 1 }, { 0, 112 }, { 2, 1 },\r
+      { 0, 7 }, { 0, 100 }, { 14, 1 }, { 4, 1 }, { 2, 1 }, { 0, 114 }, { 0, 39 }, { 6, 1 },\r
+      { 2, 1 }, { 0, 99 }, { 2, 1 }, { 0, 84 }, { 0, 85 }, { 2, 1 }, { 0, 70 }, { 0, 115 },\r
+      { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 55 }, { 0, 101 }, { 2, 1 }, { 0, 86 }, { 0, 116 },\r
+      { 6, 1 }, { 2, 1 }, { 0, 71 }, { 2, 1 }, { 0, 102 }, { 0, 117 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 87 }, { 0, 118 }, { 2, 1 }, { 0, 103 }, { 0, 119 }, };\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab11[][] = { { 6, 1 }, { 2, 1 }, { 0, 0 }, { 2, 1 }, { 0, 16 }, { 0, 1 },\r
+      { 8, 1 }, { 2, 1 }, { 0, 17 }, { 4, 1 }, { 2, 1 }, { 0, 32 }, { 0, 2 }, { 0, 18 }, { 24, 1 },\r
+      { 8, 1 }, { 2, 1 }, { 0, 33 }, { 2, 1 }, { 0, 34 }, { 2, 1 }, { 0, 48 }, { 0, 3 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 49 }, { 0, 19 }, { 4, 1 }, { 2, 1 }, { 0, 50 }, { 0, 35 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 64 }, { 0, 4 }, { 2, 1 }, { 0, 65 }, { 0, 20 }, { 30, 1 }, { 16, 1 }, { 10, 1 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 66 }, { 0, 36 }, { 4, 1 }, { 2, 1 }, { 0, 51 }, { 0, 67 },\r
+      { 0, 80 }, { 4, 1 }, { 2, 1 }, { 0, 52 }, { 0, 81 }, { 0, 97 }, { 6, 1 }, { 2, 1 },\r
+      { 0, 22 }, { 2, 1 }, { 0, 6 }, { 0, 38 }, { 2, 1 }, { 0, 98 }, { 2, 1 }, { 0, 21 }, { 2, 1 },\r
+      { 0, 5 }, { 0, 82 }, { 16, 1 }, { 10, 1 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 37 },\r
+      { 0, 68 }, { 0, 96 }, { 2, 1 }, { 0, 99 }, { 0, 54 }, { 4, 1 }, { 2, 1 }, { 0, 112 },\r
+      { 0, 23 }, { 0, 113 }, { 16, 1 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 7 }, { 0, 100 },\r
+      { 0, 114 }, { 2, 1 }, { 0, 39 }, { 4, 1 }, { 2, 1 }, { 0, 83 }, { 0, 53 }, { 2, 1 },\r
+      { 0, 84 }, { 0, 69 }, { 10, 1 }, { 4, 1 }, { 2, 1 }, { 0, 70 }, { 0, 115 }, { 2, 1 },\r
+      { 0, 55 }, { 2, 1 }, { 0, 101 }, { 0, 86 }, { 10, 1 }, { 6, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 85 }, { 0, 87 }, { 0, 116 }, { 2, 1 }, { 0, 71 }, { 0, 102 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 117 }, { 0, 118 }, { 2, 1 }, { 0, 103 }, { 0, 119 }, };\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab12[][] = { { 12, 1 }, { 4, 1 }, { 2, 1 }, { 0, 16 }, { 0, 1 }, { 2, 1 },\r
+      { 0, 17 }, { 2, 1 }, { 0, 0 }, { 2, 1 }, { 0, 32 }, { 0, 2 }, { 16, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 33 }, { 0, 18 }, { 4, 1 }, { 2, 1 }, { 0, 34 }, { 0, 49 }, { 2, 1 }, { 0, 19 },\r
+      { 2, 1 }, { 0, 48 }, { 2, 1 }, { 0, 3 }, { 0, 64 }, { 26, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 50 }, { 0, 35 }, { 2, 1 }, { 0, 65 }, { 0, 51 }, { 10, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 20 }, { 0, 66 }, { 2, 1 }, { 0, 36 }, { 2, 1 }, { 0, 4 }, { 0, 80 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 67 }, { 0, 52 }, { 2, 1 }, { 0, 81 }, { 0, 21 }, { 28, 1 }, { 14, 1 }, { 8, 1 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 82 }, { 0, 37 }, { 2, 1 }, { 0, 83 }, { 0, 53 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 96 }, { 0, 22 }, { 0, 97 }, { 4, 1 }, { 2, 1 }, { 0, 98 }, { 0, 38 }, { 6, 1 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 5 }, { 0, 6 }, { 0, 68 }, { 2, 1 }, { 0, 84 }, { 0, 69 }, { 18, 1 },\r
+      { 10, 1 }, { 4, 1 }, { 2, 1 }, { 0, 99 }, { 0, 54 }, { 4, 1 }, { 2, 1 }, { 0, 112 },\r
+      { 0, 7 }, { 0, 113 }, { 4, 1 }, { 2, 1 }, { 0, 23 }, { 0, 100 }, { 2, 1 }, { 0, 70 },\r
+      { 0, 114 }, { 10, 1 }, { 6, 1 }, { 2, 1 }, { 0, 39 }, { 2, 1 }, { 0, 85 }, { 0, 115 },\r
+      { 2, 1 }, { 0, 55 }, { 0, 86 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 101 }, { 0, 116 },\r
+      { 2, 1 }, { 0, 71 }, { 0, 102 }, { 4, 1 }, { 2, 1 }, { 0, 117 }, { 0, 87 }, { 2, 1 },\r
+      { 0, 118 }, { 2, 1 }, { 0, 103 }, { 0, 119 }, };\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab13[][] = { { 2, 1 }, { 0, 0 }, { 6, 1 }, { 2, 1 }, { 0, 16 }, { 2, 1 },\r
+      { 0, 1 }, { 0, 17 }, { 28, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 32 }, { 0, 2 }, { 2, 1 },\r
+      { 0, 33 }, { 0, 18 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 34 }, { 0, 48 }, { 2, 1 }, { 0, 3 },\r
+      { 0, 49 }, { 6, 1 }, { 2, 1 }, { 0, 19 }, { 2, 1 }, { 0, 50 }, { 0, 35 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 64 }, { 0, 4 }, { 0, 65 }, { 70, 1 }, { 28, 1 }, { 14, 1 }, { 6, 1 }, { 2, 1 },\r
+      { 0, 20 }, { 2, 1 }, { 0, 51 }, { 0, 66 }, { 4, 1 }, { 2, 1 }, { 0, 36 }, { 0, 80 },\r
+      { 2, 1 }, { 0, 67 }, { 0, 52 }, { 4, 1 }, { 2, 1 }, { 0, 81 }, { 0, 21 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 5 }, { 0, 82 }, { 2, 1 }, { 0, 37 }, { 2, 1 }, { 0, 68 }, { 0, 83 }, { 14, 1 },\r
+      { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 96 }, { 0, 6 }, { 2, 1 }, { 0, 97 }, { 0, 22 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 128 }, { 0, 8 }, { 0, 129 }, { 16, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 53 }, { 0, 98 }, { 2, 1 }, { 0, 38 }, { 0, 84 }, { 4, 1 }, { 2, 1 }, { 0, 69 },\r
+      { 0, 99 }, { 2, 1 }, { 0, 54 }, { 0, 112 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 7 },\r
+      { 0, 85 }, { 0, 113 }, { 2, 1 }, { 0, 23 }, { 2, 1 }, { 0, 39 }, { 0, 55 }, { 72, 1 },\r
+      { 24, 1 }, { 12, 1 }, { 4, 1 }, { 2, 1 }, { 0, 24 }, { 0, 130 }, { 2, 1 }, { 0, 40 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 100 }, { 0, 70 }, { 0, 114 }, { 8, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 132 }, { 0, 72 }, { 2, 1 }, { 0, 144 }, { 0, 9 }, { 2, 1 }, { 0, 145 }, { 0, 25 },\r
+      { 24, 1 }, { 14, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 115 }, { 0, 101 }, { 2, 1 },\r
+      { 0, 86 }, { 0, 116 }, { 4, 1 }, { 2, 1 }, { 0, 71 }, { 0, 102 }, { 0, 131 }, { 6, 1 },\r
+      { 2, 1 }, { 0, 56 }, { 2, 1 }, { 0, 117 }, { 0, 87 }, { 2, 1 }, { 0, 146 }, { 0, 41 },\r
+      { 14, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 103 }, { 0, 133 }, { 2, 1 }, { 0, 88 },\r
+      { 0, 57 }, { 2, 1 }, { 0, 147 }, { 2, 1 }, { 0, 73 }, { 0, 134 }, { 6, 1 }, { 2, 1 },\r
+      { 0, 160 }, { 2, 1 }, { 0, 104 }, { 0, 10 }, { 2, 1 }, { 0, 161 }, { 0, 26 }, { 68, 1 },\r
+      { 24, 1 }, { 12, 1 }, { 4, 1 }, { 2, 1 }, { 0, 162 }, { 0, 42 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 149 }, { 0, 89 }, { 2, 1 }, { 0, 163 }, { 0, 58 }, { 8, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 74 }, { 0, 150 }, { 2, 1 }, { 0, 176 }, { 0, 11 }, { 2, 1 }, { 0, 177 }, { 0, 27 },\r
+      { 20, 1 }, { 8, 1 }, { 2, 1 }, { 0, 178 }, { 4, 1 }, { 2, 1 }, { 0, 118 }, { 0, 119 },\r
+      { 0, 148 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 135 }, { 0, 120 }, { 0, 164 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 105 }, { 0, 165 }, { 0, 43 }, { 12, 1 }, { 6, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 90 }, { 0, 136 }, { 0, 179 }, { 2, 1 }, { 0, 59 }, { 2, 1 }, { 0, 121 }, { 0, 166 },\r
+      { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 106 }, { 0, 180 }, { 0, 192 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 12 }, { 0, 152 }, { 0, 193 }, { 60, 1 }, { 22, 1 }, { 10, 1 }, { 6, 1 }, { 2, 1 },\r
+      { 0, 28 }, { 2, 1 }, { 0, 137 }, { 0, 181 }, { 2, 1 }, { 0, 91 }, { 0, 194 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 44 }, { 0, 60 }, { 4, 1 }, { 2, 1 }, { 0, 182 }, { 0, 107 }, { 2, 1 },\r
+      { 0, 196 }, { 0, 76 }, { 16, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 168 }, { 0, 138 },\r
+      { 2, 1 }, { 0, 208 }, { 0, 13 }, { 2, 1 }, { 0, 209 }, { 2, 1 }, { 0, 75 }, { 2, 1 },\r
+      { 0, 151 }, { 0, 167 }, { 12, 1 }, { 6, 1 }, { 2, 1 }, { 0, 195 }, { 2, 1 }, { 0, 122 },\r
+      { 0, 153 }, { 4, 1 }, { 2, 1 }, { 0, 197 }, { 0, 92 }, { 0, 183 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 29 }, { 0, 210 }, { 2, 1 }, { 0, 45 }, { 2, 1 }, { 0, 123 }, { 0, 211 }, { 52, 1 },\r
+      { 28, 1 }, { 12, 1 }, { 4, 1 }, { 2, 1 }, { 0, 61 }, { 0, 198 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 108 }, { 0, 169 }, { 2, 1 }, { 0, 154 }, { 0, 212 }, { 8, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 184 }, { 0, 139 }, { 2, 1 }, { 0, 77 }, { 0, 199 }, { 4, 1 }, { 2, 1 }, { 0, 124 },\r
+      { 0, 213 }, { 2, 1 }, { 0, 93 }, { 0, 224 }, { 10, 1 }, { 4, 1 }, { 2, 1 }, { 0, 225 },\r
+      { 0, 30 }, { 4, 1 }, { 2, 1 }, { 0, 14 }, { 0, 46 }, { 0, 226 }, { 8, 1 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 227 }, { 0, 109 }, { 2, 1 }, { 0, 140 }, { 0, 228 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 229 }, { 0, 186 }, { 0, 240 }, { 38, 1 }, { 16, 1 }, { 4, 1 }, { 2, 1 }, { 0, 241 },\r
+      { 0, 31 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 170 }, { 0, 155 }, { 0, 185 }, { 2, 1 },\r
+      { 0, 62 }, { 2, 1 }, { 0, 214 }, { 0, 200 }, { 12, 1 }, { 6, 1 }, { 2, 1 }, { 0, 78 },\r
+      { 2, 1 }, { 0, 215 }, { 0, 125 }, { 2, 1 }, { 0, 171 }, { 2, 1 }, { 0, 94 }, { 0, 201 },\r
+      { 6, 1 }, { 2, 1 }, { 0, 15 }, { 2, 1 }, { 0, 156 }, { 0, 110 }, { 2, 1 }, { 0, 242 },\r
+      { 0, 47 }, { 32, 1 }, { 16, 1 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 216 }, { 0, 141 },\r
+      { 0, 63 }, { 6, 1 }, { 2, 1 }, { 0, 243 }, { 2, 1 }, { 0, 230 }, { 0, 202 }, { 2, 1 },\r
+      { 0, 244 }, { 0, 79 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 187 }, { 0, 172 }, { 2, 1 },\r
+      { 0, 231 }, { 0, 245 }, { 4, 1 }, { 2, 1 }, { 0, 217 }, { 0, 157 }, { 2, 1 }, { 0, 95 },\r
+      { 0, 232 }, { 30, 1 }, { 12, 1 }, { 6, 1 }, { 2, 1 }, { 0, 111 }, { 2, 1 }, { 0, 246 },\r
+      { 0, 203 }, { 4, 1 }, { 2, 1 }, { 0, 188 }, { 0, 173 }, { 0, 218 }, { 8, 1 }, { 2, 1 },\r
+      { 0, 247 }, { 4, 1 }, { 2, 1 }, { 0, 126 }, { 0, 127 }, { 0, 142 }, { 6, 1 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 158 }, { 0, 174 }, { 0, 204 }, { 2, 1 }, { 0, 248 }, { 0, 143 }, { 18, 1 },\r
+      { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 219 }, { 0, 189 }, { 2, 1 }, { 0, 234 }, { 0, 249 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 159 }, { 0, 235 }, { 2, 1 }, { 0, 190 }, { 2, 1 }, { 0, 205 },\r
+      { 0, 250 }, { 14, 1 }, { 4, 1 }, { 2, 1 }, { 0, 221 }, { 0, 236 }, { 6, 1 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 233 }, { 0, 175 }, { 0, 220 }, { 2, 1 }, { 0, 206 }, { 0, 251 }, { 8, 1 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 191 }, { 0, 222 }, { 2, 1 }, { 0, 207 }, { 0, 238 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 223 }, { 0, 239 }, { 2, 1 }, { 0, 255 }, { 2, 1 }, { 0, 237 }, { 2, 1 },\r
+      { 0, 253 }, { 2, 1 }, { 0, 252 }, { 0, 254 }, };\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab14[][] = { { 0, 0 } // dummy\r
+      };\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab15[][] = { { 16, 1 }, { 6, 1 }, { 2, 1 }, { 0, 0 }, { 2, 1 }, { 0, 16 },\r
+      { 0, 1 }, { 2, 1 }, { 0, 17 }, { 4, 1 }, { 2, 1 }, { 0, 32 }, { 0, 2 }, { 2, 1 }, { 0, 33 },\r
+      { 0, 18 }, { 50, 1 }, { 16, 1 }, { 6, 1 }, { 2, 1 }, { 0, 34 }, { 2, 1 }, { 0, 48 },\r
+      { 0, 49 }, { 6, 1 }, { 2, 1 }, { 0, 19 }, { 2, 1 }, { 0, 3 }, { 0, 64 }, { 2, 1 }, { 0, 50 },\r
+      { 0, 35 }, { 14, 1 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 4 }, { 0, 20 }, { 0, 65 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 51 }, { 0, 66 }, { 2, 1 }, { 0, 36 }, { 0, 67 }, { 10, 1 }, { 6, 1 },\r
+      { 2, 1 }, { 0, 52 }, { 2, 1 }, { 0, 80 }, { 0, 5 }, { 2, 1 }, { 0, 81 }, { 0, 21 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 82 }, { 0, 37 }, { 4, 1 }, { 2, 1 }, { 0, 68 }, { 0, 83 }, { 0, 97 },\r
+      { 90, 1 }, { 36, 1 }, { 18, 1 }, { 10, 1 }, { 6, 1 }, { 2, 1 }, { 0, 53 }, { 2, 1 },\r
+      { 0, 96 }, { 0, 6 }, { 2, 1 }, { 0, 22 }, { 0, 98 }, { 4, 1 }, { 2, 1 }, { 0, 38 },\r
+      { 0, 84 }, { 2, 1 }, { 0, 69 }, { 0, 99 }, { 10, 1 }, { 6, 1 }, { 2, 1 }, { 0, 54 },\r
+      { 2, 1 }, { 0, 112 }, { 0, 7 }, { 2, 1 }, { 0, 113 }, { 0, 85 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 23 }, { 0, 100 }, { 2, 1 }, { 0, 114 }, { 0, 39 }, { 24, 1 }, { 16, 1 }, { 8, 1 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 70 }, { 0, 115 }, { 2, 1 }, { 0, 55 }, { 0, 101 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 86 }, { 0, 128 }, { 2, 1 }, { 0, 8 }, { 0, 116 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 129 }, { 0, 24 }, { 2, 1 }, { 0, 130 }, { 0, 40 }, { 16, 1 }, { 8, 1 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 71 }, { 0, 102 }, { 2, 1 }, { 0, 131 }, { 0, 56 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 117 }, { 0, 87 }, { 2, 1 }, { 0, 132 }, { 0, 72 }, { 6, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 144 }, { 0, 25 }, { 0, 145 }, { 4, 1 }, { 2, 1 }, { 0, 146 }, { 0, 118 }, { 2, 1 },\r
+      { 0, 103 }, { 0, 41 }, { 92, 1 }, { 36, 1 }, { 18, 1 }, { 10, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 133 }, { 0, 88 }, { 4, 1 }, { 2, 1 }, { 0, 9 }, { 0, 119 }, { 0, 147 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 57 }, { 0, 148 }, { 2, 1 }, { 0, 73 }, { 0, 134 }, { 10, 1 }, { 6, 1 },\r
+      { 2, 1 }, { 0, 104 }, { 2, 1 }, { 0, 160 }, { 0, 10 }, { 2, 1 }, { 0, 161 }, { 0, 26 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 162 }, { 0, 42 }, { 2, 1 }, { 0, 149 }, { 0, 89 }, { 26, 1 },\r
+      { 14, 1 }, { 6, 1 }, { 2, 1 }, { 0, 163 }, { 2, 1 }, { 0, 58 }, { 0, 135 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 120 }, { 0, 164 }, { 2, 1 }, { 0, 74 }, { 0, 150 }, { 6, 1 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 105 }, { 0, 176 }, { 0, 177 }, { 4, 1 }, { 2, 1 }, { 0, 27 }, { 0, 165 },\r
+      { 0, 178 }, { 14, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 90 }, { 0, 43 }, { 2, 1 },\r
+      { 0, 136 }, { 0, 151 }, { 2, 1 }, { 0, 179 }, { 2, 1 }, { 0, 121 }, { 0, 59 }, { 8, 1 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 106 }, { 0, 180 }, { 2, 1 }, { 0, 75 }, { 0, 193 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 152 }, { 0, 137 }, { 2, 1 }, { 0, 28 }, { 0, 181 }, { 80, 1 }, { 34, 1 },\r
+      { 16, 1 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 91 }, { 0, 44 }, { 0, 194 }, { 6, 1 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 11 }, { 0, 192 }, { 0, 166 }, { 2, 1 }, { 0, 167 }, { 0, 122 },\r
+      { 10, 1 }, { 4, 1 }, { 2, 1 }, { 0, 195 }, { 0, 60 }, { 4, 1 }, { 2, 1 }, { 0, 12 },\r
+      { 0, 153 }, { 0, 182 }, { 4, 1 }, { 2, 1 }, { 0, 107 }, { 0, 196 }, { 2, 1 }, { 0, 76 },\r
+      { 0, 168 }, { 20, 1 }, { 10, 1 }, { 4, 1 }, { 2, 1 }, { 0, 138 }, { 0, 197 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 208 }, { 0, 92 }, { 0, 209 }, { 4, 1 }, { 2, 1 }, { 0, 183 }, { 0, 123 },\r
+      { 2, 1 }, { 0, 29 }, { 2, 1 }, { 0, 13 }, { 0, 45 }, { 12, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 210 }, { 0, 211 }, { 4, 1 }, { 2, 1 }, { 0, 61 }, { 0, 198 }, { 2, 1 }, { 0, 108 },\r
+      { 0, 169 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 154 }, { 0, 184 }, { 0, 212 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 139 }, { 0, 77 }, { 2, 1 }, { 0, 199 }, { 0, 124 }, { 68, 1 }, { 34, 1 },\r
+      { 18, 1 }, { 10, 1 }, { 4, 1 }, { 2, 1 }, { 0, 213 }, { 0, 93 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 224 }, { 0, 14 }, { 0, 225 }, { 4, 1 }, { 2, 1 }, { 0, 30 }, { 0, 226 }, { 2, 1 },\r
+      { 0, 170 }, { 0, 46 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 185 }, { 0, 155 }, { 2, 1 },\r
+      { 0, 227 }, { 0, 214 }, { 4, 1 }, { 2, 1 }, { 0, 109 }, { 0, 62 }, { 2, 1 }, { 0, 200 },\r
+      { 0, 140 }, { 16, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 228 }, { 0, 78 }, { 2, 1 },\r
+      { 0, 215 }, { 0, 125 }, { 4, 1 }, { 2, 1 }, { 0, 229 }, { 0, 186 }, { 2, 1 }, { 0, 171 },\r
+      { 0, 94 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 201 }, { 0, 156 }, { 2, 1 }, { 0, 241 },\r
+      { 0, 31 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 240 }, { 0, 110 }, { 0, 242 }, { 2, 1 },\r
+      { 0, 47 }, { 0, 230 }, { 38, 1 }, { 18, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 216 },\r
+      { 0, 243 }, { 2, 1 }, { 0, 63 }, { 0, 244 }, { 6, 1 }, { 2, 1 }, { 0, 79 }, { 2, 1 },\r
+      { 0, 141 }, { 0, 217 }, { 2, 1 }, { 0, 187 }, { 0, 202 }, { 8, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 172 }, { 0, 231 }, { 2, 1 }, { 0, 126 }, { 0, 245 }, { 8, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 157 }, { 0, 95 }, { 2, 1 }, { 0, 232 }, { 0, 142 }, { 2, 1 }, { 0, 246 }, { 0, 203 },\r
+      { 34, 1 }, { 18, 1 }, { 10, 1 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 15 }, { 0, 174 },\r
+      { 0, 111 }, { 2, 1 }, { 0, 188 }, { 0, 218 }, { 4, 1 }, { 2, 1 }, { 0, 173 }, { 0, 247 },\r
+      { 2, 1 }, { 0, 127 }, { 0, 233 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 158 }, { 0, 204 },\r
+      { 2, 1 }, { 0, 248 }, { 0, 143 }, { 4, 1 }, { 2, 1 }, { 0, 219 }, { 0, 189 }, { 2, 1 },\r
+      { 0, 234 }, { 0, 249 }, { 16, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 159 }, { 0, 220 },\r
+      { 2, 1 }, { 0, 205 }, { 0, 235 }, { 4, 1 }, { 2, 1 }, { 0, 190 }, { 0, 250 }, { 2, 1 },\r
+      { 0, 175 }, { 0, 221 }, { 14, 1 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 236 }, { 0, 206 },\r
+      { 0, 251 }, { 4, 1 }, { 2, 1 }, { 0, 191 }, { 0, 237 }, { 2, 1 }, { 0, 222 }, { 0, 252 },\r
+      { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 207 }, { 0, 253 }, { 0, 238 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 223 }, { 0, 254 }, { 2, 1 }, { 0, 239 }, { 0, 255 }, };\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab16[][] = { { 2, 1 }, { 0, 0 }, { 6, 1 }, { 2, 1 }, { 0, 16 }, { 2, 1 },\r
+      { 0, 1 }, { 0, 17 }, { 42, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 32 }, { 0, 2 }, { 2, 1 },\r
+      { 0, 33 }, { 0, 18 }, { 10, 1 }, { 6, 1 }, { 2, 1 }, { 0, 34 }, { 2, 1 }, { 0, 48 },\r
+      { 0, 3 }, { 2, 1 }, { 0, 49 }, { 0, 19 }, { 10, 1 }, { 4, 1 }, { 2, 1 }, { 0, 50 },\r
+      { 0, 35 }, { 4, 1 }, { 2, 1 }, { 0, 64 }, { 0, 4 }, { 0, 65 }, { 6, 1 }, { 2, 1 }, { 0, 20 },\r
+      { 2, 1 }, { 0, 51 }, { 0, 66 }, { 4, 1 }, { 2, 1 }, { 0, 36 }, { 0, 80 }, { 2, 1 },\r
+      { 0, 67 }, { 0, 52 }, { 138, 1 }, { 40, 1 }, { 16, 1 }, { 6, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 5 }, { 0, 21 }, { 0, 81 }, { 4, 1 }, { 2, 1 }, { 0, 82 }, { 0, 37 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 68 }, { 0, 53 }, { 0, 83 }, { 10, 1 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 96 },\r
+      { 0, 6 }, { 0, 97 }, { 2, 1 }, { 0, 22 }, { 0, 98 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 38 },\r
+      { 0, 84 }, { 2, 1 }, { 0, 69 }, { 0, 99 }, { 4, 1 }, { 2, 1 }, { 0, 54 }, { 0, 112 },\r
+      { 0, 113 }, { 40, 1 }, { 18, 1 }, { 8, 1 }, { 2, 1 }, { 0, 23 }, { 2, 1 }, { 0, 7 },\r
+      { 2, 1 }, { 0, 85 }, { 0, 100 }, { 4, 1 }, { 2, 1 }, { 0, 114 }, { 0, 39 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 70 }, { 0, 101 }, { 0, 115 }, { 10, 1 }, { 6, 1 }, { 2, 1 }, { 0, 55 },\r
+      { 2, 1 }, { 0, 86 }, { 0, 8 }, { 2, 1 }, { 0, 128 }, { 0, 129 }, { 6, 1 }, { 2, 1 },\r
+      { 0, 24 }, { 2, 1 }, { 0, 116 }, { 0, 71 }, { 2, 1 }, { 0, 130 }, { 2, 1 }, { 0, 40 },\r
+      { 0, 102 }, { 24, 1 }, { 14, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 131 }, { 0, 56 },\r
+      { 2, 1 }, { 0, 117 }, { 0, 132 }, { 4, 1 }, { 2, 1 }, { 0, 72 }, { 0, 144 }, { 0, 145 },\r
+      { 6, 1 }, { 2, 1 }, { 0, 25 }, { 2, 1 }, { 0, 9 }, { 0, 118 }, { 2, 1 }, { 0, 146 },\r
+      { 0, 41 }, { 14, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 133 }, { 0, 88 }, { 2, 1 },\r
+      { 0, 147 }, { 0, 57 }, { 4, 1 }, { 2, 1 }, { 0, 160 }, { 0, 10 }, { 0, 26 }, { 8, 1 },\r
+      { 2, 1 }, { 0, 162 }, { 2, 1 }, { 0, 103 }, { 2, 1 }, { 0, 87 }, { 0, 73 }, { 6, 1 },\r
+      { 2, 1 }, { 0, 148 }, { 2, 1 }, { 0, 119 }, { 0, 134 }, { 2, 1 }, { 0, 161 }, { 2, 1 },\r
+      { 0, 104 }, { 0, 149 }, { 220, 1 }, { 126, 1 }, { 50, 1 }, { 26, 1 }, { 12, 1 }, { 6, 1 },\r
+      { 2, 1 }, { 0, 42 }, { 2, 1 }, { 0, 89 }, { 0, 58 }, { 2, 1 }, { 0, 163 }, { 2, 1 },\r
+      { 0, 135 }, { 0, 120 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 164 }, { 0, 74 }, { 2, 1 },\r
+      { 0, 150 }, { 0, 105 }, { 4, 1 }, { 2, 1 }, { 0, 176 }, { 0, 11 }, { 0, 177 }, { 10, 1 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 27 }, { 0, 178 }, { 2, 1 }, { 0, 43 }, { 2, 1 }, { 0, 165 },\r
+      { 0, 90 }, { 6, 1 }, { 2, 1 }, { 0, 179 }, { 2, 1 }, { 0, 166 }, { 0, 106 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 180 }, { 0, 75 }, { 2, 1 }, { 0, 12 }, { 0, 193 }, { 30, 1 }, { 14, 1 },\r
+      { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 181 }, { 0, 194 }, { 0, 44 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 167 }, { 0, 195 }, { 2, 1 }, { 0, 107 }, { 0, 196 }, { 8, 1 }, { 2, 1 }, { 0, 29 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 136 }, { 0, 151 }, { 0, 59 }, { 4, 1 }, { 2, 1 }, { 0, 209 },\r
+      { 0, 210 }, { 2, 1 }, { 0, 45 }, { 0, 211 }, { 18, 1 }, { 6, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 30 }, { 0, 46 }, { 0, 226 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 121 }, { 0, 152 },\r
+      { 0, 192 }, { 2, 1 }, { 0, 28 }, { 2, 1 }, { 0, 137 }, { 0, 91 }, { 14, 1 }, { 6, 1 },\r
+      { 2, 1 }, { 0, 60 }, { 2, 1 }, { 0, 122 }, { 0, 182 }, { 4, 1 }, { 2, 1 }, { 0, 76 },\r
+      { 0, 153 }, { 2, 1 }, { 0, 168 }, { 0, 138 }, { 6, 1 }, { 2, 1 }, { 0, 13 }, { 2, 1 },\r
+      { 0, 197 }, { 0, 92 }, { 4, 1 }, { 2, 1 }, { 0, 61 }, { 0, 198 }, { 2, 1 }, { 0, 108 },\r
+      { 0, 154 }, { 88, 1 }, { 86, 1 }, { 36, 1 }, { 16, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 139 }, { 0, 77 }, { 2, 1 }, { 0, 199 }, { 0, 124 }, { 4, 1 }, { 2, 1 }, { 0, 213 },\r
+      { 0, 93 }, { 2, 1 }, { 0, 224 }, { 0, 14 }, { 8, 1 }, { 2, 1 }, { 0, 227 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 208 }, { 0, 183 }, { 0, 123 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 169 },\r
+      { 0, 184 }, { 0, 212 }, { 2, 1 }, { 0, 225 }, { 2, 1 }, { 0, 170 }, { 0, 185 }, { 24, 1 },\r
+      { 10, 1 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 155 }, { 0, 214 }, { 0, 109 }, { 2, 1 },\r
+      { 0, 62 }, { 0, 200 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 140 }, { 0, 228 }, { 0, 78 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 215 }, { 0, 229 }, { 2, 1 }, { 0, 186 }, { 0, 171 }, { 12, 1 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 156 }, { 0, 230 }, { 4, 1 }, { 2, 1 }, { 0, 110 }, { 0, 216 },\r
+      { 2, 1 }, { 0, 141 }, { 0, 187 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 231 }, { 0, 157 },\r
+      { 2, 1 }, { 0, 232 }, { 0, 142 }, { 4, 1 }, { 2, 1 }, { 0, 203 }, { 0, 188 }, { 0, 158 },\r
+      { 0, 241 }, { 2, 1 }, { 0, 31 }, { 2, 1 }, { 0, 15 }, { 0, 47 }, { 66, 1 }, { 56, 1 },\r
+      { 2, 1 }, { 0, 242 }, { 52, 1 }, { 50, 1 }, { 20, 1 }, { 8, 1 }, { 2, 1 }, { 0, 189 },\r
+      { 2, 1 }, { 0, 94 }, { 2, 1 }, { 0, 125 }, { 0, 201 }, { 6, 1 }, { 2, 1 }, { 0, 202 },\r
+      { 2, 1 }, { 0, 172 }, { 0, 126 }, { 4, 1 }, { 2, 1 }, { 0, 218 }, { 0, 173 }, { 0, 204 },\r
+      { 10, 1 }, { 6, 1 }, { 2, 1 }, { 0, 174 }, { 2, 1 }, { 0, 219 }, { 0, 220 }, { 2, 1 },\r
+      { 0, 205 }, { 0, 190 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 235 }, { 0, 237 }, { 0, 238 },\r
+      { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 217 }, { 0, 234 }, { 0, 233 }, { 2, 1 }, { 0, 222 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 221 }, { 0, 236 }, { 0, 206 }, { 0, 63 }, { 0, 240 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 243 }, { 0, 244 }, { 2, 1 }, { 0, 79 }, { 2, 1 }, { 0, 245 }, { 0, 95 },\r
+      { 10, 1 }, { 2, 1 }, { 0, 255 }, { 4, 1 }, { 2, 1 }, { 0, 246 }, { 0, 111 }, { 2, 1 },\r
+      { 0, 247 }, { 0, 127 }, { 12, 1 }, { 6, 1 }, { 2, 1 }, { 0, 143 }, { 2, 1 }, { 0, 248 },\r
+      { 0, 249 }, { 4, 1 }, { 2, 1 }, { 0, 159 }, { 0, 250 }, { 0, 175 }, { 8, 1 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 251 }, { 0, 191 }, { 2, 1 }, { 0, 252 }, { 0, 207 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 253 }, { 0, 223 }, { 2, 1 }, { 0, 254 }, { 0, 239 }, };\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab24[][] = { { 60, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 0 }, { 0, 16 },\r
+      { 2, 1 }, { 0, 1 }, { 0, 17 }, { 14, 1 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 32 }, { 0, 2 },\r
+      { 0, 33 }, { 2, 1 }, { 0, 18 }, { 2, 1 }, { 0, 34 }, { 2, 1 }, { 0, 48 }, { 0, 3 },\r
+      { 14, 1 }, { 4, 1 }, { 2, 1 }, { 0, 49 }, { 0, 19 }, { 4, 1 }, { 2, 1 }, { 0, 50 },\r
+      { 0, 35 }, { 4, 1 }, { 2, 1 }, { 0, 64 }, { 0, 4 }, { 0, 65 }, { 8, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 20 }, { 0, 51 }, { 2, 1 }, { 0, 66 }, { 0, 36 }, { 6, 1 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 67 }, { 0, 52 }, { 0, 81 }, { 6, 1 }, { 4, 1 }, { 2, 1 }, { 0, 80 }, { 0, 5 },\r
+      { 0, 21 }, { 2, 1 }, { 0, 82 }, { 0, 37 }, { 250, 1 }, { 98, 1 }, { 34, 1 }, { 18, 1 },\r
+      { 10, 1 }, { 4, 1 }, { 2, 1 }, { 0, 68 }, { 0, 83 }, { 2, 1 }, { 0, 53 }, { 2, 1 },\r
+      { 0, 96 }, { 0, 6 }, { 4, 1 }, { 2, 1 }, { 0, 97 }, { 0, 22 }, { 2, 1 }, { 0, 98 },\r
+      { 0, 38 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 84 }, { 0, 69 }, { 2, 1 }, { 0, 99 },\r
+      { 0, 54 }, { 4, 1 }, { 2, 1 }, { 0, 113 }, { 0, 85 }, { 2, 1 }, { 0, 100 }, { 0, 70 },\r
+      { 32, 1 }, { 14, 1 }, { 6, 1 }, { 2, 1 }, { 0, 114 }, { 2, 1 }, { 0, 39 }, { 0, 55 },\r
+      { 2, 1 }, { 0, 115 }, { 4, 1 }, { 2, 1 }, { 0, 112 }, { 0, 7 }, { 0, 23 }, { 10, 1 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 101 }, { 0, 86 }, { 4, 1 }, { 2, 1 }, { 0, 128 }, { 0, 8 },\r
+      { 0, 129 }, { 4, 1 }, { 2, 1 }, { 0, 116 }, { 0, 71 }, { 2, 1 }, { 0, 24 }, { 0, 130 },\r
+      { 16, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 40 }, { 0, 102 }, { 2, 1 }, { 0, 131 },\r
+      { 0, 56 }, { 4, 1 }, { 2, 1 }, { 0, 117 }, { 0, 87 }, { 2, 1 }, { 0, 132 }, { 0, 72 },\r
+      { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 145 }, { 0, 25 }, { 2, 1 }, { 0, 146 }, { 0, 118 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 103 }, { 0, 41 }, { 2, 1 }, { 0, 133 }, { 0, 88 }, { 92, 1 },\r
+      { 34, 1 }, { 16, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 147 }, { 0, 57 }, { 2, 1 },\r
+      { 0, 148 }, { 0, 73 }, { 4, 1 }, { 2, 1 }, { 0, 119 }, { 0, 134 }, { 2, 1 }, { 0, 104 },\r
+      { 0, 161 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 162 }, { 0, 42 }, { 2, 1 }, { 0, 149 },\r
+      { 0, 89 }, { 4, 1 }, { 2, 1 }, { 0, 163 }, { 0, 58 }, { 2, 1 }, { 0, 135 }, { 2, 1 },\r
+      { 0, 120 }, { 0, 74 }, { 22, 1 }, { 12, 1 }, { 4, 1 }, { 2, 1 }, { 0, 164 }, { 0, 150 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 105 }, { 0, 177 }, { 2, 1 }, { 0, 27 }, { 0, 165 }, { 6, 1 },\r
+      { 2, 1 }, { 0, 178 }, { 2, 1 }, { 0, 90 }, { 0, 43 }, { 2, 1 }, { 0, 136 }, { 0, 179 },\r
+      { 16, 1 }, { 10, 1 }, { 6, 1 }, { 2, 1 }, { 0, 144 }, { 2, 1 }, { 0, 9 }, { 0, 160 },\r
+      { 2, 1 }, { 0, 151 }, { 0, 121 }, { 4, 1 }, { 2, 1 }, { 0, 166 }, { 0, 106 }, { 0, 180 },\r
+      { 12, 1 }, { 6, 1 }, { 2, 1 }, { 0, 26 }, { 2, 1 }, { 0, 10 }, { 0, 176 }, { 2, 1 },\r
+      { 0, 59 }, { 2, 1 }, { 0, 11 }, { 0, 192 }, { 4, 1 }, { 2, 1 }, { 0, 75 }, { 0, 193 },\r
+      { 2, 1 }, { 0, 152 }, { 0, 137 }, { 67, 1 }, { 34, 1 }, { 16, 1 }, { 8, 1 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 28 }, { 0, 181 }, { 2, 1 }, { 0, 91 }, { 0, 194 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 44 }, { 0, 167 }, { 2, 1 }, { 0, 122 }, { 0, 195 }, { 10, 1 }, { 6, 1 }, { 2, 1 },\r
+      { 0, 60 }, { 2, 1 }, { 0, 12 }, { 0, 208 }, { 2, 1 }, { 0, 182 }, { 0, 107 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 196 }, { 0, 76 }, { 2, 1 }, { 0, 153 }, { 0, 168 }, { 16, 1 }, { 8, 1 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 138 }, { 0, 197 }, { 2, 1 }, { 0, 92 }, { 0, 209 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 183 }, { 0, 123 }, { 2, 1 }, { 0, 29 }, { 0, 210 }, { 9, 1 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 45 }, { 0, 211 }, { 2, 1 }, { 0, 61 }, { 0, 198 }, { 85, 250 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 108 }, { 0, 169 }, { 2, 1 }, { 0, 154 }, { 0, 212 }, { 32, 1 }, { 16, 1 },\r
+      { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 184 }, { 0, 139 }, { 2, 1 }, { 0, 77 }, { 0, 199 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 124 }, { 0, 213 }, { 2, 1 }, { 0, 93 }, { 0, 225 }, { 8, 1 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 30 }, { 0, 226 }, { 2, 1 }, { 0, 170 }, { 0, 185 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 155 }, { 0, 227 }, { 2, 1 }, { 0, 214 }, { 0, 109 }, { 20, 1 }, { 10, 1 },\r
+      { 6, 1 }, { 2, 1 }, { 0, 62 }, { 2, 1 }, { 0, 46 }, { 0, 78 }, { 2, 1 }, { 0, 200 },\r
+      { 0, 140 }, { 4, 1 }, { 2, 1 }, { 0, 228 }, { 0, 215 }, { 4, 1 }, { 2, 1 }, { 0, 125 },\r
+      { 0, 171 }, { 0, 229 }, { 10, 1 }, { 4, 1 }, { 2, 1 }, { 0, 186 }, { 0, 94 }, { 2, 1 },\r
+      { 0, 201 }, { 2, 1 }, { 0, 156 }, { 0, 110 }, { 8, 1 }, { 2, 1 }, { 0, 230 }, { 2, 1 },\r
+      { 0, 13 }, { 2, 1 }, { 0, 224 }, { 0, 14 }, { 4, 1 }, { 2, 1 }, { 0, 216 }, { 0, 141 },\r
+      { 2, 1 }, { 0, 187 }, { 0, 202 }, { 74, 1 }, { 2, 1 }, { 0, 255 }, { 64, 1 }, { 58, 1 },\r
+      { 32, 1 }, { 16, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 172 }, { 0, 231 }, { 2, 1 },\r
+      { 0, 126 }, { 0, 217 }, { 4, 1 }, { 2, 1 }, { 0, 157 }, { 0, 232 }, { 2, 1 }, { 0, 142 },\r
+      { 0, 203 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 188 }, { 0, 218 }, { 2, 1 }, { 0, 173 },\r
+      { 0, 233 }, { 4, 1 }, { 2, 1 }, { 0, 158 }, { 0, 204 }, { 2, 1 }, { 0, 219 }, { 0, 189 },\r
+      { 16, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 234 }, { 0, 174 }, { 2, 1 }, { 0, 220 },\r
+      { 0, 205 }, { 4, 1 }, { 2, 1 }, { 0, 235 }, { 0, 190 }, { 2, 1 }, { 0, 221 }, { 0, 236 },\r
+      { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 206 }, { 0, 237 }, { 2, 1 }, { 0, 222 }, { 0, 238 },\r
+      { 0, 15 }, { 4, 1 }, { 2, 1 }, { 0, 240 }, { 0, 31 }, { 0, 241 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 242 }, { 0, 47 }, { 2, 1 }, { 0, 243 }, { 0, 63 }, { 18, 1 }, { 8, 1 }, { 4, 1 },\r
+      { 2, 1 }, { 0, 244 }, { 0, 79 }, { 2, 1 }, { 0, 245 }, { 0, 95 }, { 4, 1 }, { 2, 1 },\r
+      { 0, 246 }, { 0, 111 }, { 2, 1 }, { 0, 247 }, { 2, 1 }, { 0, 127 }, { 0, 143 }, { 10, 1 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 248 }, { 0, 249 }, { 4, 1 }, { 2, 1 }, { 0, 159 }, { 0, 175 },\r
+      { 0, 250 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 251 }, { 0, 191 }, { 2, 1 }, { 0, 252 },\r
+      { 0, 207 }, { 4, 1 }, { 2, 1 }, { 0, 253 }, { 0, 223 }, { 2, 1 }, { 0, 254 }, { 0, 239 }, };\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab32[][] = { { 2, 1 }, { 0, 0 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 8 },\r
+      { 0, 4 }, { 2, 1 }, { 0, 1 }, { 0, 2 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 12 }, { 0, 10 },\r
+      { 2, 1 }, { 0, 3 }, { 0, 6 }, { 6, 1 }, { 2, 1 }, { 0, 9 }, { 2, 1 }, { 0, 5 }, { 0, 7 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 14 }, { 0, 13 }, { 2, 1 }, { 0, 15 }, { 0, 11 }, };\r
+\r
+  @LOC("FINAL")\r
+  private static int ValTab33[][] = { { 16, 1 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 0 }, { 0, 1 },\r
+      { 2, 1 }, { 0, 2 }, { 0, 3 }, { 4, 1 }, { 2, 1 }, { 0, 4 }, { 0, 5 }, { 2, 1 }, { 0, 6 },\r
+      { 0, 7 }, { 8, 1 }, { 4, 1 }, { 2, 1 }, { 0, 8 }, { 0, 9 }, { 2, 1 }, { 0, 10 }, { 0, 11 },\r
+      { 4, 1 }, { 2, 1 }, { 0, 12 }, { 0, 13 }, { 2, 1 }, { 0, 14 }, { 0, 15 }, };\r
+\r
+  @LOC("FINAL")\r
+  public static huffcodetab[] ht = null; /* Simulate extern struct */\r
+\r
+  @LOC("FINAL")\r
+  private static int[] bitbuf = new int[32];\r
+\r
   /**\r
    * Big Constructor : Computes all Huffman Tables.\r
    */\r
   /**\r
    * Big Constructor : Computes all Huffman Tables.\r
    */\r
-  private huffcodetab(@LOC("V") String S,@LOC("V") int XLEN, @LOC("V") int YLEN, @LOC("V") int LINBITS,\r
-                     @LOC("V") int LINMAX, @LOC("V") int REF,@LOC("V") int[] TABLE, @LOC("V") int[] HLEN, \r
-                      @LOC("V") int[][] VAL, @LOC("V") int TREELEN)                     \r
-  {\r
+  private huffcodetab(@LOC("V") String S, @LOC("V") int XLEN, @LOC("V") int YLEN,\r
+      @LOC("V") int LINBITS, @LOC("V") int LINMAX, @LOC("V") int REF, @LOC("V") int[] TABLE,\r
+      @LOC("V") int[] HLEN, @LOC("V") int[][] VAL, @LOC("V") int TREELEN) {\r
     tablename0 = S.charAt(0);\r
     tablename0 = S.charAt(0);\r
-       tablename1 = S.charAt(1);\r
-       tablename2 = S.charAt(2);\r
+    tablename1 = S.charAt(1);\r
+    tablename2 = S.charAt(2);\r
     xlen = XLEN;\r
     ylen = YLEN;\r
     linbits = LINBITS;\r
     xlen = XLEN;\r
     ylen = YLEN;\r
     linbits = LINBITS;\r
@@ -444,165 +501,168 @@ final class huffcodetab
     treelen = TREELEN;\r
   }\r
 \r
     treelen = TREELEN;\r
   }\r
 \r
-  \r
-  \r
   /**\r
   /**\r
-   * Do the huffman-decoding.\r
-   * note! for counta,countb -the 4 bit value is returned in y,\r
-   * discard x.\r
+   * Do the huffman-decoding. note! for counta,countb -the 4 bit value is\r
+   * returned in y, discard x.\r
    */\r
   @LATTICE("X<Y,V<Y,W<Y,Y<VAR,VAR<IN,OUT<IN,VAR*,Y*,X*,V*,W*,THISLOC=IN,GLOBALLOC=IN")\r
   @RETURNLOC("OUT")\r
    */\r
   @LATTICE("X<Y,V<Y,W<Y,Y<VAR,VAR<IN,OUT<IN,VAR*,Y*,X*,V*,W*,THISLOC=IN,GLOBALLOC=IN")\r
   @RETURNLOC("OUT")\r
-  public static int huffman_decoder(@LOC("IN") huffcodetab h, @LOC("X") int[] x, @LOC("Y") int[] y, @LOC("V") int[] v, @LOC("W") int[] w, @LOC("IN") BitReserve br)\r
-  {\r
-       // array of all huffcodtable headers\r
-       // 0..31 Huffman code table 0..31\r
-       // 32,33 count1-tables\r
-\r
-        @LOC("IN") int dmask = 1 << ((4 * 8) - 1);\r
-       @LOC("IN") int hs    = 4 * 8;\r
-       @LOC("VAR") int level;\r
-       @LOC("VAR") int point = 0;\r
-       @LOC("OUT") int error = 1;\r
-       level = dmask;\r
-\r
-       if (h.val == null) return 2;\r
-\r
-     /* table 0 needs no bits */\r
-     if ( h.treelen == 0)\r
-        {   \r
-          y[0] = 0;\r
-          x[0] = 0;\r
-          return 0;\r
-     }\r
-\r
-     /* Lookup in Huffman table. */\r
-\r
-        /*int bitsAvailable = 0;        \r
-        int bitIndex = 0;\r
-        \r
-        int bits[] = bitbuf;*/\r
-        do \r
-        {\r
-           if (h.val[point][0]==0)\r
-           {   /*end of tree*/\r
-                  x[0] = h.val[point][1] >>> 4;\r
-                  y[0] = h.val[point][1] & 0xf;\r
-                  error = 0;\r
-                  break;\r
-           }\r
-           \r
-               // hget1bit() is called thousands of times, and so needs to be\r
-               // ultra fast. \r
-               /*\r
-               if (bitIndex==bitsAvailable)\r
-               {\r
-                       bitsAvailable = br.readBits(bits, 32);                  \r
-                       bitIndex = 0;\r
-               }\r
-               */\r
-               //if (bits[bitIndex++]!=0)\r
-               if (br.hget1bit()!=0)\r
-               {\r
-                  while (h.val[point][1] >= MXOFF) point += h.val[point][1];\r
-                  point += h.val[point][1];\r
-           }\r
-           else\r
-               {\r
-                  while (h.val[point][0] >= MXOFF) point += h.val[point][0];\r
-                  point += h.val[point][0];\r
-           }\r
-           level >>>= 1;\r
-               // MDM: ht[0] is always 0;\r
-        } while ((level !=0 )  || (point < 0 /*ht[0].treelen*/) );\r
-               \r
-               // put back any bits not consumed\r
-       /*      \r
-        int unread = (bitsAvailable-bitIndex);\r
-               if (unread>0)\r
-                       br.rewindNbits(unread);\r
-        */\r
-         /* Process sign encodings for quadruples tables. */\r
-      // System.out.println(h.tablename);\r
-         if (h.tablename0 == '3' && (h.tablename1 == '2' || h.tablename1 == '3'))\r
-         {\r
-               v[0] = (y[0]>>3) & 1;\r
-               w[0] = (y[0]>>2) & 1;\r
-               x[0] = (y[0]>>1) & 1;\r
-               y[0] = y[0] & 1;\r
-\r
-           /* v, w, x and y are reversed in the bitstream.\r
-                 switch them around to make test bistream work. */\r
-\r
-               if (v[0]!=0)\r
-                 if (br.hget1bit() != 0) v[0] = -v[0];\r
-               if (w[0]!=0)\r
-                 if (br.hget1bit() != 0) w[0] = -w[0];\r
-               if (x[0]!=0)\r
-                 if (br.hget1bit() != 0) x[0] = -x[0];\r
-               if (y[0]!=0)\r
-                 if (br.hget1bit() != 0) y[0] = -y[0];\r
-           }\r
-          else\r
-          {\r
-                 // Process sign and escape encodings for dual tables.\r
-                 // x and y are reversed in the test bitstream.\r
-                 // Reverse x and y here to make test bitstream work.\r
-\r
-             if (h.linbits != 0)\r
-                  if ((h.xlen-1) == x[0])\r
-                       x[0] += br.hgetbits(h.linbits);\r
-                 if (x[0] != 0)\r
-                         if (br.hget1bit() != 0) x[0] = -x[0];\r
-                 if (h.linbits != 0)\r
-                        if ((h.ylen-1) == y[0])\r
-                               y[0] += br.hgetbits(h.linbits);\r
-                 if (y[0] != 0)\r
-                         if (br.hget1bit() != 0) y[0] = -y[0];\r
-          }\r
-          return error;\r
+  // public static int huffman_decoder(/* @LOC("IN") huffcodetab h, */@LOC("IN")\r
+  // int idx,\r
+  // @LOC("X") int[] x, @LOC("Y") int[] y, @LOC("V") int[] v, @LOC("W") int[] w,\r
+  // @LOC("IN") BitReserve br) {\r
+  public static HuffData huffman_decoder(@LOC("IN") int idx, @LOC("IN") HuffData data) {\r
+    // array of all huffcodtable headers\r
+    // 0..31 Huffman code table 0..31\r
+    // 32,33 count1-tables\r
+\r
+    @LOC("IN") int dmask = 1 << ((4 * 8) - 1);\r
+    @LOC("IN") int hs = 4 * 8;\r
+    @LOC("VAR") int level;\r
+    @LOC("VAR") int point = 0;\r
+    @LOC("OUT") int error = 1;\r
+    level = dmask;\r
+\r
+    if (ht[idx].val == null){\r
+//      return 2;\r
+      return data;\r
+    }\r
+\r
+    /* table 0 needs no bits */\r
+    if (ht[idx].treelen == 0) {\r
+      data.y = 0;\r
+      data.x = 0;\r
+//      return 0;\r
+      return data;\r
+    }\r
+\r
+    /* Lookup in Huffman table. */\r
+\r
+    /*\r
+     * int bitsAvailable = 0; int bitIndex = 0;\r
+     * \r
+     * int bits[] = bitbuf;\r
+     */\r
+    do {\r
+      if (ht[idx].val[point][0] == 0) { /* end of tree */\r
+        data.x = ht[idx].val[point][1] >>> 4;\r
+        data.y = ht[idx].val[point][1] & 0xf;\r
+        error = 0;\r
+        break;\r
+      }\r
+\r
+      // hget1bit() is called thousands of times, and so needs to be\r
+      // ultra fast.\r
+      /*\r
+       * if (bitIndex==bitsAvailable) { bitsAvailable = br.readBits(bits, 32);\r
+       * bitIndex = 0; }\r
+       */\r
+      // if (bits[bitIndex++]!=0)\r
+      if (data.br.hget1bit() != 0) {\r
+        while (ht[idx].val[point][1] >= MXOFF)\r
+          point += ht[idx].val[point][1];\r
+        point += ht[idx].val[point][1];\r
+      } else {\r
+        while (ht[idx].val[point][0] >= MXOFF)\r
+          point += ht[idx].val[point][0];\r
+        point += ht[idx].val[point][0];\r
+      }\r
+      level >>>= 1;\r
+      // MDM: ht[0] is always 0;\r
+    } while ((level != 0) || (point < 0 /* ht[0].treelen */));\r
+\r
+    // put back any bits not consumed\r
+    /*\r
+     * int unread = (bitsAvailable-bitIndex); if (unread>0)\r
+     * br.rewindNbits(unread);\r
+     */\r
+    /* Process sign encodings for quadruples tables. */\r
+    // System.out.println(h.tablename);\r
+    if (ht[idx].tablename0 == '3' && (ht[idx].tablename1 == '2' || ht[idx].tablename1 == '3')) {\r
+      data.v = (data.y >> 3) & 1;\r
+      data.w = (data.y >> 2) & 1;\r
+      data.x = (data.y >> 1) & 1;\r
+      data.y = data.y & 1;\r
+\r
+      /*\r
+       * v, w, x and y are reversed in the bitstream. switch them around to make\r
+       * test bistream work.\r
+       */\r
+\r
+      if (data.v != 0)\r
+        if (data.br.hget1bit() != 0)\r
+          data.v = -data.v;\r
+      if (data.w != 0)\r
+        if (data.br.hget1bit() != 0)\r
+          data.w = -data.w;\r
+      if (data.x != 0)\r
+        if (data.br.hget1bit() != 0)\r
+          data.x = -data.x;\r
+      if (data.y != 0)\r
+        if (data.br.hget1bit() != 0)\r
+          data.y = -data.y;\r
+    } else {\r
+      // Process sign and escape encodings for dual tables.\r
+      // x and y are reversed in the test bitstream.\r
+      // Reverse x and y here to make test bitstream work.\r
+\r
+      if (ht[idx].linbits != 0)\r
+        if ((ht[idx].xlen - 1) == data.x)\r
+          data.x += data.br.hgetbits(ht[idx].linbits);\r
+      if (data.x != 0)\r
+        if (data.br.hget1bit() != 0)\r
+          data.x = -data.x;\r
+      if (ht[idx].linbits != 0)\r
+        if ((ht[idx].ylen - 1) == data.y)\r
+          data.y += data.br.hgetbits(ht[idx].linbits);\r
+      if (data.y != 0)\r
+        if (data.br.hget1bit() != 0)\r
+          data.y = -data.y;\r
+    }\r
+    \r
+    return data;\r
+//    return error;\r
   }\r
 \r
   }\r
 \r
-  public static void inithuff()\r
-  {\r
-       \r
-       if (ht!=null)\r
-               return;\r
-       \r
+  public static void inithuff() {\r
+\r
+    if (ht != null)\r
+      return;\r
+\r
     ht = new huffcodetab[HTN];\r
     ht = new huffcodetab[HTN];\r
-    ht[0] = new huffcodetab("0  ",0,0,0,0,-1,null,null,ValTab0,0);\r
-    ht[1] = new huffcodetab("1  ",2,2,0,0,-1,null,null,ValTab1,7);\r
-    ht[2] = new huffcodetab("2  ",3,3,0,0,-1,null,null,ValTab2,17);\r
-    ht[3] = new huffcodetab("3  ",3,3,0,0,-1,null,null,ValTab3,17);\r
-    ht[4] = new huffcodetab("4  ",0,0,0,0,-1,null,null,ValTab4,0);    \r
-    ht[5] = new huffcodetab("5  ",4,4,0,0,-1,null,null,ValTab5,31);\r
-    ht[6] = new huffcodetab("6  ",4,4,0,0,-1,null,null,ValTab6,31);\r
-    ht[7] = new huffcodetab("7  ",6,6,0,0,-1,null,null,ValTab7,71);\r
-    ht[8] = new huffcodetab("8  ",6,6,0,0,-1,null,null,ValTab8,71);\r
-    ht[9] = new huffcodetab("9  ",6,6,0,0,-1,null,null,ValTab9,71);\r
-    ht[10] = new huffcodetab("10 ",8,8,0,0,-1,null,null,ValTab10,127);  \r
-    ht[11] = new huffcodetab("11 ",8,8,0,0,-1,null,null,ValTab11,127);\r
-    ht[12] = new huffcodetab("12 ",8,8,0,0,-1,null,null,ValTab12,127);\r
-    ht[13] = new huffcodetab("13 ",16,16,0,0,-1,null,null,ValTab13,511);\r
-    ht[14] = new huffcodetab("14 ",0,0,0,0,-1,null,null,ValTab14,0);\r
-    ht[15] = new huffcodetab("15 ",16,16,0,0,-1,null,null,ValTab15,511);\r
-    ht[16] = new huffcodetab("16 ",16,16,1,1,-1,null,null,ValTab16,511);\r
-    ht[17] = new huffcodetab("17 ",16,16,2,3,16,null,null,ValTab16,511);\r
-    ht[18] = new huffcodetab("18 ",16,16,3,7,16,null,null,ValTab16,511);\r
-    ht[19] = new huffcodetab("19 ",16,16,4,15,16,null,null,ValTab16,511);\r
-    ht[20] = new huffcodetab("20 ",16,16,6,63,16,null,null,ValTab16,511);\r
-    ht[21] = new huffcodetab("21 ",16,16,8,255,16,null,null,ValTab16,511);\r
-    ht[22] = new huffcodetab("22 ",16,16,10,1023,16,null,null,ValTab16,511);\r
-    ht[23] = new huffcodetab("23 ",16,16,13,8191,16,null,null,ValTab16,511);\r
-    ht[24] = new huffcodetab("24 ",16,16,4,15,-1,null,null,ValTab24,512);\r
-    ht[25] = new huffcodetab("25 ",16,16,5,31,24,null,null,ValTab24,512);\r
-    ht[26] = new huffcodetab("26 ",16,16,6,63,24,null,null,ValTab24,512);\r
-    ht[27] = new huffcodetab("27 ",16,16,7,127,24,null,null,ValTab24,512);\r
-    ht[28] = new huffcodetab("28 ",16,16,8,255,24,null,null,ValTab24,512);  \r
-    ht[29] = new huffcodetab("29 ",16,16,9,511,24,null,null,ValTab24,512);\r
-    ht[30] = new huffcodetab("30 ",16,16,11,2047,24,null,null,ValTab24,512);\r
-    ht[31] = new huffcodetab("31 ",16,16,13,8191,24,null,null,ValTab24,512);\r
-    ht[32] = new huffcodetab("32 ",1,16,0,0,-1,null,null,ValTab32,31);\r
-    ht[33] = new huffcodetab("33 ",1,16,0,0,-1,null,null,ValTab33,31);\r
+    ht[0] = new huffcodetab("0  ", 0, 0, 0, 0, -1, null, null, ValTab0, 0);\r
+    ht[1] = new huffcodetab("1  ", 2, 2, 0, 0, -1, null, null, ValTab1, 7);\r
+    ht[2] = new huffcodetab("2  ", 3, 3, 0, 0, -1, null, null, ValTab2, 17);\r
+    ht[3] = new huffcodetab("3  ", 3, 3, 0, 0, -1, null, null, ValTab3, 17);\r
+    ht[4] = new huffcodetab("4  ", 0, 0, 0, 0, -1, null, null, ValTab4, 0);\r
+    ht[5] = new huffcodetab("5  ", 4, 4, 0, 0, -1, null, null, ValTab5, 31);\r
+    ht[6] = new huffcodetab("6  ", 4, 4, 0, 0, -1, null, null, ValTab6, 31);\r
+    ht[7] = new huffcodetab("7  ", 6, 6, 0, 0, -1, null, null, ValTab7, 71);\r
+    ht[8] = new huffcodetab("8  ", 6, 6, 0, 0, -1, null, null, ValTab8, 71);\r
+    ht[9] = new huffcodetab("9  ", 6, 6, 0, 0, -1, null, null, ValTab9, 71);\r
+    ht[10] = new huffcodetab("10 ", 8, 8, 0, 0, -1, null, null, ValTab10, 127);\r
+    ht[11] = new huffcodetab("11 ", 8, 8, 0, 0, -1, null, null, ValTab11, 127);\r
+    ht[12] = new huffcodetab("12 ", 8, 8, 0, 0, -1, null, null, ValTab12, 127);\r
+    ht[13] = new huffcodetab("13 ", 16, 16, 0, 0, -1, null, null, ValTab13, 511);\r
+    ht[14] = new huffcodetab("14 ", 0, 0, 0, 0, -1, null, null, ValTab14, 0);\r
+    ht[15] = new huffcodetab("15 ", 16, 16, 0, 0, -1, null, null, ValTab15, 511);\r
+    ht[16] = new huffcodetab("16 ", 16, 16, 1, 1, -1, null, null, ValTab16, 511);\r
+    ht[17] = new huffcodetab("17 ", 16, 16, 2, 3, 16, null, null, ValTab16, 511);\r
+    ht[18] = new huffcodetab("18 ", 16, 16, 3, 7, 16, null, null, ValTab16, 511);\r
+    ht[19] = new huffcodetab("19 ", 16, 16, 4, 15, 16, null, null, ValTab16, 511);\r
+    ht[20] = new huffcodetab("20 ", 16, 16, 6, 63, 16, null, null, ValTab16, 511);\r
+    ht[21] = new huffcodetab("21 ", 16, 16, 8, 255, 16, null, null, ValTab16, 511);\r
+    ht[22] = new huffcodetab("22 ", 16, 16, 10, 1023, 16, null, null, ValTab16, 511);\r
+    ht[23] = new huffcodetab("23 ", 16, 16, 13, 8191, 16, null, null, ValTab16, 511);\r
+    ht[24] = new huffcodetab("24 ", 16, 16, 4, 15, -1, null, null, ValTab24, 512);\r
+    ht[25] = new huffcodetab("25 ", 16, 16, 5, 31, 24, null, null, ValTab24, 512);\r
+    ht[26] = new huffcodetab("26 ", 16, 16, 6, 63, 24, null, null, ValTab24, 512);\r
+    ht[27] = new huffcodetab("27 ", 16, 16, 7, 127, 24, null, null, ValTab24, 512);\r
+    ht[28] = new huffcodetab("28 ", 16, 16, 8, 255, 24, null, null, ValTab24, 512);\r
+    ht[29] = new huffcodetab("29 ", 16, 16, 9, 511, 24, null, null, ValTab24, 512);\r
+    ht[30] = new huffcodetab("30 ", 16, 16, 11, 2047, 24, null, null, ValTab24, 512);\r
+    ht[31] = new huffcodetab("31 ", 16, 16, 13, 8191, 24, null, null, ValTab24, 512);\r
+    ht[32] = new huffcodetab("32 ", 1, 16, 0, 0, -1, null, null, ValTab32, 31);\r
+    ht[33] = new huffcodetab("33 ", 1, 16, 0, 0, -1, null, null, ValTab33, 31);\r
   }\r
 }\r
   }\r
 }\r