Function at 0x461eb0
Capabilities:
Compute adler32 checksum

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff0
push esi
push edi
push ebx
sub esp, 0x44
mov eax, dword [ebp + 0x10]
mov ecx, dword [ebp + 0xc]
mov edi, dword [ebp + 8]
mov esi, dword [eax]
movzx ebx, si
shr esi, 0x10
cmp ecx, 0x1f
jl 0x4621ce
mov edx, edi
movdqa xmm3, xmmword [0x616d40]
pxor xmm0, xmm0
movdqa xmm4, xmmword [0x616d50]
and edx, 0xf
je 0x461f62
neg edx
and edx, 0xf
jle 0x461f5e
mov eax, edx
shr eax, 1
mov dword [esp + 8], eax
test eax, eax
jbe 0x462257
xor eax, eax
mov dword [esp + 4], eax
mov dword [esp], edx
mov dword [esp + 0x20], ecx
mov edx, eax
movzx ecx, byte [edi + eax*2]
add ebx, ecx
movzx ecx, byte [edi + eax*2 + 1]
add esi, ebx
add ebx, ecx
inc eax
add edx, ebx
cmp eax, dword [esp + 8]
jb 0x461f17
mov dword [esp + 4], edx
lea eax, [eax + eax + 1]
mov edx, dword [esp]
mov ecx, dword [esp + 0x20]
add esi, dword [esp + 4]
mov dword [esp + 8], eax
mov eax, dword [esp + 8]
lea eax, [eax - 1]
cmp edx, eax
jbe 0x461f5e
mov eax, dword [esp + 8]
movzx eax, byte [eax + edi - 1]
add ebx, eax
add esi, ebx
sub ecx, edx
add edi, edx
mov eax, ecx
movd xmm1, ebx
sar eax, 4
movd xmm5, esi
mov dword [esp + 0x34], eax
cmp eax, 0x15a
jl 0x46210f
xor ebx, ebx
cdq
movdqa xmmword [esp + 0x10], xmm5
movdqa xmmword [esp], xmm1
mov dword [esp + 0x30], ebx
mov dword [esp + 0x24], edx
mov dword [esp + 0x20], ecx
mov dword [esp + 0x2c], edi
mov edi, ebx
mov edx, dword [esp + 0x2c]
xor eax, eax
movdqa xmm0, xmmword [esp + 0x10]
pxor xmm3, xmm3
movdqa xmm1, xmmword [esp]
movdqa xmm4, xmmword [0x616d50]
movdqa xmm5, xmmword [0x616d40]
mov ecx, eax
movdqa xmm6, xmm1
shl ecx, 4
pslld xmm6, 4
paddd xmm0, xmm6
inc eax
cmp eax, 0x15a
movdqa xmm2, xmmword [edx + ecx]
lea ecx, [edx + ecx + 0x10]
movdqa xmm7, xmm2
movdqa xmm6, xmm2
punpcklbw xmm7, xmm3
pmaddwd xmm7, xmm5
psadbw xmm2, xmm3
punpckhbw xmm6, xmm3
paddd xmm0, xmm7
pmaddwd xmm6, xmm4
paddd xmm1, xmm2
paddd xmm0, xmm6
jb 0x461fc3
movdqa xmmword [esp], xmm1
mov eax, 0x80078071
movdqa xmmword [esp + 0x10], xmm0
inc edi
movdqa xmm0, xmmword [esp]
movdqa xmm1, xmm0
psrldq xmm1, 8
movd ebx, xmm0
movd esi, xmm1
movdqa xmm2, xmmword [esp + 0x10]
movdqa xmm3, xmm2
movdqa xmm5, xmm2
add ebx, esi
movdqa xmm4, xmm2
mul ebx
shr edx, 0xf
imul esi, edx, 0xfff1
psrldq xmm3, 4
psrldq xmm5, 0xc
psrldq xmm4, 8
movd eax, xmm5
mov dword [esp + 0x2c], ecx
sub ebx, esi
movd esi, xmm2
movd ecx, xmm3
movd xmm6, ebx
add esi, ecx
movd ecx, xmm4
movdqa xmmword [esp], xmm6
add ecx, eax
mov eax, 0x80078071
add esi, ecx
mul esi
shr edx, 0xf
imul eax, edx, 0xfff1
mov ecx, dword [esp + 0x34]
sub esi, eax
mov edx, dword [esp + 0x30]
movd xmm7, esi
lea eax, [edx + ecx - 0x15a]
mov dword [esp + 0x28], eax
xor eax, eax
sub eax, ecx
mov ecx, 0
movdqa xmmword [esp + 0x10], xmm7
sbb ecx, dword [esp + 0x24]
add edx, 0xfffffea6
mov dword [esp + 0x30], edx
push 0xffffffffffffffff
push 0xfffffea6
push ecx
push eax
call fcn.0058c810
cmp edi, eax
jb 0x461f9e
movdqa xmm5, xmmword [esp + 0x10]
movdqa xmm1, xmmword [esp]
pxor xmm0, xmm0
mov eax, dword [esp + 0x28]
mov ecx, dword [esp + 0x20]
mov edi, dword [esp + 0x2c]
movdqa xmm4, xmmword [0x616d50]
movdqa xmm3, xmmword [0x616d40]
mov edx, edi
test eax, eax
je 0x4621cb
xor ebx, ebx
mov esi, ebx
movdqa xmm6, xmm1
shl esi, 4
pslld xmm6, 4
paddd xmm5, xmm6
inc ebx
cmp ebx, eax
movdqa xmm2, xmmword [edx + esi]
lea edi, [edx + esi + 0x10]
movdqa xmm7, xmm2
movdqa xmm6, xmm2
punpcklbw xmm7, xmm0
pmaddwd xmm7, xmm3
psadbw xmm2, xmm0
punpckhbw xmm6, xmm0
paddd xmm5, xmm7
pmaddwd xmm6, xmm4
paddd xmm1, xmm2
paddd xmm5, xmm6
jb 0x46211b
movdqa xmm0, xmm1
mov eax, 0x80078071
psrldq xmm0, 8
movdqa xmm3, xmm5
movd ebx, xmm1
movdqa xmm1, xmm5
movd esi, xmm0
movdqa xmm2, xmm5
psrldq xmm1, 4
psrldq xmm3, 0xc
add ebx, esi
mul ebx
shr edx, 0xf
imul esi, edx, 0xfff1
psrldq xmm2, 8
movd eax, xmm1
movd edx, xmm2
sub ebx, esi
movd esi, xmm5
add esi, eax
movd eax, xmm3
add edx, eax
mov eax, 0x80078071
add esi, edx
mul esi
shr edx, 0xf
imul eax, edx, 0xfff1
sub esi, eax
and ecx, 0xf
test ecx, ecx
jle 0x46221f
mov eax, ecx
shr eax, 0x1f
add eax, ecx
sar eax, 1
mov dword [esp], eax
test eax, eax
jbe 0x462264
xor eax, eax
mov dword [esp + 0x20], ecx
xor edx, edx
movzx ecx, byte [edi + eax*2]
add ebx, ecx
movzx ecx, byte [edi + eax*2 + 1]
add esi, ebx
add ebx, ecx
inc eax
add edx, ebx
cmp eax, dword [esp]
jb 0x4621ee
mov ecx, dword [esp + 0x20]
add esi, edx
lea edx, [eax + eax + 1]
lea eax, [edx - 1]
cmp ecx, eax
jbe 0x46221f
movzx eax, byte [edi + edx - 1]
add ebx, eax
add esi, ebx
mov eax, 0x80078071
mul ebx
shr edx, 0xf
mov eax, 0x80078071
imul ecx, edx, 0xfff1
mul esi
shr edx, 0xf
sub ebx, ecx
imul edi, edx, 0xfff1
sub esi, edi
shl esi, 0x10
or ebx, esi
mov esi, dword [ebp + 0x10]
mov dword [esi], ebx
add esp, 0x44
pop ebx
pop edi
pop esi
mov esp, ebp
pop ebp
ret
mov dword [esp + 8], 1
jmp 0x461f46
mov edx, 1
jmp 0x46220f