Function at 0x40c760
Capabilities:
Get keyboard layout

Disassembly:
sub esp, 0x410
push ebx
push ebp
mov ebp, dword [esp + 0x424]
push esi
push edi
xor edi, edi
mov esi, ecx
mov byte [esp + 0x13], 0
test ebp, ebp
je 0x40c787
lea eax, [ebp + 0x12]
mov dword [esp + 0x14], eax
jmp 0x40c78f
lea ecx, [esp + 0x1b]
mov dword [esp + 0x14], ecx
cmp byte [esp + 0x428], 0
jne 0x40c7e1
mov ebx, 0x4e6dc4
mov eax, esi
call fcn.00409df0
mov ebx, eax
test ebx, ebx
je 0x40c7e1
mov ecx, ebx
lea ecx, [ecx]
movzx eax, word [ecx]
cmp eax, 0x20
je 0x40c7bd
cmp eax, 9
jne 0x40c7c2
add ecx, 2
jmp 0x40c7b0
push 0x4e6dcc
push ecx
call fcn.004c4e9d
add esp, 8
test eax, eax
jne 0x40c7e1
test ebp, ebp
je 0x40c7dc
mov byte [ebp + 0x16], 1
xor edx, edx
mov word [ebx], dx
push 0
call dword [sym.imp.USER32.dll_GetKeyboardLayout]
push eax
lea eax, [esp + 0x17]
push 1
push eax
mov eax, esi
call fcn.00414250
mov bl, al
add esp, 0xc
test bl, bl
je 0x40c8f6
cmp byte [esp + 0x428], 0
je 0x40c898
lea ecx, [ebx + 0x64]
cmp cl, 3
ja 0x40c8b4
cmp byte [esp + 0x430], 0
je 0x40c84d
mov edx, dword [0x5166e0]
push 1
push 0
push 0xffffffffffffffff
push 0x4e6dd4
push edx
call fcn.004aa2a0
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x410
ret
push esi
push 0x4e6dd8
call fcn.0049fc00
add esp, 4
push eax
mov esi, 0x200
lea edi, [esp + 0x28]
call fcn.004a71f0
mov eax, dword [esp + 0x42c]
add esp, 8
push eax
mov ecx, edi
push ecx
mov ecx, 0x516ea8
call fcn.004768b0
test ebp, ebp
jne 0x40c946
pop edi
pop esi
lea eax, [ebp + 4]
pop ebp
pop ebx
add esp, 0x410
ret
test ebp, ebp
je 0x40c8b4
push 2
push 0x4e6e34
push esi
call fcn.004c56eb
add esp, 0xc
test eax, eax
sete dl
mov byte [ebp + 0x17], dl
lea eax, [ebx - 1]
cmp al, 5
ja 0x40c8c0
cmp bl, 3
jne 0x40c8c8
lea ecx, [ebx + 0x66]
cmp cl, 5
ja 0x40c8cc
mov al, 1
jmp 0x40c8ce
xor al, al
mov dl, byte [esp + 0x13]
test dl, 0x30
je 0x40c8e2
lea ecx, [ebx - 0x41]
cmp cl, 0x19
ja 0x40c8e2
and dl, 0xcf
test al, al
je 0x40c9dd
mov eax, dword [esp + 0x14]
mov byte [eax], 2
jmp 0x40c9dd
mov eax, esi
call fcn.004141a0
movzx edi, ax
test di, di
jne 0x40c9d9
push 1
lea ebx, [esp + 0x20]
mov eax, esi
call fcn.00450590
movzx edi, ax
add esp, 4
test di, di
jne 0x40c9bd
cmp byte [esp + 0x430], 0
je 0x40c953
mov edx, dword [0x5166e0]
push 1
push 0
push 0xffffffffffffffff
push 0x4e6e3c
push edx
call fcn.004aa2a0
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x410
ret
cmp word [esi + 2], 0
jne 0x40c97a
cmp byte [0x517988], 0
jne 0x40c97a
mov eax, ebp
neg eax
pop edi
sbb eax, eax
pop esi
and eax, 0xfffffffd
pop ebp
add eax, 3
pop ebx
add esp, 0x410
ret
test ebp, ebp
je 0x40c9b0
push esi
push 0x4e6e40
call fcn.0049fc00
add esp, 4
push eax
mov esi, 0x200
lea edi, [esp + 0x28]
call fcn.004a71f0
add esp, 8
push 0x4e1a4c
mov eax, edi
push eax
mov ecx, 0x516ea8
call fcn.004768b0
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x410
ret
mov ecx, dword [esp + 0x14]
mov ebx, dword [esp + 0x1c]
mov eax, 1
add dword [0x516748], eax
mov byte [ecx], 4
mov byte [ebx + 0x516738], al
mov dl, byte [esp + 0x13]
cmp byte [esp + 0x428], 0
je 0x40ca02
test ebp, ebp
je 0x40ca3a
mov word [ebp + 0xa], di
pop edi
pop esi
mov byte [ebp + 0x11], bl
pop ebp
mov eax, 1
pop ebx
add esp, 0x410
ret
test ebp, ebp
je 0x40ca3a
mov al, dl
and al, 0xd5
xor ecx, ecx
mov byte [ebp + 0x10], bl
mov word [ebp + 8], di
test al, 0xc0
je 0x40ca1c
mov ecx, 8
test al, 0xc
je 0x40ca23
or ecx, 1
test al, 0x30
je 0x40ca2a
or ecx, 4
test al, 3
je 0x40ca31
or ecx, 2
or dword [ebp], ecx
and dl, 0x2a
or byte [ebp + 0xe], dl
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0x410
ret