; ; LZMA compression code ripped from Starctaft II BEta ; Used while StormLib's LZMA implementation was tested against Starcraft compression ; Not used in StormLib. ; .686P .MODEL FLAT ASSUME FS: NOTHING .DATA ;--------------------------------------------------------------------------- ; Data byte_4CB248 db 0, 0Bh, 0Bh, 0Bh ; indirect table for switch statement db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 1, 2, 3, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 4, 5, 6, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 7, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 8, 9, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Bh, 0Bh, 0Bh, 0Bh db 0Ah align 10h dword_544960 dd 0BB40E64Eh ; DATA XREF: sub_401C72+B dword_553598 dd ? ; DATA XREF: sub_4CB8A0+9 off_50CD3C dd offset sub_4A0605 ; DATA XREF: sub_4A05F7+1o ; .data:off_52A004o ... dword_50CD40 dd 0E06D7363h ; DATA XREF: _CxxThrowException(x,x)+Eo dd 1 dd 0 dd 0 dd 3 dd 19930520h dd 0 dd 0 ; --------------------------------------------------------------------------- off_546E20 dd offset sub_4CDD70 ; DATA XREF: sub_4D0270:loc_4D0324o off_546E24 dd offset sub_4CDD90 ; DATA XREF: sub_4CF810+53r off_546E28 dd offset off_50CD3C ; DATA XREF: .rdata:off_51B888o dd 0 db '.?AUISequentialInStream@@',0 db 0 db 0 off_546E4C dd offset off_50CD3C ; DATA XREF: .rdata:off_51B8C0o dd 0 db '.?AUISequentialOutStream@@',0 db 0 off_546E70 dd offset off_50CD3C ; DATA XREF: .rdata:off_51B8F8o dd 0 db '.?AUICompressCoder@@',0 db 0 db 0 db 0 off_546E90 dd offset off_50CD3C ; DATA XREF: .rdata:off_51B944o dd 0 db '.?AUICompressSetOutStream@@',0 off_546EB4 dd offset off_50CD3C ; DATA XREF: .rdata:0051B96Co dd 0 db '.?AUICompressSetCoderProperties@@',0 db 0 db 0 off_546EE0 dd offset off_50CD3C ; DATA XREF: .rdata:0051B9B8o dd 0 db '.?AUICompressWriteCoderProperties@@',0 dd offset off_50CD3C dd 0 db '.?AUCSystemException@@',0 db 0 dd offset off_50CD3C dd 0 db '.?AUCOutBufferException@@',0 db 0 db 0 off_546F50 dd offset off_50CD3C ; DATA XREF: .rdata:0051BA04o dd 0 db '.?AVCInStreamMemory@@',0 db 0 db 0 off_546F70 dd offset off_50CD3C ; DATA XREF: .rdata:off_51BA4Co dd 0 db '.?AVCMyUnknownImp@@',0 off_546F8C dd offset off_50CD3C ; DATA XREF: .rdata:0051BAA8o dd 0 db '.?AVCOutStreamMemory@@',0 db 0 off_546FAC dd offset off_50CD3C ; DATA XREF: .rdata:0051BAFCo dd 0 db '.?AVCEncoder@NLZMA@NCompress@@',0 db 0 off_546FD4 dd offset off_50CD3C ; DATA XREF: .rdata:off_51BBECo dd 0 db '.?AVCBaseState@NLZMA@NCompress@@',0 db 0 db 0 db 0 ; --------------------------------------------------------------------------- dword_51B960 dd 0 ; DATA XREF: .rdata:00517A64o dd 0 dd 0 dd offset off_546EB4 dd 0 ; offset dword_51B974 dword_51B9AC dd 0 ; DATA XREF: .rdata:00517A78o dd 0 dd 0 dd offset off_546EE0 dd 0 ;offset dword_51B9C0 dword_51B9F8 dd 0 ; DATA XREF: .rdata:00517A8Co dd 0 dd 0 dd offset off_546F50 dd 0 ; offset dword_51BA0C dword_51BA9C dd 0 ; DATA XREF: .rdata:00517AA0o dd 0 dd 0 dd offset off_546F8C dd 0 ; offset dword_51BAB0 dword_51BAF0 dd 0 ; DATA XREF: .rdata:00517AF8o dd 0 dd 0 dd offset off_546FAC dd 0 ; offset dword_51BB04 dword_51BC58 dd 0 ; DATA XREF: .rdata:00517AE0o dd 4 dd 0 dd offset off_546FAC dd 0 ; offset dword_51BB04 dword_51BC6C dd 0 ; DATA XREF: .rdata:00517ACCo dd 8 dd 0 dd offset off_546FAC dd 0 ; offset dword_51BB04 dword_51BC80 dd 0 ; DATA XREF: .rdata:00517AB8o dd 0Ch dd 0 dd offset off_546FAC dd 0 ; offset dword_51BB04 ; --------------------------------------------------------------------------- dword_512730 dd 0 ; DATA XREF: sub_48DB4D+B9o dword_512734 dd 0 ; DATA XREF: CCmdTarget::GetInterface(void const *)+2Dr dword_512738 dd 0C0h ; DATA XREF: CCmdTarget::GetInterface(void const *)+38r dword_51273C dd 46000000h ; DATA XREF: CCmdTarget::GetInterface(void const *)+43r dword_5535A0 dd ? ; DATA XREF: sub_4CF900:loc_4CF94Co dword_5535A4 dd ? ; DATA XREF: .text:004DAF37w dword_5535A8 dd ? ; DATA XREF: .text:004DAF3Cw dword_5535AC dd ? ; DATA XREF: .text:004DAF41w dword_5535B0 dd ? ; DATA XREF: sub_4CF900+5Eo dword_5535B4 dd ? ; DATA XREF: .text:004DAF17w dword_5535B8 dd ? ; DATA XREF: .text:004DAF1Cw dword_5535BC dd ? ; DATA XREF: .text:004DAF21w dword_5535C0 dd ? ; DATA XREF: sub_4CF900:loc_4CF98Fo dword_5535C4 dd ? ; DATA XREF: .text:004DAEF7w dword_5535C8 dd ? ; DATA XREF: .text:004DAEFCw dword_5535CC dd ? ; DATA XREF: .text:004DAF01w dword_526DD0 dd 0 ; DATA XREF: .text:loc_4CF6CBo dd 0 dd 0 dd 0 ; offset dword_526DE0 kLiteralNextStates db 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5 kMatchNextStates db 7, 7, 7, 7, 7, 7, 7, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah kRepNextStates db 8, 8, 8, 8, 8, 8, 8, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh kShortRepNextStates db 9, 9, 9, 9, 9, 9, 9, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh dword_550998 dd 200h dup(?) dword_551198 dd 800h dup(?) dword_553198 dd 100h dup(?) ICompressSetOutStream_vftable dd offset __purecall ; DATA XREF: NCompress_NLZMA_CEncoder_CEncoder+2o dd offset __purecall dd offset __purecall dd offset __purecall dd offset __purecall dd offset dword_51B960 ICompressSetCoderProperties_vftable dd offset __purecall ; DATA XREF: NCompress_NLZMA_CEncoder_CEncoder+9o dd offset __purecall dd offset __purecall dd offset __purecall dd offset dword_51B9AC ICompressWriteCoderProperties_vftable dd offset __purecall ; DATA XREF: NCompress_NLZMA_CEncoder_CEncoder+10o dd offset __purecall dd offset __purecall dd offset __purecall dd offset dword_51B9F8 off_517A90 dd offset Interface1_QueryInterface dd offset Interface1_AddRef dd offset Interface1_Release dd offset sub_4CCB20 dd offset dword_51BA9C off_517AA4 dd offset Interface1_QueryInterface ; DATA XREF: sub_4CF610+Eo dd offset Interface1_AddRef dd offset Interface2_Release dd offset sub_4CCB90 dd offset sub_4CF590 dd offset dword_51BC80 NCompress_NLZMA_CEncoder_vftable_ICompressWriteCoderProperties dd offset sub_4CFA50 ; DATA XREF: sub_4CF810+3Do dd offset sub_4CFA10 dd offset sub_4CFA70 dd offset sub_4CDDB0 dd offset dword_51BC6C NCompress_NLZMA_CEncoder_vftable_ICompressSetCoderProperties dd offset ICompressSetCoderProperties_QueryInterface ; DATA XREF: sub_4CF810+36o dd offset ICompressSetCoderProperties_AddRef dd offset ICompressSetCoderProperties_Release dd offset ICompressSetCoderProperties_SetCoderProperties dd offset dword_51BC58 NCompress_NLZMA_CEncoder_vftable_ICompressSetOutStream dd offset sub_4CFA20 ; DATA XREF: sub_4CF810+2Fo dd offset sub_4CFA80 dd offset sub_4CFA40 dd offset sub_4CFA90 dd offset sub_4CDE70 dd offset dword_51BAF0 NCompress_NLZMA_CEncoder_vftable dd offset sub_4CF900 ; DATA XREF: sub_4CF810+29o dd offset sub_4CF9D0 dd offset sub_4CF9E0 dd offset CEncoder_Code dd offset sub_4D0250 .CODE extrn _operator_new:PROC extrn __allshr: PROC extrn _free: PROC extrn _memcmp: PROC extrn _memcpy: PROC extrn _memset: PROC extrn ___report_gsfailure: PROC extrn __purecall: PROC VirtualAlloc PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD VirtualFree PROTO STDCALL :DWORD,:DWORD,:DWORD ; --------------------------------------------------------------------------- ; void __cdecl j__free(void *Memory) ; 004843B8 j__free proc near ; CODE XREF: sub_401048+16p ; .text:004010CFp ... jmp _free j__free endp ; --------------------------------------------------------------------------- ; int __cdecl unknown_libname_324(void *Buf1, void *Buf2) unknown_libname_324 proc near ; sub_48B7BA Buf1 = dword ptr 4 Buf2 = dword ptr 8 push 10h ; Size push [esp+4+Buf2] ; Buf2 push [esp+8+Buf1] ; Buf1 call _memcmp add esp, 0Ch neg eax sbb eax, eax inc eax retn unknown_libname_324 endp ; --------------------------------------------------------------------------- sub_4A05F7 proc near ; CODE XREF: sub_4A0605+3p push ecx mov dword ptr [ecx], offset off_50CD3C call sub_4A98B8 pop ecx retn sub_4A05F7 endp ; --------------------------------------------------------------------------- ; int __thiscall sub_4A0605(void *Memory, char) sub_4A0605 proc near ; DATA XREF: .rdata:off_50CD3Co arg_0 = byte ptr 4 push esi mov esi, ecx call sub_4A05F7 test [esp+4+arg_0], 1 jz short loc_4A061B push esi ; Memory call j__free pop ecx loc_4A061B: ; CODE XREF: sub_4A0605+Dj mov eax, esi pop esi retn 4 sub_4A0605 endp ; --------------------------------------------------------------------------- sub_4A0686 proc near ; CODE XREF: sub_401C72+49p ; sub_40222F+15Cp ... cmp ecx, dword_544960 jnz short loc_4A0690 retn loc_4A0690: ; CODE XREF: sub_4A0686+6j jmp ___report_gsfailure sub_4A0686 endp ; --------------------------------------------------------------------------- sub_4A98B8 proc near ; CODE XREF: sub_4A05F7+7p int 3 retn sub_4A98B8 endp ; =============== S U B R O U T I N E ======================================= sub_4CAEC0 proc near ; CODE XREF: CEncoder_GetOptimum+514p arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch push esi push edi mov edi, [esp+8+arg_4] lea eax, [edi-2] cmp eax, 4 mov esi, ecx jb short loc_4CAED5 mov eax, 3 loc_4CAED5: ; CODE XREF: sub_4CAEC0+Ej mov edx, [esp+8+arg_0] cmp edx, 80h jnb short loc_4CAEEF shl eax, 7 add eax, edx mov ecx, [esi+eax*4+33314h] jmp short loc_4CAF25 ; --------------------------------------------------------------------------- loc_4CAEEF: ; CODE XREF: sub_4CAEC0+1Fj mov ecx, 7FFFFh sub ecx, edx sar ecx, 1Fh push ebx and ecx, 0Ch add ecx, 6 mov ebx, edx shr ebx, cl shl eax, 5 add eax, ecx and edx, 0Fh movzx ebx, byte ptr dword_551198[ebx] lea eax, [ebx+eax*2] mov ecx, [esi+eax*4+32F14h] add ecx, [esi+edx*4+33B14h] pop ebx loc_4CAF25: ; CODE XREF: sub_4CAEC0+2Dj mov edx, [esp+8+arg_8] imul edx, 110h add edx, edi mov eax, [esi+edx*4+295B8h] pop edi add eax, ecx pop esi retn 0Ch sub_4CAEC0 endp ; --------------------------------------------------------------------------- align 10h loc_4CAF40: ; CODE XREF: .text:004DAED5j push ecx push ebx push ebp push esi mov ebp, 2 mov bl, 2 push edi mov byte ptr dword_551198, 0 mov byte ptr dword_551198+1, 1 mov [esp+10h], bl mov edi, ebp loc_4CAF60: ; CODE XREF: .text:004CAF96j mov ecx, edi shr ecx, 1 sub ecx, 1 mov esi, 1 shl esi, cl test esi, esi jbe short loc_4CAF89 mov ecx, [esp+10h] push esi lea eax, dword_551198[ebp] push ecx push eax call _memset add esp, 0Ch add ebp, esi loc_4CAF89: ; CODE XREF: .text:004CAF70j add bl, 1 add edi, 1 cmp bl, 1Ah mov [esp+10h], bl jb short loc_4CAF60 pop edi pop esi pop ebp pop ebx pop ecx retn ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CAFA0 proc near ; CODE XREF: sub_4CAFC0+90p arg_0 = dword ptr 4 mov eax, [esp+arg_0] lea ecx, [eax-61h] cmp cx, 19h ja short locret_4CAFB2 add eax, 0FFE0h locret_4CAFB2: ; CODE XREF: sub_4CAFA0+Bj retn sub_4CAFA0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CAFC0 proc near ; CODE XREF: ICompressSetCoderProperties_SetCoderProperties+A5p movzx ecx, word ptr [eax] lea edx, [ecx-61h] cmp dx, 19h ja short loc_4CAFD2 add ecx, 0FFE0h loc_4CAFD2: ; CODE XREF: sub_4CAFC0+Aj add eax, 2 cmp cx, 48h jnz short loc_4CB01B movzx ecx, word ptr [eax] lea edx, [ecx-61h] cmp dx, 19h ja short loc_4CAFED add ecx, 0FFE0h loc_4CAFED: ; CODE XREF: sub_4CAFC0+25j add eax, 2 cmp cx, 43h jz short loc_4CAFF9 loc_4CAFF6: ; CODE XREF: sub_4CAFC0+44j ; sub_4CAFC0+4Bj ... xor eax, eax retn ; --------------------------------------------------------------------------- loc_4CAFF9: ; CODE XREF: sub_4CAFC0+34j movzx ecx, word ptr [eax] sub ecx, 30h lea edx, [ecx-4] test edx, edx ja short loc_4CAFF6 cmp word ptr [eax+2], 0 jnz short loc_4CAFF6 mov dword ptr [ebx], 0 mov [edi], ecx mov eax, 1 retn ; --------------------------------------------------------------------------- loc_4CB01B: ; CODE XREF: sub_4CAFC0+19j cmp cx, 42h jnz short loc_4CAFF6 movzx ecx, word ptr [eax] lea edx, [ecx-61h] cmp dx, 19h ja short loc_4CB033 add ecx, 0FFE0h loc_4CB033: ; CODE XREF: sub_4CAFC0+6Bj add eax, 2 cmp cx, 54h jnz short loc_4CAFF6 push esi movzx esi, word ptr [eax] sub esi, 30h lea ecx, [esi-2] cmp ecx, 2 ja short loc_4CB06C movzx eax, word ptr [eax+2] push eax call sub_4CAFA0 add esp, 4 test ax, ax jnz short loc_4CB06C mov dword ptr [ebx], 1 mov [edi], esi mov eax, 1 pop esi retn ; --------------------------------------------------------------------------- loc_4CB06C: ; CODE XREF: sub_4CAFC0+89j ; sub_4CAFC0+9Bj xor eax, eax pop esi retn sub_4CAFC0 endp ICompressSetCoderProperties_SetCoderProperties proc near ; DATA XREF: .rdata:00517ADCo var_4 = dword ptr -4 pThis = dword ptr 4 propIDs = dword ptr 8 properties = dword ptr 0Ch numProperties = dword ptr 10h push ecx push ebx push ebp xor edx, edx cmp [esp+0Ch+numProperties], edx push esi push edi mov [esp+14h+var_4], edx jbe loc_4CB20D mov esi, [esp+14h+properties] mov ebp, [esp+14h+pThis] lea ecx, [ecx+0] loc_4CB090: ; CODE XREF: sub_4CB070+197j mov eax, [esp+14h+propIDs] mov eax, [eax+edx*4] add eax, 0FFFFFC00h cmp eax, 90h ; switch 145 cases ja loc_4CB131 ; default ; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143 movzx ecx, ds:byte_4CB248[eax] jmp ds:off_4CB218[ecx*4] ; switch jump loc_4CB0B5: ; DATA XREF: .text:off_4CB218o cmp word ptr [esi], 13h ; jumptable 004CB0AE case 80 jnz short loc_4CB131 ; default ; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143 mov eax, [esi+8] lea ecx, [eax-5] cmp ecx, 10Ch ja short loc_4CB131 ; default ; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143 mov [ebp+32EF0h], eax jmp loc_4CB1F9 ; --------------------------------------------------------------------------- loc_4CB0D4: ; CODE XREF: sub_4CB070+3Ej ; DATA XREF: .text:off_4CB218o cmp word ptr [esi], 13h ; jumptable 004CB0AE case 82 jnz short loc_4CB131 ; default ; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143 mov eax, [esi+8] mov [ebp+33B88h], eax jmp loc_4CB1F9 ; --------------------------------------------------------------------------- loc_4CB0E8: ; CODE XREF: sub_4CB070+3Ej ; DATA XREF: .text:off_4CB218o cmp word ptr [esi], 13h ; jumptable 004CB0AE case 112 jnz short loc_4CB131 ; default ; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143 cmp dword ptr [esi+8], 0 setz cl mov [ebp+32EECh], cl jmp loc_4CB1F9 ; --------------------------------------------------------------------------- loc_4CB100: ; CODE XREF: sub_4CB070+3Ej ; DATA XREF: .text:off_4CB218o cmp word ptr [esi], 8 ; jumptable 004CB0AE case 81 jnz short loc_4CB131 ; default ; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143 mov eax, [esi+8] lea edi, [ebp+0C4h] lea ebx, [ebp+0CCh] call sub_4CAFC0 test eax, eax jz short loc_4CB131 ; default ; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143 mov edx, [esp+14h+var_4] jmp loc_4CB1F9 ; --------------------------------------------------------------------------- loc_4CB127: ; CODE XREF: sub_4CB070+3Ej ; DATA XREF: .text:off_4CB218o cmp word ptr [esi], 0Bh ; jumptable 004CB0AE case 128 jz loc_4CB1F9 loc_4CB131: ; CODE XREF: sub_4CB070+31j ; sub_4CB070+3Ej ... pop edi ; default ; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143 pop esi pop ebp mov eax, 80070057h pop ebx pop ecx retn 10h ; --------------------------------------------------------------------------- loc_4CB13E: ; CODE XREF: sub_4CB070+3Ej ; DATA XREF: .text:off_4CB218o cmp word ptr [esi], 13h ; jumptable 004CB0AE case 129 jnz short loc_4CB131 ; default ; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143 jmp loc_4CB1F9 ; --------------------------------------------------------------------------- loc_4CB149: ; CODE XREF: sub_4CB070+3Ej ; DATA XREF: .text:off_4CB218o cmp word ptr [esi], 13h ; jumptable 004CB0AE case 0 jnz short loc_4CB131 ; default ; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143 mov eax, [esi+8] lea ecx, [eax-1] cmp ecx, 3FFFFFFFh ja short loc_4CB131 ; default ; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143 mov [ebp+33B64h], eax xor ecx, ecx loc_4CB165: ; CODE XREF: sub_4CB070+106j mov edi, 1 shl edi, cl cmp eax, edi jbe short loc_4CB178 add ecx, 1 cmp ecx, 1Eh jb short loc_4CB165 loc_4CB178: ; CODE XREF: sub_4CB070+FEj lea eax, [ecx+ecx] mov [ebp+33B50h], eax jmp short loc_4CB1F9 ; --------------------------------------------------------------------------- loc_4CB183: ; CODE XREF: sub_4CB070+3Ej ; DATA XREF: .text:off_4CB218o cmp word ptr [esi], 13h ; jumptable 004CB0AE case 64 jnz short loc_4CB131 ; default ; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143 mov ecx, [esi+8] cmp ecx, 4 ja short loc_4CB131 ; default ; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143 mov eax, 1 shl eax, cl mov [ebp+33B54h], ecx sub eax, 1 mov [ebp+33B58h], eax jmp short loc_4CB1F9 ; --------------------------------------------------------------------------- loc_4CB1A9: ; CODE XREF: sub_4CB070+3Ej ; DATA XREF: .text:off_4CB218o cmp word ptr [esi], 13h ; jumptable 004CB0AE case 66 jnz short loc_4CB131 ; default ; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143 mov eax, [esi+8] cmp eax, 4 ja loc_4CB131 ; default ; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143 mov [ebp+33B5Ch], eax jmp short loc_4CB1F9 ; --------------------------------------------------------------------------- loc_4CB1C3: ; CODE XREF: sub_4CB070+3Ej ; DATA XREF: .text:off_4CB218o cmp word ptr [esi], 13h ; jumptable 004CB0AE case 65 jnz loc_4CB131 ; default ; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143 mov eax, [esi+8] cmp eax, 8 ja loc_4CB131 ; default ; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143 mov [ebp+33B60h], eax jmp short loc_4CB1F9 ; --------------------------------------------------------------------------- loc_4CB1E1: ; CODE XREF: sub_4CB070+3Ej ; DATA XREF: .text:off_4CB218o cmp word ptr [esi], 0Bh ; jumptable 004CB0AE case 144 jnz loc_4CB131 ; default ; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143 cmp word ptr [esi+8], 0FFFFh setz cl mov [ebp+33B8Ch], cl loc_4CB1F9: ; CODE XREF: sub_4CB070+5Fj ; sub_4CB070+73j ... add edx, 1 add esi, 10h cmp edx, [esp+14h+numProperties] mov [esp+14h+var_4], edx jb loc_4CB090 loc_4CB20D: ; CODE XREF: sub_4CB070+Fj pop edi pop esi pop ebp xor eax, eax pop ebx pop ecx retn 10h off_4CB218 dd offset loc_4CB149, offset loc_4CB183, offset loc_4CB1C3 dd offset loc_4CB1A9, offset loc_4CB0B5, offset loc_4CB100 ; jump table for switch statement dd offset loc_4CB0D4, offset loc_4CB0E8, offset loc_4CB127 dd offset loc_4CB13E, offset loc_4CB1E1, offset loc_4CB131 ICompressSetCoderProperties_SetCoderProperties endp ; =============== S U B R O U T I N E ======================================= sub_4CB2E0 proc near ; CODE XREF: CEncoder_GetOptimum+1199p arg_0 = dword ptr 4 arg_4 = dword ptr 8 push ebx push ebp push esi mov esi, [esp+0Ch+arg_4] lea eax, [esi+esi*4] lea edx, [ecx+eax*8] mov [ecx+32F08h], esi mov eax, [edx+100h] mov ebx, [edx+104h] push edi loc_4CB300: ; CODE XREF: sub_4CB2E0+A6j lea edx, [esi+esi*4] cmp byte ptr [ecx+edx*8+0F1h], 0 lea edi, [ecx+edx*8] jz short loc_4CB359 lea edx, [eax+eax*4+1Eh] lea edx, [ecx+edx*8] mov dword ptr [edx+14h], 0FFFFFFFFh mov byte ptr [edx+1], 0 lea edx, [eax+eax*4] lea edx, [ecx+edx*8] lea ebp, [eax-1] mov [edx+100h], ebp cmp byte ptr [edi+0F2h], 0 jz short loc_4CB359 mov byte ptr [edx+0C9h], 0 mov ebp, [edi+0F4h] mov [edx+0D8h], ebp mov edi, [edi+0F8h] mov [edx+0DCh], edi loc_4CB359: ; CODE XREF: sub_4CB2E0+2Ej ; sub_4CB2E0+58j lea edx, [eax+eax*4] add edx, edx add edx, edx add edx, edx mov edi, eax test edi, edi mov eax, [edx+ecx+100h] mov ebp, ebx mov ebx, [edx+ecx+104h] mov [edx+ecx+100h], esi mov [edx+ecx+104h], ebp mov esi, edi jnz loc_4CB300 mov eax, [ecx+104h] mov edx, [esp+10h+arg_0] pop edi pop esi mov [edx], eax mov eax, [ecx+100h] pop ebp mov [ecx+32F0Ch], eax pop ebx retn 8 sub_4CB2E0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CB3B0 proc near ; CODE XREF: CEncoder_GetOptimumFast+2Dp ; CEncoder_GetOptimumFast+28Fp ... arg_0 = dword ptr 4 push ebx push ebp push esi mov esi, ecx mov ecx, [esi+80h] mov edx, [esi+78h] lea eax, [esi+32660h] push eax push ecx xor ebx, ebx call edx mov ebp, [esp+14h+arg_0] add esp, 8 test eax, eax mov [ebp+0], eax jbe short loc_4CB446 mov ebx, [esi+eax*4+32658h] cmp ebx, [esi+32EF8h] jnz short loc_4CB446 mov eax, [esi+80h] mov ecx, [esi+70h] push edi push eax call ecx mov edx, [esi+80h] mov edi, eax mov eax, [esi+74h] push edx add edi, 1 call eax mov ecx, [ebp+0] mov ecx, [esi+ecx*4+3265Ch] add esp, 8 sub eax, 1 add ecx, 1 cmp edi, 111h jbe short loc_4CB425 mov edi, 111h loc_4CB425: ; CODE XREF: sub_4CB3B0+6Ej mov edx, eax sub edx, ecx cmp ebx, edi jnb short loc_4CB445 mov ebp, edx lea ecx, [eax+ebx] sub ebp, eax loc_4CB434: ; CODE XREF: sub_4CB3B0+93j mov dl, [ecx] cmp dl, [ecx+ebp] jnz short loc_4CB445 add ebx, 1 add ecx, 1 cmp ebx, edi jb short loc_4CB434 loc_4CB445: ; CODE XREF: sub_4CB3B0+7Bj ; sub_4CB3B0+89j pop edi loc_4CB446: ; CODE XREF: sub_4CB3B0+26j ; sub_4CB3B0+35j add dword ptr [esi+32F04h], 1 pop esi pop ebp mov eax, ebx pop ebx retn 4 sub_4CB3B0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= CEncoder_GetOptimumFast proc near ; CODE XREF: CEncoder_CodeOneBlock+1F4p var_28 = dword ptr -28h var_24 = dword ptr -24h var_20 = dword ptr -20h var_1C = dword ptr -1Ch var_18 = dword ptr -18h var_14 = dword ptr -14h var_10 = dword ptr -10h arg_0 = dword ptr 4 sub esp, 28h push ebx push esi push edi mov edi, ecx mov eax, [edi+80h] mov ecx, [edi+70h] push eax call ecx add esp, 4 cmp byte ptr [edi+32F10h], 0 mov esi, eax mov [esp+34h+var_24], esi jnz short loc_4CB498 lea edx, [esp+34h+var_20] push edx mov ecx, edi call sub_4CB3B0 mov ebx, [esp+34h+var_20] jmp short loc_4CB4AF ; --------------------------------------------------------------------------- loc_4CB498: ; CODE XREF: CEncoder_GetOptimumFast+24j mov ebx, [edi+32F00h] mov eax, [edi+32EFCh] mov [esp+34h+var_20], ebx mov byte ptr [edi+32F10h], 0 loc_4CB4AF: ; CODE XREF: CEncoder_GetOptimumFast+36j mov ecx, [edi+80h] mov edx, [edi+74h] push ecx mov [esp+38h+var_28], eax call edx add esp, 4 sub eax, 1 cmp esi, 111h jbe loc_4CB55E mov [esp+34h+var_24], 111h loc_4CB4D9: ; CODE XREF: CEncoder_GetOptimumFast+101j push ebp xor ebp, ebp lea ecx, [edi+14h] mov [esp+38h+var_18], ebp mov [esp+38h+var_14], ebp mov [esp+38h+var_1C], ecx jmp short loc_4CB4F0 ; --------------------------------------------------------------------------- align 10h loc_4CB4F0: ; CODE XREF: CEncoder_GetOptimumFast+8Bj ; CEncoder_GetOptimumFast+132j mov edx, [esp+38h+var_1C] mov ecx, eax sub ecx, [edx] mov dl, [eax] sub ecx, 1 cmp dl, [ecx] jnz short loc_4CB57F mov dl, [eax+1] cmp dl, [ecx+1] jnz short loc_4CB57F mov esi, 2 cmp [esp+38h+var_24], esi jbe short loc_4CB537 lea edx, [eax+2] sub ecx, eax lea esp, [esp+0] loc_4CB520: ; CODE XREF: CEncoder_GetOptimumFast+D1j mov bl, [edx] cmp bl, [ecx+edx] jnz short loc_4CB533 add esi, 1 add edx, 1 cmp esi, [esp+38h+var_24] jb short loc_4CB520 loc_4CB533: ; CODE XREF: CEncoder_GetOptimumFast+C5j mov ebx, [esp+38h+var_20] loc_4CB537: ; CODE XREF: CEncoder_GetOptimumFast+B2j cmp esi, [edi+32EF8h] jnb short loc_4CB5B9 mov edx, [esp+38h+var_14] lea ecx, ds:0[ebp*4] mov [esp+ecx+38h+var_10], esi cmp esi, [esp+edx+38h+var_10] jbe short loc_4CB587 mov [esp+38h+var_18], ebp mov [esp+38h+var_14], ecx jmp short loc_4CB587 ; --------------------------------------------------------------------------- loc_4CB55E: ; CODE XREF: CEncoder_GetOptimumFast+6Bj cmp esi, 2 jnb loc_4CB4D9 mov eax, [esp+34h+arg_0] pop edi pop esi mov dword ptr [eax], 0FFFFFFFFh mov eax, 1 pop ebx add esp, 28h retn 4 ; --------------------------------------------------------------------------- loc_4CB57F: ; CODE XREF: CEncoder_GetOptimumFast+9Fj ; CEncoder_GetOptimumFast+A7j mov [esp+ebp*4+38h+var_10], 0 loc_4CB587: ; CODE XREF: CEncoder_GetOptimumFast+F2j ; CEncoder_GetOptimumFast+FCj add [esp+38h+var_1C], 4 add ebp, 1 cmp ebp, 4 jb loc_4CB4F0 mov esi, [esp+38h+var_28] cmp esi, [edi+32EF8h] jb short loc_4CB5EC mov eax, [edi+ebx*4+3265Ch] mov ecx, [esp+38h+arg_0] add eax, 4 mov [ecx], eax jmp loc_4CB69A ; --------------------------------------------------------------------------- loc_4CB5B9: ; CODE XREF: CEncoder_GetOptimumFast+DDj mov eax, [esp+38h+arg_0] mov [eax], ebp lea eax, [esi-1] test eax, eax jz loc_4CB82E mov ecx, [edi+80h] mov edx, [edi+7Ch] add [edi+32F04h], eax push eax push ecx call edx add esp, 8 pop ebp pop edi mov eax, esi pop esi pop ebx add esp, 28h retn 4 ; --------------------------------------------------------------------------- loc_4CB5EC: ; CODE XREF: CEncoder_GetOptimumFast+142j xor ebp, ebp cmp esi, 2 mov [esp+38h+var_20], ebp jb short loc_4CB65A cmp ebx, 2 mov ecx, [edi+ebx*4+3265Ch] mov [esp+38h+var_20], ecx jbe short loc_4CB63F lea eax, [edi+ebx*4+32654h] mov edi, edi loc_4CB610: ; CODE XREF: CEncoder_GetOptimumFast+1DDj mov edx, [eax-4] add edx, 1 cmp esi, edx jnz short loc_4CB63F mov ecx, [esp+38h+var_20] shr ecx, 7 cmp ecx, [eax] jbe short loc_4CB63F mov edx, [eax-4] mov ecx, [eax] sub eax, 8 sub ebx, 2 cmp ebx, 2 mov [esp+38h+var_28], edx mov [esp+38h+var_20], ecx mov esi, edx ja short loc_4CB610 loc_4CB63F: ; CODE XREF: CEncoder_GetOptimumFast+1A5j ; CEncoder_GetOptimumFast+1B8j ... cmp esi, 2 jnz short loc_4CB656 cmp [esp+38h+var_20], 80h jb short loc_4CB656 mov [esp+38h+var_28], 1 loc_4CB656: ; CODE XREF: CEncoder_GetOptimumFast+1E2j ; CEncoder_GetOptimumFast+1ECj mov ebp, [esp+38h+var_20] loc_4CB65A: ; CODE XREF: CEncoder_GetOptimumFast+195j mov edx, [esp+38h+var_18] mov esi, [esp+edx*4+38h+var_10] cmp esi, 2 mov ebx, [esp+38h+var_28] jb short loc_4CB6C7 lea eax, [esi+1] cmp eax, ebx jnb short loc_4CB690 lea ecx, [esi+2] cmp ecx, ebx jb short loc_4CB681 cmp ebp, 200h ja short loc_4CB690 loc_4CB681: ; CODE XREF: CEncoder_GetOptimumFast+217j lea edx, [esi+3] cmp edx, ebx jb short loc_4CB6C7 cmp ebp, 8000h jbe short loc_4CB6C7 loc_4CB690: ; CODE XREF: CEncoder_GetOptimumFast+210j ; CEncoder_GetOptimumFast+21Fj mov eax, [esp+38h+arg_0] mov ecx, [esp+38h+var_18] mov [eax], ecx loc_4CB69A: ; CODE XREF: CEncoder_GetOptimumFast+154j lea eax, [esi-1] test eax, eax jz loc_4CB82E mov edx, [edi+80h] add [edi+32F04h], eax push eax mov eax, [edi+7Ch] push edx call eax add esp, 8 pop ebp pop edi mov eax, esi pop esi pop ebx add esp, 28h retn 4 ; --------------------------------------------------------------------------- loc_4CB6C7: ; CODE XREF: CEncoder_GetOptimumFast+209j ; CEncoder_GetOptimumFast+226j ... cmp ebx, 2 jb short loc_4CB73E cmp [esp+38h+var_24], 2 jbe short loc_4CB73E mov ecx, [edi+80h] mov edx, [edi+70h] push ecx call edx add esp, 4 lea esi, [edi+32F00h] push esi mov ecx, edi mov [esp+3Ch+var_24], eax call sub_4CB3B0 cmp eax, 2 mov [edi+32EFCh], eax jb short loc_4CB757 cmp eax, ebx mov ecx, [esi] mov edx, [edi+ecx*4+3265Ch] jb short loc_4CB710 cmp edx, ebp jb short loc_4CB737 loc_4CB710: ; CODE XREF: CEncoder_GetOptimumFast+2AAj lea ecx, [ebx+1] cmp eax, ecx jnz short loc_4CB722 mov esi, edx shr esi, 7 cmp esi, ebp jbe short loc_4CB737 cmp eax, ecx loc_4CB722: ; CODE XREF: CEncoder_GetOptimumFast+2B5j ja short loc_4CB737 add eax, 1 cmp eax, ebx jb short loc_4CB757 cmp ebx, 3 jb short loc_4CB757 shr ebp, 7 cmp ebp, edx jbe short loc_4CB757 loc_4CB737: ; CODE XREF: CEncoder_GetOptimumFast+2AEj ; CEncoder_GetOptimumFast+2BEj ... mov byte ptr [edi+32F10h], 1 loc_4CB73E: ; CODE XREF: CEncoder_GetOptimumFast+26Aj ; CEncoder_GetOptimumFast+271j mov edx, [esp+38h+arg_0] pop ebp pop edi pop esi mov dword ptr [edx], 0FFFFFFFFh mov eax, 1 pop ebx add esp, 28h retn 4 ; --------------------------------------------------------------------------- loc_4CB757: ; CODE XREF: CEncoder_GetOptimumFast+29Dj ; CEncoder_GetOptimumFast+2C9j ... mov eax, [edi+80h] mov ecx, [edi+74h] push eax call ecx lea ecx, [edi+14h] add esp, 4 sub eax, 1 mov [esp+38h+var_18], 0 mov ebx, ecx loc_4CB776: ; CODE XREF: CEncoder_GetOptimumFast+39Aj mov dl, [eax+1] mov ecx, eax sub ecx, [ebx] sub ecx, 1 cmp dl, [ecx+1] jnz short loc_4CB7DD mov dl, [eax+2] cmp dl, [ecx+2] lea ebp, [eax+2] jnz short loc_4CB7DD mov esi, 2 cmp [esp+38h+var_24], esi jbe short loc_4CB7B4 mov edx, ebp mov ebp, ecx sub ebp, eax loc_4CB7A1: ; CODE XREF: CEncoder_GetOptimumFast+352j mov cl, [edx] cmp cl, [edx+ebp] jnz short loc_4CB7B4 add esi, 1 add edx, 1 cmp esi, [esp+38h+var_24] jb short loc_4CB7A1 loc_4CB7B4: ; CODE XREF: CEncoder_GetOptimumFast+339j ; CEncoder_GetOptimumFast+346j add esi, 1 cmp esi, [esp+38h+var_28] jb short loc_4CB7E9 mov eax, [esp+38h+arg_0] pop ebp mov byte ptr [edi+32F10h], 1 pop edi pop esi mov dword ptr [eax], 0FFFFFFFFh mov eax, 1 pop ebx add esp, 28h retn 4 ; --------------------------------------------------------------------------- loc_4CB7DD: ; CODE XREF: CEncoder_GetOptimumFast+323j ; CEncoder_GetOptimumFast+32Ej mov edx, [esp+38h+var_18] mov [esp+edx*4+38h+var_10], 0 loc_4CB7E9: ; CODE XREF: CEncoder_GetOptimumFast+35Bj mov ecx, [esp+38h+var_18] add ecx, 1 add ebx, 4 cmp ecx, 4 mov [esp+38h+var_18], ecx jb loc_4CB776 mov esi, [esp+38h+var_28] mov ecx, [esp+38h+var_20] mov edx, [esp+38h+arg_0] add ecx, 4 lea eax, [esi-2] test eax, eax mov [edx], ecx jz short loc_4CB82E add [edi+32F04h], eax mov ecx, [edi+7Ch] push eax mov eax, [edi+80h] push eax call ecx add esp, 8 loc_4CB82E: ; CODE XREF: CEncoder_GetOptimumFast+164j ; CEncoder_GetOptimumFast+23Fj ... pop ebp pop edi mov eax, esi pop esi pop ebx add esp, 28h retn 4 CEncoder_GetOptimumFast endp ; =============== S U B R O U T I N E ======================================= sub_4CB8A0 proc near ; CODE XREF: sub_4CD940+37p arg_0 = dword ptr 4 push edi mov edi, [esp+4+arg_0] test edi, edi jz short loc_4CB8EB mov eax, dword_553598 test eax, eax jnz short loc_4CB8DD push 0Ch ; Size call _operator_new ; operator new(uint) add esp, 4 test eax, eax jz short loc_4CB8D6 mov dword ptr [eax], 0 mov dword ptr [eax+4], 0 mov dword ptr [eax+8], 0 jmp short loc_4CB8D8 ; --------------------------------------------------------------------------- loc_4CB8D6: ; CODE XREF: sub_4CB8A0+1Ej xor eax, eax loc_4CB8D8: ; CODE XREF: sub_4CB8A0+34j mov dword_553598, eax loc_4CB8DD: ; CODE XREF: sub_4CB8A0+10j mov eax, [eax] test eax, eax jz short loc_4CB8EB push edi call eax add esp, 4 pop edi retn ; --------------------------------------------------------------------------- loc_4CB8EB: ; CODE XREF: sub_4CB8A0+7j ; sub_4CB8A0+41j xor eax, eax pop edi retn sub_4CB8A0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CB8F0 proc near ; CODE XREF: sub_4CBA60+85p arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch push esi mov esi, [esp+4+arg_0] push edi mov edi, [esi+44h] add edi, [esi+40h] add edi, [esp+8+arg_4] cmp dword ptr [esi+4Ch], 0 jz short loc_4CB911 mov [esi+3Ch], edi pop edi mov eax, 1 pop esi retn ; --------------------------------------------------------------------------- loc_4CB911: ; CODE XREF: sub_4CB8F0+14j mov eax, [esi+30h] test eax, eax jz short loc_4CB91D cmp [esi+3Ch], edi jz short loc_4CB93E loc_4CB91D: ; CODE XREF: sub_4CB8F0+26j push ebx mov ebx, [esp+0Ch+arg_8] push eax mov eax, [ebx+4] call eax mov dword ptr [esi+30h], 0 mov [esi+3Ch], edi mov ecx, [ebx] push edi call ecx add esp, 8 mov [esi+30h], eax pop ebx loc_4CB93E: ; CODE XREF: sub_4CB8F0+2Bj xor eax, eax cmp [esi+30h], eax pop edi setnz al pop esi retn sub_4CB8F0 endp ; --------------------------------------------------------------------------- align 10h loc_4CB950: ; DATA XREF: sub_4CCAA0+1Co mov eax, [esp+4] mov eax, [eax] retn ; --------------------------------------------------------------------------- align 10h loc_4CB960: ; DATA XREF: sub_4CCAA0+Eo mov eax, [esp+4] mov ecx, [eax] mov edx, [esp+8] mov al, [edx+ecx] retn ; --------------------------------------------------------------------------- align 10h loc_4CB970: ; DATA XREF: sub_4CCAA0+15o mov ecx, [esp+4] ; =============== S U B R O U T I N E ======================================= ; Attributes: library function ; public: int __thiscall CRect::Height(void)const ?Height@CRect@@QBEHXZ proc near mov eax, [ecx+0Ch] sub eax, [ecx+4] retn ?Height@CRect@@QBEHXZ endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CB980 proc near ; CODE XREF: sub_4CBC80+46p ; sub_4CBD50+61p arg_0 = dword ptr 4 push esi mov esi, [esp+4+arg_0] cmp dword ptr [esi+38h], 0 jnz short loc_4CB9F0 cmp dword ptr [esi+68h], 0 jnz short loc_4CB9F0 mov eax, [esi] sub eax, [esi+4] mov ecx, [esi+30h] add eax, [esi+0Ch] sub ecx, eax add ecx, [esi+3Ch] jz short loc_4CB9F0 push edi loc_4CB9A4: ; CODE XREF: sub_4CB980+63j mov edx, [esi+34h] lea edi, [esp+8+arg_0] push edi push ecx push eax mov eax, [edx] push edx call eax add esp, 10h test eax, eax mov [esi+68h], eax jnz short loc_4CB9EF mov eax, [esp+8+arg_0] test eax, eax jz short loc_4CB9E8 add [esi+0Ch], eax mov eax, [esi+0Ch] sub eax, [esi+4] cmp eax, [esi+44h] ja short loc_4CB9EF mov eax, [esi] sub eax, [esi+4] mov ecx, [esi+30h] add eax, [esi+0Ch] sub ecx, eax add ecx, [esi+3Ch] jnz short loc_4CB9A4 pop edi pop esi retn ; --------------------------------------------------------------------------- loc_4CB9E8: ; CODE XREF: sub_4CB980+43j mov dword ptr [esi+38h], 1 loc_4CB9EF: ; CODE XREF: sub_4CB980+3Bj ; sub_4CB980+51j pop edi loc_4CB9F0: ; CODE XREF: sub_4CB980+9j ; sub_4CB980+Fj ... pop esi retn sub_4CB980 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CBA00 proc near ; CODE XREF: sub_4CBD50+58p arg_0 = dword ptr 4 push ebx push ebp push esi push edi mov edi, [esp+10h+arg_0] mov esi, [edi+0Ch] mov eax, [edi+40h] sub esi, [edi+4] mov ebx, [edi] mov ebp, [edi+30h] add esi, eax sub ebx, eax mov eax, dword_553598 test eax, eax jnz short loc_4CBA44 push 0Ch ; Size call _operator_new ; operator new(uint) xor ecx, ecx add esp, 4 cmp eax, ecx jz short loc_4CBA3D mov [eax], ecx mov [eax+4], ecx mov [eax+8], ecx jmp short loc_4CBA3F ; --------------------------------------------------------------------------- loc_4CBA3D: ; CODE XREF: sub_4CBA00+31j xor eax, eax loc_4CBA3F: ; CODE XREF: sub_4CBA00+3Bj mov dword_553598, eax loc_4CBA44: ; CODE XREF: sub_4CBA00+21j mov eax, [eax+8] test eax, eax jz short loc_4CBA53 push esi push ebx push ebp call eax add esp, 0Ch loc_4CBA53: ; CODE XREF: sub_4CBA00+49j mov eax, [edi+30h] add eax, [edi+40h] mov [edi], eax pop edi pop esi pop ebp pop ebx retn sub_4CBA00 endp ; =============== S U B R O U T I N E ======================================= sub_4CBA60 proc near ; CODE XREF: sub_4D0270+D2p arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch arg_C = dword ptr 10h arg_10 = dword ptr 14h arg_14 = dword ptr 18h push ebx push esi push edi mov edi, [esp+0Ch+arg_4] cmp edi, 0C0000000h jbe short loc_4CBAA2 mov esi, [esp+0Ch+arg_0] mov eax, [esi+20h] mov edi, [esp+0Ch+arg_14] mov ecx, [edi+4] push eax call ecx xor ebx, ebx add esp, 4 cmp [esi+4Ch], ebx mov [esi+20h], ebx jnz short loc_4CBA9C mov edx, [esi+30h] mov eax, [edi+4] push edx call eax add esp, 4 mov [esi+30h], ebx loc_4CBA9C: ; CODE XREF: sub_4CBA60+2Bj pop edi pop esi xor eax, eax pop ebx retn ; --------------------------------------------------------------------------- loc_4CBAA2: ; CODE XREF: sub_4CBA60+Dj mov eax, edi shr eax, 1 cmp edi, 80000000h jbe short loc_4CBAB3 mov eax, edi shr eax, 2 loc_4CBAB3: ; CODE XREF: sub_4CBA60+4Cj mov ecx, [esp+0Ch+arg_8] mov esi, [esp+0Ch+arg_0] mov ebx, [esp+0Ch+arg_C] lea edx, [edi+ecx+1] push ebp mov [esi+40h], edx mov edx, [esp+10h+arg_10] add ecx, ebx lea ebp, [ebx+edx] add ecx, edx mov [esi+44h], ebp mov ebp, [esp+10h+arg_14] shr ecx, 1 push ebp lea eax, [ecx+eax+80000h] push eax push esi call sub_4CB8F0 add esp, 0Ch test eax, eax jz loc_4CBBEA mov edx, [esi+48h] mov [esi+1Ch], ebx xor ebx, ebx cmp edx, 2 lea ebp, [edi+1] mov [esi+5Ch], ebx jnz short loc_4CBB0F mov eax, 0FFFFh jmp short loc_4CBB49 ; --------------------------------------------------------------------------- loc_4CBB0F: ; CODE XREF: sub_4CBA60+A6j lea ecx, [edi-1] mov eax, ecx shr eax, 1 or ecx, eax mov eax, ecx shr eax, 2 or ecx, eax mov eax, ecx shr eax, 4 or ecx, eax mov eax, ecx or eax, 1FFFE00h shr eax, 8 or eax, ecx shr eax, 1 cmp eax, 1000000h jbe short loc_4CBB49 cmp edx, 3 jnz short loc_4CBB47 mov eax, 0FFFFFFh jmp short loc_4CBB49 ; --------------------------------------------------------------------------- loc_4CBB47: ; CODE XREF: sub_4CBA60+DEj shr eax, 1 loc_4CBB49: ; CODE XREF: sub_4CBA60+ADj ; sub_4CBA60+D9j ... mov [esi+28h], eax add eax, 1 cmp edx, 2 jbe short loc_4CBB5B mov dword ptr [esi+5Ch], 400h loc_4CBB5B: ; CODE XREF: sub_4CBA60+F2j cmp edx, 3 jbe short loc_4CBB67 add dword ptr [esi+5Ch], 10000h loc_4CBB67: ; CODE XREF: sub_4CBA60+FEj cmp edx, 4 jbe short loc_4CBB73 add dword ptr [esi+5Ch], 100000h loc_4CBB73: ; CODE XREF: sub_4CBA60+10Aj mov ecx, [esi+60h] mov edx, [esi+5Ch] add ecx, [esi+64h] add eax, edx cmp [esi+50h], ebx mov [esi+58h], edi mov [esi+60h], eax mov [esi+18h], ebp lea edx, [ebp+ebp+0] jnz short loc_4CBB92 mov edx, ebp loc_4CBB92: ; CODE XREF: sub_4CBA60+12Ej lea edi, [eax+edx] mov eax, [esi+20h] cmp eax, ebx mov [esi+64h], edx jz short loc_4CBBA3 cmp ecx, edi jz short loc_4CBBE0 loc_4CBBA3: ; CODE XREF: sub_4CBA60+13Dj mov ebp, [esp+10h+arg_14] push eax mov eax, [ebp+4] call eax lea eax, ds:0[edi*4] mov ecx, eax shr ecx, 2 add esp, 4 cmp ecx, edi mov [esi+20h], ebx jz short loc_4CBBC7 xor eax, eax jmp short loc_4CBBD0 ; --------------------------------------------------------------------------- loc_4CBBC7: ; CODE XREF: sub_4CBA60+161j mov edx, [ebp+0] push eax call edx add esp, 4 loc_4CBBD0: ; CODE XREF: sub_4CBA60+165j cmp eax, ebx mov [esi+20h], eax jz short loc_4CBBEC mov ecx, [esi+60h] lea edx, [eax+ecx*4] mov [esi+24h], edx loc_4CBBE0: ; CODE XREF: sub_4CBA60+141j pop ebp pop edi pop esi mov eax, 1 pop ebx retn ; --------------------------------------------------------------------------- loc_4CBBEA: ; CODE XREF: sub_4CBA60+8Fj xor ebx, ebx loc_4CBBEC: ; CODE XREF: sub_4CBA60+175j mov eax, [esi+20h] mov ecx, [ebp+4] push eax call ecx add esp, 4 cmp [esi+4Ch], ebx mov [esi+20h], ebx jnz short loc_4CBC0F mov edx, [esi+30h] mov eax, [ebp+4] push edx call eax add esp, 4 mov [esi+30h], ebx loc_4CBC0F: ; CODE XREF: sub_4CBA60+19Ej pop ebp pop edi pop esi xor eax, eax pop ebx retn sub_4CBA60 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CBC20 proc near ; CODE XREF: sub_4CBD50+79p arg_0 = dword ptr 4 mov eax, [esp+arg_0] mov edx, [eax+18h] sub edx, [eax+14h] push ebx mov ebx, [eax+4] or ecx, 0FFFFFFFFh sub ecx, ebx cmp edx, ecx push esi jnb short loc_4CBC3A mov ecx, edx loc_4CBC3A: ; CODE XREF: sub_4CBC20+16j mov esi, [eax+0Ch] sub esi, ebx push edi mov edi, [eax+44h] mov edx, esi cmp edx, edi ja short loc_4CBC54 test edx, edx jbe short loc_4CBC56 mov edx, 1 jmp short loc_4CBC56 ; --------------------------------------------------------------------------- loc_4CBC54: ; CODE XREF: sub_4CBC20+27j sub edx, edi loc_4CBC56: ; CODE XREF: sub_4CBC20+2Bj ; sub_4CBC20+32j cmp edx, ecx pop edi jnb short loc_4CBC5D mov ecx, edx loc_4CBC5D: ; CODE XREF: sub_4CBC20+39j mov edx, [eax+1Ch] cmp esi, edx jbe short loc_4CBC66 mov esi, edx loc_4CBC66: ; CODE XREF: sub_4CBC20+42j add ebx, ecx mov [eax+10h], esi pop esi mov [eax+8], ebx pop ebx retn sub_4CBC20 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CBC80 proc near ; DATA XREF: sub_4CCAA0+8o arg_0 = dword ptr 4 push ebx push esi mov esi, [esp+8+arg_0] xor eax, eax cmp [esi+60h], eax jbe short loc_4CBCA2 lea ecx, [ecx+0] loc_4CBC90: ; CODE XREF: sub_4CBC80+20j mov ecx, [esi+20h] mov dword ptr [ecx+eax*4], 0 add eax, 1 cmp eax, [esi+60h] jb short loc_4CBC90 loc_4CBCA2: ; CODE XREF: sub_4CBC80+Bj mov eax, [esi+18h] mov edx, [esi+30h] push esi mov dword ptr [esi+14h], 0 mov [esi], edx mov [esi+0Ch], eax mov [esi+4], eax mov dword ptr [esi+68h], 0 mov dword ptr [esi+38h], 0 call sub_4CB980 mov eax, [esi+18h] mov ebx, [esi+4] sub eax, [esi+14h] or ecx, 0FFFFFFFFh sub ecx, ebx add esp, 4 cmp eax, ecx jnb short loc_4CBCE2 mov ecx, eax loc_4CBCE2: ; CODE XREF: sub_4CBC80+5Ej mov edx, [esi+0Ch] sub edx, ebx push edi mov edi, [esi+44h] mov eax, edx cmp eax, edi ja short loc_4CBCFC test eax, eax jbe short loc_4CBCFE mov eax, 1 jmp short loc_4CBCFE ; --------------------------------------------------------------------------- loc_4CBCFC: ; CODE XREF: sub_4CBC80+6Fj sub eax, edi loc_4CBCFE: ; CODE XREF: sub_4CBC80+73j ; sub_4CBC80+7Aj cmp eax, ecx pop edi jnb short loc_4CBD05 mov ecx, eax loc_4CBD05: ; CODE XREF: sub_4CBC80+81j mov eax, edx mov edx, [esi+1Ch] cmp eax, edx jbe short loc_4CBD10 mov eax, edx loc_4CBD10: ; CODE XREF: sub_4CBC80+8Cj add ebx, ecx mov [esi+8], ebx mov [esi+10h], eax pop esi pop ebx retn sub_4CBC80 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CBD20 proc near ; CODE XREF: sub_4CBD50+26p arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch push edi mov edi, [esp+4+arg_8] xor eax, eax test edi, edi jbe short loc_4CBD4C mov edx, [esp+4+arg_4] push esi mov esi, [esp+8+arg_0] loc_4CBD34: ; CODE XREF: sub_4CBD20+29j mov ecx, [edx+eax*4] cmp ecx, esi ja short loc_4CBD3F xor ecx, ecx jmp short loc_4CBD41 ; --------------------------------------------------------------------------- loc_4CBD3F: ; CODE XREF: sub_4CBD20+19j sub ecx, esi loc_4CBD41: ; CODE XREF: sub_4CBD20+1Dj mov [edx+eax*4], ecx add eax, 1 cmp eax, edi jb short loc_4CBD34 pop esi loc_4CBD4C: ; CODE XREF: sub_4CBD20+9j pop edi retn sub_4CBD20 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CBD50 proc near ; CODE XREF: .text:004CC1A1p ; .text:004CC20Ap ... arg_0 = dword ptr 4 push esi mov esi, [esp+4+arg_0] cmp dword ptr [esi+4], 0FFFFFFFFh jnz short loc_4CBD88 mov eax, [esi+64h] add eax, [esi+60h] mov ecx, [esi+20h] push edi mov edi, 0FFFFFFFEh sub edi, [esi+58h] push eax push ecx and edi, 0FFFFFC00h push edi call sub_4CBD20 sub [esi+8], edi sub [esi+4], edi add esp, 0Ch sub [esi+0Ch], edi pop edi loc_4CBD88: ; CODE XREF: sub_4CBD50+9j cmp dword ptr [esi+38h], 0 jnz short loc_4CBDB9 mov edx, [esi+0Ch] sub edx, [esi+4] mov eax, [esi+44h] cmp eax, edx jnz short loc_4CBDB9 mov ecx, [esi+3Ch] add ecx, [esi+30h] sub ecx, [esi] cmp ecx, eax ja short loc_4CBDB0 push esi call sub_4CBA00 add esp, 4 loc_4CBDB0: ; CODE XREF: sub_4CBD50+55j push esi call sub_4CB980 add esp, 4 loc_4CBDB9: ; CODE XREF: sub_4CBD50+3Cj ; sub_4CBD50+49j mov edx, [esi+14h] cmp edx, [esi+18h] jnz short loc_4CBDC8 mov dword ptr [esi+14h], 0 loc_4CBDC8: ; CODE XREF: sub_4CBD50+6Fj push esi call sub_4CBC20 add esp, 4 pop esi retn sub_4CBD50 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CBDE0 proc near ; CODE XREF: sub_4CC5C0+1B7p var_4 = dword ptr -4 arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch arg_C = dword ptr 10h arg_10 = dword ptr 14h arg_14 = dword ptr 18h arg_18 = dword ptr 1Ch arg_1C = dword ptr 20h arg_20 = dword ptr 24h arg_24 = dword ptr 28h push ecx mov edx, [esp+4+arg_4] mov ecx, [esp+4+arg_10] mov eax, [esp+4+arg_14] push ebx mov [ecx+eax*4], edx mov ecx, [esp+8+arg_8] push ebp push esi sub ecx, edx cmp [esp+10h+arg_1C], 0 push edi jz loc_4CBEAC mov ebp, [esp+14h+arg_C] mov ebx, [esp+14h+arg_24] jmp short loc_4CBE14 ; --------------------------------------------------------------------------- align 10h loc_4CBE10: ; CODE XREF: sub_4CBDE0+C6j mov eax, [esp+14h+arg_14] loc_4CBE14: ; CODE XREF: sub_4CBDE0+2Dj mov esi, [esp+14h+arg_18] sub [esp+14h+arg_1C], 1 cmp ecx, esi jnb loc_4CBEAC mov edx, ebp sub edx, ecx cmp eax, ecx sbb edi, edi and edi, esi sub edi, ecx add edi, eax mov eax, [esp+14h+arg_10] mov eax, [eax+edi*4] mov [esp+14h+arg_4], eax mov al, [edx+ebx] cmp al, [ebx+ebp] jnz short loc_4CBE99 mov al, [edx] cmp al, [ebp+0] jnz short loc_4CBE99 mov eax, [esp+14h+arg_0] mov esi, 1 cmp eax, esi jz short loc_4CBE7A sub edx, ebp lea edi, [ebp+1] mov [esp+14h+var_4], edx jmp short loc_4CBE69 ; --------------------------------------------------------------------------- loc_4CBE65: ; CODE XREF: sub_4CBDE0+98j mov edx, [esp+14h+var_4] loc_4CBE69: ; CODE XREF: sub_4CBDE0+83j mov dl, [edx+edi] cmp dl, [edi] jnz short loc_4CBE7A add esi, 1 add edi, 1 cmp esi, eax jnz short loc_4CBE65 loc_4CBE7A: ; CODE XREF: sub_4CBDE0+78j ; sub_4CBDE0+8Ej cmp ebx, esi jnb short loc_4CBE99 mov edx, [esp+14h+arg_20] mov [edx], esi add edx, 4 add ecx, 0FFFFFFFFh mov [edx], ecx add edx, 4 cmp esi, eax mov ebx, esi mov [esp+14h+arg_20], edx jz short loc_4CBEB6 loc_4CBE99: ; CODE XREF: sub_4CBDE0+64j ; sub_4CBDE0+6Bj ... mov ecx, [esp+14h+arg_8] sub ecx, [esp+14h+arg_4] cmp [esp+14h+arg_1C], 0 jnz loc_4CBE10 loc_4CBEAC: ; CODE XREF: sub_4CBDE0+1Fj ; sub_4CBDE0+3Fj mov eax, [esp+14h+arg_20] pop edi pop esi pop ebp pop ebx pop ecx retn ; --------------------------------------------------------------------------- loc_4CBEB6: ; CODE XREF: sub_4CBDE0+B7j pop edi pop esi pop ebp mov eax, edx pop ebx pop ecx retn sub_4CBDE0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CBEC0 proc near ; CODE XREF: .text:004CC1E7p ; sub_4CC220+14Ep ... var_10 = dword ptr -10h var_C = dword ptr -0Ch var_8 = dword ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch arg_C = dword ptr 10h arg_10 = dword ptr 14h arg_14 = dword ptr 18h arg_18 = dword ptr 1Ch arg_1C = dword ptr 20h arg_20 = dword ptr 24h arg_24 = dword ptr 28h sub esp, 10h mov eax, [esp+10h+arg_10] mov edx, [esp+10h+arg_8] sub edx, [esp+10h+arg_4] push ebx push ebp push esi push edi mov edi, [esp+20h+arg_14] lea eax, [eax+edi*8] lea ecx, [eax+4] mov [esp+20h+var_C], ecx xor ecx, ecx xor ebx, ebx cmp [esp+20h+arg_1C], ecx mov ebp, eax mov [esp+20h+var_10], ebp mov [esp+20h+var_8], ecx mov [esp+20h+var_4], ebx jnz short loc_4CBF24 loc_4CBEF9: ; CODE XREF: sub_4CBEC0+6Fj ; sub_4CBEC0+151j mov edx, [esp+20h+var_C] mov eax, [esp+20h+arg_20] pop edi pop esi mov dword ptr [ebp+0], 0 pop ebp mov dword ptr [edx], 0 pop ebx add esp, 10h retn ; --------------------------------------------------------------------------- jmp short loc_4CBF20 ; --------------------------------------------------------------------------- align 10h loc_4CBF20: ; CODE XREF: sub_4CBEC0+56j ; sub_4CBEC0+14Bj mov edi, [esp+20h+arg_14] loc_4CBF24: ; CODE XREF: sub_4CBEC0+37j mov eax, [esp+20h+arg_18] sub [esp+20h+arg_1C], 1 cmp edx, eax jnb short loc_4CBEF9 cmp edi, edx sbb esi, esi and esi, eax mov eax, [esp+20h+arg_10] sub esi, edx add esi, edi lea eax, [eax+esi*8] mov esi, [esp+20h+arg_C] sub esi, edx cmp ecx, ebx jb short loc_4CBF4E mov ecx, ebx loc_4CBF4E: ; CODE XREF: sub_4CBEC0+8Aj mov bl, [ecx+esi] mov edi, [esp+20h+arg_C] cmp bl, [ecx+edi] jnz short loc_4CBFB8 add ecx, 1 cmp ecx, [esp+20h+arg_0] jz short loc_4CBF93 mov bl, [ecx+esi] cmp bl, [ecx+edi] jnz short loc_4CBF93 add ecx, 1 cmp ecx, [esp+20h+arg_0] jz short loc_4CBF93 mov ebx, edi mov ebp, esi lea edi, [ecx+ebx] sub ebp, ebx lea ecx, [ecx+0] loc_4CBF80: ; CODE XREF: sub_4CBEC0+D1j mov bl, [edi+ebp] cmp bl, [edi] jnz short loc_4CBF93 add ecx, 1 add edi, 1 cmp ecx, [esp+20h+arg_0] jnz short loc_4CBF80 loc_4CBF93: ; CODE XREF: sub_4CBEC0+A1j ; sub_4CBEC0+A9j ... cmp [esp+20h+arg_24], ecx jnb short loc_4CBFB8 mov edi, [esp+20h+arg_20] mov [edi], ecx add edi, 4 add edx, 0FFFFFFFFh mov [edi], edx add edi, 4 cmp ecx, [esp+20h+arg_0] mov [esp+20h+arg_24], ecx mov [esp+20h+arg_20], edi jz short loc_4CC016 loc_4CBFB8: ; CODE XREF: sub_4CBEC0+98j ; sub_4CBEC0+D7j mov dl, [ecx+esi] mov esi, [esp+20h+arg_C] cmp dl, [ecx+esi] mov edx, [esp+20h+arg_4] jnb short loc_4CBFE4 mov esi, [esp+20h+var_10] lea ebp, [eax+4] mov ebx, ecx mov ecx, [esp+20h+var_8] mov [esi], edx mov eax, [ebp+0] mov [esp+20h+var_10], ebp mov [esp+20h+var_4], ebx jmp short loc_4CBFFC ; --------------------------------------------------------------------------- loc_4CBFE4: ; CODE XREF: sub_4CBEC0+106j mov esi, [esp+20h+var_C] mov ebp, [esp+20h+var_10] mov ebx, [esp+20h+var_4] mov [esi], edx mov [esp+20h+var_C], eax mov eax, [eax] mov [esp+20h+var_8], ecx loc_4CBFFC: ; CODE XREF: sub_4CBEC0+122j mov edx, [esp+20h+arg_8] sub edx, eax cmp [esp+20h+arg_1C], 0 mov [esp+20h+arg_4], eax jnz loc_4CBF20 jmp loc_4CBEF9 ; --------------------------------------------------------------------------- loc_4CC016: ; CODE XREF: sub_4CBEC0+F6j mov ecx, [eax] mov edx, [esp+20h+var_10] mov [edx], ecx mov eax, [eax+4] mov ecx, [esp+20h+var_C] mov [ecx], eax mov eax, edi pop edi pop esi pop ebp pop ebx add esp, 10h retn sub_4CBEC0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CC040 proc near ; CODE XREF: sub_4CC220+F8p ; sub_4CC3B0+173p ... var_10 = dword ptr -10h var_C = dword ptr -0Ch var_8 = dword ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch arg_C = dword ptr 10h arg_10 = dword ptr 14h arg_14 = dword ptr 18h arg_18 = dword ptr 1Ch arg_1C = dword ptr 20h sub esp, 10h mov eax, [esp+10h+arg_10] mov edx, [esp+10h+arg_4] push ebx push ebp push esi mov esi, [esp+1Ch+arg_14] lea eax, [eax+esi*8] lea ecx, [eax+4] push edi mov edi, eax mov eax, [esp+20h+arg_8] xor ebx, ebx xor ebp, ebp sub eax, edx cmp [esp+20h+arg_1C], ebx mov [esp+20h+var_C], ecx mov [esp+20h+var_10], edi mov [esp+20h+var_8], ebx mov [esp+20h+var_4], ebp jz loc_4CC159 nop loc_4CC080: ; CODE XREF: sub_4CC040+114j sub [esp+20h+arg_1C], 1 cmp eax, [esp+20h+arg_18] jnb loc_4CC159 cmp esi, eax sbb ecx, ecx and ecx, [esp+20h+arg_18] sub ecx, eax add ecx, esi mov esi, [esp+20h+arg_10] lea edi, [esi+ecx*8] mov ecx, [esp+20h+arg_C] sub ecx, eax cmp ebx, ebp mov eax, ebx jb short loc_4CC0B0 mov eax, ebp loc_4CC0B0: ; CODE XREF: sub_4CC040+6Cj mov bl, [eax+ecx] mov esi, [esp+20h+arg_C] cmp bl, [eax+esi] jnz short loc_4CC102 add eax, 1 cmp eax, [esp+20h+arg_0] jz short loc_4CC0E3 mov ebx, esi mov ebp, ecx lea esi, [eax+ebx] sub ebp, ebx mov edi, edi loc_4CC0D0: ; CODE XREF: sub_4CC040+A1j mov bl, [esi+ebp] cmp bl, [esi] jnz short loc_4CC0FC add eax, 1 add esi, 1 cmp eax, [esp+20h+arg_0] jnz short loc_4CC0D0 loc_4CC0E3: ; CODE XREF: sub_4CC040+83j ; sub_4CC040+C0j mov edx, [edi] mov eax, [esp+20h+var_10] mov [eax], edx mov ecx, [edi+4] mov edx, [esp+20h+var_C] pop edi pop esi pop ebp mov [edx], ecx pop ebx add esp, 10h retn ; --------------------------------------------------------------------------- loc_4CC0FC: ; CODE XREF: sub_4CC040+95j cmp eax, [esp+20h+arg_0] jz short loc_4CC0E3 loc_4CC102: ; CODE XREF: sub_4CC040+7Aj mov cl, [eax+ecx] mov esi, [esp+20h+arg_C] cmp cl, [eax+esi] jnb short loc_4CC129 mov ecx, [esp+20h+var_10] mov ebx, [esp+20h+var_8] add edi, 4 mov ebp, eax mov [ecx], edx mov edx, [edi] mov [esp+20h+var_10], edi mov [esp+20h+var_4], ebp jmp short loc_4CC143 ; --------------------------------------------------------------------------- loc_4CC129: ; CODE XREF: sub_4CC040+CCj mov ecx, [esp+20h+var_C] mov ebp, [esp+20h+var_4] mov [ecx], edx mov edx, [edi] mov ebx, eax mov [esp+20h+var_C], edi mov edi, [esp+20h+var_10] mov [esp+20h+var_8], ebx loc_4CC143: ; CODE XREF: sub_4CC040+E7j mov eax, [esp+20h+arg_8] sub eax, edx cmp [esp+20h+arg_1C], 0 jz short loc_4CC159 mov esi, [esp+20h+arg_14] jmp loc_4CC080 ; --------------------------------------------------------------------------- loc_4CC159: ; CODE XREF: sub_4CC040+39j ; sub_4CC040+49j ... mov eax, [esp+20h+var_C] mov dword ptr [edi], 0 pop edi pop esi pop ebp mov dword ptr [eax], 0 pop ebx add esp, 10h retn sub_4CC040 endp ; --------------------------------------------------------------------------- align 10h loc_4CC180: ; DATA XREF: sub_4CCAA0+40o push esi mov esi, [esp+8] mov edx, [esi+10h] cmp edx, 2 jnb short loc_4CC1AD add dword ptr [esi+4], 1 mov eax, [esi+4] add dword ptr [esi+14h], 1 add dword ptr [esi], 1 cmp eax, [esi+8] jnz short loc_4CC1A9 push esi call sub_4CBD50 add esp, 4 loc_4CC1A9: ; CODE XREF: .text:004CC19Ej xor eax, eax pop esi retn ; --------------------------------------------------------------------------- loc_4CC1AD: ; CODE XREF: .text:004CC18Bj mov eax, [esi] xor ecx, ecx mov ch, [eax+1] push ebx mov ebx, [esp+10h] push edi mov edi, [esi+4] push 1 push ebx mov cl, [eax] mov eax, ecx mov ecx, [esi+20h] lea eax, [ecx+eax*4] mov ecx, [eax] mov [eax], edi mov eax, [esi+2Ch] push eax mov eax, [esi+18h] push eax mov eax, [esi+14h] push eax mov eax, [esi+24h] push eax mov eax, [esi] push eax mov eax, [esi+4] push eax push ecx push edx call sub_4CBEC0 add dword ptr [esi+4], 1 add dword ptr [esi+14h], 1 add dword ptr [esi], 1 mov edi, eax mov eax, [esi+4] sub edi, ebx add esp, 28h sar edi, 2 cmp eax, [esi+8] jnz short loc_4CC212 push esi call sub_4CBD50 add esp, 4 loc_4CC212: ; CODE XREF: .text:004CC207j mov eax, edi pop edi pop ebx pop esi retn ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CC220 proc near ; DATA XREF: sub_4CCAA0+54o var_8 = dword ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 4 arg_4 = dword ptr 8 sub esp, 8 push esi mov esi, [esp+0Ch+arg_0] mov eax, [esi+10h] cmp eax, 3 mov [esp+0Ch+arg_0], eax jnb short loc_4CC259 mov eax, 1 add [esi+14h], eax add [esi], eax add [esi+4], eax mov eax, [esi+4] cmp eax, [esi+8] jnz short loc_4CC252 push esi call sub_4CBD50 add esp, 4 loc_4CC252: ; CODE XREF: sub_4CC220+27j xor eax, eax pop esi add esp, 8 retn ; --------------------------------------------------------------------------- loc_4CC259: ; CODE XREF: sub_4CC220+12j push ebx mov ebx, [esi+20h] push ebp xor edx, edx push edi mov edi, [esi] mov dh, [edi+2] movzx ecx, byte ptr [edi] movzx eax, byte ptr [edi+1] xor eax, dword_553198[ecx*4] xor edx, eax and edx, [esi+28h] mov ecx, eax mov ebp, [ebx+edx*4+1000h] mov eax, [esi+4] and ecx, 3FFh sub eax, [ebx+ecx*4] mov [esp+18h+var_8], ebp mov ebp, [esi+4] mov [ebx+edx*4+1000h], ebp mov ebx, [esi+20h] mov edx, [ebx+edx*4+1000h] mov [ebx+ecx*4], edx mov ebx, [esp+18h+arg_4] xor ebp, ebp cmp eax, [esi+18h] mov ecx, 2 jnb loc_4CC348 mov edx, edi sub edx, eax mov [esp+18h+var_4], edx mov dl, [edx] cmp dl, [edi] jnz short loc_4CC348 mov edx, [esp+18h+arg_0] cmp edx, ecx jz short loc_4CC2EA loc_4CC2D3: ; CODE XREF: sub_4CC220+C4j mov ebx, [esp+18h+var_4] mov bl, [ebx+ecx] cmp bl, [ecx+edi] jnz short loc_4CC2E6 add ecx, 1 cmp ecx, edx jnz short loc_4CC2D3 loc_4CC2E6: ; CODE XREF: sub_4CC220+BDj mov ebx, [esp+18h+arg_4] loc_4CC2EA: ; CODE XREF: sub_4CC220+B1j add eax, 0FFFFFFFFh cmp ecx, edx mov [ebx], ecx mov [ebx+4], eax mov ebp, 2 jnz short loc_4CC34C mov eax, [esi+2Ch] mov ecx, [esi+18h] push eax mov eax, [esi+14h] push ecx mov ecx, [esi+24h] push eax mov eax, [esi] push ecx mov ecx, [esi+4] push eax mov eax, [esp+2Ch+var_8] push ecx push eax push edx call sub_4CC040 mov eax, 1 add [esi+14h], eax add [esi], eax add [esi+4], eax mov eax, [esi+4] add esp, 20h cmp eax, [esi+8] jnz short loc_4CC33E push esi call sub_4CBD50 add esp, 4 loc_4CC33E: ; CODE XREF: sub_4CC220+113j pop edi mov eax, ebp pop ebp pop ebx pop esi add esp, 8 retn ; --------------------------------------------------------------------------- loc_4CC348: ; CODE XREF: sub_4CC220+97j ; sub_4CC220+A9j mov edx, [esp+18h+arg_0] loc_4CC34C: ; CODE XREF: sub_4CC220+D9j mov eax, [esi+2Ch] push ecx lea ecx, [ebx+ebp*4] push ecx mov ecx, [esi+18h] push eax mov eax, [esi+14h] push ecx mov ecx, [esi+24h] push eax mov eax, [esi] push ecx mov ecx, [esi+4] push eax mov eax, [esp+34h+var_8] push ecx push eax push edx call sub_4CBEC0 mov edi, eax mov eax, 1 add [esi+14h], eax add [esi], eax add [esi+4], eax mov eax, [esi+4] sub edi, ebx add esp, 28h sar edi, 2 cmp eax, [esi+8] jnz short loc_4CC39B push esi call sub_4CBD50 add esp, 4 loc_4CC39B: ; CODE XREF: sub_4CC220+170j mov eax, edi pop edi pop ebp pop ebx pop esi add esp, 8 retn sub_4CC220 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CC3B0 proc near ; DATA XREF: sub_4CCAA0:loc_4CCB03o var_10 = dword ptr -10h var_8 = dword ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 4 arg_4 = dword ptr 8 sub esp, 10h push esi mov esi, [esp+14h+arg_0] mov eax, [esi+10h] cmp eax, 4 mov [esp+14h+arg_0], eax jnb short loc_4CC3E9 mov eax, 1 add [esi+14h], eax add [esi], eax add [esi+4], eax mov eax, [esi+4] cmp eax, [esi+8] jnz short loc_4CC3E2 push esi call sub_4CBD50 add esp, 4 loc_4CC3E2: ; CODE XREF: sub_4CC3B0+27j xor eax, eax pop esi add esp, 10h retn ; --------------------------------------------------------------------------- loc_4CC3E9: ; CODE XREF: sub_4CC3B0+12j push ebx push ebp push edi mov edi, [esi] movzx eax, byte ptr [edi] movzx edx, byte ptr [edi+1] xor edx, dword_553198[eax*4] movzx eax, byte ptr [edi+2] movzx ebp, byte ptr [edi+3] mov ecx, eax add eax, eax add eax, eax add eax, eax xor eax, dword_553198[ebp*4] mov ebp, [esi+4] shl eax, 5 shl ecx, 8 xor eax, edx and eax, [esi+28h] xor ecx, edx mov ebx, edx mov edx, [esi+20h] and ebx, 3FFh sub ebp, [edx+ebx*4] and ecx, 0FFFFh mov [esp+20h+var_4], ebp mov ebp, [esi+4] sub ebp, [edx+ecx*4+1000h] mov [esp+20h+var_10], ebp mov ebp, [edx+eax*4+41000h] mov [esp+20h+var_8], ebp mov ebp, [esi+4] mov [edx+eax*4+41000h], ebp mov edx, [esi+20h] mov eax, [edx+eax*4+41000h] mov [edx+ecx*4+1000h], eax mov eax, [esi+20h] mov ecx, [eax+ecx*4+1000h] mov [eax+ebx*4], ecx mov ecx, [esp+20h+var_4] mov ebx, [esp+20h+arg_4] xor ebp, ebp cmp ecx, [esi+18h] mov eax, 1 jnb short loc_4CC4A9 mov edx, edi sub edx, ecx mov dl, [edx] cmp dl, [edi] jnz short loc_4CC4A9 mov eax, 2 lea edx, [ecx-1] mov [ebx], eax mov [ebx+4], edx mov ebp, eax loc_4CC4A9: ; CODE XREF: sub_4CC3B0+DEj ; sub_4CC3B0+E8j mov edx, [esp+20h+var_10] cmp ecx, edx jz short loc_4CC4D5 cmp edx, [esi+18h] jnb short loc_4CC4D5 mov edx, edi sub edx, [esp+20h+var_10] mov dl, [edx] cmp dl, [edi] jnz short loc_4CC4D5 mov ecx, [esp+20h+var_10] lea edx, [ecx-1] mov [ebx+ebp*4+4], edx mov eax, 3 add ebp, 2 loc_4CC4D5: ; CODE XREF: sub_4CC3B0+FFj ; sub_4CC3B0+104j ... test ebp, ebp mov edx, [esp+20h+arg_0] jz short loc_4CC553 cmp eax, edx jz short loc_4CC4FE mov edx, eax sub edx, ecx add edx, edi loc_4CC4E7: ; CODE XREF: sub_4CC3B0+148j mov cl, [edx] cmp cl, [eax+edi] jnz short loc_4CC4FA add eax, 1 add edx, 1 cmp eax, [esp+20h+arg_0] jnz short loc_4CC4E7 loc_4CC4FA: ; CODE XREF: sub_4CC3B0+13Cj mov edx, [esp+20h+arg_0] loc_4CC4FE: ; CODE XREF: sub_4CC3B0+12Fj cmp eax, edx mov [ebx+ebp*4-8], eax jnz short loc_4CC553 mov eax, [esi+2Ch] mov ecx, [esi+18h] push eax mov eax, [esi+14h] push ecx mov ecx, [esi+24h] push eax mov eax, [esi] push ecx mov ecx, [esi+4] push eax mov eax, [esp+34h+var_8] push ecx push eax push edx call sub_4CC040 mov eax, 1 add [esi+14h], eax add [esi], eax add [esi+4], eax mov eax, [esi+4] add esp, 20h cmp eax, [esi+8] jnz short loc_4CC549 push esi call sub_4CBD50 add esp, 4 loc_4CC549: ; CODE XREF: sub_4CC3B0+18Ej pop edi mov eax, ebp pop ebp pop ebx pop esi add esp, 10h retn ; --------------------------------------------------------------------------- loc_4CC553: ; CODE XREF: sub_4CC3B0+12Bj ; sub_4CC3B0+154j cmp eax, 3 jnb short loc_4CC55D mov eax, 3 loc_4CC55D: ; CODE XREF: sub_4CC3B0+1A6j push eax mov eax, [esi+2Ch] lea ecx, [ebx+ebp*4] push ecx mov ecx, [esi+18h] push eax mov eax, [esi+14h] push ecx mov ecx, [esi+24h] push eax mov eax, [esi] push ecx mov ecx, [esi+4] push eax mov eax, [esp+3Ch+var_8] push ecx push eax push edx call sub_4CBEC0 mov edi, eax mov eax, 1 add [esi+14h], eax add [esi], eax add [esi+4], eax mov eax, [esi+4] sub edi, ebx add esp, 28h sar edi, 2 cmp eax, [esi+8] jnz short loc_4CC5AC push esi call sub_4CBD50 add esp, 4 loc_4CC5AC: ; CODE XREF: sub_4CC3B0+1F1j mov eax, edi pop edi pop ebp pop ebx pop esi add esp, 10h retn sub_4CC3B0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CC5C0 proc near ; DATA XREF: sub_4CCAA0+29o var_10 = dword ptr -10h var_8 = dword ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 4 arg_4 = dword ptr 8 sub esp, 10h push esi mov esi, [esp+14h+arg_0] mov eax, [esi+10h] cmp eax, 4 mov [esp+14h+arg_0], eax jnb short loc_4CC5F9 mov eax, 1 add [esi+14h], eax add [esi], eax add [esi+4], eax mov eax, [esi+4] cmp eax, [esi+8] jnz short loc_4CC5F2 push esi call sub_4CBD50 add esp, 4 loc_4CC5F2: ; CODE XREF: sub_4CC5C0+27j xor eax, eax pop esi add esp, 10h retn ; --------------------------------------------------------------------------- loc_4CC5F9: ; CODE XREF: sub_4CC5C0+12j push ebx push ebp push edi mov edi, [esi] movzx eax, byte ptr [edi] movzx edx, byte ptr [edi+1] xor edx, dword_553198[eax*4] movzx eax, byte ptr [edi+2] movzx ebp, byte ptr [edi+3] mov ecx, eax add eax, eax add eax, eax add eax, eax xor eax, dword_553198[ebp*4] mov ebp, [esi+4] shl eax, 5 shl ecx, 8 xor eax, edx and eax, [esi+28h] xor ecx, edx mov ebx, edx mov edx, [esi+20h] and ebx, 3FFh sub ebp, [edx+ebx*4] and ecx, 0FFFFh mov [esp+20h+var_4], ebp mov ebp, [esi+4] sub ebp, [edx+ecx*4+1000h] mov [esp+20h+var_10], ebp mov ebp, [edx+eax*4+41000h] mov [esp+20h+var_8], ebp mov ebp, [esi+4] mov [edx+eax*4+41000h], ebp mov edx, [esi+20h] mov eax, [edx+eax*4+41000h] mov [edx+ecx*4+1000h], eax mov eax, [esi+20h] mov ecx, [eax+ecx*4+1000h] mov [eax+ebx*4], ecx mov ecx, [esp+20h+var_4] mov ebx, [esp+20h+arg_4] xor ebp, ebp cmp ecx, [esi+18h] mov eax, 1 jnb short loc_4CC6B9 mov edx, edi sub edx, ecx mov dl, [edx] cmp dl, [edi] jnz short loc_4CC6B9 mov eax, 2 lea edx, [ecx-1] mov [ebx], eax mov [ebx+4], edx mov ebp, eax loc_4CC6B9: ; CODE XREF: sub_4CC5C0+DEj ; sub_4CC5C0+E8j mov edx, [esp+20h+var_10] cmp ecx, edx jz short loc_4CC6E5 cmp edx, [esi+18h] jnb short loc_4CC6E5 mov edx, edi sub edx, [esp+20h+var_10] mov dl, [edx] cmp dl, [edi] jnz short loc_4CC6E5 mov ecx, [esp+20h+var_10] lea edx, [ecx-1] mov [ebx+ebp*4+4], edx mov eax, 3 add ebp, 2 loc_4CC6E5: ; CODE XREF: sub_4CC5C0+FFj ; sub_4CC5C0+104j ... test ebp, ebp jz short loc_4CC747 cmp eax, [esp+20h+arg_0] jz short loc_4CC708 mov edx, eax sub edx, ecx add edx, edi loc_4CC6F5: ; CODE XREF: sub_4CC5C0+146j mov cl, [edx] cmp cl, [eax+edi] jnz short loc_4CC708 add eax, 1 add edx, 1 cmp eax, [esp+20h+arg_0] jnz short loc_4CC6F5 loc_4CC708: ; CODE XREF: sub_4CC5C0+12Dj ; sub_4CC5C0+13Aj cmp eax, [esp+20h+arg_0] mov [ebx+ebp*4-8], eax jnz short loc_4CC747 mov edx, [esi+14h] mov eax, [esi+24h] mov ecx, [esp+20h+var_8] mov [eax+edx*4], ecx mov eax, 1 add [esi+14h], eax add [esi], eax add [esi+4], eax mov eax, [esi+4] cmp eax, [esi+8] jnz short loc_4CC73D push esi call sub_4CBD50 add esp, 4 loc_4CC73D: ; CODE XREF: sub_4CC5C0+172j pop edi mov eax, ebp pop ebp pop ebx pop esi add esp, 10h retn ; --------------------------------------------------------------------------- loc_4CC747: ; CODE XREF: sub_4CC5C0+127j ; sub_4CC5C0+150j cmp eax, 3 jnb short loc_4CC751 mov eax, 3 loc_4CC751: ; CODE XREF: sub_4CC5C0+18Aj mov ecx, [esi+18h] push eax mov eax, [esi+2Ch] lea edx, [ebx+ebp*4] push edx mov edx, [esi+14h] push eax mov eax, [esi+24h] push ecx mov ecx, [esi] push edx mov edx, [esi+4] push eax mov eax, [esp+38h+var_8] push ecx mov ecx, [esp+3Ch+arg_0] push edx push eax push ecx call sub_4CBDE0 mov edi, eax mov eax, 1 add [esi+14h], eax add [esi], eax add [esi+4], eax mov eax, [esi+4] sub edi, ebx add esp, 28h sar edi, 2 cmp eax, [esi+8] jnz short loc_4CC7A4 push esi call sub_4CBD50 add esp, 4 loc_4CC7A4: ; CODE XREF: sub_4CC5C0+1D9j mov eax, edi pop edi pop ebp pop ebx pop esi add esp, 10h retn sub_4CC5C0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CC7B0 proc near ; DATA XREF: sub_4CCAA0+47o arg_0 = dword ptr 4 arg_4 = dword ptr 8 push ebx push ebp mov ebp, [esp+8+arg_4] push esi mov esi, [esp+0Ch+arg_0] push edi mov edi, 1 loc_4CC7C1: ; CODE XREF: sub_4CC7B0+6Dj mov edx, [esi+10h] cmp edx, 2 jb short loc_4CC802 mov eax, [esi] mov ebx, [esi+4] xor ecx, ecx mov ch, [eax+1] mov cl, [eax] mov eax, ecx mov ecx, [esi+20h] lea eax, [ecx+eax*4] mov ecx, [eax] mov [eax], ebx mov eax, [esi+2Ch] push eax mov eax, [esi+18h] push eax mov eax, [esi+14h] push eax mov eax, [esi+24h] push eax mov eax, [esi] push eax mov eax, [esi+4] push eax push ecx push edx call sub_4CC040 add esp, 20h loc_4CC802: ; CODE XREF: sub_4CC7B0+17j add [esi+4], edi mov eax, [esi+4] add [esi+14h], edi add [esi], edi cmp eax, [esi+8] jnz short loc_4CC81B push esi call sub_4CBD50 add esp, 4 loc_4CC81B: ; CODE XREF: sub_4CC7B0+60j sub ebp, edi jnz short loc_4CC7C1 pop edi pop esi pop ebp pop ebx retn sub_4CC7B0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CC830 proc near ; DATA XREF: sub_4CCAA0+5Bo arg_0 = dword ptr 4 arg_4 = dword ptr 8 push ebx push ebp push esi mov esi, [esp+0Ch+arg_0] push edi mov edi, 1 lea ecx, [ecx+0] loc_4CC840: ; CODE XREF: sub_4CC830+9Fj mov ebp, [esi+10h] cmp ebp, 3 jb short loc_4CC8B2 mov ecx, [esi] movzx edx, byte ptr [ecx] movzx eax, byte ptr [ecx+1] xor eax, dword_553198[edx*4] mov ebx, [esi+4] xor edx, edx mov dh, [ecx+2] xor edx, eax and edx, [esi+28h] and eax, 3FFh mov ecx, edx mov edx, [esi+20h] mov edi, [edx+ecx*4+1000h] lea edx, [edx+ecx*4+1000h] mov [edx], ebx mov edx, [esi+20h] mov ecx, [edx+ecx*4+1000h] mov [edx+eax*4], ecx mov edx, [esi+2Ch] mov eax, [esi+18h] mov ecx, [esi+14h] push edx mov edx, [esi+24h] push eax mov eax, [esi] push ecx mov ecx, [esi+4] push edx push eax push ecx push edi push ebp call sub_4CC040 add esp, 20h mov edi, 1 loc_4CC8B2: ; CODE XREF: sub_4CC830+16j add [esi+4], edi mov eax, [esi+4] add [esi+14h], edi add [esi], edi cmp eax, [esi+8] jnz short loc_4CC8CB push esi call sub_4CBD50 add esp, 4 loc_4CC8CB: ; CODE XREF: sub_4CC830+90j sub [esp+10h+arg_4], edi jnz loc_4CC840 pop edi pop esi pop ebp pop ebx retn sub_4CC830 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CC8E0 proc near ; DATA XREF: sub_4CCAA0+6Ao arg_0 = dword ptr 4 arg_4 = dword ptr 8 push ebx push ebp push esi mov esi, [esp+0Ch+arg_0] push edi mov edi, 1 lea ecx, [ecx+0] loc_4CC8F0: ; CODE XREF: sub_4CC8E0+D6j mov eax, [esi+10h] cmp eax, 4 mov [esp+10h+arg_0], eax jb loc_4CC999 mov eax, [esi] movzx edi, byte ptr [eax+2] movzx edx, byte ptr [eax] movzx ebx, byte ptr [eax+3] movzx ecx, byte ptr [eax+1] xor ecx, dword_553198[edx*4] mov ebp, [esi+4] lea eax, ds:0[edi*8] xor eax, dword_553198[ebx*4] mov edx, edi mov edi, [esi+20h] shl eax, 5 xor eax, ecx and eax, [esi+28h] shl edx, 8 mov ebx, [edi+eax*4+41000h] xor edx, ecx and edx, 0FFFFh mov [edi+edx*4+1000h], ebp mov edi, [esi+20h] mov edx, [edi+edx*4+1000h] and ecx, 3FFh mov [edi+ecx*4], edx mov ecx, [esi+20h] mov edx, [esi+4] mov [ecx+eax*4+41000h], edx mov eax, [esi+2Ch] mov ecx, [esi+18h] mov edx, [esi+14h] push eax mov eax, [esi+24h] push ecx mov ecx, [esi] push edx mov edx, [esi+4] push eax mov eax, [esp+20h+arg_0] push ecx push edx push ebx push eax call sub_4CC040 add esp, 20h mov edi, 1 loc_4CC999: ; CODE XREF: sub_4CC8E0+1Aj add [esi+4], edi mov eax, [esi+4] add [esi+14h], edi add [esi], edi cmp eax, [esi+8] jnz short loc_4CC9B2 push esi call sub_4CBD50 add esp, 4 loc_4CC9B2: ; CODE XREF: sub_4CC8E0+C7j sub [esp+10h+arg_4], edi jnz loc_4CC8F0 pop edi pop esi pop ebp pop ebx retn sub_4CC8E0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CC9D0 proc near ; DATA XREF: sub_4CCAA0+30o arg_0 = dword ptr 4 arg_4 = dword ptr 8 push ebx push ebp push esi mov esi, [esp+0Ch+arg_0] push edi mov edi, 1 lea ecx, [ecx+0] loc_4CC9E0: ; CODE XREF: sub_4CC9D0+BAj cmp dword ptr [esi+10h], 4 jb loc_4CCA6D mov eax, [esi] movzx edi, byte ptr [eax+2] movzx edx, byte ptr [eax] movzx ebx, byte ptr [eax+3] movzx ecx, byte ptr [eax+1] xor ecx, dword_553198[edx*4] mov ebp, [esi+4] lea eax, ds:0[edi*8] xor eax, dword_553198[ebx*4] mov edx, edi mov edi, [esi+20h] shl eax, 5 xor eax, ecx and eax, [esi+28h] mov ebx, [edi+eax*4+41000h] lea edi, [edi+eax*4+41000h] mov [edi], ebp mov edi, [esi+20h] mov eax, [edi+eax*4+41000h] shl edx, 8 xor edx, ecx and edx, 0FFFFh mov [edi+edx*4+1000h], eax mov eax, [esi+20h] mov edx, [eax+edx*4+1000h] and ecx, 3FFh mov [eax+ecx*4], edx mov eax, [esi+14h] mov ecx, [esi+24h] mov [ecx+eax*4], ebx mov edi, 1 loc_4CCA6D: ; CODE XREF: sub_4CC9D0+14j add [esi+4], edi mov eax, [esi+4] add [esi+14h], edi add [esi], edi cmp eax, [esi+8] jnz short loc_4CCA86 push esi call sub_4CBD50 add esp, 4 loc_4CCA86: ; CODE XREF: sub_4CC9D0+ABj sub [esp+10h+arg_4], edi jnz loc_4CC9E0 pop edi pop esi pop ebp pop ebx retn sub_4CC9D0 endp ; =============== S U B R O U T I N E ======================================= sub_4CCAA0 proc near ; CODE XREF: sub_4D0270+F3p arg_0 = dword ptr 4 arg_4 = dword ptr 8 mov eax, [esp+arg_4] mov ecx, [esp+arg_0] mov dword ptr [eax], offset sub_4CBC80 mov dword ptr [eax+4], offset loc_4CB960 mov dword ptr [eax+8], offset loc_4CB970 mov dword ptr [eax+0Ch], offset loc_4CB950 cmp dword ptr [ecx+50h], 0 jnz short loc_4CCAD8 mov dword ptr [eax+10h], offset sub_4CC5C0 mov dword ptr [eax+14h], offset sub_4CC9D0 retn ; --------------------------------------------------------------------------- loc_4CCAD8: ; CODE XREF: sub_4CCAA0+27j mov ecx, [ecx+48h] cmp ecx, 2 jnz short loc_4CCAEF mov dword ptr [eax+10h], offset loc_4CC180 mov dword ptr [eax+14h], offset sub_4CC7B0 retn ; --------------------------------------------------------------------------- loc_4CCAEF: ; CODE XREF: sub_4CCAA0+3Ej cmp ecx, 3 jnz short loc_4CCB03 mov dword ptr [eax+10h], offset sub_4CC220 mov dword ptr [eax+14h], offset sub_4CC830 retn ; --------------------------------------------------------------------------- loc_4CCB03: ; CODE XREF: sub_4CCAA0+52j mov dword ptr [eax+10h], offset sub_4CC3B0 mov dword ptr [eax+14h], offset sub_4CC8E0 retn sub_4CCAA0 endp ; --------------------------------------------------------------------------- Interface1_AddRef proc near ; DATA XREF: .rdata:00517A94o ;sub_4CCB80 arg_0 = dword ptr 4 mov eax, [esp+arg_0] add dword ptr [eax+4], 1 mov eax, [eax+4] retn 4 Interface1_AddRef endp ; --------------------------------------------------------------------------- sub_4CCB20 proc near ; DATA XREF: .rdata:00517A9Co arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch arg_C = dword ptr 10h push esi mov esi, [esp+4+arg_0] mov ecx, [esi+10h] sub ecx, [esi+18h] mov eax, [esi+14h] sbb eax, [esi+1Ch] xor edx, edx cmp edx, eax push edi mov edi, [esp+8+arg_8] jb short loc_4CCB48 ja short loc_4CCB42 cmp edi, ecx jbe short loc_4CCB48 loc_4CCB42: ; CODE XREF: sub_4CCB20+1Cj mov edi, [esi+10h] sub edi, [esi+18h] loc_4CCB48: ; CODE XREF: sub_4CCB20+1Aj ; sub_4CCB20+20j mov eax, [esp+8+arg_C] test eax, eax jz short loc_4CCB52 mov [eax], edi loc_4CCB52: ; CODE XREF: sub_4CCB20+2Ej test edi, edi jz short loc_4CCB72 mov eax, [esi+8] add eax, [esi+18h] mov ecx, [esp+8+arg_4] push edi ; size_t push eax ; void * push ecx ; void * call _memcpy ; Microsoft VisualC 2-8/net runtime add esp, 0Ch add [esi+18h], edi adc dword ptr [esi+1Ch], 0 loc_4CCB72: ; CODE XREF: sub_4CCB20+34j pop edi xor eax, eax pop esi retn 10h sub_4CCB20 endp ; --------------------------------------------------------------------------- sub_4CCB90 proc near ; DATA XREF: .rdata:00517AB0o arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch arg_C = dword ptr 10h push ebx mov ebx, [esp+4+arg_8] push esi mov esi, [esp+8+arg_0] mov ecx, [esi+10h] mov eax, [esi+14h] push edi xor edi, edi sub ecx, [esi+18h] sbb eax, [esi+1Ch] cmp edi, eax jb short loc_4CCBC2 ja short loc_4CCBB3 cmp ebx, ecx jbe short loc_4CCBC2 loc_4CCBB3: ; CODE XREF: sub_4CCB90+1Dj pop edi mov byte ptr [esi+20h], 1 pop esi mov eax, 80004005h pop ebx retn 10h loc_4CCBC2: ; CODE XREF: sub_4CCB90+1Bj ; sub_4CCB90+21j mov ecx, [esi+8] mov eax, [esp+0Ch+arg_4] add ecx, [esi+18h] push ebx ; size_t push eax ; void * push ecx ; void * call _memcpy ; Microsoft VisualC 2-8/net runtime mov eax, [esp+18h+arg_C] add esp, 0Ch add [esi+18h], ebx adc [esi+1Ch], edi test eax, eax jz short loc_4CCBE7 mov [eax], ebx loc_4CCBE7: ; CODE XREF: sub_4CCB90+53j pop edi pop esi xor eax, eax pop ebx retn 10h sub_4CCB90 endp ; --------------------------------------------------------------------------- align 10h ; --------------------------------------------------------------------------- LzmaProps_Decode proc near ; CODE XREF: Decompress_lzma_internal+35p ;sub_4CCBF0 propsRes = dword ptr 4 propsData = dword ptr 8 propsSize = dword ptr 0Ch cmp [esp+propsSize], 5 ; LZMA_PROPS_SIZE jge short loc_4CCBFD loc_4CCBF7: ; CODE XREF: LzmaProps_Decode+16j mov eax, 1 retn ; --------------------------------------------------------------------------- loc_4CCBFD: ; CODE XREF: LzmaProps_Decode+5j mov eax, [esp+propsData] mov cl, [eax] cmp cl, 0E1h ; 9 * 5 * 5 jnb short loc_4CCBF7 cmp cl, 2Dh push edi mov edi, [esp+4+propsRes] mov dword ptr [edi+8], 0 jb short loc_4CCC40 push esi movzx esi, cl mov eax, 6C16C16Dh mul esi mov eax, esi sub eax, edx shr eax, 1 add eax, edx shr eax, 5 movzx eax, al mov edx, eax pop esi loc_4CCC35: ; CODE XREF: LzmaProps_Decode+4Bj add cl, 0D3h sub eax, 1 jnz short loc_4CCC35 mov [edi+8], edx loc_4CCC40: ; CODE XREF: LzmaProps_Decode+27j cmp cl, 9 mov dword ptr [edi+4], 0 jb short loc_4CCC6B movzx edx, cl mov eax, 38E38E39h mul edx shr edx, 1 movzx eax, dl mov edx, eax lea ecx, [ecx+0] loc_4CCC60: ; CODE XREF: LzmaProps_Decode+76j add cl, 0F7h sub eax, 1 jnz short loc_4CCC60 mov [edi+4], edx loc_4CCC6B: ; CODE XREF: LzmaProps_Decode+5Aj movzx eax, cl mov [edi], eax xor eax, eax pop edi retn LzmaProps_Decode endp sub_4CCC80 proc near ; CODE XREF: Decompress_lzma_internal+97p var_3C = dword ptr -3Ch var_38 = dword ptr -38h var_34 = dword ptr -34h var_30 = dword ptr -30h var_2C = dword ptr -2Ch var_28 = dword ptr -28h var_24 = dword ptr -24h var_20 = dword ptr -20h var_1C = dword ptr -1Ch var_18 = dword ptr -18h var_14 = dword ptr -14h var_10 = dword ptr -10h var_C = dword ptr -0Ch var_8 = dword ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch arg_C = dword ptr 10h arg_10 = dword ptr 14h arg_14 = dword ptr 18h arg_18 = dword ptr 1Ch sub esp, 3Ch mov eax, [esp+3Ch+arg_0] mov ecx, [eax+8] push ebx push ebp mov ebp, 1 mov edx, ebp shl edx, cl mov ecx, [eax+4] xor ebx, ebx push esi sub edx, ebp mov [esp+48h+var_C], edx mov edx, ebp shl edx, cl mov ecx, [esp+48h+arg_C] push edi mov edi, [eax+0Ch] sub edx, ebp mov [esp+4Ch+var_8], edx mov edx, [eax] mov [ecx], ebx mov ecx, [esp+4Ch+arg_18] mov [ecx], ebx mov ecx, [eax+4] add ecx, edx mov eax, 300h shl eax, cl mov [esp+4Ch+var_20], edi mov [esp+4Ch+var_2C], ebx mov byte ptr [esp+4Ch+arg_0], bl add eax, 736h mov [esp+4Ch+var_14], edx mov [esp+4Ch+var_34], ebx mov [esp+4Ch+var_38], ebp mov [esp+4Ch+var_24], ebp mov [esp+4Ch+var_28], ebp mov [esp+4Ch+var_18], ebp jz short loc_4CCD04 mov ecx, eax shr ecx, 1 mov eax, 4000400h rep stosd adc ecx, ecx rep stosw loc_4CCD04: ; CODE XREF: sub_4CCC80+72j mov edx, [esp+4Ch+arg_8] mov ecx, [esp+4Ch+arg_4] lea edi, [ecx+edx] xor esi, esi or eax, 0FFFFFFFFh mov [esp+4Ch+var_3C], edi xor edx, edx lea ebx, [ebx+0] loc_4CCD20: ; CODE XREF: sub_4CCC80+BCj cmp ecx, edi jz loc_4CCF0B movzx ebp, byte ptr [ecx] shl esi, 8 or esi, ebp mov ebp, 1 add edx, ebp add ecx, ebp cmp edx, 5 jl short loc_4CCD20 cmp [esp+4Ch+arg_14], ebx mov [esp+4Ch+arg_8], ecx jbe loc_4CCFCD lea esp, [esp+0] loc_4CCD50: ; CODE XREF: sub_4CCC80+32Dj mov edx, [esp+4Ch+var_34] mov ecx, [esp+4Ch+var_C] and ecx, [esp+4Ch+var_2C] mov edi, [esp+4Ch+var_20] mov ebx, edx shl ebx, 4 add ebx, ecx cmp eax, 1000000h lea ebx, [edi+ebx*2] mov [esp+4Ch+var_1C], ecx mov [esp+4Ch+var_30], ebx jnb short loc_4CCD99 mov ecx, [esp+4Ch+arg_8] cmp ecx, [esp+4Ch+var_3C] jz loc_4CD6E2 movzx ebp, byte ptr [ecx] shl esi, 8 shl eax, 8 or esi, ebp add ecx, 1 mov [esp+4Ch+arg_8], ecx loc_4CCD99: ; CODE XREF: sub_4CCC80+F7j movzx ebx, word ptr [ebx] movzx ebp, bx mov ecx, eax shr ecx, 0Bh imul ecx, ebp cmp esi, ecx jnb loc_4CCFF4 mov edi, [esp+4Ch+var_30] mov eax, ecx mov ecx, 800h sub ecx, ebp mov ebp, [esp+4Ch+var_8] sar ecx, 5 add ecx, ebx movzx ebx, byte ptr [esp+4Ch+arg_0] mov [edi], cx mov edi, [esp+4Ch+var_2C] mov ecx, 8 sub cl, byte ptr [esp+4Ch+var_14] and ebp, edi shr ebx, cl mov ecx, [esp+4Ch+var_14] shl ebp, cl mov ecx, [esp+4Ch+var_20] mov edx, 1 add ebx, ebp imul ebx, 600h cmp [esp+4Ch+var_34], 7 lea ebp, [ebx+ecx+0E6Ch] mov [esp+4Ch+var_30], ebp jl loc_4CCEB0 sub edi, [esp+4Ch+var_38] mov ecx, [esp+4Ch+arg_10] movzx ebx, byte ptr [edi+ecx] jmp short loc_4CCE20 ; --------------------------------------------------------------------------- align 10h loc_4CCE20: ; CODE XREF: sub_4CCC80+197j ; sub_4CCC80+2C6j add ebx, ebx mov [esp+4Ch+var_10], ebx and ebx, 100h cmp eax, 1000000h lea ecx, [ebx+edx] lea ebp, [ebp+ecx*2+200h] mov [esp+4Ch+arg_0], ebp jnb short loc_4CCE61 mov ecx, [esp+4Ch+arg_8] cmp ecx, [esp+4Ch+var_3C] jz loc_4CD6E2 movzx edi, byte ptr [ecx] shl esi, 8 shl eax, 8 or esi, edi add ecx, 1 mov [esp+4Ch+arg_8], ecx loc_4CCE61: ; CODE XREF: sub_4CCC80+1BFj movzx edi, word ptr [ebp+0] movzx ebp, di mov ecx, eax shr ecx, 0Bh imul ecx, ebp cmp esi, ecx jnb loc_4CCF15 mov eax, ecx mov ecx, 800h sub ecx, ebp sar ecx, 5 add ecx, edi mov edi, [esp+4Ch+arg_0] add edx, edx test ebx, ebx mov [edi], cx jz loc_4CCF36 loc_4CCE97: ; CODE XREF: sub_4CCC80+2B0j cmp edx, 100h jge loc_4CCF70 mov ebp, [esp+4Ch+var_30] jmp short loc_4CCEB0 ; --------------------------------------------------------------------------- align 10h loc_4CCEB0: ; CODE XREF: sub_4CCC80+185j ; sub_4CCC80+227j ... cmp eax, 1000000h lea ecx, [edx+edx] mov [esp+4Ch+arg_0], ecx jnb short loc_4CCEDE mov edi, [esp+4Ch+arg_8] cmp edi, [esp+4Ch+var_3C] jz loc_4CD6E2 movzx ebx, byte ptr [edi] shl esi, 8 shl eax, 8 or esi, ebx add edi, 1 mov [esp+4Ch+arg_8], edi loc_4CCEDE: ; CODE XREF: sub_4CCC80+23Cj movzx edi, word ptr [ecx+ebp] movzx ebx, di mov ecx, eax shr ecx, 0Bh imul ecx, ebx cmp esi, ecx jnb short loc_4CCF4B mov eax, ecx mov ecx, 800h sub ecx, ebx sar ecx, 5 add ecx, edi mov edi, [esp+4Ch+arg_0] mov [edi+ebp], cx add edx, edx jmp short loc_4CCF64 ; --------------------------------------------------------------------------- loc_4CCF0B: ; CODE XREF: sub_4CCC80+A2j pop edi pop esi mov eax, ebp pop ebp pop ebx add esp, 3Ch retn ; --------------------------------------------------------------------------- loc_4CCF15: ; CODE XREF: sub_4CCC80+1F2j sub eax, ecx sub esi, ecx mov cx, di shr cx, 5 sub di, cx test ebx, ebx mov ecx, [esp+4Ch+arg_0] mov [ecx], di lea edx, [edx+edx+1] jz loc_4CCE97 loc_4CCF36: ; CODE XREF: sub_4CCC80+211j cmp edx, 100h jge short loc_4CCF70 mov ebp, [esp+4Ch+var_30] mov ebx, [esp+4Ch+var_10] jmp loc_4CCE20 ; --------------------------------------------------------------------------- loc_4CCF4B: ; CODE XREF: sub_4CCC80+26Fj mov dx, di shr dx, 5 sub di, dx mov edx, [esp+4Ch+arg_0] sub eax, ecx sub esi, ecx mov [edx+ebp], di add edx, 1 loc_4CCF64: ; CODE XREF: sub_4CCC80+289j cmp edx, 100h jl loc_4CCEB0 loc_4CCF70: ; CODE XREF: sub_4CCC80+21Dj ; sub_4CCC80+2BCj mov ecx, [esp+4Ch+var_2C] mov edi, [esp+4Ch+arg_10] mov [ecx+edi], dl add ecx, 1 mov [esp+4Ch+var_2C], ecx mov ecx, [esp+4Ch+var_34] cmp ecx, 4 mov byte ptr [esp+4Ch+arg_0], dl jge short loc_4CCF99 mov [esp+4Ch+var_34], 0 jmp short loc_4CCFA5 ; --------------------------------------------------------------------------- loc_4CCF99: ; CODE XREF: sub_4CCC80+30Dj cmp ecx, 0Ah jge short loc_4CCFEF sub ecx, 3 loc_4CCFA1: ; CODE XREF: sub_4CCC80+372j mov [esp+4Ch+var_34], ecx loc_4CCFA5: ; CODE XREF: sub_4CCC80+317j ; sub_4CCC80+530j ... mov ecx, [esp+4Ch+var_2C] cmp ecx, [esp+4Ch+arg_14] jb loc_4CCD50 loc_4CCFB3: ; CODE XREF: sub_4CCC80+A13j ; sub_4CCC80+A5Aj cmp eax, 1000000h jnb short loc_4CCFCD mov edx, [esp+4Ch+arg_8] cmp edx, [esp+4Ch+var_3C] jz loc_4CD6E2 add [esp+4Ch+arg_8], 1 loc_4CCFCD: ; CODE XREF: sub_4CCC80+C6j ; sub_4CCC80+338j mov eax, [esp+4Ch+arg_8] sub eax, [esp+4Ch+arg_4] mov ecx, [esp+4Ch+arg_C] mov edx, [esp+4Ch+var_2C] pop edi mov [ecx], eax mov eax, [esp+48h+arg_18] pop esi pop ebp mov [eax], edx xor eax, eax pop ebx add esp, 3Ch retn ; --------------------------------------------------------------------------- loc_4CCFEF: ; CODE XREF: sub_4CCC80+31Cj sub ecx, 6 jmp short loc_4CCFA1 ; --------------------------------------------------------------------------- loc_4CCFF4: ; CODE XREF: sub_4CCC80+129j sub eax, ecx sub esi, ecx mov cx, bx shr cx, 5 sub bx, cx cmp eax, 1000000h mov ecx, [esp+4Ch+var_30] mov [ecx], bx jnb short loc_4CD030 mov ecx, [esp+4Ch+arg_8] cmp ecx, [esp+4Ch+var_3C] jz loc_4CD6E2 movzx ebx, byte ptr [ecx] shl esi, 8 shl eax, 8 or esi, ebx add ecx, 1 mov [esp+4Ch+arg_8], ecx loc_4CD030: ; CODE XREF: sub_4CCC80+38Ej movzx ebx, word ptr [edi+edx*2+180h] movzx ebp, bx mov ecx, eax shr ecx, 0Bh imul ecx, ebp cmp esi, ecx jnb short loc_4CD096 mov eax, ecx mov ecx, 800h sub ecx, ebp sar ecx, 5 add ecx, ebx mov [edi+edx*2+180h], cx mov ecx, [esp+4Ch+var_28] mov ebp, [esp+4Ch+var_1C] mov [esp+4Ch+var_18], ecx mov ecx, [esp+4Ch+var_24] mov [esp+4Ch+var_28], ecx mov ecx, [esp+4Ch+var_38] mov [esp+4Ch+var_24], ecx xor ecx, ecx cmp edx, 7 setl cl sub ecx, 1 and ecx, 3 mov [esp+4Ch+var_34], ecx lea ecx, [edi+664h] jmp loc_4CD30B ; --------------------------------------------------------------------------- loc_4CD096: ; CODE XREF: sub_4CCC80+3C5j sub eax, ecx sub esi, ecx mov cx, bx shr cx, 5 sub bx, cx cmp eax, 1000000h mov [edi+edx*2+180h], bx jnb short loc_4CD0D3 mov ecx, [esp+4Ch+arg_8] cmp ecx, [esp+4Ch+var_3C] jz loc_4CD6E2 movzx ebx, byte ptr [ecx] shl esi, 8 shl eax, 8 or esi, ebx add ecx, 1 mov [esp+4Ch+arg_8], ecx loc_4CD0D3: ; CODE XREF: sub_4CCC80+431j movzx ebx, word ptr [edi+edx*2+198h] movzx ebp, bx mov ecx, eax shr ecx, 0Bh imul ecx, ebp cmp esi, ecx mov [esp+4Ch+arg_0], ebx jnb loc_4CD1D3 mov ebx, 800h sub ebx, ebp mov ebp, [esp+4Ch+var_1C] sar ebx, 5 add ebx, [esp+4Ch+arg_0] mov eax, ecx mov [edi+edx*2+198h], bx lea ebx, [edx+0Fh] shl ebx, 4 add ebx, ebp cmp ecx, 1000000h lea ebx, [edi+ebx*2] mov [esp+4Ch+var_30], ebx jnb short loc_4CD147 mov ebx, [esp+4Ch+arg_8] cmp ebx, [esp+4Ch+var_3C] jz loc_4CD6E2 shl ecx, 8 mov eax, ecx movzx ecx, byte ptr [ebx] shl esi, 8 or esi, ecx add ebx, 1 mov [esp+4Ch+arg_8], ebx loc_4CD147: ; CODE XREF: sub_4CCC80+4A3j mov ecx, [esp+4Ch+var_30] movzx ecx, word ptr [ecx] mov [esp+4Ch+arg_0], ecx movzx ebx, cx mov ecx, eax shr ecx, 0Bh imul ecx, ebx cmp esi, ecx jnb short loc_4CD1B5 mov edi, [esp+4Ch+var_30] mov eax, ecx mov ecx, 800h sub ecx, ebx sar ecx, 5 add ecx, [esp+4Ch+arg_0] mov [edi], cx mov edi, [esp+4Ch+var_2C] test edi, edi jz loc_4CD6E2 xor ecx, ecx cmp edx, 7 mov edx, [esp+4Ch+arg_10] setnl cl lea ecx, [ecx+ecx+9] mov [esp+4Ch+var_34], ecx mov ecx, edi sub ecx, [esp+4Ch+var_38] add edi, 1 mov cl, [ecx+edx] mov [edi+edx-1], cl mov byte ptr [esp+4Ch+arg_0], cl mov [esp+4Ch+var_2C], edi jmp loc_4CCFA5 ; --------------------------------------------------------------------------- loc_4CD1B5: ; CODE XREF: sub_4CCC80+4DFj sub eax, ecx sub esi, ecx mov ecx, [esp+4Ch+arg_0] mov bx, cx shr bx, 5 sub cx, bx mov ebx, [esp+4Ch+var_30] mov [ebx], cx jmp loc_4CD2F0 ; --------------------------------------------------------------------------- loc_4CD1D3: ; CODE XREF: sub_4CCC80+46Cj sub eax, ecx sub esi, ecx mov cx, bx shr cx, 5 sub bx, cx cmp eax, 1000000h mov [edi+edx*2+198h], bx jnb short loc_4CD210 mov ecx, [esp+4Ch+arg_8] cmp ecx, [esp+4Ch+var_3C] jz loc_4CD6E2 movzx ebx, byte ptr [ecx] shl esi, 8 shl eax, 8 or esi, ebx add ecx, 1 mov [esp+4Ch+arg_8], ecx loc_4CD210: ; CODE XREF: sub_4CCC80+56Ej movzx ebx, word ptr [edi+edx*2+1B0h] movzx ebp, bx mov ecx, eax shr ecx, 0Bh imul ecx, ebp cmp esi, ecx jnb short loc_4CD246 mov eax, ecx mov ecx, 800h sub ecx, ebp sar ecx, 5 add ecx, ebx mov [edi+edx*2+1B0h], cx mov ecx, [esp+4Ch+var_24] jmp loc_4CD2E0 ; --------------------------------------------------------------------------- loc_4CD246: ; CODE XREF: sub_4CCC80+5A5j sub eax, ecx sub esi, ecx mov cx, bx shr cx, 5 sub bx, cx cmp eax, 1000000h mov [edi+edx*2+1B0h], bx jnb short loc_4CD283 mov ecx, [esp+4Ch+arg_8] cmp ecx, [esp+4Ch+var_3C] jz loc_4CD6E2 movzx ebx, byte ptr [ecx] shl esi, 8 shl eax, 8 or esi, ebx add ecx, 1 mov [esp+4Ch+arg_8], ecx loc_4CD283: ; CODE XREF: sub_4CCC80+5E1j movzx ebx, word ptr [edi+edx*2+1C8h] movzx ebp, bx mov ecx, eax shr ecx, 0Bh imul ecx, ebp cmp esi, ecx jnb short loc_4CD2B6 mov eax, ecx mov ecx, 800h sub ecx, ebp sar ecx, 5 add ecx, ebx mov [edi+edx*2+1C8h], cx mov ecx, [esp+4Ch+var_28] jmp short loc_4CD2D8 ; --------------------------------------------------------------------------- loc_4CD2B6: ; CODE XREF: sub_4CCC80+618j sub eax, ecx sub esi, ecx mov cx, bx shr cx, 5 sub bx, cx mov ecx, [esp+4Ch+var_18] mov [edi+edx*2+1C8h], bx mov ebx, [esp+4Ch+var_28] mov [esp+4Ch+var_18], ebx loc_4CD2D8: ; CODE XREF: sub_4CCC80+634j mov ebx, [esp+4Ch+var_24] mov [esp+4Ch+var_28], ebx loc_4CD2E0: ; CODE XREF: sub_4CCC80+5C1j mov ebx, [esp+4Ch+var_38] mov ebp, [esp+4Ch+var_1C] mov [esp+4Ch+var_24], ebx mov [esp+4Ch+var_38], ecx loc_4CD2F0: ; CODE XREF: sub_4CCC80+54Ej xor ecx, ecx cmp edx, 7 setnl cl sub ecx, 1 and ecx, 0FFFFFFFDh add ecx, 0Bh mov [esp+4Ch+var_34], ecx lea ecx, [edi+0A68h] loc_4CD30B: ; CODE XREF: sub_4CCC80+411j cmp eax, 1000000h jnb short loc_4CD332 mov edx, [esp+4Ch+arg_8] cmp edx, [esp+4Ch+var_3C] jz loc_4CD6E2 movzx edi, byte ptr [edx] shl esi, 8 shl eax, 8 or esi, edi add edx, 1 mov [esp+4Ch+arg_8], edx loc_4CD332: ; CODE XREF: sub_4CCC80+690j movzx edi, word ptr [ecx] movzx ebx, di mov edx, eax shr edx, 0Bh imul edx, ebx cmp esi, edx jnb short loc_4CD36E mov eax, edx mov edx, 800h sub edx, ebx sar edx, 5 add edx, edi mov [ecx], dx shl ebp, 4 lea ecx, [ecx+ebp+4] mov [esp+4Ch+var_1C], 0 mov edx, 3 jmp loc_4CD409 ; --------------------------------------------------------------------------- loc_4CD36E: ; CODE XREF: sub_4CCC80+6C2j sub eax, edx sub esi, edx mov dx, di shr dx, 5 sub di, dx cmp eax, 1000000h mov [ecx], di jnb short loc_4CD3A6 mov edx, [esp+4Ch+arg_8] cmp edx, [esp+4Ch+var_3C] jz loc_4CD6E2 movzx edi, byte ptr [edx] shl esi, 8 shl eax, 8 or esi, edi add edx, 1 mov [esp+4Ch+arg_8], edx loc_4CD3A6: ; CODE XREF: sub_4CCC80+704j movzx edx, word ptr [ecx+2] movzx ebx, dx mov edi, eax shr edi, 0Bh imul edi, ebx cmp esi, edi jnb short loc_4CD3E4 mov eax, edi mov edi, 800h sub edi, ebx sar edi, 5 add edi, edx shl ebp, 4 mov [ecx+2], di lea ecx, [ecx+ebp+104h] mov [esp+4Ch+var_1C], 8 mov edx, 3 jmp short loc_4CD409 ; --------------------------------------------------------------------------- loc_4CD3E4: ; CODE XREF: sub_4CCC80+737j sub eax, edi sub esi, edi mov di, dx shr di, 5 sub dx, di mov [ecx+2], dx add ecx, 204h mov [esp+4Ch+var_1C], 10h mov edx, 8 loc_4CD409: ; CODE XREF: sub_4CCC80+6E9j ; sub_4CCC80+762j mov [esp+4Ch+arg_0], edx mov [esp+4Ch+var_10], edx mov ebx, 1 jmp short loc_4CD420 ; --------------------------------------------------------------------------- align 10h loc_4CD420: ; CODE XREF: sub_4CCC80+796j ; sub_4CCC80+819j cmp eax, 1000000h mov edx, [esp+4Ch+arg_8] lea edi, [ebx+ebx] mov [esp+4Ch+var_30], edi jnb short loc_4CD44E cmp edx, [esp+4Ch+var_3C] jz loc_4CD6E2 movzx ebp, byte ptr [edx] shl esi, 8 shl eax, 8 or esi, ebp add edx, 1 mov [esp+4Ch+arg_8], edx loc_4CD44E: ; CODE XREF: sub_4CCC80+7B0j movzx edi, word ptr [edi+ecx] movzx ebp, di mov edx, eax shr edx, 0Bh imul edx, ebp cmp esi, edx jnb short loc_4CD47B mov eax, edx mov edx, 800h sub edx, ebp sar edx, 5 add edx, edi mov edi, [esp+4Ch+var_30] mov [edi+ecx], dx add ebx, ebx jmp short loc_4CD494 ; --------------------------------------------------------------------------- loc_4CD47B: ; CODE XREF: sub_4CCC80+7DFj mov ebx, [esp+4Ch+var_30] sub eax, edx sub esi, edx mov dx, di shr dx, 5 sub di, dx mov [ebx+ecx], di add ebx, 1 loc_4CD494: ; CODE XREF: sub_4CCC80+7F9j sub [esp+4Ch+var_10], 1 jnz short loc_4CD420 mov ecx, [esp+4Ch+arg_0] mov edx, 1 shl edx, cl mov ecx, [esp+4Ch+var_1C] sub ecx, edx add ebx, ecx cmp [esp+4Ch+var_34], 4 mov [esp+4Ch+var_4], ebx jge loc_4CD69D add [esp+4Ch+var_34], 7 cmp ebx, 4 jl short loc_4CD4CC mov ebx, 3 loc_4CD4CC: ; CODE XREF: sub_4CCC80+845j mov ecx, [esp+4Ch+var_20] shl ebx, 7 lea ecx, [ebx+ecx+360h] mov [esp+4Ch+var_30], ecx mov [esp+4Ch+arg_0], 6 mov edi, 1 jmp short loc_4CD4F0 ; --------------------------------------------------------------------------- align 10h loc_4CD4F0: ; CODE XREF: sub_4CCC80+86Bj ; sub_4CCC80+8E3j cmp eax, 1000000h mov edx, [esp+4Ch+arg_8] lea ebx, [edi+edi] jnb short loc_4CD51A cmp edx, [esp+4Ch+var_3C] jz loc_4CD6E2 movzx ebp, byte ptr [edx] shl esi, 8 shl eax, 8 or esi, ebp add edx, 1 mov [esp+4Ch+arg_8], edx loc_4CD51A: ; CODE XREF: sub_4CCC80+87Cj movzx edx, word ptr [ebx+ecx] movzx ebp, dx mov ecx, eax shr ecx, 0Bh imul ecx, ebp cmp esi, ecx jnb short loc_4CD545 mov eax, ecx mov ecx, 800h sub ecx, ebp sar ecx, 5 add ecx, edx mov [esp+4Ch+var_10], ecx mov edx, ecx add edi, edi jmp short loc_4CD556 ; --------------------------------------------------------------------------- loc_4CD545: ; CODE XREF: sub_4CCC80+8ABj sub eax, ecx sub esi, ecx mov cx, dx shr cx, 5 sub dx, cx lea edi, [ebx+1] loc_4CD556: ; CODE XREF: sub_4CCC80+8C3j sub [esp+4Ch+arg_0], 1 mov ecx, [esp+4Ch+var_30] mov [ebx+ecx], dx jnz short loc_4CD4F0 sub edi, 40h cmp edi, 4 jl loc_4CD68A mov ebx, 1 mov ecx, edi mov edx, edi sar ecx, 1 and edx, ebx sub ecx, ebx or edx, 2 cmp edi, 0Eh mov [esp+4Ch+var_30], ecx jge short loc_4CD5A1 shl edx, cl mov ecx, [esp+4Ch+var_20] mov [esp+4Ch+var_38], edx sub edx, edi lea ebp, [ecx+edx*2+55Eh] jmp short loc_4CD5F3 ; --------------------------------------------------------------------------- loc_4CD5A1: ; CODE XREF: sub_4CCC80+90Aj mov edi, [esp+4Ch+arg_8] sub ecx, 4 loc_4CD5A8: ; CODE XREF: sub_4CCC80+958j cmp eax, 1000000h jnb short loc_4CD5CA cmp edi, [esp+4Ch+var_3C] jz loc_4CD6EF movzx ebp, byte ptr [edi] shl esi, 8 shl eax, 8 or esi, ebp add edi, ebx mov [esp+4Ch+arg_8], edi loc_4CD5CA: ; CODE XREF: sub_4CCC80+92Dj shr eax, 1 add edx, edx cmp esi, eax jb short loc_4CD5D6 sub esi, eax or edx, ebx loc_4CD5D6: ; CODE XREF: sub_4CCC80+950j sub ecx, ebx jnz short loc_4CD5A8 mov ebp, [esp+4Ch+var_20] add ebp, 644h shl edx, 4 mov [esp+4Ch+var_38], edx mov [esp+4Ch+var_30], 4 loc_4CD5F3: ; CODE XREF: sub_4CCC80+91Fj mov [esp+4Ch+var_1C], ebx mov [esp+4Ch+arg_0], ebx jmp short loc_4CD600 ; --------------------------------------------------------------------------- align 10h loc_4CD600: ; CODE XREF: sub_4CCC80+97Bj ; sub_4CCC80+A02j mov ebx, [esp+4Ch+arg_0] add ebx, ebx cmp eax, 1000000h jnb short loc_4CD62D mov ecx, [esp+4Ch+arg_8] cmp ecx, [esp+4Ch+var_3C] jz loc_4CD6E2 movzx edx, byte ptr [ecx] shl esi, 8 shl eax, 8 or esi, edx add ecx, 1 mov [esp+4Ch+arg_8], ecx loc_4CD62D: ; CODE XREF: sub_4CCC80+98Bj movzx edi, word ptr [ebx+ebp] movzx ecx, di mov edx, eax shr edx, 0Bh imul edx, ecx cmp esi, edx jnb short loc_4CD658 mov eax, edx mov edx, 800h sub edx, ecx sar edx, 5 add edx, edi shl [esp+4Ch+arg_0], 1 mov [ebx+ebp], dx jmp short loc_4CD679 ; --------------------------------------------------------------------------- loc_4CD658: ; CODE XREF: sub_4CCC80+9BEj mov cx, di shr cx, 5 sub di, cx sub eax, edx sub esi, edx mov edx, [esp+4Ch+var_1C] mov [ebx+ebp], di add ebx, 1 or [esp+4Ch+var_38], edx mov [esp+4Ch+arg_0], ebx loc_4CD679: ; CODE XREF: sub_4CCC80+9D6j shl [esp+4Ch+var_1C], 1 sub [esp+4Ch+var_30], 1 jnz loc_4CD600 jmp short loc_4CD68E ; --------------------------------------------------------------------------- loc_4CD68A: ; CODE XREF: sub_4CCC80+8EBj mov [esp+4Ch+var_38], edi loc_4CD68E: ; CODE XREF: sub_4CCC80+A08j add [esp+4Ch+var_38], 1 jz loc_4CCFB3 mov ebx, [esp+4Ch+var_4] loc_4CD69D: ; CODE XREF: sub_4CCC80+837j mov ebp, [esp+4Ch+var_2C] mov ecx, [esp+4Ch+var_38] add ebx, 2 cmp ecx, ebp ja short loc_4CD6E2 mov edi, ebp sub edi, ecx add edi, [esp+4Ch+arg_10] loc_4CD6B4: ; CODE XREF: sub_4CCC80+A60j mov cl, [edi] mov edx, [esp+4Ch+arg_10] sub ebx, 1 mov [edx+ebp], cl add ebp, 1 add edi, 1 test ebx, ebx mov byte ptr [esp+4Ch+arg_0], cl mov [esp+4Ch+var_2C], ebp jz loc_4CCFA5 cmp ebp, [esp+4Ch+arg_14] jnb loc_4CCFB3 jmp short loc_4CD6B4 ; --------------------------------------------------------------------------- loc_4CD6E2: ; CODE XREF: sub_4CCC80+101j ; sub_4CCC80+1C9j ... pop edi pop esi pop ebp mov eax, 1 pop ebx add esp, 3Ch retn ; --------------------------------------------------------------------------- loc_4CD6EF: ; CODE XREF: sub_4CCC80+933j pop edi pop esi pop ebp mov eax, ebx pop ebx add esp, 3Ch retn sub_4CCC80 endp _starcraft_decompress_lzma PROC ;sub_4CD700 var_14 = byte ptr -14h var_10 = dword ptr -10h var_C = dword ptr -0Ch var_4 = dword ptr -4 pbInBuffer = dword ptr 4 cbInBuffer = dword ptr 8 pbOutBuffer = dword ptr 0Ch cbOutBuffer = dword ptr 10h pcbOutBuffer = dword ptr 14h pfnAllocateMemory= dword ptr 18h pfnFreeMemory = dword ptr 1Ch sub esp, 14h push ebx mov ebx, [esp+18h+cbInBuffer] cmp ebx, 0Eh ; LZMA_PROPS_SIZE + 8 jnb short loc_4CD714 xor al, al pop ebx add esp, 14h retn ; --------------------------------------------------------------------------- loc_4CD714: ; CODE XREF: Decompress_lzma_internal+Bj push ebp mov ebp, [esp+1Ch+pcbOutBuffer] push edi mov edi, [esp+20h+pbInBuffer] mov dword ptr [ebp+0], 0 cmp byte ptr [edi], 0 jnz short loc_4CD741 push 5 lea eax, [edi+1] push eax lea ecx, [esp+28h+var_10] push ecx call LzmaProps_Decode add esp, 0Ch test eax, eax jz short loc_4CD74A loc_4CD741: ; CODE XREF: Decompress_lzma_internal+28j pop edi pop ebp xor al, al pop ebx add esp, 14h retn ; --------------------------------------------------------------------------- loc_4CD74A: ; CODE XREF: Decompress_lzma_internal+3Fj mov edx, [esp+20h+var_10] mov eax, [esp+20h+var_C] lea ecx, [eax+edx] mov edx, 300h shl edx, cl push esi lea eax, [edx+edx+0E6Ch] push eax call [esp+28h+pfnAllocateMemory] mov esi, eax add esp, 4 test esi, esi mov [esp+24h+var_4], esi jz short loc_4CD7AA mov edx, [esp+24h+cbOutBuffer] mov eax, [esp+24h+pbOutBuffer] lea ecx, [esp+24h+cbInBuffer] push ecx ; cbInBuffer push edx ; cbOutBuffer push eax ; pbOutBuffer lea ecx, [esp+30h+var_14] push ecx ; &var_14 add ebx, 0FFFFFFF2h push ebx ; cbInBuffer - LZMA86_HEADER_SIZE add edi, 0Eh lea edx, [esp+38h+var_10] push edi ; pbInBuffer + LZMA86_HEADER_SIZE push edx ; dest call sub_4CCC80 push esi mov edi, eax call [esp+44h+pfnFreeMemory] add esp, 20h test edi, edi jz short loc_4CD7B4 loc_4CD7AA: ; CODE XREF: Decompress_lzma_internal+74j pop esi pop edi pop ebp xor al, al pop ebx add esp, 14h retn ; --------------------------------------------------------------------------- loc_4CD7B4: ; CODE XREF: Decompress_lzma_internal+A8j mov eax, [esp+24h+cbInBuffer] pop esi pop edi mov [ebp+0], eax pop ebp mov al, 1 pop ebx add esp, 14h retn _starcraft_decompress_lzma ENDP ; =============== S U B R O U T I N E ======================================= sub_4CD7D0 proc near ; CODE XREF: sub_4CDC00+74p arg_0 = dword ptr 4 push esi mov esi, [esp+4+arg_0] or esi, 8 xor eax, eax cmp esi, 1 jz short loc_4CD806 push edi loc_4CD7E0: ; CODE XREF: sub_4CD7D0+33j mov edx, esi shr esi, 1 mov edi, [ecx+esi*4] and edx, 1 sub edi, edx neg edx xor edi, edx shr edi, 2 and edi, 1FFh add eax, dword_550998[edi*4] cmp esi, 1 jnz short loc_4CD7E0 pop edi loc_4CD806: ; CODE XREF: sub_4CD7D0+Dj pop esi retn 4 sub_4CD7D0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CD810 proc near ; CODE XREF: CEncoder_FillAlignPrices+17p var_4 = dword ptr -4 arg_0 = dword ptr 4 push ecx push ebx push ebp push esi xor eax, eax push edi mov edi, [esp+14h+arg_0] mov [esp+14h+var_4], ecx lea esi, [eax+1] lea ebx, [eax+4] loc_4CD825: ; CODE XREF: sub_4CD810+42j mov ecx, [esp+14h+var_4] mov ecx, [ecx+esi*4] mov edx, edi and edx, 1 sub ecx, edx mov ebp, edx neg ebp xor ecx, ebp shr ecx, 2 and ecx, 1FFh add eax, dword_550998[ecx*4] add esi, esi shr edi, 1 or esi, edx sub ebx, 1 jnz short loc_4CD825 pop edi pop esi pop ebp pop ebx pop ecx retn 4 sub_4CD810 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CD860 proc near ; CODE XREF: CEncoder_FillDistancesPrices+6Bp arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch push edi mov edi, [esp+4+arg_4] xor eax, eax test edi, edi lea edx, [eax+1] jz short loc_4CD8A7 push ebx push ebp push esi mov esi, [esp+10h+arg_8] loc_4CD875: ; CODE XREF: sub_4CD860+42j mov ebx, [esp+10h+arg_0] mov ebx, [ebx+edx*4] mov ecx, esi and ecx, 1 sub ebx, ecx mov ebp, ecx neg ebp xor ebx, ebp shr ebx, 2 and ebx, 1FFh add eax, dword_550998[ebx*4] add edx, edx shr esi, 1 or edx, ecx sub edi, 1 jnz short loc_4CD875 pop esi pop ebp pop ebx loc_4CD8A7: ; CODE XREF: sub_4CD860+Cj pop edi retn sub_4CD860 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CD8B0 proc near ; CODE XREF: CEncoder_CodeOneBlock+7B8p mov eax, [ecx+24h] mov edx, [ecx+1Ch] push ebx push esi mov esi, [ecx+30h] xor ebx, ebx push edi mov edi, [ecx+34h] sub esi, eax sbb edi, ebx add esi, edx adc edi, ebx cmp eax, edx jbe short loc_4CD8D4 mov eax, [ecx+28h] add esi, eax adc edi, ebx loc_4CD8D4: ; CODE XREF: sub_4CD8B0+1Bj mov eax, [ecx] xor edx, edx add eax, esi adc edx, edi pop edi add eax, 4 pop esi adc edx, ebx pop ebx retn sub_4CD8B0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CD8F0 proc near ; CODE XREF: sub_4CD940+21p ; .text:loc_4CF730j ... mov eax, dword_553598 test eax, eax push esi mov esi, ecx push edi mov edi, [esi] jnz short loc_4CD92A push 0Ch ; Size call _operator_new ; operator new(uint) add esp, 4 test eax, eax jz short loc_4CD923 mov dword ptr [eax], 0 mov dword ptr [eax+4], 0 mov dword ptr [eax+8], 0 jmp short loc_4CD925 ; --------------------------------------------------------------------------- loc_4CD923: ; CODE XREF: sub_4CD8F0+1Bj xor eax, eax loc_4CD925: ; CODE XREF: sub_4CD8F0+31j mov dword_553598, eax loc_4CD92A: ; CODE XREF: sub_4CD8F0+Dj mov eax, [eax+4] test eax, eax jz short loc_4CD937 push edi call eax add esp, 4 loc_4CD937: ; CODE XREF: sub_4CD8F0+3Fj pop edi mov dword ptr [esi], 0 pop esi retn sub_4CD8F0 endp ; =============== S U B R O U T I N E ======================================= sub_4CD940 proc near ; CODE XREF: sub_4D0270+74p arg_0 = dword ptr 4 arg_4 = dword ptr 8 push ebx mov ebx, [esp+4+arg_4] push esi mov esi, ecx cmp dword ptr [esi], 0 push edi mov edi, [esp+0Ch+arg_0] jz short loc_4CD95F mov eax, [esi+8] add eax, [esi+4] lea ecx, [edi+ebx] cmp ecx, eax jz short loc_4CD981 loc_4CD95F: ; CODE XREF: sub_4CD940+10j mov ecx, esi call sub_4CD8F0 lea ecx, [edi+ebx] mov edx, 1 shl edx, cl imul edx, 0C00h push edx call sub_4CB8A0 add esp, 4 mov [esi], eax loc_4CD981: ; CODE XREF: sub_4CD940+1Dj mov ecx, edi mov eax, 1 shl eax, cl mov [esi+8], edi pop edi mov [esi+4], ebx sub eax, 1 mov [esi+0Ch], eax xor eax, eax cmp [esi], eax pop esi setnz al pop ebx retn 8 sub_4CD940 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CD9B0 proc near ; CODE XREF: CEncoder_GetOptimum+436p ; CEncoder_GetOptimum+AE1p arg_0 = dword ptr 4 arg_4 = byte ptr 8 arg_8 = dword ptr 0Ch mov edx, [esp+arg_0] test edx, edx push esi jnz short loc_4CD9F2 movzx eax, [esp+4+arg_4] mov edx, eax shl edx, 4 add edx, [esp+4+arg_8] mov esi, 800h sub esi, [ecx+edx*4+284B0h] mov ecx, [ecx+eax*4+28420h] shr esi, 2 mov eax, dword_550998[esi*4] shr ecx, 2 add eax, dword_550998[ecx*4] pop esi retn 0Ch ; --------------------------------------------------------------------------- loc_4CD9F2: ; CODE XREF: sub_4CD9B0+7j movzx esi, [esp+4+arg_4] mov eax, 800h sub eax, [ecx+esi*4+28420h] shr eax, 2 cmp edx, 1 mov eax, dword_550998[eax*4] jnz short loc_4CDA27 mov ecx, [ecx+esi*4+28450h] shr ecx, 2 add eax, dword_550998[ecx*4] pop esi retn 0Ch ; --------------------------------------------------------------------------- loc_4CDA27: ; CODE XREF: sub_4CD9B0+60j push edi add edx, 0FFFFFFFEh mov edi, 800h sub edi, [ecx+esi*4+28450h] mov ecx, [ecx+esi*4+28480h] sub ecx, edx neg edx xor ecx, edx shr edi, 2 mov edx, dword_550998[edi*4] shr ecx, 2 and ecx, 1FFh add edx, dword_550998[ecx*4] pop edi add eax, edx pop esi retn 0Ch sub_4CD9B0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CDA70 proc near ; CODE XREF: CEncoder_CodeReal+10Cp ; CEncoder_CodeReal+134p ... push esi mov esi, [ecx] cmp dword ptr [esi+80h], 0 jz short loc_4CDA8C cmp byte ptr [esi+33B95h], 0 jz short loc_4CDA8C mov byte ptr [esi+33B95h], 0 loc_4CDA8C: ; CODE XREF: sub_4CDA70+Aj ; sub_4CDA70+13j mov eax, [esi+33B8Ch] test eax, eax jz short loc_4CDAA8 mov ecx, [eax] mov edx, [ecx+8] push eax call edx mov dword ptr [esi+33B8Ch], 0 loc_4CDAA8: ; CODE XREF: sub_4CDA70+24j mov ecx, [esi+4] mov edx, [ecx+10h] lea eax, [esi+4] push eax call edx pop esi retn sub_4CDA70 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CDAC0 proc near ; CODE XREF: CEncoder_GetOptimum+2C4p ; CEncoder_GetOptimum+7ACp ... var_4 = dword ptr -4 arg_0 = dword ptr 4 arg_4 = byte ptr 8 arg_8 = byte ptr 0Ch push ecx push ebx push ebp xor ebp, ebp cmp byte ptr [esp+0Ch+arg_0], 0 push esi mov eax, ecx push edi mov [esp+14h+var_4], eax lea edi, [ebp+1] lea ebx, [ebp+8] jz short loc_4CDB3B movzx ecx, [esp+14h+arg_8] mov [esp+14h+arg_0], ecx loc_4CDAE3: ; CODE XREF: sub_4CDAC0+71j movzx esi, [esp+14h+arg_4] mov edx, [esp+14h+arg_0] sub ebx, 1 movzx ecx, bl shr esi, cl shr edx, cl and esi, 1 mov ecx, esi shl ecx, 8 add ecx, edi mov eax, [eax+ecx*4+400h] and edx, 1 sub eax, edx mov ecx, edx neg ecx xor eax, ecx shr eax, 2 and eax, 1FFh add ebp, dword_550998[eax*4] add edi, edi or edi, edx cmp esi, edx jnz short loc_4CDB33 test ebx, ebx jz short loc_4CDB75 mov eax, [esp+14h+var_4] jmp short loc_4CDAE3 ; --------------------------------------------------------------------------- loc_4CDB33: ; CODE XREF: sub_4CDAC0+67j test ebx, ebx jz short loc_4CDB75 mov eax, [esp+14h+var_4] loc_4CDB3B: ; CODE XREF: sub_4CDAC0+18j movzx edx, [esp+14h+arg_8] mov [esp+14h+arg_0], edx loc_4CDB44: ; CODE XREF: sub_4CDAC0+B3j mov edx, [esp+14h+arg_0] sub ebx, 1 mov cl, bl shr edx, cl mov ecx, [eax+edi*4] add edi, edi and edx, 1 sub ecx, edx mov esi, edx neg esi xor ecx, esi shr ecx, 2 and ecx, 1FFh add ebp, dword_550998[ecx*4] or edi, edx test ebx, ebx jnz short loc_4CDB44 loc_4CDB75: ; CODE XREF: sub_4CDAC0+6Bj ; sub_4CDAC0+75j pop edi pop esi mov eax, ebp pop ebp pop ebx pop ecx retn 0Ch sub_4CDAC0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CDB80 proc near ; CODE XREF: sub_4CDEA0+11Ep ; sub_4CDEA0+137p arg_0 = dword ptr 4 push esi mov esi, [esp+4+arg_0] test esi, esi mov edx, 400h push edi mov [ecx], edx mov [ecx+4], edx jbe short loc_4CDBE6 lea eax, [ecx+20Ch] lea ebx, [ebx+0] loc_4CDBA0: ; CODE XREF: sub_4CDB80+64j mov [eax-200h], edx mov [eax-1FCh], edx mov [eax-1F8h], edx mov [eax-1F4h], edx mov [eax-1F0h], edx mov [eax-1ECh], edx mov [eax-1E8h], edx mov [eax], edx mov [eax+4], edx mov [eax+8], edx mov [eax+0Ch], edx mov [eax+10h], edx mov [eax+14h], edx mov [eax+18h], edx add eax, 20h sub esi, 1 jnz short loc_4CDBA0 loc_4CDBE6: ; CODE XREF: sub_4CDB80+12j lea edi, [ecx+40Ch] mov ecx, 0FFh mov eax, edx rep stosd pop edi pop esi retn 4 sub_4CDB80 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CDC00 proc near ; CODE XREF: sub_4CF740+22p ; sub_4CF780+2Bp var_C = dword ptr -0Ch var_8 = dword ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch sub esp, 0Ch push ebx push ebp push esi push edi mov edi, ecx mov eax, [edi] mov ebx, [esp+1Ch+arg_0] mov ecx, eax shr ecx, 2 mov edx, dword_550998[ecx*4] mov ecx, 800h sub ecx, eax shr ecx, 2 mov eax, dword_550998[ecx*4] mov ecx, [edi+4] mov [esp+1Ch+var_C], edx mov edx, ecx shr edx, 2 mov ebp, dword_550998[edx*4] mov edx, 800h sub edx, ecx shr edx, 2 mov ecx, dword_550998[edx*4] add ebp, eax add ecx, eax mov [esp+1Ch+var_8], ebp mov [esp+1Ch+var_4], ecx xor esi, esi mov edi, edi loc_4CDC60: ; CODE XREF: sub_4CDC00+8Aj cmp esi, [esp+1Ch+arg_4] jnb loc_4CDD62 mov eax, ebx shl eax, 5 push esi lea ecx, [eax+edi+8] call sub_4CD7D0 add eax, [esp+1Ch+var_C] mov ecx, [esp+1Ch+arg_8] mov [ecx+esi*4], eax add esi, 1 cmp esi, 8 jb short loc_4CDC60 cmp esi, 10h jnb short loc_4CDD00 lea ecx, [esi-8] mov [esp+1Ch+arg_0], ecx jmp short loc_4CDCA0 ; --------------------------------------------------------------------------- align 10h loc_4CDCA0: ; CODE XREF: sub_4CDC00+98j ; sub_4CDC00+FEj cmp esi, [esp+1Ch+arg_4] jnb loc_4CDD62 or ecx, 8 xor edx, edx cmp ecx, 1 jz short loc_4CDCE4 loc_4CDCB4: ; CODE XREF: sub_4CDC00+DEj mov eax, ecx shr ecx, 1 and eax, 1 lea ebp, [ecx+ebx*8] mov ebp, [edi+ebp*4+208h] sub ebp, eax neg eax xor ebp, eax shr ebp, 2 and ebp, 1FFh add edx, dword_550998[ebp*4] cmp ecx, 1 jnz short loc_4CDCB4 mov ebp, [esp+1Ch+var_8] loc_4CDCE4: ; CODE XREF: sub_4CDC00+B2j mov eax, [esp+1Ch+arg_8] mov ecx, [esp+1Ch+arg_0] add edx, ebp mov [eax+esi*4], edx add esi, 1 add ecx, 1 cmp esi, 10h mov [esp+1Ch+arg_0], ecx jb short loc_4CDCA0 loc_4CDD00: ; CODE XREF: sub_4CDC00+8Fj cmp esi, [esp+1Ch+arg_4] jnb short loc_4CDD62 lea ebx, [esi-10h] lea esp, [esp+0] loc_4CDD10: ; CODE XREF: sub_4CDC00+160j mov ecx, ebx or ecx, 100h xor edx, edx cmp ecx, 1 jz short loc_4CDD49 nop loc_4CDD20: ; CODE XREF: sub_4CDC00+147j mov eax, ecx shr ecx, 1 mov ebp, [edi+ecx*4+408h] and eax, 1 sub ebp, eax neg eax xor ebp, eax shr ebp, 2 and ebp, 1FFh add edx, dword_550998[ebp*4] cmp ecx, 1 jnz short loc_4CDD20 loc_4CDD49: ; CODE XREF: sub_4CDC00+11Dj mov ecx, [esp+1Ch+var_4] mov eax, [esp+1Ch+arg_8] add edx, ecx mov [eax+esi*4], edx add esi, 1 add ebx, 1 cmp esi, [esp+1Ch+arg_4] jb short loc_4CDD10 loc_4CDD62: ; CODE XREF: sub_4CDC00+64j ; sub_4CDC00+A4j ... pop edi pop esi pop ebp pop ebx add esp, 0Ch retn 0Ch sub_4CDC00 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= ; int __cdecl sub_4CDD70(SIZE_T dwSize) sub_4CDD70 proc near ; DATA XREF: .data:off_546E20o dwSize = dword ptr 4 mov eax, [esp+dwSize] test eax, eax jnz short loc_4CDD79 retn ; --------------------------------------------------------------------------- loc_4CDD79: ; CODE XREF: sub_4CDD70+6j push 4 ; flProtect push 1000h ; flAllocationType push eax ; dwSize push 0 ; lpAddress call ds:VirtualAlloc retn sub_4CDD70 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= ; int __cdecl sub_4CDD90(LPVOID lpAddress) sub_4CDD90 proc near ; CODE XREF: sub_4CF810+53p ; sub_4CF810+73p ; DATA XREF: ... lpAddress = dword ptr 4 mov eax, [esp+lpAddress] test eax, eax jz short locret_4CDDA6 push 8000h ; dwFreeType push 0 ; dwSize push eax ; lpAddress call ds:VirtualFree locret_4CDDA6: ; CODE XREF: sub_4CDD90+6j retn sub_4CDD90 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CDDB0 proc near ; DATA XREF: .rdata:00517AC8o var_10 = dword ptr -10h var_C = byte ptr -0Ch var_B = byte ptr -0Bh var_A = byte ptr -0Ah var_9 = byte ptr -9 var_8 = byte ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 4 arg_4 = dword ptr 8 sub esp, 10h mov eax, dword_544960 xor eax, esp mov [esp+10h+var_4], eax mov ecx, [esp+10h+arg_0] mov al, [ecx+33B50h] mov dl, 5 imul dl add al, [ecx+33B58h] mov dl, 9 imul dl add al, [ecx+33B5Ch] push ebp mov ebp, [esp+14h+arg_4] mov [esp+14h+var_C], al mov eax, [ecx+33B60h] mov ecx, eax mov edx, eax push esi shr ecx, 8 shr edx, 10h mov [esp+18h+var_B], al shr eax, 18h push edi mov [esp+1Ch+var_A], cl mov [esp+1Ch+var_9], dl mov [esp+1Ch+var_8], al mov esi, 5 lea edi, [esp+1Ch+var_C] loc_4CDE13: ; CODE XREF: sub_4CDDB0+85j mov eax, [ebp+0] mov edx, [eax+0Ch] lea ecx, [esp+1Ch+var_10] push ecx push esi push edi push ebp call edx mov ecx, [esp+1Ch+var_10] add edi, ecx sub esi, ecx test eax, eax jnz short loc_4CDE37 test ecx, ecx jz short loc_4CDE4B test esi, esi jnz short loc_4CDE13 loc_4CDE37: ; CODE XREF: sub_4CDDB0+7Dj pop edi pop esi pop ebp mov ecx, [esp+10h+var_4] xor ecx, esp call sub_4A0686 add esp, 10h retn 8 ; --------------------------------------------------------------------------- loc_4CDE4B: ; CODE XREF: sub_4CDDB0+81j mov ecx, [esp+1Ch+var_4] pop edi pop esi pop ebp xor ecx, esp mov eax, 80004005h call sub_4A0686 add esp, 10h retn 8 sub_4CDDB0 endp align 10h ; =============== S U B R O U T I N E ======================================= sub_4CDE70 proc near ; DATA XREF: .rdata:00517AF4o arg_0 = dword ptr 4 push esi mov esi, [esp+4+arg_0] mov eax, [esi+50h] test eax, eax jz short loc_4CDE8B mov ecx, [eax] mov edx, [ecx+8] push eax call edx mov dword ptr [esi+50h], 0 loc_4CDE8B: ; CODE XREF: sub_4CDE70+Aj xor eax, eax pop esi retn 4 sub_4CDE70 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CDEA0 proc near ; CODE XREF: CEncoder_SetStreams+3Cp var_4 = dword ptr -4 push ecx push ebx xor ebx, ebx push ebp push esi mov esi, ecx mov byte ptr [esi+10h], 0 mov byte ptr [esi+11h], 0 mov [esi+14h], ebx mov [esi+18h], ebx mov [esi+1Ch], ebx mov [esi+20h], ebx mov eax, [esi+50h] mov [esi+4Ch], ebx mov [esi+48h], eax mov [esi+44h], ebx mov [esi+58h], ebx mov [esi+5Ch], ebx mov [esi+64h], bl push edi mov [esi+30h], ebx mov [esi+34h], ebx mov dword ptr [esi+38h], 0FFFFFFFFh mov dword ptr [esi+28h], 1 mov [esi+2Ch], bl lea ecx, [esi+28420h] lea edi, [esi+284B0h] mov [esp+14h+var_4], 0Ch mov ebp, 400h loc_4CDF02: ; CODE XREF: sub_4CDEA0+9Cj xor edx, edx mov eax, edi jmp short loc_4CDF10 ; --------------------------------------------------------------------------- align 10h loc_4CDF10: ; CODE XREF: sub_4CDEA0+66j ; sub_4CDEA0+84j mov [eax-3C0h], ebp mov [eax], ebp add edx, 1 add eax, 4 cmp edx, [esi+33B60h] jbe short loc_4CDF10 mov [ecx-30h], ebp mov [ecx], ebp mov [ecx+30h], ebp mov [ecx+60h], ebp add ecx, 4 add edi, 40h sub [esp+14h+var_4], 1 jnz short loc_4CDF02 mov ecx, [esi+32658h] add ecx, [esi+32654h] mov eax, 1 shl eax, cl cmp eax, ebx jbe short loc_4CDF7C xor edx, edx mov ebx, eax lea esp, [esp+0] loc_4CDF60: ; CODE XREF: sub_4CDEA0+DAj mov edi, [esi+32650h] add edi, edx mov ecx, 300h mov eax, ebp add edx, 0C00h sub ebx, 1 rep stosd jnz short loc_4CDF60 loc_4CDF7C: ; CODE XREF: sub_4CDEA0+B3j lea edx, [esi+287B4h] mov ebx, 4 loc_4CDF87: ; CODE XREF: sub_4CDEA0+FBj mov edi, edx mov ecx, 3Fh mov eax, ebp add edx, 100h sub ebx, 1 rep stosd jnz short loc_4CDF87 lea edi, [esi+28BB0h] mov ecx, 72h rep stosd mov ecx, [esi+33B5Ch] mov edx, 1 shl edx, cl lea ecx, [esi+28DB8h] push edx call sub_4CDB80 mov ecx, [esi+33B5Ch] mov eax, 1 shl eax, cl lea ecx, [esi+2DA04h] push eax call sub_4CDB80 mov eax, ebp mov [esi+28D7Ch], eax mov [esi+28D80h], eax mov [esi+28D84h], eax mov [esi+28D88h], eax mov [esi+28D8Ch], eax mov [esi+28D90h], eax mov [esi+28D94h], eax mov [esi+28D98h], eax mov [esi+28D9Ch], eax mov [esi+28DA0h], eax mov [esi+28DA4h], eax mov [esi+28DA8h], eax mov [esi+28DACh], eax mov [esi+28DB0h], eax mov [esi+28DB4h], eax xor eax, eax pop edi mov [esi+32F10h], bl mov [esi+32F08h], eax mov [esi+32F0Ch], eax mov [esi+32F04h], eax pop esi pop ebp pop ebx pop ecx retn sub_4CDEA0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CF450 proc near ; CODE XREF: .text:004CF692p ; CEncoder_Flush+42p var_8 = dword ptr -8 var_4 = dword ptr -4 sub esp, 8 push esi mov esi, ecx mov eax, [esi+0Ch] push edi mov edi, [esi+4] cmp eax, edi jb short loc_4CF464 mov edi, [esi+10h] loc_4CF464: ; CODE XREF: sub_4CF450+Fj push ebp mov ebp, [esi+20h] xor edx, edx sub edi, eax cmp ebp, edx mov [esp+14h+var_4], edx jz short loc_4CF4BA push ebx mov ebx, [esi] add ebx, eax mov eax, dword_553598 cmp eax, edx jnz short loc_4CF4A5 push 0Ch ; Size call _operator_new ; operator new(uint) xor ecx, ecx add esp, 4 cmp eax, ecx jz short loc_4CF49C mov [eax], ecx mov [eax+4], ecx mov [eax+8], ecx jmp short loc_4CF49E ; --------------------------------------------------------------------------- loc_4CF49C: ; CODE XREF: sub_4CF450+40j xor eax, eax loc_4CF49E: ; CODE XREF: sub_4CF450+4Aj mov dword_553598, eax xor edx, edx loc_4CF4A5: ; CODE XREF: sub_4CF450+30j mov eax, [eax+8] cmp eax, edx jz short loc_4CF4B6 push edi push ebx push ebp call eax add esp, 0Ch xor edx, edx loc_4CF4B6: ; CODE XREF: sub_4CF450+5Aj add [esi+20h], edi pop ebx loc_4CF4BA: ; CODE XREF: sub_4CF450+22j mov eax, [esi+14h] cmp eax, edx pop ebp jz short loc_4CF4E4 mov [esp+10h+var_8], edx mov ecx, [eax] lea edx, [esp+10h+var_8] push edx mov edx, [esi] add edx, [esi+0Ch] push edi push edx push eax mov eax, [ecx+0Ch] call eax mov edi, [esp+10h+var_8] mov [esp+10h+var_4], eax xor edx, edx loc_4CF4E4: ; CODE XREF: sub_4CF450+70j add [esi+0Ch], edi mov ecx, [esi+0Ch] mov eax, [esi+10h] cmp ecx, eax jnz short loc_4CF4F4 mov [esi+0Ch], edx loc_4CF4F4: ; CODE XREF: sub_4CF450+9Fj cmp [esi+4], eax jnz short loc_4CF500 mov byte ptr [esi+24h], 1 mov [esi+4], edx loc_4CF500: ; CODE XREF: sub_4CF450+A7j mov ecx, [esi+0Ch] cmp ecx, [esi+4] jbe short loc_4CF50A mov eax, ecx loc_4CF50A: ; CODE XREF: sub_4CF450+B6j add [esi+18h], edi mov [esi+8], eax mov eax, [esp+10h+var_4] adc [esi+1Ch], edx pop edi pop esi add esp, 8 retn sub_4CF450 endp ; --------------------------------------------------------------------------- align 10h ; --------------------------------------------------------------------------- ; int __stdcall Interface1_QueryInterface(int, void *Buf1, int) Interface1_QueryInterface proc near ; DATA XREF: .rdata:off_517A90o ; sub_4CF520 arg_0 = dword ptr 4 Buf1 = dword ptr 8 arg_8 = dword ptr 0Ch mov eax, [esp+Buf1] push offset dword_512730 ; Buf2 push eax ; Buf1 call unknown_libname_324 ; MFC 3.1/4.0/4.2/8.0 32bit add esp, 8 test eax, eax jz short loc_4CF54D mov eax, [esp+arg_0] mov ecx, [esp+arg_8] mov [ecx], eax mov edx, [eax] push eax mov eax, [edx+4] call eax xor eax, eax retn 0Ch loc_4CF54D: ; CODE XREF: Interface1_QueryInterface+14j mov eax, 80004002h retn 0Ch Interface1_QueryInterface endp ; --------------------------------------------------------------------------- ; int __stdcall Interface1_Release(void *pUnknown) Interface1_Release proc near ; DATA XREF: .rdata:00517A98o pUnknown = dword ptr 4 mov ecx, [esp+pUnknown] add dword ptr [ecx+4], 0FFFFFFFFh mov eax, [ecx+4] jnz short locret_4CF585 push ecx ; Memory mov dword ptr [ecx], offset off_517A90 mov dword ptr [ecx+8], 0 call j__free add esp, 4 xor eax, eax locret_4CF585: ; CODE XREF: Interface1_Release+Bj retn 4 Interface1_Release endp ; --------------------------------------------------------------------------- sub_4CF590 proc near ; DATA XREF: .rdata:00517AB4o arg_0 = dword ptr 4 arg_4 = byte ptr 8 arg_8 = dword ptr 0Ch arg_C = dword ptr 10h mov eax, [esp+arg_0] mov edx, [eax+10h] sub edx, [eax+18h] mov ecx, [eax+14h] sbb ecx, [eax+1Ch] push ebx mov ebx, [esp+4+arg_8] push edi mov edi, [esp+8+arg_C] cmp edi, ecx jb short loc_4CF5C2 ja short loc_4CF5B4 cmp ebx, edx jbe short loc_4CF5C2 loc_4CF5B4: ; CODE XREF: sub_4CF590+1Ej pop edi mov byte ptr [eax+20h], 1 mov eax, 80004005h pop ebx retn 10h ; --------------------------------------------------------------------------- loc_4CF5C2: ; CODE XREF: sub_4CF590+1Cj ; sub_4CF590+22j push esi xor esi, esi xor ecx, ecx test edi, edi jb short loc_4CF5FA ja short loc_4CF5D1 test ebx, ebx jbe short loc_4CF5FA loc_4CF5D1: ; CODE XREF: sub_4CF590+3Bj mov dl, [esp+0Ch+arg_4] push ebp loc_4CF5D6: ; CODE XREF: sub_4CF590+5Fj ; sub_4CF590+67j mov ebp, [eax+18h] mov ebx, [eax+8] mov [ebx+ebp], dl add dword ptr [eax+18h], 1 adc dword ptr [eax+1Ch], 0 add esi, 1 adc ecx, 0 cmp ecx, edi jb short loc_4CF5D6 ja short loc_4CF5F9 cmp esi, [esp+10h+arg_8] jb short loc_4CF5D6 loc_4CF5F9: ; CODE XREF: sub_4CF590+61j pop ebp loc_4CF5FA: ; CODE XREF: sub_4CF590+39j ; sub_4CF590+3Fj pop esi pop edi xor eax, eax pop ebx retn 10h sub_4CF590 endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall Interface2_Release(void *pUnknown) Interface2_Release proc near ; DATA XREF: .rdata:00517AACo ; sub_4CF610 pUnknown = dword ptr 4 mov ecx, [esp+pUnknown] add dword ptr [ecx+4], 0FFFFFFFFh mov eax, [ecx+4] jnz short locret_4CF635 push ecx ; Memory mov dword ptr [ecx], offset off_517AA4 mov dword ptr [ecx+8], 0 call j__free add esp, 4 xor eax, eax locret_4CF635: ; CODE XREF: Interface2_Release+Bj retn 4 Interface2_Release endp ; =============== S U B R O U T I N E ======================================= loc_4CF640: ; CODE XREF: sub_4CF6E0+39p ; sub_4CFAC0+57p ... push ecx push ebx push esi push edi mov edi, ecx mov esi, [edi+8] cmp esi, 0FF000000h jb short loc_4CF661 mov edx, [edi+0Ch] mov eax, esi mov cl, 20h call __allshr ; Microsoft VisualC 2-8/net runtime test eax, eax jz short loc_4CF6B6 loc_4CF661: ; CODE XREF: .text:004CF64Fj mov bl, [edi+4] lea esi, [edi+18h] loc_4CF667: ; CODE XREF: .text:004CF6A9j mov eax, [edi+8] mov edx, [edi+0Ch] mov cl, 20h call __allshr ; Microsoft VisualC 2-8/net runtime mov ecx, [esi+4] mov edx, [esi] add al, bl mov [ecx+edx], al add dword ptr [esi+4], 1 mov eax, [esi+4] cmp eax, [esi+8] jnz short loc_4CF6A3 cmp [esi+0Ch], eax jz short loc_4CF6A3 nop loc_4CF690: ; CODE XREF: .text:004CF6A1j mov ecx, esi call sub_4CF450 test eax, eax jnz short loc_4CF6CB mov eax, [esi+0Ch] cmp eax, [esi+4] jnz short loc_4CF690 loc_4CF6A3: ; CODE XREF: .text:004CF688j ; .text:004CF68Dj or bl, 0FFh add dword ptr [edi], 0FFFFFFFFh jnz short loc_4CF667 mov esi, [edi+8] mov edx, esi shr edx, 18h mov [edi+4], dl loc_4CF6B6: ; CODE XREF: .text:004CF65Fj add dword ptr [edi], 1 shl esi, 8 mov [edi+8], esi mov dword ptr [edi+0Ch], 0 pop edi pop esi pop ebx pop ecx retn ; --------------------------------------------------------------------------- loc_4CF6CB: ; CODE XREF: .text:004CF699j push offset dword_526DD0 lea ecx, [esp+10h] push ecx mov [esp+14h], eax int 3 ; call __CxxThrowException@8 ; _CxxThrowException(x,x) ; --------------------------------------------------------------------------- db 2 dup(0CCh) ; =============== S U B R O U T I N E ======================================= sub_4CF6E0 proc near ; CODE XREF: sub_4D0770+FBp ; CEncoder_CodeOneBlock+6C5p arg_0 = dword ptr 4 arg_4 = dword ptr 8 push esi push edi mov edi, [esp+8+arg_4] add edi, 0FFFFFFFFh mov esi, ecx js short loc_4CF724 push ebp mov ebp, [esp+0Ch+arg_0] loc_4CF6F2: ; CODE XREF: sub_4CF6E0+41j shr dword ptr [esi+10h], 1 mov eax, [esi+10h] mov edx, ebp mov ecx, edi shr edx, cl test dl, 1 jz short loc_4CF70A add [esi+8], eax adc dword ptr [esi+0Ch], 0 loc_4CF70A: ; CODE XREF: sub_4CF6E0+21j cmp eax, 1000000h jnb short loc_4CF71E shl eax, 8 mov ecx, esi mov [esi+10h], eax call loc_4CF640 loc_4CF71E: ; CODE XREF: sub_4CF6E0+2Fj sub edi, 1 jns short loc_4CF6F2 pop ebp loc_4CF724: ; CODE XREF: sub_4CF6E0+Bj pop edi pop esi retn 8 sub_4CF6E0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CF740 proc near ; CODE XREF: sub_4D0770+DFp ; CEncoder_CodeOneBlock+58Ap ... arg_0 = dword ptr 4 push esi push edi mov edi, [esp+8+arg_0] mov eax, edi imul eax, 440h mov esi, ecx mov edx, [esi+4C08h] lea ecx, [eax+esi+808h] push ecx push edx push edi mov ecx, esi call sub_4CDC00 mov eax, [esi+4C08h] mov [esi+edi*4+4C0Ch], eax pop edi pop esi retn 4 sub_4CF740 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CF780 proc near ; CODE XREF: CEncoder_SetStreams+7Ep ; CEncoder_SetStreams+A6p arg_0 = dword ptr 4 push esi push edi xor edi, edi cmp [esp+8+arg_0], edi mov esi, ecx jbe short loc_4CF7CC push ebx push ebp lea ebx, [esi+4C0Ch] lea ebp, [esi+808h] lea ebx, [ebx+0] loc_4CF7A0: ; CODE XREF: sub_4CF780+48j mov eax, [esi+4C08h] push ebp push eax push edi mov ecx, esi call sub_4CDC00 mov ecx, [esi+4C08h] mov [ebx], ecx add edi, 1 add ebx, 4 add ebp, 440h cmp edi, [esp+10h+arg_0] jb short loc_4CF7A0 pop ebp pop ebx loc_4CF7CC: ; CODE XREF: sub_4CF780+Aj pop edi pop esi retn 4 sub_4CF780 endp ; --------------------------------------------------------------------------- align 10h CEncoder_GetOptimum proc near ; CODE XREF: CEncoder_CodeOneBlock+201p var_7D = byte ptr -7Dh var_7C = dword ptr -7Ch var_78 = dword ptr -78h var_74 = dword ptr -74h var_70 = dword ptr -70h var_6C = dword ptr -6Ch var_68 = dword ptr -68h var_64 = dword ptr -64h var_60 = dword ptr -60h var_5C = dword ptr -5Ch var_58 = dword ptr -58h var_54 = dword ptr -54h var_50 = dword ptr -50h var_4C = dword ptr -4Ch var_48 = dword ptr -48h var_44 = dword ptr -44h var_40 = dword ptr -40h var_3C = dword ptr -3Ch var_38 = dword ptr -38h var_34 = dword ptr -34h var_30 = dword ptr -30h var_2C = dword ptr -2Ch var_28 = dword ptr -28h var_24 = dword ptr -24h var_20 = dword ptr -20h var_1C = dword ptr -1Ch var_18 = dword ptr -18h var_14 = dword ptr -14h var_10 = dword ptr -10h arg_0 = dword ptr 4 arg_4 = dword ptr 8 sub esp, 80h push ebp mov ebp, ecx mov edx, [ebp+32F0Ch] cmp [ebp+32F08h], edx push esi jz short loc_4CE0A5 mov esi, [esp+88h+arg_4] lea eax, [edx+edx*4+1Eh] lea ecx, [ebp+eax*8+0] mov eax, [ecx+10h] sub eax, edx mov edx, [ecx+14h] mov [esi], edx mov ecx, [ecx+10h] pop esi mov [ebp+32F0Ch], ecx pop ebp add esp, 80h retn 8 ; --------------------------------------------------------------------------- loc_4CE0A5: ; CODE XREF: CEncoder_GetOptimum+16j mov edx, [ebp+80h] mov eax, [ebp+70h] push ebx xor esi, esi push edx mov [ebp+32F08h], esi mov [ebp+32F0Ch], esi call eax add esp, 4 cmp byte ptr [ebp+32F10h], 0 mov ebx, eax mov [esp+8Ch+var_60], eax jnz short loc_4CE0E4 lea ecx, [esp+8Ch+var_70] push ecx mov ecx, ebp call sub_4CB3B0 mov [esp+8Ch+var_68], eax jmp short loc_4CE0FF ; --------------------------------------------------------------------------- loc_4CE0E4: ; CODE XREF: CEncoder_GetOptimum+70j mov edx, [ebp+32EFCh] mov eax, [ebp+32F00h] mov [esp+8Ch+var_68], edx mov [esp+8Ch+var_70], eax mov byte ptr [ebp+32F10h], 0 loc_4CE0FF: ; CODE XREF: CEncoder_GetOptimum+82j mov ecx, [ebp+80h] mov edx, [ebp+74h] push edi push ecx call edx mov edi, eax add esp, 4 sub edi, 1 cmp ebx, 2 jnb short loc_4CE138 mov eax, [esp+90h+arg_4] pop edi pop ebx pop esi mov dword ptr [eax], 0FFFFFFFFh mov eax, 1 pop ebp add esp, 80h retn 8 ; --------------------------------------------------------------------------- loc_4CE138: ; CODE XREF: CEncoder_GetOptimum+B7j cmp ebx, 111h jbe short loc_4CE149 mov ebx, 111h mov [esp+90h+var_60], ebx loc_4CE149: ; CODE XREF: CEncoder_GetOptimum+DEj lea ecx, [ebp+14h] mov [esp+90h+var_50], esi mov [esp+90h+var_64], esi xor edx, edx mov [esp+90h+var_4C], esi mov [esp+90h+var_6C], ecx mov edi, edi loc_4CE160: ; CODE XREF: CEncoder_GetOptimum+180j mov eax, [esp+90h+var_6C] mov eax, [eax] mov ecx, edi sub ecx, eax mov [esp+edx+90h+var_20], eax mov al, [edi] sub ecx, 1 cmp al, [ecx] jnz short loc_4CE1C9 mov al, [edi+1] cmp al, [ecx+1] jnz short loc_4CE1C9 mov eax, 2 cmp ebx, eax jbe short loc_4CE1A7 lea esi, [edi+2] sub ecx, edi lea ecx, [ecx+0] loc_4CE190: ; CODE XREF: CEncoder_GetOptimum+143j mov bl, [esi] cmp bl, [ecx+esi] mov ebx, [esp+90h+var_60] jnz short loc_4CE1A5 add eax, 1 add esi, 1 cmp eax, ebx jb short loc_4CE190 loc_4CE1A5: ; CODE XREF: CEncoder_GetOptimum+139j xor esi, esi loc_4CE1A7: ; CODE XREF: CEncoder_GetOptimum+126j mov ecx, [esp+90h+var_4C] mov [esp+edx+90h+var_10], eax cmp eax, [esp+ecx+90h+var_10] jbe short loc_4CE1D0 mov eax, [esp+90h+var_64] mov [esp+90h+var_50], eax mov [esp+90h+var_4C], edx jmp short loc_4CE1D0 ; --------------------------------------------------------------------------- loc_4CE1C9: ; CODE XREF: CEncoder_GetOptimum+115j ; CEncoder_GetOptimum+11Dj mov [esp+edx+90h+var_10], esi loc_4CE1D0: ; CODE XREF: CEncoder_GetOptimum+159j ; CEncoder_GetOptimum+167j add [esp+90h+var_64], 1 add [esp+90h+var_6C], 4 add edx, 4 cmp edx, 10h jb loc_4CE160 mov ecx, [esp+90h+var_50] mov ebx, [esp+ecx*4+90h+var_10] mov eax, [ebp+32EF8h] cmp ebx, eax mov [esp+90h+var_40], ebx jb short loc_4CE234 mov edx, [esp+90h+arg_4] lea eax, [ebx-1] cmp eax, esi mov [edx], ecx jz short loc_4CE225 add [ebp+32F04h], eax mov ecx, [ebp+7Ch] push eax mov eax, [ebp+80h] push eax call ecx add esp, 8 loc_4CE225: ; CODE XREF: CEncoder_GetOptimum+1ADj pop edi mov eax, ebx pop ebx pop esi pop ebp add esp, 80h retn 8 ; --------------------------------------------------------------------------- loc_4CE234: ; CODE XREF: CEncoder_GetOptimum+19Dj mov esi, [esp+90h+var_68] cmp esi, eax jb short loc_4CE27F mov edx, [esp+90h+var_70] mov eax, [ebp+edx*4+3265Ch] mov ecx, [esp+90h+arg_4] add eax, 4 mov [ecx], eax lea eax, [esi-1] test eax, eax jz short loc_4CE270 mov edx, [ebp+80h] add [ebp+32F04h], eax push eax mov eax, [ebp+7Ch] push edx call eax add esp, 8 loc_4CE270: ; CODE XREF: CEncoder_GetOptimum+1F8j pop edi pop ebx mov eax, esi pop esi pop ebp add esp, 80h retn 8 ; --------------------------------------------------------------------------- loc_4CE27F: ; CODE XREF: CEncoder_GetOptimum+1DAj mov al, [edi] mov esi, [esp+90h+var_20] sub edi, esi cmp [esp+90h+var_68], 2 mov cl, [edi-1] mov byte ptr [esp+90h+var_4C], al mov byte ptr [esp+90h+var_50], cl jnb short loc_4CE2C1 cmp al, cl jz short loc_4CE2C1 cmp ebx, 2 jnb short loc_4CE2C1 mov ecx, [esp+90h+arg_4] pop edi pop ebx pop esi mov dword ptr [ecx], 0FFFFFFFFh mov eax, 1 pop ebp add esp, 80h retn 8 ; --------------------------------------------------------------------------- loc_4CE2C1: ; CODE XREF: CEncoder_GetOptimum+237j ; CEncoder_GetOptimum+23Bj ... mov edx, [esp+90h+var_4C] mov bl, [ebp+10h] mov edi, [ebp+33B60h] and edi, [esp+90h+arg_0] mov ecx, [esp+90h+var_50] push edx cmp bl, 7 setnb dl push ecx mov [ebp+0F0h], bl mov eax, [ebp+32654h] mov ecx, 8 sub cl, al push edx movzx edx, byte ptr [ebp+11h] shr edx, cl mov ecx, [ebp+3265Ch] and ecx, [esp+9Ch+arg_0] mov [esp+9Ch+var_3C], ecx mov ecx, eax mov eax, [esp+9Ch+var_3C] shl eax, cl add edx, eax imul edx, 0C00h add edx, [ebp+32650h] mov ecx, edx call sub_4CDAC0 movzx ecx, bl shl ecx, 4 add ecx, edi mov edx, [ebp+ecx*4+280F0h] shr edx, 2 add eax, dword_550998[edx*4] mov ebx, 800h mov [ebp+124h], eax mov dword ptr [ebp+12Ch], 0FFFFFFFFh mov byte ptr [ebp+119h], 0 mov cl, [ebp+10h] movzx eax, cl mov edx, eax shl edx, 4 add edx, edi sub ebx, [ebp+edx*4+280F0h] mov edx, 800h sub edx, [ebp+eax*4+283F0h] mov al, byte ptr [esp+90h+var_4C] shr edx, 2 mov edx, dword_550998[edx*4] shr ebx, 2 mov ebx, dword_550998[ebx*4] add edx, ebx cmp byte ptr [esp+90h+var_50], al mov [esp+90h+var_44], ebx mov [esp+90h+var_3C], edx jnz short loc_4CE3F3 movzx eax, cl mov ebx, [ebp+eax*4+28420h] mov ecx, eax shl ecx, 4 add ecx, edi mov ecx, [ebp+ecx*4+284B0h] shr ecx, 2 mov eax, dword_550998[ecx*4] shr ebx, 2 add eax, dword_550998[ebx*4] add eax, edx cmp eax, [ebp+124h] jnb short loc_4CE3F3 mov [ebp+124h], eax mov dword ptr [ebp+12Ch], 0 mov byte ptr [ebp+119h], 0 loc_4CE3F3: ; CODE XREF: CEncoder_GetOptimum+344j ; CEncoder_GetOptimum+37Aj mov eax, [esp+90h+var_68] mov ecx, [esp+90h+var_40] cmp eax, ecx jb short loc_4CE405 mov [esp+90h+var_7C], eax jmp short loc_4CE40B ; --------------------------------------------------------------------------- loc_4CE405: ; CODE XREF: CEncoder_GetOptimum+39Dj mov [esp+90h+var_7C], ecx mov eax, ecx loc_4CE40B: ; CODE XREF: CEncoder_GetOptimum+3A3j cmp eax, 2 jnb short loc_4CE431 mov edx, [ebp+12Ch] mov eax, [esp+90h+arg_4] pop edi pop ebx pop esi mov [eax], edx mov eax, 1 pop ebp add esp, 80h retn 8 ; --------------------------------------------------------------------------- loc_4CE431: ; CODE XREF: CEncoder_GetOptimum+3AEj mov ecx, [esp+90h+var_1C] mov edx, [esp+90h+var_18] xor ebx, ebx mov [ebp+128h], ebx mov [ebp+10Ch], ecx mov ecx, [esp+90h+var_14] mov [ebp+110h], edx lea edx, [eax+eax*4] mov [ebp+114h], ecx mov [ebp+108h], esi lea ecx, [ebp+edx*8+0FCh] jmp short loc_4CE470 ; --------------------------------------------------------------------------- align 10h loc_4CE470: ; CODE XREF: CEncoder_GetOptimum+407j ; CEncoder_GetOptimum+41Fj mov dword ptr [ecx], 0FFFFFFFh sub eax, 1 sub ecx, 28h cmp eax, 2 jnb short loc_4CE470 loc_4CE481: ; CODE XREF: CEncoder_GetOptimum+48Ej mov esi, [esp+ebx*4+90h+var_10] cmp esi, 2 jb short loc_4CE4E8 movzx eax, byte ptr [ebp+10h] push edi push eax push ebx mov ecx, ebp call sub_4CD9B0 add eax, [esp+90h+var_3C] mov ecx, edi imul ecx, 110h add ecx, esi mov [esp+90h+var_40], eax lea edx, [esi+esi*4] lea eax, [ebp+ecx*4+2E204h] lea ecx, [ebp+edx*8+0FCh] mov edi, edi loc_4CE4C0: ; CODE XREF: CEncoder_GetOptimum+486j mov edx, [eax] add edx, [esp+90h+var_40] cmp edx, [ecx] jnb short loc_4CE4DA mov [ecx], edx mov dword ptr [ecx+4], 0 mov [ecx+8], ebx mov byte ptr [ecx-0Bh], 0 loc_4CE4DA: ; CODE XREF: CEncoder_GetOptimum+468j sub esi, 1 sub eax, 4 sub ecx, 28h cmp esi, 2 jnb short loc_4CE4C0 loc_4CE4E8: ; CODE XREF: CEncoder_GetOptimum+42Bj add ebx, 1 cmp ebx, 4 jb short loc_4CE481 movzx eax, byte ptr [ebp+10h] mov ecx, [ebp+eax*4+283F0h] shr ecx, 2 mov eax, dword_550998[ecx*4] add eax, [esp+90h+var_44] mov [esp+90h+var_3C], eax mov eax, [esp+90h+var_10] cmp eax, 2 lea ebx, [eax+1] jnb short loc_4CE521 mov ebx, 2 loc_4CE521: ; CODE XREF: CEncoder_GetOptimum+4BAj cmp ebx, [esp+90h+var_68] ja loc_4CE5BA xor eax, eax cmp ebx, [ebp+32660h] mov [esp+90h+var_60], eax jbe short loc_4CE550 lea esp, [esp+0] loc_4CE540: ; CODE XREF: CEncoder_GetOptimum+4EAj add eax, 2 cmp ebx, [ebp+eax*4+32660h] ja short loc_4CE540 mov [esp+90h+var_60], eax loc_4CE550: ; CODE XREF: CEncoder_GetOptimum+4D7j lea edx, [ebx+ebx*4] lea esi, [ebp+edx*8+0FCh] lea ebx, [ebx+0] loc_4CE560: ; CODE XREF: CEncoder_GetOptimum+558j mov eax, [esp+90h+var_60] mov eax, [ebp+eax*4+32664h] push edi push ebx push eax mov ecx, ebp mov [esp+9Ch+var_40], eax call sub_4CAEC0 add eax, [esp+90h+var_3C] cmp eax, [esi] jnb short loc_4CE598 mov ecx, [esp+90h+var_40] add ecx, 4 mov [esi], eax mov dword ptr [esi+4], 0 mov [esi+8], ecx mov byte ptr [esi-0Bh], 0 loc_4CE598: ; CODE XREF: CEncoder_GetOptimum+51Fj mov eax, [esp+90h+var_60] cmp ebx, [ebp+eax*4+32660h] jnz short loc_4CE5B2 add eax, 2 cmp eax, [esp+90h+var_70] mov [esp+90h+var_60], eax jz short loc_4CE5BA loc_4CE5B2: ; CODE XREF: CEncoder_GetOptimum+543j add ebx, 1 add esi, 28h jmp short loc_4CE560 ; --------------------------------------------------------------------------- loc_4CE5BA: ; CODE XREF: CEncoder_GetOptimum+4C5j ; CEncoder_GetOptimum+550j mov eax, 1 cmp [esp+90h+var_7C], eax mov [esp+90h+var_78], eax jz loc_4CF1D0 mov esi, eax jmp short loc_4CE5D5 ; --------------------------------------------------------------------------- loc_4CE5D1: ; CODE XREF: CEncoder_GetOptimum+116Aj mov esi, [esp+90h+var_78] loc_4CE5D5: ; CODE XREF: CEncoder_GetOptimum+56Fj mov edx, [ebp+80h] mov eax, [ebp+70h] push edx call eax add esp, 4 lea ecx, [esp+90h+var_4C] push ecx mov ecx, ebp mov [esp+94h+var_60], eax call sub_4CB3B0 cmp eax, [ebp+32EF8h] mov [esp+90h+var_28], eax jnb loc_4CF1D7 add [esp+90h+arg_0], 1 lea edx, [esi+esi*4+1Eh] mov bl, [ebp+edx*8+1] test bl, bl lea eax, [ebp+edx*8+0] mov edx, [eax+10h] jz short loc_4CE673 sub edx, 1 cmp byte ptr [eax+2], 0 jz short loc_4CE660 mov ecx, [eax+4] add ecx, 6 cmp dword ptr [eax+8], 4 lea ecx, [ecx+ecx*4] mov cl, [ebp+ecx*8+0] movzx ecx, cl jnb short loc_4CE64F mov cl, ds:kRepNextStates[ecx] movzx ecx, cl mov cl, ds:kLiteralNextStates[ecx] jmp short loc_4CE67B ; --------------------------------------------------------------------------- loc_4CE64F: ; CODE XREF: CEncoder_GetOptimum+5DCj mov cl, ds:kMatchNextStates[ecx] movzx ecx, cl mov cl, ds:kLiteralNextStates[ecx] jmp short loc_4CE67B ; --------------------------------------------------------------------------- loc_4CE660: ; CODE XREF: CEncoder_GetOptimum+5C6j lea ecx, [edx+edx*4+1Eh] mov cl, [ebp+ecx*8+0] movzx ecx, cl mov cl, ds:kLiteralNextStates[ecx] jmp short loc_4CE67B ; --------------------------------------------------------------------------- loc_4CE673: ; CODE XREF: CEncoder_GetOptimum+5BDj lea ecx, [edx+edx*4+1Eh] mov cl, [ebp+ecx*8+0] loc_4CE67B: ; CODE XREF: CEncoder_GetOptimum+5EDj ; CEncoder_GetOptimum+5FEj ... add esi, 0FFFFFFFFh cmp edx, esi jnz short loc_4CE6AC cmp dword ptr [eax+14h], 0 jnz short loc_4CE69A movzx edx, cl mov bl, ds:kShortRepNextStates[edx] mov byte ptr [esp+90h+var_64], bl jmp loc_4CE754 ; --------------------------------------------------------------------------- loc_4CE69A: ; CODE XREF: CEncoder_GetOptimum+626j movzx ecx, cl mov bl, ds:kLiteralNextStates[ecx] mov byte ptr [esp+90h+var_64], bl jmp loc_4CE754 ; --------------------------------------------------------------------------- loc_4CE6AC: ; CODE XREF: CEncoder_GetOptimum+620j test bl, bl jz short loc_4CE6CB cmp byte ptr [eax+2], 0 jz short loc_4CE6CB mov edi, [eax+8] mov edx, [eax+4] movzx ecx, cl mov bl, ds:kRepNextStates[ecx] mov [esp+90h+var_68], edi jmp short loc_4CE6EA ; --------------------------------------------------------------------------- loc_4CE6CB: ; CODE XREF: CEncoder_GetOptimum+64Ej ; CEncoder_GetOptimum+654j mov esi, [eax+14h] cmp esi, 4 mov [esp+90h+var_68], esi movzx ecx, cl mov edi, esi jnb short loc_4CE6E4 mov bl, ds:kRepNextStates[ecx] jmp short loc_4CE6EA ; --------------------------------------------------------------------------- loc_4CE6E4: ; CODE XREF: CEncoder_GetOptimum+67Aj mov bl, ds:kMatchNextStates[ecx] loc_4CE6EA: ; CODE XREF: CEncoder_GetOptimum+669j ; CEncoder_GetOptimum+682j cmp edi, 4 lea edx, [edx+edx*4+1Eh] mov byte ptr [esp+90h+var_64], bl lea edx, [ebp+edx*8+0] jnb short loc_4CE738 mov ecx, [edx+edi*4+18h] mov esi, 1 cmp edi, esi mov [esp+90h+var_20], ecx jb short loc_4CE723 mov ecx, edi lea esi, [edx+18h] lea edi, [esp+90h+var_1C] rep movsd mov esi, [esp+90h+var_68] add esi, 1 cmp esi, 4 jnb short loc_4CE754 loc_4CE723: ; CODE XREF: CEncoder_GetOptimum+6AAj lea edx, [edx+esi*4+18h] mov ecx, 4 lea edi, [esp+esi*4+90h+var_20] sub ecx, esi mov esi, edx rep movsd jmp short loc_4CE754 ; --------------------------------------------------------------------------- loc_4CE738: ; CODE XREF: CEncoder_GetOptimum+699j mov ecx, [edx+18h] mov [esp+90h+var_1C], ecx mov ecx, [edx+1Ch] mov edx, [edx+20h] add edi, 0FFFFFFFCh mov [esp+90h+var_20], edi mov [esp+90h+var_18], ecx mov [esp+90h+var_14], edx loc_4CE754: ; CODE XREF: CEncoder_GetOptimum+635j ; CEncoder_GetOptimum+647j ... mov ecx, [esp+90h+var_1C] mov edx, [esp+90h+var_18] mov edi, [esp+90h+var_20] mov [eax], bl mov [eax+1Ch], ecx mov ecx, [esp+90h+var_14] mov [eax+18h], edi mov [eax+20h], edx mov [eax+24h], ecx mov esi, [eax+0Ch] mov edx, [ebp+80h] mov eax, [ebp+74h] push edx mov [esp+94h+var_3C], esi call eax movzx ecx, byte ptr [eax-1] sub eax, 1 mov edx, eax mov byte ptr [esp+94h+var_5C], cl sub edx, edi movzx ecx, byte ptr [edx-1] lea edi, [edx-1] mov edx, [ebp+32654h] mov byte ptr [esp+94h+var_58], cl mov ecx, [ebp+33B60h] and ecx, [esp+94h+arg_0] mov [esp+94h+var_40], edi movzx edi, bl mov [esp+94h+var_54], ecx mov [esp+94h+var_68], edi add esp, 4 shl edi, 4 add edi, ecx mov ecx, [esp+90h+var_5C] push ecx mov ecx, [esp+94h+var_58] push ecx cmp bl, 7 mov ebx, [ebp+3265Ch] setnb cl and ebx, [esp+98h+arg_0] mov [esp+98h+var_74], eax movzx eax, byte ptr [eax-1] push ecx mov ecx, 8 sub cl, dl shr eax, cl mov ecx, edx shl ebx, cl add eax, ebx imul eax, 0C00h add eax, [ebp+32650h] mov ecx, eax call sub_4CDAC0 mov ecx, [ebp+edi*4+280F0h] shr ecx, 2 add eax, dword_550998[ecx*4] mov ecx, [esp+90h+var_78] add eax, esi lea edx, [ecx+ecx*4+23h] cmp eax, [ebp+edx*8+0Ch] lea esi, [ebp+edx*8+0] mov [esp+90h+var_7D], 0 jnb short loc_4CE851 mov [esi+0Ch], eax mov [esi+10h], ecx mov dword ptr [esi+14h], 0FFFFFFFFh mov byte ptr [esi+1], 0 mov [esp+90h+var_7D], 1 loc_4CE851: ; CODE XREF: CEncoder_GetOptimum+7D9j mov ebx, [esp+90h+var_68] mov edx, 800h sub edx, [ebp+edi*4+280F0h] shr edx, 2 mov ecx, dword_550998[edx*4] add ecx, [esp+90h+var_3C] mov edx, 800h sub edx, [ebp+ebx*4+283F0h] mov ebx, [esp+90h+var_78] shr edx, 2 mov edx, dword_550998[edx*4] add edx, ecx mov [esp+90h+var_24], ecx mov cl, byte ptr [esp+90h+var_58] cmp cl, byte ptr [esp+90h+var_5C] mov [esp+90h+var_38], edx jnz short loc_4CE8EB cmp [esi+10h], ebx jnb short loc_4CE8A8 cmp dword ptr [esi+14h], 0 jz short loc_4CE8EB loc_4CE8A8: ; CODE XREF: CEncoder_GetOptimum+840j mov ecx, [esp+90h+var_68] mov ecx, [ebp+ecx*4+28420h] mov edi, [ebp+edi*4+284B0h] shr ecx, 2 mov ecx, dword_550998[ecx*4] shr edi, 2 add ecx, dword_550998[edi*4] add ecx, edx cmp ecx, [esi+0Ch] ja short loc_4CE8EB mov [esi+0Ch], ecx mov [esi+10h], ebx mov dword ptr [esi+14h], 0 mov byte ptr [esi+1], 0 mov [esp+90h+var_7D], 1 loc_4CE8EB: ; CODE XREF: CEncoder_GetOptimum+83Bj ; CEncoder_GetOptimum+846j ... mov edx, [esp+90h+var_60] mov ecx, 0FFFh sub ecx, ebx cmp ecx, edx jnb short loc_4CE900 mov edx, ecx mov [esp+90h+var_60], edx loc_4CE900: ; CODE XREF: CEncoder_GetOptimum+898j cmp edx, 2 mov ebx, edx mov [esp+90h+var_6C], ebx jb loc_4CF1BB mov esi, [ebp+32EF8h] mov edi, [esp+90h+var_60] cmp edi, esi jbe short loc_4CE923 mov ebx, esi mov [esp+90h+var_6C], esi loc_4CE923: ; CODE XREF: CEncoder_GetOptimum+8BBj cmp [esp+90h+var_7D], 0 jnz loc_4CEA90 mov dl, byte ptr [esp+90h+var_5C] cmp byte ptr [esp+90h+var_58], dl jz loc_4CEA90 lea ecx, [esi+1] cmp edi, ecx jb short loc_4CE945 mov edi, ecx loc_4CE945: ; CODE XREF: CEncoder_GetOptimum+8E1j mov esi, 1 cmp edi, esi jbe short loc_4CE975 mov ebx, [esp+90h+var_74] mov edx, [esp+90h+var_40] lea ecx, [ebx+1] sub edx, ebx jmp short loc_4CE960 ; --------------------------------------------------------------------------- align 10h loc_4CE960: ; CODE XREF: CEncoder_GetOptimum+8FBj ; CEncoder_GetOptimum+90Fj mov bl, [ecx] cmp bl, [edx+ecx] jnz short loc_4CE971 add esi, 1 add ecx, 1 cmp esi, edi jb short loc_4CE960 loc_4CE971: ; CODE XREF: CEncoder_GetOptimum+905j mov ebx, [esp+90h+var_6C] loc_4CE975: ; CODE XREF: CEncoder_GetOptimum+8ECj add esi, 0FFFFFFFFh cmp esi, 2 mov [esp+90h+var_50], esi jb loc_4CEA90 mov ecx, [esp+90h+var_68] mov dl, ds:kLiteralNextStates[ecx] mov ecx, [esp+90h+arg_0] movzx ebx, dl add ecx, 1 and ecx, [ebp+33B60h] mov edx, ebx shl edx, 4 lea esi, [edx+ecx] mov edx, 800h sub edx, [ebp+ebx*4+283F0h] mov edi, 800h sub edi, [ebp+esi*4+280F0h] shr edx, 2 mov edx, dword_550998[edx*4] shr edi, 2 add edx, dword_550998[edi*4] mov edi, [esp+90h+var_78] add edx, eax mov eax, [esp+90h+var_50] lea edi, [eax+edi+1] mov eax, [esp+90h+var_7C] cmp eax, edi mov [esp+90h+var_40], esi jnb short loc_4CEA22 mov esi, [esp+90h+var_7C] lea eax, [eax+eax*4] lea eax, [ebp+eax*8+0FCh] mov [esp+90h+var_3C], eax mov eax, edi sub eax, esi add esi, eax mov [esp+90h+var_7C], esi mov esi, [esp+90h+var_3C] loc_4CEA10: ; CODE XREF: CEncoder_GetOptimum+9BCj add esi, 28h sub eax, 1 mov dword ptr [esi], 0FFFFFFFh jnz short loc_4CEA10 mov esi, [esp+90h+var_40] loc_4CEA22: ; CODE XREF: CEncoder_GetOptimum+98Ej imul ecx, 110h add ecx, [esp+90h+var_50] mov eax, 800h sub eax, [ebp+esi*4+284B0h] mov esi, [ebp+ebx*4+28420h] mov ebx, [esp+90h+var_6C] shr eax, 2 mov eax, dword_550998[eax*4] shr esi, 2 add eax, dword_550998[esi*4] mov esi, [esp+90h+var_7C] add eax, [ebp+ecx*4+2E204h] lea ecx, [edi+edi*4+1Eh] add eax, edx cmp eax, [ebp+ecx*8+0Ch] lea ecx, [ebp+ecx*8+0] jnb short loc_4CEA94 mov edx, [esp+90h+var_78] add edx, 1 mov [ecx+0Ch], eax mov [ecx+10h], edx mov dword ptr [ecx+14h], 0 mov byte ptr [ecx+1], 1 mov byte ptr [ecx+2], 0 jmp short loc_4CEA94 ; --------------------------------------------------------------------------- loc_4CEA90: ; CODE XREF: CEncoder_GetOptimum+8C8j ; CEncoder_GetOptimum+8D6j ... mov esi, [esp+90h+var_7C] loc_4CEA94: ; CODE XREF: CEncoder_GetOptimum+A10j ; CEncoder_GetOptimum+A2Ej mov [esp+90h+var_70], 0 mov ecx, [esp+90h+var_70] mov [esp+90h+var_40], 2 jmp short loc_4CEAB8 ; --------------------------------------------------------------------------- align 10h loc_4CEAB0: ; CODE XREF: CEncoder_GetOptimum+D63j mov ebx, [esp+90h+var_6C] mov esi, [esp+90h+var_7C] loc_4CEAB8: ; CODE XREF: CEncoder_GetOptimum+A48j mov edx, [esp+90h+var_74] mov eax, edx sub eax, [esp+ecx*4+90h+var_20] mov cl, [edx] sub eax, 1 cmp cl, [eax] mov [esp+90h+var_48], eax jnz loc_4CEDB5 mov cl, [edx+1] cmp cl, [eax+1] jnz loc_4CEDB5 mov edi, 2 cmp ebx, edi jbe short loc_4CEB01 lea ecx, [edx+2] sub eax, edx lea ecx, [ecx+0] loc_4CEAF0: ; CODE XREF: CEncoder_GetOptimum+A9Fj mov dl, [ecx] cmp dl, [eax+ecx] jnz short loc_4CEB01 add edi, 1 add ecx, 1 cmp edi, ebx jb short loc_4CEAF0 loc_4CEB01: ; CODE XREF: CEncoder_GetOptimum+A86j ; CEncoder_GetOptimum+A95j mov eax, [esp+90h+var_78] lea ebx, [edi+eax] cmp esi, ebx jnb short loc_4CEB2E mov eax, ebx lea ecx, [esi+esi*4] sub eax, esi add esi, eax lea ecx, [ebp+ecx*8+0FCh] mov [esp+90h+var_7C], esi loc_4CEB20: ; CODE XREF: CEncoder_GetOptimum+ACCj add ecx, 28h sub eax, 1 mov dword ptr [ecx], 0FFFFFFFh jnz short loc_4CEB20 loc_4CEB2E: ; CODE XREF: CEncoder_GetOptimum+AAAj mov edx, [esp+90h+var_54] mov eax, [esp+90h+var_64] mov ecx, [esp+90h+var_70] push edx push eax push ecx mov ecx, ebp mov esi, edi call sub_4CD9B0 add eax, [esp+90h+var_38] mov ecx, [esp+90h+var_54] imul ecx, 110h lea edx, [edi+ecx] mov [esp+90h+var_34], ecx lea ecx, [ebp+edx*4+2E204h] mov [esp+90h+var_50], ecx lea edx, [ebx+ebx*4] mov ebx, [esp+90h+var_50] mov [esp+90h+var_2C], eax lea ecx, [ebp+edx*8+0FCh] loc_4CEB78: ; CODE XREF: CEncoder_GetOptimum+B40j mov edx, [ebx] add edx, eax cmp edx, [ecx] jnb short loc_4CEB94 mov [ecx], edx mov edx, [esp+90h+var_78] mov [ecx+4], edx mov edx, [esp+90h+var_70] mov [ecx+8], edx mov byte ptr [ecx-0Bh], 0 loc_4CEB94: ; CODE XREF: CEncoder_GetOptimum+B1Ej sub edi, 1 sub ebx, 4 sub ecx, 28h cmp edi, 2 jnb short loc_4CEB78 cmp [esp+90h+var_70], 0 jnz short loc_4CEBB0 lea eax, [esi+1] mov [esp+90h+var_40], eax loc_4CEBB0: ; CODE XREF: CEncoder_GetOptimum+B47j mov ecx, [ebp+32EF8h] mov edx, [esp+90h+var_60] lea eax, [esi+1] add ecx, eax cmp edx, ecx jnb short loc_4CEBC5 mov ecx, edx loc_4CEBC5: ; CODE XREF: CEncoder_GetOptimum+B61j cmp eax, ecx jnb short loc_4CEBE7 mov ebx, [esp+90h+var_74] mov edi, [esp+90h+var_48] lea edx, [eax+ebx] sub edi, ebx loc_4CEBD6: ; CODE XREF: CEncoder_GetOptimum+B85j mov bl, [edx] cmp bl, [edx+edi] jnz short loc_4CEBE7 add eax, 1 add edx, 1 cmp eax, ecx jb short loc_4CEBD6 loc_4CEBE7: ; CODE XREF: CEncoder_GetOptimum+B67j ; CEncoder_GetOptimum+B7Bj or ecx, 0FFFFFFFFh sub ecx, esi add eax, ecx cmp eax, 2 mov [esp+90h+var_44], eax jb loc_4CEDB5 mov edx, [esp+90h+var_68] mov cl, ds:kRepNextStates[edx] mov eax, [ebp+33B60h] mov edi, [esp+90h+arg_0] movzx ecx, cl mov ebx, eax lea edx, [esi+edi] and ebx, edx mov edx, ecx mov cl, ds:kLiteralNextStates[ecx] shl edx, 4 add ebx, edx mov edx, [ebp+ebx*4+280F0h] movzx ebx, cl shr edx, 2 mov edx, dword_550998[edx*4] mov [esp+90h+var_30], edx lea edi, [esi+edi+1] and edi, eax mov eax, [ebp+32654h] mov ecx, ebx shl ecx, 4 add ecx, edi mov [esp+90h+var_50], ecx mov ecx, [esp+90h+var_74] movzx edx, byte ptr [esi+ecx] push edx mov edx, [esp+94h+var_48] movzx edx, byte ptr [esi+edx] push edx movzx edx, byte ptr [ecx+esi-1] mov ecx, 8 sub cl, al shr edx, cl mov ecx, [esp+98h+arg_0] lea eax, [esi+ecx] mov ecx, [ebp+3265Ch] and ecx, eax mov eax, ecx mov ecx, [ebp+32654h] shl eax, cl push 1 add edx, eax imul edx, 0C00h add edx, [ebp+32650h] mov ecx, edx call sub_4CDAC0 mov ecx, [esp+90h+var_50] mov edx, 800h sub edx, [ebp+ecx*4+280F0h] mov ecx, [esp+90h+var_34] shr edx, 2 add eax, dword_550998[edx*4] mov edx, 800h sub edx, [ebp+ebx*4+283F0h] shr edx, 2 add eax, dword_550998[edx*4] lea edx, [esi+ecx] add eax, [ebp+edx*4+2E204h] mov ecx, [esp+90h+var_44] add eax, [esp+90h+var_30] mov edx, [esp+90h+var_78] add eax, [esp+90h+var_2C] add ecx, esi lea ecx, [ecx+edx+1] cmp [esp+90h+var_7C], ecx mov [esp+90h+var_30], ecx jnb short loc_4CED3E mov edx, [esp+90h+var_7C] lea edx, [edx+edx*4] lea edx, [ebp+edx*8+0FCh] mov [esp+90h+var_2C], edx mov edx, [esp+90h+var_7C] sub ecx, edx add edx, ecx mov [esp+90h+var_7C], edx mov edx, [esp+90h+var_2C] jmp short loc_4CED30 ; --------------------------------------------------------------------------- align 10h loc_4CED30: ; CODE XREF: CEncoder_GetOptimum+CCBj ; CEncoder_GetOptimum+CDCj add edx, 28h sub ecx, 1 mov dword ptr [edx], 0FFFFFFFh jnz short loc_4CED30 loc_4CED3E: ; CODE XREF: CEncoder_GetOptimum+CA7j mov edx, [esp+90h+var_50] imul edi, 110h add edi, [esp+90h+var_44] mov ecx, 800h sub ecx, [ebp+edx*4+284B0h] mov edx, [ebp+ebx*4+28420h] shr ecx, 2 mov ecx, dword_550998[ecx*4] shr edx, 2 add ecx, dword_550998[edx*4] add ecx, [ebp+edi*4+2E204h] add ecx, eax mov eax, [esp+90h+var_30] lea eax, [eax+eax*4+1Eh] cmp ecx, [ebp+eax*8+0Ch] lea eax, [ebp+eax*8+0] jnb short loc_4CEDB5 mov [eax+0Ch], ecx mov ecx, [esp+90h+var_78] lea edx, [esi+ecx+1] mov [eax+4], ecx mov ecx, [esp+90h+var_70] mov [eax+10h], edx mov dword ptr [eax+14h], 0 mov byte ptr [eax+1], 1 mov byte ptr [eax+2], 1 mov [eax+8], ecx loc_4CEDB5: ; CODE XREF: CEncoder_GetOptimum+A6Dj ; CEncoder_GetOptimum+A79j ... mov ecx, [esp+90h+var_70] add ecx, 1 cmp ecx, 4 mov [esp+90h+var_70], ecx jb loc_4CEAB0 mov edx, [esp+90h+var_28] mov ecx, [esp+90h+var_6C] cmp edx, ecx jbe short loc_4CEDFB xor eax, eax cmp ecx, [ebp+32660h] mov edx, ecx jbe short loc_4CEDED loc_4CEDE1: ; CODE XREF: CEncoder_GetOptimum+D8Bj add eax, 2 cmp ecx, [ebp+eax*4+32660h] ja short loc_4CEDE1 loc_4CEDED: ; CODE XREF: CEncoder_GetOptimum+D7Fj mov [ebp+eax*4+32660h], ecx add eax, 2 mov [esp+90h+var_4C], eax loc_4CEDFB: ; CODE XREF: CEncoder_GetOptimum+D73j mov esi, [esp+90h+var_40] cmp edx, esi jb loc_4CF1BB mov eax, [esp+90h+var_68] mov ecx, [ebp+eax*4+283F0h] shr ecx, 2 mov eax, dword_550998[ecx*4] add eax, [esp+90h+var_24] mov ecx, [esp+90h+var_7C] mov [esp+90h+var_40], eax mov eax, [esp+90h+var_78] add eax, edx cmp ecx, eax jnb short loc_4CEE52 lea edx, [ecx+ecx*4] sub eax, ecx add ecx, eax lea edx, [ebp+edx*8+0FCh] mov [esp+90h+var_7C], ecx loc_4CEE44: ; CODE XREF: CEncoder_GetOptimum+DF0j add edx, 28h sub eax, 1 mov dword ptr [edx], 0FFFFFFFh jnz short loc_4CEE44 loc_4CEE52: ; CODE XREF: CEncoder_GetOptimum+DD0j xor eax, eax cmp esi, [ebp+32660h] mov [esp+90h+var_70], eax jbe short loc_4CEE70 loc_4CEE60: ; CODE XREF: CEncoder_GetOptimum+E0Aj add eax, 2 cmp esi, [ebp+eax*4+32660h] ja short loc_4CEE60 mov [esp+90h+var_70], eax loc_4CEE70: ; CODE XREF: CEncoder_GetOptimum+DFEj lea ebx, ds:0[eax*4] mov edx, [ebx+ebp+32664h] mov ecx, 7FFFFh sub ecx, edx sar ecx, 1Fh and ecx, 0Ch add ecx, 6 mov eax, edx shr eax, cl mov [esp+90h+var_6C], edx lea edi, [esi+1] movzx eax, byte ptr dword_551198[eax] lea ecx, [eax+ecx*2] mov eax, [esp+90h+var_54] imul eax, 110h add eax, esi lea eax, [ebp+eax*4+295B8h] mov [esp+90h+var_3C], ecx mov ecx, [esp+90h+var_78] mov [esp+90h+var_54], eax lea eax, [esi+ecx] lea eax, [eax+eax*4] lea ecx, [ebp+eax*8+0FCh] mov [esp+90h+var_50], ecx loc_4CEED3: ; CODE XREF: CEncoder_GetOptimum+1156j lea eax, [edi-3] cmp eax, 4 jb short loc_4CEEE0 mov eax, 3 loc_4CEEE0: ; CODE XREF: CEncoder_GetOptimum+E79j cmp edx, 80h jnb short loc_4CEEF6 shl eax, 7 add eax, edx mov eax, [ebp+eax*4+33314h] jmp short loc_4CEF10 ; --------------------------------------------------------------------------- loc_4CEEF6: ; CODE XREF: CEncoder_GetOptimum+E86j shl eax, 6 add eax, [esp+90h+var_3C] mov esi, edx mov eax, [ebp+eax*4+32F14h] and esi, 0Fh add eax, [ebp+esi*4+33B14h] loc_4CEF10: ; CODE XREF: CEncoder_GetOptimum+E94j add eax, [esp+90h+var_40] mov esi, [esp+90h+var_54] add eax, [esi] cmp eax, [ecx] mov [esp+90h+var_2C], eax jnb short loc_4CEF35 mov [ecx], eax mov eax, [esp+90h+var_78] add edx, 4 mov [ecx+4], eax mov [ecx+8], edx mov byte ptr [ecx-0Bh], 0 loc_4CEF35: ; CODE XREF: CEncoder_GetOptimum+EC0j lea eax, [edi-1] cmp eax, [ebx+ebp+32660h] jnz loc_4CF1A1 mov ebx, [esp+90h+var_74] mov eax, [ebp+32EF8h] mov esi, [esp+90h+var_60] mov edx, ebx sub edx, [esp+90h+var_6C] add eax, edi sub edx, 1 cmp esi, eax mov ecx, edi jnb short loc_4CEF6C mov eax, esi mov [esp+90h+var_44], esi jmp short loc_4CEF70 ; --------------------------------------------------------------------------- loc_4CEF6C: ; CODE XREF: CEncoder_GetOptimum+F02j mov [esp+90h+var_44], eax loc_4CEF70: ; CODE XREF: CEncoder_GetOptimum+F0Aj cmp edi, eax jnb short loc_4CEF93 lea esi, [edi+edx] sub ebx, edx lea esp, [esp+0] loc_4CEF80: ; CODE XREF: CEncoder_GetOptimum+F31j mov al, [ebx+esi] cmp al, [esi] jnz short loc_4CEF93 add ecx, 1 add esi, 1 cmp ecx, [esp+90h+var_44] jb short loc_4CEF80 loc_4CEF93: ; CODE XREF: CEncoder_GetOptimum+F12j ; CEncoder_GetOptimum+F25j or esi, 0FFFFFFFFh lea eax, [edi-1] sub esi, eax add ecx, esi cmp ecx, 2 mov [esp+90h+var_48], ecx jb loc_4CF157 mov ecx, [esp+90h+var_68] mov bl, ds:kMatchNextStates[ecx] mov ecx, [ebp+33B60h] mov eax, [esp+90h+arg_0] lea esi, [edi+eax-1] mov eax, ecx and eax, esi movzx esi, bl movzx edx, byte ptr [edi+edx-1] mov ebx, esi shl ebx, 4 add ebx, eax mov ebx, [ebp+ebx*4+280F0h] shr ebx, 2 mov ebx, dword_550998[ebx*4] mov [esp+90h+var_28], ebx mov bl, ds:kLiteralNextStates[esi] lea esi, [eax+1] mov eax, [ebp+32654h] and esi, ecx movzx ebx, bl mov ecx, ebx shl ecx, 4 add ecx, esi mov [esp+90h+var_44], ecx mov ecx, [esp+90h+var_74] movzx ecx, byte ptr [ecx+edi-1] push ecx mov ecx, [esp+94h+var_74] push edx movzx edx, byte ptr [edi+ecx-2] mov ecx, 8 sub cl, al shr edx, cl mov ecx, [esp+98h+arg_0] lea eax, [edi+ecx-1] mov ecx, [ebp+3265Ch] and ecx, eax mov eax, ecx mov ecx, [ebp+32654h] shl eax, cl push 1 add edx, eax imul edx, 0C00h add edx, [ebp+32650h] mov ecx, edx call sub_4CDAC0 mov edx, 800h sub edx, [ebp+ebx*4+283F0h] mov ecx, 800h shr edx, 2 add eax, dword_550998[edx*4] mov edx, [esp+90h+var_44] sub ecx, [ebp+edx*4+280F0h] mov edx, [esp+90h+var_78] shr ecx, 2 add eax, dword_550998[ecx*4] mov ecx, [esp+90h+var_48] add eax, [esp+90h+var_28] add ecx, edx add eax, [esp+90h+var_2C] add ecx, edi cmp [esp+90h+var_7C], ecx mov [esp+90h+var_28], ecx jnb short loc_4CF0DE mov edx, [esp+90h+var_7C] lea edx, [edx+edx*4] lea edx, [ebp+edx*8+0FCh] mov [esp+90h+var_24], edx mov edx, [esp+90h+var_7C] sub ecx, edx add edx, ecx mov [esp+90h+var_7C], edx mov edx, [esp+90h+var_24] lea ecx, [ecx+0] loc_4CF0D0: ; CODE XREF: CEncoder_GetOptimum+107Cj add edx, 28h sub ecx, 1 mov dword ptr [edx], 0FFFFFFFh jnz short loc_4CF0D0 loc_4CF0DE: ; CODE XREF: CEncoder_GetOptimum+1049j mov edx, [esp+90h+var_44] imul esi, 110h add esi, [esp+90h+var_48] mov ecx, 800h sub ecx, [ebp+edx*4+284B0h] mov edx, [ebp+ebx*4+28420h] shr ecx, 2 mov ecx, dword_550998[ecx*4] shr edx, 2 add ecx, dword_550998[edx*4] add ecx, [ebp+esi*4+2E204h] add ecx, eax mov eax, [esp+90h+var_28] lea eax, [eax+eax*4+1Eh] cmp ecx, [ebp+eax*8+0Ch] lea eax, [ebp+eax*8+0] jnb short loc_4CF157 mov [eax+0Ch], ecx mov ecx, [esp+90h+var_78] lea edx, [ecx+edi] mov [eax+4], ecx mov ecx, [esp+90h+var_6C] add ecx, 4 mov [eax+10h], edx mov dword ptr [eax+14h], 0 mov byte ptr [eax+1], 1 mov byte ptr [eax+2], 1 mov [eax+8], ecx loc_4CF157: ; CODE XREF: CEncoder_GetOptimum+F44j ; CEncoder_GetOptimum+10CCj mov eax, [esp+90h+var_70] add eax, 2 cmp eax, [esp+90h+var_4C] mov [esp+90h+var_70], eax jz short loc_4CF1BB lea ebx, ds:0[eax*4] mov eax, [ebx+ebp+32664h] cmp eax, 80h mov [esp+90h+var_6C], eax jb short loc_4CF1A1 mov ecx, 7FFFFh sub ecx, eax sar ecx, 1Fh and ecx, 0Ch add ecx, 6 shr eax, cl movzx edx, byte ptr dword_551198[eax] lea eax, [edx+ecx*2] mov [esp+90h+var_3C], eax loc_4CF1A1: ; CODE XREF: CEncoder_GetOptimum+EDFj ; CEncoder_GetOptimum+111Fj add [esp+90h+var_50], 28h add [esp+90h+var_54], 4 mov ecx, [esp+90h+var_50] mov edx, [esp+90h+var_6C] add edi, 1 jmp loc_4CEED3 ; --------------------------------------------------------------------------- loc_4CF1BB: ; CODE XREF: CEncoder_GetOptimum+8A9j ; CEncoder_GetOptimum+DA1j ... mov eax, [esp+90h+var_78] add eax, 1 cmp eax, [esp+90h+var_7C] mov [esp+90h+var_78], eax jnz loc_4CE5D1 loc_4CF1D0: ; CODE XREF: CEncoder_GetOptimum+567j mov ecx, [esp+90h+var_78] push ecx jmp short loc_4CF1EF ; --------------------------------------------------------------------------- loc_4CF1D7: ; CODE XREF: CEncoder_GetOptimum+59Ej mov ecx, [esp+90h+var_4C] mov [ebp+32F00h], ecx mov [ebp+32EFCh], eax mov byte ptr [ebp+32F10h], 1 push esi loc_4CF1EF: ; CODE XREF: CEncoder_GetOptimum+1175j mov edx, [esp+94h+arg_4] push edx mov ecx, ebp call sub_4CB2E0 pop edi pop ebx pop esi pop ebp add esp, 80h retn 8 CEncoder_GetOptimum endp ; --------------------------------------------------------------------------- align 10h loc_4CF210: ; DATA XREF: CEncoder_CodeOneBlock+44o mov edx, [esp+10h] mov eax, [esp+4] mov eax, [eax+4] mov ecx, [eax] push edx mov edx, [esp+10h] push edx mov edx, [esp+10h] push edx push eax mov eax, [ecx+0Ch] call eax retn ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= CEncoder_FillDistancesPrices proc near ; CODE XREF: CEncoder_SetStreams+4Fp ; CEncoder_CodeOneBlock+751p var_20C = dword ptr -20Ch var_208 = dword ptr -208h var_204 = dword ptr -204h var_200 = dword ptr -200h sub esp, 20Ch push ebx push ebp push esi push edi mov ebx, ecx mov esi, 4 loc_4CF241: ; CODE XREF: CEncoder_FillDistancesPrices+80j cmp esi, 2000h jnb short loc_4CF252 movzx edx, byte ptr dword_551198[esi] jmp short loc_4CF27A ; --------------------------------------------------------------------------- loc_4CF252: ; CODE XREF: CEncoder_FillDistancesPrices+17j cmp esi, 2000000h jnb short loc_4CF26B mov eax, esi shr eax, 0Ch movzx edx, byte ptr dword_551198[eax] add edx, 18h jmp short loc_4CF27A ; --------------------------------------------------------------------------- loc_4CF26B: ; CODE XREF: CEncoder_FillDistancesPrices+28j mov ecx, esi shr ecx, 18h movzx edx, byte ptr dword_551198[ecx] add edx, 30h loc_4CF27A: ; CODE XREF: CEncoder_FillDistancesPrices+20j ; CEncoder_FillDistancesPrices+39j mov ecx, edx mov eax, edx and eax, 1 shr ecx, 1 sub ecx, 1 or eax, 2 shl eax, cl mov edi, esi sub edi, eax push edi sub eax, edx push ecx lea edx, [ebx+eax*4+28BACh] push edx call sub_4CD860 mov [esp+esi*4+228h+var_200], eax add esi, 1 add esp, 0Ch cmp esi, 80h jb short loc_4CF241 lea ebp, [esp+21Ch+var_200] sub ebp, ebx lea esi, [ebx+3331Ch] sub ebp, 33314h lea edx, [ebx+32F14h] mov [esp+21Ch+var_20C], esi mov [esp+21Ch+var_208], ebp mov [esp+21Ch+var_204], 4 jmp short loc_4CF2E4 ; --------------------------------------------------------------------------- align 10h loc_4CF2E0: ; CODE XREF: CEncoder_FillDistancesPrices+1BDj mov esi, [esp+21Ch+var_20C] loc_4CF2E4: ; CODE XREF: CEncoder_FillDistancesPrices+AAj xor edi, edi cmp [ebx+33B58h], edi jbe short loc_4CF33F mov edi, edi loc_4CF2F0: ; CODE XREF: CEncoder_FillDistancesPrices+109j mov ecx, edi or ecx, 40h xor esi, esi cmp ecx, 1 jz short loc_4CF32D lea esp, [esp+0] loc_4CF300: ; CODE XREF: CEncoder_FillDistancesPrices+F7j mov eax, ecx shr ecx, 1 mov ebp, [edx+ecx*4-0A764h] and eax, 1 sub ebp, eax neg eax xor ebp, eax shr ebp, 2 and ebp, 1FFh add esi, dword_550998[ebp*4] cmp ecx, 1 jnz short loc_4CF300 mov ebp, [esp+21Ch+var_208] loc_4CF32D: ; CODE XREF: CEncoder_FillDistancesPrices+CAj mov [edx+edi*4], esi add edi, 1 cmp edi, [ebx+33B58h] jb short loc_4CF2F0 mov esi, [esp+21Ch+var_20C] loc_4CF33F: ; CODE XREF: CEncoder_FillDistancesPrices+BCj mov eax, 0Eh cmp [ebx+33B58h], eax jbe short loc_4CF368 lea esp, [esp+0] loc_4CF350: ; CODE XREF: CEncoder_FillDistancesPrices+136j mov ecx, eax shr ecx, 1 sub ecx, 5 shl ecx, 6 add [edx+eax*4], ecx add eax, 1 cmp eax, [ebx+33B58h] jb short loc_4CF350 loc_4CF368: ; CODE XREF: CEncoder_FillDistancesPrices+11Aj mov eax, [edx] mov [esi-8], eax mov ecx, [edx+4] mov [esi-4], ecx mov eax, [edx+8] mov [esi], eax mov ecx, [edx+0Ch] mov [esi+4], ecx mov eax, 4 add esi, 8 loc_4CF386: ; CODE XREF: CEncoder_FillDistancesPrices+19Ej cmp eax, 2000h jnb short loc_4CF396 movzx ecx, byte ptr dword_551198[eax] jmp short loc_4CF3BB ; --------------------------------------------------------------------------- loc_4CF396: ; CODE XREF: CEncoder_FillDistancesPrices+15Bj cmp eax, 2000000h mov ecx, eax jnb short loc_4CF3AE shr ecx, 0Ch movzx ecx, byte ptr dword_551198[ecx] add ecx, 18h jmp short loc_4CF3BB ; --------------------------------------------------------------------------- loc_4CF3AE: ; CODE XREF: CEncoder_FillDistancesPrices+16Dj shr ecx, 18h movzx ecx, byte ptr dword_551198[ecx] add ecx, 30h loc_4CF3BB: ; CODE XREF: CEncoder_FillDistancesPrices+164j ; CEncoder_FillDistancesPrices+17Cj mov ecx, [edx+ecx*4] add ecx, [esi+ebp] add eax, 1 mov [esi], ecx add esi, 4 cmp eax, 80h jb short loc_4CF386 add [esp+21Ch+var_20C], 200h sub ebp, 200h add edx, 100h sub [esp+21Ch+var_204], 1 mov [esp+21Ch+var_208], ebp jnz loc_4CF2E0 pop edi pop esi pop ebp mov dword ptr [ebx+33B70h], 0 pop ebx add esp, 20Ch retn CEncoder_FillDistancesPrices endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= CEncoder_FillAlignPrices proc near ; CODE XREF: CEncoder_SetStreams+56p ; CEncoder_CodeOneBlock+761p push ebx push ebp push esi mov ebp, ecx push edi xor esi, esi lea ebx, [ebp+28D78h] lea edi, [ebp+33B14h] loc_4CF424: ; CODE XREF: CEncoder_FillAlignPrices+27j push esi mov ecx, ebx call sub_4CD810 mov [edi], eax add esi, 1 add edi, 4 cmp esi, 10h jb short loc_4CF424 pop edi pop esi mov dword ptr [ebp+33B54h], 0 pop ebp pop ebx retn CEncoder_FillAlignPrices endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CF810 proc near ; CODE XREF: sub_4D0250+3p var_10 = dword ptr -10h var_C = dword ptr -0Ch var_4 = dword ptr -4 push 0FFFFFFFFh push offset loc_4DA0C9 mov eax, dword ptr fs:[0] push eax push ecx push ebx push esi mov eax, dword_544960 xor eax, esp push eax lea eax, [esp+1Ch+var_C] mov dword ptr fs:[0], eax mov esi, ecx mov [esp+1Ch+var_10], esi mov dword ptr [esi], offset NCompress_NLZMA_CEncoder_vftable mov dword ptr [esi+4], offset NCompress_NLZMA_CEncoder_vftable_ICompressSetOutStream mov dword ptr [esi+8], offset NCompress_NLZMA_CEncoder_vftable_ICompressSetCoderProperties mov dword ptr [esi+0Ch], offset NCompress_NLZMA_CEncoder_vftable_ICompressWriteCoderProperties mov eax, [esi+0A4h] push eax ; lpAddress mov [esp+20h+var_4], 1 call off_546E24 xor ebx, ebx add esp, 4 cmp [esi+0D0h], ebx mov [esi+0A4h], ebx jnz short loc_4CF892 mov ecx, [esi+0B4h] push ecx ; lpAddress call off_546E24 add esp, 4 mov [esi+0B4h], ebx loc_4CF892: ; CODE XREF: sub_4CF810+6Aj mov eax, [esi+33B8Ch] cmp eax, ebx jz short loc_4CF8A4 mov edx, [eax] push eax mov eax, [edx+8] call eax loc_4CF8A4: ; CODE XREF: sub_4CF810+8Aj lea ecx, [esi+32650h] mov byte ptr [esp+1Ch+var_4], bl call sub_4CD8F0 mov eax, [esi+40h] cmp eax, ebx mov [esp+1Ch+var_4], 0FFFFFFFFh jz short loc_4CF8CF push 8000h ; dwFreeType push ebx ; dwSize push eax ; lpAddress call ds:VirtualFree loc_4CF8CF: ; CODE XREF: sub_4CF810+B0j mov [esi+40h], ebx mov esi, [esi+54h] cmp esi, ebx jz short loc_4CF8E1 mov ecx, [esi] mov edx, [ecx+8] push esi call edx loc_4CF8E1: ; CODE XREF: sub_4CF810+C7j mov ecx, [esp+1Ch+var_C] mov dword ptr fs:[0], ecx pop ecx pop esi pop ebx add esp, 10h retn sub_4CF810 endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_4CF900(int, void *Buf1, int) sub_4CF900 proc near ; CODE XREF: sub_4CFA20+5j ; ICompressSetCoderProperties_QueryInterface+5j ... arg_0 = dword ptr 4 Buf1 = dword ptr 8 arg_8 = dword ptr 0Ch push esi mov esi, [esp+4+Buf1] push offset dword_512730 ; Buf2 push esi ; Buf1 call unknown_libname_324 ; MFC 3.1/4.0/4.2/8.0 32bit add esp, 8 test eax, eax jz short loc_4CF94C loc_4CF917: ; CODE XREF: sub_4CF900+5Cj mov eax, [esp+4+arg_0] test eax, eax jz short loc_4CF936 mov edx, [esp+4+arg_8] lea ecx, [eax+4] mov [edx], ecx mov ecx, [eax] mov edx, [ecx+4] push eax call edx xor eax, eax pop esi retn 0Ch ; --------------------------------------------------------------------------- loc_4CF936: ; CODE XREF: sub_4CF900+1Dj ; sub_4CF900+76j ... mov edx, [esp+4+arg_8] xor ecx, ecx mov [edx], ecx mov ecx, [eax] mov edx, [ecx+4] push eax call edx xor eax, eax pop esi retn 0Ch ; --------------------------------------------------------------------------- loc_4CF94C: ; CODE XREF: sub_4CF900+15j push offset dword_5535A0 ; Buf2 push esi ; Buf1 call unknown_libname_324 ; MFC 3.1/4.0/4.2/8.0 32bit add esp, 8 test eax, eax jnz short loc_4CF917 push offset dword_5535B0 ; Buf2 push esi ; Buf1 call unknown_libname_324 ; MFC 3.1/4.0/4.2/8.0 32bit add esp, 8 test eax, eax jz short loc_4CF98F mov eax, [esp+4+arg_0] test eax, eax jz short loc_4CF936 mov edx, [esp+4+arg_8] lea ecx, [eax+8] mov [edx], ecx mov ecx, [eax] mov edx, [ecx+4] push eax call edx xor eax, eax pop esi retn 0Ch ; --------------------------------------------------------------------------- loc_4CF98F: ; CODE XREF: sub_4CF900+6Ej push offset dword_5535C0 ; Buf2 push esi ; Buf1 call unknown_libname_324 ; MFC 3.1/4.0/4.2/8.0 32bit add esp, 8 test eax, eax jz short loc_4CF9C0 mov eax, [esp+4+arg_0] test eax, eax jz short loc_4CF936 mov edx, [esp+4+arg_8] lea ecx, [eax+0Ch] mov [edx], ecx mov ecx, [eax] mov edx, [ecx+4] push eax call edx xor eax, eax pop esi retn 0Ch ; --------------------------------------------------------------------------- loc_4CF9C0: ; CODE XREF: sub_4CF900+9Fj mov eax, 80004002h pop esi retn 0Ch sub_4CF900 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CF9D0 proc near ; CODE XREF: ICompressSetCoderProperties_AddRef+5j ; sub_4CFA10+5j ... arg_0 = dword ptr 4 mov eax, [esp+arg_0] add dword ptr [eax+24h], 1 mov eax, [eax+24h] retn 4 sub_4CF9D0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CF9E0 proc near ; CODE XREF: sub_4CFA40+5j ; ICompressSetCoderProperties_Release+5j ... arg_0 = dword ptr 4 mov ecx, [esp+arg_0] add dword ptr [ecx+24h], 0FFFFFFFFh mov eax, [ecx+24h] jnz short locret_4CF9F8 mov eax, [ecx] mov edx, [eax+10h] push 1 call edx xor eax, eax locret_4CF9F8: ; CODE XREF: sub_4CF9E0+Bj retn 4 sub_4CF9E0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= ICompressSetCoderProperties_AddRef proc near ; DATA XREF: .rdata:00517AD4o arg_0 = dword ptr 4 sub [esp+arg_0], 8 jmp sub_4CF9D0 ICompressSetCoderProperties_AddRef endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CFA10 proc near ; DATA XREF: .rdata:00517AC0o arg_0 = dword ptr 4 sub [esp+arg_0], 0Ch jmp sub_4CF9D0 sub_4CFA10 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CFA20 proc near ; DATA XREF: .rdata:NCompress_NLZMA_CEncoder_vftable_ICompressSetOutStreamo arg_0 = dword ptr 4 sub [esp+arg_0], 4 jmp sub_4CF900 sub_4CFA20 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= ICompressSetCoderProperties_QueryInterface proc near ; DATA XREF: .rdata:NCompress_NLZMA_CEncoder_vftable_ICompressSetCoderPropertieso arg_0 = dword ptr 4 sub [esp+arg_0], 8 jmp sub_4CF900 ICompressSetCoderProperties_QueryInterface endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CFA40 proc near ; DATA XREF: .rdata:00517AECo arg_0 = dword ptr 4 sub [esp+arg_0], 4 jmp sub_4CF9E0 sub_4CFA40 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CFA50 proc near ; DATA XREF: .rdata:NCompress_NLZMA_CEncoder_vftable_ICompressWriteCoderPropertieso arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch sub [esp+arg_0], 0Ch jmp sub_4CF900 sub_4CFA50 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= ICompressSetCoderProperties_Release proc near ; DATA XREF: .rdata:00517AD8o arg_0 = dword ptr 4 sub [esp+arg_0], 8 jmp sub_4CF9E0 ICompressSetCoderProperties_Release endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CFA70 proc near ; DATA XREF: .rdata:00517AC4o arg_0 = dword ptr 4 sub [esp+arg_0], 0Ch jmp sub_4CF9E0 sub_4CFA70 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CFA80 proc near ; DATA XREF: .rdata:00517AE8o arg_0 = dword ptr 4 sub [esp+arg_0], 4 jmp sub_4CF9D0 sub_4CFA80 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CFA90 proc near ; DATA XREF: .rdata:00517AF0o arg_0 = dword ptr 4 arg_4 = dword ptr 8 push esi mov esi, [esp+4+arg_4] test esi, esi push edi mov edi, [esp+8+arg_0] jz short loc_4CFAA6 mov eax, [esi] mov ecx, [eax+4] push esi call ecx loc_4CFAA6: ; CODE XREF: sub_4CFA90+Cj mov eax, [edi+50h] test eax, eax jz short loc_4CFAB5 mov edx, [eax] push eax mov eax, [edx+8] call eax loc_4CFAB5: ; CODE XREF: sub_4CFA90+1Bj mov [edi+50h], esi pop edi xor eax, eax pop esi retn 8 sub_4CFA90 endp ; =============== S U B R O U T I N E ======================================= sub_4CFAC0 proc near ; CODE XREF: CEncoder_CodeOneBlock+42Ap ; CEncoder_CodeOneBlock+517p arg_0 = dword ptr 4 arg_4 = dword ptr 8 mov eax, [esp+arg_0] push esi mov esi, [eax+10h] mov edx, esi shr edx, 0Bh imul edx, [ecx] cmp [esp+4+arg_4], 0 jnz short loc_4CFAEC mov [eax+10h], edx mov edx, [ecx] mov esi, 800h sub esi, edx shr esi, 5 add esi, edx mov [ecx], esi jmp short loc_4CFB03 ; --------------------------------------------------------------------------- loc_4CFAEC: ; CODE XREF: sub_4CFAC0+15j add [eax+8], edx adc dword ptr [eax+0Ch], 0 sub esi, edx mov [eax+10h], esi mov edx, [ecx] mov esi, edx shr esi, 5 sub edx, esi mov [ecx], edx loc_4CFB03: ; CODE XREF: sub_4CFAC0+2Aj mov ecx, [eax+10h] cmp ecx, 1000000h pop esi jnb short locret_4CFB1C shl ecx, 8 mov [eax+10h], ecx mov ecx, eax call loc_4CF640 locret_4CFB1C: ; CODE XREF: sub_4CFAC0+4Dj retn 8 sub_4CFAC0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CFB20 proc near ; CODE XREF: sub_4D0020+52p ; sub_4D0020+E4p arg_0 = dword ptr 4 arg_4 = dword ptr 8 push ebx push ebp push esi mov esi, [esp+0Ch+arg_0] push edi mov ebp, ecx mov ebx, 1 mov edx, 3 loc_4CFB34: ; CODE XREF: sub_4CFB20+8Cj mov edi, [esp+10h+arg_4] sub edx, 1 mov ecx, edx shr edi, cl mov ecx, [esi+10h] mov eax, ecx shr eax, 0Bh imul eax, [ebp+ebx*4+0] and edi, 1 test edi, edi mov [esp+10h+arg_0], edx jnz short loc_4CFB70 mov [esi+10h], eax mov eax, [ebp+ebx*4+0] mov ecx, 800h sub ecx, eax shr ecx, 5 add ecx, eax mov [ebp+ebx*4+0], ecx jmp short loc_4CFB8B ; --------------------------------------------------------------------------- loc_4CFB70: ; CODE XREF: sub_4CFB20+35j add [esi+8], eax adc dword ptr [esi+0Ch], 0 sub ecx, eax mov [esi+10h], ecx mov eax, [ebp+ebx*4+0] mov ecx, eax shr ecx, 5 sub eax, ecx mov [ebp+ebx*4+0], eax loc_4CFB8B: ; CODE XREF: sub_4CFB20+4Ej mov eax, [esi+10h] cmp eax, 1000000h jnb short loc_4CFBA6 shl eax, 8 mov ecx, esi mov [esi+10h], eax call loc_4CF640 mov edx, [esp+10h+arg_0] loc_4CFBA6: ; CODE XREF: sub_4CFB20+73j add ebx, ebx or ebx, edi test edx, edx jnz short loc_4CFB34 pop edi pop esi pop ebp pop ebx retn 8 sub_4CFB20 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CFBC0 proc near ; CODE XREF: sub_4D0020+136p arg_0 = dword ptr 4 arg_4 = dword ptr 8 push ebx push ebp push esi mov esi, [esp+0Ch+arg_0] push edi mov ebp, ecx mov ebx, 1 mov edx, 8 loc_4CFBD4: ; CODE XREF: sub_4CFBC0+8Cj mov edi, [esp+10h+arg_4] sub edx, 1 mov ecx, edx shr edi, cl mov ecx, [esi+10h] mov eax, ecx shr eax, 0Bh imul eax, [ebp+ebx*4+0] and edi, 1 test edi, edi mov [esp+10h+arg_0], edx jnz short loc_4CFC10 mov [esi+10h], eax mov eax, [ebp+ebx*4+0] mov ecx, 800h sub ecx, eax shr ecx, 5 add ecx, eax mov [ebp+ebx*4+0], ecx jmp short loc_4CFC2B ; --------------------------------------------------------------------------- loc_4CFC10: ; CODE XREF: sub_4CFBC0+35j add [esi+8], eax adc dword ptr [esi+0Ch], 0 sub ecx, eax mov [esi+10h], ecx mov eax, [ebp+ebx*4+0] mov ecx, eax shr ecx, 5 sub eax, ecx mov [ebp+ebx*4+0], eax loc_4CFC2B: ; CODE XREF: sub_4CFBC0+4Ej mov eax, [esi+10h] cmp eax, 1000000h jnb short loc_4CFC46 shl eax, 8 mov ecx, esi mov [esi+10h], eax call loc_4CF640 mov edx, [esp+10h+arg_0] loc_4CFC46: ; CODE XREF: sub_4CFBC0+73j add ebx, ebx or ebx, edi test edx, edx jnz short loc_4CFBD4 pop edi pop esi pop ebp pop ebx retn 8 sub_4CFBC0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CFC60 proc near ; CODE XREF: sub_4D0770+EDp ; CEncoder_CodeOneBlock+67Cp arg_0 = dword ptr 4 arg_4 = dword ptr 8 push ebx push ebp push esi mov esi, [esp+0Ch+arg_0] push edi mov ebp, ecx mov ebx, 1 mov edx, 6 loc_4CFC74: ; CODE XREF: sub_4CFC60+8Cj mov edi, [esp+10h+arg_4] sub edx, 1 mov ecx, edx shr edi, cl mov ecx, [esi+10h] mov eax, ecx shr eax, 0Bh imul eax, [ebp+ebx*4+0] and edi, 1 test edi, edi mov [esp+10h+arg_0], edx jnz short loc_4CFCB0 mov [esi+10h], eax mov eax, [ebp+ebx*4+0] mov ecx, 800h sub ecx, eax shr ecx, 5 add ecx, eax mov [ebp+ebx*4+0], ecx jmp short loc_4CFCCB ; --------------------------------------------------------------------------- loc_4CFCB0: ; CODE XREF: sub_4CFC60+35j add [esi+8], eax adc dword ptr [esi+0Ch], 0 sub ecx, eax mov [esi+10h], ecx mov eax, [ebp+ebx*4+0] mov ecx, eax shr ecx, 5 sub eax, ecx mov [ebp+ebx*4+0], eax loc_4CFCCB: ; CODE XREF: sub_4CFC60+4Ej mov eax, [esi+10h] cmp eax, 1000000h jnb short loc_4CFCE6 shl eax, 8 mov ecx, esi mov [esi+10h], eax call loc_4CF640 mov edx, [esp+10h+arg_0] loc_4CFCE6: ; CODE XREF: sub_4CFC60+73j add ebx, ebx or ebx, edi test edx, edx jnz short loc_4CFC74 pop edi pop esi pop ebp pop ebx retn 8 sub_4CFC60 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CFD00 proc near ; CODE XREF: sub_4D0770+109p ; CEncoder_CodeOneBlock+6D5p arg_0 = dword ptr 4 arg_4 = dword ptr 8 push ebx push ebp push esi mov esi, [esp+0Ch+arg_0] push edi mov ebp, ecx mov edi, 1 mov [esp+10h+arg_0], 4 loc_4CFD17: ; CODE XREF: sub_4CFD00+87j mov ecx, [esi+10h] mov ebx, [esp+10h+arg_4] mov eax, ecx shr eax, 0Bh imul eax, [ebp+edi*4+0] and ebx, 1 test ebx, ebx jnz short loc_4CFD48 mov [esi+10h], eax mov eax, [ebp+edi*4+0] mov ecx, 800h sub ecx, eax shr ecx, 5 add ecx, eax mov [ebp+edi*4+0], ecx jmp short loc_4CFD63 ; --------------------------------------------------------------------------- loc_4CFD48: ; CODE XREF: sub_4CFD00+2Dj add [esi+8], eax adc dword ptr [esi+0Ch], 0 sub ecx, eax mov [esi+10h], ecx mov eax, [ebp+edi*4+0] mov edx, eax shr edx, 5 sub eax, edx mov [ebp+edi*4+0], eax loc_4CFD63: ; CODE XREF: sub_4CFD00+46j mov eax, [esi+10h] cmp eax, 1000000h jnb short loc_4CFD7A shl eax, 8 mov ecx, esi mov [esi+10h], eax call loc_4CF640 loc_4CFD7A: ; CODE XREF: sub_4CFD00+6Bj shr [esp+10h+arg_4], 1 add edi, edi or edi, ebx sub [esp+10h+arg_0], 1 jnz short loc_4CFD17 pop edi pop esi pop ebp pop ebx retn 8 sub_4CFD00 endp ; =============== S U B R O U T I N E ======================================= sub_4CFD90 proc near ; CODE XREF: CEncoder_CodeOneBlock+6AFp arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch arg_C = dword ptr 10h mov eax, [esp+arg_8] test eax, eax push edi mov edi, 1 jle loc_4CFE26 push ebx push ebp mov ebp, [esp+0Ch+arg_0] push esi mov esi, [esp+10h+arg_4] mov [esp+10h+arg_8], eax loc_4CFDB1: ; CODE XREF: sub_4CFD90+91j mov ecx, [esi+10h] mov ebx, [esp+10h+arg_C] mov eax, ecx shr eax, 0Bh imul eax, [ebp+edi*4+0] and ebx, 1 test ebx, ebx jnz short loc_4CFDE2 mov [esi+10h], eax mov eax, [ebp+edi*4+0] mov ecx, 800h sub ecx, eax shr ecx, 5 add ecx, eax mov [ebp+edi*4+0], ecx jmp short loc_4CFDFD ; --------------------------------------------------------------------------- loc_4CFDE2: ; CODE XREF: sub_4CFD90+37j add [esi+8], eax adc dword ptr [esi+0Ch], 0 sub ecx, eax mov [esi+10h], ecx mov eax, [ebp+edi*4+0] mov edx, eax shr edx, 5 sub eax, edx mov [ebp+edi*4+0], eax loc_4CFDFD: ; CODE XREF: sub_4CFD90+50j mov eax, [esi+10h] cmp eax, 1000000h jnb short loc_4CFE14 shl eax, 8 mov ecx, esi mov [esi+10h], eax call loc_4CF640 loc_4CFE14: ; CODE XREF: sub_4CFD90+75j shr [esp+10h+arg_C], 1 add edi, edi or edi, ebx sub [esp+10h+arg_8], 1 jnz short loc_4CFDB1 pop esi pop ebp pop ebx loc_4CFE26: ; CODE XREF: sub_4CFD90+Cj pop edi retn sub_4CFD90 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CFE30 proc near ; CODE XREF: CEncoder_CodeOneBlock+190p ; CEncoder_CodeOneBlock+2CCp arg_0 = dword ptr 4 arg_4 = byte ptr 8 push ebx push ebp push esi mov esi, [esp+0Ch+arg_0] push edi mov ebx, ecx mov ebp, 1 mov edx, 8 loc_4CFE44: ; CODE XREF: sub_4CFE30+88j movzx edi, [esp+10h+arg_4] sub edx, 1 mov cl, dl shr edi, cl mov ecx, [esi+10h] mov eax, ecx shr eax, 0Bh imul eax, [ebx+ebp*4] and edi, 1 test edi, edi mov [esp+10h+arg_0], edx jnz short loc_4CFE7E mov [esi+10h], eax mov eax, [ebx+ebp*4] mov ecx, 800h sub ecx, eax shr ecx, 5 add ecx, eax mov [ebx+ebp*4], ecx jmp short loc_4CFE97 ; --------------------------------------------------------------------------- loc_4CFE7E: ; CODE XREF: sub_4CFE30+35j add [esi+8], eax adc dword ptr [esi+0Ch], 0 sub ecx, eax mov [esi+10h], ecx mov eax, [ebx+ebp*4] mov ecx, eax shr ecx, 5 sub eax, ecx mov [ebx+ebp*4], eax loc_4CFE97: ; CODE XREF: sub_4CFE30+4Cj mov eax, [esi+10h] cmp eax, 1000000h jnb short loc_4CFEB2 shl eax, 8 mov ecx, esi mov [esi+10h], eax call loc_4CF640 mov edx, [esp+10h+arg_0] loc_4CFEB2: ; CODE XREF: sub_4CFE30+6Fj add ebp, ebp or ebp, edi test edx, edx jnz short loc_4CFE44 pop edi pop esi pop ebp pop ebx retn 8 sub_4CFE30 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4CFED0 proc near ; CODE XREF: CEncoder_CodeOneBlock+300p var_4 = dword ptr -4 arg_0 = dword ptr 4 arg_4 = byte ptr 8 arg_8 = byte ptr 0Ch push ecx push ebx push ebp push esi mov esi, [esp+10h+arg_0] push edi mov [esp+14h+var_4], ecx mov ebx, 1 mov edx, 8 jmp short loc_4CFEF0 ; --------------------------------------------------------------------------- align 10h loc_4CFEF0: ; CODE XREF: sub_4CFED0+17j ; sub_4CFED0+ADj movzx ebp, [esp+14h+arg_4] movzx edi, [esp+14h+arg_8] sub edx, 1 movzx ecx, dl shr ebp, cl shr edi, cl mov ecx, [esp+14h+var_4] mov [esp+14h+arg_0], edx mov edx, [esi+10h] and ebp, 1 lea eax, [ebp+1] shl eax, 8 add eax, ebx lea ecx, [ecx+eax*4] mov eax, edx shr eax, 0Bh imul eax, [ecx] and edi, 1 test edi, edi jnz short loc_4CFF41 mov [esi+10h], eax mov eax, [ecx] mov edx, 800h sub edx, eax shr edx, 5 add edx, eax mov [ecx], edx jmp short loc_4CFF58 ; --------------------------------------------------------------------------- loc_4CFF41: ; CODE XREF: sub_4CFED0+5Aj add [esi+8], eax adc dword ptr [esi+0Ch], 0 sub edx, eax mov [esi+10h], edx mov eax, [ecx] mov edx, eax shr edx, 5 sub eax, edx mov [ecx], eax loc_4CFF58: ; CODE XREF: sub_4CFED0+6Fj mov eax, [esi+10h] cmp eax, 1000000h jnb short loc_4CFF6F shl eax, 8 mov ecx, esi mov [esi+10h], eax call loc_4CF640 loc_4CFF6F: ; CODE XREF: sub_4CFED0+90j mov edx, [esp+14h+arg_0] add ebx, ebx or ebx, edi cmp ebp, edi jnz short loc_4CFF8B test edx, edx jnz loc_4CFEF0 pop edi pop esi pop ebp pop ebx pop ecx retn 0Ch ; --------------------------------------------------------------------------- loc_4CFF8B: ; CODE XREF: sub_4CFED0+A9j test edx, edx jz loc_4D0012 loc_4CFF93: ; CODE XREF: sub_4CFED0+140j movzx edi, [esp+14h+arg_8] mov ebp, [esp+14h+var_4] sub edx, 1 mov cl, dl shr edi, cl mov ecx, [esi+10h] mov eax, ecx shr eax, 0Bh imul eax, [ebp+ebx*4+0] and edi, 1 test edi, edi mov [esp+14h+arg_0], edx jnz short loc_4CFFD4 mov [esi+10h], eax mov eax, [ebp+ebx*4+0] mov ecx, 800h sub ecx, eax shr ecx, 5 add ecx, eax mov [ebp+ebx*4+0], ecx jmp short loc_4CFFEF ; --------------------------------------------------------------------------- loc_4CFFD4: ; CODE XREF: sub_4CFED0+E9j add [esi+8], eax adc dword ptr [esi+0Ch], 0 sub ecx, eax mov [esi+10h], ecx mov eax, [ebp+ebx*4+0] mov ecx, eax shr ecx, 5 sub eax, ecx mov [ebp+ebx*4+0], eax loc_4CFFEF: ; CODE XREF: sub_4CFED0+102j mov eax, [esi+10h] cmp eax, 1000000h jnb short loc_4D000A shl eax, 8 mov ecx, esi mov [esi+10h], eax call loc_4CF640 mov edx, [esp+14h+arg_0] loc_4D000A: ; CODE XREF: sub_4CFED0+127j add ebx, ebx or ebx, edi test edx, edx jnz short loc_4CFF93 loc_4D0012: ; CODE XREF: sub_4CFED0+BDj pop edi pop esi pop ebp pop ebx pop ecx retn 0Ch sub_4CFED0 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4D0020 proc near ; CODE XREF: sub_4D0770+C6p ; CEncoder_CodeOneBlock+56Dp ... arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch push ebp mov ebp, [esp+4+arg_4] cmp ebp, 8 push esi mov esi, [esp+8+arg_0] push edi mov edi, ecx jnb short loc_4D007D mov eax, [esi+10h] shr eax, 0Bh imul eax, [edi] mov [esi+10h], eax mov eax, [edi] mov ecx, 800h sub ecx, eax loc_4D0047: ; DATA XREF: .rdata:0050C3BCo shr ecx, 5 add ecx, eax mov [edi], ecx mov eax, [esi+10h] cmp eax, 1000000h jnb short loc_4D0065 shl eax, 8 loc_4D005B: ; DATA XREF: .rdata:005064B0o mov ecx, esi mov [esi+10h], eax call loc_4CF640 loc_4D0065: ; CODE XREF: sub_4D0020+36j mov edx, [esp+0Ch+arg_8] push ebp shl edx, 5 push esi lea ecx, [edx+edi+8] call sub_4CFB20 pop edi pop esi pop ebp retn 0Ch ; --------------------------------------------------------------------------- loc_4D007D: ; CODE XREF: sub_4D0020+10j mov ecx, [esi+10h] mov eax, ecx shr eax, 0Bh imul eax, [edi] add [esi+8], eax adc dword ptr [esi+0Ch], 0 sub ecx, eax mov [esi+10h], ecx mov eax, [edi] mov ecx, eax shr ecx, 5 sub eax, ecx mov [edi], eax mov eax, [esi+10h] cmp eax, 1000000h jnb short loc_4D00B6 shl eax, 8 mov ecx, esi mov [esi+10h], eax call loc_4CF640 loc_4D00B6: ; CODE XREF: sub_4D0020+87j cmp ebp, 10h jnb short loc_4D010F mov edx, [esi+10h] shr edx, 0Bh imul edx, [edi+4] mov [esi+10h], edx mov eax, [edi+4] mov ecx, 800h sub ecx, eax shr ecx, 5 add ecx, eax mov [edi+4], ecx mov eax, [esi+10h] cmp eax, 1000000h jnb short loc_4D00F1 shl eax, 8 mov ecx, esi mov [esi+10h], eax call loc_4CF640 loc_4D00F1: ; CODE XREF: sub_4D0020+C2j mov edx, [esp+0Ch+arg_8] add ebp, 0FFFFFFF8h push ebp shl edx, 5 push esi lea ecx, [edx+edi+208h] call sub_4CFB20 pop edi pop esi pop ebp retn 0Ch ; --------------------------------------------------------------------------- loc_4D010F: ; CODE XREF: sub_4D0020+99j mov ecx, [esi+10h] mov eax, ecx shr eax, 0Bh imul eax, [edi+4] add [esi+8], eax adc dword ptr [esi+0Ch], 0 sub ecx, eax mov [esi+10h], ecx mov eax, [edi+4] mov ecx, eax shr ecx, 5 sub eax, ecx mov [edi+4], eax mov eax, [esi+10h] cmp eax, 1000000h jnb short loc_4D014B shl eax, 8 mov ecx, esi mov [esi+10h], eax call loc_4CF640 loc_4D014B: ; CODE XREF: sub_4D0020+11Cj add ebp, 0FFFFFFF0h push ebp push esi lea ecx, [edi+408h] call sub_4CFBC0 pop edi pop esi pop ebp retn 0Ch sub_4D0020 endp ; =============== S U B R O U T I N E ======================================= NCompress_NLZMA_CEncoder_CEncoder proc near ; CODE XREF: Compress_lzma_internal+149p mov eax, ecx mov dword ptr [eax+4], offset ICompressSetOutStream_vftable mov dword ptr [eax+8], offset ICompressSetCoderProperties_vftable mov dword ptr [eax+0Ch], offset ICompressWriteCoderProperties_vftable xor ecx, ecx mov [eax+24h], ecx mov dword ptr [eax], offset NCompress_NLZMA_CEncoder_vftable mov dword ptr [eax+4], offset NCompress_NLZMA_CEncoder_vftable_ICompressSetOutStream mov dword ptr [eax+8], offset NCompress_NLZMA_CEncoder_vftable_ICompressSetCoderProperties mov dword ptr [eax+0Ch], offset NCompress_NLZMA_CEncoder_vftable_ICompressWriteCoderProperties mov [eax+40h], ecx mov [eax+44h], ecx mov [eax+54h], ecx mov [eax+60h], ecx mov [eax+32650h], ecx mov dword ptr [eax+32EF8h], 20h mov dword ptr [eax+33B58h], 2Ch mov dword ptr [eax+33B5Ch], 2 mov [eax+33B64h], ecx mov dword ptr [eax+33B6Ch], 00400000h mov edx, 3 mov [eax+33B60h], edx mov [eax+33B68h], edx mov [eax+33B8Ch], ecx mov [eax+33B90h], ecx mov [eax+33B94h], cl mov [eax+0B4h], ecx mov [eax+0A4h], ecx mov dword ptr [eax+0B0h], 20h mov dword ptr [eax+0D4h], 1 mov dword ptr [eax+0CCh], 4 mov [eax+0D0h], ecx mov [eax+0D8h], ecx mov [eax+32EF4h], cl retn NCompress_NLZMA_CEncoder_CEncoder endp ; =============== S U B R O U T I N E ======================================= ; int __thiscall sub_4D0250(void *Memory, char) sub_4D0250 proc near ; DATA XREF: .rdata:00517B0Co arg_0 = byte ptr 4 push esi mov esi, ecx call sub_4CF810 test [esp+4+arg_0], 1 jz short loc_4D0268 push esi ; Memory call j__free add esp, 4 loc_4D0268: ; CODE XREF: sub_4D0250+Dj mov eax, esi pop esi retn 4 sub_4D0250 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4D0270 proc near ; CODE XREF: CEncoder_SetStreams+14p push esi mov esi, ecx mov eax, [esi+40h] test eax, eax push edi mov edi, 100000h jz short loc_4D0297 cmp [esi+50h], edi jz short loc_4D02C5 test eax, eax jz short loc_4D0297 push 8000h ; dwFreeType push 0 ; dwSize push eax ; lpAddress call ds:VirtualFree loc_4D0297: ; CODE XREF: sub_4D0270+Ej ; sub_4D0270+17j push 4 ; flProtect push 1000h ; flAllocationType push edi ; dwSize push 0 ; lpAddress mov dword ptr [esi+40h], 0 mov [esi+50h], edi call ds:VirtualAlloc test eax, eax mov [esi+40h], eax setnz al test al, al jnz short loc_4D02C5 pop edi mov eax, 8007000Eh pop esi retn ; --------------------------------------------------------------------------- loc_4D02C5: ; CODE XREF: sub_4D0270+13j ; sub_4D0270+4Bj mov eax, [esi+33B68h] mov ecx, [esi+33B64h] cmp dword ptr [esi+0D4h], 0 push ebx push eax push ecx lea ecx, [esi+32650h] setnz bl call sub_4CD940 test al, al jz short loc_4D034F mov ecx, [esi+33B6Ch] mov edx, 1000000h cmp edx, ecx sbb eax, eax neg eax push ebp mov ebp, [esi+32EF8h] mov [esi+0D8h], eax mov eax, ebp shr eax, 1 add eax, 10h test bl, bl jnz short loc_4D0318 shr eax, 1 loc_4D0318: ; CODE XREF: sub_4D0270+A4j mov edx, [esi+33B90h] test edx, edx jz short loc_4D0324 mov eax, edx loc_4D0324: ; CODE XREF: sub_4D0270+B0j push offset off_546E20 push 111h push ebp push 1000h push ecx lea edi, [esi+84h] push edi mov [esi+0B0h], eax call sub_4CBA60 add esp, 18h test eax, eax pop ebp jnz short loc_4D0358 loc_4D034F: ; CODE XREF: sub_4D0270+7Bj pop ebx pop edi mov eax, 8007000Eh pop esi retn ; --------------------------------------------------------------------------- loc_4D0358: ; CODE XREF: sub_4D0270+DDj mov [esi+80h], edi add esi, 68h push esi push edi call sub_4CCAA0 add esp, 8 pop ebx pop edi xor eax, eax pop esi retn sub_4D0270 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= CEncoder_SetStreams proc near ; CODE XREF: CEncoder_CodeReal+4Ap arg_0 = dword ptr 4 arg_4 = dword ptr 8 mov eax, [esp+arg_0] push esi mov esi, ecx mov [esi+33B84h], eax mov byte ptr [esi+33B80h], 0 call sub_4D0270 test eax, eax jnz loc_4D0441 mov edx, [esp+4+arg_4] mov ecx, [esi+4] lea eax, [esi+4] push edx push eax mov eax, [ecx+0Ch] call eax test eax, eax jnz loc_4D0441 mov ecx, esi call sub_4CDEA0 test eax, eax jnz short loc_4D0441 cmp [esi+32EF4h], al jnz short loc_4D03DB mov ecx, esi call CEncoder_FillDistancesPrices mov ecx, esi call CEncoder_FillAlignPrices loc_4D03DB: ; CODE XREF: CEncoder_SetStreams+4Bj mov ecx, [esi+32EF8h] sub ecx, 1 mov [esi+2D9C0h], ecx mov ecx, [esi+33B5Ch] mov edx, 1 shl edx, cl lea ecx, [esi+28DB8h] push edx call sub_4CF780 mov ecx, [esi+33B5Ch] mov eax, [esi+32EF8h] mov edx, 1 shl edx, cl sub eax, 1 lea ecx, [esi+2DA04h] mov [esi+3260Ch], eax push edx call sub_4CF780 mov dword ptr [esi+33B78h], 0 mov dword ptr [esi+33B7Ch], 0 xor eax, eax loc_4D0441: ; CODE XREF: CEncoder_SetStreams+1Bj ; CEncoder_SetStreams+34j ... pop esi retn 10h CEncoder_SetStreams endp ;Compress_lzma_internal proc near ; CODE XREF: Compress_lzma+34p _starcraft_compress_lzma proc near ; CODE XREF: Compress_lzma+34p ; sub_4D0450 var_58 = dword ptr -58h var_54 = dword ptr -54h var_50 = dword ptr -50h var_4C = dword ptr -4Ch var_48 = dword ptr -48h var_44 = dword ptr -44h var_40 = dword ptr -40h var_3C = word ptr -3Ch var_34 = dword ptr -34h var_2C = word ptr -2Ch var_24 = dword ptr -24h var_1C = dword ptr -1Ch var_14 = dword ptr -14h var_C = dword ptr -0Ch var_4 = dword ptr -4 pbInBuffer = dword ptr 4 cbInBuffer = dword ptr 8 pcbInBuffer = dword ptr 0Ch pbOutBuffer = dword ptr 10h cbOutBuffer = dword ptr 14h dummy = dword ptr 18h pcbOutBuffer = dword ptr 1Ch pfnAllocateMemory= dword ptr 20h pfnFreeMemory = dword ptr 24h pfnGiveData = dword ptr 28h push 0FFFFFFFFh push offset loc_4DA0FB mov eax, dword ptr fs:[0] push eax sub esp, 4Ch push ebx push ebp push esi push edi mov eax, dword_544960 xor eax, esp push eax lea eax, [esp+6Ch+var_C] mov dword ptr fs:[0], eax mov eax, dword_553598 xor ebx, ebx cmp eax, ebx jnz short loc_4D04A1 push 0Ch ; Size call _operator_new ; operator new(uint) add esp, 4 cmp eax, ebx jz short loc_4D049A mov [eax], ebx mov [eax+4], ebx mov [eax+8], ebx jmp short loc_4D049C ; --------------------------------------------------------------------------- loc_4D049A: ; CODE XREF: Compress_lzma_internal+3Ej xor eax, eax loc_4D049C: ; CODE XREF: Compress_lzma_internal+48j mov dword ptr dword_553598, eax loc_4D04A1: ; CODE XREF: Compress_lzma_internal+30j cmp [eax], ebx jnz short loc_4D04B3 mov ecx, [esp+6Ch+pfnAllocateMemory] mov [eax], ecx mov eax, dword_553598 loc_4D04B3: ; CODE XREF: Compress_lzma_internal+53j cmp eax, ebx jnz short loc_4D04D6 push 0Ch ; Size call _operator_new ; operator new(uint) add esp, 4 cmp eax, ebx jz short loc_4D04CF mov [eax], ebx mov [eax+4], ebx mov [eax+8], ebx jmp short loc_4D04D1 ; --------------------------------------------------------------------------- loc_4D04CF: ; CODE XREF: Compress_lzma_internal+73j xor eax, eax loc_4D04D1: ; CODE XREF: Compress_lzma_internal+7Dj mov dword_553598, eax loc_4D04D6: ; CODE XREF: Compress_lzma_internal+65j cmp [eax+4], ebx jnz short loc_4D04EA mov edx, [esp+6Ch+pfnFreeMemory] mov [eax+4], edx mov eax, dword_553598 loc_4D04EA: ; CODE XREF: Compress_lzma_internal+89j cmp [eax+8], ebx jnz short loc_4D04F9 mov ecx, [esp+6Ch+pfnGiveData] mov [eax+8], ecx loc_4D04F9: ; CODE XREF: Compress_lzma_internal+9Dj mov edx, [esp+6Ch+pcbOutBuffer] mov ebp, [esp+6Ch+pcbInBuffer] cmp ebp, ebx mov esi, [esp+6Ch+cbInBuffer] mov [edx], ebx mov edx, 1 mov eax, esi mov ecx, ebp ja short loc_4D0520 cmp esi, ebx jbe short loc_4D053A jmp short loc_4D0520 ; --------------------------------------------------------------------------- align 10h loc_4D0520: ; CODE XREF: Compress_lzma_internal+C5j ; Compress_lzma_internal+CBj ... shrd eax, ecx, 1 add edx, edx shr ecx, 1 cmp edx, 2000000h ja short loc_4D053A cmp ecx, ebx ja short loc_4D0520 jb short loc_4D053A cmp eax, ebx ja short loc_4D0520 loc_4D053A: ; CODE XREF: Compress_lzma_internal+C9j ; Compress_lzma_internal+DEj ... mov eax, 13h push 33B98h ; Size mov [esp+70h+var_48], 470h mov [esp+70h+var_44], 400h mov [esp+70h+var_40], 450h mov [esp+70h+var_3C], ax mov [esp+70h+var_2C], ax mov word ptr [esp+70h+var_1C], ax mov [esp+70h+var_34], 2 mov [esp+70h+var_24], edx mov [esp+70h+var_14], 40h mov [esp+70h+var_58], ebx call _operator_new ; operator new(uint) add esp, 4 mov [esp+6Ch+var_4C], eax cmp eax, ebx mov [esp+6Ch+var_4], ebx jz short loc_4D05A4 mov ecx, eax call NCompress_NLZMA_CEncoder_CEncoder mov [esp+6Ch+var_54], eax jmp short loc_4D05AA ; --------------------------------------------------------------------------- loc_4D05A4: ; CODE XREF: Compress_lzma_internal+145j mov [esp+6Ch+var_54], ebx mov eax, ebx loc_4D05AA: ; CODE XREF: Compress_lzma_internal+152j or edi, 0FFFFFFFFh cmp eax, ebx mov [esp+6Ch+var_4], edi jz short loc_4D05D1 mov ecx, [eax+8] push 3 lea edx, [esp+70h+var_3C] push edx add eax, 8 lea edx, [esp+74h+var_48] push edx push eax mov eax, [ecx+0Ch] call eax ; ICompressSetCodeProperties::SetCoderProperties test eax, eax jz short loc_4D05D5 loc_4D05D1: ; CODE XREF: Compress_lzma_internal+163j mov [esp+6Ch+var_58], edi loc_4D05D5: ; CODE XREF: Compress_lzma_internal+17Fj push 28h ; Size call _operator_new ; operator new(uint) add esp, 4 cmp eax, ebx jz short loc_4D060E mov ecx, [esp+6Ch+pbInBuffer] mov [eax+4], ebx add dword ptr [eax+4], 1 mov dword ptr [eax], offset off_517A90 mov [eax+8], ecx mov [eax+10h], esi mov [eax+14h], ebp mov [eax+18h], ebx mov [eax+1Ch], ebx mov [eax+20h], bl mov edi, eax ; EDI = pInStreamMemory mov [esp+6Ch+var_50], eax jmp short loc_4D0614 ; --------------------------------------------------------------------------- loc_4D060E: ; CODE XREF: Compress_lzma_internal+191j xor edi, edi mov [esp+6Ch+var_50], edi loc_4D0614: ; CODE XREF: Compress_lzma_internal+1BCj push 28h ; Size call _operator_new ; operator new(uint) add esp, 4 cmp eax, ebx jz short loc_4D0657 mov edx, [esp+6Ch+pbOutBuffer] mov ecx, [esp+6Ch+cbOutBuffer] mov [eax+4], ebx add dword ptr [eax+4], 1 mov [eax+8], edx mov edx, [esp+6Ch+dummy] mov dword ptr [eax], offset off_517AA4 mov [eax+10h], ecx mov [eax+14h], edx mov [eax+18h], ebx mov [eax+1Ch], ebx mov [eax+20h], bl mov esi, eax ; ESI = pOutStreamMemory jmp short loc_4D0659 ; --------------------------------------------------------------------------- loc_4D0657: ; CODE XREF: Compress_lzma_internal+1D0j xor esi, esi loc_4D0659: ; CODE XREF: Compress_lzma_internal+205j cmp edi, ebx jz short loc_4D0661 cmp esi, ebx jnz short loc_4D0669 loc_4D0661: ; CODE XREF: Compress_lzma_internal+20Bj mov [esp+6Ch+var_58], 0FFFFFFFFh loc_4D0669: ; CODE XREF: Compress_lzma_internal+20Fj mov eax, [esi] ; EAX = pOutStreamMemory->vftable mov ecx, [eax+10h] ; ECX = push ebx mov edi, 1 push edi push ebx push esi call ecx test eax, eax jz short loc_4D0681 mov [esp+6Ch+var_58], edi loc_4D0681: ; CODE XREF: Compress_lzma_internal+22Bj mov eax, [esp+6Ch+var_54] mov edx, [eax+0Ch] add eax, 0Ch push esi push eax mov eax, [edx+0Ch] call eax test eax, eax jz short loc_4D069A mov [esp+6Ch+var_58], edi loc_4D069A: ; CODE XREF: Compress_lzma_internal+244j xor edi, edi jmp short loc_4D06A4 ; --------------------------------------------------------------------------- align 10h loc_4D06A0: ; CODE XREF: Compress_lzma_internal+27Fj mov ebp, [esp+6Ch+pcbInBuffer] loc_4D06A4: ; CODE XREF: Compress_lzma_internal+24Cj mov eax, [esp+6Ch+cbInBuffer] push ebx push 1 mov edx, ebp mov ecx, edi call __allshr ; Microsoft VisualC 2-8/net runtime push eax mov eax, [esi] mov ecx, [eax+10h] push esi call ecx test eax, eax jz short loc_4D06C9 mov [esp+6Ch+var_58], 1 loc_4D06C9: ; CODE XREF: Compress_lzma_internal+26Fj add edi, 8 cmp edi, 40h jl short loc_4D06A0 mov ebp, [esp+6Ch+var_54] xor edi, edi cmp [esp+6Ch+var_58], ebx jnz short loc_4D0723 mov eax, [esp+6Ch+var_50] mov edx, [ebp+0] mov ecx, [edx+0Ch] push ebx push ebx push ebx push esi push eax push ebp call ecx mov ecx, [esi+18h] mov edi, eax mov eax, [esi+1Ch] cmp eax, ebx ja short loc_4D0700 cmp ecx, 0FFFFFFFFh jbe short loc_4D0709 loc_4D0700: ; CODE XREF: Compress_lzma_internal+2A9j or ecx, 0FFFFFFFFh mov [esp+6Ch+pcbInBuffer], ebx jmp short loc_4D070D ; --------------------------------------------------------------------------- loc_4D0709: ; CODE XREF: Compress_lzma_internal+2AEj mov [esp+6Ch+pcbInBuffer], eax loc_4D070D: ; CODE XREF: Compress_lzma_internal+2B7j mov edx, [esp+6Ch+pcbOutBuffer] mov [edx], ecx cmp [esi+20h], bl jz short loc_4D0723 mov [esp+6Ch+var_58], 1 loc_4D0723: ; CODE XREF: Compress_lzma_internal+28Bj ; Compress_lzma_internal+2C9j mov eax, [esp+6Ch+var_50] cmp eax, ebx jz short loc_4D0733 mov ecx, [eax] mov edx, [ecx+8] push eax call edx loc_4D0733: ; CODE XREF: Compress_lzma_internal+2D9j mov eax, [esi] mov ecx, [eax+8] push esi call ecx mov edx, [ebp+0] mov eax, [edx+10h] push 1 mov ecx, ebp call eax mov eax, [esp+6Ch+var_58] cmp eax, ebx jnz short loc_4D0755 neg edi sbb edi, edi mov eax, edi loc_4D0755: ; CODE XREF: Compress_lzma_internal+2FDj mov ecx, [esp+6Ch+var_C] mov dword ptr fs:[0], ecx pop ecx pop edi pop esi pop ebp pop ebx add esp, 58h retn _starcraft_compress_lzma endp ;Compress_lzma_internal endp ; =============== S U B R O U T I N E ======================================= Compress_lzma proc near ; DATA XREF: .rdata:00509684o pbOutBuffer = dword ptr 4 pcbOutBuffer = dword ptr 8 pbInBuffer = dword ptr 0Ch cbInBuffer = dword ptr 10h push esi push edi ; call sub_47F198 mov esi, [esp+8+pcbOutBuffer] ; ESI = pcbOutBuffer mov edi, [esp+8+cbInBuffer] ; EDI = cbInBuffer ; push offset GiveDataToCompress ; push offset FreeMemory_47F3AB ; push offset AllocateMemory_47F396 push esi ; pcbOutBuffer push 0 mov [eax+493E0h], eax push dword ptr [esi] ; cbOutBuffer push [esp+20h+pbOutBuffer] ; pbOutBuffer push 0 push edi ; cbInBuffer push [esp+2Ch+pbInBuffer] ; pbInBuffer ; call Compress_lzma_internal add esp, 28h sub eax, 0 jz short loc_47F401 mov [esi], edi dec eax loc_47F401: ; CODE XREF: Compress_lzma+3Fj pop edi pop esi retn Compress_lzma endp ; =============== S U B R O U T I N E ======================================= sub_4D0770 proc near ; CODE XREF: CEncoder_Flush+1Ap arg_0 = dword ptr 4 push edi mov edi, ecx cmp byte ptr [edi+33B94h], 0 jz loc_4D0881 movzx eax, byte ptr [edi+10h] mov ecx, [edi+38h] shl eax, 4 push ebx mov ebx, [esp+8+arg_0] add eax, ebx lea edx, [edi+eax*4+280F0h] push ebp push esi lea esi, [edi+28h] mov eax, ecx shr eax, 0Bh imul eax, [edx] add [esi+8], eax adc dword ptr [esi+0Ch], 0 sub ecx, eax mov [esi+10h], ecx mov eax, [edx] mov ecx, eax shr ecx, 5 sub eax, ecx mov [edx], eax mov eax, [esi+10h] cmp eax, 1000000h jnb short loc_4D07D3 shl eax, 8 mov ecx, esi mov [esi+10h], eax call loc_4CF640 loc_4D07D3: ; CODE XREF: sub_4D0770+54j movzx edx, byte ptr [edi+10h] mov ecx, [esi+10h] lea eax, [edi+edx*4+283F0h] shr ecx, 0Bh imul ecx, [eax] mov [esi+10h], ecx mov ecx, [eax] mov edx, 800h sub edx, ecx shr edx, 5 add edx, ecx mov [eax], edx mov eax, [esi+10h] cmp eax, 1000000h jnb short loc_4D0811 shl eax, 8 mov ecx, esi mov [esi+10h], eax call loc_4CF640 loc_4D0811: ; CODE XREF: sub_4D0770+92j movzx eax, byte ptr [edi+10h] mov cl, ds:kMatchNextStates[eax] push ebx mov [edi+10h], cl cmp byte ptr [edi+32EF4h], 0 push 0 lea ebp, [edi+28DB8h] push esi mov ecx, ebp setz byte ptr [esp+1Ch+arg_0] call sub_4D0020 cmp byte ptr [esp+10h+arg_0], 0 jz short loc_4D0854 add dword ptr [ebp+ebx*4+4C0Ch], 0FFFFFFFFh jnz short loc_4D0854 push ebx mov ecx, ebp call sub_4CF740 loc_4D0854: ; CODE XREF: sub_4D0770+D0j ; sub_4D0770+DAj push 3Fh push esi lea ecx, [edi+287B0h] call sub_4CFC60 push 1Ah push 3FFFFFFh mov ecx, esi call sub_4CF6E0 push 0Fh push esi lea ecx, [edi+28D78h] call sub_4CFD00 pop esi pop ebp pop ebx loc_4D0881: ; CODE XREF: sub_4D0770+Aj pop edi retn 4 sub_4D0770 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= CEncoder_Flush proc near ; CODE XREF: CEncoder_CodeOneBlock+BAp ; CEncoder_CodeOneBlock+1D0p ... arg_0 = dword ptr 4 push esi mov esi, ecx mov eax, [esi+0ECh] test eax, eax jnz short loc_4D08E5 mov eax, [esi+33B60h] and eax, [esp+4+arg_0] push ebx push edi push eax call sub_4D0770 lea ebx, [esi+28h] mov edi, 5 loc_4D08B7: ; CODE XREF: CEncoder_Flush+31j mov ecx, ebx call loc_4CF640 sub edi, 1 jnz short loc_4D08B7 mov ecx, [esi+4Ch] add esi, 40h cmp ecx, [esi+4] pop edi pop ebx jz short loc_4D08E3 loc_4D08D0: ; CODE XREF: CEncoder_Flush+51j mov ecx, esi call sub_4CF450 test eax, eax jnz short loc_4D08E5 mov edx, [esi+0Ch] cmp edx, [esi+4] jnz short loc_4D08D0 loc_4D08E3: ; CODE XREF: CEncoder_Flush+3Ej xor eax, eax loc_4D08E5: ; CODE XREF: CEncoder_Flush+Bj ; CEncoder_Flush+49j pop esi retn 4 CEncoder_Flush endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= CEncoder_CodeOneBlock proc near ; CODE XREF: CEncoder_CodeReal+B1p ; CEncoder_CodeReal+F5p var_20 = byte ptr -20h var_1C = dword ptr -1Ch var_18 = dword ptr -18h var_14 = dword ptr -14h var_10 = dword ptr -10h var_C = dword ptr -0Ch var_8 = dword ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch sub esp, 20h push ebp push esi mov esi, ecx push edi mov edi, [esi+33B84h] xor ebp, ebp cmp edi, ebp jz short loc_4D0952 mov eax, [edi] mov ecx, [eax+4] push edi call ecx mov eax, [esi+33B8Ch] cmp eax, ebp jz short loc_4D091E mov edx, [eax] push eax mov eax, [edx+8] call eax loc_4D091E: ; CODE XREF: CEncoder_CodeOneBlock+24j mov [esi+33B8Ch], edi mov ecx, [esi+80h] mov edx, [esi+68h] lea eax, [esi+33B88h] push ecx mov dword ptr [eax], offset loc_4CF210 mov [esi+0B8h], eax call edx add esp, 4 mov byte ptr [esi+33B95h], 1 mov [esi+33B84h], ebp loc_4D0952: ; CODE XREF: CEncoder_CodeOneBlock+12j mov eax, [esp+2Ch+arg_8] mov dword ptr [eax], 1 cmp byte ptr [esi+33B80h], 0 jz short loc_4D0974 mov eax, [esi+0ECh] pop edi pop esi pop ebp add esp, 20h retn 0Ch ; --------------------------------------------------------------------------- loc_4D0974: ; CODE XREF: CEncoder_CodeOneBlock+73j mov ecx, [esi+33B78h] or ecx, [esi+33B7Ch] push ebx mov byte ptr [esi+33B80h], 1 jnz loc_4D0A9C mov edx, [esi+80h] mov eax, [esi+70h] push edx call eax add esp, 4 test eax, eax jnz short loc_4D09B9 mov ecx, [esi+33B78h] push ecx mov ecx, esi call CEncoder_Flush pop ebx pop edi pop esi pop ebp add esp, 20h retn 0Ch ; --------------------------------------------------------------------------- loc_4D09B9: ; CODE XREF: CEncoder_CodeOneBlock+AFj lea edx, [esp+30h+var_4] push edx mov ecx, esi call sub_4CB3B0 movzx ecx, byte ptr [esi+10h] mov eax, [esi+33B60h] and eax, [esi+33B78h] mov edx, [esi+38h] lea edi, [esi+28h] shl ecx, 4 add eax, ecx shr edx, 0Bh imul edx, [esi+eax*4+280F0h] lea eax, [esi+eax*4+280F0h] mov [edi+10h], edx mov ecx, [eax] mov edx, 800h sub edx, ecx shr edx, 5 add edx, ecx mov [eax], edx mov eax, [edi+10h] cmp eax, 1000000h jnb short loc_4D0A1C shl eax, 8 mov ecx, edi mov [edi+10h], eax call loc_4CF640 loc_4D0A1C: ; CODE XREF: CEncoder_CodeOneBlock+11Dj movzx eax, byte ptr [esi+10h] mov cl, ds:kLiteralNextStates[eax] mov [esi+10h], cl mov edx, [esi+32F04h] mov eax, [esi+80h] mov ecx, [esi+6Ch] neg edx push edx push eax call ecx mov bl, al mov eax, [esi+32654h] add esp, 8 mov byte ptr [esp+30h+var_10], bl mov edx, [esp+30h+var_10] push edx movzx edx, byte ptr [esi+11h] push edi mov edi, [esi+3265Ch] and edi, [esi+33B78h] mov ecx, 8 sub cl, al shr edx, cl mov ecx, eax shl edi, cl add edx, edi imul edx, 0C00h add edx, [esi+32650h] mov ecx, edx call sub_4CFE30 add dword ptr [esi+32F04h], 0FFFFFFFFh add dword ptr [esi+33B78h], 1 mov [esi+11h], bl adc [esi+33B7Ch], ebp loc_4D0A9C: ; CODE XREF: CEncoder_CodeOneBlock+98j mov edi, [esi+33B78h] mov eax, [esi+80h] mov ecx, [esi+70h] push eax mov [esp+34h+var_14], edi mov [esp+34h+var_4], edi call ecx add esp, 4 test eax, eax jnz short loc_4D0AD4 push edi mov ecx, esi call CEncoder_Flush pop ebx pop edi pop esi pop ebp add esp, 20h retn 0Ch ; --------------------------------------------------------------------------- align 10h loc_4D0AD0: ; CODE XREF: CEncoder_CodeOneBlock+735j ; CEncoder_CodeOneBlock+78Bj mov edi, [esp+30h+var_14] loc_4D0AD4: ; CODE XREF: CEncoder_CodeOneBlock+1CBj cmp byte ptr [esi+32EF4h], 0 mov ecx, esi jz short loc_4D0AEB lea edx, [esp+30h+var_1C] push edx call CEncoder_GetOptimumFast jmp short loc_4D0AF6 ; --------------------------------------------------------------------------- loc_4D0AEB: ; CODE XREF: CEncoder_CodeOneBlock+1EDj lea eax, [esp+30h+var_1C] push eax push edi call CEncoder_GetOptimum loc_4D0AF6: ; CODE XREF: CEncoder_CodeOneBlock+1F9j mov ebx, [esi+33B60h] and ebx, edi cmp eax, 1 mov [esp+30h+var_18], eax jnz loc_4D0C0E cmp [esp+30h+var_1C], 0FFFFFFFFh jnz loc_4D0C0E movzx ecx, byte ptr [esi+10h] mov edx, [esi+38h] lea ebp, [esi+28h] shl ecx, 4 shr edx, 0Bh add ecx, ebx imul edx, [esi+ecx*4+280F0h] lea eax, [esi+ecx*4+280F0h] mov [ebp+10h], edx mov ecx, [eax] mov edx, 800h sub edx, ecx shr edx, 5 add edx, ecx mov [eax], edx mov eax, [ebp+10h] cmp eax, 1000000h jnb short loc_4D0B61 shl eax, 8 mov ecx, ebp mov [ebp+10h], eax call loc_4CF640 loc_4D0B61: ; CODE XREF: CEncoder_CodeOneBlock+262j mov eax, [esi+32F04h] mov ecx, [esi+80h] mov edx, [esi+6Ch] neg eax push eax push ecx call edx movzx edi, byte ptr [esi+11h] mov edx, [esi+3265Ch] and edx, [esp+38h+var_14] mov bl, al mov eax, [esi+32654h] mov ecx, 8 sub cl, al shr edi, cl mov ecx, eax shl edx, cl add esp, 8 mov byte ptr [esp+30h+var_10], bl add edi, edx imul edi, 0C00h add edi, [esi+32650h] cmp byte ptr [esi+10h], 7 jnb short loc_4D0BC3 mov eax, [esp+30h+var_10] push eax push ebp mov ecx, edi call sub_4CFE30 jmp short loc_4D0BF5 ; --------------------------------------------------------------------------- loc_4D0BC3: ; CODE XREF: CEncoder_CodeOneBlock+2C2j mov edx, [esi+80h] mov eax, [esi+6Ch] or ecx, 0FFFFFFFFh sub ecx, [esi+14h] sub ecx, [esi+32F04h] push ecx push edx call eax mov ecx, [esp+38h+var_10] add esp, 8 mov byte ptr [esp+30h+var_C], al mov edx, [esp+30h+var_C] push ecx push edx push ebp mov ecx, edi call sub_4CFED0 loc_4D0BF5: ; CODE XREF: CEncoder_CodeOneBlock+2D1j movzx eax, byte ptr [esi+10h] mov cl, ds:kLiteralNextStates[eax] mov ebp, [esp+30h+var_18] mov [esi+10h], cl mov [esi+11h], bl jmp loc_4D1013 ; --------------------------------------------------------------------------- loc_4D0C0E: ; CODE XREF: CEncoder_CodeOneBlock+215j ; CEncoder_CodeOneBlock+220j movzx edx, byte ptr [esi+10h] mov ecx, [esi+38h] lea edi, [esi+28h] shl edx, 4 mov eax, ecx shr eax, 0Bh add edx, ebx imul eax, [esi+edx*4+280F0h] add [edi+8], eax lea edx, [esi+edx*4+280F0h] mov ebp, 0 adc [edi+0Ch], ebp sub ecx, eax mov [edi+10h], ecx mov eax, [edx] mov ecx, eax shr ecx, 5 sub eax, ecx mov [edx], eax mov eax, [edi+10h] cmp eax, 1000000h jnb short loc_4D0C63 shl eax, 8 mov ecx, edi mov [edi+10h], eax call loc_4CF640 loc_4D0C63: ; CODE XREF: CEncoder_CodeOneBlock+364j cmp [esp+30h+var_1C], 4 movzx edx, byte ptr [esi+10h] mov ecx, [edi+10h] jnb loc_4D0E91 mov eax, ecx shr eax, 0Bh imul eax, [esi+edx*4+283F0h] add [edi+8], eax lea edx, [esi+edx*4+283F0h] adc [edi+0Ch], ebp sub ecx, eax mov [edi+10h], ecx mov eax, [edx] mov ecx, eax shr ecx, 5 sub eax, ecx mov [edx], eax mov eax, [edi+10h] cmp eax, 1000000h jnb short loc_4D0CB6 shl eax, 8 mov ecx, edi mov [edi+10h], eax call loc_4CF640 loc_4D0CB6: ; CODE XREF: CEncoder_CodeOneBlock+3B7j mov eax, [esp+30h+var_1C] cmp eax, ebp mov ecx, [edi+10h] jnz short loc_4D0D24 movzx edx, byte ptr [esi+10h] lea eax, [esi+edx*4+28420h] shr ecx, 0Bh imul ecx, [eax] mov [edi+10h], ecx mov ecx, [eax] mov edx, 800h sub edx, ecx shr edx, 5 add edx, ecx mov [eax], edx mov eax, [edi+10h] cmp eax, 1000000h jnb short loc_4D0CFC shl eax, 8 mov ecx, edi mov [edi+10h], eax call loc_4CF640 loc_4D0CFC: ; CODE XREF: CEncoder_CodeOneBlock+3FDj mov ebp, [esp+30h+var_18] movzx ecx, byte ptr [esi+10h] xor eax, eax cmp ebp, 1 setnz al shl ecx, 4 add ecx, ebx lea ecx, [esi+ecx*4+284B0h] push eax push edi call sub_4CFAC0 jmp loc_4D0E2E ; --------------------------------------------------------------------------- loc_4D0D24: ; CODE XREF: CEncoder_CodeOneBlock+3CFj mov edx, [esi+eax*4+14h] movzx eax, byte ptr [esi+10h] mov [esp+30h+var_8], edx lea edx, [esi+eax*4+28420h] mov eax, ecx shr eax, 0Bh imul eax, [edx] add [edi+8], eax adc [edi+0Ch], ebp sub ecx, eax mov [edi+10h], ecx mov eax, [edx] mov ecx, eax shr ecx, 5 sub eax, ecx mov [edx], eax mov eax, [edi+10h] cmp eax, 1000000h jnb short loc_4D0D6C shl eax, 8 mov ecx, edi mov [edi+10h], eax call loc_4CF640 loc_4D0D6C: ; CODE XREF: CEncoder_CodeOneBlock+46Dj cmp [esp+30h+var_1C], 1 mov ecx, [edi+10h] jnz short loc_4D0DB3 movzx edx, byte ptr [esi+10h] lea eax, [esi+edx*4+28450h] shr ecx, 0Bh imul ecx, [eax] mov [edi+10h], ecx mov ecx, [eax] mov edx, 800h sub edx, ecx shr edx, 5 add edx, ecx mov [eax], edx mov eax, [edi+10h] cmp eax, 1000000h jnb short loc_4D0E1D shl eax, 8 mov ecx, edi mov [edi+10h], eax call loc_4CF640 jmp short loc_4D0E1D ; --------------------------------------------------------------------------- loc_4D0DB3: ; CODE XREF: CEncoder_CodeOneBlock+484j movzx eax, byte ptr [esi+10h] lea edx, [esi+eax*4+28450h] mov eax, ecx shr eax, 0Bh imul eax, [edx] add [edi+8], eax adc [edi+0Ch], ebp sub ecx, eax mov [edi+10h], ecx mov eax, [edx] mov ecx, eax shr ecx, 5 sub eax, ecx mov [edx], eax mov eax, [edi+10h] cmp eax, 1000000h jnb short loc_4D0DF3 shl eax, 8 mov ecx, edi mov [edi+10h], eax call loc_4CF640 loc_4D0DF3: ; CODE XREF: CEncoder_CodeOneBlock+4F4j mov ebp, [esp+30h+var_1C] movzx eax, byte ptr [esi+10h] lea edx, [ebp-2] push edx push edi lea ecx, [esi+eax*4+28480h] call sub_4CFAC0 cmp ebp, 3 jnz short loc_4D0E17 mov ecx, [esi+1Ch] mov [esi+20h], ecx loc_4D0E17: ; CODE XREF: CEncoder_CodeOneBlock+51Fj mov edx, [esi+18h] mov [esi+1Ch], edx loc_4D0E1D: ; CODE XREF: CEncoder_CodeOneBlock+4B2j ; CEncoder_CodeOneBlock+4C1j mov eax, [esi+14h] mov ecx, [esp+30h+var_8] mov ebp, [esp+30h+var_18] mov [esi+18h], eax mov [esi+14h], ecx loc_4D0E2E: ; CODE XREF: CEncoder_CodeOneBlock+42Fj cmp ebp, 1 jnz short loc_4D0E45 movzx edx, byte ptr [esi+10h] mov al, ds:kShortRepNextStates[edx] mov [esi+10h], al jmp loc_4D0FF5 ; --------------------------------------------------------------------------- loc_4D0E45: ; CODE XREF: CEncoder_CodeOneBlock+541j cmp byte ptr [esi+32EF4h], 0 push ebx lea edx, [ebp-2] push edx lea ecx, [esi+2DA04h] push edi setz [esp+3Ch+var_20] call sub_4D0020 cmp [esp+30h+var_20], 0 jz short loc_4D0E7F add dword ptr [esi+ebx*4+32610h], 0FFFFFFFFh lea ecx, [esi+2DA04h] jnz short loc_4D0E7F push ebx call sub_4CF740 loc_4D0E7F: ; CODE XREF: CEncoder_CodeOneBlock+577j ; CEncoder_CodeOneBlock+587j movzx eax, byte ptr [esi+10h] mov cl, ds:kRepNextStates[eax] mov [esi+10h], cl jmp loc_4D0FF5 ; --------------------------------------------------------------------------- loc_4D0E91: ; CODE XREF: CEncoder_CodeOneBlock+37Fj lea eax, [esi+edx*4+283F0h] shr ecx, 0Bh imul ecx, [eax] mov [edi+10h], ecx mov ecx, [eax] mov edx, 800h sub edx, ecx shr edx, 5 add edx, ecx mov [eax], edx mov eax, [edi+10h] cmp eax, 1000000h jnb short loc_4D0EC8 shl eax, 8 mov ecx, edi mov [edi+10h], eax call loc_4CF640 loc_4D0EC8: ; CODE XREF: CEncoder_CodeOneBlock+5C9j movzx eax, byte ptr [esi+10h] mov cl, ds:kMatchNextStates[eax] mov eax, [esp+30h+var_18] mov [esi+10h], cl cmp byte ptr [esi+32EF4h], 0 push ebx setz [esp+34h+var_20] add eax, 0FFFFFFFEh push eax lea ebp, [esi+28DB8h] push edi mov ecx, ebp call sub_4D0020 cmp [esp+30h+var_20], 0 jz short loc_4D0F11 add dword ptr [ebp+ebx*4+4C0Ch], 0FFFFFFFFh jnz short loc_4D0F11 push ebx mov ecx, ebp call sub_4CF740 loc_4D0F11: ; CODE XREF: CEncoder_CodeOneBlock+60Dj ; CEncoder_CodeOneBlock+617j mov eax, [esp+30h+var_1C] sub eax, 4 cmp eax, 2000h mov [esp+30h+var_1C], eax jnb short loc_4D0F2C movzx ebp, byte ptr dword_551198[eax] jmp short loc_4D0F4F ; --------------------------------------------------------------------------- loc_4D0F2C: ; CODE XREF: CEncoder_CodeOneBlock+631j cmp eax, 2000000h jnb short loc_4D0F42 shr eax, 0Ch movzx ebp, byte ptr dword_551198[eax] add ebp, 18h jmp short loc_4D0F4F ; --------------------------------------------------------------------------- loc_4D0F42: ; CODE XREF: CEncoder_CodeOneBlock+641j shr eax, 18h movzx ebp, byte ptr dword_551198[eax] add ebp, 30h loc_4D0F4F: ; CODE XREF: CEncoder_CodeOneBlock+63Aj ; CEncoder_CodeOneBlock+650j mov eax, [esp+30h+var_18] add eax, 0FFFFFFFEh cmp eax, 4 jb short loc_4D0F60 mov eax, 3 loc_4D0F60: ; CODE XREF: CEncoder_CodeOneBlock+669j push ebp shl eax, 8 push edi lea ecx, [eax+esi+287B0h] call sub_4CFC60 cmp ebp, 4 jb short loc_4D0FD1 mov ebx, [esp+30h+var_1C] mov ecx, ebp mov eax, ebp and eax, 1 shr ecx, 1 sub ecx, 1 or eax, 2 shl eax, cl sub ebx, eax cmp ebp, 0Eh jnb short loc_4D0FA9 push ebx push ecx sub eax, ebp lea edx, [esi+eax*4+28BACh] push edi push edx call sub_4CFD90 add esp, 10h jmp short loc_4D0FD1 ; --------------------------------------------------------------------------- loc_4D0FA9: ; CODE XREF: CEncoder_CodeOneBlock+6A0j add ecx, 0FFFFFFFCh push ecx mov eax, ebx shr eax, 4 push eax mov ecx, edi call sub_4CF6E0 and ebx, 0Fh push ebx push edi lea ecx, [esi+28D78h] call sub_4CFD00 add dword ptr [esi+33B54h], 1 loc_4D0FD1: ; CODE XREF: CEncoder_CodeOneBlock+684j ; CEncoder_CodeOneBlock+6B7j mov ecx, [esi+1Ch] mov edx, [esi+18h] mov eax, [esi+14h] add dword ptr [esi+33B70h], 1 mov ebp, [esp+30h+var_18] mov [esi+20h], ecx mov ecx, [esp+30h+var_1C] mov [esi+1Ch], edx mov [esi+18h], eax mov [esi+14h], ecx loc_4D0FF5: ; CODE XREF: CEncoder_CodeOneBlock+550j ; CEncoder_CodeOneBlock+59Cj mov eax, [esi+80h] mov ecx, [esi+6Ch] mov edx, ebp sub edx, [esi+32F04h] sub edx, 1 push edx push eax call ecx add esp, 8 mov [esi+11h], al loc_4D1013: ; CODE XREF: CEncoder_CodeOneBlock+319j sub [esi+32F04h], ebp mov eax, [esi+32F04h] add [esp+30h+var_14], ebp test eax, eax jnz loc_4D0AD0 cmp [esi+32EF4h], al jnz short loc_4D1056 cmp dword ptr [esi+33B70h], 80h jb short loc_4D1046 mov ecx, esi call CEncoder_FillDistancesPrices loc_4D1046: ; CODE XREF: CEncoder_CodeOneBlock+74Dj cmp dword ptr [esi+33B54h], 10h jb short loc_4D1056 mov ecx, esi call CEncoder_FillAlignPrices loc_4D1056: ; CODE XREF: CEncoder_CodeOneBlock+741j ; CEncoder_CodeOneBlock+75Dj mov edx, [esi+80h] mov eax, [esi+70h] push edx call eax add esp, 4 test eax, eax mov eax, [esp+30h+var_14] jz short loc_4D10D7 mov ecx, [esp+30h+var_4] mov edx, eax sub edx, ecx cmp edx, 4000h jb loc_4D0AD0 sub eax, ecx add [esi+33B78h], eax mov ecx, [esi+33B78h] mov eax, [esp+30h+arg_0] adc dword ptr [esi+33B7Ch], 0 mov [eax], ecx mov edx, [esi+33B7Ch] lea ecx, [esi+28h] mov [eax+4], edx call sub_4CD8B0 mov ecx, [esp+30h+arg_4] mov [ecx], eax mov eax, [esp+30h+arg_8] mov [ecx+4], edx pop ebx mov byte ptr [esi+33B80h], 0 pop edi mov dword ptr [eax], 0 mov eax, [esi+0ECh] pop esi pop ebp add esp, 20h retn 0Ch ; --------------------------------------------------------------------------- loc_4D10D7: ; CODE XREF: CEncoder_CodeOneBlock+77Bj push eax mov ecx, esi call CEncoder_Flush pop ebx pop edi pop esi pop ebp add esp, 20h retn 0Ch CEncoder_CodeOneBlock endp ; --------------------------------------------------------------------------- align 10h CEncoder_CodeReal proc near ; CODE XREF: CEncoder_Code+49p var_20 = dword ptr -20h processedOutSize= byte ptr -1Ch processedInSize = byte ptr -14h var_C = dword ptr -0Ch var_4 = dword ptr -4 inStream = dword ptr 4 outStream = dword ptr 8 inSize = dword ptr 0Ch outSize = dword ptr 10h progress = dword ptr 14h push 0FFFFFFFFh push offset loc_4DA128 mov eax, dword ptr fs:[0] push eax sub esp, 14h push ebp push esi push edi mov eax, dword_544960 xor eax, esp push eax lea eax, [esp+30h+var_C] mov dword ptr fs:[0], eax mov esi, ecx mov [esp+30h+var_20], esi mov eax, [esp+30h+outSize] mov ecx, [esp+30h+inSize] mov edx, [esp+30h+outStream] push eax mov eax, [esp+34h+inStream] push ecx push edx push eax mov ecx, esi mov [esp+40h+var_4], 0 call CEncoder_SetStreams mov edi, eax test edi, edi jz short loc_4D1190 cmp dword ptr [esi+80h], 0 mov [esp+30h+var_4], 0FFFFFFFFh jz short loc_4D1166 cmp byte ptr [esi+33B95h], 0 jz short loc_4D1166 mov byte ptr [esi+33B95h], 0 loc_4D1166: ; CODE XREF: CEncoder_CodeReal+64j ; CEncoder_CodeReal+6Dj mov eax, [esi+33B8Ch] test eax, eax jz short loc_4D1182 mov ecx, [eax] mov edx, [ecx+8] push eax call edx mov dword ptr [esi+33B8Ch], 0 loc_4D1182: ; CODE XREF: CEncoder_CodeReal+7Ej mov ecx, [esi+4] mov edx, [ecx+10h] lea eax, [esi+4] push eax call edx jmp short loc_4D1201 ; --------------------------------------------------------------------------- loc_4D1190: ; CODE XREF: CEncoder_CodeReal+53j lea eax, [esp+30h+outSize] push eax lea ecx, [esp+34h+processedOutSize] push ecx lea edx, [esp+38h+processedInSize] push edx mov ecx, esi call CEncoder_CodeOneBlock mov edi, eax test edi, edi jnz short loc_4D11F0 mov ebp, [esp+30h+progress] loc_4D11B0: ; CODE XREF: CEncoder_CodeReal+FEj cmp [esp+30h+outSize], 0 jnz short loc_4D1218 test ebp, ebp jz short loc_4D11D4 mov eax, [ebp+0] mov eax, [eax+0Ch] lea ecx, [esp+30h+processedOutSize] push ecx lea edx, [esp+34h+processedInSize] push edx push ebp call eax ; SetRatioInfo mov edi, eax test edi, edi jnz short loc_4D11F0 loc_4D11D4: ; CODE XREF: CEncoder_CodeReal+C9j lea ecx, [esp+30h+outSize] push ecx lea edx, [esp+34h+processedOutSize] push edx lea eax, [esp+38h+processedInSize] push eax mov ecx, esi call CEncoder_CodeOneBlock mov edi, eax test edi, edi jz short loc_4D11B0 loc_4D11F0: ; CODE XREF: CEncoder_CodeReal+BAj ; CEncoder_CodeReal+E2j lea ecx, [esp+30h+var_20] mov [esp+30h+var_4], 0FFFFFFFFh call sub_4CDA70 loc_4D1201: ; CODE XREF: CEncoder_CodeReal+9Ej mov eax, edi mov ecx, [esp+30h+var_C] mov dword ptr fs:[0], ecx pop ecx pop edi pop esi pop ebp add esp, 20h retn 14h ; --------------------------------------------------------------------------- loc_4D1218: ; CODE XREF: CEncoder_CodeReal+C5j lea ecx, [esp+30h+var_20] mov [esp+30h+var_4], 0FFFFFFFFh call sub_4CDA70 xor eax, eax mov ecx, [esp+30h+var_C] mov dword ptr fs:[0], ecx pop ecx pop edi pop esi pop ebp add esp, 20h retn 14h CEncoder_CodeReal endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame CEncoder_Code proc near ; DATA XREF: .rdata:00517B08o ; sub_4D1240 var_10 = dword ptr -10h var_C = dword ptr -0Ch var_4 = dword ptr -4 pThis = dword ptr 8 pInStream = dword ptr 0Ch pOutStream = dword ptr 10h pInSize = dword ptr 14h pOutSize = dword ptr 18h progress = dword ptr 1Ch push ebp mov ebp, esp push 0FFFFFFFFh push offset loc_4DA150 mov eax, dword ptr fs:[0] push eax sub esp, 8 push ebx push esi push edi mov eax, dword_544960 xor eax, ebp push eax lea eax, [ebp+var_C] mov dword ptr fs:[0], eax mov [ebp+var_10], esp mov eax, [ebp+progress] mov ecx, [ebp+pOutSize] mov edx, [ebp+pInSize] push eax mov eax, [ebp+pOutStream] push ecx mov ecx, [ebp+pInStream] push edx push eax push ecx mov ecx, [ebp+pThis] mov [ebp+var_4], 0 call CEncoder_CodeReal mov ecx, [ebp+var_C] mov dword ptr fs:[0], ecx pop ecx pop edi pop esi pop ebx mov esp, ebp pop ebp retn 18h CEncoder_Code endp ; --------------------------------------------------------------------------- loc_4DA0FB: ; DATA XREF: Compress_lzma_internal+2o mov edx, [esp+8] lea eax, [edx-5Ch] mov ecx, [edx-60h] xor ecx, eax call sub_4A0686 mov eax, 0 ; offset dword_526E44 int 3; ; jmp ___CxxFrameHandler3 loc_4DA0C9: ; DATA XREF: sub_4CF810+2o mov edx, [esp+8] lea eax, [edx-0Ch] mov ecx, [edx-10h] xor ecx, eax call sub_4A0686 mov eax, 0 ; offset dword_526E18 int 3; ; jmp ___CxxFrameHandler3 loc_4DA128: ; DATA XREF: CEncoder_CodeReal+2o mov edx, [esp+8] lea eax, [edx-20h] mov ecx, [edx-24h] xor ecx, eax call sub_4A0686 mov eax, 0 ; offset unk_526E70 int 3; ; jmp ___CxxFrameHandler3 loc_4DA150: ; DATA XREF: CEncoder_Code+5o mov edx, [esp+8] lea eax, [edx+0Ch] mov ecx, [edx-18h] xor ecx, eax call sub_4A0686 mov eax, 0 ; offset unk_526ED8 int 3; ; jmp ___CxxFrameHandler3 END