Function at 0x180020784
Capabilities:
Encrypt data using rc4 prga

Disassembly:
mov rax, rsp
mov qword [rax + 8], rbx
mov qword [rax + 0x10], rbp
mov qword [rax + 0x18], rsi
mov qword [rax + 0x20], rdi
push r12
push r14
push r15
sub rsp, 0x20
mov rax, qword [rdx + 0x10]
xor r11d, r11d
mov r14, qword [rdx]
or esi, 0xffffffff
mov r15, rdx
mov rdi, rcx
mov r8d, r11d
movsxd rbp, dword [rax + 0x14]
mov r10, qword [rax]
lea r12d, [rsi + 2]
mov dword [rcx + 0x149c], r11d
mov dword [rcx + 0x14a0], 0x23d
test ebp, ebp
jle 0x18002086b
mov edx, r11d
cmp word [r14 + rdx*4], r11w
je 0x18002080a
movsxd rcx, dword [rdi + 0x149c]
mov esi, r8d
lea eax, [rcx + 1]
mov dword [rdi + 0x149c], eax
mov dword [rdi + rcx*4 + 0xbac], r8d
mov byte [rdx + rdi + 0x14a4], r11b
jmp 0x180020810
mov word [r14 + rdx*4 + 2], r11w
add r8d, r12d
add rdx, r12
cmp rdx, rbp
jl 0x1800207de
jmp 0x18002086b
cmp esi, 2
lea eax, [rdx + 1]
mov dword [rdi + 0x149c], eax
lea ecx, [rsi + 1]
movsxd rax, edx
mov r8d, ecx
cmovge ecx, r11d
cmovge r8d, esi
mov dword [rdi + rax*4 + 0xbac], ecx
movsxd rax, ecx
mov word [r14 + rax*4], r12w
mov byte [rax + rdi + 0x14a4], r11b
dec dword [rdi + 0x16fc]
test r10, r10
je 0x180020868
movzx eax, word [r10 + rax*4 + 2]
sub dword [rdi + 0x1700], eax
mov esi, r8d
mov edx, dword [rdi + 0x149c]
cmp edx, 2
jl 0x18002081d
mov dword [r15 + 8], esi
mov eax, dword [rdi + 0x149c]
cdq
sub eax, edx
sar eax, 1
mov ebx, eax
cmp eax, r12d
jl 0x1800208a2
mov r8d, ebx
mov rdx, r14
mov rcx, rdi
call fcn.1800211a8
sub ebx, r12d
cmp ebx, r12d
jge 0x18002088c
movsxd rdx, dword [rdi + 0x149c]
mov r8d, r12d
movsxd rbx, dword [rdi + 0xbac]
mov ecx, dword [rdi + rdx*4 + 0xba8]
lea eax, [rdx - 1]
mov dword [rdi + 0xbac], ecx
mov rdx, r14
mov rcx, rdi
mov dword [rdi + 0x149c], eax
call fcn.1800211a8
movsxd rcx, dword [rdi + 0x14a0]
mov r8d, r12d
movsxd rdx, dword [rdi + 0xbac]
mov r9, rdx
lea eax, [rcx - 1]
mov dword [rdi + 0x14a0], eax
mov dword [rdi + rcx*4 + 0xba4], ebx
movsxd rcx, dword [rdi + 0x14a0]
lea eax, [rcx - 1]
mov dword [rdi + 0x14a0], eax
mov dword [rdi + rcx*4 + 0xba4], edx
movzx eax, word [r14 + rbx*4]
add ax, word [r14 + r9*4]
movsxd rdx, ebp
mov word [r14 + rdx*4], ax
movzx ecx, byte [rbx + rdi + 0x14a4]
movzx eax, byte [r9 + rdi + 0x14a4]
cmp cl, al
cmovb ecx, eax
add cl, r12b
mov byte [rdx + rdi + 0x14a4], cl
mov rdx, r14
mov word [r14 + r9*4 + 2], bp
mov rcx, rdi
mov word [r14 + rbx*4 + 2], bp
mov dword [rdi + 0xbac], ebp
add ebp, r12d
call fcn.1800211a8
cmp dword [rdi + 0x149c], 2
jge 0x1800208a2
movsxd r8, dword [rdi + 0x14a0]
mov rdx, r15
lea eax, [r8 - 1]
mov dword [rdi + 0x14a0], eax
mov eax, dword [rdi + 0xbac]
mov dword [rdi + r8*4 + 0xba4], eax
call fcn.180020e8c
lea r8, [rdi + 0xb88]
mov edx, esi
mov rcx, r14
mov rbx, qword [rsp + 0x40]
mov rbp, qword [rsp + 0x48]
mov rsi, qword [rsp + 0x50]
mov rdi, qword [rsp + 0x58]
add rsp, 0x20
pop r15
pop r14
pop r12
jmp 0x1800210a8
push rbx
sub rsp, 0x50
mov rax, qword [0x18005f4c0]
xor rax, rsp
mov qword [rsp + 0x40], rax
xor r10d, r10d
lea rax, [rsp + 0x22]
mov r11, rcx
sub r8, rax
lea ebx, [r10 + 1]
mov r9d, ebx
lea rax, [r8 + r9*2]
movzx ecx, word [rsp + rax + 0x20]
add r10d, ecx
add r10d, r10d
mov word [rsp + r9*2 + 0x20], r10w
add r9, rbx
cmp r9, 0xf
jle 0x1800210d2
movsxd r10, edx
test edx, edx
js 0x180021123
xor r9d, r9d
movzx edx, word [r11 + r9*4 + 2]
test edx, edx
je 0x18002111b
movzx ecx, word [rsp + rdx*2 + 0x20]
lea eax, [rbx + rcx]
mov word [rsp + rdx*2 + 0x20], ax
call fcn.180020698
mov word [r11 + r9*4], ax
add r9, rbx
cmp r9, r10
jle 0x1800210fa
mov rcx, qword [rsp + 0x40]
xor rcx, rsp
call fcn.180044ff0
add rsp, 0x50
pop rbx
ret