Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1680 → Rev 1681

/programs/other/kpack/trunk/lzma_compress.inc
1,9 → 1,16
kIfinityPrice equ 0x0FFFFFFF
 
;* Call: ***************************************************************
;lzma_compress(
; const void* source,
; void* destination,
; unsigned length,
; void* workmem)
lzma_compress:
push ebp
mov ebp,esp
and esp,0xFFFFFFF8
sub esp,0xC
sub esp,12
push ebx
push esi
push edi
10,13 → 17,13
push 2
pop esi
xor ebx,ebx
mov [esp+0x14],esi
mov [0x19FB0],bl
mov byte [0x19FB1],1
mov [esp+0x10],esi
mov [esp+20],esi
mov [g_FastPos],bl
mov byte [g_FastPos+1],1
mov [esp+16],esi
;----------------------------------------------------------
.labl_00:
mov ecx,[esp+0x10]
mov ecx,[esp+16]
xor edi,edi
sar ecx,1
dec ecx
24,92 → 31,100
shl edi,cl
cmp edi,ebx
jbe .labl_01
mov eax,[esp+0x14]
 
mov eax,[esp+20]
push edi
push dword [esp+0x14]
lea eax,[eax+0x19FB0]
push dword [esp+20]
lea eax,[eax+g_FastPos]
push eax
call _memset
add esp,0xC
add [esp+0x14],edi
add esp,12
add [esp+20],edi
;----------------------------------------------------------
.labl_01:
inc dword [esp+0x10]
cmp dword [esp+0x10],0x14
inc dword [esp+16]
cmp dword [esp+16],20
jl .labl_00
mov edi,[ebp+0x14]
 
mov edi,[ebp+20]
push 3
pop eax
mov ecx,edi
and ecx,eax
mov edx,0x80 ;'€'
mov [0x1CC30],edx
mov [0x51A00],esi
mov [0x1CC34],eax
mov [0x1B234],eax
mov [0x2956C],ebx
mov [0x19FA9],bl
mov [0x19FA8],bl
mov edx,128
mov [_numFastBytes],edx
mov [_posStateBits],esi
mov [_posStateMask],eax
mov [_numLiteralContextBits],eax
mov [_numLiteralPosStateBits],ebx
mov [_writeEndMark],bl
mov [_finished],bl
je .labl_02
 
sub edi,ecx
add edi,4
;----------------------------------------------------------
.labl_02:
mov [0x519F4],eax
mov eax,[0x29568]
mov [0x519F0],edi
;CLiteralEncoder_Create
mov [_numPrevBits],eax
mov eax,[_dictionarySize]
mov [_posEncoders],edi
add edi,0x6000
inc eax
mov [0x519F8],ebx
mov [0x519FC],ebx
mov [0x52218],edx
mov [0x51A0C],eax
mov [0x52224],edi
mov dword [0x52220],0xFF ;'ÿ'
call lz_cm_01
call cm_pr_07
call cm_pr_08
call cm_pr_09
push 0x7F ;''
mov [_numPosBits],ebx
mov [_posMask],ebx
;MatchFinder_Create
mov [_matchMaxLen],edx
mov [_cyclicBufferSize],eax
mov [_hash],edi
mov dword [_cutValue],0xFF
call CEncoder_Init
call FillPosSlotPrices
call FillDistancesPrices
call FillAlignPrices
push 127
pop esi
mov [0x19F64],esi
mov [esp+0x10],ebx
mov [_lenEncoder+0xC88C],esi
mov [esp+16],ebx
;----------------------------------------------------------
.labl_03:
push dword [esp+0x10]
mov eax,0xD6D8
call cm_pr_01
inc dword [esp+0x10]
cmp dword [esp+0x10],4
push dword [esp+16]
mov eax,_lenEncoder
call CPriceTableEncoder_UpdateTable
inc dword [esp+16]
cmp dword [esp+16],4
jb .labl_03
mov [0x294F4],esi
 
mov [_repMatchLenEncoder+0xC88C],esi
xor esi,esi
;----------------------------------------------------------
.labl_04:
push esi
mov eax,0x1CC68
call cm_pr_01
mov eax,_repMatchLenEncoder
call CPriceTableEncoder_UpdateTable
inc esi
cmp esi,4
jb .labl_04
 
mov eax,[ebp+8]
mov esi,[ebp+0xC]
mov esi,[ebp+12]
dec eax
mov [0x52628],eax
mov eax,[ebp+0x10]
mov [_buffer],eax
mov eax,[ebp+16]
inc eax
mov [0x52630],eax
mov [_streamPos],eax
mov ecx,0x110000
xor eax,eax
mov [0x1CC28],ebx
mov [0x1CC2C],ebx
mov [0x1B400],ebx
mov [0x1B404],ebx
mov [0x52634],esi
mov dword [0x5262C],1
mov [lastPosSlotFillingPos],ebx
mov [lastPosSlotFillingPos+4],ebx
mov [nowPos64],ebx
mov [nowPos64+4],ebx
mov [pack_length],esi
mov dword [_pos],1
rep stosd
mov [0x5221C],ebx
mov [pack_pos],ebx
;----------------------------------------------------------
;MatchFinder_Init
.labl_08:
push 8
mov eax,ebx
118,6 → 133,7
.labl_07:
test al,1
je .labl_05
 
shr eax,1
xor eax,0xEDB88320
jmp .labl_06
128,16 → 144,18
.labl_06:
dec ecx
jne .labl_07
mov [0x52228+ebx*4],eax
 
mov [crc_table+ebx*4],eax
inc ebx
cmp ebx,0x100
cmp ebx,256
jb .labl_08
;----------------------------------------------------------
.labl_09:
call lz_cm_02
call CodeOneBlock
test al,al
jne .labl_09
mov eax,[0x52634]
 
mov eax,[pack_length]
pop edi
sub eax,esi
pop esi
144,7 → 162,7
pop ebx
mov esp,ebp
pop ebp
ret 0x10
ret 16
;*****************************************************************************
 
;* Call: ***************************************************************
159,25 → 177,27
;*****************************************************************************
 
;* Call: ***************************************************************
lz_cm_01:
and dword [0x51A10],0
and dword [0x51A14],0
or dword [0x51A04],0xFFFFFFFF
CEncoder_Init:
;RangeEncoder_Init
and dword [low],0
and dword [low+4],0
or dword [range],0xFFFFFFFF
push ebx
push esi
push edi
xor eax,eax
mov edi,0x1BC08
mov edi,_repDistances
stosd
stosd
xor ebx,ebx
stosd
inc ebx
mov byte [0x519EC],0
mov byte [0x19FAB],0
;CBaseState_Init
mov byte [_state],0
mov byte [_previousByte],0
stosd
mov [0x51A08],ebx
mov byte [0x519ED],0
mov [_cacheSize],ebx
mov byte [_cache],0
xor ecx,ecx
;----------------------------------------------------------
.labl_00:
186,7 → 206,7
push 8
pop edx
sub edx,ecx
lea esi,[0x51A18+eax*4]
lea esi,[Models+eax*4]
shl edx,6
;----------------------------------------------------------
.labl_01:
198,102 → 218,107
add esi,4
dec eax
jne .labl_01
 
inc ecx
cmp ecx,9
jl .labl_00
push 0xC
 
push 12
pop edx
mov esi,0x400
mov esi,1024
mov eax,esi
mov ecx,edx
mov edi,0x29538
mov edi,_isRepG2
rep stosd
mov ecx,edx
mov edi,0x1AF00
mov edi,_isRepG1
rep stosd
mov ecx,edx
mov edi,0x1CC38
mov edi,_isRepG0
rep stosd
mov ecx,edx
mov edi,0x515B8
mov edi,_isRep
rep stosd
xor ecx,ecx
;----------------------------------------------------------
.labl_02:
lea edi,[ecx+0x1A7B0]
lea edi,[ecx+_isRep0Long]
mov eax,esi
stosd
stosd
stosd
stosd
lea edi,[ecx+0x1AF30]
lea edi,[ecx+_isMatch]
mov eax,esi
stosd
stosd
stosd
add ecx,0x40 ;'@'
cmp ecx,0x300
add ecx,64
cmp ecx,768
stosd
jl .labl_02
mov eax,[0x519F4]
mov ecx,[0x519F8]
 
mov eax,[_numPrevBits]
mov ecx,[_numPosBits]
add ecx,eax
mov eax,ebx
shl eax,cl
test eax,eax
jbe .labl_04
 
xor edx,edx
mov ebx,eax
;----------------------------------------------------------
.labl_03:
mov eax,[0x519F0]
mov eax,[_posEncoders]
lea edi,[edx+eax]
mov ecx,0x300
mov ecx,768
mov eax,esi
add edx,0xC00
add edx,3072
dec ebx
rep stosd
jne .labl_03
;----------------------------------------------------------
.labl_04:
mov edi,0x1BC18
mov edi,_posSlotEncoder
;----------------------------------------------------------
.labl_05:
push 6
pop ecx
mov eax,edi
call cm_pr_15
add edi,0x404
cmp edi,0x1CC28
call CBitTreeEncoder_Init
add edi,1028
cmp edi,lastPosSlotFillingPos
jl .labl_05
push 0x72 ;'r'
 
push 114
mov eax,esi
pop ecx
mov edi,0x1B238
mov esi,0xD6D8
mov edi,_literalEncoder
mov esi,_lenEncoder
rep stosd
call cm_pr_00
mov esi,0x1CC68
call cm_pr_00
call CPriceTableEncoder_Init
mov esi,_repMatchLenEncoder
call CPriceTableEncoder_Init
push 4
pop ecx
mov eax,0x515E8
call cm_pr_15
mov eax,_posAlignEncoder
call CBitTreeEncoder_Init
pop edi
xor eax,eax
pop esi
mov byte [0x19FAA],0 ;0x1B238
mov [0x29574],eax
mov [0x1AEF8],eax
mov [0x1AEFC],eax
mov byte [_longestMatchWasFound],0
mov [_optimumEndIndex],eax
mov [_optimumCurrentIndex],eax
mov [_additionalOffset],eax
pop ebx
ret
;*****************************************************************************
 
;* Call: ***************************************************************
lz_cm_02:
CodeOneBlock:
sub esp,0x2C
cmp byte [0x19FA8],0
cmp byte [_finished],0
push ebx
push ebp
push esi
305,229 → 330,244
jmp .labl_28
;----------------------------------------------------------
.labl_01:
mov ebp,[0x1B400]
mov edi,[0x1B404]
mov ebp,[nowPos64]
mov edi,[nowPos64+4]
mov eax,ebp
or eax,edi
mov byte [0x19FA8],1
mov [esp+0x34],ebp
mov [esp+0x38],edi
mov byte [_finished],1
mov [esp+52],ebp
mov [esp+56],edi
jne .labl_04
mov eax,[0x52630]
sub eax,[0x5262C]
 
mov eax,[_streamPos]
sub eax,[_pos]
jne .labl_03
 
push 5
pop esi
;----------------------------------------------------------
.labl_02:
call cm_pr_13
call RangeEncoder_ShiftLow
dec esi
jne .labl_02
 
jmp .labl_00
;----------------------------------------------------------
.labl_03:
call cm_pr_06
movzx esi,byte [0x519EC]
call ReadMatchDistances
movzx esi,byte [_state]
mov edx,esi
shl edx,6
xor edi,edi
push edi
add edx,0x1AF30
call cm_pr_14
add edx,_isMatch
call CMyBitEncoder_Encode
mov al,[esi+LiteralNextStates]
mov ecx,[0x5262C]
mov [0x519EC],al
mov eax,[0x52628]
sub eax,[0x1AEFC]
mov ecx,[_pos]
mov [_state],al
mov eax,[_buffer]
sub eax,[_additionalOffset]
mov bl,[eax+ecx]
mov al,[0x19FAB]
mov [esp+0x18],bl
push dword [esp+0x18]
mov al,[_previousByte]
mov [esp+24],bl
push dword [esp+24]
push edi
call cm_pr_04
imul eax,eax,0xC00
add eax,[0x519F0]
call CState_IsCharState
imul eax,eax,3072
add eax,[_posEncoders]
push eax
call cm_pr_03
dec dword [0x1AEFC]
call CLiteralEncoder2_Encode
dec dword [_additionalOffset]
xor ebp,ebp
inc ebp
mov [0x19FAB],bl
mov [0x1B400],ebp
mov [0x1B404],edi
mov [_previousByte],bl
mov [nowPos64],ebp
mov [nowPos64+4],edi
;----------------------------------------------------------
.labl_04:
mov eax,[0x52630]
sub eax,[0x5262C]
mov eax,[_streamPos]
sub eax,[_pos]
jne .labl_06
 
push 5
pop esi
;----------------------------------------------------------
.labl_05:
call cm_pr_13
call RangeEncoder_ShiftLow
dec esi
jne .labl_05
 
jmp .labl_00
;----------------------------------------------------------
.labl_06:
lea eax,[esp+0x14]
lea eax,[esp+20]
push eax
lea eax,[esp+0x14]
lea eax,[esp+20]
push eax
mov ebx,ebp
push ebp
and ebx,3
call lz_cm_03
cmp dword [esp+0x14],1
call GetOptimum
cmp dword [esp+20],1
jne .labl_09
cmp dword [esp+0x10],0xFFFFFFFF
 
cmp dword [esp+16],0xFFFFFFFF
jne .labl_09
movzx eax,byte [0x519EC]
 
movzx eax,byte [_state]
shl eax,4
add eax,ebx
push 0
lea edx,[0x1AF30+eax*4]
call cm_pr_14
mov eax,[0x52628]
mov esi,[0x1AEFC]
mov ebx,[0x5262C]
lea edx,[_isMatch+eax*4]
call CMyBitEncoder_Encode
mov eax,[_buffer]
mov esi,[_additionalOffset]
mov ebx,[_pos]
sub eax,esi
mov al,[eax+ebx]
mov [esp+0x18],al
mov al,[0x19FAB]
mov [esp+24],al
mov al,[_previousByte]
push ebp
call cm_pr_04
imul eax,eax,0xC00
add eax,[0x519F0]
cmp byte [0x519EC],7
push dword [esp+0x18]
call CState_IsCharState
imul eax,eax,3072
add eax,[_posEncoders]
cmp byte [_state],7
push dword [esp+24]
jb .labl_07
mov ecx,[0x52628]
sub ecx,[0x1BC08]
 
