+diff -urN lzma432/C/7zip/Compress/LZMA/LZMADecoder.cpp lzma/C/7zip/Compress/LZMA/LZMADecoder.cpp
+--- lzma432/C/7zip/Compress/LZMA/LZMADecoder.cpp 2005-09-22 12:55:34.000000000 +0400
++++ lzma/C/7zip/Compress/LZMA/LZMADecoder.cpp 2006-03-24 13:23:09.634551840 +0300
+@@ -274,12 +274,17 @@
+ Byte remainder = (Byte)(properties[0] / 9);\r
+ int lp = remainder % 5;\r
+ int pb = remainder / 5;\r
+- if (pb > NLength::kNumPosStatesBitsMax)\r
+- return E_INVALIDARG;\r
+- _posStateMask = (1 << pb) - 1;\r
+ UInt32 dictionarySize = 0;\r
+ for (int i = 0; i < 4; i++)\r
+ dictionarySize += ((UInt32)(properties[1 + i])) << (i * 8);\r
++ return SetDecoderPropertiesRaw(lc, lp, pb, dictionarySize);\r
++}\r
++\r
++STDMETHODIMP CDecoder::SetDecoderPropertiesRaw(int lc, int lp, int pb, UInt32 dictionarySize)\r
++{\r
++ if (pb > NLength::kNumPosStatesBitsMax)\r
++ return E_INVALIDARG;\r
++ _posStateMask = (1 << pb) - 1;\r
+ if (!_outWindowStream.Create(dictionarySize))\r
+ return E_OUTOFMEMORY;\r
+ if (!_literalDecoder.Create(lp, lc))\r
+diff -urN lzma432/C/7zip/Compress/LZMA/LZMADecoder.h lzma/C/7zip/Compress/LZMA/LZMADecoder.h
+--- lzma432/C/7zip/Compress/LZMA/LZMADecoder.h 2005-09-19 10:10:06.000000000 +0400
++++ lzma/C/7zip/Compress/LZMA/LZMADecoder.h 2006-03-24 13:23:09.635551552 +0300
+@@ -228,6 +228,7 @@
+ ICompressProgressInfo *progress);\r
+ \r
+ STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size);\r
++ STDMETHOD(SetDecoderPropertiesRaw)(int lc, int lp, int pb, UInt32 dictionarySize);\r
+ \r
+ STDMETHOD(GetInStreamProcessedSize)(UInt64 *value);\r
+ \r
+diff -urN lzma432/C/7zip/Compress/LZMA_Lib/makefile lzma/C/7zip/Compress/LZMA_Lib/makefile
+--- lzma432/C/7zip/Compress/LZMA_Lib/makefile 1970-01-01 03:00:00.000000000 +0300
++++ lzma/C/7zip/Compress/LZMA_Lib/makefile 2006-03-24 13:26:58.254841791 +0300