docs: function RarReadTables(bstream) {
      var BitLength = new Array(RarUtils.CONST.rBC),
          Table = new Array(RarUtils.CONST.rHUFF_TABLE_SIZE);
  
      // before we start anything we need to get byte-aligned
      bstream.readBits((8 - bstream.bitPtr) & 0x7);
  
      if (bstream.readBits(1)) {
          console.info("Error!  PPM not implemented yet");
          return;
      }
  
      if (!bstream.readBits(1)) { //discard old table
          for (var i = UnpOldTable.length; i--;) UnpOldTable[i] = 0;
      }
  
      // read in bit lengths
      for (var I = 0; I < RarUtils.CONST.rBC; ++I) {
  
          var Length = bstream.readBits(4);
          if (Length == 15) {
              var ZeroCount = bstream.readBits(4);
              if (ZeroCount == 0) {
                  BitLength[I] = 15;
              } else {
                  ZeroCount += 2;
                  while (ZeroCount-- > 0 && I < RarUtils.CONST.rBC)
                      BitLength[I++] = 0;
                  --I;
              }
          } else {
              BitLength[I] = Length;
          }
      }
  
      // now all 20 bit lengths are obtained, we construct the Huffman Table:
  
      RarUtils.RarMakeDecodeTables(BitLength, 0, RarUtils.CONST.BD, RarUtils.CONST.rBC);
  
      var TableSize = RarUtils.CONST.rHUFF_TABLE_SIZE;
      //console.log(DecodeLen, DecodePos, DecodeNum);
      for (var i = 0; i < TableSize;) {
          var num = RarUtils.RarDecodeNumber(bstream, RarUtils.CONST.BD);
          if (num < 16) {
              Table[i] = (num + UnpOldTable[i]) & 0xf;
              i++;
          } else if (num < 18) {
              var N = (num == 16) ? (bstream.readBits(3) + 3) : (bstream.readBits(7) + 11);
  
              while (N-- > 0 && i < TableSize) {
                  Table[i] = Table[i - 1];
                  i++;
              }
          } else {
              var N = (num == 18) ? (bstream.readBits(3) + 3) : (bstream.readBits(7) + 11);
  
              while (N-- > 0 && i < TableSize) {
                  Table[i++] = 0;
              }
          }
      }
  
      RarUtils.RarMakeDecodeTables(Table, 0, RarUtils.CONST.LD, RarUtils.CONST.rNC);
      RarUtils.RarMakeDecodeTables(Table, RarUtils.CONST.rNC, RarUtils.CONST.DD, RarUtils.CONST.rDC);
      RarUtils.RarMakeDecodeTables(Table, RarUtils.CONST.rNC + RarUtils.CONST.rDC, RarUtils.CONST.LDD, RarUtils.CONST.rLDC);
      RarUtils.RarMakeDecodeTables(Table, RarUtils.CONST.rNC + RarUtils.CONST.rDC + RarUtils.CONST.rLDC, RarUtils.CONST.RD, RarUtils.CONST.rRC);
  
      for (var i = UnpOldTable.length; i--;) {
          UnpOldTable[i] = Table[i];
      }
      return true;
  }