mov ecx,[_buffer]
sub ecx,[_repDistances]
sub ecx,esi
mov cl,[ecx+ebx-1]
mov [esp+0x34],cl
push dword [esp+0x34]
mov [esp+52],cl
push dword [esp+52]
push eax
call lz_cm_04
call CLiteralEncoder2_EncodeMatched
jmp .labl_08
;----------------------------------------------------------
.labl_07:
push eax
call cm_pr_03
call CLiteralEncoder2_Encode
;----------------------------------------------------------
.labl_08:
movzx eax,byte [0x519EC]
movzx eax,byte [_state]
mov al,[eax+LiteralNextStates]
mov [0x519EC],al
mov al,[esp+0x18]
mov [_state],al
mov al,[esp+24]
jmp .labl_24
;----------------------------------------------------------
.labl_09:
movzx edi,byte [0x519EC]
movzx edi,byte [_state]
mov eax,edi
shl eax,4
add eax,ebx
shl eax,2
push 1
lea edx,[eax+0x1AF30]
mov [esp+0x28],eax
call cm_pr_14
cmp dword [esp+0x10],4
lea edx,[eax+_isMatch]
mov [esp+40],eax
call CMyBitEncoder_Encode
cmp dword [esp+16],4
jnb .labl_17
 
mov esi,edi
shl esi,2
push 1
lea edx,[esi+0x515B8]
call cm_pr_14
cmp dword [esp+0x10],0
lea edx,[esi+0x1CC38]
lea edx,[esi+_isRep]
call CMyBitEncoder_Encode
cmp dword [esp+16],0
lea edx,[esi+_isRepG0]
jne .labl_10
 
push 0
call cm_pr_14
mov edx,[esp+0x24]
call CMyBitEncoder_Encode
mov edx,[esp+36]
xor eax,eax
cmp dword [esp+0x14],1
lea edx,[edx+0x1A7B0]
cmp dword [esp+20],1
lea edx,[edx+_isRep0Long]
setne al
jmp .labl_12
;----------------------------------------------------------
.labl_10:
push 1
call cm_pr_14
cmp dword [esp+0x10],1
lea edx,[esi+0x1AF00]
call CMyBitEncoder_Encode
cmp dword [esp+16],1
lea edx,[esi+_isRepG1]
jne .labl_11
 
push 0
jmp .labl_13
;----------------------------------------------------------
.labl_11:
push 1
call cm_pr_14
mov eax,[esp+0x10]
call CMyBitEncoder_Encode
mov eax,[esp+16]
add eax,0xFFFFFFFE
lea edx,[esi+0x29538]
lea edx,[esi+_isRepG2]
;----------------------------------------------------------
.labl_12:
push eax
;----------------------------------------------------------
.labl_13:
call cm_pr_14
mov eax,[esp+0x14]
call CMyBitEncoder_Encode
mov eax,[esp+20]
cmp eax,1
jne .labl_14
 
mov al,[edi+ShortRepNextStates]
jmp .labl_15
;----------------------------------------------------------
.labl_14:
add eax,0xFFFFFFFE
mov esi,0x1CC68
call cm_pr_02
mov esi,_repMatchLenEncoder
call CPriceTableEncoder_Encode
mov al,[edi+RepNextStates]
;----------------------------------------------------------
.labl_15:
mov [0x519EC],al
mov eax,[esp+0x10]
mov ecx,[0x1BC08+eax*4]
mov [_state],al
mov eax,[esp+16]
mov ecx,[_repDistances+eax*4]
test eax,eax
je .labl_23
;----------------------------------------------------------
.labl_16:
dec eax
mov edx,[0x1BC08+eax*4]
mov [0x1BC0C+eax*4],edx
mov edx,[_repDistances+eax*4]
mov [_repDistances+4+eax*4],edx
jne .labl_16
mov [0x1BC08],ecx
 
mov [_repDistances],ecx
jmp .labl_23
;----------------------------------------------------------
.labl_17:
push 0
lea edx,[0x515B8+edi*4]
call cm_pr_14
lea edx,[_isRep+edi*4]
call CMyBitEncoder_Encode
mov al,[edi+MatchNextStates]
mov edi,[esp+0x14]
mov [0x519EC],al
mov edi,[esp+20]
mov [_state],al
add edi,0xFFFFFFFE
mov eax,edi
mov esi,0xD6D8
call cm_pr_02
sub dword [esp+0x10],4
mov eax,[esp+0x10]
call cm_pr_000
cmp dword [esp+0x14],6
mov esi,_lenEncoder
call CPriceTableEncoder_Encode
sub dword [esp+16],4
mov eax,[esp+16]
call GetPosSlot
cmp dword [esp+20],6
mov ebx,eax
jb .labl_18
 
push 3
pop edi
;----------------------------------------------------------
.labl_18:
imul edi,edi,0x404
imul edi,edi,1028
push ebx
add edi,0x1BC18
add edi,_posSlotEncoder
call cm_pr_16
cmp ebx,4
jb .labl_21
mov esi,[esp+0x10]
 
mov esi,[esp+16]
xor eax,eax
inc eax
mov ecx,ebx
538,29 → 578,32
or edi,2
shl edi,cl
sub esi,edi
cmp ebx,0xE
cmp ebx,14
jnb .labl_20
mov [esp+0x20],esi
mov [esp+0x1C],eax
 
mov [esp+32],esi
mov [esp+28],eax
test ecx,ecx
jle .labl_21
mov [esp+0x24],ecx
 
mov [esp+36],ecx
;----------------------------------------------------------
.labl_19:
mov edx,[esp+0x1C]
mov esi,[esp+0x20]
mov edx,[esp+28]
mov esi,[esp+32]
sub edx,ebx
add edx,edi
and esi,1
push esi
lea edx,[0x1B234+edx*4]
call cm_pr_14
mov eax,[esp+0x1C]
shr dword [esp+0x20],1
dec dword [esp+0x24]
lea edx,[_numLiteralContextBits+edx*4]
call CMyBitEncoder_Encode
mov eax,[esp+28]
shr dword [esp+32],1
dec dword [esp+36]
lea eax,[esi+eax*2]
mov [esp+0x1C],eax
mov [esp+28],eax
jne .labl_19
 
jmp .labl_21
;----------------------------------------------------------
.labl_20:
568,77 → 611,84
mov ecx,esi
shr ecx,4
push ecx
call lz_cm_05
call RangeEncoder_EncodeDirectBits
and esi,0xF
push esi
call lz_cm_06
dec dword [0x1B230]
call CBitTreeEncoder_ReverseEncode
dec dword [_alignPriceCount]
jne .labl_21
call cm_pr_09
 
call FillAlignPrices
;----------------------------------------------------------
.labl_21:
mov eax,0x1BC14
mov eax,_repDistances+12
;----------------------------------------------------------
.labl_22:
mov ecx,[eax-4]
mov [eax],ecx
sub eax,4
cmp eax,0x1BC08
cmp eax,_repDistances
jne .labl_22
mov eax,[esp+0x10]
mov [0x1BC08],eax
 
mov eax,[esp+16]
mov [_repDistances],eax
;----------------------------------------------------------
.labl_23:
mov eax,[0x52628]
mov esi,[0x1AEFC]
mov ebx,[0x5262C]
mov ecx,[esp+0x14]
mov edi,[0x1B404]
mov eax,[_buffer]
mov esi,[_additionalOffset]
mov ebx,[_pos]
mov ecx,[esp+20]
mov edi,[nowPos64+4]
sub eax,esi
add eax,ebx
mov al,[eax+ecx-1]
;----------------------------------------------------------
.labl_24:
sub esi,[esp+0x14]
add ebp,[esp+0x14]
mov [0x19FAB],al
sub esi,[esp+20]
add ebp,[esp+20]
mov [_previousByte],al
adc edi,0
mov eax,ebp
sub eax,[0x1CC28]
sub eax,[lastPosSlotFillingPos]
mov ecx,edi
sbb ecx,[0x1CC2C]
mov [0x1AEFC],esi
mov [0x1B400],ebp
mov [0x1B404],edi
mov [esp+0x28],ecx
sbb ecx,[lastPosSlotFillingPos+4]
mov [_additionalOffset],esi
mov [nowPos64],ebp
mov [nowPos64+4],edi
mov [esp+40],ecx
jne .labl_25
cmp eax,0x200
 
cmp eax,512
jb .labl_26
;----------------------------------------------------------
.labl_25:
call cm_pr_07
call cm_pr_08
mov [0x1CC28],ebp
mov [0x1CC2C],edi
call FillPosSlotPrices
call FillDistancesPrices
mov [lastPosSlotFillingPos],ebp
mov [lastPosSlotFillingPos+4],edi
;----------------------------------------------------------
.labl_26:
test esi,esi
jne .labl_06
mov eax,[0x52630]
 
mov eax,[_streamPos]
sub eax,ebx
je .labl_29
 
mov ecx,ebp
sub ecx,[esp+0x34]
sub ecx,[esp+52]
mov eax,edi
sbb eax,[esp+0x38]
sbb eax,[esp+56]
test eax,eax
ja .labl_27
 
jb .labl_06
 
cmp ecx,0x1000
jb .labl_06
;----------------------------------------------------------
.labl_27:
mov byte [0x19FA8],0
mov byte [_finished],0
mov al,1
;----------------------------------------------------------
.labl_28:
646,7 → 696,7
pop esi
pop ebp
pop ebx
add esp,0x2C
add esp,44
ret
;----------------------------------------------------------
.labl_29:
654,305 → 704,325
pop esi
;----------------------------------------------------------
.labl_30:
call cm_pr_13
call RangeEncoder_ShiftLow
dec esi
jne .labl_30
 
jmp .labl_00
;*****************************************************************************
 
;* Call: ***************************************************************
lz_cm_03:
GetOptimum:
push ebp
mov ebp,esp
mov ecx,[0x1AEF8]
sub esp,0x74
mov ecx,[_optimumCurrentIndex]
sub esp,116
push esi
cmp [0x29574],ecx
cmp [_optimumEndIndex],ecx
je .labl_00
 
mov eax,ecx
imul eax,eax,0x28
add eax,0x29578
mov edx,[eax+0x10]
mov eax,[eax+0x14]
imul eax,eax,40
add eax,state.State
mov edx,[eax+16]
mov eax,[eax+20]
mov esi,edx
sub esi,ecx
mov ecx,[ebp+0x10]
mov ecx,[ebp+16]
mov [ecx],esi
mov ecx,[ebp+0xC]
mov ecx,[ebp+12]
mov [ecx],eax
mov [0x1AEF8],edx
mov [_optimumCurrentIndex],edx
jmp .labl_76
;----------------------------------------------------------
.labl_00:
push edi
xor edi,edi
cmp byte [0x19FAA],0 ;0x1B238
mov [0x29574],edi
mov [0x1AEF8],edi
cmp byte [_longestMatchWasFound],0
mov [_optimumEndIndex],edi
mov [_optimumCurrentIndex],edi
jne .labl_01
call cm_pr_06
 
call ReadMatchDistances
jmp .labl_02
;----------------------------------------------------------
.labl_01:
mov eax,[0x19FAC]
mov byte [0x19FAA],0 ;0x1B238
mov eax,[_longestMatchLength]
mov byte [_longestMatchWasFound],0
;----------------------------------------------------------
.labl_02:
push ebx
mov ebx,[ebp+8]
mov [ebp-0x10],eax
mov [ebp-16],eax
mov eax,ebx
shl eax,2
mov [ebp-0x4C],eax
mov [ebp-76],eax
;----------------------------------------------------------
.labl_03:
mov esi,edi
shl esi,2
mov eax,[esi+0x1BC08]
mov eax,[esi+_repDistances]
push eax
mov [ebp+esi-0x64],eax
mov [ebp+esi-100],eax
push dword 0xFFFFFFFF
mov eax,0x111
call cm_pr_18
mov [ebp+esi-0x74],eax
mov eax,273
call GetMatchLen
mov [ebp+esi-116],eax
test edi,edi
je .labl_04
mov ecx,[ebp-0x4C]
cmp eax,[ebp+ecx-0x74]
 
mov ecx,[ebp-76]
cmp eax,[ebp+ecx-116]
jbe .labl_05
;----------------------------------------------------------
.labl_04:
mov ebx,edi
mov [ebp-0x4C],esi
mov [ebp-76],esi
;----------------------------------------------------------
.labl_05:
inc edi
cmp edi,4
jb .labl_03
mov eax,[ebp+ebx*4-0x74]
mov ecx,0x80 ;'€'
mov [ebp-0x44],eax
 
mov eax,[ebp+ebx*4-116]
mov ecx,128
mov [ebp-68],eax
cmp eax,ecx
jb .labl_06
mov ecx,[ebp+0xC]
 
mov ecx,[ebp+12]
mov [ecx],ebx
jmp .labl_07
;----------------------------------------------------------
.labl_06:
cmp [ebp-0x10],ecx
cmp [ebp-16],ecx
jb .labl_08
mov eax,[0x1ACB0]
mov ecx,[ebp+0xC]
 
