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

Disassembly:
mov eax, dword [esp + 4]
sub esp, 0x2c
push ebp
push edi
test eax, eax
je 0x4594e7
mov edi, dword [eax + 0x1c]
test edi, edi
je 0x4594e7
mov ecx, dword [eax + 0xc]
test ecx, ecx
je 0x4594e7
mov ebp, dword [eax]
test ebp, ebp
jne 0x4580e6
cmp dword [eax + 4], ebp
jne 0x4594e7
cmp dword [edi], 0xb
jne 0x4580f1
mov dword [edi], 0xc
mov edx, dword [eax + 4]
mov dword [esp + 0x18], ecx
mov ecx, dword [eax + 0x10]
push ebx
mov ebx, dword [edi + 0x38]
mov dword [esp + 0x14], ecx
mov dword [esp + 0x24], ecx
mov ecx, dword [edi]
push esi
mov esi, dword [edi + 0x3c]
mov dword [esp + 0x10], edx
mov dword [esp + 0x38], edx
mov dword [esp + 0x30], 0
cmp ecx, 0x1c
jbe switch.0x00458134
mov eax, 0xfffffffe
pop esi
pop ebx
pop edi
pop ebp
add esp, 0x2c
ret
mov eax, dword [esp + 0x40]
jmp dword [ecx*4 + 0x4594f4]
cmp dword [edi + 8], 0
jne 0x45814c
mov dword [edi], 0xc
jmp 0x4593a8
cmp esi, 0x10
jae 0x458171
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
dec edx
add esi, 8
inc ebp
add ebx, eax
mov dword [esp + 0x10], edx
cmp esi, 0x10
jb 0x458151
test byte [edi + 8], 2
je 0x4581be
cmp ebx, 0x8b1f
jne 0x4581be
push 0
xor edx, edx
xor ecx, ecx
call fcn.0045b000
add esp, 4
mov edx, 2
lea ecx, [esp + 0x1c]
mov dword [edi + 0x18], eax
mov byte [esp + 0x1c], 0x1f
mov byte [esp + 0x1d], 0x8b
call fcn.0045b010
mov edx, dword [esp + 0x10]
xor ebx, ebx
mov dword [edi + 0x18], eax
xor esi, esi
mov dword [edi], 1
jmp 0x4593a8
mov eax, dword [edi + 0x20]
mov dword [edi + 0x10], 0
test eax, eax
je 0x4581d3
mov dword [eax + 0x30], 0xffffffff
test byte [edi + 8], 1
je 0x458275
movzx eax, bl
shl eax, 8
mov ecx, ebx
shr ecx, 8
add eax, ecx
xor edx, edx
mov ecx, 0x1f
div ecx
test edx, edx
jne 0x458275
mov edx, ebx
and dl, 0xf
cmp dl, 8
je 0x458215
mov eax, dword [esp + 0x40]
mov edx, dword [esp + 0x10]
mov dword [eax + 0x18], str.unknown_compression_method
jmp 0x4593a2
shr ebx, 4
mov ecx, ebx
and ecx, 0xf
add ecx, 8
sub esi, 4
cmp ecx, dword [edi + 0x24]
jbe 0x45823c
mov ecx, dword [esp + 0x40]
mov edx, dword [esp + 0x10]
mov dword [ecx + 0x18], str.invalid_window_size
jmp 0x4593a2
mov edx, 1
shl edx, cl
xor eax, eax
xor ecx, ecx
mov dword [edi + 0x14], edx
xor edx, edx
call fcn.00456210
mov ecx, dword [esp + 0x40]
mov edx, dword [esp + 0x10]
shr ebx, 8
not ebx
and ebx, 2
or ebx, 9
mov dword [edi], ebx
xor ebx, ebx
mov dword [edi + 0x18], eax
mov dword [ecx + 0x30], eax
xor esi, esi
jmp 0x4593a8
mov edx, dword [esp + 0x40]
mov dword [edx + 0x18], str.incorrect_header_check
mov edx, dword [esp + 0x10]
jmp 0x4593a2
cmp esi, 0x10
jae 0x4582b0
mov edi, edi
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
dec edx
add esi, 8
inc ebp
add ebx, eax
mov dword [esp + 0x10], edx
cmp esi, 0x10
jb 0x458290
mov dword [edi + 0x10], ebx
cmp bl, 8
je 0x4582c8
mov ecx, dword [esp + 0x40]
mov dword [ecx + 0x18], str.unknown_compression_method
jmp 0x4593a2
test ebx, 0xe000
je 0x4582e0
mov eax, dword [esp + 0x40]
mov dword [eax + 0x18], str.unknown_header_flags_set
jmp 0x4593a2
mov eax, dword [edi + 0x20]
test eax, eax
je 0x4582f1
mov ecx, ebx
shr ecx, 8
and ecx, 1
mov dword [eax], ecx
test dword [edi + 0x10], 0x200
je 0x45831d
mov eax, dword [edi + 0x18]
mov byte [esp + 0x1c], bl
shr ebx, 8
mov edx, 2
lea ecx, [esp + 0x1c]
mov byte [esp + 0x1d], bl
call fcn.0045b010
mov edx, dword [esp + 0x10]
mov dword [edi + 0x18], eax
xor ebx, ebx
xor esi, esi
mov dword [edi], 2
jmp 0x458330
cmp esi, 0x20
jae 0x458350
mov edi, edi
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
dec edx
add esi, 8
inc ebp
add ebx, eax
mov dword [esp + 0x10], edx
cmp esi, 0x20
jb 0x458330
mov eax, dword [edi + 0x20]
test eax, eax
je 0x45835a
mov dword [eax + 4], ebx
test dword [edi + 0x10], 0x200
je 0x458398
mov eax, dword [edi + 0x18]
mov ecx, ebx
mov edx, ebx
shr ecx, 8
shr edx, 0x10
mov byte [esp + 0x1c], bl
mov byte [esp + 0x1d], cl
mov byte [esp + 0x1e], dl
shr ebx, 0x18
mov edx, 4
lea ecx, [esp + 0x1c]
mov byte [esp + 0x1f], bl
call fcn.0045b010
mov edx, dword [esp + 0x10]
mov dword [edi + 0x18], eax
xor ebx, ebx
xor esi, esi
mov dword [edi], 3
jmp 0x4583b0
cmp esi, 0x10
jae 0x4583d0
lea esp, [esp]
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
dec edx
add esi, 8
inc ebp
add ebx, eax
mov dword [esp + 0x10], edx
cmp esi, 0x10
jb 0x4583b0
mov eax, dword [edi + 0x20]
test eax, eax
je 0x4583ed
mov ecx, ebx
and ecx, 0xff
mov dword [eax + 8], ecx
mov ecx, dword [edi + 0x20]
mov eax, ebx
shr eax, 8
mov dword [ecx + 0xc], eax
test dword [edi + 0x10], 0x200
je 0x458419
mov eax, dword [edi + 0x18]
mov byte [esp + 0x1c], bl
shr ebx, 8
mov edx, 2
lea ecx, [esp + 0x1c]
mov byte [esp + 0x1d], bl
call fcn.0045b010
mov edx, dword [esp + 0x10]
mov dword [edi + 0x18], eax
xor ebx, ebx
xor esi, esi
mov dword [edi], 4
test dword [edi + 0x10], 0x400
je 0x458490
cmp esi, 0x10
jae 0x458451
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
dec edx
add esi, 8
inc ebp
add ebx, eax
mov dword [esp + 0x10], edx
cmp esi, 0x10
jb 0x458431
mov eax, dword [edi + 0x20]
mov dword [edi + 0x40], ebx
test eax, eax
je 0x45845e
mov dword [eax + 0x14], ebx
test dword [edi + 0x10], 0x200
je 0x45848a
mov eax, dword [edi + 0x18]
mov byte [esp + 0x1c], bl
shr ebx, 8
mov edx, 2
lea ecx, [esp + 0x1c]
mov byte [esp + 0x1d], bl
call fcn.0045b010
mov edx, dword [esp + 0x10]
mov dword [edi + 0x18], eax
xor ebx, ebx
xor esi, esi
jmp 0x45849e
mov eax, dword [edi + 0x20]
test eax, eax
je 0x45849e
mov dword [eax + 0x10], 0
mov dword [edi], 5
test dword [edi + 0x10], 0x400
je 0x45854d
mov ecx, dword [edi + 0x40]
mov dword [esp + 0x14], ecx
cmp ecx, edx
jbe 0x4584c2
mov ecx, edx
mov dword [esp + 0x14], edx
test ecx, ecx
je 0x458543
mov eax, dword [edi + 0x20]
test eax, eax
je 0x45850e
mov eax, dword [eax + 0x10]
mov dword [esp + 0x34], eax
test eax, eax
je 0x45850e
mov eax, dword [edi + 0x20]
mov eax, dword [eax + 0x14]
sub eax, dword [edi + 0x40]
mov edx, dword [edi + 0x20]
mov edx, dword [edx + 0x18]
add ecx, eax
cmp ecx, edx
jbe 0x4584f1
sub edx, eax
jmp 0x4584f5
mov edx, dword [esp + 0x14]
mov ecx, dword [esp + 0x34]
push edx
add ecx, eax
push ebp
push ecx
call fcn.00462180
mov ecx, dword [esp + 0x20]
mov edx, dword [esp + 0x1c]
add esp, 0xc
test dword [edi + 0x10], 0x200
je 0x458538
mov eax, dword [edi + 0x18]
test ebp, ebp
jne 0x458522
xor eax, eax
jmp 0x458535
mov edx, dword [esp + 0x14]
mov ecx, ebp
call fcn.0045b010
mov ecx, dword [esp + 0x14]
mov edx, dword [esp + 0x10]
mov dword [edi + 0x18], eax
sub edx, ecx
add ebp, ecx
sub dword [edi + 0x40], ecx
mov dword [esp + 0x10], edx
cmp dword [edi + 0x40], 0
jne 0x459402
mov dword [edi + 0x40], 0
mov dword [edi], 6
test dword [edi + 0x10], 0x800
je 0x4585f8
test edx, edx
je 0x459402
xor eax, eax
movzx ecx, byte [eax + ebp]
inc eax
mov dword [esp + 0x14], eax
mov eax, dword [edi + 0x20]
mov dword [esp + 0x24], ecx
test eax, eax
je 0x4585aa
mov ecx, dword [eax + 0x1c]
mov dword [esp + 0x34], ecx
test ecx, ecx
je 0x4585aa
mov ecx, dword [edi + 0x40]
cmp ecx, dword [eax + 0x20]
jae 0x4585aa
mov edx, dword [esp + 0x34]
mov al, byte [esp + 0x24]
mov byte [edx + ecx], al
inc dword [edi + 0x40]
mov edx, dword [esp + 0x10]
cmp dword [esp + 0x24], 0
mov eax, dword [esp + 0x14]
je 0x4585b9
cmp eax, edx
jb 0x458571
test dword [edi + 0x10], 0x200
je 0x4585e3
mov eax, dword [edi + 0x18]
test ebp, ebp
jne 0x4585cd
xor eax, eax
jmp 0x4585dc
mov edx, dword [esp + 0x14]
mov ecx, ebp
call fcn.0045b010
mov edx, dword [esp + 0x10]
mov dword [edi + 0x18], eax
mov eax, dword [esp + 0x14]
sub edx, eax
add ebp, eax
cmp dword [esp + 0x24], 0
mov dword [esp + 0x10], edx
jne 0x459402
jmp 0x458606
mov eax, dword [edi + 0x20]
test eax, eax
je 0x458606
mov dword [eax + 0x1c], 0
mov dword [edi + 0x40], 0
mov dword [edi], 7
test dword [edi + 0x10], 0x1000
je 0x4586b7
test edx, edx
je 0x459402
xor eax, eax
lea ebx, [ebx]
movzx ecx, byte [eax + ebp]
inc eax
mov dword [esp + 0x14], eax
mov eax, dword [edi + 0x20]
mov dword [esp + 0x24], ecx
test eax, eax
je 0x458669
mov ecx, dword [eax + 0x24]
mov dword [esp + 0x34], ecx
test ecx, ecx
je 0x458669
mov ecx, dword [edi + 0x40]
cmp ecx, dword [eax + 0x28]
jae 0x458669
mov edx, dword [esp + 0x34]
mov al, byte [esp + 0x24]
mov byte [edx + ecx], al
inc dword [edi + 0x40]
mov edx, dword [esp + 0x10]
cmp dword [esp + 0x24], 0
mov eax, dword [esp + 0x14]
je 0x458678
cmp eax, edx
jb 0x458630
test dword [edi + 0x10], 0x200
je 0x4586a2
mov eax, dword [edi + 0x18]
test ebp, ebp
jne 0x45868c
xor eax, eax
jmp 0x45869b
mov edx, dword [esp + 0x14]
mov ecx, ebp
call fcn.0045b010
mov edx, dword [esp + 0x10]
mov dword [edi + 0x18], eax
mov eax, dword [esp + 0x14]
sub edx, eax
add ebp, eax
cmp dword [esp + 0x24], 0
mov dword [esp + 0x10], edx
jne 0x459402
jmp 0x4586c5
mov eax, dword [edi + 0x20]
test eax, eax
je 0x4586c5
mov dword [eax + 0x24], 0
mov dword [edi], 8
test dword [edi + 0x10], 0x200
je 0x45871c
cmp esi, 0x10
jae 0x458700
lea esp, [esp]
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
dec edx
add esi, 8
inc ebp
add ebx, eax
mov dword [esp + 0x10], edx
cmp esi, 0x10
jb 0x4586e0
movzx ecx, word [edi + 0x18]
cmp ebx, ecx
je 0x458718
mov eax, dword [esp + 0x40]
mov dword [eax + 0x18], str.header_crc_mismatch
jmp 0x4593a2
xor ebx, ebx
xor esi, esi
mov eax, dword [edi + 0x20]
test eax, eax
je 0x458739
mov ecx, dword [edi + 0x10]
sar ecx, 9
and ecx, 1
mov dword [eax + 0x2c], ecx
mov edx, dword [edi + 0x20]
mov dword [edx + 0x30], 1
push 0
xor edx, edx
xor ecx, ecx
call fcn.0045b000
mov ecx, dword [esp + 0x44]
mov edx, dword [esp + 0x14]
add esp, 4
mov dword [edi + 0x18], eax
mov dword [ecx + 0x30], eax
mov dword [edi], 0xb
jmp 0x4593a8
cmp esi, 0x20
jae 0x458785
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
dec edx
add esi, 8
inc ebp
add ebx, eax
mov dword [esp + 0x10], edx
cmp esi, 0x20
jb 0x458765
mov ecx, ebx
and ecx, 0xff00
mov eax, ebx
shl eax, 0x10
add ecx, eax
mov eax, ebx
shr eax, 8
and eax, 0xff00
shl ecx, 8
add ecx, eax
shr ebx, 0x18
lea eax, [ecx + ebx]
mov ecx, dword [esp + 0x40]
mov dword [edi + 0x18], eax
mov dword [ecx + 0x30], eax
xor ebx, ebx
xor esi, esi
mov dword [edi], 0xa
mov eax, ecx
cmp dword [edi + 0xc], 0
je 0x4593c0
xor eax, eax
xor edx, edx
xor ecx, ecx
call fcn.00456210
mov edx, dword [esp + 0x40]
mov dword [edx + 0x30], eax
mov edx, dword [esp + 0x10]
mov dword [edi + 0x18], eax
mov dword [edi], 0xb
cmp dword [edi + 4], 0
je 0x458802
mov ecx, esi
and ecx, 7
shr ebx, cl
sub esi, ecx
mov dword [edi], 0x18
jmp 0x4593a8
cmp esi, 3
jae 0x458827
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
dec edx
add esi, 8
inc ebp
add ebx, eax
mov dword [esp + 0x10], edx
cmp esi, 3
jb 0x458807
mov ecx, ebx
shr ebx, 1
mov eax, ebx
and ecx, 1
and eax, 3
dec esi
mov dword [edi + 4], ecx
cmp eax, 3
ja case.default.0x45883c
jmp dword [eax*4 + 0x459568]
shr ebx, 2
mov dword [edi], 0xd
sub esi, 2
jmp 0x4593a8
shr ebx, 2
mov dword [edi + 0x4c], 0x477f68
mov dword [edi + 0x54], 9
mov dword [edi + 0x50], 0x478768
mov dword [edi + 0x58], 5
mov dword [edi], 0x12
sub esi, 2
jmp 0x4593a8
shr ebx, 2
mov dword [edi], 0xf
sub esi, 2
jmp 0x4593a8
mov eax, dword [esp + 0x40]
mov dword [eax + 0x18], str.invalid_block_type
mov dword [edi], 0x1b
shr ebx, 2
sub esi, 2
jmp 0x4593a8
mov ecx, esi
and ecx, 7
sub esi, ecx
shr ebx, cl
cmp esi, 0x20
jae 0x4588e0
lea esp, [esp]
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
dec edx
add esi, 8
inc ebp
add ebx, eax
mov dword [esp + 0x10], edx
cmp esi, 0x20
jb 0x4588c0
mov ecx, ebx
mov eax, ebx
not ecx
and eax, 0xffff
shr ecx, 0x10
cmp eax, ecx
je 0x458902
mov eax, dword [esp + 0x40]
mov dword [eax + 0x18], str.invalid_stored_block_lengths
jmp 0x4593a2
xor ebx, ebx
mov dword [edi + 0x40], eax
xor esi, esi
mov dword [edi], 0xe
mov eax, dword [edi + 0x40]
mov dword [esp + 0x14], eax
test eax, eax
je 0x458f64
cmp eax, edx
jbe 0x458928
mov eax, edx
mov dword [esp + 0x14], edx
mov ecx, dword [esp + 0x18]
cmp eax, ecx
jbe 0x458936
mov eax, ecx
mov dword [esp + 0x14], eax
test eax, eax
je 0x459402
mov ecx, dword [esp + 0x14]
mov edx, dword [esp + 0x20]
push ecx
push ebp
push edx
call fcn.00462180
mov eax, dword [esp + 0x20]
sub dword [esp + 0x1c], eax
sub dword [esp + 0x24], eax
add dword [esp + 0x2c], eax
mov edx, dword [esp + 0x1c]
add esp, 0xc
add ebp, eax
sub dword [edi + 0x40], eax
jmp 0x4593a8
cmp esi, 0xe
jae 0x458994
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
dec edx
add esi, 8
inc ebp
add ebx, eax
mov dword [esp + 0x10], edx
cmp esi, 0xe
jb 0x458974
mov ecx, ebx
and ecx, 0x1f
shr ebx, 5
add ecx, 0x101
mov eax, ebx
mov dword [edi + 0x60], ecx
shr ebx, 5
mov ecx, ebx
and eax, 0x1f
and ecx, 0xf
inc eax
add ecx, 4
shr ebx, 4
sub esi, 0xe
cmp dword [edi + 0x60], 0x11e
mov dword [edi + 0x64], eax
mov dword [edi + 0x5c], ecx
ja 0x458ab4
cmp eax, 0x1e
ja 0x458ab4
mov dword [edi + 0x68], 0
mov dword [edi], 0x10
mov ecx, dword [edi + 0x68]
cmp ecx, dword [edi + 0x5c]
jae 0x458a3b
lea ecx, [ecx]
cmp esi, 3
jae 0x458a15
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
dec edx
add esi, 8
inc ebp
add ebx, eax
mov dword [esp + 0x10], edx
cmp esi, 3
jb 0x4589f5
mov eax, dword [edi + 0x68]
movzx eax, word [eax*2 + 0x4787e8]
mov ecx, ebx
and ecx, 7
mov word [edi + eax*2 + 0x70], cx
inc dword [edi + 0x68]
mov ecx, dword [edi + 0x68]
shr ebx, 3
sub esi, 3
cmp ecx, dword [edi + 0x5c]
jb 0x4589f0
mov eax, 0x13
cmp dword [edi + 0x68], eax
jae 0x458a6a
jmp 0x458a50
mov edx, dword [edi + 0x68]
movzx ecx, word [edx*2 + 0x4787e8]
xor edx, edx
mov word [edi + ecx*2 + 0x70], dx
inc dword [edi + 0x68]
cmp dword [edi + 0x68], eax
jb 0x458a50
lea eax, [edi + 0x530]
lea ecx, [edi + 0x6c]
mov dword [ecx], eax
mov dword [edi + 0x4c], eax
lea eax, [edi + 0x2f0]
push eax
push ecx
lea edx, [edi + 0x54]
push 0x13
lea ecx, [edi + 0x70]
push 0
mov dword [edx], 7
call fcn.0045b780
mov edx, dword [esp + 0x20]
add esp, 0x10
mov dword [esp + 0x30], eax
test eax, eax
je 0x458ac4
mov ecx, dword [esp + 0x40]
mov dword [ecx + 0x18], str.invalid_code_lengths_set
jmp 0x4593a2
mov eax, dword [esp + 0x40]
mov dword [eax + 0x18], str.too_many_length_or_distance_symbols
jmp 0x4593a2
mov dword [edi + 0x68], 0
mov dword [edi], 0x11
mov eax, dword [edi + 0x64]
add eax, dword [edi + 0x60]
cmp dword [edi + 0x68], eax
jae 0x458cda
mov ecx, dword [edi + 0x54]
mov eax, 1
shl eax, cl
mov ecx, dword [edi + 0x4c]
dec eax
and eax, ebx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [esp + 0x14], eax
cmp ecx, esi
jbe 0x458b41
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
mov ecx, dword [edi + 0x54]
dec edx
add esi, 8
add ebx, eax
mov eax, 1
shl eax, cl
mov ecx, dword [edi + 0x4c]
inc ebp
mov dword [esp + 0x10], edx
dec eax
and eax, ebx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [esp + 0x14], eax
cmp ecx, esi
ja 0x458b03
mov ecx, eax
shr ecx, 0x10
cmp ecx, 0x10
jae 0x458b99
mov ecx, eax
shr ecx, 8
movzx ecx, cl
cmp esi, ecx
jae 0x458b7d
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
dec edx
add esi, 8
inc ebp
add ebx, eax
mov eax, dword [esp + 0x14]
movzx ecx, ah
mov dword [esp + 0x10], edx
cmp esi, ecx
jb 0x458b57
movzx ecx, ah
mov eax, dword [edi + 0x68]
shr ebx, cl
sub esi, ecx
mov cx, word [esp + 0x16]
mov word [edi + eax*2 + 0x70], cx
inc dword [edi + 0x68]
jmp 0x458ccb
mov cx, word [esp + 0x16]
cmp cx, 0x10
jne 0x458c03
movzx ecx, ah
lea eax, [ecx + 2]
mov dword [esp + 0x2c], ecx
cmp esi, eax
jae 0x458bd8
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
mov ecx, dword [esp + 0x2c]
dec edx
add esi, 8
add ebx, eax
lea eax, [ecx + 2]
inc ebp
mov dword [esp + 0x10], edx
cmp esi, eax
jb 0x458bb2
mov eax, dword [edi + 0x68]
shr ebx, cl
sub esi, ecx
test eax, eax
je 0x458d2f
movzx ecx, word [edi + eax*2 + 0x6e]
mov eax, ebx
and eax, 3
add eax, 3
shr ebx, 2
mov dword [esp + 0x24], ecx
sub esi, 2
jmp 0x458c9c
cmp cx, 0x11
movzx ecx, ah
mov dword [esp + 0x2c], ecx
jne 0x458c51
lea eax, [ecx + 3]
cmp esi, eax
jae 0x458c3d
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
mov ecx, dword [esp + 0x2c]
dec edx
add esi, 8
add ebx, eax
lea eax, [ecx + 3]
inc ebp
mov dword [esp + 0x10], edx
cmp esi, eax
jb 0x458c17
shr ebx, cl
mov edx, 0xfffffffd
mov eax, ebx
and eax, 7
add eax, 3
shr ebx, 3
jmp 0x458c90
lea eax, [ecx + 7]
cmp esi, eax
jae 0x458c7e
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
mov ecx, dword [esp + 0x2c]
dec edx
add esi, 8
add ebx, eax
lea eax, [ecx + 7]
inc ebp
mov dword [esp + 0x10], edx
cmp esi, eax
jb 0x458c58
shr ebx, cl
mov edx, 0xfffffff9
mov eax, ebx
and eax, 0x7f
add eax, 0xb
shr ebx, 7
sub edx, ecx
add esi, edx
mov dword [esp + 0x24], 0
mov ecx, dword [edi + 0x64]
mov edx, dword [edi + 0x68]
add ecx, dword [edi + 0x60]
add edx, eax
cmp edx, ecx
ja 0x458d3f
test eax, eax
je 0x458cc7
mov ecx, dword [esp + 0x24]
mov edx, dword [edi + 0x68]
dec eax
mov word [edi + edx*2 + 0x70], cx
inc dword [edi + 0x68]
test eax, eax
jne 0x458cb7
mov edx, dword [esp + 0x10]
mov eax, dword [edi + 0x64]
add eax, dword [edi + 0x60]
cmp dword [edi + 0x68], eax
jb 0x458ae0
cmp dword [edi], 0x1b
je 0x4593a8
lea eax, [edi + 0x530]
lea ecx, [edi + 0x6c]
mov dword [ecx], eax
mov dword [edi + 0x4c], eax
lea eax, [edi + 0x2f0]
push eax
mov eax, dword [edi + 0x60]
push ecx
push eax
lea edx, [edi + 0x54]
lea ecx, [edi + 0x70]
push 1
mov dword [edx], 9
call fcn.0045b780
add esp, 0x10
mov dword [esp + 0x30], eax
test eax, eax
je 0x458d53
mov ecx, dword [esp + 0x40]
mov edx, dword [esp + 0x10]
mov dword [ecx + 0x18], str.invalid_literal_lengths_set
jmp 0x4593a2
mov ecx, dword [esp + 0x40]
mov dword [ecx + 0x18], str.invalid_bit_length_repeat
jmp 0x4593a2
mov edx, dword [esp + 0x40]
mov dword [edx + 0x18], str.invalid_bit_length_repeat
mov edx, dword [esp + 0x10]
jmp 0x4593a2
mov edx, dword [edi + 0x6c]
lea ecx, [edi + 0x2f0]
push ecx
mov ecx, dword [edi + 0x60]
lea eax, [edi + 0x6c]
push eax
mov eax, dword [edi + 0x64]
mov dword [edi + 0x50], edx
push eax
lea edx, [edi + 0x58]
lea ecx, [edi + ecx*2 + 0x70]
push 2
mov dword [edx], 6
call fcn.0045b780
add esp, 0x10
mov dword [esp + 0x30], eax
test eax, eax
je 0x458d9e
mov edx, dword [esp + 0x40]
mov dword [edx + 0x18], str.invalid_distances_set
mov edx, dword [esp + 0x10]
jmp 0x4593a2
mov edx, dword [esp + 0x10]
mov dword [edi], 0x12
cmp edx, 6
jb 0x458e0e
cmp dword [esp + 0x18], 0x102
jb 0x458e0e
mov eax, dword [esp + 0x40]
mov edx, dword [esp + 0x18]
mov ecx, dword [esp + 0x20]
mov dword [eax + 0x10], edx
mov edx, dword [esp + 0x28]
mov dword [eax + 0xc], ecx
mov ecx, dword [esp + 0x10]
push edx
push eax
mov dword [eax], ebp
mov dword [eax + 4], ecx
mov dword [edi + 0x38], ebx
mov dword [edi + 0x3c], esi
call fcn.0045b320
mov eax, dword [esp + 0x48]
mov edx, dword [eax + 0x10]
mov ecx, dword [eax + 0xc]
mov ebp, dword [eax]
mov eax, dword [eax + 4]
mov ebx, dword [edi + 0x38]
mov esi, dword [edi + 0x3c]
mov dword [esp + 0x20], edx
add esp, 8
mov dword [esp + 0x20], ecx
mov dword [esp + 0x10], eax
mov edx, eax
jmp 0x4593a8
mov ecx, dword [edi + 0x54]
mov eax, 1
shl eax, cl
dec eax
and eax, ebx
mov ecx, eax
mov eax, dword [edi + 0x4c]
mov eax, dword [eax + ecx*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [esp + 0x14], eax
cmp ecx, esi
jbe 0x458e71
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
mov ecx, dword [edi + 0x54]
dec edx
add esi, 8
add ebx, eax
mov eax, 1
shl eax, cl
mov ecx, dword [edi + 0x4c]
inc ebp
mov dword [esp + 0x10], edx
dec eax
and eax, ebx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [esp + 0x14], eax
cmp ecx, esi
ja 0x458e33
test al, al
je 0x458f39
test al, 0xf0
jne 0x458f39
mov ecx, eax
shr ecx, 8
mov dword [esp + 0x34], ecx
movzx ecx, cl
mov dword [esp + 0x24], ecx
movzx ecx, al
add ecx, dword [esp + 0x24]
mov dword [esp + 0x2c], eax
mov eax, 1
shl eax, cl
mov ecx, dword [esp + 0x24]
dec eax
and eax, ebx
shr eax, cl
mov ecx, dword [esp + 0x14]
shr ecx, 0x10
add eax, ecx
mov ecx, eax
mov eax, dword [edi + 0x4c]
mov eax, dword [eax + ecx*4]
movzx ecx, byte [esp + 0x34]
mov dword [esp + 0x14], eax
shr eax, 8
movzx eax, al
add eax, ecx
cmp eax, esi
jbe 0x458f2c
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
mov ecx, dword [esp + 0x2c]
dec edx
add esi, 8
add ebx, eax
movzx eax, ch
mov dword [esp + 0x24], eax
movzx ecx, cl
add ecx, eax
mov eax, 1
shl eax, cl
mov ecx, dword [esp + 0x24]
inc ebp
mov dword [esp + 0x10], edx
dec eax
and eax, ebx
shr eax, cl
movzx ecx, word [esp + 0x2e]
add eax, ecx
mov ecx, dword [edi + 0x4c]
mov eax, dword [ecx + eax*4]
mov dword [esp + 0x14], eax
shr eax, 8
movzx eax, al
add eax, dword [esp + 0x24]
cmp eax, esi
ja 0x458ed2
movzx ecx, byte [esp + 0x2d]
mov eax, dword [esp + 0x14]
shr ebx, cl
sub esi, ecx
mov ecx, eax
shr ecx, 8
movzx ecx, cl
shr ebx, cl
sub esi, ecx
mov dword [esp + 0x24], ecx
mov ecx, eax
shr ecx, 0x10
mov dword [edi + 0x40], ecx
test al, al
jne 0x458f60
mov dword [edi], 0x17
jmp 0x4593a8
test al, 0x20
je 0x458f6f
mov dword [edi], 0xb
jmp 0x4593a8
test al, 0x40
je 0x458f83
mov eax, dword [esp + 0x40]
mov dword [eax + 0x18], str.invalid_literal_length_code
jmp 0x4593a2
movzx ecx, al
and ecx, 0xf
mov dword [edi + 0x48], ecx
mov dword [edi], 0x13
mov eax, dword [edi + 0x48]
test eax, eax
je 0x458fd4
cmp esi, eax
jae 0x458fc0
lea ecx, [ecx]
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
dec edx
add esi, 8
inc ebp
add ebx, eax
mov dword [esp + 0x10], edx
cmp esi, dword [edi + 0x48]
jb 0x458fa0
mov ecx, dword [edi + 0x48]
mov eax, 1
shl eax, cl
dec eax
and eax, ebx
add dword [edi + 0x40], eax
shr ebx, cl
sub esi, ecx
mov dword [edi], 0x14
mov ecx, dword [edi + 0x58]
mov eax, 1
shl eax, cl
dec eax
and eax, ebx
mov ecx, eax
mov eax, dword [edi + 0x50]
mov eax, dword [eax + ecx*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [esp + 0x14], eax
cmp ecx, esi
jbe 0x45903e
nop
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
mov ecx, dword [edi + 0x58]
dec edx
add esi, 8
add ebx, eax
mov eax, 1
shl eax, cl
mov ecx, dword [edi + 0x50]
inc ebp
mov dword [esp + 0x10], edx
dec eax
and eax, ebx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [esp + 0x14], eax
cmp ecx, esi
ja 0x459000
test al, 0xf0
jne 0x4590fe
mov ecx, eax
shr ecx, 8
mov dword [esp + 0x34], ecx
movzx ecx, cl
mov dword [esp + 0x24], ecx
movzx ecx, al
add ecx, dword [esp + 0x24]
mov dword [esp + 0x2c], eax
mov eax, 1
shl eax, cl
mov ecx, dword [esp + 0x24]
dec eax
and eax, ebx
shr eax, cl
mov ecx, dword [esp + 0x14]
shr ecx, 0x10
add eax, ecx
mov ecx, eax
mov eax, dword [edi + 0x50]
mov eax, dword [eax + ecx*4]
movzx ecx, byte [esp + 0x34]
mov dword [esp + 0x14], eax
shr eax, 8
movzx eax, al
add eax, ecx
cmp eax, esi
jbe 0x4590f1
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
mov ecx, dword [esp + 0x2c]
dec edx
add esi, 8
add ebx, eax
movzx eax, ch
mov dword [esp + 0x24], eax
movzx ecx, cl
add ecx, eax
mov eax, 1
shl eax, cl
mov ecx, dword [esp + 0x24]
inc ebp
mov dword [esp + 0x10], edx
dec eax
and eax, ebx
shr eax, cl
movzx ecx, word [esp + 0x2e]
add eax, ecx
mov ecx, dword [edi + 0x50]
mov eax, dword [ecx + eax*4]
mov dword [esp + 0x14], eax
shr eax, 8
movzx eax, al
add eax, dword [esp + 0x24]
cmp eax, esi
ja 0x459097
movzx ecx, byte [esp + 0x2d]
mov eax, dword [esp + 0x14]
shr ebx, cl
sub esi, ecx
mov ecx, eax
shr ecx, 8
movzx ecx, cl
shr ebx, cl
sub esi, ecx
mov dword [esp + 0x24], ecx
test al, 0x40
je 0x459122
mov eax, dword [esp + 0x40]
mov dword [eax + 0x18], str.invalid_distance_code
jmp 0x4593a2
mov ecx, eax
movzx eax, al
shr ecx, 0x10
and eax, 0xf
mov dword [edi + 0x44], ecx
mov dword [edi + 0x48], eax
mov dword [edi], 0x15
mov eax, dword [edi + 0x48]
test eax, eax
je 0x459178
cmp esi, eax
jae 0x459164
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
dec edx
add esi, 8
inc ebp
add ebx, eax
mov dword [esp + 0x10], edx
cmp esi, dword [edi + 0x48]
jb 0x459144
mov ecx, dword [edi + 0x48]
mov eax, 1
shl eax, cl
dec eax
and eax, ebx
add dword [edi + 0x44], eax
shr ebx, cl
sub esi, ecx
mov ecx, dword [edi + 0x2c]
sub ecx, dword [esp + 0x18]
add ecx, dword [esp + 0x28]
cmp dword [edi + 0x44], ecx
jbe 0x459198
mov eax, dword [esp + 0x40]
mov dword [eax + 0x18], str.invalid_distance_too_far_back
jmp 0x4593a2
mov dword [edi], 0x16
cmp dword [esp + 0x18], 0
je 0x459402
mov ecx, dword [esp + 0x28]
sub ecx, dword [esp + 0x18]
mov eax, dword [edi + 0x44]
cmp eax, ecx
jbe 0x4591f4
sub eax, ecx
mov ecx, dword [edi + 0x30]
mov dword [esp + 0x14], eax
cmp eax, ecx
jbe 0x4591d5
sub eax, ecx
mov ecx, dword [edi + 0x34]
add ecx, dword [edi + 0x28]
mov dword [esp + 0x14], eax
sub ecx, eax
jmp 0x4591e1
mov ecx, dword [edi + 0x34]
sub ecx, eax
add ecx, dword [edi + 0x30]
mov eax, dword [esp + 0x14]
mov dword [esp + 0x2c], ecx
mov ecx, dword [edi + 0x40]
mov dword [esp + 0x34], ecx
cmp eax, ecx
jbe 0x459209
mov eax, ecx
jmp 0x459205
mov ecx, dword [esp + 0x20]
sub ecx, eax
mov eax, dword [edi + 0x40]
mov dword [esp + 0x2c], ecx
mov dword [esp + 0x34], eax
mov dword [esp + 0x14], eax
mov ecx, dword [esp + 0x18]
cmp eax, ecx
jbe 0x459217
mov eax, ecx
mov dword [esp + 0x14], eax
sub ecx, eax
mov dword [esp + 0x18], ecx
mov ecx, dword [esp + 0x34]
sub ecx, eax
mov eax, dword [esp + 0x20]
mov dword [edi + 0x40], ecx
lea ebx, [ebx]
mov ecx, dword [esp + 0x2c]
mov cl, byte [ecx]
inc dword [esp + 0x2c]
mov byte [eax], cl
inc eax
sub dword [esp + 0x14], 1
jne 0x459230
cmp dword [edi + 0x40], 0
mov dword [esp + 0x20], eax
jne 0x4593a8
mov dword [edi], 0x12
jmp 0x4593a8
cmp dword [esp + 0x18], 0
je 0x459402
mov eax, dword [esp + 0x20]
mov cl, byte [edi + 0x40]
mov byte [eax], cl
inc eax
dec dword [esp + 0x18]
mov dword [esp + 0x20], eax
mov dword [edi], 0x12
jmp 0x4593a8
cmp dword [edi + 8], 0
je 0x459357
cmp esi, 0x20
jae 0x4592b4
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
dec edx
add esi, 8
inc ebp
add ebx, eax
mov dword [esp + 0x10], edx
cmp esi, 0x20
jb 0x459294
mov eax, dword [esp + 0x28]
sub eax, dword [esp + 0x18]
mov ecx, dword [esp + 0x40]
add dword [ecx + 0x14], eax
add dword [edi + 0x1c], eax
mov dword [esp + 0x28], eax
test eax, eax
je 0x45930e
cmp dword [edi + 0x10], 0
je 0x4592ee
mov ecx, dword [esp + 0x20]
sub ecx, eax
mov eax, dword [edi + 0x18]
jne 0x4592e3
xor eax, eax
jmp 0x459304
mov edx, dword [esp + 0x28]
call fcn.0045b010
jmp 0x459300
mov eax, dword [esp + 0x28]
mov edx, dword [esp + 0x20]
mov ecx, dword [edi + 0x18]
sub edx, eax
call fcn.00456210
mov edx, dword [esp + 0x10]
mov ecx, dword [esp + 0x40]
mov dword [edi + 0x18], eax
mov dword [ecx + 0x30], eax
cmp dword [edi + 0x10], 0
mov eax, dword [esp + 0x18]
mov dword [esp + 0x28], eax
mov eax, ebx
jne 0x459341
and eax, 0xff00
mov ecx, ebx
shl ecx, 0x10
add eax, ecx
mov ecx, ebx
shr ecx, 8
and ecx, 0xff00
shl eax, 8
add eax, ecx
mov ecx, ebx
shr ecx, 0x18
add eax, ecx
cmp eax, dword [edi + 0x18]
je 0x459353
mov eax, dword [esp + 0x40]
mov dword [eax + 0x18], str.incorrect_data_check
jmp 0x4593a2
xor ebx, ebx
xor esi, esi
mov dword [edi], 0x19
cmp dword [edi + 8], 0
je 0x4593ea
cmp dword [edi + 0x10], 0
je 0x4593ea
cmp esi, 0x20
jae 0x459392
test edx, edx
je 0x459402
movzx eax, byte [ebp]
mov ecx, esi
shl eax, cl
dec edx
add esi, 8
inc ebp
add ebx, eax
mov dword [esp + 0x10], edx
cmp esi, 0x20
jb 0x459372
cmp ebx, dword [edi + 0x1c]
je 0x4593e6
mov ecx, dword [esp + 0x40]
mov dword [ecx + 0x18], str.incorrect_length_check
mov dword [edi], 0x1b
mov ecx, dword [edi]
cmp ecx, 0x1c
jbe 0x458130
pop esi
pop ebx
pop edi
mov eax, 0xfffffffe
pop ebp
add esp, 0x2c
ret
mov ecx, dword [esp + 0x20]
mov dword [edi + 0x3c], esi
pop esi
mov dword [edi + 0x38], ebx
mov dword [eax + 0xc], ecx
mov ecx, dword [esp + 0x14]
pop ebx
mov dword [eax], ebp
pop edi
mov dword [eax + 0x10], ecx
mov dword [eax + 4], edx
mov eax, 2
pop ebp
add esp, 0x2c
ret
xor ebx, ebx
xor esi, esi
mov dword [edi], 0x1a
mov dword [esp + 0x30], 1
jmp 0x459402
mov dword [esp + 0x30], 0xfffffffd
cmp dword [edi + 0x28], 0
mov eax, dword [esp + 0x40]
mov ecx, dword [esp + 0x20]
mov dword [eax + 0xc], ecx
mov ecx, dword [esp + 0x18]
mov dword [eax + 0x10], ecx
mov dword [eax], ebp
mov dword [eax + 4], edx
mov dword [edi + 0x38], ebx
mov dword [edi + 0x3c], esi
jne 0x459432
cmp dword [edi], 0x18
jge 0x459456
mov edx, ecx
cmp dword [esp + 0x28], edx
je 0x459456
push eax
mov eax, dword [esp + 0x2c]
call fcn.00457fc0
add esp, 4
test eax, eax
je 0x459456
mov dword [edi], 0x1c
pop esi
pop ebx
pop edi
mov eax, 0xfffffffc
pop ebp
add esp, 0x2c
ret
mov esi, dword [esp + 0x40]
mov ecx, dword [esp + 0x38]
mov eax, dword [esp + 0x28]
sub eax, dword [esi + 0x10]
sub ecx, dword [esi + 4]
add dword [esi + 0x14], eax
add dword [esi + 8], ecx
add dword [edi + 0x1c], eax
cmp dword [edi + 8], 0
je 0x4594ad
test eax, eax
je 0x4594ad
cmp dword [edi + 0x10], 0
je 0x45949a
mov ecx, dword [esi + 0xc]
sub ecx, eax
mov ebx, dword [edi + 0x18]
jne 0x45948f
xor eax, eax
jmp 0x4594a7
mov edx, eax
mov eax, ebx
call fcn.0045b010
jmp 0x4594a7
mov edx, dword [esi + 0xc]
mov ecx, dword [edi + 0x18]
sub edx, eax
call fcn.00456210
mov dword [edi + 0x18], eax
mov dword [esi + 0x30], eax
mov ecx, dword [edi + 4]
mov eax, dword [esp + 0x30]
neg ecx
sbb ecx, ecx
and ecx, 0x40
xor edx, edx
cmp dword [edi], 0xb
setne dl
dec edx
and edx, 0x80
add ecx, edx
add ecx, dword [edi + 0x3c]
mov dword [esi + 0x2c], ecx
test eax, eax
jne 0x458127
pop esi
pop ebx
pop edi
mov eax, 0xfffffffb
pop ebp
add esp, 0x2c
ret
pop edi
mov eax, 0xfffffffe
pop ebp
add esp, 0x2c
ret