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

Disassembly:
push ebp
mov ebp, esp
push edi
push esi
push ebx
sub esp, 0xbc
mov eax, dword [ebp + 8]
test eax, eax
jne 0x4157a5
mov dword [ebp - 0x68], 0xfffffffe
mov eax, dword [ebp - 0x68]
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret
mov eax, dword [ebp + 8]
mov edi, dword [eax + 0x1c]
test edi, edi
je case.default.0x41581d
mov edx, dword [eax + 0xc]
mov dword [ebp - 0x78], edx
test edx, edx
je case.default.0x41581d
mov ecx, dword [eax]
mov dword [ebp - 0x7c], ecx
test ecx, ecx
je 0x416890
mov eax, dword [edi]
cmp eax, 0xb
je 0x416849
mov edx, dword [ebp + 8]
mov ecx, dword [ebp + 8]
lea esi, [edi + 0x530]
mov edx, dword [edx + 0x10]
mov dword [ebp - 0x70], edx
mov ecx, dword [ecx + 4]
mov dword [ebp - 0x74], ecx
mov edx, dword [edi + 0x38]
mov dword [ebp - 0x3c], edx
lea edx, [edi + 0x2f0]
mov ebx, dword [edi + 0x3c]
mov dword [ebp - 0x30], ecx
mov ecx, dword [ebp - 0x70]
mov dword [ebp - 0x68], 0
mov dword [ebp - 0x6c], ecx
mov dword [ebp - 0xa0], esi
mov dword [ebp - 0xa4], edx
cmp eax, 0x1e
ja case.default.0x41581d
jmp dword [eax*4 + 0x426210]
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x415ad7
mov esi, dword [ebp - 0x30]
mov edx, dword [ebp - 0x7c]
dec esi
xor eax, eax
mov dword [ebp - 0x30], esi
mov cl, bl
mov al, byte [edx]
inc edx
shl eax, cl
mov ecx, dword [ebp - 0x3c]
mov dword [ebp - 0x7c], edx
add ecx, eax
add ebx, 8
mov dword [ebp - 0x3c], ecx
cmp ebx, 0xf
jbe 0x415824
mov eax, dword [ebp - 0x3c]
mov dword [edi + 0x10], eax
cmp al, 8
je 0x416dc4
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.unknown_compression_method
mov dword [edi], 0x1d
mov eax, dword [edi]
jmp 0x415814
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x415ad7
mov esi, dword [ebp - 0x30]
mov edx, dword [ebp - 0x7c]
dec esi
xor eax, eax
mov dword [ebp - 0x30], esi
mov cl, bl
mov al, byte [edx]
inc edx
shl eax, cl
mov ecx, dword [ebp - 0x3c]
mov dword [ebp - 0x7c], edx
add ecx, eax
add ebx, 8
mov dword [ebp - 0x3c], ecx
cmp ebx, 0xd
jbe 0x415877
mov eax, dword [ebp - 0x3c]
sub ebx, 0xe
and eax, 0x1f
add eax, 0x101
mov dword [edi + 0x60], eax
mov eax, dword [ebp - 0x3c]
shr eax, 5
and eax, 0x1f
inc eax
mov dword [edi + 0x64], eax
mov eax, dword [ebp - 0x3c]
shr eax, 0xa
mov dword [ebp - 0x3c], eax
mov eax, dword [ebp - 0x3c]
and eax, 0xf
add eax, 4
mov dword [edi + 0x5c], eax
mov eax, dword [ebp - 0x3c]
shr eax, 4
mov dword [ebp - 0x3c], eax
cmp dword [edi + 0x60], 0x11e
ja 0x416bda
cmp dword [edi + 0x64], 0x1e
ja 0x416bda
mov dword [edi + 0x68], 0
mov dword [edi], 0x11
mov eax, dword [edi + 0x68]
mov dword [ebp - 0xb8], eax
lea esi, [eax + eax + 0x4262a0]
cmp dword [edi + 0x5c], eax
jbe 0x41598b
cmp ebx, 2
ja 0x41594e
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x415ad7
mov eax, dword [ebp - 0x30]
mov edx, dword [ebp - 0x7c]
dec eax
mov cl, bl
mov dword [ebp - 0x30], eax
xor eax, eax
mov al, byte [edx]
inc edx
shl eax, cl
mov ecx, dword [ebp - 0x3c]
mov dword [ebp - 0x7c], edx
add ecx, eax
add ebx, 8
mov dword [ebp - 0x3c], ecx
mov ax, word [esi]
mov edx, dword [ebp - 0x3c]
and eax, 0xffff
and edx, 7
sub ebx, 3
add esi, 2
mov word [edi + eax*2 + 0x70], dx
mov ecx, dword [ebp - 0xb8]
inc ecx
mov dword [ebp - 0xb8], ecx
mov eax, dword [ebp - 0xb8]
mov dword [edi + 0x68], eax
mov edx, dword [ebp - 0x3c]
shr edx, 3
mov dword [ebp - 0x3c], edx
cmp dword [edi + 0x5c], eax
ja 0x41591d
cmp dword [ebp - 0xb8], 0x12
ja 0x4159ce
mov esi, dword [ebp - 0xb8]
lea edx, [esi + esi + 0x4262a0]
mov ax, word [edx]
add edx, 2
and eax, 0xffff
mov word [edi + eax*2 + 0x70], 0
mov eax, dword [ebp - 0xb8]
inc eax
mov dword [ebp - 0xb8], eax
mov eax, dword [ebp - 0xb8]
mov dword [edi + 0x68], eax
cmp eax, 0x13
jne 0x4159a1
mov eax, dword [ebp - 0xa0]
mov dword [edi + 0x54], 7
mov dword [edi + 0x6c], eax
mov dword [edi + 0x4c], eax
push eax
push eax
mov eax, dword [ebp - 0xa4]
push eax
lea eax, [edi + 0x54]
push eax
lea eax, [edi + 0x6c]
push eax
lea eax, [edi + 0x70]
push 0x13
push eax
push 0
call fcn.00417230
add esp, 0x20
mov dword [ebp - 0x68], eax
test eax, eax
je 0x4163f6
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.invalid_code_lengths_set
mov dword [edi], 0x1d
mov eax, dword [edi]
jmp 0x415814
mov esi, dword [ebp - 0x30]
test esi, esi
je 0x415ad7
mov ecx, dword [ebp - 0x30]
xor eax, eax
dec ecx
mov edx, dword [ebp - 0x3c]
mov dword [ebp - 0x30], ecx
mov ecx, dword [ebp - 0x7c]
mov esi, dword [ebp - 0x7c]
mov al, byte [ecx]
mov cl, bl
shl eax, cl
add edx, eax
inc esi
mov dword [ebp - 0x3c], edx
mov dword [ebp - 0x7c], esi
add ebx, 8
cmp ebx, 0x1f
jbe 0x415a24
mov eax, dword [ebp - 0x3c]
mov edx, dword [ebp - 0x3c]
shr eax, 8
mov ecx, dword [ebp - 0x3c]
shr edx, 0x18
and eax, 0xff00
add eax, edx
mov edx, dword [ebp - 0x3c]
and edx, 0xff00
xor ebx, ebx
shl ecx, 0x18
shl edx, 8
mov dword [ebp - 0x3c], ecx
add eax, edx
mov edx, dword [ebp - 0x3c]
add eax, edx
mov dword [edi + 0x18], eax
mov esi, dword [ebp + 8]
mov dword [esi + 0x30], eax
mov dword [edi], 0xa
mov dword [ebp - 0x3c], 0
mov eax, dword [edi + 0xc]
test eax, eax
je 0x41713d
push eax
push 0
push 0
push 0
call fcn.004185d0
add esp, 0x10
mov dword [edi + 0x18], eax
mov esi, dword [ebp + 8]
mov dword [esi + 0x30], eax
mov dword [edi], 0xb
mov eax, dword [ebp + 0xc]
sub eax, 5
cmp eax, 1
ja case.0x41581d.12
mov ecx, dword [ebp + 8]
mov esi, dword [ebp - 0x78]
mov dword [ecx + 0xc], esi
mov eax, dword [ebp - 0x70]
mov dword [ecx + 0x10], eax
mov edx, dword [ebp - 0x7c]
mov dword [ecx], edx
mov esi, dword [ebp - 0x30]
mov dword [ecx + 4], esi
mov eax, dword [ebp - 0x3c]
mov dword [edi + 0x3c], ebx
mov dword [edi + 0x38], eax
mov eax, dword [edi + 0x28]
test eax, eax
jne 0x415b0e
cmp dword [edi], 0x19
ja 0x415b21
mov edx, dword [ebp - 0x6c]
cmp dword [ecx + 0x10], edx
je 0x415b21
mov edx, dword [ebp - 0x6c]
mov eax, dword [ebp + 8]
call fcn.00415510
test eax, eax
jne 0x4163e4
mov ecx, dword [ebp + 8]
mov esi, dword [ebp - 0x74]
mov ebx, dword [ebp - 0x6c]
mov eax, dword [ecx + 4]
mov edx, dword [ecx + 0x14]
sub esi, eax
mov eax, dword [ecx + 0x10]
sub ebx, eax
mov eax, dword [ecx + 8]
add eax, esi
add edx, ebx
mov dword [ecx + 8], eax
mov dword [ecx + 0x14], edx
mov eax, dword [edi + 0x1c]
add eax, ebx
mov dword [edi + 0x1c], eax
mov eax, dword [edi + 8]
test eax, eax
je 0x415b7f
test ebx, ebx
je 0x415b7f
mov eax, dword [edi + 0x10]
test eax, eax
je 0x416874
push eax
push ebx
mov eax, dword [ecx + 0xc]
sub eax, ebx
push eax
mov eax, dword [edi + 0x18]
push eax
call fcn.00417e60
add esp, 0x10
mov dword [edi + 0x18], eax
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x30], eax
cmp dword [edi + 4], 1
sbb eax, eax
mov edx, dword [edi + 0x3c]
xor eax, 0xffffffff
and eax, 0x40
add eax, edx
mov edx, dword [edi]
cmp edx, 0xb
je 0x41686a
cmp edx, 0x13
je 0x41683f
xor ecx, ecx
cmp edx, 0xe
je 0x41683f
mov edx, dword [ebp + 8]
add eax, ecx
or ebx, esi
mov dword [edx + 0x2c], eax
je 0x415bc5
cmp dword [ebp + 0xc], 4
jne 0x41579a
mov eax, dword [ebp - 0x68]
test eax, eax
jne 0x41579a
mov dword [ebp - 0x68], 0xfffffffb
jmp 0x41579a
mov edx, dword [edi + 0x20]
test edx, edx
je 0x415bee
mov eax, dword [ebp - 0x3c]
shr eax, 8
and eax, 1
mov dword [edx], eax
test byte [edi + 0x11], 2
jne 0x41703f
mov dword [edi], 2
xor ebx, ebx
mov dword [ebp - 0x3c], 0
mov esi, dword [ebp - 0x30]
test esi, esi
je 0x415ad7
mov ecx, dword [ebp - 0x30]
xor eax, eax
dec ecx
mov edx, dword [ebp - 0x3c]
mov dword [ebp - 0x30], ecx
mov ecx, dword [ebp - 0x7c]
mov al, byte [ecx]
mov cl, bl
shl eax, cl
add edx, eax
mov eax, dword [ebp - 0x7c]
inc eax
mov dword [ebp - 0x3c], edx
mov dword [ebp - 0x7c], eax
add ebx, 8
cmp ebx, 0x1f
jbe 0x415c07
mov eax, dword [edi + 0x20]
test eax, eax
je 0x415c48
mov edx, dword [ebp - 0x3c]
mov dword [eax + 4], edx
test byte [edi + 0x11], 2
jne 0x416c7d
mov dword [edi], 3
xor ebx, ebx
mov dword [ebp - 0x3c], 0
mov esi, dword [ebp - 0x30]
test esi, esi
je 0x415ad7
mov ecx, dword [ebp - 0x30]
mov esi, dword [ebp - 0x7c]
dec ecx
xor eax, eax
mov dword [ebp - 0x30], ecx
mov cl, bl
mov al, byte [esi]
mov edx, dword [ebp - 0x3c]
shl eax, cl
add edx, eax
inc esi
mov dword [ebp - 0x3c], edx
mov dword [ebp - 0x7c], esi
add ebx, 8
cmp ebx, 0xf
jbe 0x415c61
mov edx, dword [edi + 0x20]
test edx, edx
je 0x415cac
movzx eax, byte [ebp - 0x3c]
mov dword [edx + 8], eax
mov eax, dword [ebp - 0x3c]
mov edx, dword [edi + 0x20]
shr eax, 8
mov dword [edx + 0xc], eax
test byte [edi + 0x11], 2
jne 0x416c4d
mov dword [edi], 4
xor ebx, ebx
mov dword [ebp - 0x3c], 0
test byte [edi + 0x11], 4
jne 0x415f54
mov eax, dword [edi + 0x20]
test eax, eax
je 0x415cdd
mov dword [eax + 0x10], 0
mov dword [edi], 5
mov edx, dword [edi + 0x10]
test dh, 4
je 0x415d7c
mov eax, dword [edi + 0x40]
mov esi, dword [ebp - 0x30]
cmp esi, eax
jbe 0x415cfb
mov esi, eax
test esi, esi
je 0x415d74
mov ecx, dword [edi + 0x20]
mov dword [ebp - 0xa8], ecx
test ecx, ecx
je 0x415d53
mov ecx, dword [ecx + 0x10]
mov dword [ebp - 0x98], ecx
test ecx, ecx
je 0x415d53
mov ecx, dword [ebp - 0xa8]
mov edx, dword [ecx + 0x14]
mov ecx, dword [ecx + 0x18]
sub edx, eax
mov dword [ebp - 0x48], esi
lea eax, [esi + edx]
cmp eax, ecx
jbe 0x415d36
sub ecx, edx
mov dword [ebp - 0x48], ecx
mov eax, dword [ebp - 0x98]
mov ecx, dword [ebp - 0x48]
add eax, edx
push edx
mov edx, dword [ebp - 0x7c]
push ecx
push edx
push eax
call sub.msvcrt_memcpy
mov edx, dword [edi + 0x10]
add esp, 0x10
and dh, 2
jne 0x416e3c
mov edx, dword [ebp - 0x30]
mov eax, dword [ebp - 0x7c]
add eax, esi
sub edx, esi
mov dword [ebp - 0x30], edx
mov dword [ebp - 0x7c], eax
mov eax, dword [edi + 0x40]
sub eax, esi
mov dword [edi + 0x40], eax
test eax, eax
jne 0x415ad7
mov dword [edi + 0x40], 0
mov dword [edi], 6
test byte [edi + 0x11], 8
je 0x4168cf
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x415ad7
xor esi, esi
mov edx, dword [ebp - 0x7c]
mov dl, byte [esi + edx]
inc esi
mov byte [ebp - 0x91], dl
mov edx, dword [edi + 0x20]
test edx, edx
je 0x415dd0
mov ecx, dword [edx + 0x1c]
test ecx, ecx
je 0x415dd0
mov eax, dword [edi + 0x40]
cmp eax, dword [edx + 0x20]
jae 0x415dd0
mov dl, byte [ebp - 0x91]
mov byte [ecx + eax], dl
inc eax
mov dword [edi + 0x40], eax
cmp byte [ebp - 0x91], 0
jne 0x416831
test byte [edi + 0x11], 2
jne 0x416bb2
mov eax, dword [ebp - 0x30]
mov ecx, dword [ebp - 0x7c]
sub eax, esi
add ecx, esi
mov dword [ebp - 0x30], eax
mov dword [ebp - 0x7c], ecx
cmp byte [ebp - 0x91], 0
jne 0x415ad7
mov dword [edi + 0x40], 0
mov dword [edi], 7
test byte [edi + 0x11], 0x10
je 0x4168a0
mov edx, dword [ebp - 0x30]
test edx, edx
je 0x415ad7
xor esi, esi
mov ecx, dword [ebp - 0x7c]
mov cl, byte [esi + ecx]
inc esi
mov byte [ebp - 0x31], cl
mov edx, dword [edi + 0x20]
test edx, edx
je 0x415e52
mov ecx, dword [edx + 0x24]
test ecx, ecx
je 0x415e52
mov eax, dword [edi + 0x40]
cmp eax, dword [edx + 0x28]
jae 0x415e52
mov dl, byte [ebp - 0x31]
mov byte [ecx + eax], dl
inc eax
mov dword [edi + 0x40], eax
cmp byte [ebp - 0x31], 0
jne 0x416823
test byte [edi + 0x11], 2
jne 0x416a81
mov eax, dword [ebp - 0x30]
sub eax, esi
mov dword [ebp - 0x30], eax
mov eax, dword [ebp - 0x7c]
add eax, esi
mov dword [ebp - 0x7c], eax
cmp byte [ebp - 0x31], 0
jne 0x415ad7
mov dword [edi], 8
mov edx, dword [edi + 0x10]
test dh, 2
jne 0x415efc
mov eax, dword [edi + 0x20]
test eax, eax
je 0x415ea8
sar edx, 9
and edx, 1
mov dword [eax + 0x2c], edx
mov eax, dword [edi + 0x20]
mov dword [eax + 0x30], 1
push eax
push 0
push 0
push 0
call fcn.00417e60
add esp, 0x10
mov dword [edi + 0x18], eax
mov edx, dword [ebp + 8]
mov dword [edx + 0x30], eax
mov dword [edi], 0xb
mov eax, dword [edi]
jmp 0x415814
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x415ad7
mov esi, dword [ebp - 0x30]
mov ecx, dword [ebp - 0x7c]
dec esi
xor eax, eax
mov dword [ebp - 0x30], esi
mov al, byte [ecx]
mov cl, bl
shl eax, cl
mov ecx, dword [ebp - 0x3c]
add ebx, 8
add ecx, eax
mov eax, dword [ebp - 0x7c]
inc eax
mov dword [ebp - 0x3c], ecx
mov dword [ebp - 0x7c], eax
cmp ebx, 0xf
jbe 0x415ecd
movzx eax, word [edi + 0x18]
cmp eax, dword [ebp - 0x3c]
je 0x416c0a
mov esi, dword [ebp + 8]
mov dword [esi + 0x18], str.header_crc_mismatch
mov dword [edi], 0x1d
mov eax, dword [edi]
jmp 0x415814
mov esi, dword [ebp - 0x30]
test esi, esi
je 0x415ad7
mov ecx, dword [ebp - 0x30]
xor eax, eax
dec ecx
mov edx, dword [ebp - 0x3c]
mov dword [ebp - 0x30], ecx
mov ecx, dword [ebp - 0x7c]
mov al, byte [ecx]
mov cl, bl
shl eax, cl
add edx, eax
mov eax, dword [ebp - 0x7c]
inc eax
mov dword [ebp - 0x3c], edx
mov dword [ebp - 0x7c], eax
add ebx, 8
cmp ebx, 0xf
jbe 0x415f25
mov eax, dword [ebp - 0x3c]
mov dword [edi + 0x40], eax
mov eax, dword [edi + 0x20]
test eax, eax
je 0x415f6c
mov edx, dword [ebp - 0x3c]
mov dword [eax + 0x14], edx
test byte [edi + 0x11], 2
jne 0x416e56
xor ebx, ebx
mov dword [ebp - 0x3c], 0
jmp 0x415cdd
mov eax, dword [edi + 4]
test eax, eax
jne 0x4168b7
cmp ebx, 2
ja 0x415fc0
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x415ad7
mov esi, dword [ebp - 0x30]
mov edx, dword [ebp - 0x7c]
dec esi
xor eax, eax
mov dword [ebp - 0x30], esi
mov cl, bl
mov al, byte [edx]
inc edx
shl eax, cl
mov ecx, dword [ebp - 0x3c]
mov dword [ebp - 0x7c], edx
add ecx, eax
add ebx, 8
mov dword [ebp - 0x3c], ecx
mov eax, dword [ebp - 0x3c]
lea ecx, [ebx - 1]
and eax, 1
mov dword [edi + 4], eax
mov edx, dword [ebp - 0x3c]
shr edx, 1
mov eax, edx
and eax, 3
cmp eax, 1
je 0x416de8
jae 0x416c26
mov dword [edi], 0xd
shr edx, 2
lea ebx, [ecx - 2]
mov dword [ebp - 0x3c], edx
mov eax, dword [edi]
jmp 0x415814
mov dword [edi + 0x40], edx
mov dword [edi], 0xe
cmp dword [ebp + 0xc], 6
je 0x417031
mov dword [ebp - 0x3c], 0
xor ebx, ebx
mov dword [edi], 0xf
mov eax, dword [edi + 0x40]
test eax, eax
je 0x416a00
mov edx, dword [ebp - 0x70]
cmp edx, eax
jbe 0x416031
mov edx, eax
mov esi, edx
cmp edx, dword [ebp - 0x30]
jbe 0x41603b
mov esi, dword [ebp - 0x30]
test esi, esi
je 0x415ad7
mov ecx, dword [ebp - 0x7c]
mov edx, dword [ebp - 0x78]
push eax
push esi
push ecx
push edx
call sub.msvcrt_memcpy
mov eax, dword [ebp - 0x30]
sub eax, esi
add esp, 0x10
mov dword [ebp - 0x30], eax
mov eax, dword [ebp - 0x7c]
add eax, esi
mov dword [ebp - 0x7c], eax
mov eax, dword [ebp - 0x70]
sub eax, esi
mov dword [ebp - 0x70], eax
mov eax, dword [ebp - 0x78]
add eax, esi
mov dword [ebp - 0x78], eax
mov eax, dword [edi + 0x40]
sub eax, esi
mov dword [edi + 0x40], eax
mov eax, dword [edi]
jmp 0x415814
mov eax, dword [ebp - 0x40]
and eax, 0xffff
mov dword [edi + 0x44], eax
mov al, byte [ebp - 0xb8]
mov dword [edi], 0x17
and eax, 0xf
mov dword [edi + 0x48], eax
mov esi, dword [edi + 0x48]
test esi, esi
je 0x416106
cmp ebx, esi
jae 0x4160dc
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x415ad7
mov eax, dword [ebp - 0x30]
mov edx, dword [ebp - 0x7c]
dec eax
mov cl, bl
mov dword [ebp - 0x30], eax
xor eax, eax
mov al, byte [edx]
add ebx, 8
shl eax, cl
mov ecx, dword [ebp - 0x3c]
inc edx
add ecx, eax
mov dword [ebp - 0x7c], edx
mov dword [ebp - 0x3c], ecx
cmp esi, ebx
ja 0x4160ac
mov ecx, esi
mov eax, 1
shl eax, cl
mov edx, dword [ebp - 0x3c]
dec eax
and eax, edx
mov edx, dword [edi + 0x44]
add edx, eax
sub ebx, esi
mov dword [edi + 0x44], edx
shr dword [ebp - 0x3c], cl
mov eax, dword [edi + 0x1bc4]
add eax, esi
mov dword [edi + 0x1bc4], eax
mov dword [edi], 0x18
mov eax, dword [ebp - 0x70]
test eax, eax
je 0x415ad7
mov eax, dword [ebp - 0x70]
mov edx, dword [ebp - 0x6c]
sub edx, eax
mov eax, dword [edi + 0x44]
cmp edx, eax
jae 0x416a0d
sub eax, edx
mov edx, eax
cmp eax, dword [edi + 0x2c]
jbe 0x416a61
mov eax, dword [edi + 0x1bc0]
test eax, eax
je 0x416a61
mov esi, dword [ebp + 8]
mov dword [esi + 0x18], 0x4261c5
mov dword [edi], 0x1d
mov eax, dword [edi]
jmp 0x415814
mov dword [edi], 0x13
cmp dword [ebp + 0xc], 6
je 0x415ad7
mov dword [edi], 0x14
cmp dword [ebp - 0x30], 5
jbe 0x4168e6
cmp dword [ebp - 0x70], 0x101
jbe 0x4168e6
mov edx, dword [ebp + 8]
mov ecx, dword [ebp - 0x78]
mov dword [edx + 0xc], ecx
mov esi, dword [ebp - 0x70]
mov dword [edx + 0x10], esi
mov eax, dword [ebp - 0x7c]
mov dword [edx], eax
mov ecx, dword [ebp - 0x30]
mov dword [edx + 4], ecx
mov eax, dword [ebp - 0x3c]
mov dword [edi + 0x3c], ebx
mov dword [edi + 0x38], eax
push eax
push eax
mov eax, dword [ebp - 0x6c]
push eax
push edx
call fcn.004178c0
mov edx, dword [ebp + 8]
mov ecx, dword [ebp + 8]
mov edx, dword [edx + 0xc]
mov dword [ebp - 0x78], edx
mov esi, dword [ebp + 8]
mov ecx, dword [ecx + 0x10]
mov eax, dword [ebp + 8]
mov dword [ebp - 0x70], ecx
add esp, 0x10
mov esi, dword [esi]
mov dword [ebp - 0x7c], esi
mov eax, dword [eax + 4]
mov dword [ebp - 0x30], eax
mov edx, dword [edi + 0x38]
mov dword [ebp - 0x3c], edx
mov ebx, dword [edi + 0x3c]
cmp dword [edi], 0xb
jne 0x415873
mov eax, dword [edi]
mov dword [edi + 0x1bc4], 0xffffffff
jmp 0x415814
and eax, 0xf
mov dword [edi], 0x15
mov dword [edi + 0x48], eax
mov esi, dword [edi + 0x48]
test esi, esi
je 0x416272
cmp ebx, esi
jae 0x416248
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x415ad7
mov eax, dword [ebp - 0x30]
mov edx, dword [ebp - 0x7c]
dec eax
mov cl, bl
mov dword [ebp - 0x30], eax
xor eax, eax
mov al, byte [edx]
add ebx, 8
shl eax, cl
mov ecx, dword [ebp - 0x3c]
inc edx
add ecx, eax
mov dword [ebp - 0x7c], edx
mov dword [ebp - 0x3c], ecx
cmp esi, ebx
ja 0x416218
mov ecx, esi
mov eax, 1
shl eax, cl
mov edx, dword [ebp - 0x3c]
dec eax
and eax, edx
mov edx, dword [edi + 0x40]
add edx, eax
sub ebx, esi
mov dword [edi + 0x40], edx
shr dword [ebp - 0x3c], cl
mov eax, dword [edi + 0x1bc4]
add eax, esi
mov dword [edi + 0x1bc4], eax
mov eax, dword [edi + 0x40]
mov dword [edi], 0x16
mov dword [edi + 0x1bc8], eax
mov esi, dword [edi + 0x50]
mov eax, 1
mov dword [ebp - 0x80], esi
mov ecx, dword [edi + 0x58]
mov edx, dword [ebp - 0x80]
shl eax, cl
lea esi, [eax - 1]
mov eax, dword [ebp - 0x3c]
and eax, esi
lea eax, [edx + eax*4]
mov cx, word [eax + 2]
mov word [ebp - 0x40], cx
mov dl, byte [eax + 1]
mov al, byte [eax]
mov byte [ebp - 0xb8], al
xor eax, eax
mov al, dl
cmp ebx, eax
jae 0x41630c
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x415ad7
mov eax, dword [ebp - 0x30]
mov edx, dword [ebp - 0x7c]
dec eax
mov cl, bl
mov dword [ebp - 0x30], eax
xor eax, eax
mov al, byte [edx]
inc edx
shl eax, cl
mov ecx, dword [ebp - 0x3c]
mov dword [ebp - 0x7c], edx
add ecx, eax
mov edx, dword [ebp - 0x80]
mov dword [ebp - 0x3c], ecx
add ebx, 8
mov eax, dword [ebp - 0x3c]
and eax, esi
lea eax, [edx + eax*4]
mov cx, word [eax + 2]
mov word [ebp - 0x40], cx
mov dl, byte [eax + 1]
mov al, byte [eax]
mov byte [ebp - 0xb8], al
xor eax, eax
mov al, dl
cmp eax, ebx
ja 0x4162ba
mov al, byte [ebp - 0xb8]
and eax, 0xff
mov dword [ebp - 0x2c], eax
test al, 0xf0
je 0x416a9b
mov cl, dl
and ecx, 0xff
mov esi, ecx
mov ecx, esi
xor eax, eax
shr dword [ebp - 0x3c], cl
mov al, dl
sub ebx, eax
mov eax, dword [edi + 0x1bc4]
add eax, esi
mov dword [edi + 0x1bc4], eax
test byte [ebp - 0x2c], 0x40
je 0x416084
mov esi, dword [ebp + 8]
mov dword [esi + 0x18], 0x4261af
mov dword [edi], 0x1d
mov eax, dword [edi]
jmp 0x415814
mov eax, dword [edi + 8]
test eax, eax
jne 0x416641
mov dword [edi], 0x1b
mov eax, dword [edi + 8]
test eax, eax
je 0x416585
mov eax, dword [edi + 0x10]
test eax, eax
jne 0x4163bc
jmp 0x416585
mov esi, dword [ebp - 0x30]
test esi, esi
je 0x415ad7
mov ecx, dword [ebp - 0x30]
mov esi, dword [ebp - 0x7c]
dec ecx
xor eax, eax
mov dword [ebp - 0x30], ecx
mov cl, bl
mov al, byte [esi]
mov edx, dword [ebp - 0x3c]
shl eax, cl
add edx, eax
inc esi
mov dword [ebp - 0x3c], edx
mov dword [ebp - 0x7c], esi
add ebx, 8
cmp ebx, 0x1f
jbe 0x416390
mov eax, dword [ebp - 0x3c]
cmp dword [edi + 0x1c], eax
je 0x41657c
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.incorrect_length_check
mov dword [edi], 0x1d
mov eax, dword [edi]
jmp 0x415814
mov dword [edi], 0x1e
mov dword [ebp - 0x68], 0xfffffffc
jmp 0x41579a
mov dword [edi + 0x68], 0
mov dword [edi], 0x12
mov ecx, dword [edi + 0x68]
mov dword [ebp - 0x38], ecx
mov esi, dword [edi + 0x64]
mov dword [ebp - 0x9c], esi
mov eax, dword [edi + 0x60]
add esi, eax
mov dword [ebp - 0x9c], esi
mov eax, dword [ebp - 0x38]
cmp dword [ebp - 0x9c], eax
jbe 0x4170a8
mov edx, dword [edi + 0x4c]
mov eax, 1
mov dword [ebp - 0x5c], edx
mov ecx, dword [edi + 0x54]
shl eax, cl
dec eax
mov dword [ebp - 0x60], eax
mov eax, dword [ebp - 0x3c]
mov ecx, dword [ebp - 0x60]
and eax, ecx
lea eax, [edx + eax*4]
mov cl, byte [eax + 1]
mov dx, word [eax + 2]
mov al, cl
and eax, 0xff
mov esi, eax
cmp ebx, eax
jae 0x4164ad
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x415ad7
mov esi, dword [ebp - 0x30]
mov edx, dword [ebp - 0x7c]
dec esi
xor eax, eax
mov dword [ebp - 0x30], esi
mov cl, bl
mov al, byte [edx]
inc edx
shl eax, cl
mov ecx, dword [ebp - 0x3c]
mov dword [ebp - 0x7c], edx
add ecx, eax
mov edx, dword [ebp - 0x60]
mov dword [ebp - 0x3c], ecx
mov esi, dword [ebp - 0x5c]
mov eax, dword [ebp - 0x3c]
add ebx, 8
and eax, edx
lea eax, [esi + eax*4]
mov cl, byte [eax + 1]
mov dx, word [eax + 2]
mov al, cl
and eax, 0xff
mov esi, eax
cmp eax, ebx
ja 0x41645f
cmp dx, 0xf
jbe 0x416bf1
cmp dx, 0x10
je 0x416eb9
cmp dx, 0x11
je 0x416f90
and ecx, 0xff
mov edx, ecx
mov dword [ebp - 0xb8], ecx
add edx, 7
cmp ebx, edx
jae 0x416513
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x415ad7
mov eax, dword [ebp - 0x30]
mov ecx, dword [ebp - 0x7c]
dec eax
mov dword [ebp - 0x30], eax
xor eax, eax
mov al, byte [ecx]
mov cl, bl
shl eax, cl
mov ecx, dword [ebp - 0x3c]
add ebx, 8
add ecx, eax
mov eax, dword [ebp - 0x7c]
inc eax
mov dword [ebp - 0x3c], ecx
mov dword [ebp - 0x7c], eax
cmp ebx, edx
jb 0x4164e0
mov eax, dword [ebp - 0x3c]
mov cl, byte [ebp - 0xb8]
shr eax, cl
mov ecx, ebx
mov edx, eax
sub ecx, esi
and edx, 0x7f
shr eax, 7
add edx, 0xb
lea ebx, [ecx - 7]
mov dword [ebp - 0x3c], eax
xor ecx, ecx
mov esi, dword [ebp - 0x38]
lea eax, [edx + esi]
cmp dword [ebp - 0x9c], eax
jb 0x41706f
mov word [ebp - 0xba], cx
mov eax, dword [edi + 0x68]
mov word [edi + eax*2 + 0x70], cx
inc eax
mov dword [edi + 0x68], eax
mov ecx, 1
mov si, word [ebp - 0xba]
inc ecx
mov word [edi + eax*2 + 0x70], si
inc eax
mov dword [ebp - 0x38], eax
cmp ecx, edx
mov dword [edi + 0x68], eax
jne 0x41655f
jmp 0x41641d
mov dword [ebp - 0x3c], 0
xor ebx, ebx
mov dword [edi], 0x1c
mov dword [ebp - 0x68], 1
jmp 0x415ad7
mov dword [ebp - 0x68], 0xfffffffd
jmp 0x415ad7
mov ecx, ebx
and ebx, 0xfffffff8
and ecx, 7
shr dword [ebp - 0x3c], cl
cmp ebx, 0x1f
ja 0x4165e4
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x415ad7
mov esi, dword [ebp - 0x30]
mov edx, dword [ebp - 0x7c]
dec esi
xor eax, eax
mov dword [ebp - 0x30], esi
mov cl, bl
mov al, byte [edx]
add ebx, 8
shl eax, cl
mov ecx, dword [ebp - 0x3c]
inc edx
add ecx, eax
mov dword [ebp - 0x7c], edx
mov dword [ebp - 0x3c], ecx
cmp ebx, 0x1f
jbe 0x4165b3
mov eax, dword [ebp - 0x3c]
shr eax, 0x10
movzx edx, word [ebp - 0x3c]
xor eax, 0xffff
cmp edx, eax
je 0x415ffb
mov esi, dword [ebp + 8]
mov dword [esi + 0x18], str.invalid_stored_block_lengths
mov dword [edi], 0x1d
mov eax, dword [edi]
jmp 0x415814
mov esi, dword [ebp - 0x30]
test esi, esi
je 0x415ad7
mov ecx, dword [ebp - 0x30]
xor eax, eax
dec ecx
mov edx, dword [ebp - 0x3c]
mov dword [ebp - 0x30], ecx
mov ecx, dword [ebp - 0x7c]
mov esi, dword [ebp - 0x7c]
mov al, byte [ecx]
mov cl, bl
shl eax, cl
add edx, eax
inc esi
mov dword [ebp - 0x3c], edx
mov dword [ebp - 0x7c], esi
add ebx, 8
cmp ebx, 0x1f
jbe 0x416612
mov esi, dword [ebp + 8]
mov eax, dword [ebp - 0x6c]
mov ecx, dword [ebp - 0x70]
mov edx, dword [esi + 0x14]
sub eax, ecx
add edx, eax
mov dword [esi + 0x14], edx
mov esi, dword [edi + 0x1c]
add esi, eax
test eax, eax
mov dword [edi + 0x1c], esi
je 0x41668d
mov ecx, dword [edi + 0x10]
test ecx, ecx
je 0x417004
push edx
mov edx, dword [ebp - 0x78]
sub edx, eax
push eax
push edx
mov eax, dword [edi + 0x18]
push eax
call fcn.00417e60
add esp, 0x10
mov dword [edi + 0x18], eax
mov esi, dword [ebp + 8]
mov dword [esi + 0x30], eax
mov edx, dword [edi + 0x10]
mov eax, dword [ebp - 0x3c]
test edx, edx
jne 0x4166bd
mov edx, eax
shr edx, 8
shr eax, 0x18
and edx, 0xff00
add edx, eax
mov eax, dword [ebp - 0x3c]
and eax, 0xff00
shl eax, 8
add edx, eax
mov eax, dword [ebp - 0x3c]
shl eax, 0x18
lea eax, [edx + eax]
cmp eax, dword [edi + 0x18]
je 0x41701d
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.incorrect_data_check
mov dword [edi], 0x1d
mov edx, dword [ebp - 0x70]
mov dword [ebp - 0x6c], edx
mov eax, dword [edi]
jmp 0x415814
mov eax, dword [ebp - 0x70]
test eax, eax
je 0x415ad7
mov edx, dword [ebp - 0x78]
mov eax, dword [edi + 0x40]
mov byte [edx], al
inc edx
mov eax, dword [ebp - 0x70]
mov dword [ebp - 0x78], edx
dec eax
mov dword [ebp - 0x70], eax
mov dword [edi], 0x14
mov eax, dword [edi]
jmp 0x415814
mov edx, dword [edi + 8]
test edx, edx
jne 0x416751
mov dword [edi], 0xc
mov eax, dword [edi]
jmp 0x415814
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x415ad7
mov eax, dword [ebp - 0x30]
mov ecx, dword [ebp - 0x7c]
dec eax
mov esi, dword [ebp - 0x3c]
mov dword [ebp - 0x30], eax
xor eax, eax
mov al, byte [ecx]
mov cl, bl
shl eax, cl
mov ecx, dword [ebp - 0x7c]
add esi, eax
inc ecx
mov dword [ebp - 0x3c], esi
mov dword [ebp - 0x7c], ecx
add ebx, 8
cmp ebx, 0xf
jbe 0x416722
and edx, 2
je 0x416768
cmp dword [ebp - 0x3c], 0x8b1f
je 0x416f4b
mov eax, dword [edi + 0x20]
mov dword [edi + 0x10], 0
test eax, eax
je 0x41677d
mov dword [eax + 0x30], 0xffffffff
test byte [edi + 8], 1
je 0x416e25
movzx eax, byte [ebp - 0x3c]
shl eax, 8
mov edx, dword [ebp - 0x3c]
shr edx, 8
add eax, edx
mov edx, 0x1f
mov esi, edx
xor edx, edx
div esi
test edx, edx
jne 0x416e25
mov eax, dword [ebp - 0x3c]
and eax, 0xf
cmp eax, 8
jne 0x415863
mov eax, dword [ebp - 0x3c]
shr eax, 4
mov dword [ebp - 0x3c], eax
mov eax, dword [ebp - 0x3c]
and eax, 0xf
lea ecx, [eax + 8]
mov eax, dword [edi + 0x24]
test eax, eax
jne 0x417086
mov dword [edi + 0x24], ecx
mov eax, 1
shl eax, cl
mov dword [edi + 0x14], eax
push eax
push 0
push 0
push 0
call fcn.004185d0
mov dword [edi + 0x18], eax
add esp, 0x10
mov esi, dword [ebp + 8]
mov dword [esi + 0x30], eax
mov eax, dword [ebp - 0x3c]
and eax, 0x200
mov dword [ebp - 0x3c], eax
cmp dword [ebp - 0x3c], 1
sbb eax, eax
xor ebx, ebx
and eax, 2
add eax, 9
mov dword [edi], eax
mov dword [ebp - 0x3c], 0
mov eax, dword [edi]
jmp 0x415814
cmp esi, dword [ebp - 0x30]
jb 0x415e28
jmp 0x415e5c
cmp esi, dword [ebp - 0x30]
jb 0x415da0
jmp 0x415ddd
mov ecx, 0x100
jmp 0x415baf
mov dword [edi], 0xc
mov esi, dword [ebp + 8]
mov eax, dword [ebp + 8]
mov esi, dword [esi + 0xc]
mov dword [ebp - 0x78], esi
mov eax, dword [eax]
mov dword [ebp - 0x7c], eax
mov eax, 0xc
jmp 0x4157d1
sub eax, 0xffffff80
xor ecx, ecx
jmp 0x415baf
mov edx, dword [ebp + 8]
push eax
push ebx
mov eax, dword [edx + 0xc]
sub eax, ebx
push eax
mov ecx, dword [edi + 0x18]
push ecx
call fcn.004185d0
add esp, 0x10
jmp 0x415b76
mov eax, dword [eax + 4]
test eax, eax
je 0x4157c6
jmp case.default.0x41581d
mov eax, dword [edi + 0x20]
test eax, eax
je 0x415e80
mov dword [eax + 0x24], 0
jmp 0x415e80
mov ecx, ebx
and ebx, 0xfffffff8
and ecx, 7
shr dword [ebp - 0x3c], cl
mov dword [edi], 0x1a
mov eax, dword [edi]
jmp 0x415814
mov eax, dword [edi + 0x20]
test eax, eax
je 0x415e04
mov dword [eax + 0x1c], 0
jmp 0x415e04
mov ecx, dword [edi + 0x4c]
mov dword [edi + 0x1bc4], 0
mov dword [ebp - 0x90], ecx
mov eax, 1
mov ecx, dword [edi + 0x54]
mov edx, dword [ebp - 0x90]
shl eax, cl
lea esi, [eax - 1]
mov eax, dword [ebp - 0x3c]
and eax, esi
lea eax, [edx + eax*4]
mov cx, word [eax + 2]
mov word [ebp - 0x3e], cx
mov dl, byte [eax + 1]
mov al, byte [eax]
mov byte [ebp - 0xb8], al
xor eax, eax
mov al, dl
cmp ebx, eax
jae 0x416984
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x415ad7
mov eax, dword [ebp - 0x30]
mov edx, dword [ebp - 0x7c]
dec eax
mov cl, bl
mov dword [ebp - 0x30], eax
xor eax, eax
mov al, byte [edx]
inc edx
shl eax, cl
mov ecx, dword [ebp - 0x3c]
mov dword [ebp - 0x7c], edx
add ecx, eax
mov edx, dword [ebp - 0x90]
mov dword [ebp - 0x3c], ecx
add ebx, 8
mov eax, dword [ebp - 0x3c]
and eax, esi
lea eax, [edx + eax*4]
mov cx, word [eax + 2]
mov word [ebp - 0x3e], cx
mov dl, byte [eax + 1]
mov al, byte [eax]
mov byte [ebp - 0xb8], al
xor eax, eax
mov al, dl
cmp eax, ebx
ja 0x41692f
cmp byte [ebp - 0xb8], 0
je 0x416bcc
xor eax, eax
mov al, byte [ebp - 0xb8]
test al, 0xf0
je 0x416ccb
mov cl, dl
and ecx, 0xff
mov esi, ecx
mov ecx, esi
xor eax, eax
shr dword [ebp - 0x3c], cl
mov al, dl
sub ebx, eax
mov eax, dword [edi + 0x1bc4]
add eax, esi
mov dword [edi + 0x1bc4], eax
mov ax, word [ebp - 0x3e]
and eax, 0xffff
mov dword [edi + 0x40], eax
cmp byte [ebp - 0xb8], 0
jne 0x4169e6
mov dword [edi], 0x19
mov eax, dword [edi]
jmp 0x415814
xor eax, eax
mov al, byte [ebp - 0xb8]
test al, 0x20
je 0x416e8f
mov dword [edi + 0x1bc4], 0xffffffff
mov dword [edi], 0xb
mov eax, dword [edi]
jmp 0x415814
mov esi, dword [ebp - 0x78]
sub esi, eax
mov eax, dword [edi + 0x40]
mov edx, eax
mov ecx, dword [ebp - 0x70]
mov dword [ebp - 0x44], edx
cmp edx, ecx
jbe 0x416a24
mov dword [ebp - 0x44], ecx
mov edx, dword [ebp - 0x44]
mov ecx, dword [ebp - 0x70]
sub ecx, edx
sub eax, edx
mov dword [ebp - 0x70], ecx
mov dword [edi + 0x40], eax
mov ecx, dword [ebp - 0x78]
mov edx, dword [ebp - 0x44]
mov al, byte [esi]
inc esi
mov byte [ecx], al
inc ecx
dec edx
jne 0x416a3a
mov esi, dword [ebp - 0x78]
mov ecx, dword [ebp - 0x44]
lea esi, [ecx + esi]
mov dword [ebp - 0x78], esi
mov eax, dword [edi + 0x40]
test eax, eax
je 0x416701
mov eax, dword [edi]
jmp 0x415814
mov eax, dword [edi + 0x30]
cmp edx, eax
jbe 0x416c18
sub edx, eax
mov esi, dword [edi + 0x28]
sub esi, edx
mov eax, dword [edi + 0x34]
add esi, eax
mov eax, dword [edi + 0x40]
cmp edx, eax
jbe 0x416a17
jmp 0x416a15
push eax
mov eax, dword [ebp - 0x7c]
push esi
push eax
mov eax, dword [edi + 0x18]
push eax
call fcn.00417e60
add esp, 0x10
mov dword [edi + 0x18], eax
jmp 0x415e66
xor eax, eax
mov esi, dword [ebp - 0x40]
mov al, dl
and esi, 0xffff
mov dword [ebp - 0x88], eax
mov ecx, eax
mov eax, dword [ebp - 0x2c]
mov dword [ebp - 0x50], esi
add ecx, eax
mov eax, 1
shl eax, cl
dec eax
mov ecx, dword [ebp - 0x3c]
mov dword [ebp - 0x54], eax
and eax, ecx
mov cl, byte [ebp - 0x88]
shr eax, cl
add eax, esi
mov esi, dword [ebp - 0x80]
lea eax, [esi + eax*4]
mov cx, word [eax + 2]
mov word [ebp - 0x40], cx
mov cl, byte [eax + 1]
mov byte [ebp - 0x55], cl
mov al, byte [eax]
mov byte [ebp - 0xb8], al
mov al, cl
and eax, 0xff
mov esi, eax
mov eax, dword [ebp - 0x88]
add eax, esi
cmp ebx, eax
jae 0x416b78
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x415ad7
mov esi, dword [ebp - 0x30]
mov ecx, dword [ebp - 0x7c]
dec esi
xor eax, eax
mov dword [ebp - 0x30], esi
mov esi, dword [ebp - 0x54]
mov al, byte [ecx]
mov cl, bl
shl eax, cl
mov ecx, dword [ebp - 0x3c]
add ebx, 8
add ecx, eax
mov eax, dword [ebp - 0x7c]
mov dword [ebp - 0x3c], ecx
inc eax
mov dword [ebp - 0x7c], eax
mov eax, dword [ebp - 0x3c]
and eax, esi
mov cl, byte [ebp - 0x88]
shr eax, cl
mov ecx, dword [ebp - 0x50]
mov esi, dword [ebp - 0x80]
add eax, ecx
lea eax, [esi + eax*4]
mov cx, word [eax + 2]
mov word [ebp - 0x40], cx
mov cl, byte [eax + 1]
mov byte [ebp - 0x55], cl
mov al, byte [eax]
mov byte [ebp - 0xb8], al
mov al, cl
and eax, 0xff
mov esi, eax
mov eax, dword [ebp - 0x88]
add eax, esi
cmp eax, ebx
ja 0x416b03
mov cl, byte [ebp - 0x88]
xor eax, eax
shr dword [ebp - 0x3c], cl
mov al, dl
mov edx, dword [edi + 0x1bc4]
sub ebx, eax
mov eax, dword [ebp - 0x88]
add edx, eax
mov dword [edi + 0x1bc4], edx
mov dl, byte [ebp - 0xb8]
and edx, 0xff
mov dword [ebp - 0x2c], edx
mov dl, byte [ebp - 0x55]
jmp 0x41632c
push eax
mov eax, dword [ebp - 0x7c]
push esi
push eax
mov eax, dword [edi + 0x18]
push eax
call fcn.00417e60
add esp, 0x10
mov dword [edi + 0x18], eax
jmp 0x415de7
mov al, dl
and eax, 0xff
mov esi, eax
jmp 0x4169ab
mov esi, dword [ebp + 8]
mov dword [esi + 0x18], str.too_many_length_or_distance_symbols
mov dword [edi], 0x1d
mov eax, dword [edi]
jmp 0x415814
shr dword [ebp - 0x3c], cl
mov ecx, dword [ebp - 0x38]
sub ebx, esi
mov word [edi + ecx*2 + 0x70], dx
inc ecx
mov dword [ebp - 0x38], ecx
mov dword [edi + 0x68], ecx
jmp 0x41641d
xor ebx, ebx
mov dword [ebp - 0x3c], 0
jmp 0x415e8e
mov esi, eax
mov eax, dword [edi + 0x34]
sub esi, edx
add esi, eax
jmp 0x416a78
cmp eax, 2
je 0x416eae
cmp eax, 3
jne 0x415feb
mov esi, dword [ebp + 8]
mov dword [esi + 0x18], str.invalid_block_type
mov dword [edi], 0x1d
jmp 0x415feb
mov al, byte [ebp - 0x3c]
mov byte [ebp - 0x1c], al
mov eax, dword [ebp - 0x3c]
shr eax, 8
mov dword [ebp - 0x3c], eax
push eax
mov dl, byte [ebp - 0x3c]
lea eax, [ebp - 0x1c]
push 2
mov byte [ebp - 0x1b], dl
push eax
mov eax, dword [edi + 0x18]
push eax
call fcn.00417e60
add esp, 0x10
mov dword [edi + 0x18], eax
jmp 0x415cb6
mov eax, dword [ebp - 0x3c]
mov cl, byte [ebp - 0x3c]
shr eax, 8
mov byte [ebp - 0x1c], cl
mov dword [ebp - 0x3c], eax
mov al, byte [ebp - 0x3c]
mov byte [ebp - 0x1b], al
mov eax, dword [ebp - 0x3c]
shr eax, 8
mov dword [ebp - 0x3c], eax
mov eax, dword [ebp - 0x3c]
mov dl, byte [ebp - 0x3c]
shr eax, 8
mov byte [ebp - 0x1a], dl
mov dword [ebp - 0x3c], eax
push eax
mov cl, byte [ebp - 0x3c]
lea eax, [ebp - 0x1c]
push 4
mov byte [ebp - 0x19], cl
push eax
mov eax, dword [edi + 0x18]
push eax
call fcn.00417e60
add esp, 0x10
mov dword [edi + 0x18], eax
jmp 0x415c52
xor ecx, ecx
mov si, word [ebp - 0x3e]
mov cl, dl
and esi, 0xffff
mov dword [ebp - 0x4c], ecx
add ecx, eax
mov eax, 1
mov dword [ebp - 0x8c], esi
shl eax, cl
dec eax
mov ecx, dword [ebp - 0x3c]
mov dword [ebp - 0x84], eax
and eax, ecx
mov cl, byte [ebp - 0x4c]
shr eax, cl
add eax, esi
mov esi, dword [ebp - 0x90]
lea eax, [esi + eax*4]
mov cx, word [eax + 2]
mov word [ebp - 0x3e], cx
mov cl, byte [eax + 1]
mov byte [ebp - 0x61], cl
mov al, byte [eax]
mov byte [ebp - 0xb8], al
mov al, cl
and eax, 0xff
mov esi, eax
mov eax, dword [ebp - 0x4c]
add eax, esi
cmp ebx, eax
jae 0x416da7
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x415ad7
mov esi, dword [ebp - 0x30]
mov ecx, dword [ebp - 0x7c]
dec esi
xor eax, eax
mov dword [ebp - 0x30], esi
mov esi, dword [ebp - 0x84]
mov al, byte [ecx]
mov cl, bl
shl eax, cl
mov ecx, dword [ebp - 0x3c]
add ebx, 8
add ecx, eax
mov eax, dword [ebp - 0x7c]
mov dword [ebp - 0x3c], ecx
inc eax
mov dword [ebp - 0x7c], eax
mov eax, dword [ebp - 0x3c]
and eax, esi
mov cl, byte [ebp - 0x4c]
shr eax, cl
mov ecx, dword [ebp - 0x8c]
mov esi, dword [ebp - 0x90]
add eax, ecx
lea eax, [esi + eax*4]
mov cx, word [eax + 2]
mov word [ebp - 0x3e], cx
mov cl, byte [eax + 1]
mov byte [ebp - 0x61], cl
mov al, byte [eax]
mov byte [ebp - 0xb8], al
mov al, cl
and eax, 0xff
mov esi, eax
mov eax, dword [ebp - 0x4c]
add eax, esi
cmp eax, ebx
ja 0x416d2f
xor eax, eax
mov cl, byte [ebp - 0x4c]
mov al, dl
shr dword [ebp - 0x3c], cl
sub ebx, eax
mov eax, dword [ebp - 0x4c]
mov dword [edi + 0x1bc4], eax
mov dl, byte [ebp - 0x61]
jmp 0x4169ab
test dword [ebp - 0x3c], 0xe000
je 0x415bdc
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.unknown_header_flags_set
mov dword [edi], 0x1d
mov eax, dword [edi]
jmp 0x415814
mov dword [edi + 0x4c], 0x426360
mov dword [edi + 0x54], 9
mov dword [edi + 0x50], 0x4262e0
mov dword [edi + 0x58], 5
mov dword [edi], 0x13
cmp dword [ebp + 0xc], 6
jne 0x415feb
mov eax, dword [ebp - 0x3c]
sub ebx, 3
shr eax, 3
mov dword [ebp - 0x3c], eax
jmp 0x415ad7
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.incorrect_header_check
mov dword [edi], 0x1d
mov eax, dword [edi]
jmp 0x415814
push eax
mov eax, dword [ebp - 0x7c]
push esi
push eax
mov ecx, dword [edi + 0x18]
push ecx
call fcn.00417e60
add esp, 0x10
mov dword [edi + 0x18], eax
jmp 0x415d5c
mov esi, dword [ebp - 0x3c]
mov cl, byte [ebp - 0x3c]
shr esi, 8
mov byte [ebp - 0x1c], cl
mov dword [ebp - 0x3c], esi
push ebx
mov al, byte [ebp - 0x3c]
push 2
mov byte [ebp - 0x1b], al
lea eax, [ebp - 0x1c]
push eax
xor ebx, ebx
mov ecx, dword [edi + 0x18]
push ecx
call fcn.00417e60
add esp, 0x10
mov dword [edi + 0x18], eax
mov dword [ebp - 0x3c], 0
jmp 0x415cdd
test al, 0x40
je 0x416201
mov esi, dword [ebp + 8]
mov dword [esi + 0x18], 0x426193
mov dword [edi], 0x1d
mov eax, dword [edi]
jmp 0x415814
mov dword [edi], 0x10
jmp 0x415feb
and ecx, 0xff
mov edx, ecx
mov dword [ebp - 0xb8], ecx
add edx, 2
mov dword [ebp - 0xc0], edx
cmp ebx, edx
jae 0x416f0b
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x415ad7
mov ecx, dword [ebp - 0x30]
xor eax, eax
dec ecx
mov edx, dword [ebp - 0x3c]
mov dword [ebp - 0x30], ecx
mov ecx, dword [ebp - 0x7c]
mov al, byte [ecx]
mov cl, bl
shl eax, cl
add edx, eax
mov eax, dword [ebp - 0x7c]
inc eax
add ebx, 8
mov dword [ebp - 0x3c], edx
mov dword [ebp - 0x7c], eax
cmp ebx, dword [ebp - 0xc0]
jb 0x416ed4
mov cl, byte [ebp - 0xb8]
mov eax, dword [ebp - 0x38]
shr dword [ebp - 0x3c], cl
sub ebx, esi
test eax, eax
je 0x4170d2
mov edx, dword [ebp - 0x38]
sub ebx, 2
mov ax, word [edi + edx*2 + 0x6e]
mov ecx, eax
mov eax, dword [ebp - 0x3c]
and eax, 3
and ecx, 0xffff
lea edx, [eax + 3]
mov eax, dword [ebp - 0x3c]
shr eax, 2
mov dword [ebp - 0x3c], eax
jmp 0x416535
push eax
push 0
push 0
push 0
call fcn.00417e60
add esp, 0xc
mov dword [edi + 0x18], eax
lea eax, [ebp - 0x1c]
push 2
mov byte [ebp - 0x1c], 0x1f
push eax
mov byte [ebp - 0x1b], 0x8b
mov eax, dword [edi + 0x18]
xor ebx, ebx
push eax
call fcn.00417e60
mov dword [edi], 1
mov dword [edi + 0x18], eax
mov dword [ebp - 0x3c], 0
add esp, 0x10
mov eax, dword [edi]
jmp 0x415814
and ecx, 0xff
mov dword [ebp - 0xb8], ecx
add ecx, 3
mov dword [ebp - 0xc0], ecx
cmp ebx, ecx
jae 0x416fdd
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x415ad7
mov eax, dword [ebp - 0x30]
mov edx, dword [ebp - 0x7c]
dec eax
mov cl, bl
mov dword [ebp - 0x30], eax
xor eax, eax
mov al, byte [edx]
add ebx, 8
shl eax, cl
mov ecx, dword [ebp - 0x3c]
inc edx
add ecx, eax
mov dword [ebp - 0x7c], edx
mov dword [ebp - 0x3c], ecx
cmp ebx, dword [ebp - 0xc0]
jb 0x416fa9
mov eax, dword [ebp - 0x3c]
mov cl, byte [ebp - 0xb8]
shr eax, cl
mov ecx, ebx
mov edx, eax
sub ecx, esi
and edx, 7
shr eax, 3
add edx, 3
lea ebx, [ecx - 3]
xor ecx, ecx
mov dword [ebp - 0x3c], eax
jmp 0x416535
mov ecx, dword [ebp - 0x78]
push esi
sub ecx, eax
push eax
push ecx
mov ecx, dword [edi + 0x18]
push ecx
call fcn.004185d0
add esp, 0x10
jmp 0x416684
mov ecx, dword [ebp - 0x70]
xor ebx, ebx
mov dword [ebp - 0x6c], ecx
mov dword [ebp - 0x3c], 0
jmp 0x416371
xor ebx, ebx
mov dword [ebp - 0x3c], 0
jmp 0x415ad7
mov al, byte [ebp - 0x3c]
mov byte [ebp - 0x1c], al
mov eax, dword [ebp - 0x3c]
shr eax, 8
mov dword [ebp - 0x3c], eax
push eax
mov dl, byte [ebp - 0x3c]
lea eax, [ebp - 0x1c]
push 2
mov byte [ebp - 0x1b], dl
push eax
mov eax, dword [edi + 0x18]
push eax
call fcn.00417e60
add esp, 0x10
mov dword [edi + 0x18], eax
jmp 0x415bf8
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.invalid_bit_length_repeat
mov dword [edi], 0x1d
mov eax, dword [edi]
jmp 0x415814
cmp ecx, eax
jbe 0x4167d8
mov ecx, dword [ebp + 8]
sub ebx, 4
mov dword [ecx + 0x18], str.invalid_window_size
mov dword [edi], 0x1d
mov eax, dword [edi]
jmp 0x415814
cmp dword [edi], 0x1d
je 0x415873
cmp word [edi + 0x270], 0
jne 0x4170e9
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.invalid_code____missing_end_of_block
mov dword [edi], 0x1d
mov eax, dword [edi]
jmp 0x415814
mov esi, dword [ebp + 8]
mov dword [esi + 0x18], str.invalid_bit_length_repeat
mov dword [edi], 0x1d
mov eax, dword [edi]
jmp 0x415814
mov ecx, dword [ebp - 0xa0]
mov dword [edi + 0x54], 9
mov dword [edi + 0x6c], ecx
mov dword [edi + 0x4c], ecx
push eax
push eax
mov eax, dword [ebp - 0xa4]
lea esi, [edi + 0x6c]
push eax
lea eax, [edi + 0x54]
push eax
push esi
mov ecx, dword [edi + 0x60]
lea eax, [edi + 0x70]
push ecx
push eax
push 1
call fcn.00417230
add esp, 0x20
mov dword [ebp - 0x68], eax
test eax, eax
je 0x41716c
mov esi, dword [ebp + 8]
mov dword [esi + 0x18], str.invalid_literal_lengths_set
mov dword [edi], 0x1d
mov eax, dword [edi]
jmp 0x415814
mov eax, dword [ebp + 8]
mov edx, dword [ebp - 0x78]
mov dword [eax + 0xc], edx
mov ecx, dword [ebp - 0x70]
mov dword [eax + 0x10], ecx
mov esi, dword [ebp - 0x7c]
mov dword [eax], esi
mov edx, dword [ebp - 0x30]
mov dword [eax + 4], edx
mov ecx, dword [ebp - 0x3c]
mov dword [edi + 0x3c], ebx
mov dword [edi + 0x38], ecx
mov dword [ebp - 0x68], 2
jmp 0x41579a
mov eax, dword [edi + 0x6c]
mov dword [edi + 0x58], 6
mov dword [edi + 0x50], eax
push edx
mov eax, dword [ebp - 0xa4]
push edx
push eax
lea eax, [edi + 0x58]
push eax
push esi
mov eax, dword [edi + 0x64]
push eax
mov eax, dword [edi + 0x60]
lea eax, [edi + eax*2 + 0x70]
push eax
push 2
call fcn.00417230
add esp, 0x20
mov dword [ebp - 0x68], eax
test eax, eax
je 0x41615c
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.invalid_distances_set
mov dword [edi], 0x1d
mov eax, dword [edi]
jmp 0x415814