public static uint ReverseDecode(BitDecoder[] Models, uint startIndex, Decoder rangeDecoder, int NumBitLevels)
 {
     uint num = 1;
     uint num2 = 0;
     for (int i = 0; i < NumBitLevels; i++)
     {
         uint num4 = Models[startIndex + num].Decode(rangeDecoder);
         num = num << 1;
         num += num4;
         num2 |= num4 << i;
     }
     return num2;
 }
 public static uint ReverseDecode(BitDecoder[] Models, UInt32 startIndex,
     RangeCoder.Decoder rangeDecoder, int NumBitLevels)
 {
     uint m = 1;
     uint symbol = 0;
     for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++)
     {
         uint bit = Models[startIndex + m].Decode(rangeDecoder);
         m <<= 1;
         m += bit;
         symbol |= (bit << bitIndex);
     }
     return symbol;
 }