From 4caba65a9ced30b9085ad641ef5df6622fa224f4 Mon Sep 17 00:00:00 2001 From: Minizbot2012 Date: Sat, 1 May 2021 03:25:55 -0400 Subject: [PATCH] Generate Win/Mac/Evdev/X11/USB from chromeium --- devices/devicejson.go | 23 ---- devjson/orbweaver.json | 158 ------------------------- hid/data/keycode_data.inc | 240 ++++++++++++++++++++++++++++++++++++++ hid/generated.json | 1 + hid/generator/gen.go | 74 ++++++++++++ hid/hid.go | 76 ++++++------ module.go | 3 + 7 files changed, 356 insertions(+), 219 deletions(-) delete mode 100644 devices/devicejson.go delete mode 100644 devjson/orbweaver.json create mode 100644 hid/data/keycode_data.inc create mode 100644 hid/generated.json create mode 100644 hid/generator/gen.go create mode 100644 module.go diff --git a/devices/devicejson.go b/devices/devicejson.go deleted file mode 100644 index 1703582..0000000 --- a/devices/devicejson.go +++ /dev/null @@ -1,23 +0,0 @@ -package devices - -import ( - "github.com/OrbTools/OrbCommon/gui" -) - -//ExtraBytes defines extra bytes to a type -type ExtraBytes struct { - Name string - Size int -} - -//Device defines a JSON device -type Device struct { - BINDING []byte - EB []*ExtraBytes - GUI gui.GUI -} - -//DeviceList List of supported devices -var DeviceList = []string{ - "Orbweaver", -} diff --git a/devjson/orbweaver.json b/devjson/orbweaver.json deleted file mode 100644 index 2058075..0000000 --- a/devjson/orbweaver.json +++ /dev/null @@ -1,158 +0,0 @@ -{ - "EB": [ - { - "Name": "Color", - "Size": 3 - } - ], - "BINDING": [ - 41, - 2, - 3, - 4, - 5, - 15, - 16, - 17, - 18, - 19, - 58, - 30, - 31, - 32, - 33, - 42, - 44, - 45, - 46, - 47, - 56, - 103, - 106, - 108, - 105, - 57 - ], - "GUI": { - "Pages": [ - { - "Hive": "MIP", - "Name": "Grid", - "Type": 0, - "Keys": [ - { - "KeyID": 0, - "KeyName": "01" - }, - { - "KeyID": 1, - "KeyName": "02" - }, - { - "KeyID": 2, - "KeyName": "03" - }, - { - "KeyID": 3, - "KeyName": "04" - }, - { - "KeyID": 4, - "KeyName": "05" - }, - { - "KeyID": 5, - "KeyName": "06" - }, - { - "KeyID": 6, - "KeyName": "07" - }, - { - "KeyID": 7, - "KeyName": "08" - }, - { - "KeyID": 8, - "KeyName": "09" - }, - { - "KeyID": 9, - "KeyName": "10" - }, - { - "KeyID": 10, - "KeyName": "11" - }, - { - "KeyID": 11, - "KeyName": "12" - }, - { - "KeyID": 12, - "KeyName": "13" - }, - { - "KeyID": 13, - "KeyName": "14" - }, - { - "KeyID": 14, - "KeyName": "15" - }, - { - "KeyID": 15, - "KeyName": "16" - }, - { - "KeyID": 16, - "KeyName": "17" - }, - { - "KeyID": 17, - "KeyName": "18" - }, - { - "KeyID": 18, - "KeyName": "19" - }, - { - "KeyID": 19, - "KeyName": "20" - } - ] - }, - { - "Hive": "SIP", - "Name": "Side Keys", - "Type": 2, - "Keys": [ - { - "KeyID": 0, - "KeyName": "Upper Button" - }, - { - "KeyID": 1, - "KeyName": "DPad Up" - }, - { - "KeyID": 2, - "KeyName": "DPad Right" - }, - { - "KeyID": 3, - "KeyName": "DPad Left" - }, - { - "KeyID": 4, - "KeyName": "DPad Down" - }, - { - "KeyID": 5, - "KeyName": "Lower Button" - } - ] - } - ] - } -} \ No newline at end of file diff --git a/hid/data/keycode_data.inc b/hid/data/keycode_data.inc new file mode 100644 index 0000000..1baa0ed --- /dev/null +++ b/hid/data/keycode_data.inc @@ -0,0 +1,240 @@ +DOM_CODE_DECLARATION { + DOM_CODE(0x000000, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NONE), + DOM_CODE(0x000010, 0x0000, 0x0000, 0x0000, 0xffff, "Hyper", HYPER), + DOM_CODE(0x000011, 0x0000, 0x0000, 0x0000, 0xffff, "Super", SUPER), + DOM_CODE(0x000012, 0x0000, 0x0000, 0x0000, 0xffff, "Fn", FN), + DOM_CODE(0x000013, 0x0000, 0x0000, 0x0000, 0xffff, "FnLock", FN_LOCK), + DOM_CODE(0x000014, 0x0000, 0x0000, 0x0000, 0xffff, "Suspend", SUSPEND), + DOM_CODE(0x000015, 0x0000, 0x0000, 0x0000, 0xffff, "Resume", RESUME), + DOM_CODE(0x000016, 0x0000, 0x0000, 0x0000, 0xffff, "Turbo", TURBO), + DOM_CODE(0x000017, 0x0279, 0x0281, 0x0000, 0xffff, "PrivacyScreenToggle", PRIVACY_SCREEN_TOGGLE), + DOM_CODE(0x010082, 0x008e, 0x0096, 0xe05f, 0xffff, "Sleep", SLEEP), + DOM_CODE(0x010083, 0x008f, 0x0097, 0xe063, 0xffff, "WakeUp", WAKE_UP), + DOM_CODE(0x0100b5, 0x00e3, 0x00eb, 0x0000, 0xffff, "DisplayToggleIntExt", DISPLAY_TOGGLE_INT_EXT), + DOM_CODE(0x070000, 0x0000, 0x0000, 0x0000, 0xffff, NULL, USB_RESERVED), + DOM_CODE(0x070001, 0x0000, 0x0000, 0x00ff, 0xffff, NULL, USB_ERROR_ROLL_OVER), + DOM_CODE(0x070002, 0x0000, 0x0000, 0x00fc, 0xffff, NULL, USB_POST_FAIL), + DOM_CODE(0x070003, 0x0000, 0x0000, 0x0000, 0xffff, NULL, USB_ERROR_UNDEFINED), + DOM_CODE(0x070004, 0x001e, 0x0026, 0x001e, 0x0000, "KeyA", US_A), + DOM_CODE(0x070005, 0x0030, 0x0038, 0x0030, 0x000b, "KeyB", US_B), + DOM_CODE(0x070006, 0x002e, 0x0036, 0x002e, 0x0008, "KeyC", US_C), + DOM_CODE(0x070007, 0x0020, 0x0028, 0x0020, 0x0002, "KeyD", US_D), + DOM_CODE(0x070008, 0x0012, 0x001a, 0x0012, 0x000e, "KeyE", US_E), + DOM_CODE(0x070009, 0x0021, 0x0029, 0x0021, 0x0003, "KeyF", US_F), + DOM_CODE(0x07000a, 0x0022, 0x002a, 0x0022, 0x0005, "KeyG", US_G), + DOM_CODE(0x07000b, 0x0023, 0x002b, 0x0023, 0x0004, "KeyH", US_H), + DOM_CODE(0x07000c, 0x0017, 0x001f, 0x0017, 0x0022, "KeyI", US_I), + DOM_CODE(0x07000d, 0x0024, 0x002c, 0x0024, 0x0026, "KeyJ", US_J), + DOM_CODE(0x07000e, 0x0025, 0x002d, 0x0025, 0x0028, "KeyK", US_K), + DOM_CODE(0x07000f, 0x0026, 0x002e, 0x0026, 0x0025, "KeyL", US_L), + DOM_CODE(0x070010, 0x0032, 0x003a, 0x0032, 0x002e, "KeyM", US_M), + DOM_CODE(0x070011, 0x0031, 0x0039, 0x0031, 0x002d, "KeyN", US_N), + DOM_CODE(0x070012, 0x0018, 0x0020, 0x0018, 0x001f, "KeyO", US_O), + DOM_CODE(0x070013, 0x0019, 0x0021, 0x0019, 0x0023, "KeyP", US_P), + DOM_CODE(0x070014, 0x0010, 0x0018, 0x0010, 0x000c, "KeyQ", US_Q), + DOM_CODE(0x070015, 0x0013, 0x001b, 0x0013, 0x000f, "KeyR", US_R), + DOM_CODE(0x070016, 0x001f, 0x0027, 0x001f, 0x0001, "KeyS", US_S), + DOM_CODE(0x070017, 0x0014, 0x001c, 0x0014, 0x0011, "KeyT", US_T), + DOM_CODE(0x070018, 0x0016, 0x001e, 0x0016, 0x0020, "KeyU", US_U), + DOM_CODE(0x070019, 0x002f, 0x0037, 0x002f, 0x0009, "KeyV", US_V), + DOM_CODE(0x07001a, 0x0011, 0x0019, 0x0011, 0x000d, "KeyW", US_W), + DOM_CODE(0x07001b, 0x002d, 0x0035, 0x002d, 0x0007, "KeyX", US_X), + DOM_CODE(0x07001c, 0x0015, 0x001d, 0x0015, 0x0010, "KeyY", US_Y), + DOM_CODE(0x07001d, 0x002c, 0x0034, 0x002c, 0x0006, "KeyZ", US_Z), + DOM_CODE(0x07001e, 0x0002, 0x000a, 0x0002, 0x0012, "Digit1", DIGIT1), + DOM_CODE(0x07001f, 0x0003, 0x000b, 0x0003, 0x0013, "Digit2", DIGIT2), + DOM_CODE(0x070020, 0x0004, 0x000c, 0x0004, 0x0014, "Digit3", DIGIT3), + DOM_CODE(0x070021, 0x0005, 0x000d, 0x0005, 0x0015, "Digit4", DIGIT4), + DOM_CODE(0x070022, 0x0006, 0x000e, 0x0006, 0x0017, "Digit5", DIGIT5), + DOM_CODE(0x070023, 0x0007, 0x000f, 0x0007, 0x0016, "Digit6", DIGIT6), + DOM_CODE(0x070024, 0x0008, 0x0010, 0x0008, 0x001a, "Digit7", DIGIT7), + DOM_CODE(0x070025, 0x0009, 0x0011, 0x0009, 0x001c, "Digit8", DIGIT8), + DOM_CODE(0x070026, 0x000a, 0x0012, 0x000a, 0x0019, "Digit9", DIGIT9), + DOM_CODE(0x070027, 0x000b, 0x0013, 0x000b, 0x001d, "Digit0", DIGIT0), + DOM_CODE(0x070028, 0x001c, 0x0024, 0x001c, 0x0024, "Enter", ENTER), + DOM_CODE(0x070029, 0x0001, 0x0009, 0x0001, 0x0035, "Escape", ESCAPE), + DOM_CODE(0x07002a, 0x000e, 0x0016, 0x000e, 0x0033, "Backspace", BACKSPACE), + DOM_CODE(0x07002b, 0x000f, 0x0017, 0x000f, 0x0030, "Tab", TAB), + DOM_CODE(0x07002c, 0x0039, 0x0041, 0x0039, 0x0031, "Space", SPACE), + DOM_CODE(0x07002d, 0x000c, 0x0014, 0x000c, 0x001b, "Minus", MINUS), + DOM_CODE(0x07002e, 0x000d, 0x0015, 0x000d, 0x0018, "Equal", EQUAL), + DOM_CODE(0x07002f, 0x001a, 0x0022, 0x001a, 0x0021, "BracketLeft", BRACKET_LEFT), + DOM_CODE(0x070030, 0x001b, 0x0023, 0x001b, 0x001e, "BracketRight", BRACKET_RIGHT), + DOM_CODE(0x070031, 0x002b, 0x0033, 0x002b, 0x002a, "Backslash", BACKSLASH), + DOM_CODE(0x070033, 0x0027, 0x002f, 0x0027, 0x0029, "Semicolon", SEMICOLON), + DOM_CODE(0x070034, 0x0028, 0x0030, 0x0028, 0x0027, "Quote", QUOTE), + DOM_CODE(0x070035, 0x0029, 0x0031, 0x0029, 0x0032, "Backquote", BACKQUOTE), + DOM_CODE(0x070036, 0x0033, 0x003b, 0x0033, 0x002b, "Comma", COMMA), + DOM_CODE(0x070037, 0x0034, 0x003c, 0x0034, 0x002f, "Period", PERIOD), + DOM_CODE(0x070038, 0x0035, 0x003d, 0x0035, 0x002c, "Slash", SLASH), + DOM_CODE(0x070039, 0x003a, 0x0042, 0x003a, 0x0039, "CapsLock", CAPS_LOCK), + DOM_CODE(0x07003a, 0x003b, 0x0043, 0x003b, 0x007a, "F1", F1), + DOM_CODE(0x07003b, 0x003c, 0x0044, 0x003c, 0x0078, "F2", F2), + DOM_CODE(0x07003c, 0x003d, 0x0045, 0x003d, 0x0063, "F3", F3), + DOM_CODE(0x07003d, 0x003e, 0x0046, 0x003e, 0x0076, "F4", F4), + DOM_CODE(0x07003e, 0x003f, 0x0047, 0x003f, 0x0060, "F5", F5), + DOM_CODE(0x07003f, 0x0040, 0x0048, 0x0040, 0x0061, "F6", F6), + DOM_CODE(0x070040, 0x0041, 0x0049, 0x0041, 0x0062, "F7", F7), + DOM_CODE(0x070041, 0x0042, 0x004a, 0x0042, 0x0064, "F8", F8), + DOM_CODE(0x070042, 0x0043, 0x004b, 0x0043, 0x0065, "F9", F9), + DOM_CODE(0x070043, 0x0044, 0x004c, 0x0044, 0x006d, "F10", F10), + DOM_CODE(0x070044, 0x0057, 0x005f, 0x0057, 0x0067, "F11", F11), + DOM_CODE(0x070045, 0x0058, 0x0060, 0x0058, 0x006f, "F12", F12), + DOM_CODE(0x070046, 0x0063, 0x006b, 0xe037, 0xffff, "PrintScreen", PRINT_SCREEN), + DOM_CODE(0x070047, 0x0046, 0x004e, 0x0046, 0xffff, "ScrollLock", SCROLL_LOCK), + DOM_CODE(0x070048, 0x0077, 0x007f, 0x0045, 0xffff, "Pause", PAUSE), + DOM_CODE(0x070049, 0x006e, 0x0076, 0xe052, 0x0072, "Insert", INSERT), + DOM_CODE(0x07004a, 0x0066, 0x006e, 0xe047, 0x0073, "Home", HOME), + DOM_CODE(0x07004b, 0x0068, 0x0070, 0xe049, 0x0074, "PageUp", PAGE_UP), + DOM_CODE(0x07004c, 0x006f, 0x0077, 0xe053, 0x0075, "Delete", DEL), + DOM_CODE(0x07004d, 0x006b, 0x0073, 0xe04f, 0x0077, "End", END), + DOM_CODE(0x07004e, 0x006d, 0x0075, 0xe051, 0x0079, "PageDown", PAGE_DOWN), + DOM_CODE(0x07004f, 0x006a, 0x0072, 0xe04d, 0x007c, "ArrowRight", ARROW_RIGHT), + DOM_CODE(0x070050, 0x0069, 0x0071, 0xe04b, 0x007b, "ArrowLeft", ARROW_LEFT), + DOM_CODE(0x070051, 0x006c, 0x0074, 0xe050, 0x007d, "ArrowDown", ARROW_DOWN), + DOM_CODE(0x070052, 0x0067, 0x006f, 0xe048, 0x007e, "ArrowUp", ARROW_UP), + DOM_CODE(0x070053, 0x0045, 0x004d, 0xe045, 0x0047, "NumLock", NUM_LOCK), + DOM_CODE(0x070054, 0x0062, 0x006a, 0xe035, 0x004b, "NumpadDivide", NUMPAD_DIVIDE), + DOM_CODE(0x070055, 0x0037, 0x003f, 0x0037, 0x0043, "NumpadMultiply", NUMPAD_MULTIPLY), + DOM_CODE(0x070056, 0x004a, 0x0052, 0x004a, 0x004e, "NumpadSubtract", NUMPAD_SUBTRACT), + DOM_CODE(0x070057, 0x004e, 0x0056, 0x004e, 0x0045, "NumpadAdd", NUMPAD_ADD), + DOM_CODE(0x070058, 0x0060, 0x0068, 0xe01c, 0x004c, "NumpadEnter", NUMPAD_ENTER), + DOM_CODE(0x070059, 0x004f, 0x0057, 0x004f, 0x0053, "Numpad1", NUMPAD1), + DOM_CODE(0x07005a, 0x0050, 0x0058, 0x0050, 0x0054, "Numpad2", NUMPAD2), + DOM_CODE(0x07005b, 0x0051, 0x0059, 0x0051, 0x0055, "Numpad3", NUMPAD3), + DOM_CODE(0x07005c, 0x004b, 0x0053, 0x004b, 0x0056, "Numpad4", NUMPAD4), + DOM_CODE(0x07005d, 0x004c, 0x0054, 0x004c, 0x0057, "Numpad5", NUMPAD5), + DOM_CODE(0x07005e, 0x004d, 0x0055, 0x004d, 0x0058, "Numpad6", NUMPAD6), + DOM_CODE(0x07005f, 0x0047, 0x004f, 0x0047, 0x0059, "Numpad7", NUMPAD7), + DOM_CODE(0x070060, 0x0048, 0x0050, 0x0048, 0x005b, "Numpad8", NUMPAD8), + DOM_CODE(0x070061, 0x0049, 0x0051, 0x0049, 0x005c, "Numpad9", NUMPAD9), + DOM_CODE(0x070062, 0x0052, 0x005a, 0x0052, 0x0052, "Numpad0", NUMPAD0), + DOM_CODE(0x070063, 0x0053, 0x005b, 0x0053, 0x0041, "NumpadDecimal", NUMPAD_DECIMAL), + DOM_CODE(0x070064, 0x0056, 0x005e, 0x0056, 0x000a, "IntlBackslash", INTL_BACKSLASH), + DOM_CODE(0x070065, 0x007f, 0x0087, 0xe05d, 0x006e, "ContextMenu", CONTEXT_MENU), + DOM_CODE(0x070066, 0x0074, 0x007c, 0xe05e, 0xffff, "Power", POWER), + DOM_CODE(0x070067, 0x0075, 0x007d, 0x0059, 0x0051, "NumpadEqual", NUMPAD_EQUAL), + DOM_CODE(0x070068, 0x00b7, 0x00bf, 0x0064, 0x0069, "F13", F13), + DOM_CODE(0x070069, 0x00b8, 0x00c0, 0x0065, 0x006b, "F14", F14), + DOM_CODE(0x07006a, 0x00b9, 0x00c1, 0x0066, 0x0071, "F15", F15), + DOM_CODE(0x07006b, 0x00ba, 0x00c2, 0x0067, 0x006a, "F16", F16), + DOM_CODE(0x07006c, 0x00bb, 0x00c3, 0x0068, 0x0040, "F17", F17), + DOM_CODE(0x07006d, 0x00bc, 0x00c4, 0x0069, 0x004f, "F18", F18), + DOM_CODE(0x07006e, 0x00bd, 0x00c5, 0x006a, 0x0050, "F19", F19), + DOM_CODE(0x07006f, 0x00be, 0x00c6, 0x006b, 0x005a, "F20", F20), + DOM_CODE(0x070070, 0x00bf, 0x00c7, 0x006c, 0xffff, "F21", F21), + DOM_CODE(0x070071, 0x00c0, 0x00c8, 0x006d, 0xffff, "F22", F22), + DOM_CODE(0x070072, 0x00c1, 0x00c9, 0x006e, 0xffff, "F23", F23), + DOM_CODE(0x070073, 0x00c2, 0x00ca, 0x0076, 0xffff, "F24", F24), + DOM_CODE(0x070074, 0x0086, 0x008e, 0x0000, 0xffff, "Open", OPEN), + DOM_CODE(0x070075, 0x008a, 0x0092, 0xe03b, 0xffff, "Help", HELP), + DOM_CODE(0x070077, 0x0084, 0x008c, 0x0000, 0xffff, "Select", SELECT), + DOM_CODE(0x070079, 0x0081, 0x0089, 0x0000, 0xffff, "Again", AGAIN), + DOM_CODE(0x07007a, 0x0083, 0x008b, 0xe008, 0xffff, "Undo", UNDO), + DOM_CODE(0x07007b, 0x0089, 0x0091, 0xe017, 0xffff, "Cut", CUT), + DOM_CODE(0x07007c, 0x0085, 0x008d, 0xe018, 0xffff, "Copy", COPY), + DOM_CODE(0x07007d, 0x0087, 0x008f, 0xe00a, 0xffff, "Paste", PASTE), + DOM_CODE(0x07007e, 0x0088, 0x0090, 0x0000, 0xffff, "Find", FIND), + DOM_CODE(0x07007f, 0x0071, 0x0079, 0xe020, 0x004a, "AudioVolumeMute", VOLUME_MUTE), + DOM_CODE(0x070080, 0x0073, 0x007b, 0xe030, 0x0048, "AudioVolumeUp", VOLUME_UP), + DOM_CODE(0x070081, 0x0072, 0x007a, 0xe02e, 0x0049, "AudioVolumeDown", VOLUME_DOWN), + DOM_CODE(0x070085, 0x0079, 0x0081, 0x007e, 0x005f, "NumpadComma", NUMPAD_COMMA), + DOM_CODE(0x070087, 0x0059, 0x0061, 0x0073, 0x005e, "IntlRo", INTL_RO), + DOM_CODE(0x070088, 0x005d, 0x0065, 0x0070, 0xffff, "KanaMode", KANA_MODE), + DOM_CODE(0x070089, 0x007c, 0x0084, 0x007d, 0x005d, "IntlYen", INTL_YEN), + DOM_CODE(0x07008a, 0x005c, 0x0064, 0x0079, 0xffff, "Convert", CONVERT), + DOM_CODE(0x07008b, 0x005e, 0x0066, 0x007b, 0xffff, "NonConvert", NON_CONVERT), + DOM_CODE(0x070090, 0x007a, 0x0082, 0x0072, 0x0068, "Lang1", LANG1), + DOM_CODE(0x070091, 0x007b, 0x0083, 0x0071, 0x0066, "Lang2", LANG2), + DOM_CODE(0x070092, 0x005a, 0x0062, 0x0078, 0xffff, "Lang3", LANG3), + DOM_CODE(0x070093, 0x005b, 0x0063, 0x0077, 0xffff, "Lang4", LANG4), + DOM_CODE(0x070094, 0x0055, 0x005d, 0x0000, 0xffff, "Lang5", LANG5), + DOM_CODE(0x07009b, 0x0000, 0x0000, 0x0000, 0xffff, "Abort", ABORT), + DOM_CODE(0x0700a3, 0x0000, 0x0000, 0x0000, 0xffff, "Props", PROPS), + DOM_CODE(0x0700b6, 0x00b3, 0x00bb, 0x0000, 0xffff, "NumpadParenLeft", NUMPAD_PAREN_LEFT), + DOM_CODE(0x0700b7, 0x00b4, 0x00bc, 0x0000, 0xffff, "NumpadParenRight", NUMPAD_PAREN_RIGHT), + DOM_CODE(0x0700bb, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadBackspace", NUMPAD_BACKSPACE), + DOM_CODE(0x0700d0, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryStore", NUMPAD_MEMORY_STORE), + DOM_CODE(0x0700d1, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryRecall", NUMPAD_MEMORY_RECALL), + DOM_CODE(0x0700d2, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryClear", NUMPAD_MEMORY_CLEAR), + DOM_CODE(0x0700d3, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryAdd", NUMPAD_MEMORY_ADD), + DOM_CODE(0x0700d4, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemorySubtract", NUMPAD_MEMORY_SUBTRACT), + DOM_CODE(0x0700d7, 0x0076, 0x007e, 0x0000, 0xffff, NULL, NUMPAD_SIGN_CHANGE), + DOM_CODE(0x0700d8, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadClear", NUMPAD_CLEAR), + DOM_CODE(0x0700d9, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadClearEntry", NUMPAD_CLEAR_ENTRY), + DOM_CODE(0x0700e0, 0x001d, 0x0025, 0x001d, 0x003b, "ControlLeft", CONTROL_LEFT), + DOM_CODE(0x0700e1, 0x002a, 0x0032, 0x002a, 0x0038, "ShiftLeft", SHIFT_LEFT), + DOM_CODE(0x0700e2, 0x0038, 0x0040, 0x0038, 0x003a, "AltLeft", ALT_LEFT), + DOM_CODE(0x0700e3, 0x007d, 0x0085, 0xe05b, 0x0037, "MetaLeft", META_LEFT), + DOM_CODE(0x0700e4, 0x0061, 0x0069, 0xe01d, 0x003e, "ControlRight", CONTROL_RIGHT), + DOM_CODE(0x0700e5, 0x0036, 0x003e, 0x0036, 0x003c, "ShiftRight", SHIFT_RIGHT), + DOM_CODE(0x0700e6, 0x0064, 0x006c, 0xe038, 0x003d, "AltRight", ALT_RIGHT), + DOM_CODE(0x0700e7, 0x007e, 0x0086, 0xe05c, 0x0036, "MetaRight", META_RIGHT), + DOM_CODE(0x0c0060, 0x0166, 0x016e, 0x0000, 0xffff, NULL, INFO), + DOM_CODE(0x0c0061, 0x0172, 0x017a, 0x0000, 0xffff, NULL, CLOSED_CAPTION_TOGGLE), + DOM_CODE(0x0c006f, 0x00e1, 0x00e9, 0x0000, 0xffff, "BrightnessUp", BRIGHTNESS_UP), + DOM_CODE(0x0c0070, 0x00e0, 0x00e8, 0x0000, 0xffff, "BrightnessDown", BRIGHTNESS_DOWN), + DOM_CODE(0x0c0072, 0x01af, 0x01b7, 0x0000, 0xffff, NULL, BRIGHTNESS_TOGGLE), + DOM_CODE(0x0c0073, 0x0250, 0x0258, 0x0000, 0xffff, NULL, BRIGHTNESS_MINIMIUM), + DOM_CODE(0x0c0074, 0x0251, 0x0259, 0x0000, 0xffff, NULL, BRIGHTNESS_MAXIMUM), + DOM_CODE(0x0c0075, 0x00f4, 0x00fc, 0x0000, 0xffff, NULL, BRIGHTNESS_AUTO), + DOM_CODE(0x0c0079, 0x00e6, 0x00ee, 0x0000, 0xffff, NULL, KBD_ILLUM_UP), + DOM_CODE(0x0c007a, 0x00e5, 0x00ed, 0x0000, 0xffff, NULL, KBD_ILLUM_DOWN), + DOM_CODE(0x0c0083, 0x0195, 0x019d, 0x0000, 0xffff, NULL, MEDIA_LAST), + DOM_CODE(0x0c008c, 0x00a9, 0x00b1, 0x0000, 0xffff, NULL, LAUNCH_PHONE), + DOM_CODE(0x0c008d, 0x016a, 0x0172, 0x0000, 0xffff, NULL, PROGRAM_GUIDE), + DOM_CODE(0x0c0094, 0x00ae, 0x00b6, 0x0000, 0xffff, NULL, EXIT), + DOM_CODE(0x0c009c, 0x019a, 0x01a2, 0x0000, 0xffff, NULL, CHANNEL_UP), + DOM_CODE(0x0c009d, 0x019b, 0x01a3, 0x0000, 0xffff, NULL, CHANNEL_DOWN), + DOM_CODE(0x0c00b0, 0x00cf, 0x00d7, 0x0000, 0xffff, "MediaPlay", MEDIA_PLAY), + DOM_CODE(0x0c00b1, 0x00c9, 0x00d1, 0x0000, 0xffff, "MediaPause", MEDIA_PAUSE), + DOM_CODE(0x0c00b2, 0x00a7, 0x00af, 0x0000, 0xffff, "MediaRecord", MEDIA_RECORD), + DOM_CODE(0x0c00b3, 0x00d0, 0x00d8, 0x0000, 0xffff, "MediaFastForward", MEDIA_FAST_FORWARD), + DOM_CODE(0x0c00b4, 0x00a8, 0x00b0, 0x0000, 0xffff, "MediaRewind", MEDIA_REWIND), + DOM_CODE(0x0c00b5, 0x00a3, 0x00ab, 0xe019, 0xffff, "MediaTrackNext", MEDIA_TRACK_NEXT), + DOM_CODE(0x0c00b6, 0x00a5, 0x00ad, 0xe010, 0xffff, "MediaTrackPrevious", MEDIA_TRACK_PREVIOUS), + DOM_CODE(0x0c00b7, 0x00a6, 0x00ae, 0xe024, 0xffff, "MediaStop", MEDIA_STOP), + DOM_CODE(0x0c00b8, 0x00a1, 0x00a9, 0xe02c, 0xffff, "Eject", EJECT), + DOM_CODE(0x0c00cd, 0x00a4, 0x00ac, 0xe022, 0xffff, "MediaPlayPause", MEDIA_PLAY_PAUSE), + DOM_CODE(0x0c00cf, 0x0246, 0x024e, 0x0000, 0xffff, NULL, SPEECH_INPUT_TOGGLE), + DOM_CODE(0x0c00e5, 0x00d1, 0x00d9, 0x0000, 0xffff, NULL, BASS_BOOST), + DOM_CODE(0x0c0183, 0x00ab, 0x00b3, 0xe06d, 0xffff, "MediaSelect", MEDIA_SELECT), + DOM_CODE(0x0c0184, 0x01a5, 0x01ad, 0x0000, 0xffff, NULL, LAUNCH_WORD_PROCESSOR), + DOM_CODE(0x0c0186, 0x01a7, 0x01af, 0x0000, 0xffff, NULL, LAUNCH_SPREADSHEET), + DOM_CODE(0x0c018a, 0x009b, 0x00a3, 0xe06c, 0xffff, "LaunchMail", LAUNCH_MAIL), + DOM_CODE(0x0c018d, 0x01ad, 0x01b5, 0x0000, 0xffff, NULL, LAUNCH_CONTACTS), + DOM_CODE(0x0c018e, 0x018d, 0x0195, 0x0000, 0xffff, NULL, LAUNCH_CALENDAR), + DOM_CODE(0x0c0192, 0x008c, 0x0094, 0xe021, 0xffff, "LaunchApp2", LAUNCH_APP2), + DOM_CODE(0x0c0194, 0x0090, 0x0098, 0xe06b, 0xffff, "LaunchApp1", LAUNCH_APP1), + DOM_CODE(0x0c0196, 0x0096, 0x009e, 0x0000, 0xffff, NULL, LAUNCH_INTERNET_BROWSER), + DOM_CODE(0x0c019C, 0x01b1, 0x01b9, 0x0000, 0xffff, NULL, LOG_OFF), + DOM_CODE(0x0c019e, 0x0098, 0x00a0, 0x0000, 0xffff, NULL, LOCK_SCREEN), + DOM_CODE(0x0c019f, 0x0243, 0x024b, 0x0000, 0xffff, "LaunchControlPanel", LAUNCH_CONTROL_PANEL), + DOM_CODE(0x0c01a2, 0x0244, 0x024c, 0x0000, 0xffff, "SelectTask", SELECT_TASK), + DOM_CODE(0x0c01a7, 0x00eb, 0x00f3, 0x0000, 0xffff, NULL, LAUNCH_DOCUMENTS), + DOM_CODE(0x0c01ab, 0x01b0, 0x01b8, 0x0000, 0xffff, NULL, SPELL_CHECK), + DOM_CODE(0x0c01ae, 0x0176, 0x017e, 0x0000, 0xffff, NULL, LAUNCH_KEYBOARD_LAYOUT), + DOM_CODE(0x0c01b1, 0x0245, 0x024d, 0x0000, 0xffff, "LaunchScreenSaver", LAUNCH_SCREEN_SAVER), + DOM_CODE(0x0c01cb, 0x0247, 0x024f, 0x0000, 0xffff, "LaunchAssistant", LAUNCH_ASSISTANT), + DOM_CODE(0x0c01b7, 0x0188, 0x0190, 0x0000, 0xffff, NULL, LAUNCH_AUDIO_BROWSER), + DOM_CODE(0x0c0201, 0x00b5, 0x00bd, 0x0000, 0xffff, NULL, NEW), + DOM_CODE(0x0c0203, 0x00ce, 0x00d6, 0x0000, 0xffff, NULL, CLOSE), + DOM_CODE(0x0c0207, 0x00ea, 0x00f2, 0x0000, 0xffff, NULL, SAVE), + DOM_CODE(0x0c0208, 0x00d2, 0x00da, 0x0000, 0xffff, NULL, PRINT), + DOM_CODE(0x0c0221, 0x00d9, 0x00e1, 0xe065, 0xffff, "BrowserSearch", BROWSER_SEARCH), + DOM_CODE(0x0c0223, 0x00ac, 0x00b4, 0xe032, 0xffff, "BrowserHome", BROWSER_HOME), + DOM_CODE(0x0c0224, 0x009e, 0x00a6, 0xe06a, 0xffff, "BrowserBack", BROWSER_BACK), + DOM_CODE(0x0c0225, 0x009f, 0x00a7, 0xe069, 0xffff, "BrowserForward", BROWSER_FORWARD), + DOM_CODE(0x0c0226, 0x0080, 0x0088, 0xe068, 0xffff, "BrowserStop", BROWSER_STOP), + DOM_CODE(0x0c0227, 0x00ad, 0x00b5, 0xe067, 0xffff, "BrowserRefresh", BROWSER_REFRESH), + DOM_CODE(0x0c022a, 0x009c, 0x00a4, 0xe066, 0xffff, "BrowserFavorites", BROWSER_FAVORITES), + DOM_CODE(0x0c022d, 0x01a2, 0x01aa, 0x0000, 0xffff, NULL, ZOOM_IN), + DOM_CODE(0x0c022e, 0x01a3, 0x01ab, 0x0000, 0xffff, NULL, ZOOM_OUT), + DOM_CODE(0x0c0232, 0x0174, 0x017c, 0x0000, 0xffff, "ZoomToggle", ZOOM_TOGGLE), + DOM_CODE(0x0c0279, 0x00b6, 0x00be, 0x0000, 0xffff, NULL, REDO), + DOM_CODE(0x0c0289, 0x00e8, 0x00f0, 0x0000, 0xffff, "MailReply", MAIL_REPLY), + DOM_CODE(0x0c028b, 0x00e9, 0x00f1, 0x0000, 0xffff, "MailForward", MAIL_FORWARD), + DOM_CODE(0x0c028c, 0x00e7, 0x00ef, 0x0000, 0xffff, "MailSend", MAIL_SEND), + DOM_CODE(0x0c029d, 0x0248, 0x0250, 0x0000, 0xffff, "KeyboardLayoutSelect", KEYBOARD_LAYOUT_SELECT), + DOM_CODE(0x0c029f, 0x0078, 0x0080, 0x0000, 0xffff, "ShowAllWindows", SHOW_ALL_WINDOWS), +}; \ No newline at end of file diff --git a/hid/generated.json b/hid/generated.json new file mode 100644 index 0000000..8daf332 --- /dev/null +++ b/hid/generated.json @@ -0,0 +1 @@ +{"USB":{"0":{"USB":0,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"USB_RESERVED"},"1":{"USB":1,"Evdev":0,"Xkb":0,"Win":255,"Mac":65535,"Code":"USB_ERROR_ROLL_OVER"},"10":{"USB":10,"Evdev":34,"Xkb":42,"Win":34,"Mac":5,"Code":"US_G"},"100":{"USB":100,"Evdev":86,"Xkb":94,"Win":86,"Mac":10,"Code":"INTL_BACKSLASH"},"101":{"USB":101,"Evdev":127,"Xkb":135,"Win":57437,"Mac":110,"Code":"CONTEXT_MENU"},"102":{"USB":102,"Evdev":116,"Xkb":124,"Win":57438,"Mac":65535,"Code":"POWER"},"103":{"USB":103,"Evdev":117,"Xkb":125,"Win":89,"Mac":81,"Code":"NUMPAD_EQUAL"},"11":{"USB":11,"Evdev":35,"Xkb":43,"Win":35,"Mac":4,"Code":"US_H"},"111":{"USB":111,"Evdev":225,"Xkb":233,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_UP"},"112":{"USB":112,"Evdev":224,"Xkb":232,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_DOWN"},"114":{"USB":114,"Evdev":431,"Xkb":439,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_TOGGLE"},"115":{"USB":115,"Evdev":592,"Xkb":600,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_MINIMIUM"},"116":{"USB":116,"Evdev":593,"Xkb":601,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_MAXIMUM"},"117":{"USB":117,"Evdev":244,"Xkb":252,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_AUTO"},"119":{"USB":119,"Evdev":132,"Xkb":140,"Win":0,"Mac":65535,"Code":"SELECT"},"12":{"USB":12,"Evdev":23,"Xkb":31,"Win":23,"Mac":34,"Code":"US_I"},"121":{"USB":121,"Evdev":230,"Xkb":238,"Win":0,"Mac":65535,"Code":"KBD_ILLUM_UP"},"122":{"USB":122,"Evdev":229,"Xkb":237,"Win":0,"Mac":65535,"Code":"KBD_ILLUM_DOWN"},"123":{"USB":123,"Evdev":137,"Xkb":145,"Win":57367,"Mac":65535,"Code":"CUT"},"124":{"USB":124,"Evdev":133,"Xkb":141,"Win":57368,"Mac":65535,"Code":"COPY"},"125":{"USB":125,"Evdev":135,"Xkb":143,"Win":57354,"Mac":65535,"Code":"PASTE"},"126":{"USB":126,"Evdev":136,"Xkb":144,"Win":0,"Mac":65535,"Code":"FIND"},"127":{"USB":127,"Evdev":113,"Xkb":121,"Win":57376,"Mac":74,"Code":"VOLUME_MUTE"},"128":{"USB":128,"Evdev":115,"Xkb":123,"Win":57392,"Mac":72,"Code":"VOLUME_UP"},"129":{"USB":129,"Evdev":114,"Xkb":122,"Win":57390,"Mac":73,"Code":"VOLUME_DOWN"},"13":{"USB":13,"Evdev":36,"Xkb":44,"Win":36,"Mac":38,"Code":"US_J"},"130":{"USB":130,"Evdev":142,"Xkb":150,"Win":57439,"Mac":65535,"Code":"SLEEP"},"131":{"USB":131,"Evdev":405,"Xkb":413,"Win":0,"Mac":65535,"Code":"MEDIA_LAST"},"133":{"USB":133,"Evdev":121,"Xkb":129,"Win":126,"Mac":95,"Code":"NUMPAD_COMMA"},"135":{"USB":135,"Evdev":89,"Xkb":97,"Win":115,"Mac":94,"Code":"INTL_RO"},"136":{"USB":136,"Evdev":93,"Xkb":101,"Win":112,"Mac":65535,"Code":"KANA_MODE"},"137":{"USB":137,"Evdev":124,"Xkb":132,"Win":125,"Mac":93,"Code":"INTL_YEN"},"138":{"USB":138,"Evdev":92,"Xkb":100,"Win":121,"Mac":65535,"Code":"CONVERT"},"139":{"USB":139,"Evdev":94,"Xkb":102,"Win":123,"Mac":65535,"Code":"NON_CONVERT"},"14":{"USB":14,"Evdev":37,"Xkb":45,"Win":37,"Mac":40,"Code":"US_K"},"140":{"USB":140,"Evdev":169,"Xkb":177,"Win":0,"Mac":65535,"Code":"LAUNCH_PHONE"},"141":{"USB":141,"Evdev":362,"Xkb":370,"Win":0,"Mac":65535,"Code":"PROGRAM_GUIDE"},"148":{"USB":148,"Evdev":174,"Xkb":182,"Win":0,"Mac":65535,"Code":"EXIT"},"15":{"USB":15,"Evdev":38,"Xkb":46,"Win":38,"Mac":37,"Code":"US_L"},"155":{"USB":155,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"ABORT"},"156":{"USB":156,"Evdev":410,"Xkb":418,"Win":0,"Mac":65535,"Code":"CHANNEL_UP"},"157":{"USB":157,"Evdev":411,"Xkb":419,"Win":0,"Mac":65535,"Code":"CHANNEL_DOWN"},"16":{"USB":16,"Evdev":50,"Xkb":58,"Win":50,"Mac":46,"Code":"US_M"},"163":{"USB":163,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"PROPS"},"17":{"USB":17,"Evdev":49,"Xkb":57,"Win":49,"Mac":45,"Code":"US_N"},"176":{"USB":176,"Evdev":207,"Xkb":215,"Win":0,"Mac":65535,"Code":"MEDIA_PLAY"},"177":{"USB":177,"Evdev":201,"Xkb":209,"Win":0,"Mac":65535,"Code":"MEDIA_PAUSE"},"178":{"USB":178,"Evdev":167,"Xkb":175,"Win":0,"Mac":65535,"Code":"MEDIA_RECORD"},"179":{"USB":179,"Evdev":208,"Xkb":216,"Win":0,"Mac":65535,"Code":"MEDIA_FAST_FORWARD"},"18":{"USB":18,"Evdev":24,"Xkb":32,"Win":24,"Mac":31,"Code":"US_O"},"180":{"USB":180,"Evdev":168,"Xkb":176,"Win":0,"Mac":65535,"Code":"MEDIA_REWIND"},"181":{"USB":181,"Evdev":163,"Xkb":171,"Win":57369,"Mac":65535,"Code":"MEDIA_TRACK_NEXT"},"182":{"USB":182,"Evdev":165,"Xkb":173,"Win":57360,"Mac":65535,"Code":"MEDIA_TRACK_PREVIOUS"},"183":{"USB":183,"Evdev":166,"Xkb":174,"Win":57380,"Mac":65535,"Code":"MEDIA_STOP"},"184":{"USB":184,"Evdev":161,"Xkb":169,"Win":57388,"Mac":65535,"Code":"EJECT"},"187":{"USB":187,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_BACKSPACE"},"19":{"USB":19,"Evdev":25,"Xkb":33,"Win":25,"Mac":35,"Code":"US_P"},"2":{"USB":2,"Evdev":0,"Xkb":0,"Win":252,"Mac":65535,"Code":"USB_POST_FAIL"},"20":{"USB":20,"Evdev":16,"Xkb":24,"Win":16,"Mac":12,"Code":"US_Q"},"205":{"USB":205,"Evdev":164,"Xkb":172,"Win":57378,"Mac":65535,"Code":"MEDIA_PLAY_PAUSE"},"207":{"USB":207,"Evdev":582,"Xkb":590,"Win":0,"Mac":65535,"Code":"SPEECH_INPUT_TOGGLE"},"208":{"USB":208,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_STORE"},"209":{"USB":209,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_RECALL"},"21":{"USB":21,"Evdev":19,"Xkb":27,"Win":19,"Mac":15,"Code":"US_R"},"210":{"USB":210,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_CLEAR"},"211":{"USB":211,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_ADD"},"212":{"USB":212,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_SUBTRACT"},"215":{"USB":215,"Evdev":118,"Xkb":126,"Win":0,"Mac":65535,"Code":"NUMPAD_SIGN_CHANGE"},"216":{"USB":216,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_CLEAR"},"217":{"USB":217,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_CLEAR_ENTRY"},"22":{"USB":22,"Evdev":31,"Xkb":39,"Win":31,"Mac":1,"Code":"US_S"},"224":{"USB":224,"Evdev":29,"Xkb":37,"Win":29,"Mac":59,"Code":"CONTROL_LEFT"},"225":{"USB":225,"Evdev":42,"Xkb":50,"Win":42,"Mac":56,"Code":"SHIFT_LEFT"},"226":{"USB":226,"Evdev":56,"Xkb":64,"Win":56,"Mac":58,"Code":"ALT_LEFT"},"227":{"USB":227,"Evdev":125,"Xkb":133,"Win":57435,"Mac":55,"Code":"META_LEFT"},"228":{"USB":228,"Evdev":97,"Xkb":105,"Win":57373,"Mac":62,"Code":"CONTROL_RIGHT"},"229":{"USB":229,"Evdev":209,"Xkb":217,"Win":0,"Mac":65535,"Code":"BASS_BOOST"},"23":{"USB":23,"Evdev":20,"Xkb":28,"Win":20,"Mac":17,"Code":"US_T"},"230":{"USB":230,"Evdev":100,"Xkb":108,"Win":57400,"Mac":61,"Code":"ALT_RIGHT"},"231":{"USB":231,"Evdev":126,"Xkb":134,"Win":57436,"Mac":54,"Code":"META_RIGHT"},"24":{"USB":24,"Evdev":22,"Xkb":30,"Win":22,"Mac":32,"Code":"US_U"},"25":{"USB":25,"Evdev":47,"Xkb":55,"Win":47,"Mac":9,"Code":"US_V"},"26":{"USB":26,"Evdev":17,"Xkb":25,"Win":17,"Mac":13,"Code":"US_W"},"27":{"USB":27,"Evdev":45,"Xkb":53,"Win":45,"Mac":7,"Code":"US_X"},"28":{"USB":28,"Evdev":21,"Xkb":29,"Win":21,"Mac":16,"Code":"US_Y"},"29":{"USB":29,"Evdev":44,"Xkb":52,"Win":44,"Mac":6,"Code":"US_Z"},"3":{"USB":3,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"USB_ERROR_UNDEFINED"},"387":{"USB":387,"Evdev":171,"Xkb":179,"Win":57453,"Mac":65535,"Code":"MEDIA_SELECT"},"388":{"USB":388,"Evdev":421,"Xkb":429,"Win":0,"Mac":65535,"Code":"LAUNCH_WORD_PROCESSOR"},"390":{"USB":390,"Evdev":423,"Xkb":431,"Win":0,"Mac":65535,"Code":"LAUNCH_SPREADSHEET"},"394":{"USB":394,"Evdev":155,"Xkb":163,"Win":57452,"Mac":65535,"Code":"LAUNCH_MAIL"},"397":{"USB":397,"Evdev":429,"Xkb":437,"Win":0,"Mac":65535,"Code":"LAUNCH_CONTACTS"},"398":{"USB":398,"Evdev":397,"Xkb":405,"Win":0,"Mac":65535,"Code":"LAUNCH_CALENDAR"},"4":{"USB":4,"Evdev":30,"Xkb":38,"Win":30,"Mac":0,"Code":"US_A"},"40":{"USB":40,"Evdev":28,"Xkb":36,"Win":28,"Mac":36,"Code":"ENTER"},"406":{"USB":406,"Evdev":150,"Xkb":158,"Win":0,"Mac":65535,"Code":"LAUNCH_INTERNET_BROWSER"},"41":{"USB":41,"Evdev":1,"Xkb":9,"Win":1,"Mac":53,"Code":"ESCAPE"},"414":{"USB":414,"Evdev":152,"Xkb":160,"Win":0,"Mac":65535,"Code":"LOCK_SCREEN"},"415":{"USB":415,"Evdev":579,"Xkb":587,"Win":0,"Mac":65535,"Code":"LAUNCH_CONTROL_PANEL"},"418":{"USB":418,"Evdev":580,"Xkb":588,"Win":0,"Mac":65535,"Code":"SELECT_TASK"},"42":{"USB":42,"Evdev":14,"Xkb":22,"Win":14,"Mac":51,"Code":"BACKSPACE"},"423":{"USB":423,"Evdev":235,"Xkb":243,"Win":0,"Mac":65535,"Code":"LAUNCH_DOCUMENTS"},"427":{"USB":427,"Evdev":432,"Xkb":440,"Win":0,"Mac":65535,"Code":"SPELL_CHECK"},"43":{"USB":43,"Evdev":15,"Xkb":23,"Win":15,"Mac":48,"Code":"TAB"},"430":{"USB":430,"Evdev":374,"Xkb":382,"Win":0,"Mac":65535,"Code":"LAUNCH_KEYBOARD_LAYOUT"},"433":{"USB":433,"Evdev":581,"Xkb":589,"Win":0,"Mac":65535,"Code":"LAUNCH_SCREEN_SAVER"},"439":{"USB":439,"Evdev":392,"Xkb":400,"Win":0,"Mac":65535,"Code":"LAUNCH_AUDIO_BROWSER"},"44":{"USB":44,"Evdev":57,"Xkb":65,"Win":57,"Mac":49,"Code":"SPACE"},"45":{"USB":45,"Evdev":12,"Xkb":20,"Win":12,"Mac":27,"Code":"MINUS"},"459":{"USB":459,"Evdev":583,"Xkb":591,"Win":0,"Mac":65535,"Code":"LAUNCH_ASSISTANT"},"46":{"USB":46,"Evdev":13,"Xkb":21,"Win":13,"Mac":24,"Code":"EQUAL"},"47":{"USB":47,"Evdev":26,"Xkb":34,"Win":26,"Mac":33,"Code":"BRACKET_LEFT"},"48":{"USB":48,"Evdev":27,"Xkb":35,"Win":27,"Mac":30,"Code":"BRACKET_RIGHT"},"49":{"USB":49,"Evdev":43,"Xkb":51,"Win":43,"Mac":42,"Code":"BACKSLASH"},"5":{"USB":5,"Evdev":48,"Xkb":56,"Win":48,"Mac":11,"Code":"US_B"},"51":{"USB":51,"Evdev":39,"Xkb":47,"Win":39,"Mac":41,"Code":"SEMICOLON"},"513":{"USB":513,"Evdev":181,"Xkb":189,"Win":0,"Mac":65535,"Code":"NEW"},"515":{"USB":515,"Evdev":206,"Xkb":214,"Win":0,"Mac":65535,"Code":"CLOSE"},"519":{"USB":519,"Evdev":234,"Xkb":242,"Win":0,"Mac":65535,"Code":"SAVE"},"52":{"USB":52,"Evdev":40,"Xkb":48,"Win":40,"Mac":39,"Code":"QUOTE"},"520":{"USB":520,"Evdev":210,"Xkb":218,"Win":0,"Mac":65535,"Code":"PRINT"},"53":{"USB":53,"Evdev":41,"Xkb":49,"Win":41,"Mac":50,"Code":"BACKQUOTE"},"54":{"USB":54,"Evdev":51,"Xkb":59,"Win":51,"Mac":43,"Code":"COMMA"},"545":{"USB":545,"Evdev":217,"Xkb":225,"Win":57445,"Mac":65535,"Code":"BROWSER_SEARCH"},"547":{"USB":547,"Evdev":172,"Xkb":180,"Win":57394,"Mac":65535,"Code":"BROWSER_HOME"},"548":{"USB":548,"Evdev":158,"Xkb":166,"Win":57450,"Mac":65535,"Code":"BROWSER_BACK"},"549":{"USB":549,"Evdev":159,"Xkb":167,"Win":57449,"Mac":65535,"Code":"BROWSER_FORWARD"},"55":{"USB":55,"Evdev":52,"Xkb":60,"Win":52,"Mac":47,"Code":"PERIOD"},"550":{"USB":550,"Evdev":128,"Xkb":136,"Win":57448,"Mac":65535,"Code":"BROWSER_STOP"},"551":{"USB":551,"Evdev":173,"Xkb":181,"Win":57447,"Mac":65535,"Code":"BROWSER_REFRESH"},"554":{"USB":554,"Evdev":156,"Xkb":164,"Win":57446,"Mac":65535,"Code":"BROWSER_FAVORITES"},"557":{"USB":557,"Evdev":418,"Xkb":426,"Win":0,"Mac":65535,"Code":"ZOOM_IN"},"558":{"USB":558,"Evdev":419,"Xkb":427,"Win":0,"Mac":65535,"Code":"ZOOM_OUT"},"56":{"USB":56,"Evdev":53,"Xkb":61,"Win":53,"Mac":44,"Code":"SLASH"},"562":{"USB":562,"Evdev":372,"Xkb":380,"Win":0,"Mac":65535,"Code":"ZOOM_TOGGLE"},"57":{"USB":57,"Evdev":58,"Xkb":66,"Win":58,"Mac":57,"Code":"CAPS_LOCK"},"6":{"USB":6,"Evdev":46,"Xkb":54,"Win":46,"Mac":8,"Code":"US_C"},"633":{"USB":633,"Evdev":182,"Xkb":190,"Win":0,"Mac":65535,"Code":"REDO"},"649":{"USB":649,"Evdev":232,"Xkb":240,"Win":0,"Mac":65535,"Code":"MAIL_REPLY"},"651":{"USB":651,"Evdev":233,"Xkb":241,"Win":0,"Mac":65535,"Code":"MAIL_FORWARD"},"652":{"USB":652,"Evdev":231,"Xkb":239,"Win":0,"Mac":65535,"Code":"MAIL_SEND"},"669":{"USB":669,"Evdev":584,"Xkb":592,"Win":0,"Mac":65535,"Code":"KEYBOARD_LAYOUT_SELECT"},"671":{"USB":671,"Evdev":120,"Xkb":128,"Win":0,"Mac":65535,"Code":"SHOW_ALL_WINDOWS"},"7":{"USB":7,"Evdev":32,"Xkb":40,"Win":32,"Mac":2,"Code":"US_D"},"70":{"USB":70,"Evdev":99,"Xkb":107,"Win":57399,"Mac":65535,"Code":"PRINT_SCREEN"},"71":{"USB":71,"Evdev":70,"Xkb":78,"Win":70,"Mac":65535,"Code":"SCROLL_LOCK"},"72":{"USB":72,"Evdev":119,"Xkb":127,"Win":69,"Mac":65535,"Code":"PAUSE"},"73":{"USB":73,"Evdev":110,"Xkb":118,"Win":57426,"Mac":114,"Code":"INSERT"},"74":{"USB":74,"Evdev":102,"Xkb":110,"Win":57415,"Mac":115,"Code":"HOME"},"75":{"USB":75,"Evdev":104,"Xkb":112,"Win":57417,"Mac":116,"Code":"PAGE_UP"},"76":{"USB":76,"Evdev":111,"Xkb":119,"Win":57427,"Mac":117,"Code":"DEL"},"77":{"USB":77,"Evdev":107,"Xkb":115,"Win":57423,"Mac":119,"Code":"END"},"78":{"USB":78,"Evdev":109,"Xkb":117,"Win":57425,"Mac":121,"Code":"PAGE_DOWN"},"79":{"USB":79,"Evdev":106,"Xkb":114,"Win":57421,"Mac":124,"Code":"ARROW_RIGHT"},"8":{"USB":8,"Evdev":18,"Xkb":26,"Win":18,"Mac":14,"Code":"US_E"},"80":{"USB":80,"Evdev":105,"Xkb":113,"Win":57419,"Mac":123,"Code":"ARROW_LEFT"},"81":{"USB":81,"Evdev":108,"Xkb":116,"Win":57424,"Mac":125,"Code":"ARROW_DOWN"},"82":{"USB":82,"Evdev":103,"Xkb":111,"Win":57416,"Mac":126,"Code":"ARROW_UP"},"83":{"USB":83,"Evdev":69,"Xkb":77,"Win":57413,"Mac":71,"Code":"NUM_LOCK"},"84":{"USB":84,"Evdev":98,"Xkb":106,"Win":57397,"Mac":75,"Code":"NUMPAD_DIVIDE"},"85":{"USB":85,"Evdev":55,"Xkb":63,"Win":55,"Mac":67,"Code":"NUMPAD_MULTIPLY"},"86":{"USB":86,"Evdev":74,"Xkb":82,"Win":74,"Mac":78,"Code":"NUMPAD_SUBTRACT"},"87":{"USB":87,"Evdev":78,"Xkb":86,"Win":78,"Mac":69,"Code":"NUMPAD_ADD"},"88":{"USB":88,"Evdev":96,"Xkb":104,"Win":57372,"Mac":76,"Code":"NUMPAD_ENTER"},"9":{"USB":9,"Evdev":33,"Xkb":41,"Win":33,"Mac":3,"Code":"US_F"},"96":{"USB":96,"Evdev":358,"Xkb":366,"Win":0,"Mac":65535,"Code":"INFO"},"97":{"USB":97,"Evdev":370,"Xkb":378,"Win":0,"Mac":65535,"Code":"CLOSED_CAPTION_TOGGLE"},"99":{"USB":99,"Evdev":83,"Xkb":91,"Win":83,"Mac":65,"Code":"NUMPAD_DECIMAL"}},"EVDEV":{"0":{"USB":217,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_CLEAR_ENTRY"},"1":{"USB":41,"Evdev":1,"Xkb":9,"Win":1,"Mac":53,"Code":"ESCAPE"},"100":{"USB":230,"Evdev":100,"Xkb":108,"Win":57400,"Mac":61,"Code":"ALT_RIGHT"},"102":{"USB":74,"Evdev":102,"Xkb":110,"Win":57415,"Mac":115,"Code":"HOME"},"103":{"USB":82,"Evdev":103,"Xkb":111,"Win":57416,"Mac":126,"Code":"ARROW_UP"},"104":{"USB":75,"Evdev":104,"Xkb":112,"Win":57417,"Mac":116,"Code":"PAGE_UP"},"105":{"USB":80,"Evdev":105,"Xkb":113,"Win":57419,"Mac":123,"Code":"ARROW_LEFT"},"106":{"USB":79,"Evdev":106,"Xkb":114,"Win":57421,"Mac":124,"Code":"ARROW_RIGHT"},"107":{"USB":77,"Evdev":107,"Xkb":115,"Win":57423,"Mac":119,"Code":"END"},"108":{"USB":81,"Evdev":108,"Xkb":116,"Win":57424,"Mac":125,"Code":"ARROW_DOWN"},"109":{"USB":78,"Evdev":109,"Xkb":117,"Win":57425,"Mac":121,"Code":"PAGE_DOWN"},"110":{"USB":73,"Evdev":110,"Xkb":118,"Win":57426,"Mac":114,"Code":"INSERT"},"111":{"USB":76,"Evdev":111,"Xkb":119,"Win":57427,"Mac":117,"Code":"DEL"},"113":{"USB":127,"Evdev":113,"Xkb":121,"Win":57376,"Mac":74,"Code":"VOLUME_MUTE"},"114":{"USB":129,"Evdev":114,"Xkb":122,"Win":57390,"Mac":73,"Code":"VOLUME_DOWN"},"115":{"USB":128,"Evdev":115,"Xkb":123,"Win":57392,"Mac":72,"Code":"VOLUME_UP"},"116":{"USB":102,"Evdev":116,"Xkb":124,"Win":57438,"Mac":65535,"Code":"POWER"},"117":{"USB":103,"Evdev":117,"Xkb":125,"Win":89,"Mac":81,"Code":"NUMPAD_EQUAL"},"118":{"USB":215,"Evdev":118,"Xkb":126,"Win":0,"Mac":65535,"Code":"NUMPAD_SIGN_CHANGE"},"119":{"USB":72,"Evdev":119,"Xkb":127,"Win":69,"Mac":65535,"Code":"PAUSE"},"12":{"USB":45,"Evdev":12,"Xkb":20,"Win":12,"Mac":27,"Code":"MINUS"},"120":{"USB":671,"Evdev":120,"Xkb":128,"Win":0,"Mac":65535,"Code":"SHOW_ALL_WINDOWS"},"121":{"USB":133,"Evdev":121,"Xkb":129,"Win":126,"Mac":95,"Code":"NUMPAD_COMMA"},"124":{"USB":137,"Evdev":124,"Xkb":132,"Win":125,"Mac":93,"Code":"INTL_YEN"},"125":{"USB":227,"Evdev":125,"Xkb":133,"Win":57435,"Mac":55,"Code":"META_LEFT"},"126":{"USB":231,"Evdev":126,"Xkb":134,"Win":57436,"Mac":54,"Code":"META_RIGHT"},"127":{"USB":101,"Evdev":127,"Xkb":135,"Win":57437,"Mac":110,"Code":"CONTEXT_MENU"},"128":{"USB":550,"Evdev":128,"Xkb":136,"Win":57448,"Mac":65535,"Code":"BROWSER_STOP"},"129":{"USB":121,"Evdev":129,"Xkb":137,"Win":0,"Mac":65535,"Code":"AGAIN"},"13":{"USB":46,"Evdev":13,"Xkb":21,"Win":13,"Mac":24,"Code":"EQUAL"},"131":{"USB":122,"Evdev":131,"Xkb":139,"Win":57352,"Mac":65535,"Code":"UNDO"},"132":{"USB":119,"Evdev":132,"Xkb":140,"Win":0,"Mac":65535,"Code":"SELECT"},"133":{"USB":124,"Evdev":133,"Xkb":141,"Win":57368,"Mac":65535,"Code":"COPY"},"134":{"USB":116,"Evdev":134,"Xkb":142,"Win":0,"Mac":65535,"Code":"OPEN"},"135":{"USB":125,"Evdev":135,"Xkb":143,"Win":57354,"Mac":65535,"Code":"PASTE"},"136":{"USB":126,"Evdev":136,"Xkb":144,"Win":0,"Mac":65535,"Code":"FIND"},"137":{"USB":123,"Evdev":137,"Xkb":145,"Win":57367,"Mac":65535,"Code":"CUT"},"138":{"USB":117,"Evdev":138,"Xkb":146,"Win":57403,"Mac":65535,"Code":"HELP"},"14":{"USB":42,"Evdev":14,"Xkb":22,"Win":14,"Mac":51,"Code":"BACKSPACE"},"142":{"USB":130,"Evdev":142,"Xkb":150,"Win":57439,"Mac":65535,"Code":"SLEEP"},"143":{"USB":131,"Evdev":143,"Xkb":151,"Win":57443,"Mac":65535,"Code":"WAKE_UP"},"15":{"USB":43,"Evdev":15,"Xkb":23,"Win":15,"Mac":48,"Code":"TAB"},"150":{"USB":406,"Evdev":150,"Xkb":158,"Win":0,"Mac":65535,"Code":"LAUNCH_INTERNET_BROWSER"},"152":{"USB":414,"Evdev":152,"Xkb":160,"Win":0,"Mac":65535,"Code":"LOCK_SCREEN"},"155":{"USB":394,"Evdev":155,"Xkb":163,"Win":57452,"Mac":65535,"Code":"LAUNCH_MAIL"},"156":{"USB":554,"Evdev":156,"Xkb":164,"Win":57446,"Mac":65535,"Code":"BROWSER_FAVORITES"},"158":{"USB":548,"Evdev":158,"Xkb":166,"Win":57450,"Mac":65535,"Code":"BROWSER_BACK"},"159":{"USB":549,"Evdev":159,"Xkb":167,"Win":57449,"Mac":65535,"Code":"BROWSER_FORWARD"},"16":{"USB":20,"Evdev":16,"Xkb":24,"Win":16,"Mac":12,"Code":"US_Q"},"161":{"USB":184,"Evdev":161,"Xkb":169,"Win":57388,"Mac":65535,"Code":"EJECT"},"163":{"USB":181,"Evdev":163,"Xkb":171,"Win":57369,"Mac":65535,"Code":"MEDIA_TRACK_NEXT"},"164":{"USB":205,"Evdev":164,"Xkb":172,"Win":57378,"Mac":65535,"Code":"MEDIA_PLAY_PAUSE"},"165":{"USB":182,"Evdev":165,"Xkb":173,"Win":57360,"Mac":65535,"Code":"MEDIA_TRACK_PREVIOUS"},"166":{"USB":183,"Evdev":166,"Xkb":174,"Win":57380,"Mac":65535,"Code":"MEDIA_STOP"},"167":{"USB":178,"Evdev":167,"Xkb":175,"Win":0,"Mac":65535,"Code":"MEDIA_RECORD"},"168":{"USB":180,"Evdev":168,"Xkb":176,"Win":0,"Mac":65535,"Code":"MEDIA_REWIND"},"169":{"USB":140,"Evdev":169,"Xkb":177,"Win":0,"Mac":65535,"Code":"LAUNCH_PHONE"},"17":{"USB":26,"Evdev":17,"Xkb":25,"Win":17,"Mac":13,"Code":"US_W"},"171":{"USB":387,"Evdev":171,"Xkb":179,"Win":57453,"Mac":65535,"Code":"MEDIA_SELECT"},"172":{"USB":547,"Evdev":172,"Xkb":180,"Win":57394,"Mac":65535,"Code":"BROWSER_HOME"},"173":{"USB":551,"Evdev":173,"Xkb":181,"Win":57447,"Mac":65535,"Code":"BROWSER_REFRESH"},"174":{"USB":148,"Evdev":174,"Xkb":182,"Win":0,"Mac":65535,"Code":"EXIT"},"179":{"USB":182,"Evdev":179,"Xkb":187,"Win":0,"Mac":65535,"Code":"NUMPAD_PAREN_LEFT"},"18":{"USB":8,"Evdev":18,"Xkb":26,"Win":18,"Mac":14,"Code":"US_E"},"180":{"USB":183,"Evdev":180,"Xkb":188,"Win":0,"Mac":65535,"Code":"NUMPAD_PAREN_RIGHT"},"181":{"USB":513,"Evdev":181,"Xkb":189,"Win":0,"Mac":65535,"Code":"NEW"},"182":{"USB":633,"Evdev":182,"Xkb":190,"Win":0,"Mac":65535,"Code":"REDO"},"19":{"USB":21,"Evdev":19,"Xkb":27,"Win":19,"Mac":15,"Code":"US_R"},"20":{"USB":23,"Evdev":20,"Xkb":28,"Win":20,"Mac":17,"Code":"US_T"},"201":{"USB":177,"Evdev":201,"Xkb":209,"Win":0,"Mac":65535,"Code":"MEDIA_PAUSE"},"206":{"USB":515,"Evdev":206,"Xkb":214,"Win":0,"Mac":65535,"Code":"CLOSE"},"207":{"USB":176,"Evdev":207,"Xkb":215,"Win":0,"Mac":65535,"Code":"MEDIA_PLAY"},"208":{"USB":179,"Evdev":208,"Xkb":216,"Win":0,"Mac":65535,"Code":"MEDIA_FAST_FORWARD"},"209":{"USB":229,"Evdev":209,"Xkb":217,"Win":0,"Mac":65535,"Code":"BASS_BOOST"},"21":{"USB":28,"Evdev":21,"Xkb":29,"Win":21,"Mac":16,"Code":"US_Y"},"210":{"USB":520,"Evdev":210,"Xkb":218,"Win":0,"Mac":65535,"Code":"PRINT"},"217":{"USB":545,"Evdev":217,"Xkb":225,"Win":57445,"Mac":65535,"Code":"BROWSER_SEARCH"},"22":{"USB":24,"Evdev":22,"Xkb":30,"Win":22,"Mac":32,"Code":"US_U"},"224":{"USB":112,"Evdev":224,"Xkb":232,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_DOWN"},"225":{"USB":111,"Evdev":225,"Xkb":233,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_UP"},"227":{"USB":181,"Evdev":227,"Xkb":235,"Win":0,"Mac":65535,"Code":"DISPLAY_TOGGLE_INT_EXT"},"229":{"USB":122,"Evdev":229,"Xkb":237,"Win":0,"Mac":65535,"Code":"KBD_ILLUM_DOWN"},"23":{"USB":12,"Evdev":23,"Xkb":31,"Win":23,"Mac":34,"Code":"US_I"},"230":{"USB":121,"Evdev":230,"Xkb":238,"Win":0,"Mac":65535,"Code":"KBD_ILLUM_UP"},"231":{"USB":652,"Evdev":231,"Xkb":239,"Win":0,"Mac":65535,"Code":"MAIL_SEND"},"232":{"USB":649,"Evdev":232,"Xkb":240,"Win":0,"Mac":65535,"Code":"MAIL_REPLY"},"233":{"USB":651,"Evdev":233,"Xkb":241,"Win":0,"Mac":65535,"Code":"MAIL_FORWARD"},"234":{"USB":519,"Evdev":234,"Xkb":242,"Win":0,"Mac":65535,"Code":"SAVE"},"235":{"USB":423,"Evdev":235,"Xkb":243,"Win":0,"Mac":65535,"Code":"LAUNCH_DOCUMENTS"},"24":{"USB":18,"Evdev":24,"Xkb":32,"Win":24,"Mac":31,"Code":"US_O"},"244":{"USB":117,"Evdev":244,"Xkb":252,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_AUTO"},"25":{"USB":19,"Evdev":25,"Xkb":33,"Win":25,"Mac":35,"Code":"US_P"},"26":{"USB":47,"Evdev":26,"Xkb":34,"Win":26,"Mac":33,"Code":"BRACKET_LEFT"},"27":{"USB":48,"Evdev":27,"Xkb":35,"Win":27,"Mac":30,"Code":"BRACKET_RIGHT"},"28":{"USB":40,"Evdev":28,"Xkb":36,"Win":28,"Mac":36,"Code":"ENTER"},"29":{"USB":224,"Evdev":29,"Xkb":37,"Win":29,"Mac":59,"Code":"CONTROL_LEFT"},"30":{"USB":4,"Evdev":30,"Xkb":38,"Win":30,"Mac":0,"Code":"US_A"},"31":{"USB":22,"Evdev":31,"Xkb":39,"Win":31,"Mac":1,"Code":"US_S"},"32":{"USB":7,"Evdev":32,"Xkb":40,"Win":32,"Mac":2,"Code":"US_D"},"33":{"USB":9,"Evdev":33,"Xkb":41,"Win":33,"Mac":3,"Code":"US_F"},"34":{"USB":10,"Evdev":34,"Xkb":42,"Win":34,"Mac":5,"Code":"US_G"},"35":{"USB":11,"Evdev":35,"Xkb":43,"Win":35,"Mac":4,"Code":"US_H"},"358":{"USB":96,"Evdev":358,"Xkb":366,"Win":0,"Mac":65535,"Code":"INFO"},"36":{"USB":13,"Evdev":36,"Xkb":44,"Win":36,"Mac":38,"Code":"US_J"},"362":{"USB":141,"Evdev":362,"Xkb":370,"Win":0,"Mac":65535,"Code":"PROGRAM_GUIDE"},"37":{"USB":14,"Evdev":37,"Xkb":45,"Win":37,"Mac":40,"Code":"US_K"},"370":{"USB":97,"Evdev":370,"Xkb":378,"Win":0,"Mac":65535,"Code":"CLOSED_CAPTION_TOGGLE"},"372":{"USB":562,"Evdev":372,"Xkb":380,"Win":0,"Mac":65535,"Code":"ZOOM_TOGGLE"},"374":{"USB":430,"Evdev":374,"Xkb":382,"Win":0,"Mac":65535,"Code":"LAUNCH_KEYBOARD_LAYOUT"},"38":{"USB":15,"Evdev":38,"Xkb":46,"Win":38,"Mac":37,"Code":"US_L"},"39":{"USB":51,"Evdev":39,"Xkb":47,"Win":39,"Mac":41,"Code":"SEMICOLON"},"392":{"USB":439,"Evdev":392,"Xkb":400,"Win":0,"Mac":65535,"Code":"LAUNCH_AUDIO_BROWSER"},"397":{"USB":398,"Evdev":397,"Xkb":405,"Win":0,"Mac":65535,"Code":"LAUNCH_CALENDAR"},"40":{"USB":52,"Evdev":40,"Xkb":48,"Win":40,"Mac":39,"Code":"QUOTE"},"405":{"USB":131,"Evdev":405,"Xkb":413,"Win":0,"Mac":65535,"Code":"MEDIA_LAST"},"41":{"USB":53,"Evdev":41,"Xkb":49,"Win":41,"Mac":50,"Code":"BACKQUOTE"},"410":{"USB":156,"Evdev":410,"Xkb":418,"Win":0,"Mac":65535,"Code":"CHANNEL_UP"},"411":{"USB":157,"Evdev":411,"Xkb":419,"Win":0,"Mac":65535,"Code":"CHANNEL_DOWN"},"418":{"USB":557,"Evdev":418,"Xkb":426,"Win":0,"Mac":65535,"Code":"ZOOM_IN"},"419":{"USB":558,"Evdev":419,"Xkb":427,"Win":0,"Mac":65535,"Code":"ZOOM_OUT"},"42":{"USB":225,"Evdev":42,"Xkb":50,"Win":42,"Mac":56,"Code":"SHIFT_LEFT"},"421":{"USB":388,"Evdev":421,"Xkb":429,"Win":0,"Mac":65535,"Code":"LAUNCH_WORD_PROCESSOR"},"423":{"USB":390,"Evdev":423,"Xkb":431,"Win":0,"Mac":65535,"Code":"LAUNCH_SPREADSHEET"},"429":{"USB":397,"Evdev":429,"Xkb":437,"Win":0,"Mac":65535,"Code":"LAUNCH_CONTACTS"},"43":{"USB":49,"Evdev":43,"Xkb":51,"Win":43,"Mac":42,"Code":"BACKSLASH"},"431":{"USB":114,"Evdev":431,"Xkb":439,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_TOGGLE"},"432":{"USB":427,"Evdev":432,"Xkb":440,"Win":0,"Mac":65535,"Code":"SPELL_CHECK"},"44":{"USB":29,"Evdev":44,"Xkb":52,"Win":44,"Mac":6,"Code":"US_Z"},"45":{"USB":27,"Evdev":45,"Xkb":53,"Win":45,"Mac":7,"Code":"US_X"},"46":{"USB":6,"Evdev":46,"Xkb":54,"Win":46,"Mac":8,"Code":"US_C"},"47":{"USB":25,"Evdev":47,"Xkb":55,"Win":47,"Mac":9,"Code":"US_V"},"48":{"USB":5,"Evdev":48,"Xkb":56,"Win":48,"Mac":11,"Code":"US_B"},"49":{"USB":17,"Evdev":49,"Xkb":57,"Win":49,"Mac":45,"Code":"US_N"},"50":{"USB":16,"Evdev":50,"Xkb":58,"Win":50,"Mac":46,"Code":"US_M"},"51":{"USB":54,"Evdev":51,"Xkb":59,"Win":51,"Mac":43,"Code":"COMMA"},"52":{"USB":55,"Evdev":52,"Xkb":60,"Win":52,"Mac":47,"Code":"PERIOD"},"53":{"USB":56,"Evdev":53,"Xkb":61,"Win":53,"Mac":44,"Code":"SLASH"},"54":{"USB":229,"Evdev":54,"Xkb":62,"Win":54,"Mac":60,"Code":"SHIFT_RIGHT"},"55":{"USB":85,"Evdev":55,"Xkb":63,"Win":55,"Mac":67,"Code":"NUMPAD_MULTIPLY"},"56":{"USB":226,"Evdev":56,"Xkb":64,"Win":56,"Mac":58,"Code":"ALT_LEFT"},"57":{"USB":44,"Evdev":57,"Xkb":65,"Win":57,"Mac":49,"Code":"SPACE"},"579":{"USB":415,"Evdev":579,"Xkb":587,"Win":0,"Mac":65535,"Code":"LAUNCH_CONTROL_PANEL"},"58":{"USB":57,"Evdev":58,"Xkb":66,"Win":58,"Mac":57,"Code":"CAPS_LOCK"},"580":{"USB":418,"Evdev":580,"Xkb":588,"Win":0,"Mac":65535,"Code":"SELECT_TASK"},"581":{"USB":433,"Evdev":581,"Xkb":589,"Win":0,"Mac":65535,"Code":"LAUNCH_SCREEN_SAVER"},"582":{"USB":207,"Evdev":582,"Xkb":590,"Win":0,"Mac":65535,"Code":"SPEECH_INPUT_TOGGLE"},"583":{"USB":459,"Evdev":583,"Xkb":591,"Win":0,"Mac":65535,"Code":"LAUNCH_ASSISTANT"},"584":{"USB":669,"Evdev":584,"Xkb":592,"Win":0,"Mac":65535,"Code":"KEYBOARD_LAYOUT_SELECT"},"592":{"USB":115,"Evdev":592,"Xkb":600,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_MINIMIUM"},"593":{"USB":116,"Evdev":593,"Xkb":601,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_MAXIMUM"},"633":{"USB":23,"Evdev":633,"Xkb":641,"Win":0,"Mac":65535,"Code":"PRIVACY_SCREEN_TOGGLE"},"69":{"USB":83,"Evdev":69,"Xkb":77,"Win":57413,"Mac":71,"Code":"NUM_LOCK"},"70":{"USB":71,"Evdev":70,"Xkb":78,"Win":70,"Mac":65535,"Code":"SCROLL_LOCK"},"74":{"USB":86,"Evdev":74,"Xkb":82,"Win":74,"Mac":78,"Code":"NUMPAD_SUBTRACT"},"78":{"USB":87,"Evdev":78,"Xkb":86,"Win":78,"Mac":69,"Code":"NUMPAD_ADD"},"83":{"USB":99,"Evdev":83,"Xkb":91,"Win":83,"Mac":65,"Code":"NUMPAD_DECIMAL"},"86":{"USB":100,"Evdev":86,"Xkb":94,"Win":86,"Mac":10,"Code":"INTL_BACKSLASH"},"89":{"USB":135,"Evdev":89,"Xkb":97,"Win":115,"Mac":94,"Code":"INTL_RO"},"92":{"USB":138,"Evdev":92,"Xkb":100,"Win":121,"Mac":65535,"Code":"CONVERT"},"93":{"USB":136,"Evdev":93,"Xkb":101,"Win":112,"Mac":65535,"Code":"KANA_MODE"},"94":{"USB":139,"Evdev":94,"Xkb":102,"Win":123,"Mac":65535,"Code":"NON_CONVERT"},"96":{"USB":88,"Evdev":96,"Xkb":104,"Win":57372,"Mac":76,"Code":"NUMPAD_ENTER"},"97":{"USB":228,"Evdev":97,"Xkb":105,"Win":57373,"Mac":62,"Code":"CONTROL_RIGHT"},"98":{"USB":84,"Evdev":98,"Xkb":106,"Win":57397,"Mac":75,"Code":"NUMPAD_DIVIDE"},"99":{"USB":70,"Evdev":99,"Xkb":107,"Win":57399,"Mac":65535,"Code":"PRINT_SCREEN"}},"XKB":{"0":{"USB":217,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_CLEAR_ENTRY"},"100":{"USB":138,"Evdev":92,"Xkb":100,"Win":121,"Mac":65535,"Code":"CONVERT"},"101":{"USB":136,"Evdev":93,"Xkb":101,"Win":112,"Mac":65535,"Code":"KANA_MODE"},"102":{"USB":139,"Evdev":94,"Xkb":102,"Win":123,"Mac":65535,"Code":"NON_CONVERT"},"104":{"USB":88,"Evdev":96,"Xkb":104,"Win":57372,"Mac":76,"Code":"NUMPAD_ENTER"},"105":{"USB":228,"Evdev":97,"Xkb":105,"Win":57373,"Mac":62,"Code":"CONTROL_RIGHT"},"106":{"USB":84,"Evdev":98,"Xkb":106,"Win":57397,"Mac":75,"Code":"NUMPAD_DIVIDE"},"107":{"USB":70,"Evdev":99,"Xkb":107,"Win":57399,"Mac":65535,"Code":"PRINT_SCREEN"},"108":{"USB":230,"Evdev":100,"Xkb":108,"Win":57400,"Mac":61,"Code":"ALT_RIGHT"},"110":{"USB":74,"Evdev":102,"Xkb":110,"Win":57415,"Mac":115,"Code":"HOME"},"111":{"USB":82,"Evdev":103,"Xkb":111,"Win":57416,"Mac":126,"Code":"ARROW_UP"},"112":{"USB":75,"Evdev":104,"Xkb":112,"Win":57417,"Mac":116,"Code":"PAGE_UP"},"113":{"USB":80,"Evdev":105,"Xkb":113,"Win":57419,"Mac":123,"Code":"ARROW_LEFT"},"114":{"USB":79,"Evdev":106,"Xkb":114,"Win":57421,"Mac":124,"Code":"ARROW_RIGHT"},"115":{"USB":77,"Evdev":107,"Xkb":115,"Win":57423,"Mac":119,"Code":"END"},"116":{"USB":81,"Evdev":108,"Xkb":116,"Win":57424,"Mac":125,"Code":"ARROW_DOWN"},"117":{"USB":78,"Evdev":109,"Xkb":117,"Win":57425,"Mac":121,"Code":"PAGE_DOWN"},"118":{"USB":73,"Evdev":110,"Xkb":118,"Win":57426,"Mac":114,"Code":"INSERT"},"119":{"USB":76,"Evdev":111,"Xkb":119,"Win":57427,"Mac":117,"Code":"DEL"},"121":{"USB":127,"Evdev":113,"Xkb":121,"Win":57376,"Mac":74,"Code":"VOLUME_MUTE"},"122":{"USB":129,"Evdev":114,"Xkb":122,"Win":57390,"Mac":73,"Code":"VOLUME_DOWN"},"123":{"USB":128,"Evdev":115,"Xkb":123,"Win":57392,"Mac":72,"Code":"VOLUME_UP"},"124":{"USB":102,"Evdev":116,"Xkb":124,"Win":57438,"Mac":65535,"Code":"POWER"},"125":{"USB":103,"Evdev":117,"Xkb":125,"Win":89,"Mac":81,"Code":"NUMPAD_EQUAL"},"126":{"USB":215,"Evdev":118,"Xkb":126,"Win":0,"Mac":65535,"Code":"NUMPAD_SIGN_CHANGE"},"127":{"USB":72,"Evdev":119,"Xkb":127,"Win":69,"Mac":65535,"Code":"PAUSE"},"128":{"USB":671,"Evdev":120,"Xkb":128,"Win":0,"Mac":65535,"Code":"SHOW_ALL_WINDOWS"},"129":{"USB":133,"Evdev":121,"Xkb":129,"Win":126,"Mac":95,"Code":"NUMPAD_COMMA"},"132":{"USB":137,"Evdev":124,"Xkb":132,"Win":125,"Mac":93,"Code":"INTL_YEN"},"133":{"USB":227,"Evdev":125,"Xkb":133,"Win":57435,"Mac":55,"Code":"META_LEFT"},"134":{"USB":231,"Evdev":126,"Xkb":134,"Win":57436,"Mac":54,"Code":"META_RIGHT"},"135":{"USB":101,"Evdev":127,"Xkb":135,"Win":57437,"Mac":110,"Code":"CONTEXT_MENU"},"136":{"USB":550,"Evdev":128,"Xkb":136,"Win":57448,"Mac":65535,"Code":"BROWSER_STOP"},"137":{"USB":121,"Evdev":129,"Xkb":137,"Win":0,"Mac":65535,"Code":"AGAIN"},"139":{"USB":122,"Evdev":131,"Xkb":139,"Win":57352,"Mac":65535,"Code":"UNDO"},"140":{"USB":119,"Evdev":132,"Xkb":140,"Win":0,"Mac":65535,"Code":"SELECT"},"141":{"USB":124,"Evdev":133,"Xkb":141,"Win":57368,"Mac":65535,"Code":"COPY"},"142":{"USB":116,"Evdev":134,"Xkb":142,"Win":0,"Mac":65535,"Code":"OPEN"},"143":{"USB":125,"Evdev":135,"Xkb":143,"Win":57354,"Mac":65535,"Code":"PASTE"},"144":{"USB":126,"Evdev":136,"Xkb":144,"Win":0,"Mac":65535,"Code":"FIND"},"145":{"USB":123,"Evdev":137,"Xkb":145,"Win":57367,"Mac":65535,"Code":"CUT"},"146":{"USB":117,"Evdev":138,"Xkb":146,"Win":57403,"Mac":65535,"Code":"HELP"},"150":{"USB":130,"Evdev":142,"Xkb":150,"Win":57439,"Mac":65535,"Code":"SLEEP"},"151":{"USB":131,"Evdev":143,"Xkb":151,"Win":57443,"Mac":65535,"Code":"WAKE_UP"},"158":{"USB":406,"Evdev":150,"Xkb":158,"Win":0,"Mac":65535,"Code":"LAUNCH_INTERNET_BROWSER"},"160":{"USB":414,"Evdev":152,"Xkb":160,"Win":0,"Mac":65535,"Code":"LOCK_SCREEN"},"163":{"USB":394,"Evdev":155,"Xkb":163,"Win":57452,"Mac":65535,"Code":"LAUNCH_MAIL"},"164":{"USB":554,"Evdev":156,"Xkb":164,"Win":57446,"Mac":65535,"Code":"BROWSER_FAVORITES"},"166":{"USB":548,"Evdev":158,"Xkb":166,"Win":57450,"Mac":65535,"Code":"BROWSER_BACK"},"167":{"USB":549,"Evdev":159,"Xkb":167,"Win":57449,"Mac":65535,"Code":"BROWSER_FORWARD"},"169":{"USB":184,"Evdev":161,"Xkb":169,"Win":57388,"Mac":65535,"Code":"EJECT"},"171":{"USB":181,"Evdev":163,"Xkb":171,"Win":57369,"Mac":65535,"Code":"MEDIA_TRACK_NEXT"},"172":{"USB":205,"Evdev":164,"Xkb":172,"Win":57378,"Mac":65535,"Code":"MEDIA_PLAY_PAUSE"},"173":{"USB":182,"Evdev":165,"Xkb":173,"Win":57360,"Mac":65535,"Code":"MEDIA_TRACK_PREVIOUS"},"174":{"USB":183,"Evdev":166,"Xkb":174,"Win":57380,"Mac":65535,"Code":"MEDIA_STOP"},"175":{"USB":178,"Evdev":167,"Xkb":175,"Win":0,"Mac":65535,"Code":"MEDIA_RECORD"},"176":{"USB":180,"Evdev":168,"Xkb":176,"Win":0,"Mac":65535,"Code":"MEDIA_REWIND"},"177":{"USB":140,"Evdev":169,"Xkb":177,"Win":0,"Mac":65535,"Code":"LAUNCH_PHONE"},"179":{"USB":387,"Evdev":171,"Xkb":179,"Win":57453,"Mac":65535,"Code":"MEDIA_SELECT"},"180":{"USB":547,"Evdev":172,"Xkb":180,"Win":57394,"Mac":65535,"Code":"BROWSER_HOME"},"181":{"USB":551,"Evdev":173,"Xkb":181,"Win":57447,"Mac":65535,"Code":"BROWSER_REFRESH"},"182":{"USB":148,"Evdev":174,"Xkb":182,"Win":0,"Mac":65535,"Code":"EXIT"},"187":{"USB":182,"Evdev":179,"Xkb":187,"Win":0,"Mac":65535,"Code":"NUMPAD_PAREN_LEFT"},"188":{"USB":183,"Evdev":180,"Xkb":188,"Win":0,"Mac":65535,"Code":"NUMPAD_PAREN_RIGHT"},"189":{"USB":513,"Evdev":181,"Xkb":189,"Win":0,"Mac":65535,"Code":"NEW"},"190":{"USB":633,"Evdev":182,"Xkb":190,"Win":0,"Mac":65535,"Code":"REDO"},"20":{"USB":45,"Evdev":12,"Xkb":20,"Win":12,"Mac":27,"Code":"MINUS"},"209":{"USB":177,"Evdev":201,"Xkb":209,"Win":0,"Mac":65535,"Code":"MEDIA_PAUSE"},"21":{"USB":46,"Evdev":13,"Xkb":21,"Win":13,"Mac":24,"Code":"EQUAL"},"214":{"USB":515,"Evdev":206,"Xkb":214,"Win":0,"Mac":65535,"Code":"CLOSE"},"215":{"USB":176,"Evdev":207,"Xkb":215,"Win":0,"Mac":65535,"Code":"MEDIA_PLAY"},"216":{"USB":179,"Evdev":208,"Xkb":216,"Win":0,"Mac":65535,"Code":"MEDIA_FAST_FORWARD"},"217":{"USB":229,"Evdev":209,"Xkb":217,"Win":0,"Mac":65535,"Code":"BASS_BOOST"},"218":{"USB":520,"Evdev":210,"Xkb":218,"Win":0,"Mac":65535,"Code":"PRINT"},"22":{"USB":42,"Evdev":14,"Xkb":22,"Win":14,"Mac":51,"Code":"BACKSPACE"},"225":{"USB":545,"Evdev":217,"Xkb":225,"Win":57445,"Mac":65535,"Code":"BROWSER_SEARCH"},"23":{"USB":43,"Evdev":15,"Xkb":23,"Win":15,"Mac":48,"Code":"TAB"},"232":{"USB":112,"Evdev":224,"Xkb":232,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_DOWN"},"233":{"USB":111,"Evdev":225,"Xkb":233,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_UP"},"235":{"USB":181,"Evdev":227,"Xkb":235,"Win":0,"Mac":65535,"Code":"DISPLAY_TOGGLE_INT_EXT"},"237":{"USB":122,"Evdev":229,"Xkb":237,"Win":0,"Mac":65535,"Code":"KBD_ILLUM_DOWN"},"238":{"USB":121,"Evdev":230,"Xkb":238,"Win":0,"Mac":65535,"Code":"KBD_ILLUM_UP"},"239":{"USB":652,"Evdev":231,"Xkb":239,"Win":0,"Mac":65535,"Code":"MAIL_SEND"},"24":{"USB":20,"Evdev":16,"Xkb":24,"Win":16,"Mac":12,"Code":"US_Q"},"240":{"USB":649,"Evdev":232,"Xkb":240,"Win":0,"Mac":65535,"Code":"MAIL_REPLY"},"241":{"USB":651,"Evdev":233,"Xkb":241,"Win":0,"Mac":65535,"Code":"MAIL_FORWARD"},"242":{"USB":519,"Evdev":234,"Xkb":242,"Win":0,"Mac":65535,"Code":"SAVE"},"243":{"USB":423,"Evdev":235,"Xkb":243,"Win":0,"Mac":65535,"Code":"LAUNCH_DOCUMENTS"},"25":{"USB":26,"Evdev":17,"Xkb":25,"Win":17,"Mac":13,"Code":"US_W"},"252":{"USB":117,"Evdev":244,"Xkb":252,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_AUTO"},"26":{"USB":8,"Evdev":18,"Xkb":26,"Win":18,"Mac":14,"Code":"US_E"},"27":{"USB":21,"Evdev":19,"Xkb":27,"Win":19,"Mac":15,"Code":"US_R"},"28":{"USB":23,"Evdev":20,"Xkb":28,"Win":20,"Mac":17,"Code":"US_T"},"29":{"USB":28,"Evdev":21,"Xkb":29,"Win":21,"Mac":16,"Code":"US_Y"},"30":{"USB":24,"Evdev":22,"Xkb":30,"Win":22,"Mac":32,"Code":"US_U"},"31":{"USB":12,"Evdev":23,"Xkb":31,"Win":23,"Mac":34,"Code":"US_I"},"32":{"USB":18,"Evdev":24,"Xkb":32,"Win":24,"Mac":31,"Code":"US_O"},"33":{"USB":19,"Evdev":25,"Xkb":33,"Win":25,"Mac":35,"Code":"US_P"},"34":{"USB":47,"Evdev":26,"Xkb":34,"Win":26,"Mac":33,"Code":"BRACKET_LEFT"},"35":{"USB":48,"Evdev":27,"Xkb":35,"Win":27,"Mac":30,"Code":"BRACKET_RIGHT"},"36":{"USB":40,"Evdev":28,"Xkb":36,"Win":28,"Mac":36,"Code":"ENTER"},"366":{"USB":96,"Evdev":358,"Xkb":366,"Win":0,"Mac":65535,"Code":"INFO"},"37":{"USB":224,"Evdev":29,"Xkb":37,"Win":29,"Mac":59,"Code":"CONTROL_LEFT"},"370":{"USB":141,"Evdev":362,"Xkb":370,"Win":0,"Mac":65535,"Code":"PROGRAM_GUIDE"},"378":{"USB":97,"Evdev":370,"Xkb":378,"Win":0,"Mac":65535,"Code":"CLOSED_CAPTION_TOGGLE"},"38":{"USB":4,"Evdev":30,"Xkb":38,"Win":30,"Mac":0,"Code":"US_A"},"380":{"USB":562,"Evdev":372,"Xkb":380,"Win":0,"Mac":65535,"Code":"ZOOM_TOGGLE"},"382":{"USB":430,"Evdev":374,"Xkb":382,"Win":0,"Mac":65535,"Code":"LAUNCH_KEYBOARD_LAYOUT"},"39":{"USB":22,"Evdev":31,"Xkb":39,"Win":31,"Mac":1,"Code":"US_S"},"40":{"USB":7,"Evdev":32,"Xkb":40,"Win":32,"Mac":2,"Code":"US_D"},"400":{"USB":439,"Evdev":392,"Xkb":400,"Win":0,"Mac":65535,"Code":"LAUNCH_AUDIO_BROWSER"},"405":{"USB":398,"Evdev":397,"Xkb":405,"Win":0,"Mac":65535,"Code":"LAUNCH_CALENDAR"},"41":{"USB":9,"Evdev":33,"Xkb":41,"Win":33,"Mac":3,"Code":"US_F"},"413":{"USB":131,"Evdev":405,"Xkb":413,"Win":0,"Mac":65535,"Code":"MEDIA_LAST"},"418":{"USB":156,"Evdev":410,"Xkb":418,"Win":0,"Mac":65535,"Code":"CHANNEL_UP"},"419":{"USB":157,"Evdev":411,"Xkb":419,"Win":0,"Mac":65535,"Code":"CHANNEL_DOWN"},"42":{"USB":10,"Evdev":34,"Xkb":42,"Win":34,"Mac":5,"Code":"US_G"},"426":{"USB":557,"Evdev":418,"Xkb":426,"Win":0,"Mac":65535,"Code":"ZOOM_IN"},"427":{"USB":558,"Evdev":419,"Xkb":427,"Win":0,"Mac":65535,"Code":"ZOOM_OUT"},"429":{"USB":388,"Evdev":421,"Xkb":429,"Win":0,"Mac":65535,"Code":"LAUNCH_WORD_PROCESSOR"},"43":{"USB":11,"Evdev":35,"Xkb":43,"Win":35,"Mac":4,"Code":"US_H"},"431":{"USB":390,"Evdev":423,"Xkb":431,"Win":0,"Mac":65535,"Code":"LAUNCH_SPREADSHEET"},"437":{"USB":397,"Evdev":429,"Xkb":437,"Win":0,"Mac":65535,"Code":"LAUNCH_CONTACTS"},"439":{"USB":114,"Evdev":431,"Xkb":439,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_TOGGLE"},"44":{"USB":13,"Evdev":36,"Xkb":44,"Win":36,"Mac":38,"Code":"US_J"},"440":{"USB":427,"Evdev":432,"Xkb":440,"Win":0,"Mac":65535,"Code":"SPELL_CHECK"},"45":{"USB":14,"Evdev":37,"Xkb":45,"Win":37,"Mac":40,"Code":"US_K"},"46":{"USB":15,"Evdev":38,"Xkb":46,"Win":38,"Mac":37,"Code":"US_L"},"47":{"USB":51,"Evdev":39,"Xkb":47,"Win":39,"Mac":41,"Code":"SEMICOLON"},"48":{"USB":52,"Evdev":40,"Xkb":48,"Win":40,"Mac":39,"Code":"QUOTE"},"49":{"USB":53,"Evdev":41,"Xkb":49,"Win":41,"Mac":50,"Code":"BACKQUOTE"},"50":{"USB":225,"Evdev":42,"Xkb":50,"Win":42,"Mac":56,"Code":"SHIFT_LEFT"},"51":{"USB":49,"Evdev":43,"Xkb":51,"Win":43,"Mac":42,"Code":"BACKSLASH"},"52":{"USB":29,"Evdev":44,"Xkb":52,"Win":44,"Mac":6,"Code":"US_Z"},"53":{"USB":27,"Evdev":45,"Xkb":53,"Win":45,"Mac":7,"Code":"US_X"},"54":{"USB":6,"Evdev":46,"Xkb":54,"Win":46,"Mac":8,"Code":"US_C"},"55":{"USB":25,"Evdev":47,"Xkb":55,"Win":47,"Mac":9,"Code":"US_V"},"56":{"USB":5,"Evdev":48,"Xkb":56,"Win":48,"Mac":11,"Code":"US_B"},"57":{"USB":17,"Evdev":49,"Xkb":57,"Win":49,"Mac":45,"Code":"US_N"},"58":{"USB":16,"Evdev":50,"Xkb":58,"Win":50,"Mac":46,"Code":"US_M"},"587":{"USB":415,"Evdev":579,"Xkb":587,"Win":0,"Mac":65535,"Code":"LAUNCH_CONTROL_PANEL"},"588":{"USB":418,"Evdev":580,"Xkb":588,"Win":0,"Mac":65535,"Code":"SELECT_TASK"},"589":{"USB":433,"Evdev":581,"Xkb":589,"Win":0,"Mac":65535,"Code":"LAUNCH_SCREEN_SAVER"},"59":{"USB":54,"Evdev":51,"Xkb":59,"Win":51,"Mac":43,"Code":"COMMA"},"590":{"USB":207,"Evdev":582,"Xkb":590,"Win":0,"Mac":65535,"Code":"SPEECH_INPUT_TOGGLE"},"591":{"USB":459,"Evdev":583,"Xkb":591,"Win":0,"Mac":65535,"Code":"LAUNCH_ASSISTANT"},"592":{"USB":669,"Evdev":584,"Xkb":592,"Win":0,"Mac":65535,"Code":"KEYBOARD_LAYOUT_SELECT"},"60":{"USB":55,"Evdev":52,"Xkb":60,"Win":52,"Mac":47,"Code":"PERIOD"},"600":{"USB":115,"Evdev":592,"Xkb":600,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_MINIMIUM"},"601":{"USB":116,"Evdev":593,"Xkb":601,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_MAXIMUM"},"61":{"USB":56,"Evdev":53,"Xkb":61,"Win":53,"Mac":44,"Code":"SLASH"},"62":{"USB":229,"Evdev":54,"Xkb":62,"Win":54,"Mac":60,"Code":"SHIFT_RIGHT"},"63":{"USB":85,"Evdev":55,"Xkb":63,"Win":55,"Mac":67,"Code":"NUMPAD_MULTIPLY"},"64":{"USB":226,"Evdev":56,"Xkb":64,"Win":56,"Mac":58,"Code":"ALT_LEFT"},"641":{"USB":23,"Evdev":633,"Xkb":641,"Win":0,"Mac":65535,"Code":"PRIVACY_SCREEN_TOGGLE"},"65":{"USB":44,"Evdev":57,"Xkb":65,"Win":57,"Mac":49,"Code":"SPACE"},"66":{"USB":57,"Evdev":58,"Xkb":66,"Win":58,"Mac":57,"Code":"CAPS_LOCK"},"77":{"USB":83,"Evdev":69,"Xkb":77,"Win":57413,"Mac":71,"Code":"NUM_LOCK"},"78":{"USB":71,"Evdev":70,"Xkb":78,"Win":70,"Mac":65535,"Code":"SCROLL_LOCK"},"82":{"USB":86,"Evdev":74,"Xkb":82,"Win":74,"Mac":78,"Code":"NUMPAD_SUBTRACT"},"86":{"USB":87,"Evdev":78,"Xkb":86,"Win":78,"Mac":69,"Code":"NUMPAD_ADD"},"9":{"USB":41,"Evdev":1,"Xkb":9,"Win":1,"Mac":53,"Code":"ESCAPE"},"91":{"USB":99,"Evdev":83,"Xkb":91,"Win":83,"Mac":65,"Code":"NUMPAD_DECIMAL"},"94":{"USB":100,"Evdev":86,"Xkb":94,"Win":86,"Mac":10,"Code":"INTL_BACKSLASH"},"97":{"USB":135,"Evdev":89,"Xkb":97,"Win":115,"Mac":94,"Code":"INTL_RO"}},"Win":{"0":{"USB":671,"Evdev":120,"Xkb":128,"Win":0,"Mac":65535,"Code":"SHOW_ALL_WINDOWS"},"1":{"USB":41,"Evdev":1,"Xkb":9,"Win":1,"Mac":53,"Code":"ESCAPE"},"112":{"USB":136,"Evdev":93,"Xkb":101,"Win":112,"Mac":65535,"Code":"KANA_MODE"},"115":{"USB":135,"Evdev":89,"Xkb":97,"Win":115,"Mac":94,"Code":"INTL_RO"},"12":{"USB":45,"Evdev":12,"Xkb":20,"Win":12,"Mac":27,"Code":"MINUS"},"121":{"USB":138,"Evdev":92,"Xkb":100,"Win":121,"Mac":65535,"Code":"CONVERT"},"123":{"USB":139,"Evdev":94,"Xkb":102,"Win":123,"Mac":65535,"Code":"NON_CONVERT"},"125":{"USB":137,"Evdev":124,"Xkb":132,"Win":125,"Mac":93,"Code":"INTL_YEN"},"126":{"USB":133,"Evdev":121,"Xkb":129,"Win":126,"Mac":95,"Code":"NUMPAD_COMMA"},"13":{"USB":46,"Evdev":13,"Xkb":21,"Win":13,"Mac":24,"Code":"EQUAL"},"14":{"USB":42,"Evdev":14,"Xkb":22,"Win":14,"Mac":51,"Code":"BACKSPACE"},"15":{"USB":43,"Evdev":15,"Xkb":23,"Win":15,"Mac":48,"Code":"TAB"},"16":{"USB":20,"Evdev":16,"Xkb":24,"Win":16,"Mac":12,"Code":"US_Q"},"17":{"USB":26,"Evdev":17,"Xkb":25,"Win":17,"Mac":13,"Code":"US_W"},"18":{"USB":8,"Evdev":18,"Xkb":26,"Win":18,"Mac":14,"Code":"US_E"},"19":{"USB":21,"Evdev":19,"Xkb":27,"Win":19,"Mac":15,"Code":"US_R"},"20":{"USB":23,"Evdev":20,"Xkb":28,"Win":20,"Mac":17,"Code":"US_T"},"21":{"USB":28,"Evdev":21,"Xkb":29,"Win":21,"Mac":16,"Code":"US_Y"},"22":{"USB":24,"Evdev":22,"Xkb":30,"Win":22,"Mac":32,"Code":"US_U"},"23":{"USB":12,"Evdev":23,"Xkb":31,"Win":23,"Mac":34,"Code":"US_I"},"24":{"USB":18,"Evdev":24,"Xkb":32,"Win":24,"Mac":31,"Code":"US_O"},"25":{"USB":19,"Evdev":25,"Xkb":33,"Win":25,"Mac":35,"Code":"US_P"},"252":{"USB":2,"Evdev":0,"Xkb":0,"Win":252,"Mac":65535,"Code":"USB_POST_FAIL"},"255":{"USB":1,"Evdev":0,"Xkb":0,"Win":255,"Mac":65535,"Code":"USB_ERROR_ROLL_OVER"},"26":{"USB":47,"Evdev":26,"Xkb":34,"Win":26,"Mac":33,"Code":"BRACKET_LEFT"},"27":{"USB":48,"Evdev":27,"Xkb":35,"Win":27,"Mac":30,"Code":"BRACKET_RIGHT"},"28":{"USB":40,"Evdev":28,"Xkb":36,"Win":28,"Mac":36,"Code":"ENTER"},"29":{"USB":224,"Evdev":29,"Xkb":37,"Win":29,"Mac":59,"Code":"CONTROL_LEFT"},"30":{"USB":4,"Evdev":30,"Xkb":38,"Win":30,"Mac":0,"Code":"US_A"},"31":{"USB":22,"Evdev":31,"Xkb":39,"Win":31,"Mac":1,"Code":"US_S"},"32":{"USB":7,"Evdev":32,"Xkb":40,"Win":32,"Mac":2,"Code":"US_D"},"33":{"USB":9,"Evdev":33,"Xkb":41,"Win":33,"Mac":3,"Code":"US_F"},"34":{"USB":10,"Evdev":34,"Xkb":42,"Win":34,"Mac":5,"Code":"US_G"},"35":{"USB":11,"Evdev":35,"Xkb":43,"Win":35,"Mac":4,"Code":"US_H"},"36":{"USB":13,"Evdev":36,"Xkb":44,"Win":36,"Mac":38,"Code":"US_J"},"37":{"USB":14,"Evdev":37,"Xkb":45,"Win":37,"Mac":40,"Code":"US_K"},"38":{"USB":15,"Evdev":38,"Xkb":46,"Win":38,"Mac":37,"Code":"US_L"},"39":{"USB":51,"Evdev":39,"Xkb":47,"Win":39,"Mac":41,"Code":"SEMICOLON"},"40":{"USB":52,"Evdev":40,"Xkb":48,"Win":40,"Mac":39,"Code":"QUOTE"},"41":{"USB":53,"Evdev":41,"Xkb":49,"Win":41,"Mac":50,"Code":"BACKQUOTE"},"42":{"USB":225,"Evdev":42,"Xkb":50,"Win":42,"Mac":56,"Code":"SHIFT_LEFT"},"43":{"USB":49,"Evdev":43,"Xkb":51,"Win":43,"Mac":42,"Code":"BACKSLASH"},"44":{"USB":29,"Evdev":44,"Xkb":52,"Win":44,"Mac":6,"Code":"US_Z"},"45":{"USB":27,"Evdev":45,"Xkb":53,"Win":45,"Mac":7,"Code":"US_X"},"46":{"USB":6,"Evdev":46,"Xkb":54,"Win":46,"Mac":8,"Code":"US_C"},"47":{"USB":25,"Evdev":47,"Xkb":55,"Win":47,"Mac":9,"Code":"US_V"},"48":{"USB":5,"Evdev":48,"Xkb":56,"Win":48,"Mac":11,"Code":"US_B"},"49":{"USB":17,"Evdev":49,"Xkb":57,"Win":49,"Mac":45,"Code":"US_N"},"50":{"USB":16,"Evdev":50,"Xkb":58,"Win":50,"Mac":46,"Code":"US_M"},"51":{"USB":54,"Evdev":51,"Xkb":59,"Win":51,"Mac":43,"Code":"COMMA"},"52":{"USB":55,"Evdev":52,"Xkb":60,"Win":52,"Mac":47,"Code":"PERIOD"},"53":{"USB":56,"Evdev":53,"Xkb":61,"Win":53,"Mac":44,"Code":"SLASH"},"54":{"USB":229,"Evdev":54,"Xkb":62,"Win":54,"Mac":60,"Code":"SHIFT_RIGHT"},"55":{"USB":85,"Evdev":55,"Xkb":63,"Win":55,"Mac":67,"Code":"NUMPAD_MULTIPLY"},"56":{"USB":226,"Evdev":56,"Xkb":64,"Win":56,"Mac":58,"Code":"ALT_LEFT"},"57":{"USB":44,"Evdev":57,"Xkb":65,"Win":57,"Mac":49,"Code":"SPACE"},"57352":{"USB":122,"Evdev":131,"Xkb":139,"Win":57352,"Mac":65535,"Code":"UNDO"},"57354":{"USB":125,"Evdev":135,"Xkb":143,"Win":57354,"Mac":65535,"Code":"PASTE"},"57360":{"USB":182,"Evdev":165,"Xkb":173,"Win":57360,"Mac":65535,"Code":"MEDIA_TRACK_PREVIOUS"},"57367":{"USB":123,"Evdev":137,"Xkb":145,"Win":57367,"Mac":65535,"Code":"CUT"},"57368":{"USB":124,"Evdev":133,"Xkb":141,"Win":57368,"Mac":65535,"Code":"COPY"},"57369":{"USB":181,"Evdev":163,"Xkb":171,"Win":57369,"Mac":65535,"Code":"MEDIA_TRACK_NEXT"},"57372":{"USB":88,"Evdev":96,"Xkb":104,"Win":57372,"Mac":76,"Code":"NUMPAD_ENTER"},"57373":{"USB":228,"Evdev":97,"Xkb":105,"Win":57373,"Mac":62,"Code":"CONTROL_RIGHT"},"57376":{"USB":127,"Evdev":113,"Xkb":121,"Win":57376,"Mac":74,"Code":"VOLUME_MUTE"},"57378":{"USB":205,"Evdev":164,"Xkb":172,"Win":57378,"Mac":65535,"Code":"MEDIA_PLAY_PAUSE"},"57380":{"USB":183,"Evdev":166,"Xkb":174,"Win":57380,"Mac":65535,"Code":"MEDIA_STOP"},"57388":{"USB":184,"Evdev":161,"Xkb":169,"Win":57388,"Mac":65535,"Code":"EJECT"},"57390":{"USB":129,"Evdev":114,"Xkb":122,"Win":57390,"Mac":73,"Code":"VOLUME_DOWN"},"57392":{"USB":128,"Evdev":115,"Xkb":123,"Win":57392,"Mac":72,"Code":"VOLUME_UP"},"57394":{"USB":547,"Evdev":172,"Xkb":180,"Win":57394,"Mac":65535,"Code":"BROWSER_HOME"},"57397":{"USB":84,"Evdev":98,"Xkb":106,"Win":57397,"Mac":75,"Code":"NUMPAD_DIVIDE"},"57399":{"USB":70,"Evdev":99,"Xkb":107,"Win":57399,"Mac":65535,"Code":"PRINT_SCREEN"},"57400":{"USB":230,"Evdev":100,"Xkb":108,"Win":57400,"Mac":61,"Code":"ALT_RIGHT"},"57403":{"USB":117,"Evdev":138,"Xkb":146,"Win":57403,"Mac":65535,"Code":"HELP"},"57413":{"USB":83,"Evdev":69,"Xkb":77,"Win":57413,"Mac":71,"Code":"NUM_LOCK"},"57415":{"USB":74,"Evdev":102,"Xkb":110,"Win":57415,"Mac":115,"Code":"HOME"},"57416":{"USB":82,"Evdev":103,"Xkb":111,"Win":57416,"Mac":126,"Code":"ARROW_UP"},"57417":{"USB":75,"Evdev":104,"Xkb":112,"Win":57417,"Mac":116,"Code":"PAGE_UP"},"57419":{"USB":80,"Evdev":105,"Xkb":113,"Win":57419,"Mac":123,"Code":"ARROW_LEFT"},"57421":{"USB":79,"Evdev":106,"Xkb":114,"Win":57421,"Mac":124,"Code":"ARROW_RIGHT"},"57423":{"USB":77,"Evdev":107,"Xkb":115,"Win":57423,"Mac":119,"Code":"END"},"57424":{"USB":81,"Evdev":108,"Xkb":116,"Win":57424,"Mac":125,"Code":"ARROW_DOWN"},"57425":{"USB":78,"Evdev":109,"Xkb":117,"Win":57425,"Mac":121,"Code":"PAGE_DOWN"},"57426":{"USB":73,"Evdev":110,"Xkb":118,"Win":57426,"Mac":114,"Code":"INSERT"},"57427":{"USB":76,"Evdev":111,"Xkb":119,"Win":57427,"Mac":117,"Code":"DEL"},"57435":{"USB":227,"Evdev":125,"Xkb":133,"Win":57435,"Mac":55,"Code":"META_LEFT"},"57436":{"USB":231,"Evdev":126,"Xkb":134,"Win":57436,"Mac":54,"Code":"META_RIGHT"},"57437":{"USB":101,"Evdev":127,"Xkb":135,"Win":57437,"Mac":110,"Code":"CONTEXT_MENU"},"57438":{"USB":102,"Evdev":116,"Xkb":124,"Win":57438,"Mac":65535,"Code":"POWER"},"57439":{"USB":130,"Evdev":142,"Xkb":150,"Win":57439,"Mac":65535,"Code":"SLEEP"},"57443":{"USB":131,"Evdev":143,"Xkb":151,"Win":57443,"Mac":65535,"Code":"WAKE_UP"},"57445":{"USB":545,"Evdev":217,"Xkb":225,"Win":57445,"Mac":65535,"Code":"BROWSER_SEARCH"},"57446":{"USB":554,"Evdev":156,"Xkb":164,"Win":57446,"Mac":65535,"Code":"BROWSER_FAVORITES"},"57447":{"USB":551,"Evdev":173,"Xkb":181,"Win":57447,"Mac":65535,"Code":"BROWSER_REFRESH"},"57448":{"USB":550,"Evdev":128,"Xkb":136,"Win":57448,"Mac":65535,"Code":"BROWSER_STOP"},"57449":{"USB":549,"Evdev":159,"Xkb":167,"Win":57449,"Mac":65535,"Code":"BROWSER_FORWARD"},"57450":{"USB":548,"Evdev":158,"Xkb":166,"Win":57450,"Mac":65535,"Code":"BROWSER_BACK"},"57452":{"USB":394,"Evdev":155,"Xkb":163,"Win":57452,"Mac":65535,"Code":"LAUNCH_MAIL"},"57453":{"USB":387,"Evdev":171,"Xkb":179,"Win":57453,"Mac":65535,"Code":"MEDIA_SELECT"},"58":{"USB":57,"Evdev":58,"Xkb":66,"Win":58,"Mac":57,"Code":"CAPS_LOCK"},"69":{"USB":72,"Evdev":119,"Xkb":127,"Win":69,"Mac":65535,"Code":"PAUSE"},"70":{"USB":71,"Evdev":70,"Xkb":78,"Win":70,"Mac":65535,"Code":"SCROLL_LOCK"},"74":{"USB":86,"Evdev":74,"Xkb":82,"Win":74,"Mac":78,"Code":"NUMPAD_SUBTRACT"},"78":{"USB":87,"Evdev":78,"Xkb":86,"Win":78,"Mac":69,"Code":"NUMPAD_ADD"},"83":{"USB":99,"Evdev":83,"Xkb":91,"Win":83,"Mac":65,"Code":"NUMPAD_DECIMAL"},"86":{"USB":100,"Evdev":86,"Xkb":94,"Win":86,"Mac":10,"Code":"INTL_BACKSLASH"},"89":{"USB":103,"Evdev":117,"Xkb":125,"Win":89,"Mac":81,"Code":"NUMPAD_EQUAL"}},"Mac":{"0":{"USB":4,"Evdev":30,"Xkb":38,"Win":30,"Mac":0,"Code":"US_A"},"1":{"USB":22,"Evdev":31,"Xkb":39,"Win":31,"Mac":1,"Code":"US_S"},"10":{"USB":100,"Evdev":86,"Xkb":94,"Win":86,"Mac":10,"Code":"INTL_BACKSLASH"},"11":{"USB":5,"Evdev":48,"Xkb":56,"Win":48,"Mac":11,"Code":"US_B"},"110":{"USB":101,"Evdev":127,"Xkb":135,"Win":57437,"Mac":110,"Code":"CONTEXT_MENU"},"114":{"USB":73,"Evdev":110,"Xkb":118,"Win":57426,"Mac":114,"Code":"INSERT"},"115":{"USB":74,"Evdev":102,"Xkb":110,"Win":57415,"Mac":115,"Code":"HOME"},"116":{"USB":75,"Evdev":104,"Xkb":112,"Win":57417,"Mac":116,"Code":"PAGE_UP"},"117":{"USB":76,"Evdev":111,"Xkb":119,"Win":57427,"Mac":117,"Code":"DEL"},"119":{"USB":77,"Evdev":107,"Xkb":115,"Win":57423,"Mac":119,"Code":"END"},"12":{"USB":20,"Evdev":16,"Xkb":24,"Win":16,"Mac":12,"Code":"US_Q"},"121":{"USB":78,"Evdev":109,"Xkb":117,"Win":57425,"Mac":121,"Code":"PAGE_DOWN"},"123":{"USB":80,"Evdev":105,"Xkb":113,"Win":57419,"Mac":123,"Code":"ARROW_LEFT"},"124":{"USB":79,"Evdev":106,"Xkb":114,"Win":57421,"Mac":124,"Code":"ARROW_RIGHT"},"125":{"USB":81,"Evdev":108,"Xkb":116,"Win":57424,"Mac":125,"Code":"ARROW_DOWN"},"126":{"USB":82,"Evdev":103,"Xkb":111,"Win":57416,"Mac":126,"Code":"ARROW_UP"},"13":{"USB":26,"Evdev":17,"Xkb":25,"Win":17,"Mac":13,"Code":"US_W"},"14":{"USB":8,"Evdev":18,"Xkb":26,"Win":18,"Mac":14,"Code":"US_E"},"15":{"USB":21,"Evdev":19,"Xkb":27,"Win":19,"Mac":15,"Code":"US_R"},"16":{"USB":28,"Evdev":21,"Xkb":29,"Win":21,"Mac":16,"Code":"US_Y"},"17":{"USB":23,"Evdev":20,"Xkb":28,"Win":20,"Mac":17,"Code":"US_T"},"2":{"USB":7,"Evdev":32,"Xkb":40,"Win":32,"Mac":2,"Code":"US_D"},"24":{"USB":46,"Evdev":13,"Xkb":21,"Win":13,"Mac":24,"Code":"EQUAL"},"27":{"USB":45,"Evdev":12,"Xkb":20,"Win":12,"Mac":27,"Code":"MINUS"},"3":{"USB":9,"Evdev":33,"Xkb":41,"Win":33,"Mac":3,"Code":"US_F"},"30":{"USB":48,"Evdev":27,"Xkb":35,"Win":27,"Mac":30,"Code":"BRACKET_RIGHT"},"31":{"USB":18,"Evdev":24,"Xkb":32,"Win":24,"Mac":31,"Code":"US_O"},"32":{"USB":24,"Evdev":22,"Xkb":30,"Win":22,"Mac":32,"Code":"US_U"},"33":{"USB":47,"Evdev":26,"Xkb":34,"Win":26,"Mac":33,"Code":"BRACKET_LEFT"},"34":{"USB":12,"Evdev":23,"Xkb":31,"Win":23,"Mac":34,"Code":"US_I"},"35":{"USB":19,"Evdev":25,"Xkb":33,"Win":25,"Mac":35,"Code":"US_P"},"36":{"USB":40,"Evdev":28,"Xkb":36,"Win":28,"Mac":36,"Code":"ENTER"},"37":{"USB":15,"Evdev":38,"Xkb":46,"Win":38,"Mac":37,"Code":"US_L"},"38":{"USB":13,"Evdev":36,"Xkb":44,"Win":36,"Mac":38,"Code":"US_J"},"39":{"USB":52,"Evdev":40,"Xkb":48,"Win":40,"Mac":39,"Code":"QUOTE"},"4":{"USB":11,"Evdev":35,"Xkb":43,"Win":35,"Mac":4,"Code":"US_H"},"40":{"USB":14,"Evdev":37,"Xkb":45,"Win":37,"Mac":40,"Code":"US_K"},"41":{"USB":51,"Evdev":39,"Xkb":47,"Win":39,"Mac":41,"Code":"SEMICOLON"},"42":{"USB":49,"Evdev":43,"Xkb":51,"Win":43,"Mac":42,"Code":"BACKSLASH"},"43":{"USB":54,"Evdev":51,"Xkb":59,"Win":51,"Mac":43,"Code":"COMMA"},"44":{"USB":56,"Evdev":53,"Xkb":61,"Win":53,"Mac":44,"Code":"SLASH"},"45":{"USB":17,"Evdev":49,"Xkb":57,"Win":49,"Mac":45,"Code":"US_N"},"46":{"USB":16,"Evdev":50,"Xkb":58,"Win":50,"Mac":46,"Code":"US_M"},"47":{"USB":55,"Evdev":52,"Xkb":60,"Win":52,"Mac":47,"Code":"PERIOD"},"48":{"USB":43,"Evdev":15,"Xkb":23,"Win":15,"Mac":48,"Code":"TAB"},"49":{"USB":44,"Evdev":57,"Xkb":65,"Win":57,"Mac":49,"Code":"SPACE"},"5":{"USB":10,"Evdev":34,"Xkb":42,"Win":34,"Mac":5,"Code":"US_G"},"50":{"USB":53,"Evdev":41,"Xkb":49,"Win":41,"Mac":50,"Code":"BACKQUOTE"},"51":{"USB":42,"Evdev":14,"Xkb":22,"Win":14,"Mac":51,"Code":"BACKSPACE"},"53":{"USB":41,"Evdev":1,"Xkb":9,"Win":1,"Mac":53,"Code":"ESCAPE"},"54":{"USB":231,"Evdev":126,"Xkb":134,"Win":57436,"Mac":54,"Code":"META_RIGHT"},"55":{"USB":227,"Evdev":125,"Xkb":133,"Win":57435,"Mac":55,"Code":"META_LEFT"},"56":{"USB":225,"Evdev":42,"Xkb":50,"Win":42,"Mac":56,"Code":"SHIFT_LEFT"},"57":{"USB":57,"Evdev":58,"Xkb":66,"Win":58,"Mac":57,"Code":"CAPS_LOCK"},"58":{"USB":226,"Evdev":56,"Xkb":64,"Win":56,"Mac":58,"Code":"ALT_LEFT"},"59":{"USB":224,"Evdev":29,"Xkb":37,"Win":29,"Mac":59,"Code":"CONTROL_LEFT"},"6":{"USB":29,"Evdev":44,"Xkb":52,"Win":44,"Mac":6,"Code":"US_Z"},"60":{"USB":229,"Evdev":54,"Xkb":62,"Win":54,"Mac":60,"Code":"SHIFT_RIGHT"},"61":{"USB":230,"Evdev":100,"Xkb":108,"Win":57400,"Mac":61,"Code":"ALT_RIGHT"},"62":{"USB":228,"Evdev":97,"Xkb":105,"Win":57373,"Mac":62,"Code":"CONTROL_RIGHT"},"65":{"USB":99,"Evdev":83,"Xkb":91,"Win":83,"Mac":65,"Code":"NUMPAD_DECIMAL"},"65535":{"USB":671,"Evdev":120,"Xkb":128,"Win":0,"Mac":65535,"Code":"SHOW_ALL_WINDOWS"},"67":{"USB":85,"Evdev":55,"Xkb":63,"Win":55,"Mac":67,"Code":"NUMPAD_MULTIPLY"},"69":{"USB":87,"Evdev":78,"Xkb":86,"Win":78,"Mac":69,"Code":"NUMPAD_ADD"},"7":{"USB":27,"Evdev":45,"Xkb":53,"Win":45,"Mac":7,"Code":"US_X"},"71":{"USB":83,"Evdev":69,"Xkb":77,"Win":57413,"Mac":71,"Code":"NUM_LOCK"},"72":{"USB":128,"Evdev":115,"Xkb":123,"Win":57392,"Mac":72,"Code":"VOLUME_UP"},"73":{"USB":129,"Evdev":114,"Xkb":122,"Win":57390,"Mac":73,"Code":"VOLUME_DOWN"},"74":{"USB":127,"Evdev":113,"Xkb":121,"Win":57376,"Mac":74,"Code":"VOLUME_MUTE"},"75":{"USB":84,"Evdev":98,"Xkb":106,"Win":57397,"Mac":75,"Code":"NUMPAD_DIVIDE"},"76":{"USB":88,"Evdev":96,"Xkb":104,"Win":57372,"Mac":76,"Code":"NUMPAD_ENTER"},"78":{"USB":86,"Evdev":74,"Xkb":82,"Win":74,"Mac":78,"Code":"NUMPAD_SUBTRACT"},"8":{"USB":6,"Evdev":46,"Xkb":54,"Win":46,"Mac":8,"Code":"US_C"},"81":{"USB":103,"Evdev":117,"Xkb":125,"Win":89,"Mac":81,"Code":"NUMPAD_EQUAL"},"9":{"USB":25,"Evdev":47,"Xkb":55,"Win":47,"Mac":9,"Code":"US_V"},"93":{"USB":137,"Evdev":124,"Xkb":132,"Win":125,"Mac":93,"Code":"INTL_YEN"},"94":{"USB":135,"Evdev":89,"Xkb":97,"Win":115,"Mac":94,"Code":"INTL_RO"},"95":{"USB":133,"Evdev":121,"Xkb":129,"Win":126,"Mac":95,"Code":"NUMPAD_COMMA"}},"Code":{"ABORT":{"USB":155,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"ABORT"},"AGAIN":{"USB":121,"Evdev":129,"Xkb":137,"Win":0,"Mac":65535,"Code":"AGAIN"},"ALT_LEFT":{"USB":226,"Evdev":56,"Xkb":64,"Win":56,"Mac":58,"Code":"ALT_LEFT"},"ALT_RIGHT":{"USB":230,"Evdev":100,"Xkb":108,"Win":57400,"Mac":61,"Code":"ALT_RIGHT"},"ARROW_DOWN":{"USB":81,"Evdev":108,"Xkb":116,"Win":57424,"Mac":125,"Code":"ARROW_DOWN"},"ARROW_LEFT":{"USB":80,"Evdev":105,"Xkb":113,"Win":57419,"Mac":123,"Code":"ARROW_LEFT"},"ARROW_RIGHT":{"USB":79,"Evdev":106,"Xkb":114,"Win":57421,"Mac":124,"Code":"ARROW_RIGHT"},"ARROW_UP":{"USB":82,"Evdev":103,"Xkb":111,"Win":57416,"Mac":126,"Code":"ARROW_UP"},"BACKQUOTE":{"USB":53,"Evdev":41,"Xkb":49,"Win":41,"Mac":50,"Code":"BACKQUOTE"},"BACKSLASH":{"USB":49,"Evdev":43,"Xkb":51,"Win":43,"Mac":42,"Code":"BACKSLASH"},"BACKSPACE":{"USB":42,"Evdev":14,"Xkb":22,"Win":14,"Mac":51,"Code":"BACKSPACE"},"BASS_BOOST":{"USB":229,"Evdev":209,"Xkb":217,"Win":0,"Mac":65535,"Code":"BASS_BOOST"},"BRACKET_LEFT":{"USB":47,"Evdev":26,"Xkb":34,"Win":26,"Mac":33,"Code":"BRACKET_LEFT"},"BRACKET_RIGHT":{"USB":48,"Evdev":27,"Xkb":35,"Win":27,"Mac":30,"Code":"BRACKET_RIGHT"},"BRIGHTNESS_AUTO":{"USB":117,"Evdev":244,"Xkb":252,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_AUTO"},"BRIGHTNESS_DOWN":{"USB":112,"Evdev":224,"Xkb":232,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_DOWN"},"BRIGHTNESS_MAXIMUM":{"USB":116,"Evdev":593,"Xkb":601,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_MAXIMUM"},"BRIGHTNESS_MINIMIUM":{"USB":115,"Evdev":592,"Xkb":600,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_MINIMIUM"},"BRIGHTNESS_TOGGLE":{"USB":114,"Evdev":431,"Xkb":439,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_TOGGLE"},"BRIGHTNESS_UP":{"USB":111,"Evdev":225,"Xkb":233,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_UP"},"BROWSER_BACK":{"USB":548,"Evdev":158,"Xkb":166,"Win":57450,"Mac":65535,"Code":"BROWSER_BACK"},"BROWSER_FAVORITES":{"USB":554,"Evdev":156,"Xkb":164,"Win":57446,"Mac":65535,"Code":"BROWSER_FAVORITES"},"BROWSER_FORWARD":{"USB":549,"Evdev":159,"Xkb":167,"Win":57449,"Mac":65535,"Code":"BROWSER_FORWARD"},"BROWSER_HOME":{"USB":547,"Evdev":172,"Xkb":180,"Win":57394,"Mac":65535,"Code":"BROWSER_HOME"},"BROWSER_REFRESH":{"USB":551,"Evdev":173,"Xkb":181,"Win":57447,"Mac":65535,"Code":"BROWSER_REFRESH"},"BROWSER_SEARCH":{"USB":545,"Evdev":217,"Xkb":225,"Win":57445,"Mac":65535,"Code":"BROWSER_SEARCH"},"BROWSER_STOP":{"USB":550,"Evdev":128,"Xkb":136,"Win":57448,"Mac":65535,"Code":"BROWSER_STOP"},"CAPS_LOCK":{"USB":57,"Evdev":58,"Xkb":66,"Win":58,"Mac":57,"Code":"CAPS_LOCK"},"CHANNEL_DOWN":{"USB":157,"Evdev":411,"Xkb":419,"Win":0,"Mac":65535,"Code":"CHANNEL_DOWN"},"CHANNEL_UP":{"USB":156,"Evdev":410,"Xkb":418,"Win":0,"Mac":65535,"Code":"CHANNEL_UP"},"CLOSE":{"USB":515,"Evdev":206,"Xkb":214,"Win":0,"Mac":65535,"Code":"CLOSE"},"CLOSED_CAPTION_TOGGLE":{"USB":97,"Evdev":370,"Xkb":378,"Win":0,"Mac":65535,"Code":"CLOSED_CAPTION_TOGGLE"},"COMMA":{"USB":54,"Evdev":51,"Xkb":59,"Win":51,"Mac":43,"Code":"COMMA"},"CONTEXT_MENU":{"USB":101,"Evdev":127,"Xkb":135,"Win":57437,"Mac":110,"Code":"CONTEXT_MENU"},"CONTROL_LEFT":{"USB":224,"Evdev":29,"Xkb":37,"Win":29,"Mac":59,"Code":"CONTROL_LEFT"},"CONTROL_RIGHT":{"USB":228,"Evdev":97,"Xkb":105,"Win":57373,"Mac":62,"Code":"CONTROL_RIGHT"},"CONVERT":{"USB":138,"Evdev":92,"Xkb":100,"Win":121,"Mac":65535,"Code":"CONVERT"},"COPY":{"USB":124,"Evdev":133,"Xkb":141,"Win":57368,"Mac":65535,"Code":"COPY"},"CUT":{"USB":123,"Evdev":137,"Xkb":145,"Win":57367,"Mac":65535,"Code":"CUT"},"DEL":{"USB":76,"Evdev":111,"Xkb":119,"Win":57427,"Mac":117,"Code":"DEL"},"DISPLAY_TOGGLE_INT_EXT":{"USB":181,"Evdev":227,"Xkb":235,"Win":0,"Mac":65535,"Code":"DISPLAY_TOGGLE_INT_EXT"},"EJECT":{"USB":184,"Evdev":161,"Xkb":169,"Win":57388,"Mac":65535,"Code":"EJECT"},"END":{"USB":77,"Evdev":107,"Xkb":115,"Win":57423,"Mac":119,"Code":"END"},"ENTER":{"USB":40,"Evdev":28,"Xkb":36,"Win":28,"Mac":36,"Code":"ENTER"},"EQUAL":{"USB":46,"Evdev":13,"Xkb":21,"Win":13,"Mac":24,"Code":"EQUAL"},"ESCAPE":{"USB":41,"Evdev":1,"Xkb":9,"Win":1,"Mac":53,"Code":"ESCAPE"},"EXIT":{"USB":148,"Evdev":174,"Xkb":182,"Win":0,"Mac":65535,"Code":"EXIT"},"FIND":{"USB":126,"Evdev":136,"Xkb":144,"Win":0,"Mac":65535,"Code":"FIND"},"FN":{"USB":18,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"FN"},"FN_LOCK":{"USB":19,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"FN_LOCK"},"HELP":{"USB":117,"Evdev":138,"Xkb":146,"Win":57403,"Mac":65535,"Code":"HELP"},"HOME":{"USB":74,"Evdev":102,"Xkb":110,"Win":57415,"Mac":115,"Code":"HOME"},"HYPER":{"USB":16,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"HYPER"},"INFO":{"USB":96,"Evdev":358,"Xkb":366,"Win":0,"Mac":65535,"Code":"INFO"},"INSERT":{"USB":73,"Evdev":110,"Xkb":118,"Win":57426,"Mac":114,"Code":"INSERT"},"INTL_BACKSLASH":{"USB":100,"Evdev":86,"Xkb":94,"Win":86,"Mac":10,"Code":"INTL_BACKSLASH"},"INTL_RO":{"USB":135,"Evdev":89,"Xkb":97,"Win":115,"Mac":94,"Code":"INTL_RO"},"INTL_YEN":{"USB":137,"Evdev":124,"Xkb":132,"Win":125,"Mac":93,"Code":"INTL_YEN"},"KANA_MODE":{"USB":136,"Evdev":93,"Xkb":101,"Win":112,"Mac":65535,"Code":"KANA_MODE"},"KBD_ILLUM_DOWN":{"USB":122,"Evdev":229,"Xkb":237,"Win":0,"Mac":65535,"Code":"KBD_ILLUM_DOWN"},"KBD_ILLUM_UP":{"USB":121,"Evdev":230,"Xkb":238,"Win":0,"Mac":65535,"Code":"KBD_ILLUM_UP"},"KEYBOARD_LAYOUT_SELECT":{"USB":669,"Evdev":584,"Xkb":592,"Win":0,"Mac":65535,"Code":"KEYBOARD_LAYOUT_SELECT"},"LAUNCH_ASSISTANT":{"USB":459,"Evdev":583,"Xkb":591,"Win":0,"Mac":65535,"Code":"LAUNCH_ASSISTANT"},"LAUNCH_AUDIO_BROWSER":{"USB":439,"Evdev":392,"Xkb":400,"Win":0,"Mac":65535,"Code":"LAUNCH_AUDIO_BROWSER"},"LAUNCH_CALENDAR":{"USB":398,"Evdev":397,"Xkb":405,"Win":0,"Mac":65535,"Code":"LAUNCH_CALENDAR"},"LAUNCH_CONTACTS":{"USB":397,"Evdev":429,"Xkb":437,"Win":0,"Mac":65535,"Code":"LAUNCH_CONTACTS"},"LAUNCH_CONTROL_PANEL":{"USB":415,"Evdev":579,"Xkb":587,"Win":0,"Mac":65535,"Code":"LAUNCH_CONTROL_PANEL"},"LAUNCH_DOCUMENTS":{"USB":423,"Evdev":235,"Xkb":243,"Win":0,"Mac":65535,"Code":"LAUNCH_DOCUMENTS"},"LAUNCH_INTERNET_BROWSER":{"USB":406,"Evdev":150,"Xkb":158,"Win":0,"Mac":65535,"Code":"LAUNCH_INTERNET_BROWSER"},"LAUNCH_KEYBOARD_LAYOUT":{"USB":430,"Evdev":374,"Xkb":382,"Win":0,"Mac":65535,"Code":"LAUNCH_KEYBOARD_LAYOUT"},"LAUNCH_MAIL":{"USB":394,"Evdev":155,"Xkb":163,"Win":57452,"Mac":65535,"Code":"LAUNCH_MAIL"},"LAUNCH_PHONE":{"USB":140,"Evdev":169,"Xkb":177,"Win":0,"Mac":65535,"Code":"LAUNCH_PHONE"},"LAUNCH_SCREEN_SAVER":{"USB":433,"Evdev":581,"Xkb":589,"Win":0,"Mac":65535,"Code":"LAUNCH_SCREEN_SAVER"},"LAUNCH_SPREADSHEET":{"USB":390,"Evdev":423,"Xkb":431,"Win":0,"Mac":65535,"Code":"LAUNCH_SPREADSHEET"},"LAUNCH_WORD_PROCESSOR":{"USB":388,"Evdev":421,"Xkb":429,"Win":0,"Mac":65535,"Code":"LAUNCH_WORD_PROCESSOR"},"LOCK_SCREEN":{"USB":414,"Evdev":152,"Xkb":160,"Win":0,"Mac":65535,"Code":"LOCK_SCREEN"},"MAIL_FORWARD":{"USB":651,"Evdev":233,"Xkb":241,"Win":0,"Mac":65535,"Code":"MAIL_FORWARD"},"MAIL_REPLY":{"USB":649,"Evdev":232,"Xkb":240,"Win":0,"Mac":65535,"Code":"MAIL_REPLY"},"MAIL_SEND":{"USB":652,"Evdev":231,"Xkb":239,"Win":0,"Mac":65535,"Code":"MAIL_SEND"},"MEDIA_FAST_FORWARD":{"USB":179,"Evdev":208,"Xkb":216,"Win":0,"Mac":65535,"Code":"MEDIA_FAST_FORWARD"},"MEDIA_LAST":{"USB":131,"Evdev":405,"Xkb":413,"Win":0,"Mac":65535,"Code":"MEDIA_LAST"},"MEDIA_PAUSE":{"USB":177,"Evdev":201,"Xkb":209,"Win":0,"Mac":65535,"Code":"MEDIA_PAUSE"},"MEDIA_PLAY":{"USB":176,"Evdev":207,"Xkb":215,"Win":0,"Mac":65535,"Code":"MEDIA_PLAY"},"MEDIA_PLAY_PAUSE":{"USB":205,"Evdev":164,"Xkb":172,"Win":57378,"Mac":65535,"Code":"MEDIA_PLAY_PAUSE"},"MEDIA_RECORD":{"USB":178,"Evdev":167,"Xkb":175,"Win":0,"Mac":65535,"Code":"MEDIA_RECORD"},"MEDIA_REWIND":{"USB":180,"Evdev":168,"Xkb":176,"Win":0,"Mac":65535,"Code":"MEDIA_REWIND"},"MEDIA_SELECT":{"USB":387,"Evdev":171,"Xkb":179,"Win":57453,"Mac":65535,"Code":"MEDIA_SELECT"},"MEDIA_STOP":{"USB":183,"Evdev":166,"Xkb":174,"Win":57380,"Mac":65535,"Code":"MEDIA_STOP"},"MEDIA_TRACK_NEXT":{"USB":181,"Evdev":163,"Xkb":171,"Win":57369,"Mac":65535,"Code":"MEDIA_TRACK_NEXT"},"MEDIA_TRACK_PREVIOUS":{"USB":182,"Evdev":165,"Xkb":173,"Win":57360,"Mac":65535,"Code":"MEDIA_TRACK_PREVIOUS"},"META_LEFT":{"USB":227,"Evdev":125,"Xkb":133,"Win":57435,"Mac":55,"Code":"META_LEFT"},"META_RIGHT":{"USB":231,"Evdev":126,"Xkb":134,"Win":57436,"Mac":54,"Code":"META_RIGHT"},"MINUS":{"USB":45,"Evdev":12,"Xkb":20,"Win":12,"Mac":27,"Code":"MINUS"},"NEW":{"USB":513,"Evdev":181,"Xkb":189,"Win":0,"Mac":65535,"Code":"NEW"},"NONE":{"USB":0,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NONE"},"NON_CONVERT":{"USB":139,"Evdev":94,"Xkb":102,"Win":123,"Mac":65535,"Code":"NON_CONVERT"},"NUMPAD_ADD":{"USB":87,"Evdev":78,"Xkb":86,"Win":78,"Mac":69,"Code":"NUMPAD_ADD"},"NUMPAD_BACKSPACE":{"USB":187,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_BACKSPACE"},"NUMPAD_CLEAR":{"USB":216,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_CLEAR"},"NUMPAD_CLEAR_ENTRY":{"USB":217,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_CLEAR_ENTRY"},"NUMPAD_COMMA":{"USB":133,"Evdev":121,"Xkb":129,"Win":126,"Mac":95,"Code":"NUMPAD_COMMA"},"NUMPAD_DECIMAL":{"USB":99,"Evdev":83,"Xkb":91,"Win":83,"Mac":65,"Code":"NUMPAD_DECIMAL"},"NUMPAD_DIVIDE":{"USB":84,"Evdev":98,"Xkb":106,"Win":57397,"Mac":75,"Code":"NUMPAD_DIVIDE"},"NUMPAD_ENTER":{"USB":88,"Evdev":96,"Xkb":104,"Win":57372,"Mac":76,"Code":"NUMPAD_ENTER"},"NUMPAD_EQUAL":{"USB":103,"Evdev":117,"Xkb":125,"Win":89,"Mac":81,"Code":"NUMPAD_EQUAL"},"NUMPAD_MEMORY_ADD":{"USB":211,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_ADD"},"NUMPAD_MEMORY_CLEAR":{"USB":210,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_CLEAR"},"NUMPAD_MEMORY_RECALL":{"USB":209,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_RECALL"},"NUMPAD_MEMORY_STORE":{"USB":208,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_STORE"},"NUMPAD_MEMORY_SUBTRACT":{"USB":212,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_SUBTRACT"},"NUMPAD_MULTIPLY":{"USB":85,"Evdev":55,"Xkb":63,"Win":55,"Mac":67,"Code":"NUMPAD_MULTIPLY"},"NUMPAD_PAREN_LEFT":{"USB":182,"Evdev":179,"Xkb":187,"Win":0,"Mac":65535,"Code":"NUMPAD_PAREN_LEFT"},"NUMPAD_PAREN_RIGHT":{"USB":183,"Evdev":180,"Xkb":188,"Win":0,"Mac":65535,"Code":"NUMPAD_PAREN_RIGHT"},"NUMPAD_SIGN_CHANGE":{"USB":215,"Evdev":118,"Xkb":126,"Win":0,"Mac":65535,"Code":"NUMPAD_SIGN_CHANGE"},"NUMPAD_SUBTRACT":{"USB":86,"Evdev":74,"Xkb":82,"Win":74,"Mac":78,"Code":"NUMPAD_SUBTRACT"},"NUM_LOCK":{"USB":83,"Evdev":69,"Xkb":77,"Win":57413,"Mac":71,"Code":"NUM_LOCK"},"OPEN":{"USB":116,"Evdev":134,"Xkb":142,"Win":0,"Mac":65535,"Code":"OPEN"},"PAGE_DOWN":{"USB":78,"Evdev":109,"Xkb":117,"Win":57425,"Mac":121,"Code":"PAGE_DOWN"},"PAGE_UP":{"USB":75,"Evdev":104,"Xkb":112,"Win":57417,"Mac":116,"Code":"PAGE_UP"},"PASTE":{"USB":125,"Evdev":135,"Xkb":143,"Win":57354,"Mac":65535,"Code":"PASTE"},"PAUSE":{"USB":72,"Evdev":119,"Xkb":127,"Win":69,"Mac":65535,"Code":"PAUSE"},"PERIOD":{"USB":55,"Evdev":52,"Xkb":60,"Win":52,"Mac":47,"Code":"PERIOD"},"POWER":{"USB":102,"Evdev":116,"Xkb":124,"Win":57438,"Mac":65535,"Code":"POWER"},"PRINT":{"USB":520,"Evdev":210,"Xkb":218,"Win":0,"Mac":65535,"Code":"PRINT"},"PRINT_SCREEN":{"USB":70,"Evdev":99,"Xkb":107,"Win":57399,"Mac":65535,"Code":"PRINT_SCREEN"},"PRIVACY_SCREEN_TOGGLE":{"USB":23,"Evdev":633,"Xkb":641,"Win":0,"Mac":65535,"Code":"PRIVACY_SCREEN_TOGGLE"},"PROGRAM_GUIDE":{"USB":141,"Evdev":362,"Xkb":370,"Win":0,"Mac":65535,"Code":"PROGRAM_GUIDE"},"PROPS":{"USB":163,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"PROPS"},"QUOTE":{"USB":52,"Evdev":40,"Xkb":48,"Win":40,"Mac":39,"Code":"QUOTE"},"REDO":{"USB":633,"Evdev":182,"Xkb":190,"Win":0,"Mac":65535,"Code":"REDO"},"RESUME":{"USB":21,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"RESUME"},"SAVE":{"USB":519,"Evdev":234,"Xkb":242,"Win":0,"Mac":65535,"Code":"SAVE"},"SCROLL_LOCK":{"USB":71,"Evdev":70,"Xkb":78,"Win":70,"Mac":65535,"Code":"SCROLL_LOCK"},"SELECT":{"USB":119,"Evdev":132,"Xkb":140,"Win":0,"Mac":65535,"Code":"SELECT"},"SELECT_TASK":{"USB":418,"Evdev":580,"Xkb":588,"Win":0,"Mac":65535,"Code":"SELECT_TASK"},"SEMICOLON":{"USB":51,"Evdev":39,"Xkb":47,"Win":39,"Mac":41,"Code":"SEMICOLON"},"SHIFT_LEFT":{"USB":225,"Evdev":42,"Xkb":50,"Win":42,"Mac":56,"Code":"SHIFT_LEFT"},"SHIFT_RIGHT":{"USB":229,"Evdev":54,"Xkb":62,"Win":54,"Mac":60,"Code":"SHIFT_RIGHT"},"SHOW_ALL_WINDOWS":{"USB":671,"Evdev":120,"Xkb":128,"Win":0,"Mac":65535,"Code":"SHOW_ALL_WINDOWS"},"SLASH":{"USB":56,"Evdev":53,"Xkb":61,"Win":53,"Mac":44,"Code":"SLASH"},"SLEEP":{"USB":130,"Evdev":142,"Xkb":150,"Win":57439,"Mac":65535,"Code":"SLEEP"},"SPACE":{"USB":44,"Evdev":57,"Xkb":65,"Win":57,"Mac":49,"Code":"SPACE"},"SPEECH_INPUT_TOGGLE":{"USB":207,"Evdev":582,"Xkb":590,"Win":0,"Mac":65535,"Code":"SPEECH_INPUT_TOGGLE"},"SPELL_CHECK":{"USB":427,"Evdev":432,"Xkb":440,"Win":0,"Mac":65535,"Code":"SPELL_CHECK"},"SUPER":{"USB":17,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"SUPER"},"SUSPEND":{"USB":20,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"SUSPEND"},"TAB":{"USB":43,"Evdev":15,"Xkb":23,"Win":15,"Mac":48,"Code":"TAB"},"TURBO":{"USB":22,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"TURBO"},"UNDO":{"USB":122,"Evdev":131,"Xkb":139,"Win":57352,"Mac":65535,"Code":"UNDO"},"USB_ERROR_ROLL_OVER":{"USB":1,"Evdev":0,"Xkb":0,"Win":255,"Mac":65535,"Code":"USB_ERROR_ROLL_OVER"},"USB_ERROR_UNDEFINED":{"USB":3,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"USB_ERROR_UNDEFINED"},"USB_POST_FAIL":{"USB":2,"Evdev":0,"Xkb":0,"Win":252,"Mac":65535,"Code":"USB_POST_FAIL"},"USB_RESERVED":{"USB":0,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"USB_RESERVED"},"US_A":{"USB":4,"Evdev":30,"Xkb":38,"Win":30,"Mac":0,"Code":"US_A"},"US_B":{"USB":5,"Evdev":48,"Xkb":56,"Win":48,"Mac":11,"Code":"US_B"},"US_C":{"USB":6,"Evdev":46,"Xkb":54,"Win":46,"Mac":8,"Code":"US_C"},"US_D":{"USB":7,"Evdev":32,"Xkb":40,"Win":32,"Mac":2,"Code":"US_D"},"US_E":{"USB":8,"Evdev":18,"Xkb":26,"Win":18,"Mac":14,"Code":"US_E"},"US_F":{"USB":9,"Evdev":33,"Xkb":41,"Win":33,"Mac":3,"Code":"US_F"},"US_G":{"USB":10,"Evdev":34,"Xkb":42,"Win":34,"Mac":5,"Code":"US_G"},"US_H":{"USB":11,"Evdev":35,"Xkb":43,"Win":35,"Mac":4,"Code":"US_H"},"US_I":{"USB":12,"Evdev":23,"Xkb":31,"Win":23,"Mac":34,"Code":"US_I"},"US_J":{"USB":13,"Evdev":36,"Xkb":44,"Win":36,"Mac":38,"Code":"US_J"},"US_K":{"USB":14,"Evdev":37,"Xkb":45,"Win":37,"Mac":40,"Code":"US_K"},"US_L":{"USB":15,"Evdev":38,"Xkb":46,"Win":38,"Mac":37,"Code":"US_L"},"US_M":{"USB":16,"Evdev":50,"Xkb":58,"Win":50,"Mac":46,"Code":"US_M"},"US_N":{"USB":17,"Evdev":49,"Xkb":57,"Win":49,"Mac":45,"Code":"US_N"},"US_O":{"USB":18,"Evdev":24,"Xkb":32,"Win":24,"Mac":31,"Code":"US_O"},"US_P":{"USB":19,"Evdev":25,"Xkb":33,"Win":25,"Mac":35,"Code":"US_P"},"US_Q":{"USB":20,"Evdev":16,"Xkb":24,"Win":16,"Mac":12,"Code":"US_Q"},"US_R":{"USB":21,"Evdev":19,"Xkb":27,"Win":19,"Mac":15,"Code":"US_R"},"US_S":{"USB":22,"Evdev":31,"Xkb":39,"Win":31,"Mac":1,"Code":"US_S"},"US_T":{"USB":23,"Evdev":20,"Xkb":28,"Win":20,"Mac":17,"Code":"US_T"},"US_U":{"USB":24,"Evdev":22,"Xkb":30,"Win":22,"Mac":32,"Code":"US_U"},"US_V":{"USB":25,"Evdev":47,"Xkb":55,"Win":47,"Mac":9,"Code":"US_V"},"US_W":{"USB":26,"Evdev":17,"Xkb":25,"Win":17,"Mac":13,"Code":"US_W"},"US_X":{"USB":27,"Evdev":45,"Xkb":53,"Win":45,"Mac":7,"Code":"US_X"},"US_Y":{"USB":28,"Evdev":21,"Xkb":29,"Win":21,"Mac":16,"Code":"US_Y"},"US_Z":{"USB":29,"Evdev":44,"Xkb":52,"Win":44,"Mac":6,"Code":"US_Z"},"VOLUME_DOWN":{"USB":129,"Evdev":114,"Xkb":122,"Win":57390,"Mac":73,"Code":"VOLUME_DOWN"},"VOLUME_MUTE":{"USB":127,"Evdev":113,"Xkb":121,"Win":57376,"Mac":74,"Code":"VOLUME_MUTE"},"VOLUME_UP":{"USB":128,"Evdev":115,"Xkb":123,"Win":57392,"Mac":72,"Code":"VOLUME_UP"},"WAKE_UP":{"USB":131,"Evdev":143,"Xkb":151,"Win":57443,"Mac":65535,"Code":"WAKE_UP"},"ZOOM_IN":{"USB":557,"Evdev":418,"Xkb":426,"Win":0,"Mac":65535,"Code":"ZOOM_IN"},"ZOOM_OUT":{"USB":558,"Evdev":419,"Xkb":427,"Win":0,"Mac":65535,"Code":"ZOOM_OUT"},"ZOOM_TOGGLE":{"USB":562,"Evdev":372,"Xkb":380,"Win":0,"Mac":65535,"Code":"ZOOM_TOGGLE"}},"Arr":[{"USB":0,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NONE"},{"USB":16,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"HYPER"},{"USB":17,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"SUPER"},{"USB":18,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"FN"},{"USB":19,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"FN_LOCK"},{"USB":20,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"SUSPEND"},{"USB":21,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"RESUME"},{"USB":22,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"TURBO"},{"USB":23,"Evdev":633,"Xkb":641,"Win":0,"Mac":65535,"Code":"PRIVACY_SCREEN_TOGGLE"},{"USB":130,"Evdev":142,"Xkb":150,"Win":57439,"Mac":65535,"Code":"SLEEP"},{"USB":131,"Evdev":143,"Xkb":151,"Win":57443,"Mac":65535,"Code":"WAKE_UP"},{"USB":181,"Evdev":227,"Xkb":235,"Win":0,"Mac":65535,"Code":"DISPLAY_TOGGLE_INT_EXT"},{"USB":0,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"USB_RESERVED"},{"USB":1,"Evdev":0,"Xkb":0,"Win":255,"Mac":65535,"Code":"USB_ERROR_ROLL_OVER"},{"USB":2,"Evdev":0,"Xkb":0,"Win":252,"Mac":65535,"Code":"USB_POST_FAIL"},{"USB":3,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"USB_ERROR_UNDEFINED"},{"USB":4,"Evdev":30,"Xkb":38,"Win":30,"Mac":0,"Code":"US_A"},{"USB":5,"Evdev":48,"Xkb":56,"Win":48,"Mac":11,"Code":"US_B"},{"USB":6,"Evdev":46,"Xkb":54,"Win":46,"Mac":8,"Code":"US_C"},{"USB":7,"Evdev":32,"Xkb":40,"Win":32,"Mac":2,"Code":"US_D"},{"USB":8,"Evdev":18,"Xkb":26,"Win":18,"Mac":14,"Code":"US_E"},{"USB":9,"Evdev":33,"Xkb":41,"Win":33,"Mac":3,"Code":"US_F"},{"USB":10,"Evdev":34,"Xkb":42,"Win":34,"Mac":5,"Code":"US_G"},{"USB":11,"Evdev":35,"Xkb":43,"Win":35,"Mac":4,"Code":"US_H"},{"USB":12,"Evdev":23,"Xkb":31,"Win":23,"Mac":34,"Code":"US_I"},{"USB":13,"Evdev":36,"Xkb":44,"Win":36,"Mac":38,"Code":"US_J"},{"USB":14,"Evdev":37,"Xkb":45,"Win":37,"Mac":40,"Code":"US_K"},{"USB":15,"Evdev":38,"Xkb":46,"Win":38,"Mac":37,"Code":"US_L"},{"USB":16,"Evdev":50,"Xkb":58,"Win":50,"Mac":46,"Code":"US_M"},{"USB":17,"Evdev":49,"Xkb":57,"Win":49,"Mac":45,"Code":"US_N"},{"USB":18,"Evdev":24,"Xkb":32,"Win":24,"Mac":31,"Code":"US_O"},{"USB":19,"Evdev":25,"Xkb":33,"Win":25,"Mac":35,"Code":"US_P"},{"USB":20,"Evdev":16,"Xkb":24,"Win":16,"Mac":12,"Code":"US_Q"},{"USB":21,"Evdev":19,"Xkb":27,"Win":19,"Mac":15,"Code":"US_R"},{"USB":22,"Evdev":31,"Xkb":39,"Win":31,"Mac":1,"Code":"US_S"},{"USB":23,"Evdev":20,"Xkb":28,"Win":20,"Mac":17,"Code":"US_T"},{"USB":24,"Evdev":22,"Xkb":30,"Win":22,"Mac":32,"Code":"US_U"},{"USB":25,"Evdev":47,"Xkb":55,"Win":47,"Mac":9,"Code":"US_V"},{"USB":26,"Evdev":17,"Xkb":25,"Win":17,"Mac":13,"Code":"US_W"},{"USB":27,"Evdev":45,"Xkb":53,"Win":45,"Mac":7,"Code":"US_X"},{"USB":28,"Evdev":21,"Xkb":29,"Win":21,"Mac":16,"Code":"US_Y"},{"USB":29,"Evdev":44,"Xkb":52,"Win":44,"Mac":6,"Code":"US_Z"},{"USB":40,"Evdev":28,"Xkb":36,"Win":28,"Mac":36,"Code":"ENTER"},{"USB":41,"Evdev":1,"Xkb":9,"Win":1,"Mac":53,"Code":"ESCAPE"},{"USB":42,"Evdev":14,"Xkb":22,"Win":14,"Mac":51,"Code":"BACKSPACE"},{"USB":43,"Evdev":15,"Xkb":23,"Win":15,"Mac":48,"Code":"TAB"},{"USB":44,"Evdev":57,"Xkb":65,"Win":57,"Mac":49,"Code":"SPACE"},{"USB":45,"Evdev":12,"Xkb":20,"Win":12,"Mac":27,"Code":"MINUS"},{"USB":46,"Evdev":13,"Xkb":21,"Win":13,"Mac":24,"Code":"EQUAL"},{"USB":47,"Evdev":26,"Xkb":34,"Win":26,"Mac":33,"Code":"BRACKET_LEFT"},{"USB":48,"Evdev":27,"Xkb":35,"Win":27,"Mac":30,"Code":"BRACKET_RIGHT"},{"USB":49,"Evdev":43,"Xkb":51,"Win":43,"Mac":42,"Code":"BACKSLASH"},{"USB":51,"Evdev":39,"Xkb":47,"Win":39,"Mac":41,"Code":"SEMICOLON"},{"USB":52,"Evdev":40,"Xkb":48,"Win":40,"Mac":39,"Code":"QUOTE"},{"USB":53,"Evdev":41,"Xkb":49,"Win":41,"Mac":50,"Code":"BACKQUOTE"},{"USB":54,"Evdev":51,"Xkb":59,"Win":51,"Mac":43,"Code":"COMMA"},{"USB":55,"Evdev":52,"Xkb":60,"Win":52,"Mac":47,"Code":"PERIOD"},{"USB":56,"Evdev":53,"Xkb":61,"Win":53,"Mac":44,"Code":"SLASH"},{"USB":57,"Evdev":58,"Xkb":66,"Win":58,"Mac":57,"Code":"CAPS_LOCK"},{"USB":70,"Evdev":99,"Xkb":107,"Win":57399,"Mac":65535,"Code":"PRINT_SCREEN"},{"USB":71,"Evdev":70,"Xkb":78,"Win":70,"Mac":65535,"Code":"SCROLL_LOCK"},{"USB":72,"Evdev":119,"Xkb":127,"Win":69,"Mac":65535,"Code":"PAUSE"},{"USB":73,"Evdev":110,"Xkb":118,"Win":57426,"Mac":114,"Code":"INSERT"},{"USB":74,"Evdev":102,"Xkb":110,"Win":57415,"Mac":115,"Code":"HOME"},{"USB":75,"Evdev":104,"Xkb":112,"Win":57417,"Mac":116,"Code":"PAGE_UP"},{"USB":76,"Evdev":111,"Xkb":119,"Win":57427,"Mac":117,"Code":"DEL"},{"USB":77,"Evdev":107,"Xkb":115,"Win":57423,"Mac":119,"Code":"END"},{"USB":78,"Evdev":109,"Xkb":117,"Win":57425,"Mac":121,"Code":"PAGE_DOWN"},{"USB":79,"Evdev":106,"Xkb":114,"Win":57421,"Mac":124,"Code":"ARROW_RIGHT"},{"USB":80,"Evdev":105,"Xkb":113,"Win":57419,"Mac":123,"Code":"ARROW_LEFT"},{"USB":81,"Evdev":108,"Xkb":116,"Win":57424,"Mac":125,"Code":"ARROW_DOWN"},{"USB":82,"Evdev":103,"Xkb":111,"Win":57416,"Mac":126,"Code":"ARROW_UP"},{"USB":83,"Evdev":69,"Xkb":77,"Win":57413,"Mac":71,"Code":"NUM_LOCK"},{"USB":84,"Evdev":98,"Xkb":106,"Win":57397,"Mac":75,"Code":"NUMPAD_DIVIDE"},{"USB":85,"Evdev":55,"Xkb":63,"Win":55,"Mac":67,"Code":"NUMPAD_MULTIPLY"},{"USB":86,"Evdev":74,"Xkb":82,"Win":74,"Mac":78,"Code":"NUMPAD_SUBTRACT"},{"USB":87,"Evdev":78,"Xkb":86,"Win":78,"Mac":69,"Code":"NUMPAD_ADD"},{"USB":88,"Evdev":96,"Xkb":104,"Win":57372,"Mac":76,"Code":"NUMPAD_ENTER"},{"USB":99,"Evdev":83,"Xkb":91,"Win":83,"Mac":65,"Code":"NUMPAD_DECIMAL"},{"USB":100,"Evdev":86,"Xkb":94,"Win":86,"Mac":10,"Code":"INTL_BACKSLASH"},{"USB":101,"Evdev":127,"Xkb":135,"Win":57437,"Mac":110,"Code":"CONTEXT_MENU"},{"USB":102,"Evdev":116,"Xkb":124,"Win":57438,"Mac":65535,"Code":"POWER"},{"USB":103,"Evdev":117,"Xkb":125,"Win":89,"Mac":81,"Code":"NUMPAD_EQUAL"},{"USB":116,"Evdev":134,"Xkb":142,"Win":0,"Mac":65535,"Code":"OPEN"},{"USB":117,"Evdev":138,"Xkb":146,"Win":57403,"Mac":65535,"Code":"HELP"},{"USB":119,"Evdev":132,"Xkb":140,"Win":0,"Mac":65535,"Code":"SELECT"},{"USB":121,"Evdev":129,"Xkb":137,"Win":0,"Mac":65535,"Code":"AGAIN"},{"USB":122,"Evdev":131,"Xkb":139,"Win":57352,"Mac":65535,"Code":"UNDO"},{"USB":123,"Evdev":137,"Xkb":145,"Win":57367,"Mac":65535,"Code":"CUT"},{"USB":124,"Evdev":133,"Xkb":141,"Win":57368,"Mac":65535,"Code":"COPY"},{"USB":125,"Evdev":135,"Xkb":143,"Win":57354,"Mac":65535,"Code":"PASTE"},{"USB":126,"Evdev":136,"Xkb":144,"Win":0,"Mac":65535,"Code":"FIND"},{"USB":127,"Evdev":113,"Xkb":121,"Win":57376,"Mac":74,"Code":"VOLUME_MUTE"},{"USB":128,"Evdev":115,"Xkb":123,"Win":57392,"Mac":72,"Code":"VOLUME_UP"},{"USB":129,"Evdev":114,"Xkb":122,"Win":57390,"Mac":73,"Code":"VOLUME_DOWN"},{"USB":133,"Evdev":121,"Xkb":129,"Win":126,"Mac":95,"Code":"NUMPAD_COMMA"},{"USB":135,"Evdev":89,"Xkb":97,"Win":115,"Mac":94,"Code":"INTL_RO"},{"USB":136,"Evdev":93,"Xkb":101,"Win":112,"Mac":65535,"Code":"KANA_MODE"},{"USB":137,"Evdev":124,"Xkb":132,"Win":125,"Mac":93,"Code":"INTL_YEN"},{"USB":138,"Evdev":92,"Xkb":100,"Win":121,"Mac":65535,"Code":"CONVERT"},{"USB":139,"Evdev":94,"Xkb":102,"Win":123,"Mac":65535,"Code":"NON_CONVERT"},{"USB":155,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"ABORT"},{"USB":163,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"PROPS"},{"USB":182,"Evdev":179,"Xkb":187,"Win":0,"Mac":65535,"Code":"NUMPAD_PAREN_LEFT"},{"USB":183,"Evdev":180,"Xkb":188,"Win":0,"Mac":65535,"Code":"NUMPAD_PAREN_RIGHT"},{"USB":187,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_BACKSPACE"},{"USB":208,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_STORE"},{"USB":209,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_RECALL"},{"USB":210,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_CLEAR"},{"USB":211,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_ADD"},{"USB":212,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_SUBTRACT"},{"USB":215,"Evdev":118,"Xkb":126,"Win":0,"Mac":65535,"Code":"NUMPAD_SIGN_CHANGE"},{"USB":216,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_CLEAR"},{"USB":217,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_CLEAR_ENTRY"},{"USB":224,"Evdev":29,"Xkb":37,"Win":29,"Mac":59,"Code":"CONTROL_LEFT"},{"USB":225,"Evdev":42,"Xkb":50,"Win":42,"Mac":56,"Code":"SHIFT_LEFT"},{"USB":226,"Evdev":56,"Xkb":64,"Win":56,"Mac":58,"Code":"ALT_LEFT"},{"USB":227,"Evdev":125,"Xkb":133,"Win":57435,"Mac":55,"Code":"META_LEFT"},{"USB":228,"Evdev":97,"Xkb":105,"Win":57373,"Mac":62,"Code":"CONTROL_RIGHT"},{"USB":229,"Evdev":54,"Xkb":62,"Win":54,"Mac":60,"Code":"SHIFT_RIGHT"},{"USB":230,"Evdev":100,"Xkb":108,"Win":57400,"Mac":61,"Code":"ALT_RIGHT"},{"USB":231,"Evdev":126,"Xkb":134,"Win":57436,"Mac":54,"Code":"META_RIGHT"},{"USB":96,"Evdev":358,"Xkb":366,"Win":0,"Mac":65535,"Code":"INFO"},{"USB":97,"Evdev":370,"Xkb":378,"Win":0,"Mac":65535,"Code":"CLOSED_CAPTION_TOGGLE"},{"USB":111,"Evdev":225,"Xkb":233,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_UP"},{"USB":112,"Evdev":224,"Xkb":232,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_DOWN"},{"USB":114,"Evdev":431,"Xkb":439,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_TOGGLE"},{"USB":115,"Evdev":592,"Xkb":600,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_MINIMIUM"},{"USB":116,"Evdev":593,"Xkb":601,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_MAXIMUM"},{"USB":117,"Evdev":244,"Xkb":252,"Win":0,"Mac":65535,"Code":"BRIGHTNESS_AUTO"},{"USB":121,"Evdev":230,"Xkb":238,"Win":0,"Mac":65535,"Code":"KBD_ILLUM_UP"},{"USB":122,"Evdev":229,"Xkb":237,"Win":0,"Mac":65535,"Code":"KBD_ILLUM_DOWN"},{"USB":131,"Evdev":405,"Xkb":413,"Win":0,"Mac":65535,"Code":"MEDIA_LAST"},{"USB":140,"Evdev":169,"Xkb":177,"Win":0,"Mac":65535,"Code":"LAUNCH_PHONE"},{"USB":141,"Evdev":362,"Xkb":370,"Win":0,"Mac":65535,"Code":"PROGRAM_GUIDE"},{"USB":148,"Evdev":174,"Xkb":182,"Win":0,"Mac":65535,"Code":"EXIT"},{"USB":156,"Evdev":410,"Xkb":418,"Win":0,"Mac":65535,"Code":"CHANNEL_UP"},{"USB":157,"Evdev":411,"Xkb":419,"Win":0,"Mac":65535,"Code":"CHANNEL_DOWN"},{"USB":176,"Evdev":207,"Xkb":215,"Win":0,"Mac":65535,"Code":"MEDIA_PLAY"},{"USB":177,"Evdev":201,"Xkb":209,"Win":0,"Mac":65535,"Code":"MEDIA_PAUSE"},{"USB":178,"Evdev":167,"Xkb":175,"Win":0,"Mac":65535,"Code":"MEDIA_RECORD"},{"USB":179,"Evdev":208,"Xkb":216,"Win":0,"Mac":65535,"Code":"MEDIA_FAST_FORWARD"},{"USB":180,"Evdev":168,"Xkb":176,"Win":0,"Mac":65535,"Code":"MEDIA_REWIND"},{"USB":181,"Evdev":163,"Xkb":171,"Win":57369,"Mac":65535,"Code":"MEDIA_TRACK_NEXT"},{"USB":182,"Evdev":165,"Xkb":173,"Win":57360,"Mac":65535,"Code":"MEDIA_TRACK_PREVIOUS"},{"USB":183,"Evdev":166,"Xkb":174,"Win":57380,"Mac":65535,"Code":"MEDIA_STOP"},{"USB":184,"Evdev":161,"Xkb":169,"Win":57388,"Mac":65535,"Code":"EJECT"},{"USB":205,"Evdev":164,"Xkb":172,"Win":57378,"Mac":65535,"Code":"MEDIA_PLAY_PAUSE"},{"USB":207,"Evdev":582,"Xkb":590,"Win":0,"Mac":65535,"Code":"SPEECH_INPUT_TOGGLE"},{"USB":229,"Evdev":209,"Xkb":217,"Win":0,"Mac":65535,"Code":"BASS_BOOST"},{"USB":387,"Evdev":171,"Xkb":179,"Win":57453,"Mac":65535,"Code":"MEDIA_SELECT"},{"USB":388,"Evdev":421,"Xkb":429,"Win":0,"Mac":65535,"Code":"LAUNCH_WORD_PROCESSOR"},{"USB":390,"Evdev":423,"Xkb":431,"Win":0,"Mac":65535,"Code":"LAUNCH_SPREADSHEET"},{"USB":394,"Evdev":155,"Xkb":163,"Win":57452,"Mac":65535,"Code":"LAUNCH_MAIL"},{"USB":397,"Evdev":429,"Xkb":437,"Win":0,"Mac":65535,"Code":"LAUNCH_CONTACTS"},{"USB":398,"Evdev":397,"Xkb":405,"Win":0,"Mac":65535,"Code":"LAUNCH_CALENDAR"},{"USB":406,"Evdev":150,"Xkb":158,"Win":0,"Mac":65535,"Code":"LAUNCH_INTERNET_BROWSER"},{"USB":414,"Evdev":152,"Xkb":160,"Win":0,"Mac":65535,"Code":"LOCK_SCREEN"},{"USB":415,"Evdev":579,"Xkb":587,"Win":0,"Mac":65535,"Code":"LAUNCH_CONTROL_PANEL"},{"USB":418,"Evdev":580,"Xkb":588,"Win":0,"Mac":65535,"Code":"SELECT_TASK"},{"USB":423,"Evdev":235,"Xkb":243,"Win":0,"Mac":65535,"Code":"LAUNCH_DOCUMENTS"},{"USB":427,"Evdev":432,"Xkb":440,"Win":0,"Mac":65535,"Code":"SPELL_CHECK"},{"USB":430,"Evdev":374,"Xkb":382,"Win":0,"Mac":65535,"Code":"LAUNCH_KEYBOARD_LAYOUT"},{"USB":433,"Evdev":581,"Xkb":589,"Win":0,"Mac":65535,"Code":"LAUNCH_SCREEN_SAVER"},{"USB":459,"Evdev":583,"Xkb":591,"Win":0,"Mac":65535,"Code":"LAUNCH_ASSISTANT"},{"USB":439,"Evdev":392,"Xkb":400,"Win":0,"Mac":65535,"Code":"LAUNCH_AUDIO_BROWSER"},{"USB":513,"Evdev":181,"Xkb":189,"Win":0,"Mac":65535,"Code":"NEW"},{"USB":515,"Evdev":206,"Xkb":214,"Win":0,"Mac":65535,"Code":"CLOSE"},{"USB":519,"Evdev":234,"Xkb":242,"Win":0,"Mac":65535,"Code":"SAVE"},{"USB":520,"Evdev":210,"Xkb":218,"Win":0,"Mac":65535,"Code":"PRINT"},{"USB":545,"Evdev":217,"Xkb":225,"Win":57445,"Mac":65535,"Code":"BROWSER_SEARCH"},{"USB":547,"Evdev":172,"Xkb":180,"Win":57394,"Mac":65535,"Code":"BROWSER_HOME"},{"USB":548,"Evdev":158,"Xkb":166,"Win":57450,"Mac":65535,"Code":"BROWSER_BACK"},{"USB":549,"Evdev":159,"Xkb":167,"Win":57449,"Mac":65535,"Code":"BROWSER_FORWARD"},{"USB":550,"Evdev":128,"Xkb":136,"Win":57448,"Mac":65535,"Code":"BROWSER_STOP"},{"USB":551,"Evdev":173,"Xkb":181,"Win":57447,"Mac":65535,"Code":"BROWSER_REFRESH"},{"USB":554,"Evdev":156,"Xkb":164,"Win":57446,"Mac":65535,"Code":"BROWSER_FAVORITES"},{"USB":557,"Evdev":418,"Xkb":426,"Win":0,"Mac":65535,"Code":"ZOOM_IN"},{"USB":558,"Evdev":419,"Xkb":427,"Win":0,"Mac":65535,"Code":"ZOOM_OUT"},{"USB":562,"Evdev":372,"Xkb":380,"Win":0,"Mac":65535,"Code":"ZOOM_TOGGLE"},{"USB":633,"Evdev":182,"Xkb":190,"Win":0,"Mac":65535,"Code":"REDO"},{"USB":649,"Evdev":232,"Xkb":240,"Win":0,"Mac":65535,"Code":"MAIL_REPLY"},{"USB":651,"Evdev":233,"Xkb":241,"Win":0,"Mac":65535,"Code":"MAIL_FORWARD"},{"USB":652,"Evdev":231,"Xkb":239,"Win":0,"Mac":65535,"Code":"MAIL_SEND"},{"USB":669,"Evdev":584,"Xkb":592,"Win":0,"Mac":65535,"Code":"KEYBOARD_LAYOUT_SELECT"},{"USB":671,"Evdev":120,"Xkb":128,"Win":0,"Mac":65535,"Code":"SHOW_ALL_WINDOWS"}]} \ No newline at end of file diff --git a/hid/generator/gen.go b/hid/generator/gen.go new file mode 100644 index 0000000..38c97af --- /dev/null +++ b/hid/generator/gen.go @@ -0,0 +1,74 @@ +package main + +import ( + "encoding/json" + "io" + "io/fs" + "os" + "regexp" + "strconv" +) + +type KeyMaps struct { + USB map[uint16]Key + EVDEV map[uint16]Key + XKB map[uint16]Key + Win map[uint16]Key + Mac map[uint16]Key + Code map[string]Key + Arr []Key +} + +type Key struct { + USB uint16 + Evdev uint16 + Xkb uint16 + Win uint16 + Mac uint16 + Code string +} + +func main() { + rege, _ := regexp.Compile("DOM_CODE\\(0x[0-9a-f]{2}([0-9a-f]*), 0x([0-9a-f]*), 0x([0-9a-f]*), 0x([0-9a-f]*), 0x([0-9a-f]*), \"?[A-Za-z]*\"?, ([A-Za-z_]*)") + //DOM_CODE(USB, evdev, XKB, Win, Mac, _, Code) + fil, _ := os.OpenFile("hid/data/keycode_data.inc", 0, fs.FileMode(os.O_RDONLY)) + byts, _ := io.ReadAll(fil) + fil.Close() + matches := rege.FindAllSubmatch(byts, -1) + KeyMaps := KeyMaps{ + USB: make(map[uint16]Key), + EVDEV: make(map[uint16]Key), + XKB: make(map[uint16]Key), + Win: make(map[uint16]Key), + Mac: make(map[uint16]Key), + Code: make(map[string]Key), + } + Arr := make([]Key, 0) + for _, bar := range matches { + U, _ := strconv.ParseUint(string(bar[1]), 16, 16) + E, _ := strconv.ParseUint(string(bar[2]), 16, 16) + X, _ := strconv.ParseUint(string(bar[3]), 16, 16) + W, _ := strconv.ParseUint(string(bar[4]), 16, 16) + M, _ := strconv.ParseUint(string(bar[5]), 16, 16) + Keys := Key{ + USB: uint16(U), + Evdev: uint16(E), + Xkb: uint16(X), + Win: uint16(W), + Mac: uint16(M), + Code: string(bar[6]), + } + KeyMaps.USB[uint16(U)] = Keys + KeyMaps.EVDEV[uint16(E)] = Keys + KeyMaps.XKB[uint16(X)] = Keys + KeyMaps.Win[uint16(W)] = Keys + KeyMaps.Mac[uint16(M)] = Keys + KeyMaps.Code[string(bar[6])] = Keys + Arr = append(Arr, Keys) + } + KeyMaps.Arr = Arr + out, _ := os.Create("hid/generated.json") + defer out.Close() + jso, _ := json.Marshal(KeyMaps) + out.Write(jso) +} diff --git a/hid/hid.go b/hid/hid.go index 1ad05d9..1f3ea7e 100644 --- a/hid/hid.go +++ b/hid/hid.go @@ -1,43 +1,43 @@ package hid -var KEYCODE_LINUX_FROM_HID = [256]byte{ - 255, 255, 255, 255, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38, 50, 49, 24, 25, 16, 19, 31, 20, - 22, 47, 17, 45, 21, 44, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 255, 1, 14, 15, 57, 12, 13, 26, 27, 43, 255, - 39, 40, 41, 51, 52, 53, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 87, 88, 255, 70, 119, 110, 102, - 104, 111, 107, 109, 106, 105, 108, 103, 69, 98, 55, 74, 78, 96, 79, 80, 81, 75, 76, 77, 71, 72, - 73, 82, 83, 86, 255, 255, 117, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 255, - 255, 139, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 99, - 255, 255, 255, 28, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 29, 42, 56, 125, 97, 54, 100, 126, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, +import "encoding/json" + +type KeyMaps struct { + USB map[uint16]Key + EVDEV map[uint16]Key + XKB map[uint16]Key + Win map[uint16]Key + Mac map[uint16]Key + Code map[string]Key + Arr []Key +} + +type Key struct { + USB uint16 + Evdev uint16 + Xkb uint16 + Win uint16 + Mac uint16 + Code string +} + +var Mappings KeyMaps = KeyMaps{} + +//go:embed hid/generated.json +var file []byte + +func init() { + json.Unmarshal(file, &Mappings) +} +func GetWindowsFromHid(uv uint16) uint16 { + return Mappings.USB[uv].Win +} +func GetHidFromWindows(uv uint16) uint16 { + return Mappings.Win[uv].USB } -var KEYCODE_LINUX_TO_HID = [256]byte{ - 0, 41, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 45, 46, 42, 43, 20, 26, 8, 21, 23, 28, 24, 12, 18, 19, - 47, 48, 158, 224, 4, 22, 7, 9, 10, 11, 13, 14, 15, 51, 52, 53, 225, 49, 29, 27, 6, 25, 5, 17, 16, 54, - 55, 56, 229, 85, 226, 44, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 83, 71, 95, 96, 97, 86, 92, - 93, 94, 87, 89, 90, 91, 98, 99, 0, 0, 100, 68, 69, 0, 0, 0, 0, 0, 0, 0, 88, 228, 84, 154, 230, 0, 74, - 82, 75, 80, 79, 77, 81, 78, 73, 76, 0, 0, 0, 0, 0, 103, 0, 72, 0, 0, 0, 0, 0, 227, 231, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +func GetLinuxFromHid(uv uint16) uint16 { + return Mappings.USB[uv].Evdev } -var KEYCODE_WINDOWS_FROM_HID = [256]byte{ - 255, 255, 255, 255, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38, 50, 49, 24, 25, 16, 19, 31, 20, - 22, 47, 17, 45, 21, 44, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 255, 1, 14, 15, 57, 12, 13, 26, 27, 43, 255, - 39, 40, 41, 51, 52, 53, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 87, 88, 183, 70, 69, 210, 199, - 201, 211, 207, 209, 205, 203, 208, 200, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 28, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 29, 42, 56, - 219, 157, 54, 184, 220, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +func GetHidFromLinux(uv uint16) uint16 { + return Mappings.EVDEV[uv].USB } diff --git a/module.go b/module.go new file mode 100644 index 0000000..d0d85fe --- /dev/null +++ b/module.go @@ -0,0 +1,3 @@ +package OrbCommon + +//go:generate go run hid/generator/gen.go