public void process(byte[] cdsData, Action <String> progress) { logger.Debug("process lang"); using (MemoryStream memStream = new MemoryStream(cdsData)) { using (BinaryReader dis = new BinaryReader(memStream)) { int entryCount = dis.ReadInt32(); byte[] freqData = dis.ReadBytes(1024); HuffmanReader reader = new HuffmanReader(freqData); List <int> keys = new List <int>(entryCount); for (int i = 0; i < entryCount; i++) { int key = dis.ReadInt32(); int offset = Util.readUnsignedLeb128_X(dis.BaseStream); keys.Add(key); } for (int i = 0; i < entryCount; i++) { if (progress != null) { progress.Invoke("english " + i + "/" + entryCount); } int compressedSize = Assets.RiftAssets.Util.readUnsignedLeb128_X(dis.BaseStream); int uncompressedSize = Assets.RiftAssets.Util.readUnsignedLeb128_X(dis.BaseStream); byte[] data = dis.ReadBytes(compressedSize); byte[] dataOut = new byte[uncompressedSize]; dataOut = reader.read(data, data.Length, dataOut.Length); LangEntry entry = new LangEntry(); entry.key = keys[i]; entry.cdata = dataOut; stringMap[entry.key] = entry; } } } logger.Debug("done process lang"); progress.Invoke("done"); }