         var dictionarySize = pointerData.intFromAlingedBytes(count: 4)
         dictionarySize = dictionarySize < (1 << 12) ? 1 << 12 : dictionarySize
 
-        print("lc: \(lc), lp: \(lp), pb: \(pb), dictionarySize: \(dictionarySize)")
+//        print("lc: \(lc), lp: \(lp), pb: \(pb), dictionarySize: \(dictionarySize)")
 
         /// Size of uncompressed data. -1 means it is unknown.
         var uncompressedSize = pointerData.intFromAlingedBytes(count: 8)

                rep1 = rep0
                len = lenDecoder.decode(with: &rangeDecoder, posState: posState, pointerData: &pointerData)
                state = state < 7 ? 7 : 10
                rep0 = decodeDistance(len)
                // Check if finished marker is encoutered.
                if rep0 == 0xFFFFFFFF {
                    if rangeDecoder.isFinishedOK {

                if uncompressedSize == 0 {
                    // TODO: throw error
                }

                // DECODE LITERAL:
                let prevByte = outWindow.isEmpty ? 0 : outWindow.byte(at: 1)
                // TODO: Something is not quite right.
                var symbol = 1
                let litState = ((outWindow.totalPosition & ((1 << lp.toInt()) - 1)) << lc.toInt()) + (prevByte >> (8 - lc)).toInt()
                let probsIndex = 0x300 * litState
                if state >= 7 {
                    var matchByte = outWindow.byte(at: rep0 + 1)
                    repeat {
                        let matchBit = ((matchByte >> 7) & 1).toInt()
                        matchByte <<= 1
                        let bit = rangeDecoder.decode(bitWithProb: &literalProbs[((1 + matchBit) << 8) + symbol],
                                                      pointerData: &pointerData)
                        symbol = (symbol << 1) | bit
                        if matchBit != bit {
                            break
                        }
                    } while symbol < 0x100
                }
                while symbol < 0x100 {
                    symbol = (symbol << 1) | rangeDecoder.decode(bitWithProb: &literalProbs[symbol], pointerData: &pointerData)
                }
                let byte = (symbol - 0x100).toUInt8()
                outWindow.put(byte, &out, &outIndex, &uncompressedSize)
                // END.

                if state < 4 {
                    state = 0
                } else if (state < 10) {
