Function at 0x10046a80
Capabilities:
Check for time delay via gettickcount
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x84
mov eax, dword [0x10184080]
xor eax, ebp
mov dword [ebp - 4], eax
mov eax, dword [0x10188238]
push ebx
push esi
push edi
cmp eax, 3
je 0x100470ae
cmp eax, 2
je 0x100470ae
cmp eax, 4
je 0x100470ae
cmp eax, 5
je 0x100470ae
lea ecx, [ebp - 0x7c]
mov dword [ebp - 0x78], 0
mov dword [ebp - 0x7c], 0
call fcn.10029e60
push dword [ebp - 0x7c]
xor cl, cl
call fcn.10029db0
add esp, 4
call fcn.100261e0
xor dl, dl
mov ecx, eax
call fcn.100263b0
mov esi, 0x10185f00
mov eax, dword [0x10186a08]
cmp eax, dword [esi]
jne 0x10046b6b
mov eax, dword [esi + 0xc]
test eax, eax
je 0x10046b6b
cmp dword [0x10188240], eax
jne 0x10046b6b
push dword [esi - 4]
lea eax, [ebp - 0x68]
push str.Found_hotkey___s_._What_do
push 0x5a
push eax
call fcn.10001290
push str.Delete
push str.Change
mov edx, str.you_want_to_do_
lea ecx, [ebp - 0x68]
call fcn.10031810
mov dword [esi], 0
add esp, 0x18
mov dword [esi + 4], 0
mov dword [esi + 8], 0
mov dword [esi + 0x10], 0
mov dword [esi + 0x14], str.Invalid
mov dword [esi + 0xc], 0
test al, al
je 0x10046d56
add esi, 0x20
cmp esi, 0x10186500
jl 0x10046af5
xor al, al
mov byte [ebp - 0x69], al
mov ebx, dword [sym.imp.USER32.dll_GetKeyState]
push 0x1b
call ebx
test ax, ax
mov al, byte [0x10187ebe]
jns 0x10046b9b
test al, al
je 0x10047079
cmp al, 1
jne 0x10046bb1
push 0x1b
call ebx
test ax, ax
js 0x10046bb1
mov word [0x10187ebe], 0x100
mov al, byte [0x1018823e]
test al, al
je 0x10046bc4
mov bl, byte [0x1018822f]
test bl, bl
je 0x10046c0e
mov dl, byte [0x101881b0]
mov cl, byte [0x101881ac]
movss xmm3, dword [0x1017c074]
movss xmm2, dword [0x1017c070]
movss xmm1, dword [0x1017c0ec]
movss xmm0, dword [0x1017c108]
push 0xff
push dword [0x101881b4]
call fcn.10033490
mov al, byte [0x1018823e]
add esp, 8
mov bl, byte [0x1018822f]
test al, al
je 0x10046c16
test bl, bl
je 0x10046c54
movss xmm3, dword [0x1017c064]
xor dl, dl
movss xmm2, dword [0x1017c068]
xor cl, cl
movss xmm1, dword [0x1017c0e8]
movss xmm0, dword [0x1017c108]
push 0xff
push 0
call fcn.10033490
mov al, byte [0x1018823e]
add esp, 8
mov bl, byte [0x1018822f]
mov ecx, dword [0x101881f0]
mov esi, dword [0x101881f8]
mov edi, dword [0x101881fc]
mov dword [ebp - 0x80], ecx
mov ecx, dword [0x101881f4]
mov dword [ebp - 0x74], ecx
test al, al
je 0x10046c7a
test bl, bl
je 0x10046ce5
xor ecx, ecx
call fcn.10033150
sub esp, 0xc
call fcn.10032fd0
call fcn.10033090
mov dl, byte [ebp - 0x74]
add esp, 0xc
mov cl, byte [ebp - 0x80]
push edi
push esi
call fcn.10032f00
movss xmm1, dword [0x1017c184]
add esp, 8
movss xmm0, dword [0x1017c0e0]
call fcn.10032dc0
xor cl, cl
call fcn.10032e60
mov cl, 1
call fcn.100331f0
movss xmm1, dword [0x1017c0b8]
mov edx, str.Set_hotkey
movss xmm0, dword [0x1017c0d4]
call fcn.10032d10
xor cl, cl
call fcn.100331f0
xor eax, eax
mov dword [ebp - 0x70], eax
nop word [eax + eax]
mov edi, eax
shl edi, 5
mov ebx, dword [edi + 0x10185ef8]
push ebx
lea esi, [ebx + ebx]
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
jns 0x10046d13
cmp byte [esi + 0x10187e88], 0
je 0x10046d92
cmp byte [esi + 0x10187e88], 1
jne 0x10046d31
push ebx
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
js 0x10046d31
mov word [esi + 0x10187e88], 0x100
mov cl, byte [ebp - 0x69]
mov ebx, dword [ebp - 0x78]
test cl, cl
jne 0x10046e3c
mov eax, dword [ebp - 0x70]
inc eax
mov dword [ebp - 0x78], ebx
mov dword [ebp - 0x70], eax
mov byte [ebp - 0x69], cl
cmp eax, 0x30
jl 0x10046cf0
jmp 0x10047060
push ecx
push 0x1b58
mov edx, str.Hotkey_deleted
call fcn.1002a300
push dword [ebp - 0x7c]
mov cl, 1
call fcn.10029db0
add esp, 0xc
call fcn.100261e0
mov dl, 1
mov ecx, eax
call fcn.100263b0
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.1004ca58
mov esp, ebp
pop ebp
ret
mov ecx, dword [0x10188198]
mov word [esi + 0x10187e88], 1
call fcn.1002a710
cmp dword [edi + 0x10185f00], 0
je 0x10046de7
push dword [edi + 0x10185efc]
lea eax, [ebp - 0x68]
push str.Hotkey___s__is_already_in_use.
push 0x5a
push eax
call fcn.10001290
push 0x1007b0c4
push 0x1007b0c8
mov edx, str.Overwrite_this_hotkey_
lea ecx, [ebp - 0x68]
call fcn.10031810
add esp, 0x18
test al, al
je 0x10047082
mov eax, dword [0x10186a08]
mov dword [edi + 0x10185f00], eax
mov eax, dword [0x10186a04]
mov dword [edi + 0x10185f04], eax
mov eax, dword [0x10186a14]
mov dword [edi + 0x10185f08], eax
mov eax, dword [0x10188240]
mov dword [edi + 0x10185f0c], eax
mov eax, dword [0x10188250]
mov dword [edi + 0x10185f10], eax
mov eax, dword [0x10188230]
mov dword [edi + 0x10185f14], eax
mov byte [ebp - 0x69], 1
call dword [sym.imp.KERNEL32.dll_GetTickCount]
lea ebx, [eax + 0xbb8]
mov dword [ebp - 0x78], ebx
call dword [sym.imp.KERNEL32.dll_GetTickCount]
cmp eax, ebx
ja 0x10047060
mov esi, dword [ebp - 0x70]
shl esi, 5
mov bl, byte [0x1018823e]
test bl, bl
je 0x10046e63
mov al, byte [0x1018822f]
test al, al
je 0x10046ead
mov dl, byte [0x101881b0]
mov cl, byte [0x101881ac]
movss xmm3, dword [0x1017c074]
movss xmm2, dword [0x1017c070]
movss xmm1, dword [0x1017c0ec]
movss xmm0, dword [0x1017c108]
push 0xff
push dword [0x101881b4]
call fcn.10033490
mov bl, byte [0x1018823e]
add esp, 8
mov al, byte [0x1018822f]
test bl, bl
je 0x10046eb5
test al, al
je 0x10046ef3
movss xmm3, dword [0x1017c064]
xor dl, dl
movss xmm2, dword [0x1017c068]
xor cl, cl
movss xmm1, dword [0x1017c0e8]
movss xmm0, dword [0x1017c108]
push 0xff
push 0
call fcn.10033490
mov bl, byte [0x1018823e]
add esp, 8
mov al, byte [0x1018822f]
mov ecx, dword [0x101881f0]
mov dword [ebp - 0x74], ecx
mov ecx, dword [0x101881f4]
mov dword [ebp - 0x80], ecx
mov ecx, dword [0x101881f8]
mov dword [ebp - 0x84], ecx
mov ecx, dword [0x101881fc]
mov dword [ebp - 0x70], ecx
test bl, bl
je 0x10046f26
test al, al
je 0x10046fc6
xor ecx, ecx
call fcn.10033150
sub esp, 0xc
call fcn.10032fd0
call fcn.10033090
mov dl, byte [ebp - 0x80]
add esp, 0xc
mov cl, byte [ebp - 0x74]
push dword [ebp - 0x70]
push dword [ebp - 0x84]
call fcn.10032f00
movss xmm1, dword [0x1017c184]
add esp, 8
movss xmm0, dword [0x1017c0e0]
call fcn.10032dc0
xor cl, cl
call fcn.10032e60
mov cl, 1
call fcn.100331f0
movss xmm1, dword [0x1017c0b8]
mov edx, str.Hotkey_set
movss xmm0, dword [0x1017c0d4]
call fcn.10032d10
xor cl, cl
call fcn.100331f0
mov eax, dword [0x101881fc]
mov bl, byte [0x1018823e]
mov dword [ebp - 0x70], eax
mov eax, dword [0x101881f8]
mov dword [ebp - 0x84], eax
mov eax, dword [0x101881f4]
mov dword [ebp - 0x80], eax
mov eax, dword [0x101881f0]
mov dword [ebp - 0x74], eax
mov al, byte [0x1018822f]
mov edi, dword [esi + 0x10185efc]
test bl, bl
je 0x10046fd4
test al, al
je 0x10047043
xor ecx, ecx
call fcn.10033150
sub esp, 0xc
call fcn.10032fd0
call fcn.10033090
mov dl, byte [ebp - 0x80]
add esp, 0xc
mov cl, byte [ebp - 0x74]
push dword [ebp - 0x70]
push dword [ebp - 0x84]
call fcn.10032f00
movss xmm1, dword [0x1017c184]
add esp, 8
movss xmm0, dword [0x1017c0e0]
call fcn.10032dc0
xor cl, cl
call fcn.10032e60
mov cl, 1
call fcn.100331f0
movss xmm1, dword [0x1017c0f0]
mov edx, edi
movss xmm0, dword [0x1017c0fc]
call fcn.10032d10
xor cl, cl
call fcn.100331f0
mov ecx, dword [0x10188228]
push 0
call dword [sym.imp.ScriptHook.dll_protected:_void___thiscall_ScriptThread::Wait_unsigned_int_]
call dword [sym.imp.KERNEL32.dll_GetTickCount]
cmp eax, dword [ebp - 0x78]
jbe 0x10046e50
mov ecx, dword [0x10188228]
push 0
call dword [sym.imp.ScriptHook.dll_protected:_void___thiscall_ScriptThread::Wait_unsigned_int_]
cmp byte [ebp - 0x69], 0
jne 0x10047082
jmp 0x10046b7f
mov word [0x10187ebe], 1
push dword [ebp - 0x7c]
mov cl, 1
call fcn.10029db0
add esp, 4
call fcn.100261e0
mov dl, 1
mov ecx, eax
call fcn.100263b0
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.1004ca58
mov esp, ebp
pop ebp
ret
push ecx
push 0x1b58
mov edx, str.Cant_set_a_hotkey_for_this_option_type
call fcn.1002a300
mov ecx, dword [ebp - 4]
add esp, 8
xor ecx, ebp
pop edi
pop esi
pop ebx
call fcn.1004ca58
mov esp, ebp
pop ebp
ret