Function at 0x47c980
Capabilities:
Encode data using xor

Disassembly:
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbp
push rbx
sub rsp, 0xa8
mov r12, r9
mov r13, r8
mov r15, rdx
mov rbx, rcx
mov rsi, qword [rsp + 0x110]
mov edi, dword [rdx + 0x40]
mov qword [rsp + 0x60], 0
mov rcx, qword [rdx + 0x48]
mov rax, qword [rbx + 0x238]
test rax, rax
je 0x47c9df
nop word [rax + rax]
cmp qword [rax + 8], r15
je 0x47ca2d
mov rax, qword [rax + 0x10]
test rax, rax
jne 0x47c9d0
mov rbp, qword [r15]
mov r14d, 7
test rbp, rbp
je 0x47d379
mov qword [rsp + 0x30], rcx
mov rcx, rbp
call fcn.005f4bd8
movabs rcx, 0x3a2cbc5f48602b5e
sub rax, rcx
lea rsi, [rax + rcx]
add rsi, 1
test rbx, rbx
je 0x47ca4d
mov rcx, rbx
mov rdx, rsi
call fcn.00429840
test rax, rax
jne 0x47ca5e
jmp 0x47d379
mov r8, qword [r15]
lea rdx, [0x005fdd44]
mov rcx, rbx
call fcn.00419c10
mov qword [rsi], rax
mov r14d, 6
jmp 0x47d379
mov rcx, rsi
call fcn.00404550
test rax, rax
je 0x47d379
mov dword [rsp + 0x38], edi
mov qword [rsp + 0x58], r12
mov qword [rsp + 0x40], rax
mov rcx, rax
mov rdx, rbp
mov r8, rsi
call fcn.005f4c20
mov ecx, 0x30
call fcn.00404550
test rax, rax
je 0x47cb02
mov r12, rax
xorps xmm0, xmm0
movups xmmword [r12 + 0x10], xmm0
movups xmmword [r12 + 0x20], xmm0
mov qword [r12], rbx
mov qword [r12 + 8], r13
mov byte [r12 + 0x1d], 1
mov rdx, qword [r15 + 0x60]
mov r8, qword [rbx + 0x20]
test rdx, rdx
mov qword [rsp + 0x48], rbx
je 0x47cb6b
movabs rcx, 0xffffffff00000000
mov edi, 0xffffffff
lea rsi, [r8 + 0x18]
xor ebp, ebp
nop dword [rax]
add rbp, 1
lea rbx, [rsi + 0x20]
add rcx, rdi
add rcx, 1
cmp qword [rsi], rdx
mov rsi, rbx
jne 0x47cae0
sar rcx, 0x20
mov rbx, qword [rsp + 0x48]
jmp 0x47cb72
cmp byte [rbx + 0x67], 0
mov rsi, qword [rsp + 0x40]
jne 0x47cb60
cmp byte [rbx + 0x68], 0
jne 0x47cb60
mov byte [rbx + 0x67], 1
cmp dword [rbx + 0xe4], 0
jle 0x47cb2a
mov dword [rbx + 0x198], 1
add dword [rbx + 0x1a0], 1
mov word [rbx + 0x1a4], 0
mov rcx, qword [rbx + 0x160]
test rcx, rcx
je 0x47cb60
lea rdx, [0x005fc480]
call fcn.00419aa0
mov rax, qword [rbx + 0x160]
mov dword [rax + 0x18], 7
mov rcx, rbx
mov rdx, rsi
jmp 0x47d374
mov rcx, 0xffffffffffff8000
mov r9, qword [rsp + 0x30]
shl rcx, 5
mov rdx, qword [r8 + rcx]
mov rcx, qword [r15 + 0x48]
mov qword [rcx + 8], rdx
mov qword [rsp + 0x90], r15
mov qword [rsp + 0x30], rax
mov qword [rsp + 0x88], rax
mov rax, qword [rbx + 0x238]
mov qword [rsp + 0x98], rax
mov dword [rsp + 0xa0], 0
lea rax, [rsp + 0x88]
mov qword [rbx + 0x238], rax
mov rdx, qword [r13 + 0x18]
add r12, 0x10
lea rax, [rsp + 0x60]
mov qword [rsp + 0x28], rax
mov qword [rsp + 0x20], r12
mov rcx, rbx
mov r8d, dword [rsp + 0x38]
call qword [rsp + 0x58]
mov r14d, eax
mov rax, qword [rsp + 0x98]
mov qword [rbx + 0x238], rax
test r14d, r14d
je 0x47cd14
cmp r14d, 7
mov rbp, qword [rsp + 0x40]
mov rsi, qword [rsp + 0x110]
jne 0x47cc6f
cmp byte [rbx + 0x67], 0
jne 0x47cc6f
cmp byte [rbx + 0x68], 0
jne 0x47cc6f
mov byte [rbx + 0x67], 1
cmp dword [rbx + 0xe4], 0
jle 0x47cc39
mov dword [rbx + 0x198], 1
add dword [rbx + 0x1a0], 1
mov word [rbx + 0x1a4], 0
mov rcx, qword [rbx + 0x160]
test rcx, rcx
je 0x47cc6f
lea rdx, [0x005fc480]
call fcn.00419aa0
mov rax, qword [rbx + 0x160]
mov dword [rax + 0x18], 7
mov r8, qword [rsp + 0x60]
test r8, r8
je 0x47d337
lea rdx, [0x005faef2]
mov rcx, rbx
call fcn.00419c10
mov qword [rsi], rax
mov rsi, qword [rsp + 0x60]
test rsi, rsi
je 0x47d357
cmp dword [0x005f6010], 0
je 0x47d34e
mov rcx, qword [0x0213b0e8]
test rcx, rcx
je 0x47ccbc
call qword [0x005f6090]
mov rcx, rsi
call qword [0x005f6048]
cdqe
movabs rcx, 0xabbef83a674514b8
mov rdx, qword [0x0213b040]
add rdx, rcx
sub rdx, rax
sub rdx, rcx
mov qword [0x0213b040], rdx
add qword [0x0213b088], 0xffffffffffffffff
mov rcx, rsi
call qword [0x005f6038]
mov rcx, qword [0x0213b0e8]
test rcx, rcx
je 0x47d357
call qword [0x005f60a0]
jmp 0x47d357
mov rax, qword [r12]
xor r14d, r14d
test rax, rax
je 0x47d369
xorps xmm0, xmm0
movups xmmword [rax], xmm0
mov qword [rax + 0x10], 0
mov rax, qword [r13]
mov rdx, qword [rsp + 0x30]
mov rcx, qword [rdx + 0x10]
mov qword [rcx], rax
add dword [r13 + 0x10], 1
mov dword [rdx + 0x18], 1
cmp dword [rsp + 0xa0], 0
je 0x47d390
mov rax, qword [r15 + 0x50]
mov qword [rdx + 0x28], rax
mov qword [r15 + 0x50], rdx
movzx eax, word [r15 + 0x36]
mov word [rsp + 0x30], ax
test ax, ax
mov rbp, qword [rsp + 0x40]
jle 0x47d36e
mov r12, qword [r15 + 8]
xor r14d, r14d
movabs rax, 0xffffffffffffffe
not rax
mov qword [rsp + 0x80], rax
xor eax, eax
mov qword [rsp + 0x38], rax
jmp 0x47ce02
movzx eax, word [rsp + 0x38]
mov ecx, dword [r15 + 0x30]
mov edx, ecx
not edx
mov ebp, eax
not ebp
mov ebx, edx
and ebx, 0x4edf4acb
and ecx, 0xb120b534
or ecx, ebx
or edx, ebp
and ebp, 0x4edf4acb
and eax, 0xb534
or eax, ebp
xor eax, ecx
not edx
or edx, eax
mov dword [r15 + 0x30], edx
mov rbx, qword [rsp + 0x48]
add r14, 1
movsx rax, word [rsp + 0x30]
cmp r14, rax
jge 0x47d366
lea rdx, [r14 + r14*2]
movzx eax, word [r12 + rdx*8 + 0x12]
mov ecx, eax
xor ecx, 0xfffb
test cx, ax
mov qword [rsp + 0x58], rdx
je 0x47cf7a
mov rsi, qword [r12 + rdx*8]
mov rcx, rsi
call fcn.005f4bd8
lea r13, [rsi + rax]
add r13, 1
mov rcx, r13
call fcn.005f4bd8
lea r9, [0x005fade0]
not eax
or eax, 0xc0000000
cmp eax, 0xffffffff
sete bl
setne cl
test r13, r13
sete dl
setne r8b
cmp bl, dl
jne 0x47cdb0
or cl, r8b
xor cl, 1
jne 0x47cdb0
not eax
mov r8d, eax
xor ebp, ebp
xor ecx, ecx
jmp 0x47cea4
movzx ebx, byte [r13 + rcx + 6]
mov edx, ebx
or dl, 0x20
cmp dl, 0x20
je 0x47cfb4
add rcx, 1
add ebp, 1
cmp r8, rcx
je 0x47cdb0
lea rsi, [rcx + r13]
movzx edx, byte [r13 + rcx]
mov ebx, edx
xor bl, 0x20
and bl, dl
mov edi, 0x68
cmp bl, 0x48
jne 0x47cf50
add rsi, 1
movzx ebx, byte [r13 + rcx + 1]
mov edx, ebx
xor dl, 0x20
and dl, bl
mov edi, 0x69
cmp dl, 0x49
jne 0x47cf50
add rsi, 1
movzx ebx, byte [r13 + rcx + 2]
mov edx, ebx
xor dl, 0x20
and dl, bl
mov edi, 0x64
cmp dl, 0x44
jne 0x47cf50
add rsi, 1
movzx edx, byte [r13 + rcx + 3]
not dl
or dl, 0x20
cmp dl, 0xbb
jne 0x47cf50
add rsi, 1
movzx ebx, byte [r13 + rcx + 4]
mov edx, ebx
xor dl, 0x20
and dl, bl
mov edi, 0x65
cmp dl, 0x45
jne 0x47cf50
movzx edx, byte [r13 + rcx + 5]
not dl
or dl, 0x20
cmp dl, 0xb1
je 0x47cf60
add rsi, 1
mov edi, 0x6e
nop dword [rax]
movzx ebx, byte [rsi]
movzx ebx, byte [rbx + r9]
cmp edi, ebx
jne 0x47ce94
test rcx, rcx
je 0x47ce80
cmp byte [r13 + rcx - 1], 0x20
je 0x47ce80
jmp 0x47ce94
mov ecx, dword [r12 + rdx*8 + 8]
shr ecx, 4
mov eax, ecx
xor eax, 0xffffff0
lea r13, [0x005fadb4]
and eax, ecx
je 0x47ce36
add eax, 0xffffffff
lea rcx, [0x005f6ea0]
mov r13, qword [rcx + rax*8]
test r13, r13
jne 0x47ce36
jmp 0x47cdb0
cmp bl, 1
mov edx, 7
sbb edx, 0
lea rbx, [rdx + rcx]
cmp ebx, eax
ja 0x47d294
mov r11d, ebx
mov r8d, 0xffffffff
xor r8, rcx
not r8
and r8, rcx
sub eax, edx
add eax, 1
mov rbx, rax
sub rbx, rcx
cmp rbx, 0x20
jb 0x47d1a3
mov qword [rsp + 0x50], rbx
lea rsi, [rcx + r13]
lea r9, [rax + r13]
lea r10, [r11 + r13]
lea edi, [rdx + rcx]
add rdi, rax
add rdi, r13
sub rdi, rcx
cmp rsi, rdi
setb r12b
cmp r10, r9
setae bl
cmp r12b, bl
je 0x47d02a
cmp rsi, rdi
jb 0x47d1a3
mov rdi, qword [rsp + 0x50]
and rdi, 0xffffffffffffffe0
mov rsi, rdi
sub rsi, rax
lea r9, [rdi - 0x20]
mov r12, r9
shr r12, 5
add r12, 1
mov rbx, r12
xor rbx, 0xfffffffffffffffe
test r9, r9
mov qword [rsp + 0x50], rdi
mov qword [rsp + 0x78], rsi
mov qword [rsp + 0x70], r12
mov qword [rsp + 0x68], rbx
je 0x47d13e
not r12
or r12, qword [rsp + 0x80]
not r12
add edx, ebp
add rdx, r13
add rdx, 0x10
mov qword [rsp + 0x30], rdx
lea rdx, [r8 + r13]
add rdx, 0x10
mov qword [rsp + 0x38], rdx
mov r10, 0xffffffffffffffff
xor ebp, ebp
movabs r9, 0x216067ea30347aeb
mov rdx, qword [rsp + 0x30]
movups xmm0, xmmword [rdx + rbp - 0x10]
movups xmm1, xmmword [rdx + rbp]
mov rdx, qword [rsp + 0x38]
movups xmmword [rdx + rbp - 0x10], xmm0
movups xmmword [rdx + rbp], xmm1
mov rbx, r9
not rbx
mov rsi, r10
and rsi, r9
mov rdi, rbp
and rdi, rbx
or rdi, rsi
mov rsi, r9
and rsi, 0xffffffffffffffdf
mov edx, ebx
and edx, 0x20
or rdx, rsi
xor rdx, rdi
mov esi, r10d
not esi
or ebx, r9d
and ebx, esi
and ebx, 0x20
or rbx, rdx
lea rdx, [r8 + rbx]
movabs rsi, 0x238c6d95a53986d0
sub rbx, rsi
add rbx, r11
add rbx, rsi
movups xmm0, xmmword [r13 + rbx]
movups xmm1, xmmword [r13 + rbx + 0x10]
movups xmmword [r13 + rdx], xmm0
movups xmmword [r13 + rdx + 0x10], xmm1
add rbp, 0x40
add r10, 0xffffffffffffffc0
add r12, 0xfffffffffffffffe
jne 0x47d0a8
jmp 0x47d140
xor ebp, ebp
mov rsi, qword [rsp + 0x78]
add rsi, rcx
mov rdx, qword [rsp + 0x68]
test qword [rsp + 0x70], rdx
je 0x47d18f
mov rdx, r8
movabs rbx, 0x58ca2f973b743142
sub rdx, rbx
add rdx, rbp
add rdx, r13
movabs rdi, 0xf0964ac22a63f8e0
sub rbp, rdi
add rbp, r11
add rbp, r13
movups xmm0, xmmword [rdi + rbp]
movups xmm1, xmmword [rdi + rbp + 0x10]
movups xmmword [rbx + rdx], xmm0
movups xmmword [rbx + rdx + 0x10], xmm1
test rsi, rsi
je 0x47d294
mov rdx, qword [rsp + 0x50]
add r8, rdx
add r11, rdx
movabs rbp, 0x1faad8a77eed27bb
lea edx, [rax + rbp]
sub edx, r8d
sub edx, ebp
mov rbp, r8
not rbp
movabs rbx, 0x8169f2ad6984b9ec
and rbp, rbx
not rbx
mov r10, r8
and r10, rbx
or r10, rbp
xor r10, rbx
add r10, rax
movabs rbp, 0x26024ddecaa37c85
mov r12d, ebp
not r12d
or r12d, ebp
and r12d, edx
and r12d, 3
je 0x47d238
mov r9, r12
neg r9
mov rdi, r13
xor ebp, ebp
mov rsi, r8
mov rdx, r11
nop dword [rax + rax]
movzx ebx, byte [rdi + r11]
mov byte [rdi + r8], bl
add rsi, 1
add rdx, 1
add r12, 0xffffffffffffffff
add rbp, 0xffffffffffffffff
add rdi, 1
cmp r9, rbp
jne 0x47d210
sub r8, rbp
sub r11, rbp
cmp r10, 3
jb 0x47d294
sub rax, r8
lea rbp, [r8 + r13]
add rbp, 3
lea rdi, [r11 + r13]
add rdi, 3
xor edx, edx
nop word [rax + rax]
movzx ebx, byte [rdi + rdx - 3]
mov byte [rbp + rdx - 3], bl
movzx ebx, byte [rdi + rdx - 2]
mov byte [rbp + rdx - 2], bl
movzx ebx, byte [rdi + rdx - 1]
mov byte [rbp + rdx - 1], bl
movzx ebx, byte [rdi + rdx]
mov byte [rbp + rdx], bl
add r8, 4
add r11, 4
add rdx, 4
cmp rax, rdx
jne 0x47d260
cmp byte [r13 + rcx], 0
setne al
test ecx, ecx
setne dl
cmp dl, al
je 0x47d2d9
test ecx, ecx
je 0x47d2d9
movabs rax, 0xffffffff00000000
sub eax, ecx
mov ecx, 0xffffffff
not ecx
or ecx, eax
movabs rdx, 0xd56beac22ad494a9
mov eax, edx
not eax
or eax, edx
not ecx
and ecx, eax
mov byte [r13 + rcx], 0
mov r12, qword [r15 + 8]
mov rdx, qword [rsp + 0x58]
movzx eax, word [r12 + rdx*8 + 0x12]
mov ecx, eax
and ecx, 2
xor eax, 2
or eax, ecx
mov word [r12 + rdx*8 + 0x12], ax
mov eax, dword [r15 + 0x30]
mov ecx, eax
not ecx
and ecx, 0x22d36b5a
mov edx, eax
and edx, 0xdd2c94a5
or edx, ecx
xor edx, 0x22d36b58
and eax, 2
or eax, edx
mov dword [r15 + 0x30], eax
movzx eax, word [r15 + 0x36]
mov word [rsp + 0x30], ax
mov ax, 0x400
mov qword [rsp + 0x38], rax
jmp 0x47cdea
lea rdx, [0x005fdd6e]
mov rcx, rbx
mov r8, rbp
call fcn.00419c10
mov qword [rsi], rax
jmp 0x47d357
mov rcx, rsi
call qword [0x005f6038]
mov rcx, rbx
mov rdx, qword [rsp + 0x30]
call fcn.00408130
jmp 0x47d36e
xor r14d, r14d
mov rbp, qword [rsp + 0x40]
mov rcx, rbx
mov rdx, rbp
call fcn.00408130
mov eax, r14d
add rsp, 0xa8
pop rbx
pop rbp
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
ret
mov r8, qword [r15]
lea rdx, [0x005fdd8c]
mov rcx, rbx
call fcn.00419c10
mov rdx, qword [rsp + 0x30]
mov rcx, qword [rsp + 0x110]
mov qword [rcx], rax
mov rsi, qword [rdx]
add dword [rdx + 0x18], 0xffffffff
mov r14d, 1
mov rbp, qword [rsp + 0x40]
jne 0x47d36e
mov rbx, qword [rdx + 8]
mov rdi, qword [rdx + 0x10]
add dword [rbx + 0x10], 0xffffffff
jne 0x47d3f3
mov rax, qword [rbx + 0x20]
test rax, rax
je 0x47d3e3
mov rcx, qword [rbx + 0x18]
call rax
mov rcx, rsi
mov rdx, rbx
call fcn.00408130
mov rdx, qword [rsp + 0x30]
test rdi, rdi
je 0x47d406
mov rax, qword [rdi]
mov rcx, rdi
call qword [rax + 0x20]
mov rdx, qword [rsp + 0x30]
mov rcx, rsi
call fcn.00408130
mov rbx, qword [rsp + 0x48]
jmp 0x47d36e