Function at 0x14022ca6c
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 - 0xb8]
sub rsp, 0x1b8
mov rax, qword [0x14033a080]
xor rax, rsp
mov qword [rbp + 0xa0], rax
mov r10, qword [rcx + 8]
mov rdi, rcx
mov r11, qword [rcx + 0x38]
mov r13d, edx
mov ebx, dword [rcx + 0x34]
sub r13d, r10d
mov qword [rsp + 0x48], r10
mov eax, r13d
mov r10d, dword [rdi + 0x1c]
mov rsi, qword [rdi + 0x60]
mov qword [rbp - 0x78], rdx
mov qword [rbp - 0x68], r9
mov r9, rdx
mov qword [rbp - 0x70], r8
mov edx, 1
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 + 0x70], r8
mov qword [rsp + 0x78], r11
cmova r10d, eax
mov dword [rsp + 0x68], ebx
mov eax, dword [rdi + 0x10c]
xor r15d, r15d
cmp dword [rdi + 0x28], r15d
mov dword [rsp + 0x50], r13d
cmovne r10d, dword [rdi + 0x1c]
lea ecx, [r15 + 4]
mov dword [rsp + 0x24], r10d
cmp eax, ecx
mov qword [rbp - 0x80], rsi
lea r12d, [r15 + 3]
cmovb ecx, eax
mov qword [rsp + 0x60], r12
lea eax, [r15 + 1]
shl eax, cl
mov dword [rsp + 0x20], eax
cmp dword [rdi + 0x12c], r15d
jne 0x14022ceb8
mov esi, dword [rdi + 0x2c]
lea r14d, [r15 + 0x38]
mov eax, r13d
mov qword [rsp + 0x40], r8
sub eax, esi
mov qword [rsp + 0x28], r11
lea r8d, [r15 + 8]
mov r9d, ebx
cmp eax, 0x180
jbe 0x14022cd62
lea eax, [rsi + 0x60]
mov dword [rsp + 0x58], eax
cmp esi, eax
jae 0x14022cc5d
mov r13, qword [rsp + 0x48]
mov eax, r14d
mov r14d, dword [rsp + 0x58]
sub eax, ebx
mov r15d, eax
mov qword [rsp + 0x28], rsi
mov r11d, esi
movabs r12, 0xcf1bbcdcbb000000
mov rbx, qword [rdi + 0x60]
lea rdx, [r13 + 8]
add rdx, r11
lea rcx, [rsp + 0x30]
mov r8d, 8
call sub.VCRUNTIME140.dll_memcpy
mov rdx, qword [rsp + 0x30]
mov ecx, r15d
imul rdx, r12
mov r8d, 0xffffff0
xor rdx, rbx
mov rbx, qword [rsp + 0x70]
shr rdx, cl
mov eax, edx
shr eax, 4
and eax, r8d
prefetcht0 byte [rbx + rax*4]
mov rcx, qword [rsp + 0x78]
prefetcht0 byte [rcx + rax]
mov r11, qword [rsp + 0x28]
mov rax, r11
and eax, 7
mov r10d, dword [rdi + rax*4 + 0x40]
mov dword [rdi + rax*4 + 0x40], edx
mov eax, r10d
shr eax, 4
and eax, r8d
mov r9d, eax
lea r8, [rax + rcx]
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 [rbx + rax*4], esi
inc esi
cmp esi, r14d
jb 0x14022cb9d
mov r13d, dword [rsp + 0x50]
mov r14d, 0x38
mov r12, qword [rsp + 0x60]
xor r15d, r15d
lea r8d, [r14 - 0x30]
mov r10, qword [rdi + 0x70]
lea esi, [r13 - 0x20]
mov rcx, qword [rbp - 0x78]
mov r9d, dword [rdi + 0x34]
inc rcx
mov qword [rsp + 0x40], r10
mov edx, ecx
mov r10, qword [rdi + 0x38]
mov eax, esi
mov qword [rsp + 0x38], rax
mov qword [rsp + 0x28], r10
mov r10, qword [rsp + 0x48]
sub edx, r10d
mov dword [rsp + 0x58], esi
sub edx, esi
add rax, r10
inc edx
cmp rax, rcx
cmova edx, r15d
cmp edx, r8d
cmova edx, r8d
lea eax, [rdx + rsi]
cmp esi, eax
jae 0x14022cd62
mov r15, qword [rsp + 0x40]
mov r12d, r14d
mov r14, qword [rsp + 0x28]
sub r12d, r9d
mov rsi, qword [rsp + 0x38]
movabs r13, 0xcf1bbcdcbb000000
mov eax, edx
mov qword [rsp + 0x30], rax
mov rbx, qword [rdi + 0x60]
lea rdx, [r10 + rsi]
mov r8d, 8
lea rcx, [rsp + 0x38]
call sub.VCRUNTIME140.dll_memcpy
mov rdx, qword [rsp + 0x38]
mov ecx, r12d
imul rdx, r13
xor rdx, rbx
shr rdx, cl
mov eax, edx
shr eax, 4
and eax, 0xffffff0
prefetcht0 byte [r15 + rax*4]
prefetcht0 byte [r14 + rax]
mov r10, qword [rsp + 0x48]
mov rax, rsi
and eax, 7
inc rsi
sub qword [rsp + 0x30], 1
mov dword [rdi + rax*4 + 0x40], edx
jne 0x14022ccd9
mov rax, qword [rdi + 0x70]
mov r14d, 0x38
mov r9d, dword [rdi + 0x34]
xor r15d, r15d
mov esi, dword [rsp + 0x58]
mov r13d, dword [rsp + 0x50]
mov r12, qword [rsp + 0x60]
lea r8d, [r14 - 0x30]
mov qword [rsp + 0x40], rax
mov rax, qword [rdi + 0x38]
mov qword [rsp + 0x28], rax
mov rax, qword [rdi + 8]
mov qword [rsp + 0x58], rax
cmp esi, r13d
jae 0x14022ce4e
mov r12d, r14d
mov r8d, esi
mov r14, qword [rsp + 0x40]
sub r12d, r9d
mov qword [rsp + 0x30], r8
movabs r15, 0xcf1bbcdcbb000000
mov rbx, qword [rdi + 0x60]
lea rdx, [r8 + 8]
add rdx, rax
lea rcx, [rsp + 0x38]
mov r8d, 8
call sub.VCRUNTIME140.dll_memcpy
mov rdx, qword [rsp + 0x38]
mov ecx, r12d
imul rdx, r15
mov r9d, 0xffffff0
xor rdx, rbx
shr rdx, cl
mov eax, edx
shr eax, 4
and eax, r9d
prefetcht0 byte [r14 + rax*4]
mov rcx, qword [rsp + 0x28]
prefetcht0 byte [rcx + rax]
mov r8, qword [rsp + 0x30]
mov rax, r8
and eax, 7
mov r11d, dword [rdi + rax*4 + 0x40]
mov dword [rdi + rax*4 + 0x40], edx
mov eax, r11d
shr eax, 4
and eax, r9d
mov r10d, eax
lea r9, [rcx + rax]
movzx edx, byte [r9]
dec edx
and edx, 0xf
mov eax, edx
neg eax
sbb ecx, ecx
inc r8
not ecx
mov qword [rsp + 0x30], r8
and ecx, 0xf
add edx, ecx
mov byte [r9], dl
mov eax, edx
add rax, r10
mov byte [r9 + rdx], r11b
mov dword [r14 + rax*4], esi
inc esi
mov rax, qword [rsp + 0x58]
cmp esi, r13d
jb 0x14022cd91
mov r12, qword [rsp + 0x60]
mov r14d, 0x38
xor r15d, r15d
lea r8d, [r14 - 0x30]
mov rdx, qword [rsp + 0x48]
lea rcx, [rsp + 0x38]
add rdx, 8
mov ebx, r13d
add rdx, rbx
mov dword [rdi + 0x2c], r13d
call sub.VCRUNTIME140.dll_memcpy
sub r14d, dword [rsp + 0x68]
movabs rax, 0xcf1bbcdcbb000000
mov rdx, qword [rsp + 0x38]
mov cl, r14b
imul rdx, rax
xor rdx, qword [rbp - 0x80]
shr rdx, cl
mov rcx, qword [rsp + 0x70]
mov eax, edx
shr eax, 4
and eax, 0xffffff0
prefetcht0 byte [rcx + rax*4]
mov r8, qword [rsp + 0x78]
prefetcht0 byte [rax + r8]
and ebx, 7
mov r9d, dword [rdi + rbx*4 + 0x40]
mov dword [rdi + rbx*4 + 0x40], edx
jmp 0x14022cef7
mov r8d, 8
lea rcx, [rbp - 0x80]
mov rdx, r9
call sub.VCRUNTIME140.dll_memcpy
mov r9, qword [rbp - 0x80]
mov ecx, 0x38
mov r8, qword [rsp + 0x78]
sub ecx, ebx
movabs rax, 0xcf1bbcdcbb000000
mov dword [rdi + 0x2c], r13d
imul r9, rax
xor r9, rsi
shr r9, cl
mov rcx, qword [rsp + 0x70]
add dword [rdi + 0x68], r9d
mov eax, r9d
shr eax, 4
mov rsi, r15
and eax, 0xffffff0
lea r14, [rcx + rax*4]
lea r11, [rax + r8]
movsx eax, r9b
movzx ebx, byte [r11]
movdqu xmm0, xmmword [r11]
movd xmm1, eax
mov eax, ebx
and eax, 0xf
punpcklbw xmm1, xmm1
mov ecx, eax
punpcklwd xmm1, xmm1
mov edx, eax
pshufd xmm1, xmm1, 0
neg ecx
pcmpeqb xmm0, xmm1
and ecx, 0xf
pmovmskb r8d, xmm0
movzx eax, r8w
shl ax, cl
mov cl, dl
movzx r10d, ax
movzx eax, r8w
shr rax, cl
or r10, rax
jbe 0x14022cfa3
mov rdx, qword [rsp + 0x48]
mov r8d, dword [rsp + 0x20]
mov r12d, dword [rsp + 0x24]
test r8d, r8d
je 0x14022cf9e
bsf rcx, r10
add ecx, ebx
and ecx, 0xf
mov ecx, dword [r14 + rcx*4]
je 0x14022cf95
cmp ecx, r12d
jb 0x14022cf9e
prefetcht0 byte [rcx + rdx]
mov dword [rbp + rsi*4 - 0x60], ecx
inc rsi
dec r8d
lea rax, [r10 - 1]
and r10, rax
ja 0x14022cf6e
mov r12, qword [rsp + 0x60]
lea edx, [rbx - 1]
and edx, 0xf
mov eax, edx
neg eax
sbb ecx, ecx
not ecx
and ecx, 0xf
add edx, ecx
mov byte [r11], dl
mov byte [r11 + rdx], r9b
mov eax, dword [rdi + 0x2c]
mov dword [r14 + rdx*4], eax
inc dword [rdi + 0x2c]
test rsi, rsi
je 0x14022d054
mov rdi, qword [rbp - 0x78]
mov r14, qword [rbp - 0x70]
mov ebx, dword [rbp + r15*4 - 0x60]
lea rdx, [r12 - 3]
add rbx, qword [rsp + 0x48]
lea rcx, [rsp + 0x20]
add rdx, rbx
mov r8d, 4
call sub.VCRUNTIME140.dll_memcpy
lea rdx, [rdi - 3]
mov r8d, 4
add rdx, r12
lea rcx, [rsp + 0x24]
call sub.VCRUNTIME140.dll_memcpy
mov eax, dword [rsp + 0x24]
cmp dword [rsp + 0x20], eax
jne 0x14022d04c
mov r8, r14
mov rdx, rbx
mov rcx, rdi
call fcn.140206fc0
cmp rax, r12
jbe 0x14022d04c
mov rdx, qword [rbp - 0x68]
mov ecx, r13d
sub ecx, dword [rbp + r15*4 - 0x60]
mov r12, rax
add ecx, 3
mov qword [rdx], rcx
lea rcx, [rax + rdi]
cmp rcx, r14
je 0x14022d054
inc r15
cmp r15, rsi
jb 0x14022cfd8
mov rax, r12
mov rcx, qword [rbp + 0xa0]
xor rcx, rsp
call fcn.140255040
add rsp, 0x1b8
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbx
pop rbp
ret