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

Disassembly:
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbp
push rbx
sub rsp, 0x48
movabs rax, 0x800000000000001
cmp rdx, rax
jae 0x1800163c0
mov r15, rcx
dec rdx
or rdx, 1
bsr rcx, rdx
xor ecx, 0x3f
neg cl
mov esi, 1
shl rsi, cl
lea rax, [r15 + 0x18]
mov rdi, qword [r15 + 8]
mov edx, 2
shl rdx, cl
mov rcx, rax
mov r8, rdi
call fcn.180015750
lea rax, [rsi - 1]
mov qword [r15 + 0x30], rax
mov qword [r15 + 0x38], rsi
mov rax, qword [r15 + 8]
mov r12, qword [rax]
mov qword [rsp + 0x28], rdi
cmp r12, rdi
je 0x1800163af
mov qword [rsp + 0x38], r15
jmp 0x180016177
mov rax, qword [rsi + 8]
mov qword [rax], r12
mov rcx, qword [r12 + 8]
mov qword [rcx], r13
mov rdx, qword [r13 + 8]
mov qword [rdx], rsi
mov qword [r13 + 8], rcx
mov qword [r12 + 8], rax
mov qword [rsi + 8], rdx
mov rax, qword [rsp + 0x30]
mov qword [rdi + rax*8], rsi
cmp r12, qword [rsp + 0x28]
je 0x1800163af
mov rax, r12
cmp qword [r12 + 0x28], 0x10
jb 0x180016190
mov rcx, qword [rax + 0x10]
jmp 0x180016194
lea rcx, [rax + 0x10]
mov qword [rsp + 0x20], rcx
mov qword [rsp + 0x40], rax
mov r13, qword [rax + 0x20]
movabs rax, 0xcbf29ce484222325
test r13, r13
movabs r15, 0x8b000c41f03c8825
movabs r10, 0x400202408406600
movabs r11, 0x8f002c65f87cee25
movabs r12, 0x74fff3be0fc377da
movabs rbx, 0x100000001b3
mov r14, qword [rsp + 0x20]
je 0x180016289
xor ecx, ecx
movabs rdx, 0xcbf29ce484222325
mov rax, rdx
nop dword [rax + rax]
movzx r8d, byte [r14 + rcx]
mov rbp, r12
mov r9, r8
not r9
mov rsi, r15
mov rdi, r10
mov r10d, r8d
and r10d, 0x21
mov r12, r11
mov r11, r9
movabs r15, 0x9fd7e7d7a4c337de
and r11, r15
or r11, r10
mov r10, rdx
movabs r15, 0x602818285b3cc821
xor r10, r15
xor r10, r11
mov r11, r12
and rax, r9
or rax, r10
mov r10, rdi
mov r15, rsi
and r9, rsi
and r8d, 0xffffffda
or r8, r9
lea r9, [r8 + r10]
xor rdx, r11
xor rdx, r9
mov r12, rbp
xor r8, rbp
and r8, rdx
not rax
or rax, r8
imul rax, rbx
inc rcx
mov rdx, rax
cmp r13, rcx
jne 0x180016200
mov r14, r13
mov rsi, qword [rsp + 0x40]
mov r12, qword [rsi]
mov r15, qword [rsp + 0x38]
and rax, qword [r15 + 0x30]
mov rdi, qword [r15 + 0x18]
lea rcx, [rax + rax]
lea rdx, [rax*2 + 1]
shl rax, 4
mov r13, qword [rdi + rax]
cmp r13, qword [rsp + 0x28]
je 0x1800162f0
mov qword [rsp + 0x30], rcx
mov rbp, qword [rdi + rdx*8]
cmp r14, qword [rbp + 0x20]
mov rbx, qword [rsp + 0x20]
jne 0x180016363
cmp qword [rbp + 0x28], 0x10
jb 0x1800162fd
mov r15, rdx
mov rdx, qword [rbp + 0x10]
jmp 0x180016304
mov qword [rdi + rcx*8], rsi
mov qword [rdi + rdx*8], rsi
jmp 0x18001616c
mov r15, rdx
lea rdx, [rbp + 0x10]
mov rcx, rbx
mov r8, r14
call sub.VCRUNTIME140.dll_memcmp
test eax, eax
jne 0x180016363
mov rax, qword [rbp]
cmp rax, rsi
je 0x18001633f
mov rcx, qword [rsi + 8]
mov qword [rcx], r12
mov rdx, qword [r12 + 8]
mov qword [rdx], rax
mov r8, qword [rax + 8]
mov qword [r8], rsi
mov qword [rax + 8], rdx
mov qword [r12 + 8], rcx
mov qword [rsi + 8], r8
mov qword [rdi + r15*8], rsi
jmp 0x18001616c
mov rdx, qword [rbp + 0x10]
mov rcx, rbx
mov r8, r14
call sub.VCRUNTIME140.dll_memcmp
test eax, eax
je 0x180016383
cmp r13, rbp
je 0x180016140
mov rbp, qword [rbp + 8]
cmp r14, qword [rbp + 0x20]
jne 0x180016363
cmp qword [rbp + 0x28], 0x10
jae 0x180016350
lea rdx, [rbp + 0x10]
jmp 0x180016354
mov rax, qword [rbp]
mov rcx, qword [rsi + 8]
mov qword [rcx], r12
mov rdx, qword [r12 + 8]
mov qword [rdx], rax
mov r8, qword [rax + 8]
mov qword [r8], rsi
mov qword [rax + 8], rdx
mov qword [r12 + 8], rcx
mov qword [rsi + 8], r8
jmp 0x18001616c
add rsp, 0x48
pop rbx
pop rbp
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
ret
movabs rcx, 0x974138676bcfa29e
add rcx, qword [0x180044708]
call fcn.1800302e0
lea rcx, [0x180045b02]
call sub.MSVCP140.dll_void___cdecl_std::_Xlength_error_char_const____ptr64_
int3