Function at 0x4fa4a9
Capabilities:
Identify system language via api

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x58
mov eax, dword [0x58f860]
xor eax, ebp
mov dword [ebp - 4], eax
mov eax, dword [ebp + 0x14]
push ebx
push esi
push edi
mov edi, ecx
lea esi, [edi - 0x288]
mov dword [ebp - 0x38], eax
mov eax, dword [esi]
mov ecx, esi
mov dword [ebp - 0x3c], edi
call dword [eax + 0x17c]
test al, al
je 0x4fa516
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x188]
test al, al
je 0x4fa516
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x190]
test al, al
jne 0x4fa504
mov eax, dword [ebp + 8]
add eax, 0xfffffe00
cmp eax, 0xe
jbe 0x4fa516
mov eax, dword [ebp + 8]
mov ebx, 0x20a
cmp eax, ebx
jne 0x4fa529
test byte [ebp + 0xc], 8
jne 0x4fa588
xor eax, eax
mov ecx, dword [ebp - 4]
pop edi
pop esi
xor ecx, ebp
pop ebx
call fcn.00512610
leave
ret 0x10
cmp eax, 0x10f
jne 0x4fa588
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x18]
mov ecx, eax
call fcn.004db295
push eax
call sub.IMM32.dll_ImmGetContext
mov edi, eax
test edi, edi
je 0x4fa516
lea eax, [ebp - 0xc]
push eax
call dword [sym.imp.USER32.dll_GetCaretPos]
mov eax, dword [ebp - 0xc]
mov dword [ebp - 0x2c], eax
mov eax, dword [ebp - 8]
mov dword [ebp - 0x28], eax
lea eax, [ebp - 0x30]
push eax
push edi
mov dword [ebp - 0x30], 2
call sub.IMM32.dll_ImmSetCompositionWindow
mov eax, dword [esi]
push edi
mov ecx, esi
call dword [eax + 0x18]
mov ecx, eax
call fcn.004db295
push eax
call sub.IMM32.dll_ImmReleaseContext
jmp 0x4fa516
mov byte [ebp - 0x31], 1
cmp eax, 0x200
jb 0x4fa59a
cmp eax, 0x20e
jbe 0x4fa5a3
cmp eax, 0x20
jne 0x4fa6b5
mov ecx, dword [edi + 8]
test dword [ecx + 0x14], 0x100
jne 0x4fa5ee
cmp eax, 0x201
jb 0x4fa5ee
cmp eax, 0x205
ja 0x4fa5ee
mov ecx, dword [ebp + 0x10]
movsx eax, word [ebp + 0x10]
shr ecx, 0x10
movsx ecx, cx
push ecx
push eax
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x18]
mov ecx, eax
call fcn.004dcdb6
lea ecx, [edi - 0x290]
neg ecx
sbb ecx, ecx
and ecx, esi
cmp eax, ecx
jne 0x4fa516
mov eax, dword [edi + 8]
mov ecx, dword [eax + 0x14]
and ecx, 0x100
neg ecx
sbb ecx, ecx
and ecx, 3
jne 0x4fa67e
mov ecx, dword [eax + 0x30]
mov dword [ebp - 0x10], ecx
mov ecx, dword [eax + 0x38]
mov dword [ebp - 8], ecx
mov ecx, dword [eax + 0x2c]
mov dword [ebp - 0x14], ecx
mov eax, dword [eax + 0x34]
mov dword [ebp - 0xc], eax
movsx eax, word [ebp + 0x10]
mov dword [ebp - 0x44], eax
mov eax, dword [ebp + 0x10]
shr eax, 0x10
cwde
mov dword [ebp - 0x40], eax
cmp dword [ebp + 8], ebx
jne 0x4fa64a
lea eax, [ebp - 0x44]
push eax
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x18]
mov ecx, eax
call fcn.004db295
push eax
call dword [sym.imp.USER32.dll_ScreenToClient]
push dword [ebp - 0x40]
lea eax, [ebp - 0x14]
push dword [ebp - 0x44]
push eax
call dword [sym.imp.USER32.dll_PtInRect]
test eax, eax
je 0x4fa516
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x18]
mov ecx, eax
call fcn.004dbb45
test al, al
jne 0x4fa516
push 3
mov byte [ebp - 0x31], al
pop ecx
cmp ecx, 3
jne 0x4fa516
cmp dword [ebp + 8], 0x201
je 0x4fa6a6
cmp dword [ebp + 8], 0x203
je 0x4fa6a6
cmp dword [ebp + 8], 0x204
jne 0x4fa98a
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x1a4]
jmp 0x4fa98a
lea ecx, [eax - 0x100]
cmp ecx, 9
ja 0x4fa6d7
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x1a0]
test al, al
jne 0x4fa98a
jmp 0x4fa516
cmp eax, 0x7b
jne 0x4fa8e1
movsx eax, word [ebp + 0x10]
mov ecx, dword [ebp + 0x10]
shr ecx, 0x10
movsx ecx, cx
mov dword [ebp - 0x58], eax
mov dword [ebp - 0xc], eax
lea eax, [ebp - 0x58]
mov dword [ebp - 0x54], ecx
mov dword [ebp - 8], ecx
push eax
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x18]
mov ecx, eax
call fcn.004db295
push eax
call dword [sym.imp.USER32.dll_ScreenToClient]
push dword [ebp - 0x54]
mov eax, dword [esi]
push dword [ebp - 0x58]
mov ecx, esi
call dword [eax + 0x18]
mov ecx, eax
call fcn.004dcdb6
lea ecx, [edi - 0x290]
neg ecx
sbb ecx, ecx
and ecx, esi
cmp eax, ecx
jne 0x4fa516
call dword [sym.imp.USER32.dll_CreatePopupMenu]
mov edi, eax
call dword [sym.imp.KERNEL32.dll_GetUserDefaultUILanguage]
mov esi, dword [sym.imp.USER32.dll_AppendMenuW]
mov ecx, 0x804
xor ebx, ebx
cmp cx, ax
je 0x4fa7c1
push str.Undo
push 0x65
push ebx
push edi
call esi
push str.Redo
push 0x6b
push ebx
push edi
call esi
push 0x554518
push ebx
mov ebx, 0x800
push ebx
push edi
call esi
push str.Cut
push 0x66
push 0
push edi
call esi
push str.Copy
push 0x67
push 0
push edi
call esi
push str.Paste
push 0x68
push 0
push edi
call esi
push str.Clear
push 0x69
push 0
push edi
call esi
push 0x554518
push 0
push ebx
push edi
call esi
push str.Select_All
jmp 0x4fa826
push 0x56eacc
push 0x65
push ebx
push edi
call esi
push str.ZP_
push 0x6b
push ebx
push edi
call esi
push 0x554518
push ebx
mov ebx, 0x800
push ebx
push edi
call esi
push str.jR_aR_
push 0x66
push 0
push edi
call esi
push str._rY6R_
push 0x67
push 0
push edi
call esi
push 0x56ea8c
push 0x68
push 0
push edi
call esi
push 0x56ea7c
push 0x69
push 0
push edi
call esi
push 0x554518
push 0
push ebx
push edi
call esi
push 0x56ea6c
push 0x6a
push 0
push edi
call esi
mov ebx, dword [ebp - 0x3c]
add ebx, 0xfffffd70
mov eax, dword [ebx]
mov ecx, ebx
call dword [eax + pe_nt_image_headers32]
mov esi, dword [sym.imp.USER32.dll_EnableMenuItem]
xor ecx, ecx
test al, al
sete cl
push ecx
push 0x65
push edi
call esi
mov eax, dword [ebx]
mov ecx, ebx
call dword [eax + 0x114]
xor ecx, ecx
test al, al
sete cl
push ecx
push 0x6b
push edi
call esi
mov ecx, ebx
call fcn.004f947a
mov ebx, dword [ebp - 0x3c]
xor ecx, ecx
test ax, ax
sete cl
xor eax, eax
cmp byte [ebx + 0x11], al
setne al
mov dword [ebp - 0x50], ecx
mov dword [ebp - 0x48], eax
or eax, ecx
push eax
push 0x66
push edi
mov dword [ebp - 0x40], eax
call esi
push dword [ebp - 0x50]
push 0x67
push edi
call esi
push dword [ebp - 0x40]
push 0x69
push edi
call esi
push dword [ebp - 0x48]
push 0x68
push edi
call esi
lea ecx, [ebx - 0x288]
mov eax, dword [ecx]
push 0
call dword [eax + 0x18]
mov ecx, eax
call fcn.004db295
push eax
push 0
push dword [ebp - 8]
push dword [ebp - 0xc]
push 2
push edi
call dword [sym.imp.USER32.dll_TrackPopupMenu]
push edi
call dword [sym.imp.USER32.dll_DestroyMenu]
mov edi, ebx
jmp 0x4fa98a
cmp eax, 0x111
jne 0x4fa97d
mov eax, dword [ebp - 0x38]
mov byte [eax], 0
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x1a0]
test al, al
je 0x4fa516
mov eax, dword [ebp + 0xc]
sub eax, 0x65
je 0x4fa970
dec eax
je 0x4fa963
dec eax
je 0x4fa956
dec eax
je 0x4fa949
dec eax
je 0x4fa93c
dec eax
je 0x4fa92b
dec eax
jne 0x4fa98a
lea ecx, [edi - 0x290]
call fcn.004f97fa
jmp 0x4fa98a
push 0xffffffffffffffff
push 0
lea ecx, [edi - 0x290]
call fcn.004f9379
jmp 0x4fa98a
lea ecx, [edi - 0x290]
call fcn.004f985e
jmp 0x4fa98a
lea ecx, [edi - 0x290]
call fcn.004f9897
jmp 0x4fa98a
lea ecx, [edi - 0x290]
call fcn.004f9871
jmp 0x4fa98a
lea ecx, [edi - 0x290]
call fcn.004f9884
jmp 0x4fa98a
lea ecx, [edi - 0x290]
call fcn.004f982c
jmp 0x4fa98a
cmp eax, 0x53
jne 0x4fa516
mov byte [ebp - 0x31], 0
and dword [ebp - 0x4c], 0
lea edx, [ebp - 0x4c]
push edx
push dword [ebp + 0x10]
lea ecx, [edi - 0x290]
push dword [ebp + 0xc]
mov eax, dword [ecx]
push dword [ebp + 8]
call dword [eax + 0x11c]
test eax, eax
je 0x4fa9e4
mov ecx, dword [ebp + 8]
mov eax, 0x100
cmp ecx, eax
jb 0x4fa9c1
cmp ecx, 0x109
jbe 0x4fa9e4
cmp ecx, 0x102
je 0x4fa9e4
cmp ecx, 0x286
je 0x4fa9e4
add ecx, 0xfffffe00
cmp ecx, 0xe
ja 0x4fa9ec
mov ecx, dword [edi + 8]
test dword [ecx + 0x14], eax
je 0x4fa9ec
mov ecx, dword [ebp - 0x38]
mov al, byte [ebp - 0x31]
mov byte [ecx], al
mov eax, dword [ebp - 0x4c]
jmp 0x4fa518