Function at 0x43b9e7
Capabilities:
Compress data via zlib inflate or deflate

Disassembly:
sub esp, 0x38
push ebx
push ebp
mov ebp, dword [esp + 0x44]
push esi
push edi
push ebp
call fcn.0043d149
pop ecx
test eax, eax
jne case.0x43ba83.16211
xor edx, edx
cmp dword [ebp + 0xc], edx
je case.0x43ba83.16211
cmp dword [ebp], edx
jne 0x43ba1a
cmp dword [ebp + 4], edx
jne case.0x43ba83.16211
mov esi, dword [ebp + 0x1c]
mov ecx, 0x3f40
mov eax, dword [esi + 4]
cmp eax, 0x3f3f
jne 0x43ba31
mov dword [esi + 4], ecx
mov eax, ecx
mov ecx, dword [ebp + 0xc]
add eax, 0xffffc0cc
mov ebx, dword [esi + 0x3c]
mov edi, dword [esi + 0x40]
mov dword [esp + 0x28], ecx
mov ecx, dword [ebp + 0x10]
mov dword [esp + 0x1c], ecx
mov ecx, dword [ebp]
mov dword [esp + 0x14], ecx
mov ecx, dword [ebp + 4]
mov dword [esp + 0x18], ecx
mov dword [esp + 0x38], ecx
mov ecx, dword [esp + 0x1c]
push 0x1f
mov dword [esp + 0x34], ecx
pop ecx
mov dword [esp + 0x20], ebx
mov dword [esp + 0x2c], edx
cmp eax, ecx
ja case.0x43ba83.16211
mov dword [esp + 0x44], 0x10
mov ecx, edi
mov edx, edi
jmp dword [eax*4 + 0x43cecb]
cmp dword [esi + 0xc], 0
jne 0x43ba9c
mov dword [esi + 4], 0x3f40
jmp 0x43cdac
push 0x10
pop eax
cmp edi, eax
jae 0x43bad4
mov edx, dword [esp + 0x14]
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
add edi, 8
movzx eax, byte [edx]
shl eax, cl
add ebx, eax
inc edx
push 0x10
pop eax
mov dword [esp + 0x20], ebx
mov dword [esp + 0x14], edx
cmp edi, eax
jb 0x43baa7
test byte [esi + 0xc], 2
je 0x43bb2d
cmp ebx, 0x8b1f
jne 0x43bb2d
xor edi, edi
cmp dword [esi + 0x28], edi
jne 0x43baf0
mov dword [esi + 0x28], 0xf
push edi
push edi
push edi
call fcn.0043d48c
mov dword [esi + 0x1c], eax
lea eax, [esp + 0x30]
mov byte [esp + 0x30], bl
push 2
shr ebx, 8
push eax
mov byte [esp + 0x39], bl
push dword [esi + 0x1c]
call fcn.0043d48c
mov ebx, edi
mov dword [esi + 0x1c], eax
add esp, 0x18
mov dword [esp + 0x20], ebx
mov dword [esi + 4], 0x3f35
jmp 0x43cdac
mov eax, dword [esi + 0x24]
test eax, eax
je 0x43bb38
or dword [eax + 0x30], 0xffffffff
test byte [esi + 0xc], 1
je 0x43bbdf
movzx ecx, bl
mov eax, ebx
shl ecx, 8
xor edx, edx
shr eax, 8
add eax, ecx
push 0x1f
pop ecx
div ecx
test edx, edx
jne 0x43bbdf
mov eax, ebx
and al, 0xf
cmp al, 8
je 0x43bb72
mov dword [ebp + 0x18], str.unknown_compression_method
jmp 0x43cda5
mov eax, dword [esi + 0x28]
sub edi, 4
shr ebx, 4
mov ecx, ebx
mov dword [esp + 0x20], ebx
and ecx, 0xf
add ecx, 8
test eax, eax
jne 0x43bb90
mov dword [esi + 0x28], ecx
mov eax, ecx
cmp ecx, 0xf
ja 0x43bbd3
cmp ecx, eax
ja 0x43bbd3
xor edi, edi
xor eax, eax
push edi
inc eax
mov dword [esi + 0x14], edi
shl eax, cl
push edi
push edi
mov dword [esi + 0x18], eax
call fcn.0043d24a
shr ebx, 8
add esp, 0xc
not ebx
mov dword [esi + 0x1c], eax
and ebx, 2
mov dword [ebp + 0x30], eax
or ebx, 0x3f3d
mov dword [esi + 4], ebx
mov ebx, edi
mov dword [esp + 0x20], ebx
jmp 0x43cdac
mov dword [ebp + 0x18], str.invalid_window_size
jmp 0x43cda5
mov dword [ebp + 0x18], str.incorrect_header_check
jmp 0x43cda5
push 0x10
pop eax
cmp edi, eax
jae 0x43bc23
mov edx, dword [esp + 0x14]
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
add edi, 8
movzx eax, byte [edx]
shl eax, cl
add ebx, eax
inc edx
push 0x10
pop eax
mov dword [esp + 0x20], ebx
mov dword [esp + 0x14], edx
cmp edi, eax
jb 0x43bbf6
mov dword [esi + 0x14], ebx
cmp bl, 8
jne 0x43bb66
test ebx, 0xe000
je 0x43bc43
mov dword [ebp + 0x18], str.unknown_header_flags_set
jmp 0x43cda5
mov edx, dword [esi + 0x24]
mov ecx, ebx
shr ecx, 8
test edx, edx
je 0x43bc56
mov eax, ecx
and eax, 1
mov dword [edx], eax
test dword [esi + 0x14], 0x200
je 0x43bc82
test byte [esi + 0xc], 4
je 0x43bc82
push 2
lea eax, [esp + 0x28]
mov byte [esp + 0x28], bl
push eax
mov byte [esp + 0x2d], cl
push dword [esi + 0x1c]
call fcn.0043d48c
add esp, 0xc
mov dword [esi + 0x1c], eax
mov ecx, dword [esp + 0x14]
xor eax, eax
mov ebx, eax
mov dword [esi + 4], 0x3f36
mov edi, eax
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov dword [esp + 0x18], eax
movzx eax, byte [ecx]
mov ecx, edi
shl eax, cl
add edi, 8
mov ecx, dword [esp + 0x14]
add ebx, eax
mov eax, dword [esp + 0x18]
inc ecx
cmp edi, 0x20
mov dword [esp + 0x14], ecx
jb 0x43bc97
mov eax, dword [esi + 0x24]
test eax, eax
je 0x43bccc
mov dword [eax + 4], ebx
test dword [esi + 0x14], 0x200
je 0x43bd0d
test byte [esi + 0xc], 4
je 0x43bd0d
mov eax, ebx
mov byte [esp + 0x24], bl
shr eax, 8
mov byte [esp + 0x25], al
mov eax, ebx
shr eax, 0x10
mov byte [esp + 0x26], al
lea eax, [esp + 0x24]
push 4
shr ebx, 0x18
push eax
mov byte [esp + 0x2f], bl
push dword [esi + 0x1c]
call fcn.0043d48c
add esp, 0xc
mov dword [esi + 0x1c], eax
mov edx, dword [esp + 0x14]
xor eax, eax
mov ebx, eax
mov dword [esi + 4], 0x3f37
mov edi, eax
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
add edi, 8
movzx eax, byte [edx]
shl eax, cl
add ebx, eax
inc edx
push 0x10
pop eax
cmp edi, eax
mov eax, dword [esp + 0x18]
mov dword [esp + 0x14], edx
jb 0x43bd22
mov edx, dword [esi + 0x24]
mov ecx, ebx
shr ecx, 8
test edx, edx
je 0x43bd63
movzx eax, bl
mov dword [edx + 8], eax
mov eax, dword [esi + 0x24]
mov dword [eax + 0xc], ecx
test dword [esi + 0x14], 0x200
je 0x43bd8f
test byte [esi + 0xc], 4
je 0x43bd8f
push 2
lea eax, [esp + 0x28]
mov byte [esp + 0x28], bl
push eax
mov byte [esp + 0x2d], cl
push dword [esi + 0x1c]
call fcn.0043d48c
add esp, 0xc
mov dword [esi + 0x1c], eax
xor ecx, ecx
mov dword [esi + 4], 0x3f38
mov ebx, ecx
mov edi, ecx
mov dword [esp + 0x20], ebx
jmp 0x43bdd8
mov eax, dword [esp + 0x18]
mov edi, edx
mov ecx, dword [esp + 0x14]
cmp edx, 0x20
mov dword [esp + 0x18], eax
mov dword [esp + 0x3c], ebx
jmp 0x43bcbc
mov eax, dword [esp + 0x18]
mov edi, ecx
mov edx, dword [esp + 0x14]
cmp ecx, 0x10
mov dword [esp + 0x18], eax
mov dword [esp + 0x3c], ebx
jmp 0x43bd45
xor ecx, ecx
test dword [esi + 0x14], 0x400
je 0x43be5d
push 0x10
pop eax
cmp edi, eax
jae 0x43be15
mov edx, dword [esp + 0x14]
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
add edi, 8
movzx eax, byte [edx]
shl eax, cl
add ebx, eax
inc edx
push 0x10
pop eax
mov dword [esp + 0x14], edx
cmp edi, eax
jb 0x43bdec
mov eax, dword [esi + 0x24]
mov dword [esi + 0x44], ebx
test eax, eax
je 0x43be22
mov dword [eax + 0x14], ebx
test dword [esi + 0x14], 0x200
je 0x43be51
test byte [esi + 0xc], 4
je 0x43be51
mov byte [esp + 0x24], bl
lea eax, [esp + 0x24]
push 2
shr ebx, 8
push eax
mov byte [esp + 0x2d], bl
push dword [esi + 0x1c]
call fcn.0043d48c
add esp, 0xc
mov dword [esi + 0x1c], eax
xor eax, eax
mov ebx, eax
mov edi, eax
mov dword [esp + 0x20], ebx
jmp 0x43be67
mov eax, dword [esi + 0x24]
test eax, eax
je 0x43be67
mov dword [eax + 0x10], ecx
mov dword [esi + 4], 0x3f39
test dword [esi + 0x14], 0x400
je 0x43bf1e
mov edx, dword [esi + 0x44]
mov ecx, dword [esp + 0x18]
cmp edx, ecx
cmovbe ecx, edx
mov dword [esp + 0x3c], ecx
test ecx, ecx
je 0x43bf16
mov eax, dword [esi + 0x24]
test eax, eax
je 0x43bee2
mov ebp, dword [eax + 0x10]
test ebp, ebp
mov dword [esp + 0x40], ebp
mov ebp, dword [esp + 0x4c]
je 0x43bee2
mov eax, dword [eax + 0x14]
sub eax, edx
mov edx, dword [esi + 0x24]
mov dword [esp + 0x34], eax
mov edx, dword [edx + 0x18]
cmp eax, edx
jae 0x43bee2
add eax, ecx
cmp eax, edx
mov eax, dword [esp + 0x34]
jbe 0x43beca
sub edx, eax
jmp 0x43becc
mov edx, ecx
add eax, dword [esp + 0x40]
push edx
push dword [esp + 0x18]
push eax
call fcn.00440e10
mov ecx, dword [esp + 0x48]
add esp, 0xc
test dword [esi + 0x14], 0x200
je 0x43bf04
test byte [esi + 0xc], 4
je 0x43bf04
push ecx
push dword [esp + 0x18]
push dword [esi + 0x1c]
call fcn.0043d48c
add esp, 0xc
mov dword [esi + 0x1c], eax
mov eax, dword [esp + 0x3c]
sub dword [esp + 0x18], eax
add dword [esp + 0x14], eax
sub dword [esi + 0x44], eax
mov edx, dword [esi + 0x44]
test edx, edx
jne 0x43c2a0
xor ecx, ecx
mov dword [esi + 4], 0x3f3a
mov dword [esi + 0x44], ecx
jmp 0x43bf2e
xor ecx, ecx
test dword [esi + 0x14], 0x800
je 0x43bfd3
cmp dword [esp + 0x18], 0
je 0x43c2a0
mov ebp, dword [esp + 0x18]
mov eax, ecx
mov edx, dword [esp + 0x14]
mov cl, byte [eax + edx]
inc eax
mov byte [esp + 0x13], cl
mov ecx, dword [esi + 0x24]
test ecx, ecx
je 0x43bf7e
cmp dword [ecx + 0x1c], 0
je 0x43bf7a
mov edx, dword [esi + 0x44]
cmp edx, dword [ecx + 0x20]
jae 0x43bf7a
mov ecx, dword [ecx + 0x1c]
mov bl, byte [esp + 0x13]
mov byte [ecx + edx], bl
inc dword [esi + 0x44]
mov edx, dword [esp + 0x14]
cmp byte [esp + 0x13], 0
je 0x43bf89
cmp eax, ebp
jb 0x43bf50
test dword [esi + 0x14], 0x200
mov ebx, dword [esp + 0x20]
mov ebp, dword [esp + 0x4c]
mov dword [esp + 0x40], eax
je 0x43bfb8
test byte [esi + 0xc], 4
je 0x43bfb8
push eax
push edx
push dword [esi + 0x1c]
call fcn.0043d48c
mov dword [esi + 0x1c], eax
add esp, 0xc
mov eax, dword [esp + 0x40]
mov ecx, dword [esp + 0x14]
sub dword [esp + 0x18], eax
add ecx, eax
cmp byte [esp + 0x13], 0
mov dword [esp + 0x14], ecx
jne 0x43c2a4
jmp 0x43bfdd
mov eax, dword [esi + 0x24]
test eax, eax
je 0x43bfdd
mov dword [eax + 0x1c], ecx
xor ecx, ecx
mov dword [esi + 4], 0x3f3b
mov dword [esi + 0x44], ecx
jmp 0x43bfed
xor ecx, ecx
test dword [esi + 0x14], 0x1000
je 0x43c092
cmp dword [esp + 0x18], 0
je 0x43c2a0
mov ebp, dword [esp + 0x18]
mov eax, ecx
mov edx, dword [esp + 0x14]
mov cl, byte [eax + edx]
inc eax
mov byte [esp + 0x13], cl
mov ecx, dword [esi + 0x24]
test ecx, ecx
je 0x43c03d
cmp dword [ecx + 0x24], 0
je 0x43c039
mov edx, dword [esi + 0x44]
cmp edx, dword [ecx + 0x28]
jae 0x43c039
mov ecx, dword [ecx + 0x24]
mov bl, byte [esp + 0x13]
mov byte [ecx + edx], bl
inc dword [esi + 0x44]
mov edx, dword [esp + 0x14]
cmp byte [esp + 0x13], 0
je 0x43c048
cmp eax, ebp
jb 0x43c00f
test dword [esi + 0x14], 0x200
mov ebx, dword [esp + 0x20]
mov ebp, dword [esp + 0x4c]
mov dword [esp + 0x40], eax
je 0x43c077
test byte [esi + 0xc], 4
je 0x43c077
push eax
push edx
push dword [esi + 0x1c]
call fcn.0043d48c
mov dword [esi + 0x1c], eax
add esp, 0xc
mov eax, dword [esp + 0x40]
mov ecx, dword [esp + 0x14]
sub dword [esp + 0x18], eax
add ecx, eax
cmp byte [esp + 0x13], 0
mov dword [esp + 0x14], ecx
jne 0x43c2a4
jmp 0x43c09c
mov eax, dword [esi + 0x24]
test eax, eax
je 0x43c09c
mov dword [eax + 0x24], ecx
mov dword [esi + 4], 0x3f3c
mov edx, dword [esi + 0x14]
test edx, 0x200
jne 0x43c110
xor ecx, ecx
mov eax, dword [esi + 0x24]
test eax, eax
je 0x43c0ca
sar edx, 9
and edx, 1
mov dword [eax + 0x2c], edx
mov eax, dword [esi + 0x24]
mov dword [eax + 0x30], 1
push ecx
push ecx
push ecx
call fcn.0043d48c
mov dword [esi + 0x1c], eax
add esp, 0xc
mov dword [ebp + 0x30], eax
mov dword [esi + 4], 0x3f3f
jmp 0x43cdac
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add ebx, eax
inc dword [esp + 0x14]
mov dword [esp + 0x20], ebx
add edi, 8
push 0x10
pop eax
cmp edi, eax
jb 0x43c0e7
test byte [esi + 0xc], 4
je 0x43c131
movzx eax, word [esi + 0x1c]
cmp ebx, eax
je 0x43c131
mov dword [ebp + 0x18], str.header_crc_mismatch
jmp 0x43cda5
xor ecx, ecx
mov ebx, ecx
mov edi, ecx
mov dword [esp + 0x20], ebx
jmp 0x43c0b0
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add ebx, eax
inc dword [esp + 0x14]
add edi, 8
cmp edi, 0x20
jb 0x43c140
mov ecx, ebx
mov eax, ebx
shl eax, 0x10
mov edx, 0xff00
and ecx, edx
add ecx, eax
mov eax, ebx
shr eax, 8
and eax, edx
shl ecx, 8
shr ebx, 0x18
add eax, ecx
add eax, ebx
mov dword [esi + 0x1c], eax
mov dword [ebp + 0x30], eax
xor eax, eax
mov ebx, eax
mov dword [esi + 4], 0x3f3e
mov edi, eax
jmp 0x43c1a2
xor eax, eax
cmp dword [esi + 0x10], eax
je 0x43cdca
push eax
push eax
push eax
call fcn.0043d24a
mov dword [esi + 0x1c], eax
add esp, 0xc
mov dword [ebp + 0x30], eax
mov dword [esi + 4], 0x3f3f
cmp dword [esp + 0x50], 5
je 0x43c2a0
cmp dword [esp + 0x50], 6
je 0x43c2a0
xor edx, edx
cmp dword [esi + 8], edx
je 0x43c21e
mov ecx, edi
mov dword [esi + 4], 0x3f4e
and ecx, 7
shr ebx, cl
sub edi, ecx
mov dword [esp + 0x20], ebx
jmp 0x43cdac
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add ebx, eax
inc dword [esp + 0x14]
add edi, 8
cmp edi, 3
jb 0x43c1f9
mov eax, ebx
shr ebx, 1
and eax, 1
mov dword [esi + 8], eax
mov eax, ebx
and eax, 3
sub eax, edx
je 0x43c31f
sub eax, 1
je 0x43c26c
sub eax, 1
je 0x43c260
sub eax, 1
jne 0x43c326
mov dword [ebp + 0x18], str.invalid_block_type
mov dword [esi + 4], 0x3f51
jmp 0x43c326
mov dword [esi + 4], 0x3f44
jmp 0x43c326
cmp dword [esp + 0x50], 6
mov dword [esi + 0x50], 0x4774c0
mov dword [esi + 0x58], 9
mov dword [esi + 0x54], 0x477cc0
mov dword [esi + 0x5c], 5
mov dword [esi + 4], 0x3f47
jne 0x43c326
shr ebx, 2
sub edi, 3
mov ecx, dword [esp + 0x14]
mov edx, dword [esp + 0x1c]
mov eax, dword [esp + 0x28]
mov dword [ebp + 0xc], eax
mov eax, dword [esp + 0x18]
mov dword [ebp + 0x10], edx
mov dword [ebp], ecx
mov dword [ebp + 4], eax
mov dword [esi + 0x3c], ebx
xor ebx, ebx
mov dword [esi + 0x40], edi
mov edi, dword [esp + 0x30]
cmp dword [esi + 0x2c], ebx
jne 0x43c2f7
cmp edi, dword [ebp + 0x10]
je 0x43ce15
cmp dword [esi + 4], 0x3f51
jge 0x43ce15
cmp dword [esi + 4], 0x3f4e
jl 0x43c2f7
cmp dword [esp + 0x50], 4
je 0x43ce15
mov eax, edi
sub eax, dword [ebp + 0x10]
push eax
push dword [ebp + 0xc]
push ebp
call fcn.0043d17c
add esp, 0xc
test eax, eax
je 0x43ce15
mov dword [esi + 4], 0x3f52
push 0xfffffffffffffffc
jmp 0x43cdc1
mov dword [esi + 4], 0x3f41
shr ebx, 2
sub edi, 3
mov dword [esp + 0x20], ebx
jmp 0x43cdac
mov ecx, edi
and ecx, 7
shr ebx, cl
sub edi, ecx
jmp 0x43c365
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add ebx, eax
inc dword [esp + 0x14]
add edi, 8
mov dword [esp + 0x20], ebx
cmp edi, 0x20
jb 0x43c340
mov eax, ebx
movzx ecx, bx
not eax
shr eax, 0x10
cmp ecx, eax
je 0x43c388
mov dword [ebp + 0x18], str.invalid_stored_block_lengths
jmp 0x43cda5
xor eax, eax
mov dword [esi + 0x44], ecx
cmp dword [esp + 0x50], 6
mov ebx, eax
mov dword [esp + 0x20], ebx
mov edi, eax
mov dword [esi + 4], 0x3f42
je 0x43c2a0
mov dword [esi + 4], 0x3f43
mov ecx, dword [esi + 0x44]
test ecx, ecx
je 0x43c0db
mov eax, dword [esp + 0x18]
cmp ecx, eax
cmovbe eax, ecx
mov ecx, dword [esp + 0x1c]
mov edx, ecx
cmp eax, edx
cmovbe ecx, eax
mov dword [esp + 0x40], ecx
test ecx, ecx
je 0x43ce0c
push ecx
push dword [esp + 0x18]
push dword [esp + 0x30]
call fcn.00440e10
mov eax, dword [esp + 0x4c]
add esp, 0xc
sub dword [esp + 0x18], eax
add dword [esp + 0x14], eax
sub dword [esp + 0x1c], eax
add dword [esp + 0x28], eax
sub dword [esi + 0x44], eax
jmp 0x43cdac
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add ebx, eax
inc dword [esp + 0x14]
add edi, 8
cmp edi, 0xe
jb 0x43c406
mov ecx, ebx
sub edi, 0xe
push 0x1f
shr ebx, 5
pop edx
and ecx, edx
and edx, ebx
shr ebx, 5
add ecx, 0x101
mov eax, ebx
mov dword [esi + 0x64], ecx
and eax, 0xf
shr ebx, 4
inc edx
mov dword [esp + 0x20], ebx
add eax, 4
mov dword [esi + 0x68], edx
mov dword [esi + 0x60], eax
cmp ecx, 0x11e
ja 0x43c47b
cmp edx, 0x1e
ja 0x43c47b
and dword [esi + 0x6c], 0
mov dword [esi + 4], 0x3f45
jmp case.0x43ba83.16197
mov dword [ebp + 0x18], str.too_many_length_or_distance_symbols
jmp 0x43cda5
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add ebx, eax
inc dword [esp + 0x14]
add edi, 8
cmp edi, 3
jb 0x43c487
mov eax, dword [esi + 0x6c]
mov ecx, ebx
and ecx, 7
shr ebx, 3
mov dword [esp + 0x20], ebx
movzx eax, word [eax*2 + 0x477d40]
mov word [esi + eax*2 + 0x74], cx
inc dword [esi + 0x6c]
sub edi, 3
mov eax, dword [esi + 0x6c]
cmp eax, dword [esi + 0x60]
jb 0x43c4ac
jmp 0x43c4f3
movzx eax, word [eax*2 + 0x477d40]
xor ecx, ecx
mov word [esi + eax*2 + 0x74], cx
mov eax, dword [esi + 0x6c]
inc eax
mov dword [esi + 0x6c], eax
cmp eax, 0x13
jb 0x43c4dd
lea eax, [esi + 0x534]
lea ecx, [esi + 0x70]
mov dword [esi + 0x50], eax
mov dword [ecx], eax
lea edx, [esi + 0x58]
lea eax, [esi + 0x2f4]
mov dword [edx], 7
push eax
push edx
push ecx
push 0x13
lea eax, [esi + 0x74]
push eax
push 0
call fcn.0043d796
mov edx, eax
add esp, 0x18
mov dword [esp + 0x2c], edx
test edx, edx
je 0x43c53e
mov dword [ebp + 0x18], str.invalid_code_lengths_set
jmp 0x43cda5
and dword [esi + 0x6c], 0
mov dword [esi + 4], 0x3f46
mov eax, dword [esi + 0x68]
add eax, dword [esi + 0x64]
cmp dword [esi + 0x6c], eax
jae 0x43c73a
mov ecx, dword [esi + 0x58]
xor eax, eax
lea edx, [eax + 1]
shl edx, cl
jmp 0x43c589
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add ebx, eax
inc dword [esp + 0x14]
add edi, 8
mov ecx, dword [esi + 0x50]
lea eax, [edx - 1]
and eax, ebx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [esp + 0x3c], eax
cmp ecx, edi
ja 0x43c564
mov edx, eax
shr edx, 0x10
mov ecx, edx
cmp dx, word [esp + 0x44]
jae 0x43c5d3
shr eax, 8
movzx ecx, al
mov eax, dword [esi + 0x6c]
sub edi, ecx
shr ebx, cl
mov dword [esp + 0x20], ebx
mov word [esi + eax*2 + 0x74], dx
inc dword [esi + 0x6c]
mov ecx, dword [esi + 0x6c]
jmp 0x43c71c
push 0x10
pop edx
cmp cx, dx
jne 0x43c640
shr eax, 8
movzx edx, al
jmp 0x43c608
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add ebx, eax
inc dword [esp + 0x14]
add edi, 8
lea eax, [edx + 2]
cmp edi, eax
jb 0x43c5e3
mov eax, dword [esi + 0x6c]
mov ecx, edx
shr ebx, cl
sub edi, edx
mov dword [esp + 0x20], ebx
test eax, eax
je 0x43c72c
movzx eax, word [esi + eax*2 + 0x72]
mov edx, ebx
and edx, 3
shr ebx, 2
add edx, 3
mov dword [esp + 0x34], eax
sub edi, 2
jmp 0x43c6e5
cmp word [esp + 0x3e], 0x11
movzx ecx, ah
jne 0x43c694
lea edx, [ecx + 3]
mov dword [esp + 0x40], ecx
cmp edi, edx
jae 0x43c683
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
add edi, 8
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add ebx, eax
inc dword [esp + 0x14]
cmp edi, edx
jb 0x43c656
mov ecx, dword [esp + 0x40]
shr ebx, cl
mov edx, ebx
and edx, 7
add edx, 3
shr ebx, 3
push 0xfffffffffffffffd
jmp 0x43c6db
lea edx, [ecx + 7]
mov dword [esp + 0x40], ecx
cmp edi, edx
jae 0x43c6cc
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
add edi, 8
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add ebx, eax
inc dword [esp + 0x14]
cmp edi, edx
jb 0x43c69f
mov ecx, dword [esp + 0x40]
shr ebx, cl
mov edx, ebx
and edx, 0x7f
add edx, 0xb
shr ebx, 7
push 0xfffffffffffffff9
pop eax
sub eax, ecx
add edi, eax
and dword [esp + 0x34], 0
mov eax, dword [esi + 0x6c]
mov dword [esp + 0x40], eax
mov dword [esp + 0x20], ebx
lea ecx, [eax + edx]
mov eax, dword [esi + 0x68]
add eax, dword [esi + 0x64]
cmp ecx, eax
ja 0x43c72c
mov ecx, dword [esp + 0x40]
mov ebp, dword [esp + 0x34]
mov word [esi + ecx*2 + 0x74], bp
mov ecx, dword [esi + 0x6c]
lea ecx, [ecx + 1]
mov dword [esi + 0x6c], ecx
sub edx, 1
jne 0x43c705
mov ebp, dword [esp + 0x4c]
mov eax, dword [esi + 0x68]
add eax, dword [esi + 0x64]
cmp ecx, eax
jb 0x43c558
jmp 0x43c73a
mov dword [ebp + 0x18], str.invalid_bit_length_repeat
mov dword [esi + 4], 0x3f51
cmp dword [esi + 4], 0x3f51
je 0x43cdac
xor eax, eax
cmp word [esi + 0x274], ax
jne 0x43c75e
mov dword [ebp + 0x18], str.invalid_code____missing_end_of_block
jmp 0x43cda5
lea eax, [esi + 0x534]
lea ecx, [esi + 0x70]
mov dword [esi + 0x50], eax
mov dword [ecx], eax
lea edx, [esi + 0x58]
lea eax, [esi + 0x2f4]
mov dword [edx], 9
push eax
push edx
push ecx
push dword [esi + 0x64]
lea eax, [esi + 0x74]
push eax
push 1
call fcn.0043d796
mov edx, eax
add esp, 0x18
mov dword [esp + 0x2c], edx
test edx, edx
je 0x43c7a5
mov dword [ebp + 0x18], str.invalid_literal_lengths_set
jmp 0x43cda5
lea ecx, [esi + 0x70]
mov eax, dword [ecx]
lea edx, [esi + 0x5c]
mov dword [esi + 0x54], eax
lea eax, [esi + 0x2f4]
push eax
mov eax, dword [esi + 0x64]
push edx
push ecx
push dword [esi + 0x68]
add eax, 0x3a
mov dword [edx], 6
lea eax, [esi + eax*2]
push eax
push 2
call fcn.0043d796
mov edx, eax
add esp, 0x18
mov dword [esp + 0x2c], edx
test edx, edx
je 0x43c7ec
mov dword [ebp + 0x18], str.invalid_distances_set
jmp 0x43cda5
cmp dword [esp + 0x50], 6
mov dword [esi + 4], 0x3f47
je 0x43c2a0
mov dword [esi + 4], 0x3f48
mov eax, dword [esp + 0x18]
cmp eax, 6
jb 0x43c87f
mov ecx, dword [esp + 0x1c]
cmp ecx, 0x102
jb 0x43c87f
push dword [esp + 0x30]
mov edx, dword [esp + 0x2c]
mov dword [ebp + 0x10], ecx
mov ecx, dword [esp + 0x18]
mov dword [ebp + 0xc], edx
mov dword [ebp], ecx
mov dword [ebp + 4], eax
push ebp
mov dword [esi + 0x3c], ebx
mov dword [esi + 0x40], edi
call fcn.0043dbcf
cmp dword [esi + 4], 0x3f3f
mov eax, dword [ebp + 0xc]
mov ebx, dword [esi + 0x3c]
mov edi, dword [esi + 0x40]
mov dword [esp + 0x30], eax
mov eax, dword [ebp + 0x10]
mov dword [esp + 0x24], eax
mov eax, dword [ebp]
pop ecx
mov dword [esp + 0x18], eax
mov eax, dword [ebp + 4]
pop ecx
mov dword [esp + 0x18], eax
mov dword [esp + 0x20], ebx
jne 0x43cdac
or dword [esi + 0x1bc8], 0xffffffff
jmp 0x43cdac
and dword [esi + 0x1bc8], 0
xor eax, eax
mov ecx, dword [esi + 0x58]
lea edx, [eax + 1]
shl edx, cl
jmp 0x43c8b7
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add ebx, eax
inc dword [esp + 0x14]
add edi, 8
mov ecx, dword [esi + 0x50]
lea eax, [edx - 1]
and eax, ebx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
cmp ecx, edi
ja 0x43c892
test al, al
je 0x43c96d
test al, 0xf0
jne 0x43c96d
mov ecx, eax
shr ecx, 8
movzx edx, cl
mov dword [esp + 0x3c], edx
movzx ecx, al
add ecx, edx
shr eax, 0x10
xor edx, edx
mov dword [esp + 0x34], eax
inc edx
shl edx, cl
lea ecx, [edx - 1]
mov edx, ecx
mov dword [esp + 0x40], ecx
mov ecx, dword [esp + 0x3c]
and edx, ebx
shr edx, cl
mov ecx, dword [esi + 0x50]
add edx, eax
mov eax, dword [ecx + edx*4]
mov edx, dword [esp + 0x3c]
jmp 0x43c953
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
add edi, 8
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
mov ecx, edx
add ebx, eax
mov eax, dword [esp + 0x40]
inc dword [esp + 0x14]
and eax, ebx
shr eax, cl
add eax, dword [esp + 0x34]
mov ecx, dword [esi + 0x50]
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add ecx, edx
cmp ecx, edi
ja 0x43c91a
mov ecx, edx
mov dword [esi + 0x1bc8], edx
shr ebx, cl
sub edi, edx
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add dword [esi + 0x1bc8], ecx
sub edi, ecx
shr ebx, cl
mov ecx, eax
shr ecx, 0x10
mov dword [esp + 0x20], ebx
mov dword [esi + 0x44], ecx
test al, al
jne 0x43c99b
mov dword [esi + 4], 0x3f4d
jmp 0x43cdac
test al, 0x20
je 0x43c9ab
or dword [esi + 0x1bc8], 0xffffffff
jmp 0x43c0db
test al, 0x40
je 0x43c9bb
mov dword [ebp + 0x18], str.invalid_literal_length_code
jmp 0x43cda5
movzx eax, al
and eax, 0xf
mov dword [esi + 4], 0x3f49
mov dword [esi + 0x4c], eax
mov edx, dword [esi + 0x4c]
test edx, edx
je 0x43ca14
jmp 0x43c9f9
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add ebx, eax
inc dword [esp + 0x14]
add edi, 8
cmp edi, edx
jb 0x43c9d4
xor eax, eax
mov ecx, edx
inc eax
sub edi, edx
shl eax, cl
dec eax
and eax, ebx
shr ebx, cl
add dword [esi + 0x44], eax
add dword [esi + 0x1bc8], edx
mov eax, dword [esi + 0x44]
mov dword [esi + 0x1bcc], eax
mov dword [esi + 4], 0x3f4a
mov ecx, dword [esi + 0x5c]
xor eax, eax
lea edx, [eax + 1]
shl edx, cl
jmp 0x43ca55
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add ebx, eax
inc dword [esp + 0x14]
add edi, 8
mov ecx, dword [esi + 0x54]
lea eax, [edx - 1]
and eax, ebx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
cmp ecx, edi
ja 0x43ca30
test al, 0xf0
jne 0x43cb03
mov ecx, eax
shr ecx, 8
movzx edx, cl
mov dword [esp + 0x3c], edx
movzx ecx, al
add ecx, edx
shr eax, 0x10
xor edx, edx
mov dword [esp + 0x34], eax
inc edx
shl edx, cl
lea ecx, [edx - 1]
mov edx, ecx
mov dword [esp + 0x40], ecx
mov ecx, dword [esp + 0x3c]
and edx, ebx
shr edx, cl
mov ecx, dword [esi + 0x54]
add edx, eax
mov eax, dword [ecx + edx*4]
mov edx, dword [esp + 0x3c]
jmp 0x43cae9
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
add edi, 8
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
mov ecx, edx
add ebx, eax
mov eax, dword [esp + 0x40]
inc dword [esp + 0x14]
and eax, ebx
shr eax, cl
add eax, dword [esp + 0x34]
mov ecx, dword [esi + 0x54]
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add ecx, edx
cmp ecx, edi
ja 0x43cab0
mov ecx, edx
sub edi, edx
shr ebx, cl
add dword [esi + 0x1bc8], edx
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add dword [esi + 0x1bc8], ecx
sub edi, ecx
shr ebx, cl
mov dword [esp + 0x20], ebx
test al, 0x40
je 0x43cb29
mov dword [ebp + 0x18], str.invalid_distance_code
jmp 0x43cda5
mov ecx, eax
mov dword [esi + 4], 0x3f4b
shr ecx, 0x10
movzx eax, al
and eax, 0xf
mov dword [esi + 0x48], ecx
mov dword [esi + 0x4c], eax
mov edx, dword [esi + 0x4c]
test edx, edx
je 0x43cb8e
jmp 0x43cb6f
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add ebx, eax
inc dword [esp + 0x14]
add edi, 8
cmp edi, edx
jb 0x43cb4a
xor eax, eax
mov ecx, edx
inc eax
sub edi, edx
shl eax, cl
dec eax
and eax, ebx
shr ebx, cl
add dword [esi + 0x48], eax
add dword [esi + 0x1bc8], edx
mov dword [esp + 0x20], ebx
mov dword [esi + 4], 0x3f4c
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x43c2a0
mov ecx, dword [esp + 0x30]
sub ecx, eax
mov eax, dword [esi + 0x48]
cmp eax, ecx
jbe 0x43cbf4
sub eax, ecx
cmp eax, dword [esi + 0x30]
jbe 0x43cbca
cmp dword [esi + 0x1bc4], 0
je 0x43cbca
mov dword [ebp + 0x18], str.invalid_distance_too_far_back
jmp 0x43cda5
cmp eax, dword [esi + 0x34]
jbe 0x43cbdc
sub eax, dword [esi + 0x34]
mov ecx, dword [esi + 0x2c]
sub ecx, eax
add ecx, dword [esi + 0x38]
jmp 0x43cbe4
mov ecx, dword [esi + 0x38]
sub ecx, eax
add ecx, dword [esi + 0x34]
mov edx, dword [esi + 0x44]
cmp eax, edx
mov ebp, edx
cmovbe ebp, eax
mov dword [esp + 0x34], ebp
jmp 0x43cc01
mov ecx, dword [esp + 0x28]
mov edx, dword [esi + 0x44]
sub ecx, eax
mov dword [esp + 0x34], edx
mov eax, dword [esp + 0x1c]
mov ebp, eax
cmp dword [esp + 0x34], ebp
cmovbe eax, dword [esp + 0x34]
sub ebp, eax
mov dword [esp + 0x40], eax
sub edx, eax
mov dword [esp + 0x1c], ebp
sub ecx, dword [esp + 0x28]
mov ebp, dword [esp + 0x28]
mov dword [esi + 0x44], edx
mov edx, eax
mov al, byte [ecx + ebp]
mov byte [ebp], al
inc ebp
sub edx, 1
jne 0x43cc29
mov dword [esp + 0x28], ebp
mov ebp, dword [esp + 0x4c]
cmp dword [esi + 0x44], edx
jne 0x43cdac
mov dword [esi + 4], 0x3f48
jmp 0x43cdac
mov ecx, dword [esp + 0x1c]
test ecx, ecx
je 0x43c2a0
mov edx, dword [esp + 0x28]
mov al, byte [esi + 0x44]
mov byte [edx], al
inc edx
dec ecx
mov dword [esp + 0x28], edx
mov dword [esp + 0x1c], ecx
jmp 0x43cc46
xor ecx, ecx
cmp dword [esi + 0xc], ecx
je 0x43cd42
cmp edi, 0x20
jae 0x43ccb3
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
add edi, 8
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add ebx, eax
inc dword [esp + 0x14]
mov dword [esp + 0x20], ebx
cmp edi, 0x20
jb 0x43cc83
xor ecx, ecx
mov edx, dword [esp + 0x30]
mov eax, dword [esp + 0x1c]
sub edx, eax
add dword [ebp + 0x14], edx
add dword [esi + 0x20], edx
test byte [esi + 0xc], 4
je 0x43ccf6
test edx, edx
je 0x43ccf6
mov eax, dword [esp + 0x28]
sub eax, edx
push edx
push eax
push dword [esi + 0x1c]
cmp dword [esi + 0x14], ecx
je 0x43cce4
call fcn.0043d48c
jmp 0x43cce9
call fcn.0043d24a
mov dword [esi + 0x1c], eax
add esp, 0xc
mov dword [ebp + 0x30], eax
mov eax, dword [esp + 0x1c]
test byte [esi + 0xc], 4
mov dword [esp + 0x30], eax
je 0x43cd38
mov edx, 0xff00
mov ecx, ebx
and ecx, edx
mov eax, ebx
shl eax, 0x10
add ecx, eax
mov eax, ebx
shr eax, 8
shl ecx, 8
and eax, edx
add ecx, eax
mov eax, ebx
shr eax, 0x18
add ecx, eax
cmp dword [esi + 0x14], 0
cmovne ecx, ebx
cmp ecx, dword [esi + 0x1c]
je 0x43cd38
mov dword [ebp + 0x18], str.incorrect_data_check
jmp 0x43cda5
xor ecx, ecx
mov ebx, ecx
mov edi, ecx
mov dword [esp + 0x20], ebx
mov dword [esi + 4], 0x3f4f
cmp dword [esi + 0xc], 0
je 0x43cdf4
xor eax, eax
cmp dword [esi + 0x14], eax
je 0x43cdf4
cmp edi, 0x20
jae 0x43cd93
mov eax, dword [esp + 0x18]
test eax, eax
je 0x43c2a0
dec eax
mov ecx, edi
mov dword [esp + 0x18], eax
add edi, 8
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add ebx, eax
inc dword [esp + 0x14]
mov dword [esp + 0x20], ebx
cmp edi, 0x20
jb 0x43cd63
xor eax, eax
test byte [esi + 0xc], 4
je 0x43cdf0
cmp ebx, dword [esi + 0x20]
je 0x43cdf0
mov dword [ebp + 0x18], str.incorrect_length_check
mov dword [esi + 4], 0x3f51
mov eax, dword [esi + 4]
push 0x1f
sub eax, 0x3f34
pop ecx
cmp eax, ecx
jbe 0x43ba7f
push 0xfffffffffffffffe
pop eax
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x38
ret
mov eax, dword [esp + 0x28]
mov dword [ebp + 0xc], eax
mov eax, dword [esp + 0x1c]
mov dword [ebp + 0x10], eax
mov eax, dword [esp + 0x14]
mov dword [ebp], eax
mov eax, dword [esp + 0x18]
mov dword [ebp + 4], eax
mov dword [esi + 0x3c], ebx
mov dword [esi + 0x40], edi
push 2
jmp 0x43cdc1
mov ebx, eax
mov edi, eax
mov dword [esi + 4], 0x3f50
xor edx, edx
inc edx
mov dword [esp + 0x2c], edx
jmp 0x43c2a0
push 0xfffffffffffffffd
pop edx
jmp 0x43cdfe
mov ecx, dword [esp + 0x14]
jmp 0x43c2a8
mov edx, dword [esp + 0x38]
sub edx, dword [ebp + 4]
sub edi, dword [ebp + 0x10]
add dword [ebp + 8], edx
add dword [ebp + 0x14], edi
add dword [esi + 0x20], edi
test byte [esi + 0xc], 4
mov dword [esp + 0x38], edx
je 0x43ce5e
test edi, edi
je 0x43ce5e
mov eax, dword [ebp + 0xc]
push edi
sub eax, edi
push eax
push dword [esi + 0x1c]
cmp dword [esi + 0x14], ebx
je 0x43ce4c
call fcn.0043d48c
jmp 0x43ce51
call fcn.0043d24a
mov edx, dword [esp + 0x44]
add esp, 0xc
mov dword [esi + 0x1c], eax
mov dword [ebp + 0x30], eax
cmp dword [esi + 4], 0x3f47
je 0x43ce70
cmp dword [esi + 4], 0x3f42
jne 0x43ce75
mov ebx, 0x100
mov ecx, dword [esi + 8]
neg ecx
mov dword [esp + 0x44], 0x80
sbb ecx, ecx
xor eax, eax
and ecx, 0x40
cmp dword [esi + 4], 0x3f3f
cmove eax, dword [esp + 0x44]
add ecx, eax
add ecx, dword [esi + 0x40]
add ecx, ebx
mov dword [ebp + 0x2c], ecx
test edx, edx
jne 0x43cea7
test edi, edi
je 0x43ceae
cmp dword [esp + 0x50], 4
jne 0x43cebf
mov eax, dword [esp + 0x2c]
test eax, eax
push 0xfffffffffffffffb
pop ecx
cmove eax, ecx
jmp 0x43cdc2
mov eax, dword [esp + 0x2c]
jmp 0x43cdc2