Function at 0x1015b540
Capabilities:
Compute adler32 checksum

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 8
mov ecx, dword [esp + 0x1c]
mov ebp, dword [esp + 0x24]
mov ebx, dword [esp + 0x20]
movzx esi, cx
shr ecx, 0x10
cmp ebp, 1
jne 0x1015b322
movzx eax, byte [ebx]
mov edi, 0xfff0
lea edx, [esi + eax]
lea eax, [esi + eax - 0xfff1]
cmp edx, edi
cmovbe eax, edx
add ecx, eax
mov edx, ecx
shl edx, 0x10
cmp ecx, edi
lea ecx, [edx + 0xf0000]
cmovbe ecx, edx
or ecx, eax
jmp 0x1015b536
test ebx, ebx
jne 0x1015b32e
xor ecx, ecx
inc ecx
jmp 0x1015b536
cmp ebp, 0x10
jb 0x1015b4ff
cmp ebp, 0x15af
jbe 0x1015b41f
add ebp, 0xffffea50
mov eax, 0x15b
mov edx, ebx
movzx edi, byte [edx]
add edi, esi
movzx esi, byte [edx + 1]
add ecx, edi
add esi, edi
movzx edi, byte [edx + 2]
add ecx, esi
add edi, esi
movzx esi, byte [edx + 3]
add ecx, edi
add esi, edi
movzx edi, byte [edx + 4]
add ecx, esi
add edi, esi
movzx esi, byte [edx + 5]
add ecx, edi
add esi, edi
movzx edi, byte [edx + 6]
add ecx, esi
add edi, esi
movzx esi, byte [edx + 7]
add ecx, edi
add esi, edi
movzx edi, byte [edx + 8]
add ecx, esi
add edi, esi
movzx esi, byte [edx + 9]
add ecx, edi
add esi, edi
movzx edi, byte [edx + 0xa]
add ecx, esi
add edi, esi
movzx esi, byte [edx + 0xb]
add ecx, edi
add esi, edi
movzx edi, byte [edx + 0xc]
add ecx, esi
add edi, esi
movzx esi, byte [edx + 0xd]
add ecx, edi
add esi, edi
movzx edi, byte [edx + 0xe]
add ecx, esi
add edi, esi
movzx esi, byte [edx + 0xf]
add edx, 0x10
add ecx, edi
add esi, edi
add ecx, esi
dec eax
jne 0x1015b350
mov eax, esi
mov edi, 0x80078071
add ebx, 0x15b0
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
cmp ebp, 0x15af
ja 0x1015b343
test ebp, ebp
je 0x1015b4f8
cmp ebp, 0x10
jb 0x1015b4ca
lea edx, [ebp - 0x10]
mov edi, ebx
mov dword [esp + 4], edx
and edx, 0xfffffff0
lea eax, [edx + 0x10]
mov dword [esp], eax
movzx eax, byte [edi]
add ebp, 0xfffffff0
add eax, esi
movzx esi, byte [edi + 1]
add ecx, eax
add esi, eax
movzx eax, byte [edi + 2]
add ecx, esi
add eax, esi
movzx esi, byte [edi + 3]
add ecx, eax
add esi, eax
movzx eax, byte [edi + 4]
add ecx, esi
add eax, esi
movzx esi, byte [edi + 5]
add ecx, eax
add esi, eax
movzx eax, byte [edi + 6]
add ecx, esi
add eax, esi
movzx esi, byte [edi + 7]
add ecx, eax
add esi, eax
movzx eax, byte [edi + 8]
add ecx, esi
add eax, esi
movzx esi, byte [edi + 9]
add ecx, eax
add esi, eax
movzx eax, byte [edi + 0xa]
add ecx, esi
add eax, esi
movzx esi, byte [edi + 0xb]
add ecx, eax
add esi, eax
movzx eax, byte [edi + 0xc]
add ecx, esi
add eax, esi
movzx esi, byte [edi + 0xd]
add ecx, eax
add esi, eax
movzx eax, byte [edi + 0xe]
add ecx, esi
add eax, esi
movzx esi, byte [edi + 0xf]
add edi, 0x10
add ecx, eax
add esi, eax
add ecx, esi
cmp ebp, 0xf
ja 0x1015b431
mov ebp, dword [esp + 4]
sub ebp, edx
je 0x1015b4d5
add ebx, dword [esp]
movzx eax, byte [ebx]
inc ebx
add esi, eax
add ecx, esi
dec ebp
jne 0x1015b4ca
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
jmp 0x1015b536
test ebp, ebp
je 0x1015b50e
movzx eax, byte [ebx]
inc ebx
add esi, eax
add ecx, esi
dec ebp
jne 0x1015b503
lea edi, [esi - 0xfff1]
cmp esi, 0xfff0
mov edx, 0x80078071
mov eax, ecx
cmovbe edi, esi
mul edx
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
shl ecx, 0x10
or ecx, edi
mov eax, ecx
add esp, 8
pop esi
pop edi
pop ebx
pop ebp
ret
jmp 0x1015b2d4