Function at 0x4037d0
Capabilities:
Encode data using xor
Generate random numbers using a mersenne twister

Disassembly:
push ebp
push ebx
push edi
push esi
movaps xmm0, xmmword [0x427410]
movaps xmm1, xmmword [0x427420]
movdqa xmm2, xmmword [0x427430]
mov edx, 0x80000000
jmp 0x40383f
lea edi, [esi + 1]
mov dword [eax], edi
mov esi, dword [eax + esi*4 + 4]
mov edi, esi
shr edi, 0xb
and edi, dword [eax + 0x1384]
xor edi, esi
mov eax, edi
shl eax, 7
and eax, 0x9d2c5680
xor eax, edi
mov esi, eax
shl esi, 0xf
and esi, 0xefc60000
xor esi, eax
mov eax, esi
shr eax, 0x12
xor eax, esi
cmp eax, dword [ecx + 8]
jbe 0x403a81
mov eax, dword [ecx]
mov esi, dword [eax]
cmp esi, 0x270
jne 0x4038c0
movd xmm3, dword [eax + 4]
pshufd xmm3, xmm3, 0
mov esi, 0xfffffd90
nop word [eax + eax]
movups xmm4, xmmword [eax + esi*4 + 0x9c8]
shufps xmm3, xmm4, 3
shufps xmm3, xmm4, 0x98
andps xmm3, xmm0
movaps xmm5, xmm4
andps xmm5, xmm1
orps xmm5, xmm3
psrld xmm5, 1
movaps xmm3, xmm4
pslld xmm4, 0x1f
psrad xmm4, 0x1f
pand xmm4, xmm2
movdqu xmm6, xmmword [eax + esi*4 + 0xff8]
pxor xmm6, xmm4
pxor xmm6, xmm5
movdqu xmmword [eax + esi*4 + 0x1384], xmm6
add esi, 4
jne 0x403860
mov esi, 0x270
jmp 0x403800
cmp esi, 0x4e0
jb 0x403800
movd xmm3, dword [eax + 0x9c4]
pshufd xmm3, xmm3, 0
xor esi, esi
nop dword [eax + eax]
movdqa xmm4, xmm3
movups xmm3, xmmword [eax + esi*4 + 0x9c8]
shufps xmm4, xmm3, 3
shufps xmm4, xmm3, 0x98
andps xmm4, xmm0
movaps xmm5, xmm3
andps xmm5, xmm1
orps xmm5, xmm4
psrld xmm5, 1
movaps xmm4, xmm3
pslld xmm4, 0x1f
psrad xmm4, 0x1f
pand xmm4, xmm2
movdqu xmm6, xmmword [eax + esi*4 + 0xff8]
pxor xmm6, xmm4
pxor xmm6, xmm5
movdqu xmmword [eax + esi*4 + 4], xmm6
add esi, 4
cmp esi, 0xe0
jne 0x4038e0
pshufd xmm3, xmm3, 0xff
movd edi, xmm3
and edi, 0x80000000
mov ebx, dword [eax + 0xd48]
mov esi, dword [eax + 0xd4c]
mov ebp, ebx
and ebp, 0x7ffffffe
or ebp, edi
shr ebp, 1
mov edi, ebx
and edi, 1
neg edi
and edi, 0x9908b0df
xor edi, dword [eax + 0x1378]
xor edi, ebp
mov dword [eax + 0x384], edi
and ebx, 0x80000000
mov edi, esi
and edi, 0x7ffffffe
or edi, ebx
shr edi, 1
mov ebx, esi
and ebx, 1
neg ebx
and ebx, 0x9908b0df
xor ebx, dword [eax + 0x137c]
xor ebx, edi
mov dword [eax + 0x388], ebx
and esi, 0x80000000
mov edi, dword [eax + 0xd50]
mov ebx, edi
and ebx, 0x7ffffffe
or ebx, esi
shr ebx, 1
movd xmm3, edi
and edi, 1
neg edi
and edi, 0x9908b0df
xor edi, dword [eax + 0x1380]
xor edi, ebx
mov dword [eax + 0x38c], edi
pshufd xmm3, xmm3, 0
xor esi, esi
nop word cs:[eax + eax]
nop dword [eax]
movups xmm4, xmmword [eax + esi*4 + 0xd54]
shufps xmm3, xmm4, 3
shufps xmm3, xmm4, 0x98
andps xmm3, xmm0
movaps xmm5, xmm4
andps xmm5, xmm1
orps xmm5, xmm3
psrld xmm5, 1
movaps xmm3, xmm4
pslld xmm4, 0x1f
psrad xmm4, 0x1f
pand xmm4, xmm2
movdqu xmm6, xmmword [eax + esi*4 + 4]
pxor xmm6, xmm4
pxor xmm6, xmm5
movdqu xmmword [eax + esi*4 + 0x390], xmm6
add esi, 4
cmp esi, 0x18c
jne 0x4039f0
mov esi, dword [eax + 0x1380]
and esi, edx
mov edi, dword [eax + 4]
mov ebx, edi
and ebx, 0x7ffffffe
or ebx, esi
shr ebx, 1
and edi, 1
neg edi
and edi, 0x9908b0df
xor edi, dword [eax + 0x634]
xor edi, ebx
mov dword [eax + 0x9c0], edi
mov dword [eax], 0
xor esi, esi
jmp 0x403800
pop esi
pop edi
pop ebx
pop ebp
ret