Function at 0x5c4ef0
Capabilities:
Compute adler32 checksum

Disassembly:
push ebp
push ebx
push edi
push esi
push eax
mov ebx, dword [esp + 0x20]
mov edi, dword [esp + 0x1c]
mov ecx, dword [esp + 0x18]
movzx esi, cx
shr ecx, 0x10
cmp ebx, 1
jne 0x5c4bbf
movzx eax, byte [edi]
lea edx, [esi + eax]
cmp edx, 0xfff1
lea eax, [esi + eax - 0xfff1]
cmovb eax, edx
add ecx, eax
mov edx, ecx
shl edx, 0x10
cmp ecx, 0xfff1
lea ecx, [edx + 0xf0000]
cmovb ecx, edx
or ecx, eax
jmp 0x5c4ee2
test edi, edi
je 0x5c4c10
cmp ebx, 0x10
jae 0x5c4c1a
test ebx, ebx
je 0x5c4e5a
mov edx, ebx
and edx, 3
je 0x5c4e1c
mov eax, ebx
and eax, 0xc
mov dword [esp], eax
xor ebp, ebp
nop word cs:[eax + eax]
movzx eax, byte [edi + ebp]
add esi, eax
add ecx, esi
inc ebp
cmp edx, ebp
jne 0x5c4bf0
add edi, edx
mov ebp, dword [esp]
cmp ebx, 4
jae 0x5c4e23
jmp 0x5c4e5a
mov ecx, 1
jmp 0x5c4ee2
cmp ebx, 0x15b0
jb 0x5c4d50
mov ebp, 0x80078071
nop dword [eax + eax]
mov eax, 0xffffea50
nop word cs:[eax + eax]
movzx edx, byte [edi + eax + 0x15b0]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15b1]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15b2]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15b3]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15b4]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15b5]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15b6]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15b7]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15b8]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15b9]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15ba]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15bb]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15bc]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15bd]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15be]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15bf]
add esi, edx
add ecx, esi
add eax, 0x10
jne 0x5c4c40
add ebx, 0xffffea50
add edi, 0x15b0
mov eax, esi
mul ebp
shr edx, 0xf
imul eax, edx, 0xfff1
sub esi, eax
mov eax, ecx
mul ebp
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
cmp ebx, 0x15af
ja 0x5c4c30
test ebx, ebx
je 0x5c4edd
cmp ebx, 0x10
jb 0x5c4de6
add ebx, 0xfffffff0
movzx eax, byte [edi]
add eax, esi
add ecx, eax
movzx edx, byte [edi + 1]
add edx, eax
add ecx, edx
movzx eax, byte [edi + 2]
add eax, edx
add ecx, eax
movzx edx, byte [edi + 3]
add edx, eax
add ecx, edx
movzx eax, byte [edi + 4]
add eax, edx
add ecx, eax
movzx edx, byte [edi + 5]
add edx, eax
add ecx, edx
movzx eax, byte [edi + 6]
add eax, edx
add ecx, eax
movzx edx, byte [edi + 7]
add edx, eax
add ecx, edx
movzx eax, byte [edi + 8]
add eax, edx
add ecx, eax
movzx edx, byte [edi + 9]
add edx, eax
add ecx, edx
movzx eax, byte [edi + 0xa]
add eax, edx
add ecx, eax
movzx edx, byte [edi + 0xb]
add edx, eax
add ecx, edx
movzx eax, byte [edi + 0xc]
add eax, edx
add ecx, eax
movzx edx, byte [edi + 0xd]
add edx, eax
add ecx, edx
movzx eax, byte [edi + 0xe]
add eax, edx
add ecx, eax
movzx esi, byte [edi + 0xf]
add esi, eax
add ecx, esi
add edi, 0x10
cmp ebx, 0xf
ja 0x5c4d50
test ebx, ebx
je 0x5c4eba
mov edx, ebx
and edx, 3
je 0x5c4e84
mov eax, ebx
and eax, 0xc
mov dword [esp], eax
xor ebp, ebp
nop dword [eax + eax]
movzx eax, byte [edi + ebp]
add esi, eax
add ecx, esi
inc ebp
cmp edx, ebp
jne 0x5c4e00
add edi, edx
mov ebp, dword [esp]
cmp ebx, 4
jae 0x5c4e8b
jmp 0x5c4eba
mov ebp, ebx
cmp ebx, 4
jb 0x5c4e5a
xor edx, edx
nop word cs:[eax + eax]
movzx eax, byte [edi + edx]
add eax, esi
add ecx, eax
movzx esi, byte [edi + edx + 1]
add esi, eax
add ecx, esi
movzx eax, byte [edi + edx + 2]
add eax, esi
add ecx, eax
movzx esi, byte [edi + edx + 3]
add esi, eax
add ecx, esi
add edx, 4
cmp ebp, edx
jne 0x5c4e30
lea edi, [esi - 0xfff1]
cmp esi, 0xfff1
cmovb edi, esi
mov edx, 0x80078071
mov eax, ecx
mul edx
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
shl ecx, 0x10
or ecx, edi
jmp 0x5c4ee2
mov ebp, ebx
cmp ebx, 4
jb 0x5c4eba
xor edx, edx
nop dword [eax]
movzx eax, byte [edi + edx]
add eax, esi
add ecx, eax
movzx esi, byte [edi + edx + 1]
add esi, eax
add ecx, esi
movzx eax, byte [edi + edx + 2]
add eax, esi
add ecx, eax
movzx esi, byte [edi + edx + 3]
add esi, eax
add ecx, esi
add edx, 4
cmp ebp, edx
jne 0x5c4e90
mov edi, 0x80078071
mov eax, esi
mul edi
shr edx, 0xf
imul eax, edx, 0xfff1
sub esi, eax
mov eax, ecx
mul edi
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
shl ecx, 0x10
or ecx, esi
mov eax, ecx
add esp, 4
pop esi
pop edi
pop ebx
pop ebp
ret
jmp 0x5c4b70