mov eax,[distances+512]
mov ecx,[ebp+12]
add eax,4
mov [ecx],eax
mov eax,[ebp-0x10]
mov eax,[ebp-16]
;----------------------------------------------------------
.labl_07:
mov ecx,[ebp+0x10]
mov ecx,[ebp+16]
mov [ecx],eax
dec eax
call lz_cm_07
call MovePos
jmp .labl_75
;----------------------------------------------------------
.labl_08:
mov ecx,[0x52628]
mov eax,[0x5262C]
mov ecx,[_buffer]
mov eax,[_pos]
mov dl,[eax+ecx-1]
sub eax,[0x1BC08]
mov bl,[0x519EC]
mov [0x29578],bl
sub eax,[_repDistances]
mov bl,[_state]
mov [state.State],bl
mov al,[eax+ecx-2]
mov [ebp-0x34],al
mov [ebp-52],al
mov eax,[ebp+8]
and eax,3
movzx ecx,bl
shl ecx,4
add ecx,eax
mov esi,[0x1AF30+ecx*4]
mov [ebp-0x1C],eax
mov esi,[_isMatch+ecx*4]
mov [ebp-28],eax
cmp bl,7
sbb al,al
mov [ebp-0x30],dl
push dword [ebp-0x30]
mov [ebp-48],dl
push dword [ebp-48]
inc al
push dword [ebp-0x34]
push dword [ebp-52]
movzx eax,al
push eax
push dword [ebp+8]
mov al,[0x19FAB]
mov [ebp-0x4C],esi
call cm_pr_05
or dword [0x295B4],0xFFFFFFFF
and dword [0x295B0],0
mov al,[_previousByte]
mov [ebp-76],esi
call CLiteralEncoder_GetPrice
or dword [state.BackPrev+40],0xFFFFFFFF
and dword [state.PosPrev+40],0
shr esi,2
add eax,[0x51A18+esi*4]
mov byte [0x295A1],0
mov [0x295AC],eax
lea esi,[ebp-0x64]
mov edi,0x29590
add eax,[Models+esi*4]
mov byte [state.Prev1IsChar+40],0
mov [state.Price+40],eax
lea esi,[ebp-100]
mov edi,state.Backs
movsd
movsd
mov eax,0x800
mov eax,2048
mov ecx,eax
sub ecx,[ebp-0x4C]
sub ecx,[ebp-76]
movsd
shr ecx,2
mov edx,[0x51A18+ecx*4]
mov edx,[Models+ecx*4]
movzx ecx,bl
movsd
mov esi,[0x515B8+ecx*4]
mov esi,[_isRep+ecx*4]
sub eax,esi
shr eax,2
mov edi,[0x51A18+eax*4]
mov al,[ebp-0x30]
mov edi,[Models+eax*4]
mov al,[ebp-48]
add edi,edx
mov [ebp-0x4C],edx
cmp [ebp-0x34],al
mov [ebp-76],edx
cmp [ebp-52],al
jne .labl_09
push dword [ebp-0x1C]
 
push dword [ebp-28]
mov al,bl
call cm_pr_10
call GetRepLen1Price
add eax,edi
cmp eax,[0x295AC]
cmp eax,[state.Price+40]
jnb .labl_09
and dword [0x295B4],0
mov [0x295AC],eax
mov byte [0x295A1],0
 
and dword [state.BackPrev+40],0
mov [state.Price+40],eax
mov byte [state.Prev1IsChar+40],0
;----------------------------------------------------------
.labl_09:
push 2
pop eax
cmp [ebp-0x10],eax
cmp [ebp-16],eax
jnb .labl_10
mov eax,[ebp+0xC]
mov ecx,[0x295B4]
 
mov eax,[ebp+12]
mov ecx,[state.BackPrev+40]
mov [eax],ecx
mov eax,[ebp+0x10]
mov eax,[ebp+16]
mov dword [eax],1
jmp .labl_75
;----------------------------------------------------------
.labl_10:
mov ecx,[ebp-0x10]
mov ecx,[ebp-16]
shr esi,2
mov esi,[0x51A18+esi*4]
add esi,[ebp-0x4C]
mov [ebp-0x4C],esi
cmp ecx,[ebp-0x44]
mov esi,[Models+esi*4]
add esi,[ebp-76]
mov [ebp-76],esi
cmp ecx,[ebp-68]
ja .labl_11
and dword [ebp-0x10],0
 
and dword [ebp-16],0
;----------------------------------------------------------
.labl_11:
mov [ebp-0x18],eax
cmp [ebp-0x10],eax
mov [ebp-24],eax
cmp [ebp-16],eax
jb .labl_13
mov esi,0x295DC
 
mov esi,state.BackPrev+40*2
;----------------------------------------------------------
.labl_12:
mov eax,[ebp-0x18]
mov edx,[0x1AAB0+eax*4]
push dword [ebp-0x1C]
mov eax,[ebp-24]
mov edx,[distances+eax*4]
push dword [ebp-28]
and dword [esi-4],0
lea ecx,[edx+4]
mov [esi],ecx
call cm_pr_12
add eax,[ebp-0x4C]
inc dword [ebp-0x18]
call GetPosLenPrice
add eax,[ebp-76]
inc dword [ebp-24]
mov [esi-8],eax
mov eax,[ebp-0x18]
mov byte [esi-0x13],0
add esi,0x28 ;'('
cmp eax,[ebp-0x10]
mov eax,[ebp-24]
mov byte [esi-19],0
add esi,40
cmp eax,[ebp-16]
jbe .labl_12
;----------------------------------------------------------
.labl_13:
mov ecx,[ebp-0x10]
cmp ecx,[ebp-0x44]
mov ecx,[ebp-16]
cmp ecx,[ebp-68]
jnb .labl_14
mov ecx,[ebp-0x44]
mov [ebp-0x10],ecx
 
mov ecx,[ebp-68]
mov [ebp-16],ecx
;----------------------------------------------------------
.labl_14:
cmp [ebp-0x18],ecx
cmp [ebp-24],ecx
ja .labl_16
mov eax,[ebp-0x18]
sub ecx,[ebp-0x18]
imul eax,eax,0x28
add eax,0x29584
 
mov eax,[ebp-24]
sub ecx,[ebp-24]
imul eax,eax,40
add eax,state.Price
inc ecx
;----------------------------------------------------------
.labl_15:
mov dword [eax],0x0FFFFFFF
add eax,0x28 ;'('
mov dword [eax],kIfinityPrice
add eax,40
dec ecx
jne .labl_15
;----------------------------------------------------------
.labl_16:
and dword [ebp-0x18],0
and dword [ebp-24],0
;----------------------------------------------------------
.labl_17:
mov eax,[ebp-0x18]
mov eax,[ebp+eax*4-0x74]
mov eax,[ebp-24]
mov eax,[ebp+eax*4-116]
push 2
pop ecx
mov [ebp-0x20],ecx
mov [ebp-32],ecx
cmp eax,ecx
jb .labl_20
mov esi,0x295D4
 
mov esi,state.Price+40*2
;----------------------------------------------------------
.labl_18:
push dword [ebp-0x1C]
mov edx,[ebp-0x18]
push dword [ebp-28]
mov edx,[ebp-24]
movzx eax,bl
push eax
mov eax,[ebp-0x20]
call cm_pr_11
mov eax,[ebp-32]
call GetRepPrice
add eax,edi
cmp eax,[esi]
jnb .labl_19
 
and dword [esi+4],0
mov [esi],eax
mov eax,[ebp-0x18]
mov eax,[ebp-24]
mov [esi+8],eax
mov byte [esi-0xB],0
mov byte [esi-11],0
;----------------------------------------------------------
.labl_19:
inc dword [ebp-0x20]
mov eax,[ebp-0x18]
mov ecx,[ebp-0x20]
add esi,0x28 ;'('
cmp ecx,[ebp+eax*4-0x74]
inc dword [ebp-32]
mov eax,[ebp-24]
mov ecx,[ebp-32]
add esi,40
cmp ecx,[ebp+eax*4-116]
jbe .labl_18
;----------------------------------------------------------
.labl_20:
inc dword [ebp-0x18]
cmp dword [ebp-0x18],4
inc dword [ebp-24]
cmp dword [ebp-24],4
jb .labl_17
mov eax,[ebp-0x10]
 
mov eax,[ebp-16]
xor ecx,ecx
inc ecx
mov [ebp-8],eax
mov [ebp-0xC],ecx
mov [ebp-12],ecx
cmp eax,ecx
je .labl_74
;----------------------------------------------------------
.labl_21:
mov edi,[ebp-0xC]
mov edi,[ebp-12]
inc dword [ebp+8]
mov ebx,edi
imul ebx,ebx,0x28
mov dl,[ebx+0x29579]
mov esi,[ebx+0x29588]
imul ebx,ebx,40
mov dl,[ebx+state.Prev1IsChar]
mov esi,[ebx+state.PosPrev]
test dl,dl
je .labl_25
 
dec esi
cmp byte [ebx+0x2957A],0
cmp byte [ebx+state.Prev2],0
je .labl_23
mov eax,[ebx+0x2957C]
imul eax,eax,0x28
cmp dword [ebx+0x29580],4
mov al,[eax+0x29578]
 
mov eax,[ebx+state.PosPrev2]
imul eax,eax,40
cmp dword [ebx+state.BackPrev2],4
mov al,[eax+state.State]
movzx eax,al
jnb .labl_22
 
mov al,[eax+RepNextStates]
jmp .labl_24
;----------------------------------------------------------
962,8 → 1032,8
;----------------------------------------------------------
.labl_23:
mov eax,esi
imul eax,eax,0x28
mov al,[eax+0x29578]
imul eax,eax,40
mov al,[eax+state.State]
;----------------------------------------------------------
.labl_24:
movzx eax,al
972,16 → 1042,18
;----------------------------------------------------------
.labl_25:
mov eax,esi
imul eax,eax,0x28
mov cl,[eax+0x29578]
imul eax,eax,40
mov cl,[eax+state.State]
;----------------------------------------------------------
.labl_26:
dec edi
cmp esi,edi
jne .labl_29
cmp dword [ebx+0x2958C],0
 
cmp dword [ebx+state.BackPrev],0
movzx eax,cl
jne .labl_27
 
mov al,[eax+ShortRepNextStates]
jmp .labl_28
;----------------------------------------------------------
989,16 → 1061,18
mov al,[eax+LiteralNextStates]
;----------------------------------------------------------
.labl_28:
mov [ebp-0x14],al
mov [ebp-20],al
jmp .labl_35
;----------------------------------------------------------
.labl_29:
test dl,dl
je .labl_31
cmp byte [ebx+0x2957A],0
 
cmp byte [ebx+state.Prev2],0
je .labl_31
mov esi,[ebx+0x2957C]
mov eax,[ebx+0x29580]
 
mov esi,[ebx+state.PosPrev2]
mov eax,[ebx+state.BackPrev2]
movzx ecx,cl
;----------------------------------------------------------
.labl_30:
1006,28 → 1080,31
jmp .labl_32
;----------------------------------------------------------
.labl_31:
mov eax,[ebx+0x2958C]
mov eax,[ebx+state.BackPrev]
movzx ecx,cl
cmp eax,4
jb .labl_30
 
mov cl,[ecx+MatchNextStates]
;----------------------------------------------------------
.labl_32:
imul esi,esi,0x28
add esi,0x29578
mov [ebp-0x14],cl
imul esi,esi,40
add esi,state.State
mov [ebp-20],cl
mov edx,esi
cmp eax,4
jnb .labl_34
mov ecx,[edx+eax*4+0x18]
 
mov ecx,[edx+eax*4+24]
xor esi,esi
inc esi
mov [ebp-0x64],ecx
mov [ebp-100],ecx
cmp eax,esi
jb .labl_33
lea esi,[edx+0x18]
 
lea esi,[edx+24]
mov ecx,eax
lea edi,[ebp-0x60]
lea edi,[ebp-96]
rep movsd
lea esi,[eax+1]
cmp esi,4
1035,9 → 1112,9
;----------------------------------------------------------
.labl_33:
push 4
lea edx,[edx+esi*4+0x18]
lea edx,[edx+esi*4+24]
pop ecx
lea edi,[ebp+esi*4-0x64]
lea edi,[ebp+esi*4-100]
sub ecx,esi
mov esi,edx
rep movsd
1045,143 → 1122,154
;----------------------------------------------------------
.labl_34:
add eax,0xFFFFFFFC
mov [ebp-0x64],eax
lea esi,[edx+0x18]
lea edi,[ebp-0x60]
mov [ebp-100],eax
lea esi,[edx+24]
lea edi,[ebp-96]
movsd
movsd
movsd
;----------------------------------------------------------
.labl_35:
mov al,[ebp-0x14]
mov [ebx+0x29578],al
lea edi,[ebx+0x29590]
lea esi,[ebp-0x64]
mov al,[ebp-20]
mov [ebx+state.State],al
lea edi,[ebx+state.Backs]
lea esi,[ebp-100]
movsd
movsd
movsd
movsd
call cm_pr_06
mov [ebp-0x2C],eax
cmp eax,0x80 ;'€'
call ReadMatchDistances
mov [ebp-44],eax
cmp eax,128
jnb .labl_73
mov eax,[ebx+0x29584]
mov edi,[0x5262C]
 
mov eax,[ebx+state.Price]
mov edi,[_pos]
mov esi,[ebp+8]
mov [ebp-0x48],eax
mov eax,[0x52628]
mov [ebp-72],eax
mov eax,[_buffer]
lea eax,[edi+eax-1]
mov cl,[eax]
mov [ebp-0x30],cl
push dword [ebp-0x30]
mov [ebp-48],cl
push dword [ebp-48]
mov ecx,eax
sub ecx,[ebp-0x64]
sub ecx,[ebp-100]
and esi,3
mov cl,[ecx-1]
mov [ebp-0x34],cl
movzx ecx,byte [ebp-0x14]
push dword [ebp-0x34]
mov [ebp-0x40],ecx
mov [ebp-52],cl
movzx ecx,byte [ebp-20]
push dword [ebp-52]
mov [ebp-64],ecx
shl ecx,4
add ecx,esi
mov ecx,[0x1AF30+ecx*4]
cmp byte [ebp-0x14],7
mov [ebp-0x4C],ecx
mov ecx,[_isMatch+ecx*4]
cmp byte [ebp-20],7
mov [ebp-76],ecx
sbb cl,cl
inc cl
movzx ecx,cl
push ecx
push dword [ebp+8]
mov [ebp-0x28],eax
mov [ebp-40],eax
mov al,[eax-1]
mov [ebp-0x1C],esi
call cm_pr_05
mov [ebp-28],esi
call CLiteralEncoder_GetPrice
mov esi,eax
mov eax,[ebp-0x4C]
mov eax,[ebp-76]
shr eax,2
add esi,[0x51A18+eax*4]
add esi,[Models+eax*4]
mov byte [ebp-1],0
add esi,[ebp-0x48]
cmp esi,[ebx+0x295AC]
add esi,[ebp-72]
cmp esi,[ebx+state.Price+40]
jnb .labl_36
mov eax,[ebp-0xC]
or dword [ebx+0x295B4],0xFFFFFFFF
mov [ebx+0x295AC],esi
mov [ebx+0x295B0],eax
mov byte [ebx+0x295A1],0
 
