Function at 0x14003bdf0
Capabilities:
Get keyboard layout

Disassembly:
mov qword [rsp + 8], rcx
push rbp
push rbx
push rsi
push rdi
push r12
push r13
push r14
push r15
mov eax, 0x8568
call fcn.1400bc7b0
sub rsp, rax
lea rbp, [rsp + 0x40]
mov rax, rcx
mov rcx, qword [0x1401050d0]
mov qword [rbp + 0x18], rcx
test rcx, rcx
jne 0x14003be4a
cmp dword [0x1401052e0], 1
mov rcx, rax
sete dl
xor r12d, r12d
xor dl, 1
mov dword [0x1401052e0], r12d
call fcn.140035590
jmp 0x14003c960
mov rdi, qword [0x140105188]
lea r15, [0x140000000]
mov r13, qword [0x140105190]
xor r12d, r12d
mov r14, qword [0x140105198]
mov eax, r12d
mov dword [rbp + 0x8588], eax
mov byte [rbp + 0x8578], al
mov dword [0x1401052e0], r12d
mov dword [0x140105324], 1
mov word [0x140105328], r12w
mov dword [0x14010533c], 0x3fff
movzx eax, word [rdi]
mov qword [rbp + 8], r13
mov qword [rbp + 0x10], r14
test ax, ax
je 0x14003bf88
lea rsi, [rdi + 2]
movzx ebx, ax
test ebx, 0xffffff80
jne 0x14003bed1
mov edx, 2
mov ecx, ebx
call fcn.1400aa0c4
test eax, eax
je 0x14003bed1
and ebx, 0xffffffdf
movzx eax, bx
add eax, 0xffffffd6
cmp eax, 0x2c
ja case.0x14003bef6.51
cdqe
movzx eax, byte [r15 + rax + 0x3c99c]
mov ecx, dword [r15 + rax*4 + 0x3c974]
add rcx, r15
jmp rcx
mov byte [0x140105324], r12b
jmp case.0x14003bef6.51
mov byte [0x140105325], 1
jmp case.0x14003bef6.51
mov byte [0x140105326], 1
jmp case.0x14003bef6.51
mov byte [0x140105327], 1
jmp case.0x14003bef6.51
mov rcx, rsi
call fcn.1400ab0fc
mov dword [0x14010533c], eax
cmp eax, 0x3fff
jle case.0x14003bef6.51
mov dword [0x14010533c], 0x3fff
jmp case.0x14003bef6.51
mov rcx, rsi
call fcn.140015620
mulsd xmm0, qword [0x1400ea458]
cvttsd2si eax, xmm0
mov dword [rbp + 0x8588], eax
jmp case.0x14003bef6.51
mov byte [0x140105328], 1
jmp case.0x14003bef6.51
mov byte [0x140105329], 1
jmp case.0x14003bef6.51
mov al, 1
mov byte [rbp + 0x8578], al
movzx eax, word [rdi + 2]
add rdi, 2
add rsi, 2
test ax, ax
jne 0x14003beb3
xor edx, edx
lea rcx, [rbp + 0x120]
mov r8d, 0x100
call fcn.1400a64b0
xor edx, edx
lea rcx, [rbp + 0x320]
mov r8d, 0x200
call fcn.1400a64b0
mov rbx, r12
mov word [rbp + 0x8582], r12w
mov r15, r13
mov qword [rbp], rbx
mov edx, 0x7d
cmp word [r13], r12w
je 0x14003c109
movzx r13d, byte [rbp + 0x8578]
lea rsi, [0x1400fd210]
mov word [rbp + 0x8580], r12w
movzx eax, word [r15]
cmp eax, 0x7b
je 0x14003c197
cmp eax, 0x7d
je 0x14003c0ec
test r13b, r13b
je 0x14003c010
inc rbx
mov qword [rbp], rbx
jmp 0x14003c0ec
xor ecx, ecx
mov word [rbp + 0x8580], ax
mov byte [rbp + 0x8578], r12b
call qword [sym.imp.USER32.dll_GetKeyboardLayout]
movzx ecx, word [rbp + 0x8580]
test cx, cx
je 0x14003c0e7
cmp word [rbp + 0x8582], r12w
jne 0x14003c05c
mov r8, rax
lea rdx, [rbp + 0x8578]
call fcn.1400146f0
movzx ebx, al
mov edx, 0x7d
jmp 0x14003c2e6
movzx ebx, cx
test ebx, 0xffffff80
jne 0x14003c07a
mov edx, 2
mov ecx, ebx
call fcn.1400aa0c4
test eax, eax
je 0x14003c07a
and ebx, 0xffffffdf
cmp bx, 0x56
jne 0x14003c0b0
movzx ecx, word [rbp + 0x8582]
call fcn.14000ad60
cmp ax, 0x4b
jne 0x14003c0b0
xor edx, edx
lea rcx, [rbp + 0x8584]
lea r8d, [rdx + 0x10]
call fcn.1400ab560
mov ebx, eax
mov edx, 0x7d
jmp 0x14003c2e6
lea r14, str.Numpad0
mov rdi, r12
mov rbx, r14
nop dword [rax]
mov rcx, qword [rbx]
lea rdx, [rbp + 0x8580]
call fcn.1400a7520
test eax, eax
je 0x14003c184
inc rdi
add rbx, 0x10
cmp rbx, rsi
jl 0x14003c0c0
mov rbx, qword [rbp]
mov edx, 0x7d
add r15, 2
lea rsi, [0x1400fd210]
cmp word [r15], r12w
jne 0x14003bfe1
mov r13, qword [rbp + 8]
mov r14, qword [rbp + 0x10]
lea r15, [0x1400cbf2c]
mov qword [0x1401052f8], r15
test rbx, rbx
je 0x14003c391
lea rax, [rbx*2 + 2]
lea rcx, [rax + 0xf]
cmp rcx, rax
ja 0x14003c13b
movabs rcx, 0xffffffffffffff0
and rcx, 0xfffffffffffffff0
mov rax, rcx
call fcn.1400bc7b0
sub rsp, rcx
lea rbx, [rsp + 0x40]
mov qword [0x1401052f8], rbx
cmp word [r13], r12w
je 0x14003c38d
movzx eax, word [r13]
cmp eax, 0x7b
je 0x14003c33d
cmp eax, 0x7d
je 0x14003c379
mov word [rbx], ax
add rbx, 2
jmp 0x14003c379
add rdi, rdi
mov edx, 0x7d
movzx ebx, byte [r14 + rdi*8 + 8]
jmp 0x14003c2e6
lea rsi, [r15 + 2]
mov rcx, rsi
call fcn.1400a5a98
mov r14, rax
test rax, rax
je 0x14003c0e7
mov rcx, rax
sub rcx, r15
sar rcx, 1
sub rcx, 1
jne 0x14003c1cf
add r14, 2
cmp word [r14], 0x7d
jne 0x14003c0e7
jmp 0x14003c1d5
cmp rcx, 1
jne 0x14003c1f0
test r13b, r13b
je 0x14003c1e6
inc rbx
mov qword [rbp], rbx
jmp 0x14003c0e7
movzx eax, word [rsi]
mov word [rbp + 0x8580], ax
xor ecx, ecx
mov word [r14], r12w
mov byte [rbp + 0x8578], r12b
call qword [sym.imp.USER32.dll_GetKeyboardLayout]
movzx ecx, word [rsi]
test cx, cx
jne 0x14003c212
xor bl, bl
jmp 0x14003c2c2
cmp word [rsi + 2], r12w
jne 0x14003c230
mov r8, rax
lea rdx, [rbp + 0x8578]
call fcn.1400146f0
movzx ebx, al
jmp 0x14003c2be
movzx ebx, cx
test ebx, 0xffffff80
jne 0x14003c24e
mov edx, 2
mov ecx, ebx
call fcn.1400aa0c4
test eax, eax
je 0x14003c24e
and ebx, 0xffffffdf
cmp bx, 0x56
jne 0x14003c277
movzx ecx, word [rsi + 2]
call fcn.14000ad60
cmp ax, 0x4b
jne 0x14003c277
xor edx, edx
lea rcx, [rsi + 4]
lea r8d, [rdx + 0x10]
call fcn.1400ab560
movzx ebx, al
jmp 0x14003c2be
mov rdi, r12
lea rbx, str.Numpad0
lea r15, [0x1400fd210]
nop dword [rax + rax]
mov rcx, qword [rbx]
mov rdx, rsi
call fcn.1400a7520
test eax, eax
je 0x14003c2af
inc rdi
add rbx, 0x10
cmp rbx, r15
jl 0x14003c290
xor bl, bl
jmp 0x14003c2c2
add rdi, rdi
lea rax, str.Numpad0
movzx ebx, byte [rax + rdi*8 + 8]
test bl, bl
jne 0x14003c2da
mov rcx, rsi
call fcn.1400144d0
test ax, ax
je 0x14003c2da
movzx eax, ax
mov byte [rbp + rax + 0x320], 1
mov edx, 0x7d
mov r15, r14
mov word [r14], dx
test bl, bl
je 0x14003c323
movzx ecx, word [rbp + 0x8580]
movzx ebx, bl
or byte [rbp + rbx + 0x120], 1
test cx, cx
je 0x14003c323
call qword [sym.imp.USER32.dll_IsCharAlphaW]
test eax, eax
jne 0x14003c0e3
test byte [rbp + 0x8578], 0x30
lea edx, [rax + 0x7d]
je 0x14003c32c
or byte [rbp + rbx + 0x120], 2
mov rbx, qword [rbp]
jmp 0x14003c0ec
or byte [rbp + rbx + 0x120], 4
mov rbx, qword [rbp]
jmp 0x14003c0ec
lea rdi, [r13 + 2]
mov rcx, rdi
call fcn.1400a5a98
mov rdx, rax
test rax, rax
je 0x14003c379
cmp rax, rdi
jne 0x14003c363
cmp word [rax + 2], 0x7d
lea rcx, [rax + 2]
cmove rdx, rcx
lea rax, [r13 + 4]
cmp rdx, rax
jne 0x14003c376
movzx eax, word [rdi]
mov word [rbx], ax
add rbx, 2
mov r13, rdx
add r13, 2
mov edx, 0x7d
cmp word [r13], r12w
jne 0x14003c161
mov word [rbx], r12w
mov dword [0x140105310], r12d
cmp word [r14], r12w
je 0x14003c575
cmp qword [0x140105308], r12
jne 0x14003c3e9
mov ecx, 0x2000
call fcn.1400a7698
mov qword [0x140105308], rax
test rax, rax
jne 0x14003c3df
mov rcx, qword [rbp + 0x8570]
lea rdx, str.Out_of_memory.
mov r9, r15
xor r8d, r8d
call fcn.140035750
jmp 0x14003c960
mov dword [0x140105314], 0x400
mov rdi, qword [rbp + 0x8570]
mov edx, 3
mov rcx, rdi
call fcn.1400253c0
mov ecx, dword [0x140105320]
inc rax
cmp rax, rcx
jbe 0x14003c46b
mov rcx, qword [0x140105318]
mov edx, 0x1000
cmp rax, rdx
cmova edx, eax
mov dword [0x140105320], edx
test rcx, rcx
je 0x14003c433
call fcn.1400ab5c0
mov edx, dword [0x140105320]
lea ecx, [rdx + rdx]
call fcn.1400a7698
mov qword [0x140105318], rax
mov rdx, rax
test rax, rax
jne 0x14003c472
mov dword [0x140105320], r12d
mov r9, r15
lea rdx, str.Out_of_memory.
xor r8d, r8d
mov rcx, rdi
call fcn.140035750
jmp 0x14003c960
mov rdx, qword [0x140105318]
mov ecx, dword [0x140105310]
mov rax, qword [0x140105308]
mov qword [rax + rcx*8], rdx
mov rbx, qword [0x140105318]
cmp word [r14], r12w
je 0x14003c552
mov esi, 0x2c
nop dword [rax]
movzx eax, word [r14]
cmp ax, si
je 0x14003c4b5
mov word [rbx], ax
add rbx, 2
jmp 0x14003c544
cmp word [r14 + 2], si
jne 0x14003c4c9
mov word [rbx], si
add rbx, 2
add r14, 2
jmp 0x14003c544
mov word [rbx], r12w
mov ecx, dword [0x140105310]
mov r8, qword [0x140105308]
mov rax, qword [r8 + rcx*8]
cmp word [rax], r12w
je 0x14003c507
inc ecx
mov dword [0x140105310], ecx
add rbx, 2
mov eax, ecx
mov qword [r8 + rcx*8], rbx
mov word [rbx], r12w
mov ecx, dword [0x140105310]
mov r8, qword [0x140105308]
cmp word [r14 + 2], r12w
je 0x14003c544
mov eax, dword [0x140105314]
cmp ecx, eax
jb 0x14003c544
lea edx, [rax + 0x400]
mov rcx, r8
shl rdx, 3
call fcn.1400ab408
test rax, rax
je 0x14003c451
add dword [0x140105314], 0x400
mov qword [0x140105308], rax
add r14, 2
cmp word [r14], r12w
jne 0x14003c4a0
mov word [rbx], r12w
mov edx, dword [0x140105310]
mov rax, qword [0x140105308]
mov rcx, qword [rax + rdx*8]
cmp word [rcx], r12w
je 0x14003c575
inc edx
mov dword [0x140105310], edx
cmp byte [0x140100af0], r12b
je 0x14003c5c2
mov rcx, qword [0x140100ea0]
mov edx, reloc.OLEAUT32.dll_VariantTimeToDosDateTime
call qword [sym.imp.USER32.dll_KillTimer]
movzx ecx, byte [0x140100af0]
test eax, eax
cmovne ecx, r12d
mov byte [0x140100af0], cl
mov ecx, reloc.OLEAUT32.dll_SafeArrayGetDim
call qword [sym.imp.USER32.dll_GetQueueStatus]
shr eax, 0x10
test al, 0x10
je 0x14003c5c2
mov edx, 1
or ecx, 0xffffffff
call fcn.1400016e0
or byte [0x140103d31], 1
lea rax, [rbp + 0x520]
cmp qword [0x140100ec8], r12
mov qword [0x140105330], rax
lea rax, [rbp + 0x120]
mov qword [0x1401052e8], rax
lea rax, [rbp + 0x320]
mov qword [0x1401052f0], rax
mov word [rbp + 0x520], r12w
mov dword [0x140105338], r12d
mov dword [0x1401052e0], 1
mov byte [0x140100eb4], 1
jne 0x14003c628
movzx edx, word [0x140103d38]
call fcn.140009630
mov eax, dword [rbp + 0x8588]
test eax, eax
jle 0x14003c670
cmp byte [0x140100af0], r12b
jne 0x14003c670
mov ecx, 0xa
lea r9, [0x140004250]
cmp eax, ecx
cmovl eax, ecx
lea edx, [rcx + 2]
mov r8d, eax
mov rcx, qword [0x140100ea0]
call qword [sym.imp.USER32.dll_SetTimer]
test rax, rax
setne byte [0x140100af0]
nop dword [rax]
mov edx, 1
mov ecx, 0x8000012f
call fcn.1400016e0
mov ecx, dword [0x1401052e0]
cmp ecx, 1
je 0x14003c670
sub ecx, 2
je 0x14003c8cf
sub ecx, 1
je 0x14003c8c6
sub ecx, 1
je 0x14003c6d1
xor r9d, r9d
mov byte [rsp + 0x20], 1
or r8, 0xffffffffffffffff
cmp ecx, 1
mov rcx, qword [0x140100e80]
je 0x14003c6c5
lea rdx, str.NewInput
jmp 0x14003c8e9
lea rdx, [0x1400e5968]
jmp 0x14003c8e9
movups xmm0, xmmword [str.EndKey:]
xor edx, edx
lea rcx, [rbp + 0x30]
mov r8d, 0xf0
movaps xmmword [rbp + 0x20], xmm0
call fcn.1400a64b0
movzx eax, word [0x140105304]
test ax, ax
je 0x14003c70b
mov word [rbp + 0x2e], ax
lea rdx, [rbp + 0x20]
mov word [rbp + 0x30], r12w
jmp 0x14003c8d6
cmp byte [0x140105307], r12b
je 0x14003c7b3
xor edx, edx
lea rcx, [rbp + 0x220]
mov r8d, 0x100
call fcn.1400a64b0
or byte [rbp + 0x230], 0x80
call qword [sym.imp.USER32.dll_GetForegroundWindow]
test rax, rax
je 0x14003c74b
xor edx, edx
mov rcx, rax
call qword [sym.imp.USER32.dll_GetWindowThreadProcessId]
jmp 0x14003c74e
mov eax, r12d
mov ecx, eax
call qword [sym.imp.USER32.dll_GetKeyboardLayout]
cmp dword [0x140100af4], r12d
mov edi, r12d
movzx ecx, byte [0x140105300]
mov rbx, rax
setne dil
xor edx, edx
call fcn.140014ad0
movzx ecx, byte [0x140105300]
lea r9, [rbp + 0x2e]
mov qword [rsp + 0x30], rbx
lea r8, [rbp + 0x220]
movzx edx, ax
mov dword [rsp + 0x28], edi
mov dword [rsp + 0x20], 2
call qword [sym.imp.USER32.dll_ToUnicodeEx]
movsxd rcx, eax
lea rdx, [rbp + 0x20]
mov word [rbp + rcx*2 + 0x2e], r12w
jmp 0x14003c8d6
cmp byte [0x140105306], r12b
mov ecx, r12d
je 0x14003c819
movzx edx, word [0x140105302]
lea rax, [0x1400fca78]
lea r8, [0x1400fcb48]
cmp word [rax], dx
je 0x14003c802
inc ecx
add rax, 0x10
cmp rax, r8
jl 0x14003c7d4
movzx r9d, dx
lea r8, str.sc_03X
mov edx, 0x79
lea rcx, [rbp + 0x2e]
call fcn.140087630
jmp 0x14003c8a9
movsxd rdx, ecx
lea rax, [0x140000000]
add rdx, rdx
mov rdx, qword [rax + rdx*8 + 0xfca70]
jmp 0x14003c892
movzx ebx, byte [0x140105300]
lea rax, [0x1400fcb48]
lea rdx, [0x1400fd218]
nop
cmp byte [rax], bl
je 0x14003c881
inc ecx
add rax, 0x10
cmp rax, rdx
jl 0x14003c830
movzx ecx, bl
call fcn.140014340
mov word [rbp + 0x2e], ax
test ax, ax
je 0x14003c857
mov word [rbp + 0x30], r12w
jmp 0x14003c8a9
test bl, bl
je 0x14003c876
movzx r9d, bl
lea r8, str.vk_02X
mov edx, 0x79
lea rcx, [rbp + 0x2e]
call fcn.140087630
jmp 0x14003c8a9
mov word [rbp + 0x2e], r12w
lea rdx, [rbp + 0x20]
jmp 0x14003c8d6
movsxd rdx, ecx
lea rax, str.Numpad0
add rdx, rdx
mov rdx, qword [rax + rdx*8]
mov r8d, 0x78
lea rcx, [rbp + 0x2e]
call fcn.1400b0554
mov word [rbp + 0x11e], r12w
movzx eax, word [rbp + 0x2e]
sub ax, 0x61
cmp ax, 0x19
ja 0x14003c8c0
mov eax, 0xffe0
add word [rbp + 0x2e], ax
lea rdx, [rbp + 0x20]
jmp 0x14003c8d6
lea rdx, str.Match
jmp 0x14003c8d6
lea rdx, str.Timeout
mov rcx, qword [0x140100e80]
xor r9d, r9d
or r8, 0xffffffffffffffff
mov byte [rsp + 0x20], 1
call fcn.14008ab40
cmp byte [0x140100af0], r12b
mov dword [0x1401052e0], r12d
je 0x14003c944
mov rcx, qword [0x140100ea0]
mov edx, reloc.OLEAUT32.dll_VariantTimeToDosDateTime
call qword [sym.imp.USER32.dll_KillTimer]
movzx r8d, byte [0x140100af0]
mov ecx, reloc.OLEAUT32.dll_SafeArrayGetDim
test eax, eax
cmovne r8d, r12d
mov byte [0x140100af0], r8b
call qword [sym.imp.USER32.dll_GetQueueStatus]
shr eax, 0x10
test al, 0x10
je 0x14003c944
mov edx, 1
or ecx, 0xffffffff
call fcn.1400016e0
mov rcx, qword [rbp + 0x18]
lea rdx, [rbp + 0x520]
xor r9d, r9d
mov byte [rsp + 0x20], 1
or r8, 0xffffffffffffffff
call fcn.14008ab40
lea rsp, [rbp + 0x8528]
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbx
pop rbp
ret