Function at 0x4623d0
Capabilities:
Compute adler32 checksum

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff0
push esi
push edi
push ebx
lea esp, [esp - 0x44]
mov eax, dword [ebp + 0x10]
mov edi, dword [ebp + 8]
mov ecx, dword [ebp + 0xc]
mov esi, dword [eax]
shr esi, 0x10
movzx ebx, word [eax]
cmp dword [ebp + 0xc], 0x1f
jl 0x4626f8
mov edx, edi
movdqa xmm3, xmmword [0x618d60]
pxor xmm0, xmm0
movdqa xmm4, xmmword [0x618d70]
and edx, 0xf
je 0x462486
neg edx
and edx, 0xf
jle 0x46247f
mov eax, edx
shr eax, 1
mov dword [esp + 8], eax
test eax, eax
je 0x462784
xor eax, eax
mov dword [esp + 4], eax
mov dword [esp], edx
mov dword [esp + 0x20], ecx
mov edx, eax
movzx ecx, byte [edi + edx*2]
add ebx, ecx
movzx ecx, byte [edi + edx*2 + 1]
add esi, ebx
add ebx, ecx
lea edx, [edx + 1]
add eax, ebx
cmp edx, dword [esp + 8]
jb 0x462439
mov dword [esp + 4], edx
add esi, eax
mov eax, edx
add eax, eax
inc eax
mov edx, dword [esp]
mov ecx, dword [esp + 0x20]
mov dword [esp + 4], eax
mov eax, dword [esp + 4]
dec eax
cmp edx, eax
jbe 0x46247f
mov eax, dword [esp + 4]
movzx edi, byte [eax + edi - 1]
add ebx, edi
add esi, ebx
mov edi, edx
sub ecx, edx
add edi, dword [ebp + 8]
mov eax, ecx
movd xmm1, ebx
sar eax, 4
movd xmm5, esi
mov dword [esp + 0x34], eax
cmp eax, 0x15a
jl 0x462638
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 [0x618d70]
movdqa xmm5, xmmword [0x618d60]
mov ecx, eax
movdqa xmm6, xmm1
shl ecx, 4
pslld xmm6, 4
paddd xmm0, xmm6
inc eax
movdqa xmm2, xmmword [edx + ecx]
add ecx, edx
movdqa xmm7, xmm2
movdqa xmm6, xmm2
punpcklbw xmm7, xmm3
add ecx, 0x10
pmaddwd xmm7, xmm5
cmp eax, 0x15a
psadbw xmm2, xmm3
punpckhbw xmm6, xmm3
paddd xmm0, xmm7
pmaddwd xmm6, xmm4
paddd xmm1, xmm2
paddd xmm0, xmm6
jb 0x4624e7
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]
mov edx, ecx
add edx, 0xfffffea6
sub esi, eax
add edx, dword [esp + 0x30]
mov dword [esp + 0x28], edx
xor edx, edx
sub edx, ecx
mov ecx, 0
mov eax, dword [esp + 0x30]
movd xmm7, esi
sbb ecx, dword [esp + 0x24]
add eax, 0xfffffea6
movdqa xmmword [esp + 0x10], xmm7
mov dword [esp + 0x30], eax
push 0xffffffffffffffff
push 0xfffffea6
push ecx
push edx
call fcn.0058c810
cmp edi, eax
jb 0x4624c2
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 [0x618d70]
movdqa xmm3, xmmword [0x618d60]
mov edx, edi
test eax, eax
je 0x4626f5
xor ebx, ebx
mov edi, ebx
movdqa xmm6, xmm1
shl edi, 4
pslld xmm6, 4
paddd xmm5, xmm6
inc ebx
movdqa xmm2, xmmword [edx + edi]
add edi, edx
movdqa xmm7, xmm2
movdqa xmm6, xmm2
punpcklbw xmm7, xmm0
add edi, 0x10
pmaddwd xmm7, xmm3
cmp ebx, eax
psadbw xmm2, xmm0
punpckhbw xmm6, xmm0
paddd xmm5, xmm7
pmaddwd xmm6, xmm4
paddd xmm1, xmm2
paddd xmm5, xmm6
jb 0x462644
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 0x46274a
mov eax, ecx
shr eax, 0x1f
add eax, ecx
sar eax, 1
mov dword [esp], eax
test eax, eax
jbe 0x462791
xor edx, edx
mov dword [esp + 0x20], ecx
xor eax, eax
movzx ecx, byte [edi + edx*2]
add ebx, ecx
movzx ecx, byte [edi + edx*2 + 1]
add esi, ebx
add ebx, ecx
lea edx, [edx + 1]
add eax, ebx
cmp edx, dword [esp]
jb 0x462718
add edx, edx
add esi, eax
mov ecx, dword [esp + 0x20]
inc edx
mov eax, edx
dec eax
cmp ecx, eax
jbe 0x46274a
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
lea esp, [esp + 0x44]
pop ebx
pop edi
pop esi
lea esp, [ebp]
pop ebp
ret
mov dword [esp + 4], 1
jmp 0x462469
mov edx, 1
jmp 0x46273a