mov eax,[ebp-12]
or dword [ebx+state.BackPrev+40],0xFFFFFFFF
mov [ebx+state.Price+40],esi
mov [ebx+state.PosPrev+40],eax
mov byte [ebx+state.Prev1IsChar+40],0
mov byte [ebp-1],1
;----------------------------------------------------------
.labl_36:
mov edx,[ebp-0x40]
mov edx,[0x515B8+edx*4]
mov ecx,0x800
mov edx,[ebp-64]
mov edx,[_isRep+edx*4]
mov ecx,2048
mov eax,ecx
sub eax,[ebp-0x4C]
sub eax,[ebp-76]
sub ecx,edx
shr eax,2
mov eax,[0x51A18+eax*4]
add eax,[ebp-0x48]
mov eax,[Models+eax*4]
add eax,[ebp-72]
shr ecx,2
mov ecx,[0x51A18+ecx*4]
mov ecx,[Models+ecx*4]
add ecx,eax
mov [ebp-0x4C],eax
mov al,[ebp-0x30]
mov [ebp-0x54],edx
mov [ebp-0x48],ecx
cmp [ebp-0x34],al
mov [ebp-76],eax
mov al,[ebp-48]
mov [ebp-84],edx
mov [ebp-72],ecx
cmp [ebp-52],al
jne .labl_38
mov eax,[ebp-0xC]
cmp [ebx+0x295B0],eax
 
mov eax,[ebp-12]
cmp [ebx+state.PosPrev+40],eax
jnb .labl_37
cmp dword [ebx+0x295B4],0
 
cmp dword [ebx+state.BackPrev+40],0
je .labl_38
;----------------------------------------------------------
.labl_37:
push dword [ebp-0x1C]
mov al,[ebp-0x14]
call cm_pr_10
add eax,[ebp-0x48]
cmp eax,[ebx+0x295AC]
push dword [ebp-28]
mov al,[ebp-20]
call GetRepLen1Price
add eax,[ebp-72]
cmp eax,[ebx+state.Price+40]
ja .labl_38
and dword [ebx+0x295B4],0
mov [ebx+0x295AC],eax
mov eax,[ebp-0xC]
mov [ebx+0x295B0],eax
mov byte [ebx+0x295A1],0
 
and dword [ebx+state.BackPrev+40],0
mov [ebx+state.Price+40],eax
mov eax,[ebp-12]
mov [ebx+state.PosPrev+40],eax
mov byte [ebx+state.Prev1IsChar+40],0
;----------------------------------------------------------
.labl_38:
mov eax,[0x52630]
mov eax,[_streamPos]
sub eax,edi
mov ecx,0xFFF
sub ecx,[ebp-0xC]
mov ecx,4095
sub ecx,[ebp-12]
inc eax
mov [ebp-0x38],eax
mov [ebp-56],eax
cmp eax,ecx
jbe .labl_39
 
mov eax,ecx
mov [ebp-0x38],ecx
mov [ebp-56],ecx
;----------------------------------------------------------
.labl_39:
mov [ebp-0x24],eax
mov [ebp-36],eax
cmp eax,2
jb .labl_72
mov ecx,0x80 ;'€'
 
mov ecx,128
cmp eax,ecx
jbe .labl_40
mov [ebp-0x24],ecx
 
mov [ebp-36],ecx
;----------------------------------------------------------
.labl_40:
cmp dword [ebp-0x24],3
cmp dword [ebp-36],3
jb .labl_45
 
cmp byte [ebp-1],0
jne .labl_45
mov ecx,[ebp-0x64]
 
mov ecx,[ebp-100]
xor eax,eax
inc eax
inc ecx
cmp [ebp-0x24],eax
cmp [ebp-36],eax
jbe .labl_42
mov edi,[ebp-0x28]
 
mov edi,[ebp-40]
mov edx,edi
sub edx,ecx
;----------------------------------------------------------
1189,36 → 1277,38
mov cl,[eax+edi]
cmp cl,[edx+eax]
jne .labl_42
 
inc eax
cmp eax,[ebp-0x24]
cmp eax,[ebp-36]
jb .labl_41
;----------------------------------------------------------
.labl_42:
dec eax
mov [ebp-0x20],eax
mov [ebp-32],eax
cmp eax,2
jb .labl_45
mov eax,[ebp-0x40]
 
mov eax,[ebp-64]
mov al,[eax+LiteralNextStates]
mov ecx,[ebp+8]
movzx edx,al
mov [ebp-0x3C],al
mov [ebp-60],al
mov eax,edx
shl eax,4
inc ecx
mov edi,0x800
mov edi,2048
and ecx,3
add eax,ecx
mov ebx,edi
sub ebx,[0x1AF30+eax*4]
sub ebx,[_isMatch+eax*4]
mov eax,edi
sub eax,[0x515B8+edx*4]
mov edx,[ebp-0xC]
sub eax,[_isRep+edx*4]
mov edx,[ebp-12]
shr ebx,2
mov edi,[0x51A18+ebx*4]
mov edi,[Models+ebx*4]
shr eax,2
add edi,[0x51A18+eax*4]
mov eax,[ebp-0x20]
add edi,[Models+eax*4]
mov eax,[ebp-32]
add edi,esi
lea esi,[edx+eax]
mov eax,[ebp-8]
1225,57 → 1315,61
lea edx,[esi+1]
cmp eax,edx
jnb .labl_44
 
sub edx,[ebp-8]
imul eax,eax,0x28
add eax,0x29584
imul eax,eax,40
add eax,state.Price
add [ebp-8],edx
;----------------------------------------------------------
.labl_43:
add eax,0x28 ;'('
add eax,40
dec edx
mov dword [eax],0x0FFFFFFF
mov dword [eax],kIfinityPrice
jne .labl_43
;----------------------------------------------------------
.labl_44:
mov eax,[ebp-0x20]
mov eax,[ebp-32]
push ecx
push dword [ebp-0x3C]
push dword [ebp-60]
xor edx,edx
call cm_pr_11
imul esi,esi,0x28
call GetRepPrice
imul esi,esi,40
add eax,edi
add esi,0x295A0
cmp eax,[esi+0xC]
add esi,state.State+40
cmp eax,[esi+12]
jnb .labl_45
mov [esi+0xC],eax
mov eax,[ebp-0xC]
 
mov [esi+12],eax
mov eax,[ebp-12]
inc eax
and dword [esi+0x14],0
mov [esi+0x10],eax
and dword [esi+20],0
mov [esi+16],eax
mov byte [esi+1],1
mov byte [esi+2],0
;----------------------------------------------------------
.labl_45:
and dword [ebp-0x18],0
and dword [ebp-24],0
;----------------------------------------------------------
.labl_46:
mov eax,[ebp-0x18]
mov eax,[ebp+eax*4-0x64]
mov edx,[ebp-0x28]
mov eax,[ebp-24]
mov eax,[ebp+eax*4-100]
mov edx,[ebp-40]
inc eax
mov ecx,edx
sub ecx,eax
mov [ebp-0x44],eax
mov [ebp-68],eax
mov al,[edx]
mov [ebp-0x50],ecx
mov [ebp-80],ecx
cmp al,[ecx]
jne .labl_58
 
mov al,[edx+1]
cmp al,[ecx+1]
jne .labl_58
 
push 2
pop esi
cmp [ebp-0x24],esi
cmp [ebp-36],esi
jbe .labl_48
;----------------------------------------------------------
.labl_47:
1282,68 → 1376,74
mov al,[edx+esi]
cmp al,[ecx+esi]
jne .labl_48
 
inc esi
cmp esi,[ebp-0x24]
cmp esi,[ebp-36]
jb .labl_47
;----------------------------------------------------------
.labl_48:
mov eax,[ebp-0xC]
mov eax,[ebp-12]
lea ebx,[eax+esi]
mov [ebp-0x20],ebx
imul ebx,ebx,0x28
mov [ebp-32],ebx
imul ebx,ebx,40
mov edi,esi
add ebx,0x29584
add ebx,state.Price
;----------------------------------------------------------
.labl_49:
mov eax,[ebp-8]
mov ecx,[ebp-0x20]
mov ecx,[ebp-32]
cmp eax,ecx
jnb .labl_51
 
sub ecx,[ebp-8]
imul eax,eax,0x28
add eax,0x29584
imul eax,eax,40
add eax,state.Price
add [ebp-8],ecx
;----------------------------------------------------------
.labl_50:
add eax,0x28 ;'('
add eax,40
dec ecx
mov dword [eax],0x0FFFFFFF
mov dword [eax],kIfinityPrice
jne .labl_50
;----------------------------------------------------------
.labl_51:
push dword [ebp-0x1C]
mov edx,[ebp-0x18]
push dword [ebp-0x14]
push dword [ebp-28]
mov edx,[ebp-24]
push dword [ebp-20]
mov eax,esi
call cm_pr_11
add eax,[ebp-0x48]
call GetRepPrice
add eax,[ebp-72]
cmp eax,[ebx]
jnb .labl_52
 
mov [ebx],eax
mov eax,[ebp-0xC]
mov eax,[ebp-12]
mov [ebx+4],eax
mov eax,[ebp-0x18]
mov eax,[ebp-24]
mov [ebx+8],eax
mov byte [ebx-0xB],0
mov byte [ebx-11],0
;----------------------------------------------------------
.labl_52:
dec esi
sub ebx,0x28 ;'('
dec dword [ebp-0x20]
sub ebx,40
dec dword [ebp-32]
cmp esi,2
jnb .labl_49
 
lea eax,[edi+1]
lea esi,[eax+0x80]
cmp esi,[ebp-0x38]
lea esi,[eax+128]
cmp esi,[ebp-56]
jbe .labl_53
mov esi,[ebp-0x38]
 
mov esi,[ebp-56]
;----------------------------------------------------------
.labl_53:
cmp eax,esi
jnb .labl_55
mov edx,[ebp-0x28]
 
mov edx,[ebp-40]
mov ecx,eax
sub ecx,[ebp-0x44]
sub ecx,[ebp-68]
add ecx,edx
;----------------------------------------------------------
.labl_54:
1350,6 → 1450,7
mov bl,[eax+edx]
cmp bl,[ecx]
jne .labl_55
 
inc eax
inc ecx
cmp eax,esi
1359,10 → 1460,11
or ecx,0xFFFFFFFF
sub ecx,edi
add eax,ecx
mov [ebp-0x10],eax
mov [ebp-16],eax
cmp eax,2
jb .labl_58
mov eax,[ebp-0x40]
 
mov eax,[ebp-64]
mov al,[eax+RepNextStates]
mov edx,[ebp+8]
movzx eax,al
1369,194 → 1471,206
mov ebx,eax
mov al,[eax+LiteralNextStates]
lea ecx,[edi+edx]
mov [ebp-0x3C],al
mov [ebp-60],al
movzx eax,al
mov esi,ecx
and esi,3
shl ebx,4
add esi,ebx
mov esi,[0x1AF30+esi*4]
mov esi,[_isMatch+esi*4]
lea ebx,[edi+edx+1]
mov [ebp-0x20],eax
mov eax,[ebp-0x28]
mov [ebp-32],eax
mov eax,[ebp-40]
movzx edx,byte [edi+eax]
mov al,[eax+edi-1]
push edx
mov edx,[ebp-0x50]
mov edx,[ebp-80]
movzx edx,byte [edx+edi]
push edx
shr esi,02
mov esi,[0x51A18+esi*4]
shr esi,2
mov esi,[Models+esi*4]
push 1
push ecx
mov [ebp-0x44],esi
mov [ebp-68],esi
and ebx,3
call cm_pr_05
push dword [ebp-0x1C]
mov edx,[ebp-0x18]
push dword [ebp-0x14]
call CLiteralEncoder_GetPrice
push dword [ebp-28]
mov edx,[ebp-24]
push dword [ebp-20]
mov esi,eax
mov eax,edi
call cm_pr_11
mov ecx,[ebp-0x20]
call GetRepPrice
mov ecx,[ebp-32]
add esi,eax
shl ecx,4
add ecx,ebx
mov eax,0x800
mov eax,2048
mov edx,eax
sub edx,[0x1AF30+ecx*4]
mov ecx,[ebp-0x20]
sub eax,[0x515B8+ecx*4]
mov ecx,[ebp-0xC]
sub edx,[_isMatch+ecx*4]
mov ecx,[ebp-32]
sub eax,[_isRep+ecx*4]
mov ecx,[ebp-12]
shr edx,2
add esi,[0x51A18+edx*4]
add esi,[Models+edx*4]
shr eax,2
add esi,[0x51A18+eax*4]
mov eax,[ebp-0x10]
add esi,[ebp-0x44]
add esi,[Models+eax*4]
mov eax,[ebp-16]
add esi,[ebp-68]
lea eax,[eax+edi+1]
add esi,[ebp-0x48]
add esi,[ebp-72]
add eax,ecx
mov [ebp-0x44],eax
mov [ebp-68],eax
cmp [ebp-8],eax
jnb .labl_57
 
mov eax,[ebp-8]
mov ecx,[ebp-0x44]
imul eax,eax,0x28
mov ecx,[ebp-68]
imul eax,eax,40
sub ecx,[ebp-8]
add eax,0x29584
add eax,state.Price
add [ebp-8],ecx
;----------------------------------------------------------
.labl_56:
add eax,0x28 ;'('
add eax,40
dec ecx
mov dword [eax],0x0FFFFFFF
mov dword [eax],kIfinityPrice
jne .labl_56
;----------------------------------------------------------
.labl_57:
mov eax,[ebp-0x10]
mov eax,[ebp-16]
push ebx
push dword [ebp-0x3C]
push dword [ebp-60]
xor edx,edx
call cm_pr_11
mov ecx,[ebp-0x44]
imul ecx,ecx,0x28
call GetRepPrice
mov ecx,[ebp-68]
imul ecx,ecx,40
add eax,esi
add ecx,0x29578
cmp eax,[ecx+0xC]
add ecx,state.State
cmp eax,[ecx+12]
jnb .labl_58
and dword [ecx+0x14],0
mov [ecx+0xC],eax
mov eax,[ebp-0xC]
 
and dword [ecx+20],0
mov [ecx+12],eax
mov eax,[ebp-12]
lea edx,[edi+eax+1]
mov [ecx+4],eax
mov eax,[ebp-0x18]
mov [ecx+0x10],edx
mov eax,[ebp-24]
mov [ecx+16],edx
mov byte [ecx+1],1
mov byte [ecx+2],1
mov [ecx+8],eax
;----------------------------------------------------------
.labl_58:
inc dword [ebp-0x18]
cmp dword [ebp-0x18],4
inc dword [ebp-24]
cmp dword [ebp-24],4
jb .labl_46
mov eax,[ebp-0x24]
cmp [ebp-0x2C],eax
 
