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

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0x2c
mov esi, dword [esp + 0x40]
test esi, esi
je 0x458950
mov ebx, dword [esi + 0x1c]
test ebx, ebx
je 0x458950
cmp dword [esp + 0x44], 4
jg 0x458950
mov eax, dword [esp + 0x44]
test eax, eax
js 0x458950
mov ebp, dword [esi + 0xc]
test ebp, ebp
je 0x458567
mov edi, dword [esi]
test edi, edi
je 0x458824
mov eax, dword [ebx + 4]
cmp eax, 0x29a
je 0x45855c
mov edx, dword [esi + 0x10]
test edx, edx
je 0x458449
mov dword [ebx], esi
mov ecx, dword [ebx + 0x28]
mov dword [esp + 0x1c], ecx
mov edx, dword [esp + 0x44]
mov dword [ebx + 0x28], edx
cmp eax, 0x2a
je 0x4585b4
cmp eax, 0x45
je 0x45868a
mov edx, dword [ebx + 0x14]
cmp eax, 0x49
je 0x4586dc
cmp eax, 0x5b
je 0x4587fc
cmp eax, 0x67
je 0x4588d0
test edx, edx
jne 0x45857c
mov eax, dword [esi + 4]
test eax, eax
je 0x458438
mov edx, dword [ebx + 4]
cmp edx, 0x29a
je 0x45859c
test eax, eax
jne 0x4583f4
mov ebp, dword [ebx + 0x74]
test ebp, ebp
je 0x458458
mov eax, dword [ebx + 0x84]
lea eax, [eax + eax*2]
mov edx, dword [esp + 0x44]
mov dword [esp + 4], edx
mov dword [esp], ebx
call dword [eax*4 + 0x59d7e8]
lea edx, [eax - 2]
cmp edx, 1
jbe 0x4584e8
test eax, eax
jne 0x4584f8
mov esi, dword [esi + 0x10]
test esi, esi
je 0x458548
xor eax, eax
add esp, 0x2c
pop ebx
pop esi
pop edi
pop ebp
ret
mov ecx, dword [esp + 0x1c]
cmp dword [esp + 0x44], ecx
jg 0x4583da
cmp dword [esp + 0x44], 4
je 0x4583da
mov eax, dword [0x59ee5c]
mov dword [esi + 0x18], eax
mov eax, 0xfffffffb
jmp 0x458430
mov edi, dword [esp + 0x44]
test edi, edi
je 0x45842e
cmp edx, 0x29a
jne 0x4583f4
cmp dword [esp + 0x44], 4
jne 0x45842e
mov eax, dword [ebx + 0x18]
test eax, eax
jle 0x458c0f
cmp eax, 2
je 0x458b68
mov edx, dword [esi + 0x30]
mov ecx, edx
shr ecx, 0x10
mov eax, dword [ebx + 0x14]
mov edi, dword [ebx + 8]
shr edx, 0x18
mov byte [edi + eax], dl
mov edx, dword [ebx + 8]
mov byte [edx + eax + 1], cl
mov edx, dword [esi + 0x30]
and edx, 0xffff
mov ebp, dword [ebx + 8]
mov edi, edx
shr edi, 8
mov ecx, edi
mov byte [ebp + eax + 2], cl
mov ecx, dword [ebx + 8]
mov byte [ecx + eax + 3], dl
add eax, 4
mov dword [ebx + 0x14], eax
mov eax, esi
call fcn.00456a5c
mov eax, dword [ebx + 0x18]
test eax, eax
jle 0x4584d5
neg eax
mov dword [ebx + 0x18], eax
xor eax, eax
mov edx, dword [ebx + 0x14]
test edx, edx
sete al
add esp, 0x2c
pop ebx
pop esi
pop edi
pop ebp
ret
mov dword [ebx + 4], 0x29a
cmp eax, 2
je 0x458423
dec eax
jne 0x458468
cmp dword [esp + 0x44], 1
je 0x4589bf
mov dword [esp + 0xc], 0
mov dword [esp + 8], 0
mov dword [esp + 4], 0
mov dword [esp], ebx
call fcn.0045d21c
cmp dword [esp + 0x44], 3
je 0x458c70
mov eax, esi
call fcn.00456a5c
mov ecx, dword [esi + 0x10]
test ecx, ecx
jne 0x458468
nop
mov dword [ebx + 0x28], 0xffffffff
xor eax, eax
add esp, 0x2c
pop ebx
pop esi
pop edi
pop ebp
ret
cmp dword [esp + 0x44], 4
je 0x458380
mov eax, dword [0x59ee50]
mov dword [esi + 0x18], eax
mov eax, 0xfffffffe
jmp 0x458430
mov eax, esi
call fcn.00456a5c
mov eax, dword [esi + 0x10]
test eax, eax
je 0x458548
mov eax, dword [esi + 4]
mov edx, dword [ebx + 4]
cmp edx, 0x29a
jne 0x4583e9
test eax, eax
jne 0x458449
mov ebp, dword [ebx + 0x74]
test ebp, ebp
jne 0x4583f4
jmp 0x458458
cmp dword [ebx + 0x18], 2
je 0x458a1c
mov eax, dword [ebx + 0x30]
shl eax, 0xc
sub eax, 0x7800
cmp dword [ebx + 0x88], 1
jle 0x4587a8
xor ecx, ecx
or ecx, eax
mov edi, dword [ebx + 0x6c]
test edi, edi
je 0x4585e4
or ecx, 0x20
mov ebp, 0x1f
mov eax, ecx
xor edx, edx
div ebp
add ecx, 0x1f
sub ecx, edx
mov dword [ebx + 4], 0x71
mov eax, dword [ebx + 0x14]
mov ebp, dword [ebx + 8]
mov edi, ecx
shr edi, 8
mov edx, edi
mov byte [ebp + eax], dl
mov edx, dword [ebx + 8]
mov byte [edx + eax + 1], cl
lea edx, [eax + 2]
mov dword [ebx + 0x14], edx
mov edx, dword [ebx + 0x6c]
test edx, edx
je 0x45865f
mov ecx, dword [esi + 0x30]
mov edi, ecx
shr edi, 0x10
mov ebp, dword [ebx + 8]
shr ecx, 0x18
mov byte [ebp + eax + 2], cl
mov edx, dword [ebx + 8]
mov ecx, edi
mov byte [edx + eax + 3], cl
mov edx, dword [esi + 0x30]
and edx, 0xffff
mov ebp, dword [ebx + 8]
mov edi, edx
shr edi, 8
mov ecx, edi
mov byte [ebp + eax + 4], cl
mov ecx, dword [ebx + 8]
mov byte [ecx + eax + 5], dl
add eax, 6
mov dword [ebx + 0x14], eax
mov dword [esp + 8], 0
mov dword [esp + 4], 0
mov dword [esp], 0
call fcn.0045de1c
mov dword [esi + 0x30], eax
mov eax, dword [ebx + 4]
cmp eax, 0x45
jne 0x4583ad
mov edi, dword [ebx + 0x1c]
mov edx, dword [ebx + 0x14]
mov eax, dword [edi + 0x10]
test eax, eax
je 0x4589f0
mov ecx, dword [ebx + 0x20]
mov eax, dword [edi + 0x14]
and eax, 0xffff
cmp eax, ecx
mov eax, edi
mov ebp, edx
ja 0x458734
nop
mov edi, dword [eax + 0x2c]
test edi, edi
je 0x4586c3
cmp ebp, edx
jb 0x45899c
mov edx, dword [eax + 0x14]
cmp dword [ebx + 0x20], edx
je 0x45873c
mov eax, dword [ebx + 4]
mov edx, dword [ebx + 0x14]
cmp eax, 0x49
jne 0x4583b9
nop
mov eax, dword [ebx + 0x1c]
jmp 0x45874d
mov eax, dword [eax + 0x2c]
test eax, eax
je 0x4586f0
cmp ebp, edx
jb 0x458804
mov eax, esi
call fcn.00456a5c
mov ebp, dword [ebx + 0x14]
cmp ebp, dword [ebx + 0xc]
je 0x4589cc
mov edi, dword [ebx + 0x1c]
mov ecx, dword [ebx + 0x20]
mov edx, ebp
mov eax, dword [edi + 0x10]
mov cl, byte [eax + ecx]
mov eax, dword [ebx + 8]
mov byte [eax + edx], cl
inc edx
mov dword [ebx + 0x14], edx
mov ecx, dword [ebx + 0x20]
inc ecx
mov dword [ebx + 0x20], ecx
mov eax, dword [ebx + 0x1c]
mov edi, dword [eax + 0x14]
and edi, 0xffff
cmp edi, ecx
jbe 0x4586b4
mov edi, eax
cmp dword [ebx + 0xc], edx
jne 0x45870b
jmp 0x4586e1
mov dword [ebx + 0x20], 0
mov dword [ebx + 4], 0x49
mov edx, dword [ebx + 0x14]
mov ecx, dword [eax + 0x1c]
test ecx, ecx
je 0x4589d8
mov ecx, edx
jmp 0x45877a
mov edi, dword [ebx + 0x20]
mov eax, dword [eax + 0x1c]
mov al, byte [eax + edi]
inc edi
mov dword [ebx + 0x20], edi
mov edi, dword [ebx + 8]
mov byte [edi + edx], al
inc edx
mov dword [ebx + 0x14], edx
test al, al
je 0x4587d4
mov eax, dword [ebx + 0x1c]
cmp dword [ebx + 0xc], edx
jne 0x45875c
mov eax, dword [eax + 0x2c]
test eax, eax
je 0x45878e
cmp ecx, edx
jb 0x45895c
mov eax, esi
call fcn.00456a5c
mov ecx, dword [ebx + 0x14]
cmp ecx, dword [ebx + 0xc]
je 0x458c23
mov eax, dword [ebx + 0x1c]
mov edx, ecx
jmp 0x45875c
mov edx, dword [ebx + 0x84]
cmp edx, 1
jle 0x4585d6
cmp edx, 5
jle 0x458c19
cmp edx, 6
je 0x458c66
mov ecx, 0xc0
jmp 0x4585d8
xor edi, edi
mov eax, dword [ebx + 0x1c]
mov ebp, dword [eax + 0x2c]
test ebp, ebp
je 0x4587e8
cmp ecx, edx
jb 0x458bcf
test edi, edi
je 0x458834
mov eax, dword [ebx + 4]
mov edx, dword [ebx + 0x14]
cmp eax, 0x5b
jne 0x4583c2
nop
mov eax, dword [ebx + 0x1c]
jmp 0x458848
sub edx, ebp
mov dword [esp + 8], edx
add ebp, dword [ebx + 8]
mov dword [esp + 4], ebp
mov eax, dword [esi + 0x30]
mov dword [esp], eax
call fcn.0045e0fc
mov dword [esi + 0x30], eax
jmp 0x4586f0
mov ecx, dword [esi + 4]
test ecx, ecx
je 0x458372
jmp 0x458567
mov dword [ebx + 0x20], 0
mov dword [ebx + 4], 0x5b
mov eax, dword [ebx + 0x1c]
mov edx, dword [ebx + 0x14]
mov ecx, dword [eax + 0x24]
test ecx, ecx
je 0x4589e4
mov ecx, edx
jmp 0x458876
mov edi, dword [ebx + 0x20]
mov eax, dword [eax + 0x24]
mov al, byte [eax + edi]
inc edi
mov dword [ebx + 0x20], edi
mov edi, dword [ebx + 8]
mov byte [edi + edx], al
inc edx
mov dword [ebx + 0x14], edx
test al, al
je 0x4588a4
mov eax, dword [ebx + 0x1c]
cmp edx, dword [ebx + 0xc]
jne 0x458858
mov eax, dword [eax + 0x2c]
test eax, eax
je 0x45888a
cmp ecx, edx
jb 0x45897c
mov eax, esi
call fcn.00456a5c
mov ecx, dword [ebx + 0x14]
cmp ecx, dword [ebx + 0xc]
je 0x458c2f
mov eax, dword [ebx + 0x1c]
mov edx, ecx
jmp 0x458858
xor edi, edi
mov eax, dword [ebx + 0x1c]
mov eax, dword [eax + 0x2c]
test eax, eax
je 0x4588b8
cmp ecx, edx
jb 0x458bef
test edi, edi
je 0x458940
mov eax, dword [ebx + 4]
mov edx, dword [ebx + 0x14]
cmp eax, 0x67
jne 0x4583cb
nop
mov eax, dword [ebx + 0x1c]
mov eax, dword [eax + 0x2c]
test eax, eax
je 0x458934
lea eax, [edx + 2]
cmp eax, dword [ebx + 0xc]
ja 0x458a00
mov ebp, dword [ebx + 8]
mov edi, dword [esi + 0x30]
mov ecx, edi
mov byte [ebp + edx], cl
mov ebp, dword [ebx + 8]
mov edi, dword [esi + 0x30]
shr edi, 8
mov ecx, edi
mov byte [ebp + edx + 1], cl
mov dword [ebx + 0x14], eax
mov dword [esp + 8], 0
mov dword [esp + 4], 0
mov dword [esp], 0
call fcn.0045e0fc
mov dword [esi + 0x30], eax
mov dword [ebx + 4], 0x71
mov edx, dword [ebx + 0x14]
jmp 0x4583cb
mov dword [ebx + 4], 0x71
jmp 0x4583cb
mov dword [ebx + 4], 0x67
mov eax, dword [ebx + 0x1c]
mov edx, dword [ebx + 0x14]
jmp 0x4588d3
mov eax, 0xfffffffe
jmp 0x458430
sub edx, ecx
mov dword [esp + 8], edx
add ecx, dword [ebx + 8]
mov dword [esp + 4], ecx
mov eax, dword [esi + 0x30]
mov dword [esp], eax
call fcn.0045e0fc
mov dword [esi + 0x30], eax
jmp 0x45878e
sub edx, ecx
mov dword [esp + 8], edx
add ecx, dword [ebx + 8]
mov dword [esp + 4], ecx
mov eax, dword [esi + 0x30]
mov dword [esp], eax
call fcn.0045e0fc
mov dword [esi + 0x30], eax
jmp 0x45888a
sub edx, ebp
mov dword [esp + 8], edx
add ebp, dword [ebx + 8]
mov dword [esp + 4], ebp
mov eax, dword [esi + 0x30]
mov dword [esp], eax
call fcn.0045e0fc
mov dword [esi + 0x30], eax
mov eax, dword [ebx + 0x1c]
jmp 0x4586c3
mov dword [esp], ebx
call fcn.0045d368
jmp 0x458535
mov eax, dword [ebx + 0x1c]
mov edx, ebp
jmp 0x4586b4
mov dword [ebx + 4], 0x5b
jmp 0x458848
mov dword [ebx + 4], 0x67
jmp 0x4588d3
mov dword [ebx + 4], 0x49
mov eax, edi
jmp 0x45874d
mov eax, esi
call fcn.00456a5c
mov edx, dword [ebx + 0x14]
lea eax, [edx + 2]
cmp eax, dword [ebx + 0xc]
ja 0x4583cb
jmp 0x4588e6
mov dword [esp + 8], 0
mov dword [esp + 4], 0
mov dword [esp], 0
call fcn.0045e0fc
mov dword [esi + 0x30], eax
mov eax, dword [ebx + 0x14]
mov edx, dword [ebx + 8]
mov byte [edx + eax], 0x1f
mov edx, dword [ebx + 8]
mov byte [edx + eax + 1], 0x8b
mov edx, dword [ebx + 8]
mov byte [edx + eax + 2], 8
lea edi, [eax + 3]
mov dword [ebx + 0x14], edi
mov edx, dword [ebx + 0x1c]
test edx, edx
je 0x458c98
add edi, dword [ebx + 8]
mov ebp, dword [edx]
test ebp, ebp
setne cl
mov ebp, ecx
cmp dword [edx + 0x2c], 1
sbb ecx, ecx
not ecx
and ecx, 2
add ebp, ecx
cmp dword [edx + 0x10], 1
sbb ecx, ecx
not ecx
and ecx, 4
add ebp, ecx
cmp dword [edx + 0x1c], 1
sbb ecx, ecx
not ecx
and ecx, 8
add ecx, ebp
cmp dword [edx + 0x24], 1
sbb edx, edx
not edx
and edx, 0x10
add edx, ecx
mov byte [edi], dl
mov edx, dword [ebx + 8]
mov ecx, dword [ebx + 0x1c]
mov ecx, dword [ecx + 4]
mov byte [edx + eax + 4], cl
mov ecx, dword [ebx + 8]
mov edx, dword [ebx + 0x1c]
mov edx, dword [edx + 4]
shr edx, 8
mov byte [ecx + eax + 5], dl
mov edx, dword [ebx + 8]
mov ecx, dword [ebx + 0x1c]
movzx ecx, word [ecx + 6]
mov byte [edx + eax + 6], cl
mov edx, dword [ebx + 8]
mov ecx, dword [ebx + 0x1c]
movzx ecx, byte [ecx + 7]
mov byte [edx + eax + 7], cl
lea edx, [eax + 8]
mov dword [ebx + 0x14], edx
add edx, dword [ebx + 8]
mov ecx, dword [ebx + 0x84]
cmp ecx, 9
je 0x458c5f
cmp dword [ebx + 0x88], 1
jle 0x458c8c
mov cl, 4
mov byte [edx], cl
mov edx, dword [ebx + 8]
mov ecx, dword [ebx + 0x1c]
mov ecx, dword [ecx + 0xc]
mov byte [edx + eax + 9], cl
lea edx, [eax + 0xa]
mov dword [ebx + 0x14], edx
mov edi, dword [ebx + 0x1c]
mov ecx, dword [edi + 0x10]
test ecx, ecx
je 0x458b4a
mov ebp, dword [ebx + 8]
mov ecx, dword [edi + 0x14]
mov byte [ebp + edx], cl
mov ecx, dword [ebx + 8]
mov edx, dword [ebx + 0x1c]
mov edx, dword [edx + 0x14]
shr edx, 8
mov byte [ecx + eax + 0xb], dl
lea edx, [eax + 0xc]
mov dword [ebx + 0x14], edx
mov edi, dword [ebx + 0x1c]
mov ebp, dword [edi + 0x2c]
test ebp, ebp
jne 0x458c3b
mov dword [ebx + 0x20], 0
mov dword [ebx + 4], 0x45
jmp 0x458690
mov eax, dword [ebx + 0x14]
mov edx, dword [ebx + 8]
mov ecx, dword [esi + 0x30]
mov byte [edx + eax], cl
mov ecx, dword [ebx + 8]
mov edx, dword [esi + 0x30]
shr edx, 8
mov byte [ecx + eax + 1], dl
mov edx, dword [ebx + 8]
movzx ecx, word [esi + 0x32]
mov byte [edx + eax + 2], cl
mov edx, dword [ebx + 8]
movzx ecx, byte [esi + 0x33]
mov byte [edx + eax + 3], cl
mov edx, dword [ebx + 8]
mov ecx, dword [esi + 8]
mov byte [edx + eax + 4], cl
mov ecx, dword [ebx + 8]
mov edx, dword [esi + 8]
shr edx, 8
mov byte [ecx + eax + 5], dl
mov edx, dword [ebx + 8]
movzx ecx, word [esi + 0xa]
mov byte [edx + eax + 6], cl
mov edx, dword [ebx + 8]
movzx ecx, byte [esi + 0xb]
mov byte [edx + eax + 7], cl
add eax, 8
mov dword [ebx + 0x14], eax
jmp 0x4584c2
sub edx, ecx
mov dword [esp + 8], edx
add ecx, dword [ebx + 8]
mov dword [esp + 4], ecx
mov eax, dword [esi + 0x30]
mov dword [esp], eax
call fcn.0045e0fc
mov dword [esi + 0x30], eax
jmp 0x4587e8
sub edx, ecx
mov dword [esp + 8], edx
add ecx, dword [ebx + 8]
mov dword [esp + 4], ecx
mov eax, dword [esi + 0x30]
mov dword [esp], eax
call fcn.0045e0fc
mov dword [esi + 0x30], eax
jmp 0x4588b8
mov eax, 1
jmp 0x458430
mov ecx, 0x40
jmp 0x4585d8
mov edx, ecx
mov edi, 1
jmp 0x4587d6
mov edx, ecx
mov edi, 1
jmp 0x4588a6
mov dword [esp + 8], edx
mov eax, dword [ebx + 8]
mov dword [esp + 4], eax
mov eax, dword [esi + 0x30]
mov dword [esp], eax
call fcn.0045e0fc
mov dword [esi + 0x30], eax
mov edi, dword [ebx + 0x1c]
mov edx, dword [ebx + 0x14]
jmp 0x458b55
mov cl, 2
jmp 0x458b08
mov ecx, 0x80
jmp 0x4585d8
mov edx, dword [ebx + 0x44]
mov eax, dword [ebx + 0x4c]
mov word [edx + eax*2 - 2], 0
lea ecx, [eax + eax - 2]
xor eax, eax
mov edi, edx
rep stosb byte es:[edi], al
jmp 0x458535
dec ecx
setle cl
shl ecx, 2
jmp 0x458b08
mov edx, dword [ebx + 8]
mov byte [edx + edi], 0
mov edx, dword [ebx + 8]
mov byte [edx + eax + 4], 0
mov edx, dword [ebx + 8]
mov byte [edx + eax + 5], 0
mov edx, dword [ebx + 8]
mov byte [edx + eax + 6], 0
mov edx, dword [ebx + 8]
mov byte [edx + eax + 7], 0
lea ecx, [eax + 8]
mov dword [ebx + 0x14], ecx
add ecx, dword [ebx + 8]
mov edx, dword [ebx + 0x84]
cmp edx, 9
je 0x458cfa
cmp dword [ebx + 0x88], 1
jle 0x458cfe
mov dl, 4
mov byte [ecx], dl
mov edx, dword [ebx + 8]
mov byte [edx + eax + 9], 0xb
lea edx, [eax + 0xa]
mov dword [ebx + 0x14], edx
mov dword [ebx + 4], 0x71
jmp 0x4583cb
mov dl, 2
jmp 0x458cde
dec edx
setle dl
shl edx, 2
jmp 0x458cde