Function at 0x1400383c0
Capabilities:
Log keystrokes via polling

Disassembly:
push rsi
sub rsp, 0x50
mov r9d, edx
mov rsi, rcx
cmp edx, 0x28
ja 0x14003869d
mov eax, r9d
movabs rcx, 0x15e00000000
bt rcx, rax
jae 0x14003869d
mov rax, qword [rsi + 0x130]
mov r8d, dword [rax]
test r8d, r8d
jne 0x140038403
mov al, 1
add rsp, 0x50
pop rsi
ret
mov qword [rsp + 0x78], rbp
lea eax, [r9 - 0x21]
xor ebp, ebp
mov qword [rsp + 0x48], rdi
cmp eax, 7
ja case.0x14003842d.37
lea rdx, [0x140000000]
mov ecx, dword [rdx + rax*4 + 0x386a8]
add rcx, rdx
jmp rcx
mov rax, qword [rsi + 0xa0]
test rax, rax
je case.0x14003842d.36
mov edi, dword [rax + 0x2c]
test edi, edi
je case.0x14003842d.36
dec edi
jmp 0x1400384fe
mov rax, qword [rsi + 0xa0]
test rax, rax
je case.0x14003842d.36
mov edi, dword [rax + 0x2c]
inc edi
cmp edi, r8d
jb 0x1400384fe
lea edi, [r8 - 1]
jmp 0x1400384fe
mov rax, qword [rsi + 0xa0]
test rax, rax
je 0x140038485
mov edi, dword [rax + 0x2c]
jmp 0x140038487
mov edi, ebp
test byte [rsi + 0x40], 8
je 0x140038495
mov ecx, dword [rsi + 0x84]
jmp 0x140038497
mov ecx, ebp
mov eax, dword [rsi + 0x74]
sub eax, dword [rsi + 0x78]
sub eax, ecx
js 0x14003868b
cdq
idiv dword [rsi + 0x7c]
mov ecx, eax
sub ecx, 1
js 0x14003868b
cmp r9d, 0x21
jne 0x1400384d4
mov eax, dword [rsi + 0x88]
cmp edi, eax
jbe 0x1400384c8
mov edi, eax
jmp 0x1400384fe
cmp edi, ecx
jb case.0x14003842d.36
sub edi, ecx
jmp 0x1400384fe
mov edi, ebp
jmp 0x1400384fe
mov edx, dword [rsi + 0x88]
add edx, ecx
cmp edx, r8d
jb 0x1400384e5
lea edx, [r8 - 1]
cmp edi, edx
jae 0x1400384ed
mov edi, edx
jmp 0x1400384fe
add edi, ecx
cmp edi, r8d
jb 0x1400384fe
lea edi, [r8 - 1]
jmp 0x1400384fe
mov edi, dword [rsp + 0x68]
mov qword [rsp + 0x60], rbx
mov ecx, 0x11
mov qword [rsp + 0x40], r14
call qword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
mov ecx, 0x10
sets r14b
call qword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
mov edx, edi
mov rax, qword [rsi + 0x130]
sets bl
xor r8d, r8d
mov rcx, qword [rax + 8]
mov rdx, qword [rcx + rdx*8]
mov rcx, rsi
mov qword [rsi + 0xa0], rdx
call fcn.140037a70
test bl, bl
mov rbx, qword [rsp + 0x60]
je 0x140038571
mov r8d, dword [rsi + 0xac]
cmp r8d, 0xffffffff
je 0x140038571
cmp edi, r8d
jbe 0x14003858d
mov edx, r8d
mov r8d, edi
jmp 0x14003858f
test r14b, r14b
jne 0x14003864d
mov rax, qword [rsi + 0xa0]
mov r8d, edi
mov ecx, dword [rax + 0x2c]
mov dword [rsi + 0xac], ecx
mov edx, edi
lea rax, [rsp + 0x68]
mov r9d, 4
mov qword [rsp + 0x28], rax
mov rcx, rsi
lea rax, [rsp + 0x70]
mov qword [rsp + 0x20], rax
call fcn.1400378d0
mov rax, qword [rsi + 0x130]
mov edx, dword [rsp + 0x68]
cmp edx, dword [rax]
jae 0x14003864d
mov r8d, dword [rsp + 0x70]
cmp r8d, edx
ja 0x14003864d
mov eax, dword [rsi + 0x88]
sub edx, eax
mov r10d, dword [rsi + 0x78]
inc edx
imul edx, dword [rsi + 0x7c]
sub r8d, eax
imul r8d, dword [rsi + 0x7c]
mov r9d, dword [rsi + 0xf8]
sub r9d, dword [rsi + 0x8c]
add r9d, dword [rsi + 0x98]
add edx, r10d
mov dword [rsp + 0x30], ebp
add r8d, r10d
test byte [rsi + 0x40], 4
je 0x140038613
mov ebp, dword [rsi + 0x80]
mov eax, dword [rsi + 0x70]
mov rcx, qword [rsi]
sub eax, ebp
cmp r9d, eax
cmovg r9d, eax
mov eax, dword [rsi + 0x74]
cmp r8d, r10d
mov dword [rsp + 0x38], r9d
cmovl r8d, r10d
cmp edx, eax
mov dword [rsp + 0x34], r8d
cmovg edx, eax
xor r8d, r8d
mov dword [rsp + 0x3c], edx
lea rdx, [rsp + 0x30]
call qword [sym.imp.USER32.dll_InvalidateRect]
mov edx, edi
mov rcx, rsi
call fcn.140037e60
mov rcx, qword [rsi + 0x38]
mov r14, qword [rsp + 0x40]
test rcx, rcx
je 0x14003868b
xor r9d, r9d
xor r8d, r8d
mov edx, 0x41c
call qword [sym.imp.USER32.dll_SendMessageW]
mov qword [rsi + 0x160], 0xffffffffffffffff
mov dword [rsi + 0x190], 0xffffffff
mov rbp, qword [rsp + 0x78]
mov al, 1
mov rdi, qword [rsp + 0x48]
add rsp, 0x50
pop rsi
ret
xor al, al
add rsp, 0x50
pop rsi
ret