mov eax,[ebp-36]
cmp [ebp-44],eax
jbe .labl_59
mov [ebp-0x2C],eax
 
mov [ebp-44],eax
;----------------------------------------------------------
.labl_59:
cmp dword [ebp-0x2C],2
cmp dword [ebp-44],2
jb .labl_72
mov esi,[ebp-0x2C]
 
mov esi,[ebp-44]
cmp esi,2
jne .labl_60
cmp dword [0x1AAB8],0x80 ;'€'
 
cmp dword [distances+8],0x80
jnb .labl_72
;----------------------------------------------------------
.labl_60:
mov eax,[ebp-0x54]
mov eax,[ebp-84]
shr eax,2
mov eax,[0x51A18+eax*4]
add eax,[ebp-0x4C]
mov [ebp-0x4C],eax
mov eax,[ebp-0xC]
mov eax,[Models+eax*4]
add eax,[ebp-76]
mov [ebp-76],eax
mov eax,[ebp-12]
lea ecx,[esi+eax]
cmp [ebp-8],ecx
jnb .labl_62
 
mov eax,[ebp-8]
imul eax,eax,0x28
imul eax,eax,40
mov edx,ecx
sub edx,[ebp-8]
add eax,0x29584
add eax,state.Price
add [ebp-8],edx
;----------------------------------------------------------
.labl_61:
add eax,0x28 ;'('
add eax,40
dec edx
mov dword [eax],0x0FFFFFFF
mov dword [eax],kIfinityPrice
jne .labl_61
;----------------------------------------------------------
.labl_62:
imul ecx,ecx,0x28
add ecx,0x29584
lea eax,[0x1AAB4+esi*4]
imul ecx,ecx,40
add ecx,state.Price
lea eax,[distances+4+esi*4]
lea edi,[esi+1]
mov [ebp-0x24],eax
mov [ebp-36],eax
mov ebx,ecx
mov [ebp-0x48],ecx
mov [ebp-72],ecx
;----------------------------------------------------------
.labl_63:
mov eax,[ebp-0x24]
mov eax,[ebp-36]
mov esi,[eax-4]
push dword [ebp-0x1C]
push dword [ebp-28]
lea eax,[edi-1]
mov edx,esi
call cm_pr_12
add eax,[ebp-0x4C]
mov [ebp-0x50],eax
call GetPosLenPrice
add eax,[ebp-76]
mov [ebp-80],eax
cmp eax,[ebx]
jnb .labl_64
 
mov [ebx],eax
mov eax,[ebp-0xC]
mov eax,[ebp-12]
mov [ebx+4],eax
lea eax,[esi+4]
mov [ebx+8],eax
mov byte [ebx-0xB],0
mov byte [ebx-11],0
;----------------------------------------------------------
.labl_64:
lea eax,[edi-1]
cmp eax,[ebp-0x2C]
cmp eax,[ebp-44]
je .labl_65
mov eax,[ebp-0x24]
 
mov eax,[ebp-36]
cmp esi,[eax]
je .labl_71
;----------------------------------------------------------
.labl_65:
inc esi
lea ecx,[edi+0x80]
mov [ebp-0x44],esi
mov [ebp-0x10],edi
cmp ecx,[ebp-0x38]
lea ecx,[edi+128]
mov [ebp-68],esi
mov [ebp-16],edi
cmp ecx,[ebp-56]
jbe .labl_66
mov ecx,[ebp-0x38]
 
mov ecx,[ebp-56]
;----------------------------------------------------------
.labl_66:
cmp edi,ecx
jnb .labl_68
 
mov eax,edi
sub eax,esi
add eax,[ebp-0x28]
add eax,[ebp-40]
;----------------------------------------------------------
.labl_67:
mov edx,[ebp-0x10]
mov esi,[ebp-0x28]
mov edx,[ebp-16]
mov esi,[ebp-40]
mov dl,[edx+esi]
cmp dl,[eax]
jne .labl_68
inc dword [ebp-0x10]
 
inc dword [ebp-16]
inc eax
cmp [ebp-0x10],ecx
cmp [ebp-16],ecx
jb .labl_67
;----------------------------------------------------------
.labl_68:
1563,10 → 1677,11
or ecx,0xFFFFFFFF
lea eax,[edi-1]
sub ecx,eax
add [ebp-0x10],ecx
cmp dword [ebp-0x10],2
add [ebp-16],ecx
cmp dword [ebp-16],2
jb .labl_71
mov eax,[ebp-0x40]
 
mov eax,[ebp-64]
mov al,[eax+MatchNextStates]
mov ecx,[ebp+8]
movzx eax,al
1573,116 → 1688,119
mov esi,eax
mov al,[eax+LiteralNextStates]
lea edx,[edi+ecx-1]
mov [ebp-0x3C],al
mov [ebp-60],al
movzx eax,al
shl esi,4
mov ebx,edx
and ebx,3
add esi,ebx
mov esi,[0x1AF30+esi*4]
mov esi,[_isMatch+esi*4]
lea ebx,[edi+ecx]
mov [ebp-0x20],eax
mov eax,[ebp-0x28]
mov [ebp-32],eax
mov eax,[ebp-40]
movzx ecx,byte [edi+eax-1]
push ecx
mov ecx,edi
sub ecx,[ebp-0x44]
sub ecx,[ebp-68]
shr esi,2
movzx ecx,byte [ecx+eax-1]
mov esi,[0x51A18+esi*4]
mov esi,[Models+esi*4]
mov al,[edi+eax-2]
push ecx
push 1
push edx
mov [ebp-0x54],esi
mov [ebp-84],esi
and ebx,3
call cm_pr_05
mov ecx,[ebp-0x20]
call CLiteralEncoder_GetPrice
mov ecx,[ebp-32]
mov esi,eax
shl ecx,4
add ecx,ebx
mov eax,0x800
mov eax,2048
mov edx,eax
sub edx,[0x1AF30+ecx*4]
mov ecx,[ebp-0x20]
sub eax,[0x515B8+ecx*4]
mov ecx,[ebp-0xC]
sub edx,[_isMatch+ecx*4]
mov ecx,[ebp-32]
sub eax,[_isRep+ecx*4]
mov ecx,[ebp-12]
shr edx,2
add esi,[0x51A18+edx*4]
add esi,[Models+edx*4]
shr eax,2
add esi,[0x51A18+eax*4]
mov eax,[ebp-0x10]
add esi,[ebp-0x54]
add esi,[Models+eax*4]
mov eax,[ebp-16]
add esi,[ebp-84]
add eax,edi
add esi,[ebp-0x50]
add esi,[ebp-80]
add eax,ecx
mov [ebp-0x20],eax
mov [ebp-32],eax
cmp [ebp-8],eax
jnb .labl_70
 
mov eax,[ebp-8]
mov ecx,[ebp-0x20]
imul eax,eax,0x28
mov ecx,[ebp-32]
imul eax,eax,40
sub ecx,[ebp-8]
add eax,0x29584
add eax,state.Price
add [ebp-8],ecx
;----------------------------------------------------------
.labl_69:
add eax,0x28 ;'('
add eax,40
dec ecx
mov dword [eax],0x0FFFFFFF
mov dword [eax],kIfinityPrice
jne .labl_69
;----------------------------------------------------------
.labl_70:
mov eax,[ebp-0x10]
mov eax,[ebp-16]
push ebx
push dword [ebp-0x3C]
push dword [ebp-60]
xor edx,edx
call cm_pr_11
mov ecx,[ebp-0x20]
mov ebx,[ebp-0x48]
imul ecx,ecx,0x28
call GetRepPrice
mov ecx,[ebp-32]
mov ebx,[ebp-72]
imul ecx,ecx,40
add eax,esi
add ecx,0x29578
cmp eax,[ecx+0xC]
add ecx,state.State
cmp eax,[ecx+12]
jnb .labl_71
and dword [ecx+0x14],0
mov [ecx+0xC],eax
mov eax,[ebp-0xC]
 
and dword [ecx+20],0
mov [ecx+12],eax
mov eax,[ebp-12]
lea edx,[edi+eax]
mov [ecx+4],eax
mov eax,[ebp-0x44]
mov eax,[ebp-68]
add eax,3
mov [ecx+0x10],edx
mov [ecx+16],edx
mov byte [ecx+1],1
mov byte [ecx+2],1
mov [ecx+8],eax
;----------------------------------------------------------
.labl_71:
sub dword [ebp-0x24],4
sub ebx,0x28 ;'('
sub dword [ebp-36],4
sub ebx,40
dec edi
lea eax,[edi-1]
mov [ebp-0x48],ebx
mov [ebp-72],ebx
cmp eax,2
jnb .labl_63
;----------------------------------------------------------
.labl_72:
inc dword [ebp-0xC]
mov eax,[ebp-0xC]
inc dword [ebp-12]
mov eax,[ebp-12]
cmp eax,[ebp-8]
jne .labl_21
 
jmp .labl_74
;----------------------------------------------------------
.labl_73:
mov eax,[ebp-0x2C]
mov [0x19FAC],eax
mov byte [0x19FAA],1 ;0x1B238
mov eax,[ebp-44]
mov [_longestMatchLength],eax
mov byte [_longestMatchWasFound],1
;----------------------------------------------------------
.labl_74:
push dword [ebp-0xC]
push dword [ebp+0xC]
call lz_cm_08
mov ecx,[ebp+0x10]
push dword [ebp-12]
push dword [ebp+12]
call Backward
mov ecx,[ebp+16]
mov [ecx],eax
;----------------------------------------------------------
.labl_75:
1692,11 → 1810,11
.labl_76:
pop esi
leave
ret 0xC
ret 12
;*****************************************************************************
 
;* Call: ***************************************************************
lz_cm_04:
CLiteralEncoder2_EncodeMatched:
push ebp
mov ebp,esp
push ecx
1710,8 → 1828,8
.labl_00:
dec dword [ebp-4]
movzx ecx,byte [ebp-4]
movzx esi,byte [ebp+0xC]
movzx edi,byte [ebp+0x10]
movzx esi,byte [ebp+12]
movzx edi,byte [ebp+16]
shr esi,cl
shr edi,cl
mov ecx,[ebp+8]
1722,18 → 1840,20
and edi,1
push edi
lea edx,[ecx+eax*4]
call cm_pr_14
call CMyBitEncoder_Encode
add ebx,ebx
or ebx,edi
cmp esi,edi
jne .labl_02
 
cmp dword [ebp-4],0
jne .labl_00
 
jmp .labl_03
;----------------------------------------------------------
.labl_01:
dec dword [ebp-4]
movzx esi,byte [ebp+0x10]
movzx esi,byte [ebp+16]
mov cl,[ebp-4]
mov eax,[ebp+8]
shr esi,cl
1740,7 → 1860,7
lea edx,[eax+ebx*4]
and esi,1
push esi
call cm_pr_14
call CMyBitEncoder_Encode
add ebx,ebx
or ebx,esi
;----------------------------------------------------------
1753,11 → 1873,11
pop esi
pop ebx
leave
ret 0xC
ret 12
;*****************************************************************************
 
;* Call: ***************************************************************
lz_cm_05:
RangeEncoder_EncodeDirectBits:
push esi
mov esi,eax
jmp .labl_02
1764,47 → 1884,51
;----------------------------------------------------------
.labl_00:
mov eax,[esp+8]
shr dword [0x51A04],1
shr dword [range],1
dec esi
mov ecx,esi
shr eax,cl
test al,1
je .labl_01
mov eax,[0x51A04]
add [0x51A10],eax
adc dword [0x51A14],0
 
mov eax,[range]
add [low],eax
adc dword [low+4],0
;----------------------------------------------------------
.labl_01:
cmp dword [0x51A04],0x1000000
cmp dword [range],0x1000000
jnb .labl_02
shl dword [0x51A04],8
call cm_pr_13
 
shl dword [range],8
call RangeEncoder_ShiftLow
;----------------------------------------------------------
.labl_02:
test esi,esi
jne .labl_00
 
pop esi
ret 4
;*****************************************************************************
 
;* Call: ***************************************************************
lz_cm_06:
CBitTreeEncoder_ReverseEncode:
push esi
xor esi,esi
push edi
mov edi,[0x519E8]
mov edi,[i_01]
inc esi
;----------------------------------------------------------
.labl_00:
mov eax,[esp+0xC]
mov eax,[esp+12]
and eax,1
lea edx,[0x515E8+esi*4]
lea edx,[_posAlignEncoder+esi*4]
push eax
lea esi,[eax+esi*2]
call cm_pr_14
shr dword [esp+0xC],1
call CMyBitEncoder_Encode
shr dword [esp+12],1
dec edi
jne .labl_00
 
pop edi
pop esi
ret 4
1811,17 → 1935,18
;*****************************************************************************
 
;* Call: ***************************************************************
lz_cm_07:
MovePos:
push esi
mov esi,eax
test esi,esi
je .labl_01
add [0x1AEFC],esi
 
add [_additionalOffset],esi
;----------------------------------------------------------
.labl_00:
dec esi
call lz_cm_09
call cm_pr_19
call MatchFinder_MovePos
test esi,esi
jne .labl_00
;----------------------------------------------------------
1831,63 → 1956,66
;*****************************************************************************
 
;* Call: ***************************************************************
lz_cm_08:
Backward:
push ebp
mov ebp,esp
push ecx
mov ecx,[ebp+0xC]
mov ecx,[ebp+12]
mov eax,ecx
imul eax,eax,0x28
mov edx,[eax+0x29588]
mov eax,[eax+0x2958C]
imul eax,eax,40
mov edx,[eax+state.PosPrev]
mov eax,[eax+state.BackPrev]
push ebx
push esi
mov [0x29574],ecx
mov [_optimumEndIndex],ecx
mov [ebp-4],eax
push edi
;----------------------------------------------------------
.labl_00:
imul ecx,ecx,0x28
cmp byte [ecx+0x29579],0
imul ecx,ecx,40
cmp byte [ecx+state.Prev1IsChar],0
je .labl_01
 
