def decode!
            self.decrypt! if self.is_a?(Encryption::EncryptedStream)
            return if decoded?

            filters = self.filters
            dparams = decode_params

            @data = @encoded_data.dup
            @data.freeze

            filters.each_with_index do |filter, layer|
                params = dparams[layer].is_a?(Dictionary) ? dparams[layer] : {}

                # Handle Crypt filters.
                if filter == :Crypt
                    raise Filter::Error, "Crypt filter must be the first filter" unless layer.zero?

                    # Skip the Crypt filter.
                    next
                end

                begin
                    @data = decode_data(@data, filter, params)
                rescue Filter::Error => error
                    @data = error.decoded_data
                    raise
                end
            end

            self
        end
def decode!
            self.decrypt! if self.is_a?(Encryption::EncryptedStream)
            return if decoded?

            filters = self.filters
            dparams = decode_params

            @data = @encoded_data.dup
            @data.freeze

            filters.each_with_index do |filter, layer|
                params = dparams[layer].is_a?(Dictionary) ? dparams[layer] : {}

                # Handle Crypt filters.
                if filter == :Crypt
                    raise Filter::Error, "Crypt filter must be the first filter" unless layer.zero?

                    # Skip the Crypt filter.
                    next
                end

                begin
                    @data = decode_data(@data, filter, params)
                rescue Filter::Error => error
                    @data = error.decoded_data
                    raise
                end
            end

            self
        end
Uncompress the stream data.