Function at 0x20310730
Capabilities:
Encode data using xor
Hash data using fnv

Disassembly:
push r15
push r14
push rsi
push rdi
push rbx
sub rsp, 0x20
movabs rax, 0x800000000000001
cmp rdx, rax
jae 0x2031092c
mov rsi, rcx
add rdx, qword [0x20572740]
mov rax, qword [0x20573200]
add rax, rdx
dec rax
or rax, 1
bsr rcx, rax
xor ecx, 0x3f
neg cl
mov ebx, 1
shl rbx, cl
lea rax, [rsi + 0x18]
mov rdi, qword [rsi + 8]
mov edx, 2
shl rdx, cl
mov rcx, rax
mov r8, rdi
call fcn.200fc180
lea rax, [rbx - 1]
mov qword [rsi + 0x30], rax
mov qword [rsi + 0x38], rbx
mov rax, qword [rsi + 8]
mov rax, qword [rax]
cmp rax, rdi
je 0x20310920
movabs rcx, 0xcbf29ce484222325
movabs rdx, 0x100000001b3
jmp 0x203107e2
nop
mov qword [r9 + r10*8], r8
mov qword [r9 + r11*8], r8
cmp rax, rdi
je 0x20310920
mov r8, rax
mov rax, qword [rax]
movzx r9d, byte [r8 + 0x10]
xor r9, rcx
imul r9, rdx
movzx r10d, byte [r8 + 0x11]
xor r10, r9
imul r10, rdx
movzx r9d, byte [r8 + 0x12]
xor r9, r10
imul r9, rdx
movzx r10d, byte [r8 + 0x13]
xor r10, r9
imul r10, rdx
movzx r9d, byte [r8 + 0x14]
xor r9, r10
imul r9, rdx
movzx r10d, byte [r8 + 0x15]
xor r10, r9
imul r10, rdx
movzx r9d, byte [r8 + 0x16]
xor r9, r10
imul r9, rdx
movzx ebx, byte [r8 + 0x17]
xor rbx, r9
imul rbx, rdx
and rbx, qword [rsi + 0x30]
mov r9, qword [rsi + 0x18]
lea r10, [rbx + rbx]
lea r11, [rbx*2 + 1]
shl rbx, 4
mov r14, qword [r9 + rbx]
cmp r14, rdi
je 0x203107d0
nop
mov rbx, qword [r9 + r11*8]
mov r15, qword [r8 + 0x10]
cmp r15, qword [rbx + 0x10]
je 0x203108c0
nop dword [rax]
cmp r14, rbx
je 0x203108f5
nop
mov rbx, qword [rbx + 8]
cmp r15, qword [rbx + 0x10]
jne 0x20310880
nop
mov r9, qword [rbx]
mov r10, qword [r8 + 8]
mov qword [r10], rax
mov r11, qword [rax + 8]
mov qword [r11], r9
mov rbx, qword [r9 + 8]
mov qword [rbx], r8
mov qword [r9 + 8], r11
mov qword [rax + 8], r10
mov qword [r8 + 8], rbx
jmp 0x203107d9
nop
mov r10, qword [rbx]
cmp r10, r8
je 0x203108eb
nop
mov rbx, qword [r8 + 8]
mov qword [rbx], rax
mov r14, qword [rax + 8]
mov qword [r14], r10
mov r15, qword [r10 + 8]
mov qword [r15], r8
mov qword [r10 + 8], r14
mov qword [rax + 8], rbx
mov qword [r8 + 8], r15
nop
mov qword [r9 + r11*8], r8
jmp 0x203107d9
nop
mov r11, qword [r8 + 8]
mov qword [r11], rax
mov r14, qword [rax + 8]
mov qword [r14], rbx
mov r15, qword [rbx + 8]
mov qword [r15], r8
mov qword [rbx + 8], r14
mov qword [rax + 8], r11
mov qword [r8 + 8], r15
mov qword [r9 + r10*8], r8
jmp 0x203107d9
add rsp, 0x20
pop rbx
pop rdi
pop rsi
pop r14
pop r15
ret
nop
movzx eax, byte [0x2054e33a]
cmp al, 0xc2
je 0x203109e9
mov cl, 0xda
nop
mov al, 0x2a
lock cmpxchg byte [0x2054e33a], cl
je 0x20310955
cmp al, 0xc2
jne 0x20310940
jmp 0x203109e9
mov eax, 0x83453c4f
mov ecx, 0x7cbac3ca
mov edx, 1
mov r8d, 0x83453c50
mov r9d, 0x7cbac3c8
lea r10, [0x2054e320]
lea r11, [0x20434f80]
nop
mov esi, ecx
imul rsi, rsi, 0x4ec4ec4f
shr rsi, 0x23
lea edi, [rsi + rsi*4]
lea edi, [rdi + rdi*4]
add esi, eax
add esi, edi
mov edi, r9d
imul rdi, rdi, 0x4ec4ec4f
shr rdi, 0x23
lea ebx, [rdi + rdi*4]
lea ebx, [rbx + rbx*4]
add edi, r8d
add edi, ebx
movzx ebx, byte [rdi + r11]
xor bl, 0x20
add byte [rdx + r10 - 1], bl
movzx ebx, byte [rsi + r11]
xor bl, 0x20
add byte [rdx + r10], bl
add eax, 0xfffffffe
add ecx, 2
add rdx, 2
add r8d, 0xfffffffe
add r9d, 2
cmp rdx, 0x1b
jne 0x20310980
mov al, 0xc2
xchg byte [0x2054e33a], al
lea rcx, [0x2054e320]
call fcn.20078170
int3