mov eax,edx
imul eax,eax,0x28
or dword [eax+0x2958C],0xFFFFFFFF
lea esi,[eax+0x29579]
lea edi,[eax+0x29588]
imul eax,eax,40
or dword [eax+state.BackPrev],0xFFFFFFFF
lea esi,[eax+state.Prev1IsChar]
lea edi,[eax+state.PosPrev]
lea ebx,[edx-1]
mov byte [esi],0
mov [edi],ebx
cmp byte [ecx+0x2957A],0
cmp byte [ecx+state.Prev2],0
je .labl_01
mov byte [esi-0x28],0
mov esi,[ecx+0x2957C]
mov [edi-0x28],esi
mov ecx,[ecx+0x29580]
mov [eax+0x29564],ecx
 
mov byte [esi-40],0
mov esi,[ecx+state.PosPrev2]
mov [edi-40],esi
mov ecx,[ecx+state.BackPrev2]
mov [eax+state.BackPrev-40],ecx
;----------------------------------------------------------
.labl_01:
mov ecx,[ebp-4]
mov eax,edx
imul eax,eax,0x28
imul eax,eax,40
mov esi,edx
mov edx,[eax+0x2958C]
mov [eax+0x2958C],ecx
mov ecx,[ebp+0xC]
mov edx,[eax+state.BackPrev]
mov [eax+state.BackPrev],ecx
mov ecx,[ebp+12]
mov [ebp-4],edx
mov edx,[eax+0x29588]
mov [eax+0x29588],ecx
mov edx,[eax+state.PosPrev]
mov [eax+state.PosPrev],ecx
mov ecx,esi
mov [ebp+0xC],ecx
mov [ebp+12],ecx
test esi,esi
jne .labl_00
mov eax,[0x2958C]
 
mov eax,[state.BackPrev]
mov ecx,[ebp+8]
pop edi
mov [ecx],eax
mov eax,[0x29588]
mov eax,[state.PosPrev]
pop esi
mov [0x1AEF8],eax
mov [_optimumCurrentIndex],eax
pop ebx
leave
ret 8
1897,29 → 2025,30
lz_cm_09:
push ebp
mov ebp,esp
mov edx,[0x52218]
mov eax,[0x5262C]
mov ecx,[0x52630]
sub esp,0x2C
mov edx,[_matchMaxLen]
mov eax,[_pos]
mov ecx,[_streamPos]
sub esp,44
push esi
lea esi,[edx+eax]
cmp esi,ecx
ja .labl_00
mov [ebp-0x18],edx
 
mov [ebp-24],edx
jmp .labl_01
;----------------------------------------------------------
.labl_00:
sub ecx,eax
mov [ebp-0x18],ecx
mov [ebp-24],ecx
cmp ecx,3
jb .labl_13
;----------------------------------------------------------
.labl_01:
mov ecx,[0x51A0C]
mov ecx,[_cyclicBufferSize]
mov edx,eax
sub edx,ecx
cmp ecx,eax
mov ecx,[0x52628]
mov ecx,[_buffer]
lea esi,[ecx+eax]
movzx ecx,byte [esi+2]
push ebx
1926,108 → 2055,114
movzx ebx,word [esi]
push edi
sbb edi,edi
and dword [ebp-0x1C],0
and dword [ebp-0x28],0
and dword [ebp-28],0
and dword [ebp-40],0
shl ecx,8
and edi,edx
movzx edx,byte [esi]
xor ecx,[0x52228+edx*4]
xor ecx,[crc_table+edx*4]
movzx edx,byte [esi+1]
xor ecx,edx
mov edx,[0x52224]
mov edx,[_hash]
and ecx,0xFFFFF
lea ecx,[edx+ecx*4]
mov [edx+ebx*4+0x400000],eax
mov ebx,[ecx]
mov [ecx],eax
mov ecx,[0x5221C]
mov ecx,[pack_pos]
lea ecx,[edx+ecx*8+0x440000]
mov [ebp-4],ebx
lea ebx,[ecx+4]
mov [ebp-0xC],ecx
mov ecx,[0x52220]
mov [ebp-0x10],ebx
mov [ebp-0x14],ecx
mov [ebp-12],ecx
mov ecx,[_cutValue]
mov [ebp-16],ebx
mov [ebp-20],ecx
cmp [ebp-4],edi
jbe .labl_11
;----------------------------------------------------------
.labl_02:
mov ecx,[ebp-0x14]
dec dword [ebp-0x14]
mov ecx,[ebp-20]
dec dword [ebp-20]
test ecx,ecx
je .labl_11
mov ecx,[0x52628]
 
mov ecx,[_buffer]
mov ebx,[ebp-4]
add ecx,ebx
mov [ebp-0x24],ecx
mov ecx,[ebp-0x28]
cmp ecx,[ebp-0x1C]
mov [ebp-36],ecx
mov ecx,[ebp-40]
cmp ecx,[ebp-28]
jb .labl_03
mov ecx,[ebp-0x1C]
 
mov ecx,[ebp-28]
;----------------------------------------------------------
.labl_03:
mov ebx,[ebp-0x24]
mov ebx,[ebp-36]
mov [ebp-8],ecx
add ecx,esi
sub ebx,esi
mov [ebp-0x20],ebx
mov [ebp-32],ebx
jmp .labl_05
;----------------------------------------------------------
.labl_04:
mov ecx,[ebp-0x2C]
mov ebx,[ebp-0x20]
mov ecx,[ebp-44]
mov ebx,[ebp-32]
;----------------------------------------------------------
.labl_05:
mov bl,[ebx+ecx]
cmp bl,[ecx]
jne .labl_06
 
inc dword [ebp-8]
inc ecx
mov [ebp-0x2C],ecx
mov [ebp-44],ecx
mov ecx,[ebp-8]
cmp ecx,[ebp-0x18]
cmp ecx,[ebp-24]
jne .labl_04
;----------------------------------------------------------
.labl_06:
mov ecx,[0x5221C]
mov ecx,[pack_pos]
mov ebx,eax
sub ebx,[ebp-4]
cmp ebx,ecx
ja .labl_07
 
sub ecx,ebx
jmp .labl_08
;----------------------------------------------------------
.labl_07:
sub ecx,ebx
add ecx,[0x51A0C]
add ecx,[_cyclicBufferSize]
;----------------------------------------------------------
.labl_08:
lea ecx,[edx+ecx*8+0x440000]
mov [ebp-0x20],ecx
mov [ebp-32],ecx
mov ecx,[ebp-8]
cmp ecx,[ebp-0x18]
cmp ecx,[ebp-24]
je .labl_14
mov ebx,[ebp-0x24]
 
mov ebx,[ebp-36]
mov bl,[ecx+ebx]
cmp bl,[ecx+esi]
mov ecx,[ebp-4]
jnb .labl_09
mov ebx,[ebp-0xC]
 
mov ebx,[ebp-12]
mov [ebx],ecx
mov ecx,[ebp-0x20]
mov ecx,[ebp-32]
mov ebx,[ebp-8]
add ecx,4
mov [ebp-0xC],ecx
mov [ebp-0x1C],ebx
mov [ebp-12],ecx
mov [ebp-28],ebx
jmp .labl_10
;----------------------------------------------------------
.labl_09:
mov ebx,[ebp-0x10]
mov ebx,[ebp-16]
mov [ebx],ecx
mov ecx,[ebp-0x20]
mov ecx,[ebp-32]
mov ebx,[ebp-8]
mov [ebp-0x10],ecx
mov [ebp-0x28],ebx
mov [ebp-16],ecx
mov [ebp-40],ebx
;----------------------------------------------------------
.labl_10:
mov ecx,[ecx]
2036,9 → 2171,9
ja .labl_02
;----------------------------------------------------------
.labl_11:
mov eax,[ebp-0xC]
mov eax,[ebp-12]
and dword [eax],0
mov eax,[ebp-0x10]
mov eax,[ebp-16]
and dword [eax],0
;----------------------------------------------------------
.labl_12:
2051,43 → 2186,45
ret
;----------------------------------------------------------
.labl_14:
mov eax,[ebp-0x20]
mov eax,[ebp-32]
mov ecx,[eax]
mov edx,[ebp-0xC]
mov edx,[ebp-12]
mov [edx],ecx
mov eax,[eax+4]
mov ecx,[ebp-0x10]
mov ecx,[ebp-16]
mov [ecx],eax
jmp .labl_12
;*****************************************************************************
 
;* Call: ***************************************************************
cm_pr_000:
cmp eax,0x400
GetPosSlot:
cmp eax,1024
jnb .labl_00
movzx eax,byte [eax+0x19FB0]
 
movzx eax,byte [eax+g_FastPos]
ret
;----------------------------------------------------------
.labl_00:
cmp eax,0x80000
jnb .labl_01
 
shr eax,9
movzx eax,byte [eax+0x19FB0]
add eax,0x12
movzx eax,byte [eax+g_FastPos]
add eax,18
ret
;----------------------------------------------------------
.labl_01:
shr eax,0x12
movzx eax,byte [eax+0x19FB0]
add eax,0x24 ;'$'
shr eax,18
movzx eax,byte [eax+g_FastPos]
add eax,36 ;'$'
ret
;*****************************************************************************
 
;* Call: ***************************************************************
cm_pr_00:
CPriceTableEncoder_Init:
push ebx
push edi
mov eax,0x400
mov eax,1024
push 4
mov [esi],eax
mov [esi+4],eax
2098,24 → 2235,25
push 3
lea eax,[edi-0x4040]
pop ecx
call cm_pr_15
call CBitTreeEncoder_Init
push 3
pop ecx
mov eax,edi
call cm_pr_15
add edi,0x404
call CBitTreeEncoder_Init
add edi,1028
dec ebx
jne .labl_00
 
push 8
pop ecx
pop edi
lea eax,[esi+0x8088]
pop ebx
jmp cm_pr_15
jmp CBitTreeEncoder_Init
;*****************************************************************************
 
;* Call: ***************************************************************
cm_pr_01:
CPriceTableEncoder_UpdateTable:
push ebx
push edi
mov edi,eax
2122,24 → 2260,26
xor ebx,ebx
cmp [edi+0xC88C],ebx
jbe .labl_01
mov eax,[esp+0xC]
 
mov eax,[esp+12]
push esi
lea esi,[edi+eax*4+0x848C]
;----------------------------------------------------------
.labl_00:
mov eax,[esp+0x10]
mov eax,[esp+16]
mov edx,ebx
call lz_cm_10
call NLength_CEncoder_GetPrice
mov [esi],eax
inc ebx
add esi,0x40 ;'@'
add esi,64
cmp ebx,[edi+0xC88C]
jb .labl_00
 
pop esi
;----------------------------------------------------------
.labl_01:
mov eax,[edi+0xC88C]
mov ecx,[esp+0xC]
mov ecx,[esp+12]
mov [edi+ecx*4+0xC890],eax
pop edi
pop ebx
2147,7 → 2287,7
;*****************************************************************************
 
;* Call: ***************************************************************
lz_cm_10:
NLength_CEncoder_GetPrice:
push ebp
mov ebp,esp
push ecx
2154,40 → 2294,42
push esi
cmp edx,8
jnb .labl_00
imul eax,eax,0x404
 
imul eax,eax,1028
lea esi,[eax+edi+8]
call cm_pr_17
call CBitTreeEncoder_GetPrice
mov ecx,[edi]
shr ecx,2
add eax,[0x51A18+ecx*4]
add eax,[Models+ecx*4]
jmp .labl_03
;----------------------------------------------------------
.labl_00:
push ebx
mov ebx,0x800
mov ebx,2048
mov ecx,ebx
sub ecx,[edi]
shr ecx,2
mov ecx,[0x51A18+ecx*4]
mov ecx,[Models+ecx*4]
mov [ebp-4],ecx
cmp edx,0x10
cmp edx,16
jnb .labl_01
imul eax,eax,0x404
 
imul eax,eax,1028
add edx,0xFFFFFFF8
lea esi,[eax+edi+0x4048]
call cm_pr_17
call CBitTreeEncoder_GetPrice
mov ecx,[edi+4]
shr ecx,2
add eax,[0x51A18+ecx*4]
add eax,[Models+ecx*4]
jmp .labl_02
;----------------------------------------------------------
.labl_01:
add edx,0xFFFFFFF0
lea esi,[edi+0x8088]
call cm_pr_17
call CBitTreeEncoder_GetPrice
sub ebx,[edi+4]
shr ebx,2
add eax,[0x51A18+ebx*4]
add eax,[Models+ebx*4]
;----------------------------------------------------------
.labl_02:
add [ebp-4],eax
2201,16 → 2343,17
;*****************************************************************************
 
;* Call: ***************************************************************
cm_pr_02:
CPriceTableEncoder_Encode:
push edi
mov edi,eax
mov edx,esi
cmp edi,8
jnb .labl_00
 
push 0
call cm_pr_14
call CMyBitEncoder_Encode
mov eax,ebx
imul eax,eax,0x404
imul eax,eax,1028
push edi
lea edi,[eax+esi+8]
jmp .labl_02
2217,15 → 2360,16
;----------------------------------------------------------
.labl_00:
push 1
call cm_pr_14
call CMyBitEncoder_Encode
lea edx,[esi+4]
cmp edi,0x10
cmp edi,16
jnb .labl_01
 
push 0
call cm_pr_14
call CMyBitEncoder_Encode
add edi,0xFFFFFFF8
mov eax,ebx
imul eax,eax,0x404
imul eax,eax,1028
push edi
lea edi,[eax+esi+0x4048]
jmp .labl_02
2232,7 → 2376,7
;----------------------------------------------------------
.labl_01:
push 1
call cm_pr_14
call CMyBitEncoder_Encode
add edi,0xFFFFFFF0
push edi
lea edi,[esi+0x8088]
2242,9 → 2386,10
dec dword [esi+ebx*4+0xC890]
pop edi
jne .labl_03
 
push ebx
mov eax,esi
call cm_pr_01
call CPriceTableEncoder_UpdateTable
;----------------------------------------------------------
.labl_03:
ret
2251,7 → 2396,7
;*****************************************************************************
 
