Make xkb_map_get_as_string test more comprehensive
authorDaniel Stone <daniel@fooishbar.org>
Mon, 4 Jun 2012 12:27:41 +0000 (13:27 +0100)
committerDaniel Stone <daniel@fooishbar.org>
Mon, 4 Jun 2012 12:27:41 +0000 (13:27 +0100)
Add a test/dump.data file which contains the result we're expecting from
xkb_map_get_as_string run on a particularly complex set of keymaps, and
assert that the string representations are the same.  This means that
any updates to xkb_map_get_as_string will also need to update the test
data, but should also ensure that we don't have any more parser
regressions.

Compared with diff to the output of setxkbmap + xkbcomp for the same
keymap; seems completely solid.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
test/dump.c
test/dump.data [new file with mode: 0644]

index 5d2484e..bd6d1ab 100644 (file)
@@ -25,9 +25,13 @@ authorization from the authors.
 */
 
 #include <assert.h>
+#include <fcntl.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
 
 #include "xkbcommon/xkbcommon.h"
 
@@ -38,18 +42,41 @@ int main(int argc, char *argv[])
     struct xkb_rule_names names = {
         .rules = "evdev",
         .model = "pc105",
-        .layout = "us",
-        .variant = NULL,
+        .layout = "us,ru,ca,de",
+        .variant = ",,multix,neo",
         .options = NULL,
     };
-    char *as_string;
+    struct stat stat_buf;
+    char *as_string, *expected;
+    const char *srcdir = getenv("srcdir");
+    char *path;
+    int fd;
+
+    assert(srcdir);
+    assert(asprintf(&path, "%s/test/dump.data", srcdir) != -1);
+    fd = open(path, O_RDONLY);
+    assert(fd >= 0);
+    assert(stat(path, &stat_buf) == 0);
+    assert(stat_buf.st_size > 0);
+
+    expected = mmap(NULL, stat_buf.st_size, PROT_READ, MAP_SHARED, fd, 0);
+    assert(expected != MAP_FAILED);
 
     assert(ctx);
     keymap = xkb_map_new_from_names(ctx, &names, 0);
+    assert(keymap);
 
     as_string = xkb_map_get_as_string(keymap);
     assert(as_string);
-    printf("%s\n", as_string);
+
+    if (strcmp(as_string, expected) != 0) {
+        printf("dumped map differs from expected!\n\n");
+        printf("length: got %lu, expected %lu\n",
+               (unsigned long) strlen(as_string),
+               (unsigned long) strlen(expected));
+        printf("result:\n%s\n", as_string);
+        assert(0);
+    }
 
     free(as_string);
     xkb_map_unref(keymap);
