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

Disassembly:
push ebp
mov ebp, esp
mov eax, 0x10
call fcn.00626ba0
push esi
push edi
mov edi, ecx
mov eax, edx
mov dword [ebp - 4], eax
test edi, edi
je 0x59a32f
cmp dword [edi + 0x20], 0
je 0x59a32f
cmp dword [edi + 0x24], 0
je 0x59a32f
mov esi, dword [edi + 0x1c]
test esi, esi
je 0x59a32f
cmp dword [esi], edi
jne 0x59a32f
mov edx, dword [esi + 4]
cmp edx, 0x2a
je 0x599a67
cmp edx, 0x39
je 0x599a67
cmp edx, 0x45
je 0x599a67
cmp edx, 0x49
je 0x599a67
cmp edx, 0x5b
je 0x599a67
cmp edx, 0x67
je 0x599a67
cmp edx, 0x71
je 0x599a67
cmp edx, 0x29a
jne 0x59a32f
cmp dword [edi + 0xc], 0
je 0x59a328
cmp dword [edi + 4], 0
je 0x599a80
cmp dword [edi], 0
je 0x59a328
cmp edx, 0x29a
jne 0x599a91
cmp eax, 4
jne 0x59a328
cmp dword [edi + 0x10], 0
push ebx
je 0x599af7
cmp dword [esi + 0x14], 0
mov ecx, dword [esi + 0x28]
mov dword [esi + 0x28], eax
je 0x599aba
mov ecx, edi
call fcn.005999a0
cmp dword [edi + 0x10], 0
je 0x59a318
mov ebx, dword [esi + 4]
jmp 0x599ae5
cmp dword [edi + 4], 0
mov ebx, edx
jne 0x599ae5
xor eax, eax
mov dword [ebp - 0x10], 9
cmp ecx, 4
cmovg eax, dword [ebp - 0x10]
add ecx, ecx
sub ecx, eax
mov eax, dword [ebp - 4]
add eax, eax
cmp eax, ecx
jg 0x599ae5
cmp dword [ebp - 4], 4
jne 0x599af7
cmp ebx, 0x29a
jne 0x599b0a
cmp dword [edi + 4], 0
je 0x599bd7
pop ebx
mov dword [edi + 0x18], str.buffer_error
mov eax, 0xfffffffb
pop edi
pop esi
mov esp, ebp
pop ebp
ret
cmp ebx, 0x2a
jne 0x599bd7
cmp dword [esi + 0x18], 0
jne 0x599b25
mov dword [esi + 4], 0x71
jmp 0x599bd7
mov ecx, dword [esi + 0x30]
shl ecx, 0xc
sub ecx, 0x7800
cmp dword [esi + 0x88], 2
mov ebx, ecx
jge 0x599b6c
mov eax, dword [esi + 0x84]
cmp eax, 2
jl 0x599b6c
cmp eax, 6
jge 0x599b56
mov eax, 0x40
lea edx, [eax + 0x20]
jmp 0x599b71
jne 0x599b62
mov eax, 0x80
lea edx, [eax + 0x20]
jmp 0x599b71
mov eax, 0xc0
lea edx, [eax + 0x20]
jmp 0x599b71
xor eax, eax
lea edx, [eax + 0x20]
or ecx, eax
cmp dword [esi + 0x6c], 0
je 0x599b7d
mov ecx, ebx
or ecx, edx
mov eax, 0x8421085
mul ecx
sub ecx, edx
shr ecx, 1
add ecx, edx
shr ecx, 4
inc ecx
mov edx, ecx
shl edx, 5
sub edx, ecx
mov ecx, esi
call fcn.00599970
cmp dword [esi + 0x6c], 0
je 0x599bb8
movzx edx, word [edi + 0x32]
mov ecx, esi
call fcn.00599970
movzx edx, word [edi + 0x30]
mov ecx, esi
call fcn.00599970
mov dword [edi + 0x30], 1
mov ecx, edi
mov dword [esi + 4], 0x71
call fcn.005999a0
cmp dword [esi + 0x14], 0
jne 0x59a318
mov eax, dword [esi + 4]
cmp eax, 0x39
jne 0x599caf
mov dword [edi + 0x30], 0
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], 0x1f
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], 0x8b
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], 8
inc dword [esi + 0x14]
mov edx, dword [esi + 0x1c]
mov ebx, dword [esi + 0x14]
test edx, edx
jne 0x599dfc
mov eax, dword [esi + 8]
mov byte [ebx + eax], dl
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], dl
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], dl
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], dl
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], dl
inc dword [esi + 0x14]
mov eax, dword [esi + 0x84]
mov edx, dword [esi + 0x14]
cmp eax, 9
jne 0x599c6a
mov cl, 2
jmp 0x599c7e
cmp dword [esi + 0x88], 2
jge 0x599c7c
cmp eax, 2
jl 0x599c7c
xor cl, cl
jmp 0x599c7e
mov cl, 4
mov eax, dword [esi + 8]
mov byte [edx + eax], cl
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], 0xa
mov ecx, edi
inc dword [esi + 0x14]
mov dword [esi + 4], 0x71
call fcn.005999a0
cmp dword [esi + 0x14], 0
jne 0x59a318
mov eax, dword [esi + 4]
cmp eax, 0x45
jne 0x599f22
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x10], 0
je 0x599df0
movzx eax, word [eax + 0x14]
sub eax, dword [esi + 0x20]
mov ebx, dword [esi + 0x14]
mov ecx, ebx
mov edx, dword [esi + 0xc]
mov dword [ebp - 8], eax
add eax, ebx
cmp eax, edx
jbe 0x599da0
mov dword [ebp - 0xc], ebx
mov eax, dword [esi + 0x1c]
sub edx, ecx
push edx
mov dword [ebp - 0x10], edx
mov eax, dword [eax + 0x10]
add eax, dword [esi + 0x20]
push eax
mov eax, dword [esi + 8]
add eax, dword [ebp - 0xc]
push eax
call fcn.00629750
mov eax, dword [esi + 0x1c]
add esp, 0xc
mov ecx, dword [esi + 0xc]
mov dword [esi + 0x14], ecx
cmp dword [eax + 0x2c], 0
je 0x599d2c
cmp ecx, ebx
jbe 0x599d2c
mov edx, dword [esi + 8]
sub ecx, ebx
push ecx
mov ecx, dword [edi + 0x30]
add edx, ebx
call fcn.0059c6d0
add esp, 4
mov dword [edi + 0x30], eax
mov eax, dword [ebp - 0x10]
add dword [esi + 0x20], eax
mov ebx, dword [edi + 0x1c]
mov ecx, ebx
mov dword [ebp - 0xc], ebx
call fcn.0059e220
mov eax, dword [ebx + 0x14]
mov ebx, dword [edi + 0x10]
cmp eax, ebx
cmovbe ebx, eax
test ebx, ebx
je 0x599d7a
mov eax, dword [ebp - 0xc]
push ebx
push dword [eax + 0x10]
push dword [edi + 0xc]
call fcn.00629750
mov ecx, dword [ebp - 0xc]
add esp, 0xc
add dword [edi + 0xc], ebx
add dword [ecx + 0x10], ebx
add dword [edi + 0x14], ebx
sub dword [edi + 0x10], ebx
sub dword [ecx + 0x14], ebx
jne 0x599d7a
mov eax, dword [ecx + 8]
mov dword [ecx + 0x10], eax
mov ecx, dword [esi + 0x14]
test ecx, ecx
jne 0x59a318
mov eax, dword [ebp - 8]
xor ebx, ebx
sub eax, dword [ebp - 0x10]
mov edx, dword [esi + 0xc]
mov dword [ebp - 8], eax
add eax, ecx
mov dword [ebp - 0xc], ecx
cmp eax, edx
ja 0x599ce4
mov eax, dword [esi + 0x1c]
mov edx, dword [esi + 0x20]
push dword [ebp - 8]
mov eax, dword [eax + 0x10]
add eax, edx
push eax
mov eax, dword [esi + 8]
add eax, ecx
push eax
call fcn.00629750
mov eax, dword [ebp - 8]
add esp, 0xc
add dword [esi + 0x14], eax
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 0x14]
cmp dword [eax + 0x2c], 0
je 0x599de9
cmp ecx, ebx
jbe 0x599de9
mov edx, dword [esi + 8]
sub ecx, ebx
push ecx
mov ecx, dword [edi + 0x30]
add edx, ebx
call fcn.0059c6d0
add esp, 4
mov dword [edi + 0x30], eax
mov dword [esi + 0x20], 0
mov dword [esi + 4], 0x49
jmp 0x599f2b
mov ecx, dword [edx + 0x24]
mov eax, dword [edx + 0x2c]
neg ecx
sbb cl, cl
and cl, 0x10
neg eax
sbb al, al
and al, 2
add cl, al
mov eax, dword [edx + 0x1c]
neg eax
sbb al, al
and al, 8
add cl, al
mov eax, dword [edx + 0x10]
neg eax
sbb al, al
and al, 4
add cl, al
cmp dword [edx], 0
setne al
add cl, al
mov eax, dword [esi + 8]
mov byte [ebx + eax], cl
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 8]
movzx eax, byte [eax + 4]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 8]
movzx eax, byte [eax + 5]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 8]
movzx eax, byte [eax + 6]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
movzx eax, byte [eax + 7]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov eax, dword [esi + 0x84]
mov edx, dword [esi + 0x14]
cmp eax, 9
jne 0x599e96
mov cl, 2
jmp 0x599eaa
cmp dword [esi + 0x88], 2
jge 0x599ea8
cmp eax, 2
jl 0x599ea8
xor cl, cl
jmp 0x599eaa
mov cl, 4
mov eax, dword [esi + 8]
mov byte [edx + eax], cl
inc dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
mov al, byte [eax + 0xc]
mov byte [edx + ecx], al
mov eax, dword [esi + 0x1c]
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
cmp dword [eax + 0x10], 0
je 0x599ef7
movzx eax, byte [eax + 0x14]
mov ecx, dword [esi + 8]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
movzx eax, byte [eax + 0x15]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x599f0f
mov ecx, dword [edi + 0x30]
push edx
mov edx, dword [esi + 8]
call fcn.0059c6d0
add esp, 4
mov dword [edi + 0x30], eax
mov dword [esi + 0x20], 0
mov dword [esi + 4], 0x45
jmp 0x599cb8
cmp eax, 0x49
jne 0x59a01f
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x1c], 0
je 0x59a016
mov ecx, dword [esi + 0x14]
mov ebx, ecx
mov dword [ebp - 8], ecx
cmp ebx, dword [esi + 0xc]
jne 0x599fbe
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x599f68
cmp ebx, ecx
jbe 0x599f68
mov edx, dword [esi + 8]
sub ebx, ecx
add edx, ecx
mov ecx, dword [edi + 0x30]
push ebx
call fcn.0059c6d0
add esp, 4
mov dword [edi + 0x30], eax
mov ebx, dword [edi + 0x1c]
mov ecx, ebx
mov dword [ebp - 0x10], ebx
call fcn.0059e220
mov eax, dword [ebx + 0x14]
mov ebx, dword [edi + 0x10]
cmp eax, ebx
cmovbe ebx, eax
test ebx, ebx
je 0x599fb0
mov eax, dword [ebp - 0x10]
push ebx
push dword [eax + 0x10]
push dword [edi + 0xc]
call fcn.00629750
mov ecx, dword [ebp - 0x10]
add esp, 0xc
add dword [edi + 0xc], ebx
add dword [ecx + 0x10], ebx
add dword [edi + 0x14], ebx
sub dword [edi + 0x10], ebx
sub dword [ecx + 0x14], ebx
jne 0x599fb0
mov eax, dword [ecx + 8]
mov dword [ecx + 0x10], eax
mov ebx, dword [esi + 0x14]
test ebx, ebx
jne 0x59a318
mov dword [ebp - 8], ebx
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 0x20]
mov eax, dword [eax + 0x1c]
mov dl, byte [ecx + eax]
lea eax, [ecx + 1]
mov dword [esi + 0x20], eax
mov eax, dword [esi + 8]
mov byte [ebx + eax], dl
mov ebx, dword [esi + 0x14]
inc ebx
mov dword [esi + 0x14], ebx
test dl, dl
je 0x599fe9
mov ecx, dword [ebp - 8]
jmp 0x599f40
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x59a00f
mov eax, dword [ebp - 8]
cmp ebx, eax
jbe 0x59a00f
mov edx, dword [esi + 8]
sub ebx, eax
mov ecx, dword [edi + 0x30]
add edx, eax
push ebx
call fcn.0059c6d0
add esp, 4
mov dword [edi + 0x30], eax
mov dword [esi + 0x20], 0
mov dword [esi + 4], 0x5b
jmp 0x59a028
cmp eax, 0x5b
jne 0x59a118
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x24], 0
je 0x59a10f
mov ecx, dword [esi + 0x14]
mov ebx, ecx
mov dword [ebp - 8], ecx
nop dword [eax]
cmp ebx, dword [esi + 0xc]
jne 0x59a0be
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x59a068
cmp ebx, ecx
jbe 0x59a068
mov edx, dword [esi + 8]
sub ebx, ecx
add edx, ecx
mov ecx, dword [edi + 0x30]
push ebx
call fcn.0059c6d0
add esp, 4
mov dword [edi + 0x30], eax
mov ebx, dword [edi + 0x1c]
mov ecx, ebx
mov dword [ebp - 0x10], ebx
call fcn.0059e220
mov eax, dword [ebx + 0x14]
mov ebx, dword [edi + 0x10]
cmp eax, ebx
cmovbe ebx, eax
test ebx, ebx
je 0x59a0b0
mov eax, dword [ebp - 0x10]
push ebx
push dword [eax + 0x10]
push dword [edi + 0xc]
call fcn.00629750
mov ecx, dword [ebp - 0x10]
add esp, 0xc
add dword [edi + 0xc], ebx
add dword [ecx + 0x10], ebx
add dword [edi + 0x14], ebx
sub dword [edi + 0x10], ebx
sub dword [ecx + 0x14], ebx
jne 0x59a0b0
mov eax, dword [ecx + 8]
mov dword [ecx + 0x10], eax
mov ebx, dword [esi + 0x14]
test ebx, ebx
jne 0x59a318
mov dword [ebp - 8], ebx
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 0x20]
mov eax, dword [eax + 0x24]
mov dl, byte [ecx + eax]
lea eax, [ecx + 1]
mov dword [esi + 0x20], eax
mov eax, dword [esi + 8]
mov byte [ebx + eax], dl
mov ebx, dword [esi + 0x14]
inc ebx
mov dword [esi + 0x14], ebx
test dl, dl
je 0x59a0e9
mov ecx, dword [ebp - 8]
jmp 0x59a040
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x59a10f
mov eax, dword [ebp - 8]
cmp ebx, eax
jbe 0x59a10f
mov edx, dword [esi + 8]
sub ebx, eax
mov ecx, dword [edi + 0x30]
add edx, eax
push ebx
call fcn.0059c6d0
add esp, 4
mov dword [edi + 0x30], eax
mov dword [esi + 4], 0x67
jmp 0x59a11d
cmp eax, 0x67
jne 0x59a17f
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x59a167
mov edx, dword [esi + 0x14]
lea eax, [edx + 2]
cmp eax, dword [esi + 0xc]
jbe 0x59a143
mov ecx, edi
call fcn.005999a0
mov edx, dword [esi + 0x14]
test edx, edx
jne 0x59a318
mov ecx, dword [esi + 8]
movzx eax, byte [edi + 0x30]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
movzx eax, byte [edi + 0x31]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov dword [edi + 0x30], 0
mov ecx, edi
mov dword [esi + 4], 0x71
call fcn.005999a0
cmp dword [esi + 0x14], 0
jne 0x59a318
cmp dword [edi + 4], 0
mov ebx, dword [ebp - 4]
jne 0x59a1a3
cmp dword [esi + 0x74], 0
jne 0x59a1a3
test ebx, ebx
je 0x59a31f
cmp dword [esi + 4], 0x29a
je 0x59a235
mov eax, dword [esi + 0x84]
test eax, eax
jne 0x59a1b6
push ebx
push esi
call fcn.0059a800
jmp 0x59a1ea
mov ecx, dword [esi + 0x88]
cmp ecx, 2
jne 0x59a1cc
mov edx, ebx
mov ecx, esi
call fcn.0059b930
jmp 0x59a1ed
cmp ecx, 3
jne 0x59a1dc
mov edx, ebx
mov ecx, esi
call fcn.0059b5b0
jmp 0x59a1ed
lea eax, [eax + eax*2]
mov eax, dword [eax*4 + 0x6cf660]
push ebx
push esi
call eax
add esp, 8
cmp eax, 2
je 0x59a1f7
cmp eax, 3
jne 0x59a1fe
mov dword [esi + 4], 0x29a
test eax, eax
je 0x59a312
cmp eax, 2
je 0x59a312
cmp eax, 1
jne 0x59a235
push 0
push 0
xor edx, edx
mov ecx, esi
call fcn.0059d9a0
add esp, 8
mov ecx, edi
call fcn.005999a0
cmp dword [edi + 0x10], 0
je 0x59a318
cmp ebx, 4
jne 0x59a31f
mov eax, dword [esi + 0x18]
test eax, eax
jg 0x59a24f
lea eax, [ebx - 3]
pop ebx
pop edi
pop esi
mov esp, ebp
pop ebp
ret
cmp eax, 2
jne 0x59a2da
mov edx, dword [esi + 0x14]
movzx eax, byte [edi + 0x30]
mov ecx, dword [esi + 8]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
movzx eax, byte [edi + 0x31]
mov ecx, dword [esi + 8]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
movzx eax, byte [edi + 0x32]
mov ecx, dword [esi + 8]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
movzx eax, byte [edi + 0x33]
mov ecx, dword [esi + 8]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
movzx eax, byte [edi + 8]
mov ecx, dword [esi + 8]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
movzx eax, byte [edi + 9]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
movzx eax, byte [edi + 0xa]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
movzx eax, byte [edi + 0xb]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
jmp 0x59a2f0
movzx edx, word [edi + 0x32]
mov ecx, esi
call fcn.00599970
movzx edx, word [edi + 0x30]
mov ecx, esi
call fcn.00599970
mov ecx, edi
call fcn.005999a0
mov eax, dword [esi + 0x18]
test eax, eax
jle 0x59a303
neg eax
mov dword [esi + 0x18], eax
xor eax, eax
cmp dword [esi + 0x14], eax
pop ebx
pop edi
sete al
pop esi
mov esp, ebp
pop ebp
ret
cmp dword [edi + 0x10], 0
jne 0x59a31f
mov dword [esi + 0x28], 0xffffffff
pop ebx
pop edi
xor eax, eax
pop esi
mov esp, ebp
pop ebp
ret
mov dword [edi + 0x18], str.stream_error
pop edi
mov eax, 0xfffffffe
pop esi
mov esp, ebp
pop ebp
ret