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

Disassembly:
push edi
lea ecx, [ebp - 0x64]
call fcn.100141a5
push 4
lea ecx, [ebp - 0x4c]
mov byte [ebp - 4], 2
call fcn.100141a5
mov dword [ebp - 0x1c], ebx
mov dword [ebp - 0x14], esi
jmp 0x100160a5
mov ecx, dword [ebp - 0x14]
mov eax, dword [ebp - 0x64]
mov dword [eax + ecx*4], 9
inc dword [ebp - 0x14]
cmp dword [ebp - 0x14], edi
jl 0x10016095
mov dword [ebp - 0x14], esi
jmp 0x100160bf
mov ecx, dword [ebp - 0x14]
mov eax, dword [ebp - 0x4c]
mov dword [eax + ecx*4], 0x5261fc42
inc dword [ebp - 0x14]
cmp dword [ebp - 0x14], 4
jl 0x100160af
mov edi, dword [ebp - 0x64]
mov dword [edi + 4], 0x18
mov dword [ebp - 0x14], 0x8cccddd1
mov dword [ebp - 0x14], esi
cmp dword [ebp - 0x14], 3
jg 0x10016169
mov eax, dword [ebp - 0x64]
inc ebp
pushfd
mov dword [ebp - 0x40], 0xd68f985
mov dword [ebp - 0x78], 5
mov dword [ebp - 0x28], 0x79d44f4c
mov ecx, dword [eax]
mov eax, dword [ebp - 0x4c]
push 1
mov dword [eax], ecx
xor ecx, ecx
mov dword [ebp - 0x40], ebx
mov edx, dword [ebp - 0x14]
mov eax, dword [ebp - 0x78]
cmp eax, 0x97b0
mov eax, dword [ebp - 0x84]
setg cl
xor ebx, ebx
cmp dword [eax + edx*4], ecx
mov eax, dword [ebp - 0x40]
setg bl
xor ecx, ecx
cmp eax, ebx
mov eax, dword [ebp - 0x18]
pop ebx
setle cl
xor edx, edx
cmp ecx, eax
mov eax, dword [ebp - 0x28]
setle dl
xor ecx, ecx
cmp edx, 0x84b7
sete cl
xor edx, edx
cmp ecx, eax
mov eax, dword [ebp - 0x18]
setne dl
xor ecx, ecx
cmp edx, eax
setl cl
mov dword [ebp - 0x28], ecx
inc dword [ebp - 0x14]
cmp dword [ebp - 0x14], 3
jle 0x100160e3
dec dword [edi + 4]
cmp dword [edi + 4], 9
jge 0x100160cf
mov eax, dword [ebp - 0x18]
xor ecx, ecx
imul eax, dword [ebp - 0x1c], 0xfffffff6
mov edx, dword [ebp - 0x74]
cmp eax, dword [edx + 0xc]
mov eax, dword [ebp - 0x4c]
setge cl
xor edx, edx
cmp ecx, dword [eax]
setge dl
sub edx, 0xe82b
neg edx
sbb edx, edx
xor eax, eax
inc edx
cmp edx, 5
setl al
cmp eax, 0xe3c2
jge 0x100161b4
mov eax, dword [ebp - 0x58]
cmp dword [eax + 4], esi
je 0x100161bb
mov ecx, ebx
cmp dword [edi + 4], esi
jne 0x100161bd
mov ecx, esi
dec dword [ebp - 0x20]
mov eax, dword [ebp - 0x1c]
add eax, dword [ebp - 0x20]
cmp eax, ecx
jge 0x100161cd
mov eax, dword [ebp - 0x2c]
mov eax, dword [ebp - 0x1c]
mov eax, dword [ebp - 0x18]
mov eax, dword [ebp - 0x4c]
push eax
mov dword [eax], 0x6f576105
call fcn.10123626
mov byte [ebp - 4], bl
push dword [ebp - 0x64]
mov dword [ebp - 0x4c], esi
mov dword [ebp - 0x48], esi
mov dword [ebp - 0x44], esi
call fcn.10123626
pop ecx
pop ecx
mov dword [ebp - 0x64], esi
mov dword [ebp - 0x60], esi
mov dword [ebp - 0x5c], esi
dec dword [ebp - 0x18]
cmp dword [ebp - 0x18], 0xfffffffb
push 3
pop edi
jle 0x10016076
cmp dword [ebp - 0x58], 0
je 0x10016220
push dword [ebp - 0x58]
call fcn.10123626
pop ecx
or dword [ebp - 4], 0xffffffff
cmp dword [ebp - 0x84], 0
je 0x10016239
push dword [ebp - 0x84]
call fcn.10123626
pop ecx
push 0x5c4a9
push 0x63764
call fcn.10027b51
pop ecx
call eax
push eax
call fcn.10016cf6
mov byte [0x105d883d], bl
mov eax, dword [0x105d8a60]
cmp eax, 0x270
jne 0x100162a3
mov edx, 0x105d8a68
mov ecx, dword [edx - 4]
xor ecx, dword [edx]
and ecx, 0x7fffffff
xor ecx, dword [edx - 4]
mov eax, ecx
and al, bl
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, 0x105d9428
jl 0x10016268
jmp 0x100162af
cmp eax, 0x4e0
jb 0x100162b4
call fcn.10016d31
mov eax, dword [0x105d8a60]
mov ecx, dword [eax*4 + 0x105d8a64]
inc eax
mov dword [0x105d8a60], eax
mov eax, ecx
shr eax, 0xb
and eax, dword [0x105d9de4]
xor ecx, eax
mov eax, ecx
and eax, 0xff3a58ad
shl eax, 7
xor ecx, eax
mov eax, ecx
and eax, 0xffffdf8c
shl eax, 0xf
xor ecx, eax
mov eax, ecx
pop edi
shr eax, 0x12
xor eax, ecx
mov ecx, dword [ebp - 0xc]
pop esi
mov dword fs:[0], ecx
pop ebx
mov esp, ebp
pop ebp
ret