diff --git a/test/dump.data b/test/dump.data
new file mode 100644 (file)
index 0000000..5ff80c1
--- /dev/null
@@ -0,0 +1,1898 @@
+xkb_keymap {
+       xkb_keycodes {
+               minimum = 8;
+               maximum = 255;
+                <ESC> = 9;
+               <AE01> = 10;
+               <AE02> = 11;
+               <AE03> = 12;
+               <AE04> = 13;
+               <AE05> = 14;
+               <AE06> = 15;
+               <AE07> = 16;
+               <AE08> = 17;
+               <AE09> = 18;
+               <AE10> = 19;
+               <AE11> = 20;
+               <AE12> = 21;
+               <BKSP> = 22;
+                <TAB> = 23;
+               <AD01> = 24;
+               <AD02> = 25;
+               <AD03> = 26;
+               <AD04> = 27;
+               <AD05> = 28;
+               <AD06> = 29;
+               <AD07> = 30;
+               <AD08> = 31;
+               <AD09> = 32;
+               <AD10> = 33;
+               <AD11> = 34;
+               <AD12> = 35;
+               <RTRN> = 36;
+               <LCTL> = 37;
+               <AC01> = 38;
+               <AC02> = 39;
+               <AC03> = 40;
+               <AC04> = 41;
+               <AC05> = 42;
+               <AC06> = 43;
+               <AC07> = 44;
+               <AC08> = 45;
+               <AC09> = 46;
+               <AC10> = 47;
+               <AC11> = 48;
+               <TLDE> = 49;
+               <LFSH> = 50;
+               <BKSL> = 51;
+               <AB01> = 52;
+               <AB02> = 53;
+               <AB03> = 54;
+               <AB04> = 55;
+               <AB05> = 56;
+               <AB06> = 57;
+               <AB07> = 58;
+               <AB08> = 59;
+               <AB09> = 60;
+               <AB10> = 61;
+               <RTSH> = 62;
+               <KPMU> = 63;
+               <LALT> = 64;
+               <SPCE> = 65;
+               <CAPS> = 66;
+               <FK01> = 67;
+               <FK02> = 68;
+               <FK03> = 69;
+               <FK04> = 70;
+               <FK05> = 71;
+               <FK06> = 72;
+               <FK07> = 73;
+               <FK08> = 74;
+               <FK09> = 75;
+               <FK10> = 76;
+               <NMLK> = 77;
+               <SCLK> = 78;
+                <KP7> = 79;
+                <KP8> = 80;
+                <KP9> = 81;
+               <KPSU> = 82;
+                <KP4> = 83;
+                <KP5> = 84;
+                <KP6> = 85;
+               <KPAD> = 86;
+                <KP1> = 87;
+                <KP2> = 88;
+                <KP3> = 89;
+                <KP0> = 90;
+               <KPDL> = 91;
+               <LVL3> = 92;
+               <LSGT> = 94;
+               <FK11> = 95;
+               <FK12> = 96;
+               <AB11> = 97;
+               <KATA> = 98;
+               <HIRA> = 99;
+               <HENK> = 100;
+               <HKTG> = 101;
+               <MUHE> = 102;
+               <JPCM> = 103;
+               <KPEN> = 104;
+               <RCTL> = 105;
+               <KPDV> = 106;
+               <PRSC> = 107;
+               <RALT> = 108;
+               <LNFD> = 109;
+               <HOME> = 110;
+                 <UP> = 111;
+               <PGUP> = 112;
+               <LEFT> = 113;
+               <RGHT> = 114;
+                <END> = 115;
+               <DOWN> = 116;
+               <PGDN> = 117;
+                <INS> = 118;
+               <DELE> = 119;
+               <I120> = 120;
+               <MUTE> = 121;
+               <VOL-> = 122;
+               <VOL+> = 123;
+               <POWR> = 124;
+               <KPEQ> = 125;
+               <I126> = 126;
+               <PAUS> = 127;
+               <I128> = 128;
+               <I129> = 129;
+               <HNGL> = 130;
+               <HJCV> = 131;
+               <AE13> = 132;
+               <LWIN> = 133;
+               <RWIN> = 134;
+               <COMP> = 135;
+               <STOP> = 136;
+               <AGAI> = 137;
+               <PROP> = 138;
+               <UNDO> = 139;
+               <FRNT> = 140;
+               <COPY> = 141;
+               <OPEN> = 142;
+               <PAST> = 143;
+               <FIND> = 144;
+                <CUT> = 145;
+               <HELP> = 146;
+               <I147> = 147;
+               <I148> = 148;
+               <I149> = 149;
+               <I150> = 150;
+               <I151> = 151;
+               <I152> = 152;
+               <I153> = 153;
+               <I154> = 154;
+               <I155> = 155;
+               <I156> = 156;
+               <I157> = 157;
+               <I158> = 158;
+               <I159> = 159;
+               <I160> = 160;
+               <I161> = 161;
+               <I162> = 162;
+               <I163> = 163;
+               <I164> = 164;
+               <I165> = 165;
+               <I166> = 166;
+               <I167> = 167;
+               <I168> = 168;
+               <I169> = 169;
+               <I170> = 170;
+               <I171> = 171;
+               <I172> = 172;
+               <I173> = 173;
+               <I174> = 174;
+               <I175> = 175;
+               <I176> = 176;
+               <I177> = 177;
+               <I178> = 178;
+               <I179> = 179;
+               <I180> = 180;
+               <I181> = 181;
+               <I182> = 182;
+               <I183> = 183;
+               <I184> = 184;
+               <I185> = 185;
+               <I186> = 186;
+               <I187> = 187;
+               <I188> = 188;
+               <I189> = 189;
+               <I190> = 190;
+               <FK13> = 191;
+               <FK14> = 192;
+               <FK15> = 193;
+               <FK16> = 194;
+               <FK17> = 195;
+               <FK18> = 196;
+               <FK19> = 197;
+               <FK20> = 198;
+               <FK21> = 199;
+               <FK22> = 200;
+               <FK23> = 201;
+               <FK24> = 202;
+               <MDSW> = 203;
+                <ALT> = 204;
+               <META> = 205;
+               <SUPR> = 206;
+               <HYPR> = 207;
+               <I208> = 208;
+               <I209> = 209;
+               <I210> = 210;
+               <I211> = 211;
+               <I212> = 212;
+               <I213> = 213;
+               <I214> = 214;
+               <I215> = 215;
+               <I216> = 216;
+               <I217> = 217;
+               <I218> = 218;
+               <I219> = 219;
+               <I220> = 220;
+               <I221> = 221;
+               <I222> = 222;
+               <I223> = 223;
+               <I224> = 224;
+               <I225> = 225;
+               <I226> = 226;
+               <I227> = 227;
+               <I228> = 228;
+               <I229> = 229;
+               <I230> = 230;
+               <I231> = 231;
+               <I232> = 232;
+               <I233> = 233;
+               <I234> = 234;
+               <I235> = 235;
+               <I236> = 236;
+               <I237> = 237;
+               <I238> = 238;
+               <I239> = 239;
+               <I240> = 240;
+               <I241> = 241;
+               <I242> = 242;
+               <I243> = 243;
+               <I244> = 244;
+               <I245> = 245;
+               <I246> = 246;
+               <I247> = 247;
+               <I248> = 248;
+               <I249> = 249;
+               <I250> = 250;
+               <I251> = 251;
+               <I252> = 252;
+               <I253> = 253;
+               indicator 1 = "Caps Lock";
+               indicator 2 = "Num Lock";
+               indicator 3 = "Scroll Lock";
+               indicator 4 = "Compose";
+               indicator 5 = "Kana";
+               indicator 6 = "Sleep";
+               indicator 7 = "Suspend";
+               indicator 8 = "Mute";
+               indicator 9 = "Misc";
+               indicator 10 = "Mail";
+               indicator 11 = "Charging";
+               indicator 12 = "Shift Lock";
+               indicator 13 = "Group 2";
+               indicator 14 = "Mouse Keys";
+               alias <AC12> = <BKSL>;
+               alias <MENU> = <COMP>;
+               alias <HZTG> = <TLDE>;
+               alias <LMTA> = <LWIN>;
+               alias <RMTA> = <RWIN>;
+               alias <ALGR> = <RALT>;
+               alias <KPPT> = <I129>;
+               alias <LatQ> = <AD01>;
+               alias <LatW> = <AD02>;
+               alias <LatE> = <AD03>;
+               alias <LatR> = <AD04>;
+               alias <LatT> = <AD05>;
+               alias <LatY> = <AD06>;
+               alias <LatU> = <AD07>;
+               alias <LatI> = <AD08>;
+               alias <LatO> = <AD09>;
+               alias <LatP> = <AD10>;
+               alias <LatA> = <AC01>;
+               alias <LatS> = <AC02>;
+               alias <LatD> = <AC03>;
+               alias <LatF> = <AC04>;
+               alias <LatG> = <AC05>;
+               alias <LatH> = <AC06>;
+               alias <LatJ> = <AC07>;
+               alias <LatK> = <AC08>;
+               alias <LatL> = <AC09>;
+               alias <LatZ> = <AB01>;
+               alias <LatX> = <AB02>;
+               alias <LatC> = <AB03>;
+               alias <LatV> = <AB04>;
+               alias <LatB> = <AB05>;
+               alias <LatN> = <AB06>;
+               alias <LatM> = <AB07>;
+       };
+
+       xkb_types {
+
+               virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;
+
+               type "ONE_LEVEL" {
+                       modifiers= none;
+                       level_name[Level1]= "Any";
+               };
+               type "TWO_LEVEL" {
+                       modifiers= Shift;
+                       map[Shift]= Level2;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Shift";
+               };
+               type "ALPHABETIC" {
+                       modifiers= Shift+Lock;
+                       map[Shift]= Level2;
+                       map[Lock]= Level2;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Caps";
+               };
+               type "KEYPAD" {
+                       modifiers= Shift+NumLock;
+                       map[Shift]= Level2;
+                       map[NumLock]= Level2;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Number";
+               };
+               type "SHIFT+ALT" {
+                       modifiers= Shift+Alt;
+                       map[Shift+Alt]= Level2;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Shift+Alt";
+               };
+               type "PC_CONTROL_LEVEL2" {
+                       modifiers= Control;
+                       map[Control]= Level2;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Control";
+               };
+               type "PC_LCONTROL_LEVEL2" {
+                       modifiers= LControl;
+                       map[LControl]= Level2;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "LControl";
+               };
+               type "PC_RCONTROL_LEVEL2" {
+                       modifiers= RControl;
+                       map[RControl]= Level2;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "RControl";
+               };
+               type "PC_ALT_LEVEL2" {
+                       modifiers= Alt;
+                       map[Alt]= Level2;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Alt";
+               };
+               type "PC_LALT_LEVEL2" {
+                       modifiers= LAlt;
+                       map[LAlt]= Level2;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "LAlt";
+               };
+               type "PC_RALT_LEVEL2" {
+                       modifiers= RAlt;
+                       map[RAlt]= Level2;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "RAlt";
+               };
+               type "CTRL+ALT" {
+                       modifiers= Shift+Control+Alt+LevelThree;
+                       map[Shift]= Level2;
+                       map[LevelThree]= Level3;
+                       map[Shift+LevelThree]= Level4;
+                       map[Control+Alt]= Level5;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Shift";
+                       level_name[Level3]= "Alt Base";
+                       level_name[Level4]= "Shift Alt";
+                       level_name[Level5]= "Ctrl+Alt";
+               };
+               type "LOCAL_EIGHT_LEVEL" {
+                       modifiers= Shift+Lock+Control+LevelThree;
+                       map[Shift+Lock]= Level1;
+                       map[Shift]= Level2;
+                       map[Lock]= Level2;
+                       map[LevelThree]= Level3;
+                       map[Shift+Lock+LevelThree]= Level3;
+                       map[Shift+LevelThree]= Level4;
+                       map[Lock+LevelThree]= Level4;
+                       map[Control]= Level5;
+                       map[Shift+Lock+Control]= Level5;
+                       map[Shift+Control]= Level6;
+                       map[Lock+Control]= Level6;
+                       map[Control+LevelThree]= Level7;
+                       map[Shift+Lock+Control+LevelThree]= Level7;
+                       map[Shift+Control+LevelThree]= Level8;
+                       map[Lock+Control+LevelThree]= Level8;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Shift";
+                       level_name[Level3]= "Level3";
+                       level_name[Level4]= "Shift Level3";
+                       level_name[Level5]= "Ctrl";
+                       level_name[Level6]= "Shift Ctrl";
+                       level_name[Level7]= "Level3 Ctrl";
+                       level_name[Level8]= "Shift Level3 Ctrl";
+               };
+               type "THREE_LEVEL" {
+                       modifiers= Shift+LevelThree;
+                       map[Shift]= Level2;
+                       map[LevelThree]= Level3;
+                       map[Shift+LevelThree]= Level3;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Shift";
+                       level_name[Level3]= "Level3";
+               };
+               type "EIGHT_LEVEL" {
+                       modifiers= Shift+LevelThree+LevelFive;
+                       map[Shift]= Level2;
+                       map[LevelThree]= Level3;
+                       map[Shift+LevelThree]= Level4;
+                       map[LevelFive]= Level5;
+                       map[Shift+LevelFive]= Level6;
+                       map[LevelThree+LevelFive]= Level7;
+                       map[Shift+LevelThree+LevelFive]= Level8;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Shift";
+                       level_name[Level3]= "Alt Base";
+                       level_name[Level4]= "Shift Alt";
+                       level_name[Level5]= "X";
+                       level_name[Level6]= "X Shift";
+                       level_name[Level7]= "X Alt Base";
+                       level_name[Level8]= "X Shift Alt";
+               };
+               type "EIGHT_LEVEL_ALPHABETIC" {
+                       modifiers= Shift+Lock+LevelThree+LevelFive;
+                       map[Shift]= Level2;
+                       map[Lock]= Level2;
+                       map[LevelThree]= Level3;
+                       map[Shift+LevelThree]= Level4;
+                       map[Lock+LevelThree]= Level4;
+                       map[Shift+Lock+LevelThree]= Level3;
+                       map[LevelFive]= Level5;
+                       map[Shift+LevelFive]= Level6;
+                       map[Lock+LevelFive]= Level6;
+                       map[LevelThree+LevelFive]= Level7;
+                       map[Shift+LevelThree+LevelFive]= Level8;
+                       map[Lock+LevelThree+LevelFive]= Level8;
+                       map[Shift+Lock+LevelThree+LevelFive]= Level7;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Shift";
+                       level_name[Level3]= "Alt Base";
+                       level_name[Level4]= "Shift Alt";
+                       level_name[Level5]= "X";
+                       level_name[Level6]= "X Shift";
+                       level_name[Level7]= "X Alt Base";
+                       level_name[Level8]= "X Shift Alt";
+               };
+               type "EIGHT_LEVEL_SEMIALPHABETIC" {
+                       modifiers= Shift+Lock+LevelThree+LevelFive;
+                       map[Shift]= Level2;
+                       map[Lock]= Level2;
+                       map[LevelThree]= Level3;
+                       map[Shift+LevelThree]= Level4;
+                       map[Lock+LevelThree]= Level3;
+                       preserve[Lock+LevelThree]= Lock;
+                       map[Shift+Lock+LevelThree]= Level4;
+                       preserve[Shift+Lock+LevelThree]= Lock;
+                       map[LevelFive]= Level5;
+                       map[Shift+LevelFive]= Level6;
+                       map[Lock+LevelFive]= Level6;
+                       preserve[Lock+LevelFive]= Lock;
+                       map[LevelThree+LevelFive]= Level7;
+                       map[Shift+LevelThree+LevelFive]= Level8;
+                       map[Lock+LevelThree+LevelFive]= Level7;
+                       preserve[Lock+LevelThree+LevelFive]= Lock;
+                       map[Shift+Lock+LevelThree+LevelFive]= Level8;
+                       preserve[Shift+Lock+LevelThree+LevelFive]= Lock;
+                       map[Shift+Lock+LevelFive]= Level1;
+                       preserve[Shift+Lock+LevelFive]= Lock;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Shift";
+                       level_name[Level3]= "Alt Base";
+                       level_name[Level4]= "Shift Alt";
+                       level_name[Level5]= "X";
+                       level_name[Level6]= "X Shift";
+                       level_name[Level7]= "X Alt Base";
+                       level_name[Level8]= "X Shift Alt";
+               };
+               type "FOUR_LEVEL" {
+                       modifiers= Shift+LevelThree;
+                       map[Shift]= Level2;
+                       map[LevelThree]= Level3;
+                       map[Shift+LevelThree]= Level4;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Shift";
+                       level_name[Level3]= "Alt Base";
+                       level_name[Level4]= "Shift Alt";
+               };
+               type "FOUR_LEVEL_ALPHABETIC" {
+                       modifiers= Shift+Lock+LevelThree;
+                       map[Shift]= Level2;
+                       map[Lock]= Level2;
+                       map[LevelThree]= Level3;
+                       map[Shift+LevelThree]= Level4;
+                       map[Lock+LevelThree]= Level4;
+                       map[Shift+Lock+LevelThree]= Level3;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Shift";
+                       level_name[Level3]= "Alt Base";
+                       level_name[Level4]= "Shift Alt";
+               };
+               type "FOUR_LEVEL_SEMIALPHABETIC" {
+                       modifiers= Shift+Lock+LevelThree;
+                       map[Shift]= Level2;
+                       map[Lock]= Level2;
+                       map[LevelThree]= Level3;
+                       map[Shift+LevelThree]= Level4;
+                       map[Lock+LevelThree]= Level3;
+                       preserve[Lock+LevelThree]= Lock;
+                       map[Shift+Lock+LevelThree]= Level4;
+                       preserve[Shift+Lock+LevelThree]= Lock;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Shift";
+                       level_name[Level3]= "Alt Base";
+                       level_name[Level4]= "Shift Alt";
+               };
+               type "FOUR_LEVEL_MIXED_KEYPAD" {
+                       modifiers= Shift+NumLock+LevelThree;
+                       map[Shift+NumLock]= Level1;
+                       map[NumLock]= Level2;
+                       map[Shift]= Level2;
+                       map[LevelThree]= Level3;
+                       map[NumLock+LevelThree]= Level3;
+                       map[Shift+LevelThree]= Level4;
+                       map[Shift+NumLock+LevelThree]= Level4;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Number";
+                       level_name[Level3]= "Alt Base";
+                       level_name[Level4]= "Shift Alt";
+               };
+               type "FOUR_LEVEL_X" {
+                       modifiers= Shift+Control+Alt+LevelThree;
+                       map[LevelThree]= Level2;
+                       map[Shift+LevelThree]= Level3;
+                       map[Control+Alt]= Level4;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Alt Base";
+                       level_name[Level3]= "Shift Alt";
+                       level_name[Level4]= "Ctrl+Alt";
+               };
+               type "SEPARATE_CAPS_AND_SHIFT_ALPHABETIC" {
+                       modifiers= Shift+Lock+LevelThree;
+                       map[Shift]= Level2;
+                       map[Lock]= Level4;
+                       preserve[Lock]= Lock;
+                       map[LevelThree]= Level3;
+                       map[Shift+LevelThree]= Level4;
+                       map[Lock+LevelThree]= Level3;
+                       preserve[Lock+LevelThree]= Lock;
+                       map[Shift+Lock+LevelThree]= Level3;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Shift";
+                       level_name[Level3]= "AltGr Base";
+                       level_name[Level4]= "Shift AltGr";
+               };
+               type "FOUR_LEVEL_PLUS_LOCK" {
+                       modifiers= Shift+Lock+LevelThree;
+                       map[Shift]= Level2;
+                       map[LevelThree]= Level3;
+                       map[Shift+LevelThree]= Level4;
+                       map[Lock]= Level5;
+                       map[Shift+Lock]= Level2;
+                       map[Lock+LevelThree]= Level3;
+                       map[Shift+Lock+LevelThree]= Level4;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Shift";
+                       level_name[Level3]= "Alt Base";
+                       level_name[Level4]= "Shift Alt";
+                       level_name[Level5]= "Lock";
+               };
+               type "FOUR_LEVEL_KEYPAD" {
+                       modifiers= Shift+NumLock+LevelThree;
+                       map[Shift]= Level2;
+                       map[NumLock]= Level2;
+                       map[LevelThree]= Level3;
+                       map[Shift+LevelThree]= Level4;
+                       map[NumLock+LevelThree]= Level4;
+                       map[Shift+NumLock+LevelThree]= Level3;
+                       level_name[Level1]= "Base";
+                       level_name[Level2]= "Number";
+                       level_name[Level3]= "Alt Base";
+                       level_name[Level4]= "Alt Number";
+               };
+       };
+
+       xkb_compatibility {
+
+               virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;
+
+               interpret.useModMapMods= AnyLevel;
+               interpret.repeat= false;
+               interpret.locking= false;
+               interpret ISO_Level2_Latch+Exactly(Shift) {
+                       useModMapMods=level1;
+                       action= LatchMods(modifiers=Shift,clearLocks,latchToLock);
+               };
+               interpret Shift_Lock+AnyOf(Shift+Lock) {
+                       action= LockMods(modifiers=Shift);
+               };
+               interpret Num_Lock+AnyOf(all) {
+                       virtualModifier= NumLock;
+                       action= LockMods(modifiers=NumLock);
+               };
+               interpret ISO_Lock+AnyOf(all) {
+                       action= NoAction();
+               };
+               interpret ISO_Level3_Shift+AnyOf(all) {
+                       virtualModifier= LevelThree;
+                       useModMapMods=level1;
+                       action= SetMods(modifiers=LevelThree,clearLocks);
+               };
+               interpret ISO_Level3_Latch+AnyOf(all) {
+                       virtualModifier= LevelThree;
+                       useModMapMods=level1;
+                       action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
+               };
+               interpret ISO_Level3_Lock+AnyOf(all) {
+                       virtualModifier= LevelThree;
+                       useModMapMods=level1;
+                       action= LockMods(modifiers=LevelThree);
+               };
+               interpret Alt_L+AnyOf(all) {
+                       virtualModifier= Alt;
+                       action= SetMods(modifiers=modMapMods,clearLocks);
+               };
+               interpret Alt_R+AnyOf(all) {
+                       virtualModifier= Alt;
+                       action= SetMods(modifiers=modMapMods,clearLocks);
+               };
+               interpret Meta_L+AnyOf(all) {
+                       virtualModifier= Meta;
+                       action= SetMods(modifiers=modMapMods,clearLocks);
+               };
+               interpret Meta_R+AnyOf(all) {
+                       virtualModifier= Meta;
+                       action= SetMods(modifiers=modMapMods,clearLocks);
+               };
+               interpret Super_L+AnyOf(all) {
+                       virtualModifier= Super;
+                       action= SetMods(modifiers=modMapMods,clearLocks);
+               };
+               interpret Super_R+AnyOf(all) {
+                       virtualModifier= Super;
+                       action= SetMods(modifiers=modMapMods,clearLocks);
+               };
+               interpret Hyper_L+AnyOf(all) {
+                       virtualModifier= Hyper;
+                       action= SetMods(modifiers=modMapMods,clearLocks);
+               };
+               interpret Hyper_R+AnyOf(all) {
+                       virtualModifier= Hyper;
+                       action= SetMods(modifiers=modMapMods,clearLocks);
+               };
+               interpret Scroll_Lock+AnyOf(all) {
+                       virtualModifier= ScrollLock;
+                       action= LockMods(modifiers=modMapMods);
+               };
+               interpret ISO_Level5_Shift+AnyOf(all) {
+                       virtualModifier= LevelFive;
+                       useModMapMods=level1;
+                       action= SetMods(modifiers=LevelFive,clearLocks);
+               };
+               interpret ISO_Level5_Latch+AnyOf(all) {
+                       virtualModifier= LevelFive;
+                       action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
+               };
+               interpret ISO_Level5_Lock+AnyOf(all) {
+                       virtualModifier= LevelFive;
+                       action= LockMods(modifiers=LevelFive);
+               };
+               interpret Mode_switch+AnyOfOrNone(all) {
+                       virtualModifier= AltGr;
+                       useModMapMods=level1;
+                       action= SetGroup(group=+1);
+               };
+               interpret ISO_Level3_Shift+AnyOfOrNone(all) {
+                       action= SetMods(modifiers=LevelThree,clearLocks);
+               };
+               interpret ISO_Level3_Latch+AnyOfOrNone(all) {
+                       action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
+               };
+               interpret ISO_Level3_Lock+AnyOfOrNone(all) {
+                       action= LockMods(modifiers=LevelThree);
+               };
+               interpret ISO_Group_Latch+AnyOfOrNone(all) {
+                       virtualModifier= AltGr;
+                       useModMapMods=level1;
+                       action= LatchGroup(group=2);
+               };
+               interpret ISO_Next_Group+AnyOfOrNone(all) {
+                       virtualModifier= AltGr;
+                       useModMapMods=level1;
+                       action= LockGroup(group=+1);
+               };
+               interpret ISO_Prev_Group+AnyOfOrNone(all) {
+                       virtualModifier= AltGr;
+                       useModMapMods=level1;
+                       action= LockGroup(group=-1);
+               };
+               interpret ISO_First_Group+AnyOfOrNone(all) {
+                       action= LockGroup(group=1);
+               };
+               interpret ISO_Last_Group+AnyOfOrNone(all) {
+                       action= LockGroup(group=2);
+               };
+               interpret KP_1+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=-1,y=+1);
+               };
+               interpret KP_End+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=-1,y=+1);
+               };
+               interpret KP_2+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=+0,y=+1);
+               };
+               interpret KP_Down+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=+0,y=+1);
+               };
+               interpret KP_3+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=+1,y=+1);
+               };
+               interpret KP_Next+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=+1,y=+1);
+               };
+               interpret KP_4+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=-1,y=+0);
+               };
+               interpret KP_Left+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=-1,y=+0);
+               };
+               interpret KP_6+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=+1,y=+0);
+               };
+               interpret KP_Right+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=+1,y=+0);
+               };
+               interpret KP_7+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=-1,y=-1);
+               };
+               interpret KP_Home+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=-1,y=-1);
+               };
+               interpret KP_8+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=+0,y=-1);
+               };
+               interpret KP_Up+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=+0,y=-1);
+               };
+               interpret KP_9+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=+1,y=-1);
+               };
+               interpret KP_Prior+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=+1,y=-1);
+               };
+               interpret KP_5+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= PtrBtn(button=default);
+               };
+               interpret KP_Begin+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= PtrBtn(button=default);
+               };
+               interpret KP_F2+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SetPtrDflt(affect=button,button=1);
+               };
+               interpret KP_Divide+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SetPtrDflt(affect=button,button=1);
+               };
+               interpret KP_F3+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SetPtrDflt(affect=button,button=2);
+               };
+               interpret KP_Multiply+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SetPtrDflt(affect=button,button=2);
+               };
+               interpret KP_F4+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SetPtrDflt(affect=button,button=3);
+               };
+               interpret KP_Subtract+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SetPtrDflt(affect=button,button=3);
+               };
+               interpret KP_Separator+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= PtrBtn(button=default,count=2);
+               };
+               interpret KP_Add+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= PtrBtn(button=default,count=2);
+               };
+               interpret KP_0+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= LockPtrBtn(button=default,affect=lock);
+               };
+               interpret KP_Insert+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= LockPtrBtn(button=default,affect=lock);
+               };
+               interpret KP_Decimal+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= LockPtrBtn(button=default,affect=unlock);
+               };
+               interpret KP_Delete+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= LockPtrBtn(button=default,affect=unlock);
+               };
+               interpret F25+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SetPtrDflt(affect=button,button=1);
+               };
+               interpret F26+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SetPtrDflt(affect=button,button=2);
+               };
+               interpret F27+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=-1,y=-1);
+               };
+               interpret F29+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=+1,y=-1);
+               };
+               interpret F31+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= PtrBtn(button=default);
+               };
+               interpret F33+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=-1,y=+1);
+               };
+               interpret F35+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= MovePtr(x=+1,y=+1);
+               };
+               interpret Pointer_Button_Dflt+AnyOfOrNone(all) {
+                       action= PtrBtn(button=default);
+               };
+               interpret Pointer_Button1+AnyOfOrNone(all) {
+                       action= PtrBtn(button=1);
+               };
+               interpret Pointer_Button2+AnyOfOrNone(all) {
+                       action= PtrBtn(button=2);
+               };
+               interpret Pointer_Button3+AnyOfOrNone(all) {
+                       action= PtrBtn(button=3);
+               };
+               interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {
+                       action= PtrBtn(button=default,count=2);
+               };
+               interpret Pointer_DblClick1+AnyOfOrNone(all) {
+                       action= PtrBtn(button=1,count=2);
+               };
+               interpret Pointer_DblClick2+AnyOfOrNone(all) {
+                       action= PtrBtn(button=2,count=2);
+               };
+               interpret Pointer_DblClick3+AnyOfOrNone(all) {
+                       action= PtrBtn(button=3,count=2);
+               };
+               interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {
+                       action= LockPtrBtn(button=default,affect=both);
+               };
+               interpret Pointer_Drag1+AnyOfOrNone(all) {
+                       action= LockPtrBtn(button=1,affect=both);
+               };
+               interpret Pointer_Drag2+AnyOfOrNone(all) {
+                       action= LockPtrBtn(button=2,affect=both);
+               };
+               interpret Pointer_Drag3+AnyOfOrNone(all) {
+                       action= LockPtrBtn(button=3,affect=both);
+               };
+               interpret Pointer_EnableKeys+AnyOfOrNone(all) {
+                       action= LockControls(controls=mouseKeys);
+               };
+               interpret Pointer_Accelerate+AnyOfOrNone(all) {
+                       action= LockControls(controls=mouseKeysAccel);
+               };
+               interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {
+                       action= SetPtrDflt(affect=button,button=+1);
+               };
+               interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {
+                       action= SetPtrDflt(affect=button,button=-1);
+               };
+               interpret AccessX_Enable+AnyOfOrNone(all) {
+                       action= LockControls(controls=accessXKeys);
+               };
+               interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {
+                       action= LockControls(controls=accessXFeedback);
+               };
+               interpret RepeatKeys_Enable+AnyOfOrNone(all) {
+                       action= LockControls(controls=repeatKeys);
+               };
+               interpret SlowKeys_Enable+AnyOfOrNone(all) {
+                       action= LockControls(controls=slowKeys);
+               };
+               interpret BounceKeys_Enable+AnyOfOrNone(all) {
+                       action= LockControls(controls=bounceKeys);
+               };
+               interpret StickyKeys_Enable+AnyOfOrNone(all) {
+                       action= LockControls(controls=stickyKeys);
+               };
+               interpret MouseKeys_Enable+AnyOfOrNone(all) {
+                       action= LockControls(controls=mouseKeys);
+               };
+               interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {
+                       action= LockControls(controls=mouseKeysAccel);
+               };
+               interpret Overlay1_Enable+AnyOfOrNone(all) {
+                       action= LockControls(controls=none);
+               };
+               interpret Overlay2_Enable+AnyOfOrNone(all) {
+                       action= LockControls(controls=none);
+               };
+               interpret AudibleBell_Enable+AnyOfOrNone(all) {
+                       action= LockControls(controls=audibleBell);
+               };
+               interpret Terminate_Server+AnyOfOrNone(all) {
+                       action= Terminate();
+               };
+               interpret Alt_L+AnyOfOrNone(all) {
+                       action= SetMods(modifiers=Alt,clearLocks);
+               };
+               interpret Alt_R+AnyOfOrNone(all) {
+                       action= SetMods(modifiers=Alt,clearLocks);
+               };
+               interpret Meta_L+AnyOfOrNone(all) {
+                       action= SetMods(modifiers=Meta,clearLocks);
+               };
+               interpret Meta_R+AnyOfOrNone(all) {
+                       action= SetMods(modifiers=Meta,clearLocks);
+               };
+               interpret Super_L+AnyOfOrNone(all) {
+                       action= SetMods(modifiers=Super,clearLocks);
+               };
+               interpret Super_R+AnyOfOrNone(all) {
+                       action= SetMods(modifiers=Super,clearLocks);
+               };
+               interpret Hyper_L+AnyOfOrNone(all) {
+                       action= SetMods(modifiers=Hyper,clearLocks);
+               };
+               interpret Hyper_R+AnyOfOrNone(all) {
+                       action= SetMods(modifiers=Hyper,clearLocks);
+               };
+               interpret Shift_L+AnyOfOrNone(all) {
+                       action= SetMods(modifiers=Shift);
+               };
+               interpret XF86Switch_VT_1+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SwitchScreen(screen=1,!same);
+               };
+               interpret XF86Switch_VT_2+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SwitchScreen(screen=2,!same);
+               };
+               interpret XF86Switch_VT_3+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SwitchScreen(screen=3,!same);
+               };
+               interpret XF86Switch_VT_4+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SwitchScreen(screen=4,!same);
+               };
+               interpret XF86Switch_VT_5+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SwitchScreen(screen=5,!same);
+               };
+               interpret XF86Switch_VT_6+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SwitchScreen(screen=6,!same);
+               };
+               interpret XF86Switch_VT_7+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SwitchScreen(screen=7,!same);
+               };
+               interpret XF86Switch_VT_8+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SwitchScreen(screen=8,!same);
+               };
+               interpret XF86Switch_VT_9+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SwitchScreen(screen=9,!same);
+               };
+               interpret XF86Switch_VT_10+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SwitchScreen(screen=10,!same);
+               };
+               interpret XF86Switch_VT_11+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SwitchScreen(screen=11,!same);
+               };
+               interpret XF86Switch_VT_12+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= SwitchScreen(screen=12,!same);
+               };
+               interpret XF86LogGrabInfo+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);
+               };
+               interpret XF86LogWindowTree+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);
+               };
+               interpret XF86Next_VMode+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
+               };
+               interpret XF86Prev_VMode+AnyOfOrNone(all) {
+                       repeat= true;
+                       action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
+               };
+               interpret ISO_Level5_Shift+AnyOfOrNone(all) {
+                       action= SetMods(modifiers=LevelFive,clearLocks);
+               };
+               interpret ISO_Level5_Latch+AnyOfOrNone(all) {
+                       action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
+               };
+               interpret ISO_Level5_Lock+AnyOfOrNone(all) {
+                       action= LockMods(modifiers=NumLock);
+               };
+               interpret Caps_Lock+AnyOfOrNone(all) {
+                       action= LockMods(modifiers=Lock);
+               };
+               interpret Any+Exactly(Lock) {
+                       action= LockMods(modifiers=Lock);
+               };
+               interpret Any+AnyOf(all) {
+                       action= SetMods(modifiers=modMapMods,clearLocks);
+               };
+               group 2 = AltGr;
+               group 3 = AltGr;
+               group 4 = AltGr;
+               indicator "Caps Lock" {
+                       whichModState= locked;
+                       modifiers= Lock;
+               };
+               indicator "Num Lock" {
+                       whichModState= locked;
+                       modifiers= NumLock;
+               };
+               indicator "Scroll Lock" {
+                       whichModState= locked;
+                       modifiers= ScrollLock;
+               };
+               indicator "Shift Lock" {
+                       whichModState= locked;
+                       modifiers= Shift;
+               };
+               indicator "Group 2" {
+                       groups= 0xfe;
+               };
+               indicator "Mouse Keys" {
+                       controls= mouseKeys;
+               };
+       };
+
+       xkb_symbols {
+
+               name[group1]="English (US)";
+               name[group2]="Russian";
+               name[group3]="Canadian Multilingual";
+               name[group4]="German (Neo 2)";
+
+               key  <ESC> {    [          Escape ] };
+               key <AE01> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [               1,          exclam ],
+                       symbols[Group2]= [               1,          exclam ],
+                       symbols[Group3]= [               1,          exclam,       plusminus,        NoSymbol,     onesuperior,      exclamdown,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               1,          degree,     onesuperior,    onesubscript,     ordfeminine,        NoSymbol,         notsign,        NoSymbol ]
+               };
+               key <AE02> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [               2,              at ],
+                       symbols[Group2]= [               2,        quotedbl ],
+                       symbols[Group3]= [               2,              at,              at,        NoSymbol,     twosuperior,        NoSymbol,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               2,         section,     twosuperior,    twosubscript,       masculine,        NoSymbol,       logicalor,        NoSymbol ]
+               };
+               key <AE03> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [               3,      numbersign ],
+                       symbols[Group2]= [               3,      numerosign ],
+                       symbols[Group3]= [               3,      numbersign,        sterling,        NoSymbol,   threesuperior,        sterling,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               3,           U2113,   threesuperior,  threesubscript,      numerosign,        NoSymbol,      logicaland,        NoSymbol ]
+               };
+               key <AE04> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [               4,          dollar ],
+                       symbols[Group2]= [               4,       semicolon ],
+                       symbols[Group3]= [               4,          dollar,            cent,        NoSymbol,      onequarter,        currency,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               4,  guillemotright,           U203a,    femalesymbol,        NoSymbol,        NoSymbol,           U22a5,        NoSymbol ]
+               };
+               key <AE05> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [               5,         percent ],
+                       symbols[Group2]= [               5,         percent ],
+                       symbols[Group3]= [               5,         percent,        currency,        NoSymbol,         onehalf,    threeeighths,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               5,   guillemotleft,           U2039,      malesymbol,  periodcentered,        NoSymbol,           U2221,        NoSymbol ]
+               };
+               key <AE06> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [               6,     asciicircum ],
+                       symbols[Group2]= [               6,           colon ],
+                       symbols[Group3]= [               6,        question,         notsign,        NoSymbol,   threequarters,     fiveeighths,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               6,          dollar,            cent,           U26a5,        sterling,        NoSymbol,           U2225,        NoSymbol ]
+               };
+               key <AE07> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [               7,       ampersand ],
+                       symbols[Group2]= [               7,        question ],
+                       symbols[Group3]= [               7,       ampersand,       braceleft,        NoSymbol,        NoSymbol,    seveneighths,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               7,        EuroSign,             yen,            U3f0,        currency,        NoSymbol,      rightarrow,        NoSymbol ]
+               };
+               key <AE08> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [               8,        asterisk ],
+                       symbols[Group2]= [               8,        asterisk ],
+                       symbols[Group3]= [               8,        asterisk,      braceright,        NoSymbol,        NoSymbol,       trademark,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               8, doublelowquotemark, singlelowquotemark,           U27e8,             Tab,    ISO_Left_Tab,           U221e,        NoSymbol ]
+               };
+               key <AE09> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [               9,       parenleft ],
+                       symbols[Group2]= [               9,       parenleft ],
+                       symbols[Group3]= [               9,       parenleft,     bracketleft,        NoSymbol,        NoSymbol,       plusminus,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               9, leftdoublequotemark, leftsinglequotemark,           U27e9,       KP_Divide,       KP_Divide,       variation,        NoSymbol ]
+               };
+               key <AE10> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [               0,      parenright ],
+                       symbols[Group2]= [               0,      parenright ],
+                       symbols[Group3]= [               0,      parenright,    bracketright,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               0, rightdoublequotemark, rightsinglequotemark,   zerosubscript,     KP_Multiply,     KP_Multiply,        emptyset,        NoSymbol ]
+               };
+               key <AE11> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [           minus,      underscore ],
+                       symbols[Group2]= [           minus,      underscore ],
+                       symbols[Group3]= [           minus,      underscore,         onehalf,        NoSymbol,        NoSymbol,    questiondown,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [           minus,          emdash,        NoSymbol,           U2011,     KP_Subtract,     KP_Subtract,          hyphen,        NoSymbol ]
+               };
+               key <AE12> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [           equal,            plus ],
+                       symbols[Group2]= [           equal,            plus ],
+                       symbols[Group3]= [           equal,            plus,         notsign,        NoSymbol,    dead_cedilla,     dead_ogonek,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [      dead_grave,    dead_cedilla,  dead_abovering, dead_abovereversedcomma,  dead_diaeresis,        NoSymbol,     dead_macron,        NoSymbol ]
+               };
+               key <BKSP> {    [       BackSpace,       BackSpace ] };
+               key  <TAB> {
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [             Tab,    ISO_Left_Tab ],
+                       symbols[Group2]= [             Tab,    ISO_Left_Tab ],
+                       symbols[Group3]= [             Tab,    ISO_Left_Tab ],
+                       symbols[Group4]= [             Tab,    ISO_Left_Tab,       Multi_key, ISO_Level5_Lock,        NoSymbol,        NoSymbol,        NoSymbol, ISO_Level5_Lock ]
+               };
+               key <AD01> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               q,               Q ],
+                       symbols[Group2]= [ Cyrillic_shorti, Cyrillic_SHORTI ],
+                       symbols[Group3]= [               q,               Q,        NoSymbol,        NoSymbol,        NoSymbol,     Greek_OMEGA,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               x,               X,        ellipsis,        Greek_xi,           Prior,           Prior,        Greek_XI,        NoSymbol ]
+               };
+               key <AD02> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               w,               W ],
+                       symbols[Group2]= [    Cyrillic_tse,    Cyrillic_TSE ],
+                       symbols[Group3]= [               w,               W,        NoSymbol,        NoSymbol,         lstroke,         Lstroke,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               v,               V,      underscore,        NoSymbol,       BackSpace,       BackSpace,         radical,        NoSymbol ]
+               };
+               key <AD03> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               e,               E ],
+                       symbols[Group2]= [      Cyrillic_u,      Cyrillic_U ],
+                       symbols[Group3]= [               e,               E,        NoSymbol,        NoSymbol,              oe,              OE,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               l,               L,     bracketleft,     Greek_lamda,              Up,              Up,     Greek_LAMDA,        NoSymbol ]
+               };
+               key <AD04> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               r,               R ],
+                       symbols[Group2]= [     Cyrillic_ka,     Cyrillic_KA ],
+                       symbols[Group3]= [               r,               R,        NoSymbol,        NoSymbol,       paragraph,      registered,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               c,               C,    bracketright,       Greek_chi,          Delete,          Delete,           U2102,        NoSymbol ]
+               };
+               key <AD05> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               t,               T ],
+                       symbols[Group2]= [     Cyrillic_ie,     Cyrillic_IE ],
+                       symbols[Group3]= [               t,               T,        NoSymbol,        NoSymbol,          tslash,          Tslash,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               w,               W,     asciicircum,     Greek_omega,            Next,            Next,     Greek_OMEGA,        NoSymbol ]
+               };
+               key <AD06> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               y,               Y ],
+                       symbols[Group2]= [     Cyrillic_en,     Cyrillic_EN ],
+                       symbols[Group3]= [               y,               Y,        NoSymbol,        NoSymbol,       leftarrow,             yen,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               k,               K,          exclam,     Greek_kappa,      exclamdown,        NoSymbol,        multiply,        NoSymbol ]
+               };
+               key <AD07> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               u,               U ],
+                       symbols[Group2]= [    Cyrillic_ghe,    Cyrillic_GHE ],
+                       symbols[Group3]= [               u,               U,        NoSymbol,        NoSymbol,       downarrow,         uparrow,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               h,               H,            less,       Greek_psi,            KP_7,            KP_7,       Greek_PSI,        NoSymbol ]
+               };
+               key <AD08> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               i,               I ],
+                       symbols[Group2]= [    Cyrillic_sha,    Cyrillic_SHA ],
+                       symbols[Group3]= [               i,               I,        NoSymbol,        NoSymbol,      rightarrow,        idotless,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               g,               G,         greater,     Greek_gamma,            KP_8,            KP_8,     Greek_GAMMA,        NoSymbol ]
+               };
+               key <AD09> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               o,               O ],
+                       symbols[Group2]= [  Cyrillic_shcha,  Cyrillic_SHCHA ],
+                       symbols[Group3]= [               o,               O,         section,        NoSymbol,          oslash,          Oslash,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               f,               F,           equal,       Greek_phi,            KP_9,            KP_9,       Greek_PHI,        NoSymbol ]
+               };
+               key <AD10> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               p,               P ],
+                       symbols[Group2]= [     Cyrillic_ze,     Cyrillic_ZE ],
+                       symbols[Group3]= [               p,               P,       paragraph,        NoSymbol,           thorn,           THORN,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               q,               Q,       ampersand,            U3d5,          KP_Add,          KP_Add,           U211a,        NoSymbol ]
+               };
+               key <AD11> {
+                       type[Group3]= "EIGHT_LEVEL",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [     bracketleft,       braceleft ],
+                       symbols[Group2]= [     Cyrillic_ha,     Cyrillic_HA ],
+                       symbols[Group3]= [ dead_circumflex,  dead_diaeresis,      dead_grave,        NoSymbol,        NoSymbol,  dead_abovering,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [          ssharp,           U1e9e,            U17f, Greek_finalsmallsigma,           U2212,        NoSymbol,             jot,        NoSymbol ]
+               };
+               key <AD12> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [    bracketright,      braceright ],
+                       symbols[Group2]= [ Cyrillic_hardsign, Cyrillic_HARDSIGN ],
+                       symbols[Group3]= [        ccedilla,        Ccedilla,      asciitilde,        NoSymbol,      dead_tilde,     dead_macron,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [      dead_acute,      dead_tilde,     dead_stroke, dead_abovecomma, dead_doubleacute,        NoSymbol,      dead_breve,        NoSymbol ]
+               };
+               key <RTRN> {    [          Return ] };
+               key <LCTL> {    [       Control_L ] };
+               key <AC01> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               a,               A ],
+                       symbols[Group2]= [     Cyrillic_ef,     Cyrillic_EF ],
+                       symbols[Group3]= [               a,               A,        NoSymbol,        NoSymbol,              ae,              AE,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               u,               U,       backslash,        NoSymbol,            Home,            Home,      includedin,        NoSymbol ]
+               };
+               key <AC02> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               s,               S ],
+                       symbols[Group2]= [   Cyrillic_yeru,   Cyrillic_YERU ],
+                       symbols[Group3]= [               s,               S,        NoSymbol,        NoSymbol,          ssharp,         section,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               i,               I,           slash,      Greek_iota,            Left,            Left,        integral,        NoSymbol ]
+               };
+               key <AC03> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               d,               D ],
+                       symbols[Group2]= [     Cyrillic_ve,     Cyrillic_VE ],
+                       symbols[Group3]= [               d,               D,        NoSymbol,        NoSymbol,             eth,             ETH,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               a,               A,       braceleft,     Greek_alpha,            Down,            Down,           U2200,        NoSymbol ]
+               };
+               key <AC04> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               f,               F ],
+                       symbols[Group2]= [      Cyrillic_a,      Cyrillic_A ],
+                       symbols[Group3]= [               f,               F,        NoSymbol,        NoSymbol,        NoSymbol,     ordfeminine,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               e,               E,      braceright,   Greek_epsilon,           Right,           Right,           U2203,        NoSymbol ]
+               };
+               key <AC05> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               g,               G ],
+                       symbols[Group2]= [     Cyrillic_pe,     Cyrillic_PE ],
+                       symbols[Group3]= [               g,               G,        NoSymbol,        NoSymbol,             eng,             ENG,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               o,               O,        asterisk,   Greek_omicron,             End,             End,       elementof,        NoSymbol ]
+               };
+               key <AC06> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               h,               H ],
+                       symbols[Group2]= [     Cyrillic_er,     Cyrillic_ER ],
+                       symbols[Group3]= [               h,               H,        NoSymbol,        NoSymbol,         hstroke,         Hstroke,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               s,               S,        question,     Greek_sigma,    questiondown,        NoSymbol,     Greek_SIGMA,        NoSymbol ]
+               };
+               key <AC07> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               j,               J ],
+                       symbols[Group2]= [      Cyrillic_o,      Cyrillic_O ],
+                       symbols[Group3]= [               j,               J,        NoSymbol,        NoSymbol,            U133,            U132,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               n,               N,       parenleft,        Greek_nu,            KP_4,            KP_4,           U2115,        NoSymbol ]
+               };
+               key <AC08> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               k,               K ],
+                       symbols[Group2]= [     Cyrillic_el,     Cyrillic_EL ],
+                       symbols[Group3]= [               k,               K,        NoSymbol,        NoSymbol,             kra,        NoSymbol,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               r,               R,      parenright,       Greek_rho,            KP_5,            KP_5,           U211d,        NoSymbol ]
+               };
+               key <AC09> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               l,               L ],
+                       symbols[Group2]= [     Cyrillic_de,     Cyrillic_DE ],
+                       symbols[Group3]= [               l,               L,        NoSymbol,        NoSymbol,            U140,            U13f,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               t,               T,           minus,       Greek_tau,            KP_6,            KP_6, partialderivative,        NoSymbol ]
+               };
+               key <AC10> {
+                       type[Group3]= "EIGHT_LEVEL",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [       semicolon,           colon ],
+                       symbols[Group2]= [    Cyrillic_zhe,    Cyrillic_ZHE ],
+                       symbols[Group3]= [       semicolon,           colon,          degree,        NoSymbol,      dead_acute, dead_doubleacute,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               d,               D,           colon,     Greek_delta,    KP_Separator,           comma,     Greek_DELTA,        NoSymbol ]
+               };
+               key <AC11> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [      apostrophe,        quotedbl ],
+                       symbols[Group2]= [      Cyrillic_e,      Cyrillic_E ],
+                       symbols[Group3]= [          egrave,          Egrave,       braceleft,        NoSymbol,        NoSymbol,      dead_caron,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               y,               Y,              at,   Greek_upsilon,          period,      KP_Decimal,           nabla,        NoSymbol ]
+               };
+               key <TLDE> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [           grave,      asciitilde ],
+                       symbols[Group2]= [     Cyrillic_io,     Cyrillic_IO ],
+                       symbols[Group3]= [           slash,       backslash,             bar,        NoSymbol,        NoSymbol,          hyphen,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [ dead_circumflex,      dead_caron,           U21bb,            U2de,   dead_abovedot, Pointer_EnableKeys,   dead_belowdot,        NoSymbol ]
+               };
+               key <LFSH> {
+                       type[Group4]= "TWO_LEVEL",
+                       symbols[Group1]= [         Shift_L ],
+                       symbols[Group2]= [         Shift_L ],
+                       symbols[Group3]= [         Shift_L ],
+                       symbols[Group4]= [         Shift_L,       Caps_Lock ]
+               };
+               key <BKSL> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "ONE_LEVEL",
+                       symbols[Group1]= [       backslash,             bar ],
+                       symbols[Group2]= [       backslash,           slash ],
+                       symbols[Group3]= [          agrave,          Agrave,      braceright,        NoSymbol,        NoSymbol,      dead_breve,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [ ISO_Level3_Shift ]
+               };
+               key <AB01> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "FOUR_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               z,               Z ],
+                       symbols[Group2]= [     Cyrillic_ya,     Cyrillic_YA ],
+                       symbols[Group3]= [               z,               Z,   guillemotleft,        NoSymbol ],
+                       symbols[Group4]= [      udiaeresis,      Udiaeresis,      numbersign,        NoSymbol,          Escape,          Escape,           union,        NoSymbol ]
+               };
+               key <AB02> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "FOUR_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               x,               X ],
+                       symbols[Group2]= [    Cyrillic_che,    Cyrillic_CHE ],
+                       symbols[Group3]= [               x,               X,  guillemotright,        NoSymbol ],
+                       symbols[Group4]= [      odiaeresis,      Odiaeresis,          dollar,            U3f5,             Tab,             Tab,    intersection,        NoSymbol ]
+               };
+               key <AB03> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               c,               C ],
+                       symbols[Group2]= [     Cyrillic_es,     Cyrillic_ES ],
+                       symbols[Group3]= [               c,               C,        NoSymbol,        NoSymbol,            cent,       copyright,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [      adiaeresis,      Adiaeresis,             bar,       Greek_eta,          Insert,          Insert,           U2135,        NoSymbol ]
+               };
+               key <AB04> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               v,               V ],
+                       symbols[Group2]= [     Cyrillic_em,     Cyrillic_EM ],
+                       symbols[Group3]= [               v,               V,        NoSymbol,        NoSymbol, leftdoublequotemark, leftsinglequotemark,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               p,               P,      asciitilde,        Greek_pi,          Return,          Return,        Greek_PI,        NoSymbol ]
+               };
+               key <AB05> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               b,               B ],
+                       symbols[Group2]= [      Cyrillic_i,      Cyrillic_I ],
+                       symbols[Group3]= [               b,               B,        NoSymbol,        NoSymbol, rightdoublequotemark, rightsinglequotemark,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               z,               Z,           grave,      Greek_zeta,            Undo,            Undo,           U2124,        NoSymbol ]
+               };
+               key <AB06> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               n,               N ],
+                       symbols[Group2]= [     Cyrillic_te,     Cyrillic_TE ],
+                       symbols[Group3]= [               n,               N,        NoSymbol,        NoSymbol,            U149,           U266a,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               b,               B,            plus,      Greek_beta,           colon,        NoSymbol,           U21d0,        NoSymbol ]
+               };
+               key <AB07> {
+                       type[Group1]= "ALPHABETIC",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [               m,               M ],
+                       symbols[Group2]= [ Cyrillic_softsign, Cyrillic_SOFTSIGN ],
+                       symbols[Group3]= [               m,               M,              mu,        NoSymbol,              mu,       masculine,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               m,               M,         percent,        Greek_mu,            KP_1,            KP_1,        ifonlyif,        NoSymbol ]
+               };
+               key <AB08> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [           comma,            less ],
+                       symbols[Group2]= [     Cyrillic_be,     Cyrillic_BE ],
+                       symbols[Group3]= [           comma,      apostrophe,            less,        NoSymbol,  Greek_horizbar,        multiply,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [           comma,          endash,        quotedbl,            U3f1,            KP_2,            KP_2,           U21d2,        NoSymbol ]
+               };
+               key <AB09> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [          period,         greater ],
+                       symbols[Group2]= [     Cyrillic_yu,     Cyrillic_YU ],
+                       symbols[Group3]= [          period,        quotedbl,         greater,        NoSymbol,  periodcentered,        division,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [          period, enfilledcircbullet,      apostrophe,            U3d1,            KP_3,            KP_3,           U21a6,        NoSymbol ]
+               };
+               key <AB10> {
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       symbols[Group1]= [           slash,        question ],
+                       symbols[Group2]= [          period,           comma ],
+                       symbols[Group3]= [          eacute,          Eacute,      dead_acute,        NoSymbol,        NoSymbol,   dead_abovedot,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [               j,               J,       semicolon,     Greek_theta,       semicolon,        NoSymbol,     Greek_THETA,        NoSymbol ]
+               };
+               key <RTSH> {
+                       type[Group4]= "TWO_LEVEL",
+                       symbols[Group1]= [         Shift_R ],
+                       symbols[Group2]= [         Shift_R ],
+                       symbols[Group3]= [         Shift_R ],
+                       symbols[Group4]= [         Shift_R,       Caps_Lock ]
+               };
+               key <KPMU> {
+                       type[Group1]= "CTRL+ALT",
+                       type[Group2]= "CTRL+ALT",
+                       type[Group3]= "CTRL+ALT",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [     KP_Multiply,     KP_Multiply,     KP_Multiply,     KP_Multiply,   XF86ClearGrab ],
+                       symbols[Group2]= [     KP_Multiply,     KP_Multiply,     KP_Multiply,     KP_Multiply,   XF86ClearGrab ],
+                       symbols[Group3]= [     KP_Multiply,     KP_Multiply,     KP_Multiply,     KP_Multiply,   XF86ClearGrab ],
+                       symbols[Group4]= [     KP_Multiply,     KP_Multiply,           U2219,           U2299,        multiply,        NoSymbol,           U2297,        NoSymbol ]
+               };
+               key <LALT> {    [           Alt_L,          Meta_L ] };
+               key <SPCE> {
+                       type[Group3]= "FOUR_LEVEL",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [           space ],
+                       symbols[Group2]= [           space ],
+                       symbols[Group3]= [           space,           space,    nobreakspace,        NoSymbol ],
+                       symbols[Group4]= [           space,           space,           space,    nobreakspace,            KP_0,            KP_0,           U202f,        NoSymbol ]
+               };
+               key <CAPS> {
+                       type= "ONE_LEVEL",
+                       symbols[Group1]= [       Caps_Lock ],
+                       symbols[Group2]= [       Caps_Lock ],
+                       symbols[Group3]= [       Caps_Lock ],
+                       symbols[Group4]= [ ISO_Level3_Shift ]
+               };
+               key <FK01> {
+                       type= "CTRL+ALT",
+                       symbols[Group1]= [              F1,              F1,              F1,              F1, XF86Switch_VT_1 ]
+               };
+               key <FK02> {
+                       type= "CTRL+ALT",
+                       symbols[Group1]= [              F2,              F2,              F2,              F2, XF86Switch_VT_2 ]
+               };
+               key <FK03> {
+                       type= "CTRL+ALT",
+                       symbols[Group1]= [              F3,              F3,              F3,              F3, XF86Switch_VT_3 ]
+               };
+               key <FK04> {
+                       type= "CTRL+ALT",
+                       symbols[Group1]= [              F4,              F4,              F4,              F4, XF86Switch_VT_4 ]
+               };
+               key <FK05> {
+                       type= "CTRL+ALT",
+                       symbols[Group1]= [              F5,              F5,              F5,              F5, XF86Switch_VT_5 ]
+               };
+               key <FK06> {
+                       type= "CTRL+ALT",
+                       symbols[Group1]= [              F6,              F6,              F6,              F6, XF86Switch_VT_6 ]
+               };
+               key <FK07> {
+                       type= "CTRL+ALT",
+                       symbols[Group1]= [              F7,              F7,              F7,              F7, XF86Switch_VT_7 ]
+               };
+               key <FK08> {
+                       type= "CTRL+ALT",
+                       symbols[Group1]= [              F8,              F8,              F8,              F8, XF86Switch_VT_8 ]
+               };
+               key <FK09> {
+                       type= "CTRL+ALT",
+                       symbols[Group1]= [              F9,              F9,              F9,              F9, XF86Switch_VT_9 ]
+               };
+               key <FK10> {
+                       type= "CTRL+ALT",
+                       symbols[Group1]= [             F10,             F10,             F10,             F10, XF86Switch_VT_10 ]
+               };
+               key <NMLK> {
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [        Num_Lock ],
+                       symbols[Group2]= [        Num_Lock ],
+                       symbols[Group3]= [        Num_Lock ],
+                       symbols[Group4]= [             Tab,    ISO_Left_Tab,           equal,        approxeq,        notequal, Pointer_EnableKeys,       identical,        NoSymbol ]
+               };
+               key <SCLK> {    [     Scroll_Lock ] };
+               key  <KP7> {
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [         KP_Home,            KP_7 ],
+                       symbols[Group2]= [         KP_Home,            KP_7 ],
+                       symbols[Group3]= [         KP_Home,            KP_7 ],
+                       symbols[Group4]= [            KP_7,           U2714,           U2195,           U226a,         KP_Home,         KP_Home,         upstile,        NoSymbol ]
+               };
+               key  <KP8> {
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [           KP_Up,            KP_8 ],
+                       symbols[Group2]= [           KP_Up,            KP_8 ],
+                       symbols[Group3]= [           KP_Up,            KP_8 ],
+                       symbols[Group4]= [            KP_8,           U2718,         uparrow,    intersection,           KP_Up,           KP_Up,           U22c2,        NoSymbol ]
+               };
+               key  <KP9> {
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [        KP_Prior,            KP_9 ],
+                       symbols[Group2]= [        KP_Prior,            KP_9 ],
+                       symbols[Group3]= [        KP_Prior,            KP_9 ],
+                       symbols[Group4]= [            KP_9,          dagger,           U20d7,           U226b,        KP_Prior,        KP_Prior,           U2309,        NoSymbol ]
+               };
+               key <KPSU> {
+                       type[Group1]= "CTRL+ALT",
+                       type[Group2]= "CTRL+ALT",
+                       type[Group3]= "CTRL+ALT",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [     KP_Subtract,     KP_Subtract,     KP_Subtract,     KP_Subtract,  XF86Prev_VMode ],
+                       symbols[Group2]= [     KP_Subtract,     KP_Subtract,     KP_Subtract,     KP_Subtract,  XF86Prev_VMode ],
+                       symbols[Group3]= [     KP_Subtract,     KP_Subtract,     KP_Subtract,     KP_Subtract,  XF86Prev_VMode ],
+                       symbols[Group4]= [     KP_Subtract,     KP_Subtract,           U2212,           U2296,           U2216,        NoSymbol,           U2238,        NoSymbol ]
+               };
+               key  <KP4> {
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [         KP_Left,            KP_4 ],
+                       symbols[Group2]= [         KP_Left,            KP_4 ],
+                       symbols[Group3]= [         KP_Left,            KP_4 ],
+                       symbols[Group4]= [            KP_4,            club,       leftarrow,      includedin,         KP_Left,         KP_Left,           U2286,        NoSymbol ]
+               };
+               key  <KP5> {
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [        KP_Begin,            KP_5 ],
+                       symbols[Group2]= [        KP_Begin,            KP_5 ],
+                       symbols[Group3]= [        KP_Begin,            KP_5 ],
+                       symbols[Group4]= [            KP_5,        EuroSign,           colon,           U22b6,        KP_Begin,        KP_Begin,           U22b7,        NoSymbol ]
+               };
+               key  <KP6> {
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [        KP_Right,            KP_6 ],
+                       symbols[Group2]= [        KP_Right,            KP_6 ],
+                       symbols[Group3]= [        KP_Right,            KP_6 ],
+                       symbols[Group4]= [            KP_6,           U2023,      rightarrow,        includes,        KP_Right,        KP_Right,           U2287,        NoSymbol ]
+               };
+               key <KPAD> {
+                       type[Group1]= "CTRL+ALT",
+                       type[Group2]= "CTRL+ALT",
+                       type[Group3]= "CTRL+ALT",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [          KP_Add,          KP_Add,          KP_Add,          KP_Add,  XF86Next_VMode ],
+                       symbols[Group2]= [          KP_Add,          KP_Add,          KP_Add,          KP_Add,  XF86Next_VMode ],
+                       symbols[Group3]= [          KP_Add,          KP_Add,          KP_Add,          KP_Add,  XF86Next_VMode ],
+                       symbols[Group4]= [          KP_Add,          KP_Add,       plusminus,           U2295,           U2213,        NoSymbol,           U2214,        NoSymbol ]
+               };
+               key  <KP1> {
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [          KP_End,            KP_1 ],
+                       symbols[Group2]= [          KP_End,            KP_1 ],
+                       symbols[Group3]= [          KP_End,            KP_1 ],
+                       symbols[Group4]= [            KP_1,         diamond,           U2194,   lessthanequal,          KP_End,          KP_End,       downstile,        NoSymbol ]
+               };
+               key  <KP2> {
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [         KP_Down,            KP_2 ],
+                       symbols[Group2]= [         KP_Down,            KP_2 ],
+                       symbols[Group3]= [         KP_Down,            KP_2 ],
+                       symbols[Group4]= [            KP_2,           heart,       downarrow,           union,         KP_Down,         KP_Down,           U22c3,        NoSymbol ]
+               };
+               key  <KP3> {
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [         KP_Next,            KP_3 ],
+                       symbols[Group2]= [         KP_Next,            KP_3 ],
+                       symbols[Group3]= [         KP_Next,            KP_3 ],
+                       symbols[Group4]= [            KP_3,           U2660,           U21cc, greaterthanequal,         KP_Next,         KP_Next,           U230b,        NoSymbol ]
+               };
+               key  <KP0> {
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [       KP_Insert,            KP_0 ],
+                       symbols[Group2]= [       KP_Insert,            KP_0 ],
+                       symbols[Group3]= [       KP_Insert,            KP_0 ],
+                       symbols[Group4]= [            KP_0,           U2423,         percent,           U2030,       KP_Insert,       KP_Insert,           U25a1,        NoSymbol ]
+               };
+               key <KPDL> {
+                       type[Group2]= "KEYPAD",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [       KP_Delete,      KP_Decimal ],
+                       symbols[Group2]= [       KP_Delete,    KP_Separator ],
+                       symbols[Group3]= [       KP_Delete,      KP_Decimal ],
+                       symbols[Group4]= [    KP_Separator,          period,           comma,         minutes,       KP_Delete,       KP_Delete,         seconds,        NoSymbol ]
+               };
+               key <LVL3> {    [ ISO_Level3_Shift ] };
+               key <LSGT> {
+                       type[Group1]= "FOUR_LEVEL",
+                       type[Group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+                       type[Group4]= "ONE_LEVEL",
+                       symbols[Group1]= [            less,         greater,             bar,       brokenbar ],
+                       symbols[Group2]= [           slash,             bar ],
+                       symbols[Group3]= [          ugrave,          Ugrave,          degree,        NoSymbol,        NoSymbol,       brokenbar,        NoSymbol,        NoSymbol ],
+                       symbols[Group4]= [ ISO_Level5_Shift ]
+               };
+               key <FK11> {
+                       type= "CTRL+ALT",
+                       symbols[Group1]= [             F11,             F11,             F11,             F11, XF86Switch_VT_11 ]
+               };
+               key <FK12> {
+                       type= "CTRL+ALT",
+                       symbols[Group1]= [             F12,             F12,             F12,             F12, XF86Switch_VT_12 ]
+               };
+               key <KATA> {    [        Katakana ] };
+               key <HIRA> {    [        Hiragana ] };
+               key <HENK> {    [     Henkan_Mode ] };
+               key <HKTG> {    [ Hiragana_Katakana ] };
+               key <MUHE> {    [        Muhenkan ] };
+               key <KPEN> {
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [        KP_Enter ],
+                       symbols[Group2]= [        KP_Enter ],
+                       symbols[Group3]= [        KP_Enter ],
+                       symbols[Group4]= [        KP_Enter,        KP_Enter,        KP_Enter,        KP_Enter,        KP_Enter,        KP_Enter,        KP_Enter,        NoSymbol ]
+               };
+               key <RCTL> {
+                       type= "ONE_LEVEL",
+                       symbols[Group1]= [       Control_R ],
+                       symbols[Group2]= [       Control_R ],
+                       symbols[Group3]= [ ISO_Level5_Shift ]
+               };
+               key <KPDV> {
+                       type[Group1]= "CTRL+ALT",
+                       type[Group2]= "CTRL+ALT",
+                       type[Group3]= "CTRL+ALT",
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [       KP_Divide,       KP_Divide,       KP_Divide,       KP_Divide,      XF86Ungrab ],
+                       symbols[Group2]= [       KP_Divide,       KP_Divide,       KP_Divide,       KP_Divide,      XF86Ungrab ],
+                       symbols[Group3]= [       KP_Divide,       KP_Divide,       KP_Divide,       KP_Divide,      XF86Ungrab ],
+                       symbols[Group4]= [       KP_Divide,       KP_Divide,        division,           U2300,           U2215,        NoSymbol,           U2223,        NoSymbol ]
+               };
+               key <PRSC> {
+                       type= "PC_ALT_LEVEL2",
+                       symbols[Group1]= [           Print,         Sys_Req ]
+               };
+               key <RALT> {
+                       type[Group1]= "TWO_LEVEL",
+                       type[Group2]= "TWO_LEVEL",
+                       type[Group3]= "ONE_LEVEL",
+                       type[Group4]= "ONE_LEVEL",
+                       symbols[Group1]= [           Alt_R,          Meta_R ],
+                       symbols[Group2]= [           Alt_R,          Meta_R ],
+                       symbols[Group3]= [ ISO_Level3_Shift ],
+                       symbols[Group4]= [ ISO_Level5_Shift ]
+               };
+               key <LNFD> {    [        Linefeed ] };
+               key <HOME> {    [            Home ] };
+               key   <UP> {    [              Up ] };
+               key <PGUP> {    [           Prior ] };
+               key <LEFT> {    [            Left ] };
+               key <RGHT> {    [           Right ] };
+               key  <END> {    [             End ] };
+               key <DOWN> {    [            Down ] };
+               key <PGDN> {    [            Next ] };
+               key  <INS> {    [          Insert ] };
+               key <DELE> {    [          Delete ] };
+               key <MUTE> {    [   XF86AudioMute ] };
+               key <VOL-> {    [ XF86AudioLowerVolume ] };
+               key <VOL+> {    [ XF86AudioRaiseVolume ] };
+               key <POWR> {    [    XF86PowerOff ] };
+               key <KPEQ> {
+                       type[Group4]= "EIGHT_LEVEL",
+                       symbols[Group1]= [        KP_Equal ],
+                       symbols[Group2]= [        KP_Equal ],
+                       symbols[Group3]= [        KP_Equal ],
+                       symbols[Group4]= [        KP_Equal,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol ]
+               };
+               key <I126> {    [       plusminus ] };
+               key <PAUS> {
+                       type= "PC_CONTROL_LEVEL2",
+                       symbols[Group1]= [           Pause,           Break ]
+               };
+               key <I128> {    [     XF86LaunchA ] };
+               key <I129> {    [      KP_Decimal,      KP_Decimal ] };
+               key <HNGL> {    [          Hangul ] };
+               key <HJCV> {    [    Hangul_Hanja ] };
+               key <LWIN> {    [         Super_L ] };
+               key <RWIN> {    [         Super_R ] };
+               key <COMP> {    [            Menu ] };
+               key <STOP> {    [          Cancel ] };
+               key <AGAI> {    [            Redo ] };
+               key <PROP> {    [        SunProps ] };
+               key <UNDO> {    [            Undo ] };
+               key <FRNT> {    [        SunFront ] };
+               key <COPY> {    [        XF86Copy ] };
+               key <OPEN> {    [         SunOpen ] };
+               key <PAST> {    [       XF86Paste ] };
+               key <FIND> {    [            Find ] };
+               key  <CUT> {    [         XF86Cut ] };
+               key <HELP> {    [            Help ] };
+               key <I147> {    [      XF86MenuKB ] };
+               key <I148> {    [  XF86Calculator ] };
+               key <I150> {    [       XF86Sleep ] };
+               key <I151> {    [      XF86WakeUp ] };
+               key <I152> {    [    XF86Explorer ] };
+               key <I153> {    [        XF86Send ] };
+               key <I155> {    [        XF86Xfer ] };
+               key <I156> {    [     XF86Launch1 ] };
+               key <I157> {    [     XF86Launch2 ] };
+               key <I158> {    [         XF86WWW ] };
+               key <I159> {    [         XF86DOS ] };
+               key <I160> {    [ XF86ScreenSaver ] };
+               key <I162> {    [ XF86RotateWindows ] };
+               key <I163> {    [        XF86Mail ] };
+               key <I164> {    [   XF86Favorites ] };
+               key <I165> {    [  XF86MyComputer ] };
+               key <I166> {    [        XF86Back ] };
+               key <I167> {    [     XF86Forward ] };
+               key <I169> {    [       XF86Eject ] };
+               key <I170> {    [       XF86Eject,       XF86Eject ] };
+               key <I171> {    [   XF86AudioNext ] };
+               key <I172> {    [   XF86AudioPlay,  XF86AudioPause ] };
+               key <I173> {    [   XF86AudioPrev ] };
+               key <I174> {    [   XF86AudioStop,       XF86Eject ] };
+               key <I175> {    [ XF86AudioRecord ] };
+               key <I176> {    [ XF86AudioRewind ] };
+               key <I177> {    [       XF86Phone ] };
+               key <I179> {    [       XF86Tools ] };
+               key <I180> {    [    XF86HomePage ] };
+               key <I181> {    [      XF86Reload ] };
+               key <I182> {    [       XF86Close ] };
+               key <I185> {    [    XF86ScrollUp ] };
+               key <I186> {    [  XF86ScrollDown ] };
+               key <I187> {    [       parenleft ] };
+               key <I188> {    [      parenright ] };
+               key <I189> {    [         XF86New ] };
+               key <I190> {    [            Redo ] };
+               key <FK13> {    [       XF86Tools ] };
+               key <FK14> {    [     XF86Launch5 ] };
+               key <FK15> {    [     XF86Launch6 ] };
+               key <FK16> {    [     XF86Launch7 ] };
+               key <FK17> {    [     XF86Launch8 ] };
+               key <FK18> {    [     XF86Launch9 ] };
+               key <FK21> {    [ XF86TouchpadToggle ] };
+               key <FK22> {    [  XF86TouchpadOn ] };
+               key <FK23> {    [ XF86TouchpadOff ] };
+               key <MDSW> {    [     Mode_switch ] };
+               key  <ALT> {    [        NoSymbol,           Alt_L ] };
+               key <META> {    [        NoSymbol,          Meta_L ] };
+               key <SUPR> {    [        NoSymbol,         Super_L ] };
+               key <HYPR> {    [        NoSymbol,         Hyper_L ] };
+               key <I208> {    [   XF86AudioPlay ] };
+               key <I209> {    [  XF86AudioPause ] };
+               key <I210> {    [     XF86Launch3 ] };
+               key <I211> {    [     XF86Launch4 ] };
+               key <I212> {    [     XF86LaunchB ] };
+               key <I213> {    [     XF86Suspend ] };
+               key <I214> {    [       XF86Close ] };
+               key <I215> {    [   XF86AudioPlay ] };
+               key <I216> {    [ XF86AudioForward ] };
+               key <I218> {    [           Print ] };
+               key <I220> {    [      XF86WebCam ] };
+               key <I223> {    [        XF86Mail ] };
+               key <I224> {    [   XF86Messenger ] };
+               key <I225> {    [      XF86Search ] };
+               key <I226> {    [          XF86Go ] };
+               key <I227> {    [     XF86Finance ] };
+               key <I228> {    [        XF86Game ] };
+               key <I229> {    [        XF86Shop ] };
+               key <I231> {    [          Cancel ] };
+               key <I232> {    [ XF86MonBrightnessDown ] };
+               key <I233> {    [ XF86MonBrightnessUp ] };
+               key <I234> {    [  XF86AudioMedia ] };
+               key <I235> {    [     XF86Display ] };
+               key <I236> {    [ XF86KbdLightOnOff ] };
+               key <I237> {    [ XF86KbdBrightnessDown ] };
+               key <I238> {    [ XF86KbdBrightnessUp ] };
+               key <I239> {    [        XF86Send ] };
+               key <I240> {    [       XF86Reply ] };
+               key <I241> {    [ XF86MailForward ] };
+               key <I242> {    [        XF86Save ] };
+               key <I243> {    [   XF86Documents ] };
+               key <I244> {    [     XF86Battery ] };
+               key <I245> {    [   XF86Bluetooth ] };
+               key <I246> {    [        XF86WLAN ] };
+               modifier_map Control { <LCTL> };
+               modifier_map Shift { <LFSH> };
+               modifier_map Lock { <LFSH> };
+               modifier_map Mod5 { <BKSL> };
+               modifier_map Shift { <RTSH> };
+               modifier_map Mod1 { <LALT> };
+               modifier_map Mod2 { <NMLK> };
+               modifier_map Mod5 { <LVL3> };
+               modifier_map Mod3 { <LSGT> };
+               modifier_map Control { <RCTL> };
+               modifier_map Mod1 { <RALT> };
+               modifier_map Mod4 { <LWIN> };
+               modifier_map Mod4 { <RWIN> };
+               modifier_map Mod5 { <MDSW> };
+               modifier_map Mod1 { <META> };
+               modifier_map Mod4 { <SUPR> };
+               modifier_map Mod4 { <HYPR> };
+       };
+
+};