Function at 0x18010e548
Capabilities:
Encode data using xor

Disassembly:
push rbp
push rbx
push rsi
push rdi
push r12
push r13
push r14
push r15
lea rbp, [rsp - 0xd8]
sub rsp, 0x1d8
mov rax, qword [0x180200ce8]
xor rax, rsp
mov qword [rbp + 0xc0], rax
mov rbx, qword [rcx + 8]
mov rdi, rcx
mov r11d, dword [rcx + 0x34]
mov r13d, edx
sub r13d, ebx
mov qword [rbp - 0x80], rdx
mov r10, rdx
mov qword [rbp - 0x60], r9
mov r9, qword [rcx + 0x38]
mov edx, 1
mov esi, dword [rdi + 0x1c]
mov eax, r13d
mov qword [rbp - 0x68], r8
mov r8, qword [rcx + 0x70]
mov ecx, dword [rcx + 0x100]
shl edx, cl
mov ecx, r13d
sub ecx, dword [rdi + 0x1c]
sub eax, edx
cmp ecx, edx
mov qword [rsp + 0x58], r8
mov qword [rsp + 0x60], r9
cmova esi, eax
mov dword [rsp + 0x50], r11d
mov eax, dword [rdi + 0x10c]
xor r14d, r14d
cmp dword [rdi + 0x28], r14d
mov qword [rsp + 0x48], rbx
cmovne esi, dword [rdi + 0x1c]
lea ecx, [r14 + 4]
mov dword [rsp + 0x44], esi
mov rsi, qword [rdi + 0x60]
lea r12d, [r14 + 3]
cmp eax, ecx
mov dword [rsp + 0x30], r13d
mov qword [rsp + 0x78], rsi
cmovb ecx, eax
mov qword [rsp + 0x68], r12
lea eax, [r14 + 1]
shl eax, cl
mov dword [rsp + 0x40], eax
cmp dword [rdi + 0x12c], r14d
jne 0x18010e99a
mov esi, dword [rdi + 0x2c]
lea r15d, [r14 + 0x38]
mov eax, r13d
mov qword [rsp + 0x38], r8
sub eax, esi
mov qword [rsp + 0x28], r9
lea r9d, [r14 + 8]
mov r8d, r11d
cmp eax, 0x180
jbe 0x18010e83d
mov rax, qword [rsp + 0x58]
lea ecx, [rsi + 0x60]
mov qword [rsp + 0x38], rax
mov rax, qword [rsp + 0x60]
mov qword [rsp + 0x28], rax
mov dword [rsp + 0x20], ecx
cmp esi, ecx
jae 0x18010e763
mov eax, r15d
mov qword [rsp + 0x28], rsi
mov r15, qword [rsp + 0x58]
sub eax, r11d
mov r14d, eax
mov r11d, esi
movabs r12, 0xcf1bbcdcbf9b0000
mov r13, rbx
mov rbx, qword [rdi + 0x60]
lea rdx, [r13 + 8]
add rdx, r11
lea rcx, [rbp - 0x78]
mov r8d, 8
call sub.VCRUNTIME140.dll_memcpy
mov rdx, qword [rbp - 0x78]
mov ecx, r14d
imul rdx, r12
mov r8d, 0xffffff0
xor rdx, rbx
shr rdx, cl
mov eax, edx
shr rax, 4
and rax, r8
prefetcht0 byte [r15 + rax*4]
mov rcx, qword [rsp + 0x60]
prefetcht0 byte [rax + rcx]
mov r11, qword [rsp + 0x28]
mov rax, r11
and eax, 7
mov r10d, dword [rdi + rax*4 + 0x40]
mov r9d, r10d
mov dword [rdi + rax*4 + 0x40], edx
shr r9, 4
and r9, r8
lea r8, [rcx + r9]
movzx edx, byte [r8]
dec edx
and edx, 0xf
mov eax, edx
neg eax
sbb ecx, ecx
inc r11
not ecx
mov qword [rsp + 0x28], r11
and ecx, 0xf
add edx, ecx
mov byte [r8], dl
mov eax, edx
add rax, r9
mov byte [rdx + r8], r10b
mov dword [r15 + rax*4], esi
inc esi
cmp esi, dword [rsp + 0x20]
jb 0x18010e68b
mov rax, qword [rdi + 0x70]
xor r14d, r14d
mov r8d, dword [rdi + 0x34]
mov r13d, dword [rsp + 0x30]
mov r12, qword [rsp + 0x68]
mov r10, qword [rbp - 0x80]
lea r15d, [r14 + 0x38]
mov rbx, qword [rsp + 0x48]
lea r9d, [r14 + 8]
mov qword [rsp + 0x38], rax
mov rax, qword [rdi + 0x38]
mov qword [rsp + 0x28], rax
lea esi, [r13 - 0x20]
lea rcx, [r10 + 1]
mov eax, esi
add rax, rbx
mov edx, ecx
sub edx, ebx
sub edx, esi
inc edx
cmp rax, rcx
cmova edx, r14d
cmp edx, r9d
cmova edx, r9d
lea eax, [rdx + rsi]
cmp esi, eax
jae 0x18010e83d
mov r12, qword [rsp + 0x38]
mov eax, r15d
mov r13, qword [rsp + 0x28]
sub eax, r8d
mov dword [rsp + 0x20], eax
mov r14d, dword [rsp + 0x20]
mov eax, edx
mov qword [rbp - 0x58], rax
mov r15d, esi
mov rdx, qword [rsp + 0x48]
lea rcx, [rbp - 0x70]
mov rbx, qword [rdi + 0x60]
add rdx, r15
mov r8d, 8
call sub.VCRUNTIME140.dll_memcpy
mov rdx, qword [rbp - 0x70]
movabs rax, 0xcf1bbcdcbf9b0000
imul rdx, rax
mov ecx, r14d
xor rdx, rbx
shr rdx, cl
mov eax, edx
shr rax, 4
and eax, 0xffffff0
prefetcht0 byte [r12 + rax*4]
prefetcht0 byte [rax + r13]
mov rax, r15
inc r15
and eax, 7
sub qword [rbp - 0x58], 1
mov dword [rdi + rax*4 + 0x40], edx
jne 0x18010e7b3
mov rax, qword [rdi + 0x70]
xor r14d, r14d
mov r8d, dword [rdi + 0x34]
mov r13d, dword [rsp + 0x30]
mov r12, qword [rsp + 0x68]
mov qword [rsp + 0x38], rax
lea r15d, [r14 + 0x38]
mov rax, qword [rdi + 0x38]
lea r9d, [r14 + 8]
mov qword [rsp + 0x28], rax
mov rcx, qword [rdi + 8]
mov qword [rsp + 0x70], rcx
cmp esi, r13d
jae 0x18010e926
mov r12, qword [rsp + 0x38]
mov eax, r15d
mov r14, qword [rsp + 0x28]
sub eax, r8d
mov r8d, esi
mov r15d, eax
mov qword [rbp - 0x58], r8
mov rbx, qword [rdi + 0x60]
lea rdx, [r8 + 8]
add rdx, rcx
mov r8d, 8
lea rcx, [rsp + 0x28]
call sub.VCRUNTIME140.dll_memcpy
mov rdx, qword [rsp + 0x28]
movabs rax, 0xcf1bbcdcbf9b0000
imul rdx, rax
mov ecx, r15d
xor rdx, rbx
shr rdx, cl
mov ecx, 0xffffff0
mov eax, edx
shr rax, 4
and rax, rcx
prefetcht0 byte [r12 + rax*4]
prefetcht0 byte [rax + r14]
mov r8, qword [rbp - 0x58]
mov rax, r8
and eax, 7
mov r11d, dword [rdi + rax*4 + 0x40]
mov r10d, r11d
mov dword [rdi + rax*4 + 0x40], edx
shr r10, 4
and r10, rcx
lea r9, [r10 + r14]
movzx edx, byte [r9]
dec edx
and edx, 0xf
mov eax, edx
neg eax
sbb ecx, ecx
inc r8
not ecx
mov qword [rbp - 0x58], r8
and ecx, 0xf
add edx, ecx
mov rcx, qword [rsp + 0x70]
mov byte [r9], dl
mov eax, edx
add rax, r10
mov byte [rdx + r9], r11b
mov dword [r12 + rax*4], esi
inc esi
cmp esi, r13d
jb 0x18010e869
mov r12, qword [rsp + 0x68]
xor r14d, r14d
lea r15d, [r14 + 0x38]
lea r9d, [r14 + 8]
mov rdx, qword [rsp + 0x48]
lea rcx, [rsp + 0x70]
add rdx, 8
mov ebx, r13d
add rdx, rbx
mov dword [rdi + 0x2c], r13d
mov r8, r9
call sub.VCRUNTIME140.dll_memcpy
sub r15d, dword [rsp + 0x50]
movabs rax, 0xcf1bbcdcbf9b0000
mov rdx, qword [rsp + 0x70]
mov cl, r15b
imul rdx, rax
xor rdx, qword [rsp + 0x78]
shr rdx, cl
mov rcx, qword [rsp + 0x58]
mov eax, edx
shr rax, 4
and eax, 0xffffff0
prefetcht0 byte [rcx + rax*4]
mov r9, qword [rsp + 0x60]
prefetcht0 byte [rax + r9]
and ebx, 7
mov r8d, dword [rdi + rbx*4 + 0x40]
mov dword [rdi + rbx*4 + 0x40], edx
mov rbx, qword [rsp + 0x48]
jmp 0x18010e9dd
mov r8d, 8
lea rcx, [rsp + 0x78]
mov rdx, r10
call sub.VCRUNTIME140.dll_memcpy
mov r8, qword [rsp + 0x78]
mov ecx, 0x38
sub ecx, dword [rsp + 0x50]
movabs rax, 0xcf1bbcdcbf9b0000
mov r9, qword [rsp + 0x60]
imul r8, rax
mov dword [rdi + 0x2c], r13d
xor r8, rsi
shr r8, cl
mov rcx, qword [rsp + 0x58]
add dword [rdi + 0x68], r8d
mov eax, r8d
shr rax, 4
mov rsi, r14
and eax, 0xffffff0
add r9, rax
lea r10, [rcx + rax*4]
movsx eax, r8b
movzx r15d, byte [r9]
movdqu xmm0, xmmword [r9]
mov r11d, r15d
movd xmm1, eax
and r11d, 0xf
punpcklbw xmm1, xmm1
mov ecx, r11d
neg ecx
punpcklwd xmm1, xmm1
and ecx, 0xf
pshufd xmm1, xmm1, 0
pcmpeqb xmm1, xmm0
pmovmskb eax, xmm1
mov dword [rbp - 0x58], eax
shl ax, cl
mov cl, r11b
movzx edx, ax
movzx eax, word [rbp - 0x58]
shr rax, cl
or rdx, rax
jbe 0x18010ea89
mov r12d, dword [rsp + 0x40]
mov r13d, dword [rsp + 0x44]
test r12d, r12d
je 0x18010ea7f
bsf rcx, rdx
add ecx, r11d
and ecx, 0xf
je 0x18010ea76
mov ecx, dword [r10 + rcx*4]
cmp ecx, r13d
jb 0x18010ea7f
prefetcht0 byte [rcx + rbx]
mov dword [rbp + rsi*4 - 0x40], ecx
inc rsi
dec r12d
lea rax, [rdx - 1]
and rdx, rax
ja 0x18010ea4e
mov r13d, dword [rsp + 0x30]
mov r12, qword [rsp + 0x68]
lea edx, [r15 - 1]
and edx, 0xf
mov eax, edx
neg eax
sbb ecx, ecx
not ecx
and ecx, 0xf
add edx, ecx
mov byte [r9], dl
mov byte [rdx + r9], r8b
mov eax, dword [rdi + 0x2c]
mov dword [r10 + rdx*4], eax
inc dword [rdi + 0x2c]
test rsi, rsi
je 0x18010eb42
mov r15, qword [rbp - 0x80]
mov edi, dword [rbp + r14*4 - 0x40]
lea rdx, [r12 - 3]
add rdi, rbx
lea rcx, [rsp + 0x44]
add rdx, rdi
mov r8d, 4
call sub.VCRUNTIME140.dll_memcpy
mov ebx, dword [rsp + 0x44]
lea rdx, [r15 - 3]
add rdx, r12
lea rcx, [rsp + 0x40]
mov r8d, 4
call sub.VCRUNTIME140.dll_memcpy
cmp ebx, dword [rsp + 0x40]
jne 0x18010eb31
mov rbx, qword [rbp - 0x68]
mov rdx, rdi
mov r8, rbx
mov rcx, r15
call fcn.1800f6c28
cmp rax, r12
jbe 0x18010eb31
mov rdx, qword [rbp - 0x60]
mov ecx, r13d
sub ecx, dword [rbp + r14*4 - 0x40]
mov r12, rax
add ecx, 3
mov qword [rdx], rcx
lea rcx, [rax + r15]
cmp rcx, rbx
je 0x18010eb42
mov rbx, qword [rsp + 0x48]
inc r14
cmp r14, rsi
jb 0x18010eabb
mov rax, r12
mov rcx, qword [rbp + 0xc0]
xor rcx, rsp
call fcn.180145570
add rsp, 0x1d8
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbx
pop rbp
ret