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

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
mov eax, dword fs:[0]
push 0xffffffffffffffff
push 0x10061b56
push eax
mov dword fs:[0], esp
sub esp, 0x48
cmp byte [ebp + 0xc], 0
push ebx
push esi
push edi
je 0x10008981
mov eax, dword [ebp + 0x14]
mov esi, dword [edx]
mov edx, dword [eax]
mov eax, dword [ecx]
mov ecx, dword [eax]
mov eax, dword [edx + esi*4]
mov dword [edx + ecx*4], eax
jmp 0x10008c69
mov eax, dword [0x1008d0f8]
xor edi, edi
inc edi
or ecx, 0xffffffff
mov ebx, 0x270
test al, 1
jne 0x100089d0
mov dword [0x1008d0f4], ecx
or eax, edi
mov ecx, 0x1571
mov dword [0x1008d0f8], eax
mov dword [0x1008bd74], ecx
mov edx, edi
mov eax, ecx
shr eax, 0x1e
xor eax, ecx
imul ecx, eax, 0x6c078965
add ecx, edx
mov dword [edx*4 + 0x1008bd74], ecx
inc edx
cmp edx, ebx
jl 0x100089af
mov dword [0x1008bd70], ebx
push 2
xor esi, esi
cmp byte [0x1008bd32], 0
pop ebx
jne 0x10008a40
push ebx
lea ecx, [esp + 0x30]
call fcn.10001dc8
mov dword [esp + 0x5c], esi
mov dword [esp + 0x18], 0x9bdba76a
mov dword [esp + 0x14], edi
mov dword [esp + 0x10], esi
jmp 0x10008a0d
mov ecx, dword [esp + 0x10]
mov eax, dword [esp + 0x2c]
mov dword [eax + ecx*4], esi
inc dword [esp + 0x10]
cmp dword [esp + 0x10], ebx
jl 0x100089fe
push esi
lea edx, [esp + 0x18]
lea ecx, [esp + 0x1c]
call fcn.10008ced
or dword [esp + 0x60], 0xffffffff
pop ecx
lea ecx, [esp + 0x2c]
call fcn.10001e25
sub esp, 0x14
call fcn.10008e27
add esp, 0x14
call fcn.10008ca7
mov dword [esp + 0xc], 0xfff8
lea ecx, [esp + 0x20]
mov dword [esp + 0x10], edi
mov dword [esp + 0xc], 0xfffffffe
mov dword [esp + 0xc], ebx
push ebx
call fcn.10001dc8
mov dword [esp + 0xc], edi
mov dword [esp + 0xc], 7
mov dword [esp + 0xc], esi
mov dword [esp + 0xc], 0xfffffff8
mov dword [esp + 0xc], 0xfffffff9
mov dword [esp + 0xc], esi
jmp 0x10008a9b
mov ecx, dword [esp + 0xc]
mov eax, dword [esp + 0x20]
mov dword [eax + ecx*4], 0x7d437f1b
inc dword [esp + 0xc]
cmp dword [esp + 0xc], ebx
jl 0x10008a88
push 3
mov dword [esp + 0x10], esi
or ebx, 0xffffffff
pop ecx
cmp dword [esp + 0xc], ecx
jge 0x10008abf
mov eax, dword [esp + 0xc]
mov dword [esp + eax*4 + 0x38], ebx
inc dword [esp + 0xc]
jmp 0x10008aab
mov dword [esp + 0xc], esi
jmp 0x10008ad5
mov eax, dword [esp + 0xc]
mov dword [esp + eax*4 + 0x1c], 0xdeb94592
inc dword [esp + 0xc]
cmp dword [esp + 0xc], edi
jl 0x10008ac5
mov dword [esp + 0xc], esi
jmp 0x10008af1
mov eax, dword [esp + 0xc]
mov dword [esp + eax*4 + 0x44], 0xff2b
inc dword [esp + 0xc]
cmp dword [esp + 0xc], ecx
jl 0x10008ae1
mov dword [esp + 0xc], esi
cmp dword [esp + 0xc], 0xfffffff7
jae 0x10008b3a
mov eax, dword [esp + 0xc]
neg eax
jne 0x10008b14
cmp dword [esp + 0xc], esi
jne 0x10008b14
mov eax, dword [esp + 0xc]
mov eax, dword [esp + 0xc]
cmp dword [esp + 0xc], esi
jne 0x10008b2a
cmp dword [esp + 0x10], esi
je 0x10008b2e
cmp dword [esp + 0xc], esi
je 0x10008b2e
mov ecx, edi
jmp 0x10008b30
mov ecx, esi
mov eax, dword [esp + 0xc]
mov edx, esi
add eax, ecx
je 0x10008b3c
mov edx, edi
mov eax, dword [esp + 0x10]
xor ecx, ecx
cmp edx, eax
setge cl
xor eax, eax
cmp ecx, 0xa8f1
setge al
imul eax, eax, 9
add eax, dword [esp + 0x10]
mov dword [esp + 0xc], eax
jne 0x10008b65
cmp dword [esp + 0x10], esi
je 0x10008b67
mov esi, edi
mov dword [esp + 0xc], esi
mov ecx, dword [esp + 0xc]
sub ecx, dword [esp + 0x10]
sub ecx, dword [esp + 0x10]
mov eax, dword [esp + 0x20]
neg ecx
sbb ecx, ecx
inc ecx
cmp ebx, ecx
mov dword [eax], ecx
mov eax, dword [esp + 0x10]
sbb ecx, ecx
xor edx, edx
inc ecx
cmp ecx, eax
mov ecx, dword [esp + 0x10]
setge dl
add ecx, edx
xor edx, edx
mov dword [esp + 0x38], ecx
mov eax, dword [esp + 0x10]
cmp ecx, eax
mov eax, dword [esp + 0x10]
setl dl
xor ebx, ebx
cmp edx, eax
mov eax, dword [esp + 0x10]
setl bl
xor ecx, ecx
cmp ebx, eax
setne cl
mov dword [esp + 0x1c], ecx
lea ecx, [esp + 0x20]
mov dword [esp + 0x38], edi
call fcn.10001e25
mov eax, dword [0x1008bd70]
cmp eax, 0x270
jne 0x10008c1a
mov edx, 0x1008bd78
mov ecx, dword [edx - 4]
xor ecx, dword [edx]
and ecx, 0x7fffffff
xor ecx, dword [edx - 4]
mov eax, ecx
and al, 1
movzx eax, al
neg eax
sbb eax, eax
shr ecx, 1
and eax, 0x9908b0df
xor eax, dword [edx + 0x630]
xor eax, ecx
mov dword [edx + 0x9bc], eax
add edx, 4
cmp edx, 0x1008c738
jl 0x10008bdf
jmp 0x10008c26
cmp eax, 0x4e0
jb 0x10008c2b
call fcn.1000a1ea
mov eax, dword [0x1008bd70]
mov edx, dword [eax*4 + 0x1008bd74]
inc eax
mov dword [0x1008bd70], eax
mov eax, edx
shr eax, 0xb
and eax, dword [0x1008d0f4]
xor edx, eax
mov eax, edx
and eax, 0xff3a58ad
shl eax, 7
xor edx, eax
mov eax, edx
and eax, 0xffffdf8c
shl eax, 0xf
xor edx, eax
mov eax, dword [ebp + 0x1c]
mov ecx, edx
shr ecx, 0x12
xor ecx, edx
mov dword [eax], ecx
mov ecx, dword [esp + 0x54]
pop edi
pop esi
mov dword fs:[0], ecx
pop ebx
mov esp, ebp
pop ebp
ret