;* Call: ***************************************************************
cm_pr_03:
CLiteralEncoder2_Encode:
push ebx
push esi
push edi
2261,8 → 2406,8
pop ebx
;----------------------------------------------------------
.labl_00:
movzx esi,byte [esp+0x14]
mov eax,[esp+0x10]
movzx esi,byte [esp+20]
mov eax,[esp+16]
dec ebx
mov cl,bl
shr esi,cl
2269,11 → 2414,12
lea edx,[eax+edi*4]
and esi,1
push esi
call cm_pr_14
call CMyBitEncoder_Encode
add edi,edi
or edi,esi
test ebx,ebx
jne .labl_00
 
pop edi
pop esi
pop ebx
2281,10 → 2427,10
;*****************************************************************************
 
;* Call: ***************************************************************
cm_pr_04:
mov edx,[0x519F4]
CState_IsCharState:
mov edx,[_numPrevBits]
push esi
mov esi,[0x519FC]
mov esi,[_posMask]
and esi,[esp+8]
push 8
pop ecx
2299,17 → 2445,17
;*****************************************************************************
 
;* Call: ***************************************************************
cm_pr_05:
push dword [esp+0x10]
push dword [esp+0x10]
push dword [esp+0x10]
push dword [esp+0x10]
call cm_pr_04
imul eax,eax,0xC00
add eax,[0x519F0]
CLiteralEncoder_GetPrice:
push dword [esp+16]
push dword [esp+16]
push dword [esp+16]
push dword [esp+16]
call CState_IsCharState
imul eax,eax,3072
add eax,[_posEncoders]
push eax
call lz_cm_11
ret 0x10
ret 16
;*****************************************************************************
 
;* Call: ***************************************************************
2324,16 → 2470,17
inc esi
push edi
mov dword [ebp-4],8
cmp [ebp+0xC],al
cmp [ebp+12],al
je .labl_02
movzx ecx,byte [ebp+0x14]
mov [ebp+0xC],ecx
 
movzx ecx,byte [ebp+20]
mov [ebp+12],ecx
;----------------------------------------------------------
.labl_00:
dec dword [ebp-4]
movzx ecx,byte [ebp-4]
movzx edi,byte [ebp+0x10]
mov edx,[ebp+0xC]
movzx edi,byte [ebp+16]
mov edx,[ebp+12]
mov ebx,[ebp+8]
shr edi,cl
shr edx,cl
2341,7 → 2488,7
mov ecx,edi
shl ecx,8
add ecx,esi
mov ecx,[ebx+ecx*4+0x400]
mov ecx,[ebx+ecx*4+1024]
and edx,1
sub ecx,edx
mov ebx,edx
2349,13 → 2496,15
xor ecx,ebx
shr ecx,2
and ecx,0x1FF
add eax,[0x51A18+ecx*4]
add eax,[Models+ecx*4]
add esi,esi
or esi,edx
cmp edi,edx
jne .labl_01
 
cmp dword [ebp-4],0
jne .labl_00
 
jmp .labl_04
;----------------------------------------------------------
.labl_01:
2363,7 → 2512,7
je .labl_04
;----------------------------------------------------------
.labl_02:
movzx edi,byte [ebp+0x14]
movzx edi,byte [ebp+20]
;----------------------------------------------------------
.labl_03:
dec dword [ebp-4]
2380,7 → 2529,7
xor ecx,ebx
shr ecx,2
and ecx,0x1FF
add eax,[0x51A18+ecx*4]
add eax,[Models+ecx*4]
or esi,edx
cmp dword [ebp-4],0
jne .labl_03
2390,27 → 2539,28
pop esi
pop ebx
leave
ret 0x10
ret 16
;*****************************************************************************
 
;* Call: ***************************************************************
cm_pr_06:
ReadMatchDistances:
push esi
call lz_cm_12
call GetLongestMatch
mov ecx,eax
mov esi,0x80 ;'€'
mov esi,0x80
cmp ecx,esi
jne .labl_00
push dword [0x1ACB0]
lea eax,[esi+0x11]
 
push dword [distances+512]
lea eax,[esi+17]
push esi
call cm_pr_18
call GetMatchLen
mov ecx,eax
add ecx,esi
;----------------------------------------------------------
.labl_00:
inc dword [0x1AEFC]
call cm_pr_19
inc dword [_additionalOffset]
call MatchFinder_MovePos
mov eax,ecx
pop esi
ret
2417,29 → 2567,30
;*****************************************************************************
 
;* Call: ***************************************************************
lz_cm_12:
GetLongestMatch:
push ebp
mov ebp,esp
sub esp,0x34
mov edx,[0x52218]
mov ecx,[0x5262C]
mov eax,[0x52630]
and dword [ebp-0x18],0
mov edx,[_matchMaxLen]
mov ecx,[_pos]
mov eax,[_streamPos]
and dword [ebp-24],0
push esi
lea esi,[edx+ecx]
cmp esi,eax
ja .labl_02
mov [ebp-0x20],edx
 
mov [ebp-32],edx
;----------------------------------------------------------
.labl_00:
mov eax,[0x51A0C]
mov eax,[_cyclicBufferSize]
mov edx,ecx
sub edx,eax
cmp eax,ecx
sbb eax,eax
and eax,edx
mov [ebp-0x28],eax
mov eax,[0x52628]
mov [ebp-40],eax
mov eax,[_buffer]
push ebx
push edi
lea edi,[eax+ecx]
2447,10 → 2598,10
movzx esi,byte [edi]
movzx eax,word [edi]
shl edx,8
xor edx,[0x52228+esi*4]
xor edx,[crc_table+esi*4]
movzx esi,byte [edi+1]
xor edx,esi
mov esi,[0x52224]
mov esi,[_hash]
and edx,0xFFFFF
lea edx,[esi+edx*4]
mov ebx,[edx]
2458,126 → 2609,135
mov [ebp-8],ebx
mov ebx,[eax]
mov [eax],ecx
or dword [0x01AAB8],0xFFFFFFFF
cmp ebx,[ebp-0x28]
or dword [distances+8],0xFFFFFFFF
cmp ebx,[ebp-40]
jbe .labl_01
 
mov eax,ecx
sub eax,ebx
dec eax
mov [0x01AAB8],eax
mov dword [ebp-0x18],2
mov [distances+8],eax
mov dword [ebp-24],2
;----------------------------------------------------------
.labl_01:
mov ebx,[0x5221C]
and dword [ebp-0x24],0
mov ebx,[pack_pos]
and dword [ebp-36],0
mov [edx],ecx
or dword [0x1AABC],0xFFFFFFFF
and dword [ebp-0x30],0
or dword [distances+12],0xFFFFFFFF
and dword [ebp-48],0
lea edx,[esi+ebx*8+0x440000]
lea eax,[edx+4]
mov [ebp-0x14],eax
mov eax,[0x52220]
mov [ebp-0x1C],eax
mov [ebp-20],eax
mov eax,[_cutValue]
mov [ebp-28],eax
mov eax,[ebp-8]
mov [ebp-0x10],edx
mov [ebp-16],edx
jmp .labl_13
;----------------------------------------------------------
.labl_02:
sub eax,ecx
mov [ebp-0x20],eax
mov [ebp-32],eax
cmp eax,3
jnb .labl_00
 
xor eax,eax
jmp .labl_16
;----------------------------------------------------------
.labl_03:
mov eax,[ebp-0x1C]
dec dword [ebp-0x1C]
mov eax,[ebp-28]
dec dword [ebp-28]
test eax,eax
je .labl_14
mov eax,[0x52628]
 
mov eax,[_buffer]
mov edx,[ebp-8]
add eax,edx
mov [ebp-0x2C],eax
mov eax,[ebp-0x30]
cmp eax,[ebp-0x24]
mov [ebp-44],eax
mov eax,[ebp-48]
cmp eax,[ebp-36]
jb .labl_04
mov eax,[ebp-0x24]
 
mov eax,[ebp-36]
;----------------------------------------------------------
.labl_04:
mov edx,[ebp-0x2C]
mov edx,[ebp-44]
mov [ebp-4],eax
add eax,edi
sub edx,edi
mov [ebp-0xC],edx
mov [ebp-12],edx
jmp .labl_06
;----------------------------------------------------------
.labl_05:
mov edx,[ebp-0xC]
mov eax,[ebp-0x34]
mov edx,[ebp-12]
mov eax,[ebp-52]
;----------------------------------------------------------
.labl_06:
mov dl,[edx+eax]
cmp dl,[eax]
jne .labl_07
 
inc dword [ebp-4]
inc eax
mov [ebp-0x34],eax
mov [ebp-52],eax
mov eax,[ebp-4]
cmp eax,[ebp-0x20]
cmp eax,[ebp-32]
jne .labl_05
;----------------------------------------------------------
.labl_07:
mov eax,ecx
sub eax,[ebp-8]
mov [ebp-0xC],eax
mov eax,[ebp-0x18]
mov [ebp-12],eax
mov eax,[ebp-24]
cmp eax,[ebp-4]
jnb .labl_09
;----------------------------------------------------------
.labl_08:
mov edx,[ebp-0xC]
mov edx,[ebp-12]
inc eax
dec edx
mov [0x1AAB0+eax*4],edx
mov [distances+eax*4],edx
cmp eax,[ebp-4]
jb .labl_08
mov [ebp-0x18],eax
 
mov [ebp-24],eax
;----------------------------------------------------------
.labl_09:
mov eax,ebx
sub eax,[ebp-0xC]
cmp [ebp-0xC],ebx
sub eax,[ebp-12]
cmp [ebp-12],ebx
jbe .labl_10
add eax,[0x51A0C]
 
add eax,[_cyclicBufferSize]
;----------------------------------------------------------
.labl_10:
lea eax,[esi+eax*8+0x440000]
mov [ebp-0xC],eax
mov [ebp-12],eax
mov eax,[ebp-4]
cmp eax,[ebp-0x20]
cmp eax,[ebp-32]
je .labl_17
mov edx,[ebp-0x2C]
 
mov edx,[ebp-44]
mov dl,[eax+edx]
cmp dl,[eax+edi]
mov eax,[ebp-8]
jnb .labl_11
mov edx,[ebp-0x10]
 
mov edx,[ebp-16]
mov [edx],eax
mov eax,[ebp-0xC]
mov eax,[ebp-12]
mov edx,[ebp-4]
add eax,4
mov [ebp-0x10],eax
mov [ebp-0x24],edx
mov [ebp-16],eax
mov [ebp-36],edx
jmp .labl_12
;----------------------------------------------------------
.labl_11:
mov edx,[ebp-0x14]
mov edx,[ebp-20]
mov [edx],eax
mov eax,[ebp-0xC]
mov eax,[ebp-12]
mov edx,[ebp-4]
mov [ebp-0x14],eax
mov [ebp-0x30],edx
mov [ebp-20],eax
mov [ebp-48],edx
;----------------------------------------------------------
.labl_12:
mov eax,[eax]
2584,17 → 2744,17
mov [ebp-8],eax
;----------------------------------------------------------
.labl_13:
cmp eax,[ebp-0x28]
cmp eax,[ebp-40]
ja .labl_03
;----------------------------------------------------------
.labl_14:
mov eax,[ebp-0x10]
mov eax,[ebp-16]
and dword [eax],0
mov eax,[ebp-0x14]
mov eax,[ebp-20]
and dword [eax],0
;----------------------------------------------------------
.labl_15:
mov eax,[ebp-0x18]
mov eax,[ebp-24]
pop edi
pop ebx
;----------------------------------------------------------
2604,18 → 2764,18
ret
;----------------------------------------------------------
.labl_17:
mov eax,[ebp-0xC]
mov eax,[ebp-12]
mov ecx,[eax]
mov edx,[ebp-0x10]
mov edx,[ebp-16]
mov [edx],ecx
mov eax,[eax+4]
mov ecx,[ebp-0x14]
mov ecx,[ebp-20]
mov [ecx],eax
jmp .labl_15
;*****************************************************************************
 
;* Call: ***************************************************************
cm_pr_07:
FillPosSlotPrices:
push ecx
push ebx
push ebp
2622,31 → 2782,34
push esi
push edi
xor ebp,ebp
mov esi,0x1BC18
mov dword [esp+0x10],4
mov esi,_posSlotEncoder
mov dword [esp+16],4
;----------------------------------------------------------
.labl_00:
xor edi,edi
;----------------------------------------------------------
.labl_01:
mov ebx,[0x29570]
mov ebx,[_distTableSize]
cmp edi,ebx
jnb .labl_03
 
mov edx,edi
call cm_pr_17
call CBitTreeEncoder_GetPrice
lea ecx,[edi+ebp]
inc edi
mov [0x1A3B0+ecx*4],eax
cmp edi,0xE
mov [_posSlotPrices+ecx*4],eax
cmp edi,14
jb .labl_01
 
cmp edi,ebx
jnb .labl_03
 
lea ebx,[edi+ebp]
lea ebx,[0x1A3B0+ebx*4]
lea ebx,[_posSlotPrices+ebx*4]
;----------------------------------------------------------
.labl_02:
mov edx,edi
call cm_pr_17
call CBitTreeEncoder_GetPrice
mov ecx,edi
shr ecx,1
sub ecx,5
2655,14 → 2818,15
mov [ebx],eax
inc edi
add ebx,4
cmp edi,[0x29570]
cmp edi,[_distTableSize]
jb .labl_02
;----------------------------------------------------------
.labl_03:
add esi,0x404
add ebp,0x40 ;'@'
dec dword [esp+0x10]
add esi,1028
add ebp,64
dec dword [esp+16]
jne .labl_00
 
pop edi
pop esi
pop ebp
2672,40 → 2836,40
;***********************************************************************
 
;* Call: ***************************************************************
cm_pr_08:
FillDistancesPrices:
push ebp
mov ebp,esp
sub esp,0x24
and dword [ebp-0x14],0
sub esp,36
and dword [ebp-20],0
push ebx
push esi
push edi
push 4
pop ebx
mov dword [ebp-0x18],0x1B418
mov dword [ebp-0x10],0x1A3B0
mov [ebp-0x24],ebx
mov dword [ebp-24],_distancesPrices+16
mov dword [ebp-16],_posSlotPrices
mov [ebp-36],ebx
;----------------------------------------------------------
.labl_00:
mov eax,[ebp-0x18]
mov esi,[ebp-0x10]
lea edi,[eax-0x10]
mov eax,[ebp-24]
mov esi,[ebp-16]
lea edi,[eax-16]
movsd
movsd
movsd
movsd
mov [ebp-4],ebx
mov [ebp-0xC],eax
mov [ebp-12],eax
;----------------------------------------------------------
.labl_01:
mov esi,[ebp-4]
mov eax,esi
call cm_pr_000
call GetPosSlot
mov edx,eax
mov ecx,edx
xor eax,eax
inc eax
mov [ebp-0x20],edx
mov [ebp-32],edx
and edx,eax
shr ecx,1
dec ecx
2713,7 → 2877,7
shl edx,cl
xor edi,edi
mov [ebp-8],eax
mov [ebp-0x1C],ecx
mov [ebp-28],ecx
sub esi,edx
test ecx,ecx
je .labl_03
2720,10 → 2884,10
;----------------------------------------------------------
.labl_02:
mov eax,[ebp-8]
sub eax,[ebp-0x20]
sub eax,[ebp-32]
mov ecx,esi
add eax,edx
mov eax,[0x1B234+eax*4]
mov eax,[_numLiteralContextBits+eax*4]
and ecx,1
sub eax,ecx
mov ebx,ecx
2731,33 → 2895,36
xor eax,ebx
shr eax,2
and eax,0x1FF
add edi,[0x51A18+eax*4]
add edi,[Models+eax*4]
mov eax,[ebp-8]
shr esi,1
dec dword [ebp-0x1C]
dec dword [ebp-28]
lea eax,[ecx+eax*2]
mov [ebp-8],eax
jne .labl_02
 
push 4
pop ebx
;----------------------------------------------------------
.labl_03:
mov eax,[ebp-0x20]
mov ecx,[ebp-0x14]
mov eax,[ebp-32]
mov ecx,[ebp-20]
add ecx,eax
mov eax,[0x1A3B0+ecx*4]
mov ecx,[ebp-0xC]
add [ebp-0xC],ebx
mov eax,[_posSlotPrices+ecx*4]
mov ecx,[ebp-12]
add [ebp-12],ebx
add eax,edi
inc dword [ebp-4]
cmp dword [ebp-4],0x80 ;'€'
cmp dword [ebp-4],0x80
mov [ecx],eax
jb .labl_01
add dword [ebp-0x10],0x100
add dword [ebp-0x14],0x40 ;'@'
add dword [ebp-0x18],0x200
dec dword [ebp-0x24]
 
add dword [ebp-16],256
add dword [ebp-20],64
add dword [ebp-24],512
dec dword [ebp-36]
jne .labl_00
 
pop edi
pop esi
pop ebx
2766,7 → 2933,7
;***********************************************************************
 
;* Call: ***************************************************************
cm_pr_09:
FillAlignPrices:
push ebp
mov ebp,esp
push ecx
2778,7 → 2945,7
mov [ebp-8],esi
;----------------------------------------------------------
.labl_00:
mov eax,[0x519E8]
mov eax,[i_01]
xor edx,edx
xor ecx,ecx
inc edx
2785,7 → 2952,7
mov [ebp-4],eax
;----------------------------------------------------------
.labl_01:
mov edi,[0x515E8+edx*4]
mov edi,[_posAlignEncoder+edx*4]
mov eax,esi
and eax,1
sub edi,eax
2794,22 → 2961,24
xor edi,ebx
shr edi,2
and edi,0x1FF
add ecx,[0x51A18+edi*4]
add ecx,[Models+edi*4]
shr esi,1
dec dword [ebp-4]
lea edx,[eax+edx*2]
jne .labl_01
 
mov esi,[ebp-8]
push 0x10
mov [0x51578+esi*4],ecx
push 16
mov [_alignPrices+esi*4],ecx
inc esi
pop eax
mov [ebp-8],esi
cmp esi,eax
jb .labl_00
 
pop edi
pop esi
mov [0x1B230],eax
mov [_alignPriceCount],eax
pop ebx
leave
ret
2816,35 → 2985,36
;***********************************************************************
 
;* Call: ***************************************************************
cm_pr_10:
GetRepLen1Price:
movzx eax,al
mov edx,[0x1CC38+eax*4]
mov edx,[_isRepG0+eax*4]
mov ecx,eax
shl ecx,4
add ecx,[esp+4]
shr edx,2
mov ecx,[0x1A7B0+ecx*4]
mov ecx,[_isRep0Long+ecx*4]
shr ecx,2
mov eax,[0x51A18+ecx*4]
add eax,[0x51A18+edx*4]
mov eax,[Models+ecx*4]
add eax,[Models+edx*4]
ret 4
;***********************************************************************
 
;* Call: ***************************************************************
cm_pr_11:
GetRepPrice:
movzx ecx,byte [esp+4]
shl eax,4
add eax,[esp+8]
push esi
mov eax,[0x25074+eax*4]
mov esi,0x800
mov eax,[_repMatchLenEncoder+0x840C+eax*4]
mov esi,2048
test edx,edx
jne .labl_00
 
mov edx,ecx
mov ecx,[0x1CC38+ecx*4]
mov ecx,[_isRepG0+ecx*4]
shl edx,4
add edx,[esp+0xC]
sub esi,[0x1A7B0+edx*4]
add edx,[esp+12]
sub esi,[_isRep0Long+edx*4]
shr ecx,2
jmp .labl_02
;----------------------------------------------------------
2852,20 → 3022,21
push edi
shl ecx,2
mov edi,esi
sub edi,[ecx+0x1CC38]
sub edi,[ecx+_isRepG0]
shr edi,2
add eax,[0x51A18+edi*4]
add eax,[Models+edi*4]
pop edi
cmp edx,1
jne .labl_01
mov ecx,[ecx+0x1AF00]
 
mov ecx,[ecx+_isRepG1]
shr ecx,2
add eax,[0x51A18+ecx*4]
add eax,[Models+ecx*4]
jmp .labl_03
;----------------------------------------------------------
.labl_01:
sub esi,[ecx+0x1AF00]
mov ecx,[ecx+0x29538]
sub esi,[ecx+_isRepG1]
mov ecx,[ecx+_isRepG2]
add edx,0xFFFFFFFE
sub ecx,edx
neg edx
2875,8 → 3046,8
;----------------------------------------------------------
.labl_02:
shr esi,2
mov edx,[0x51A18+esi*4]
add edx,[0x51A18+ecx*4]
mov edx,[Models+esi*4]
add edx,[Models+ecx*4]
add eax,edx
;----------------------------------------------------------
.labl_03:
2885,15 → 3056,17
;***********************************************************************
 
;* Call: ***************************************************************
cm_pr_12:
GetPosLenPrice:
push esi
mov esi,eax
mov ecx,0x80 ;'€'
mov ecx,0x80
cmp esi,2
jne .labl_00
 
cmp edx,ecx
jb .labl_01
mov eax,0x0FFFFFFF
 
mov eax,kIfinityPrice
jmp .labl_09
;----------------------------------------------------------
.labl_00:
2911,44 → 3084,48
.labl_03:
cmp edx,ecx
jnb .labl_04
 
shl eax,7
add eax,edx
mov ecx,[0x1B408+eax*4]
mov ecx,[_distancesPrices+eax*4]
jmp .labl_08
;----------------------------------------------------------
.labl_04:
mov ecx,edx
cmp edx,0x10000
;GetPosSlot2
cmp edx,0x10000 ;if (pos < (1<<16))
jnb .labl_05
 
shr ecx,6
movzx ecx,byte [ecx+0x19FB0]
add ecx,0xC
movzx ecx,byte [ecx+g_FastPos]
add ecx,12
jmp .labl_07
;----------------------------------------------------------
.labl_05:
cmp edx,0x2000000
cmp edx,0x2000000 ;if (pos < (1<<25))
jnb .labl_06
shr ecx,0xF
movzx ecx,byte [ecx+0x19FB0]
add ecx,0x1E
 
shr ecx,15
movzx ecx,byte [ecx+g_FastPos]
add ecx,30
jmp .labl_07
;----------------------------------------------------------
.labl_06:
shr ecx,0x18
movzx ecx,byte [ecx+0x19FB0]
add ecx,0x30 ;'0'
shr ecx,24
movzx ecx,byte [ecx+g_FastPos]
add ecx,48
;----------------------------------------------------------
.labl_07:
shl eax,6
add eax,ecx
mov ecx,[0x1A3B0+eax*4]
and edx,0xF
add ecx,[0x51578+edx*4]
mov ecx,[_posSlotPrices+eax*4]
and edx,15
add ecx,[_alignPrices+edx*4]
;----------------------------------------------------------
.labl_08:
shl esi,4
add esi,[esp+8]
mov eax,[0x15AE4+esi*4]
mov eax,[_prices+esi*4]
add eax,ecx
;----------------------------------------------------------
.labl_09:
2957,19 → 3134,20
;***********************************************************************
 
;* Call: ***************************************************************
cm_pr_13:
RangeEncoder_ShiftLow:
push ecx
push ecx
mov eax,[0x51A10]
mov eax,[low]
push esi
mov esi,[0x51A14]
mov esi,[low+4]
cmp eax,0xFF000000
jb .labl_00
 
test esi,esi
je .labl_02
;----------------------------------------------------------
.labl_00:
mov cl,[0x519ED]
mov cl,[_cache]
and dword [esp+8],0
mov edx,esi
push ebx
2977,21 → 3155,22
.labl_01:
mov bl,dl
add bl,cl
mov ecx,[0x52634]
inc dword [0x52634]
mov ecx,[pack_length]
inc dword [pack_length]
mov [ecx],bl
or cl,0xFF
dec dword [0x51A08]
dec dword [_cacheSize]
jne .labl_01
mov cl,[0x51A13]
mov [0x519ED],cl
 
mov cl,[low+3]
mov [_cache],cl
pop ebx
;----------------------------------------------------------
.labl_02:
inc dword [0x51A08]
inc dword [_cacheSize]
shl eax,8
and dword [0x51A14],0
mov [0x51A10],eax
and dword [low+4],0
mov [low],eax
pop esi
pop ecx
pop ecx
2999,15 → 3178,16
;***********************************************************************
 
;* Call: ***************************************************************
cm_pr_14:
mov ecx,[0x51A04]
CMyBitEncoder_Encode:
mov ecx,[range]
mov eax,[edx]
shr ecx,0xB
imul ecx,eax
cmp dword [esp+4],0
jne .labl_00
mov [0x51A04],ecx
mov ecx,0x800
 
mov [range],ecx
mov ecx,2048
sub ecx,eax
shr ecx,5
add ecx,eax
3015,9 → 3195,9
jmp .labl_01
;----------------------------------------------------------
.labl_00:
add [0x51A10],ecx
adc dword [0x51A14],0
sub [0x51A04],ecx
add [low],ecx
adc dword [low+4],0
sub [range],ecx
mov ecx,eax
shr ecx,5
sub eax,ecx
3024,10 → 3204,11
mov [edx],eax
;----------------------------------------------------------
.labl_01:
cmp dword [0x51A04],0x1000000
cmp dword [range],0x1000000
jnb .labl_02
shl dword [0x51A04],8
call cm_pr_13
 
shl dword [range],8
call RangeEncoder_ShiftLow
;----------------------------------------------------------
.labl_02:
ret 4
3034,17 → 3215,18
;***********************************************************************
 
;* Call: ***************************************************************
cm_pr_15:
CBitTreeEncoder_Init:
xor edx,edx
inc edx
shl edx,cl
mov [eax+0x400],ecx
mov [eax+1024],ecx
lea ecx,[edx-1]
test ecx,ecx
jbe .labl_00
 
push edi
lea edi,[eax+4]
mov eax,0x400
mov eax,1024
rep stosd
pop edi
;----------------------------------------------------------
3056,15 → 3238,15
cm_pr_16:
mov eax,[esp+4]
push ebx
mov ebx,[edi+0x400]
mov ebx,[edi+1024]
push esi
xor esi,esi
inc esi
add eax,eax
mov [esp+0xC],eax
mov [esp+12],eax
;----------------------------------------------------------
.labl_00:
mov eax,[esp+0xC]
mov eax,[esp+12]
mov ecx,ebx
shr eax,cl
lea edx,[edi+esi*4]
3071,9 → 3253,10
and eax,1
push eax
lea esi,[eax+esi*2]
call cm_pr_14
call CMyBitEncoder_Encode
dec ebx
jne .labl_00
 
pop esi
pop ebx
ret 4
3080,8 → 3263,8
;***********************************************************************
 
;* Call: ***************************************************************
cm_pr_17:
mov ecx,[esi+0x400]
CBitTreeEncoder_GetPrice:
mov ecx,[esi+1024]
push edi
xor edi,edi
inc edi
3099,41 → 3282,45
xor edi,ecx
shr edi,2
and edi,0x1FF
add eax,[0x51A18+edi*4]
add eax,[Models+edi*4]
cmp edx,1
jne .labl_00
 
pop edi
ret
;***********************************************************************
 
;* Call: ***************************************************************
cm_pr_18:
mov ecx,[0x52630]
GetMatchLen:
mov ecx,[_streamPos]
push edi
mov edi,eax
mov eax,[0x5262C]
mov eax,[_pos]
sub ecx,eax
sub ecx,[esp+8]
cmp edi,ecx
jbe .labl_00
 
mov edi,ecx
;----------------------------------------------------------
.labl_00:
mov ecx,[0x52628]
inc dword [esp+0xC]
mov ecx,[_buffer]
inc dword [esp+12]
add ecx,eax
add ecx,[esp+8]
xor eax,eax
test edi,edi
jbe .labl_03
 
push esi
mov esi,ecx
sub esi,[esp+0x10]
sub esi,[esp+16]
;----------------------------------------------------------
.labl_01:
mov dl,[eax+ecx]
cmp dl,[esi+eax]
jne .labl_02
 
inc eax
cmp eax,edi
jb .labl_01
3147,14 → 3334,15
;***********************************************************************
 
;* Call: ***************************************************************
cm_pr_19:
inc dword [0x5221C]
mov eax,[0x5221C]
cmp eax,[0x51A0C]
MatchFinder_MovePos:
inc dword [pack_pos]
mov eax,[pack_pos]
cmp eax,[_cyclicBufferSize]
jne .labl_00
and dword [0x5221C],0
 
and dword [pack_pos],0
;----------------------------------------------------------
.labl_00:
inc dword [0x5262C]
inc dword [_pos]
ret
;***********************************************************************