[
  {
    "path": "lang/en/tinymce_virtualkeyboard.php",
    "content": "<?php\r\n// This file is part of Moodle - http://moodle.org/\r\n//\r\n// Moodle is free software: you can redistribute it and/or modify\r\n// it under the terms of the GNU General Public License as published by\r\n// the Free Software Foundation, either version 3 of the License, or\r\n// (at your option) any later version.\r\n//\r\n// Moodle is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r\n// GNU General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU General Public License\r\n// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.\r\n/**\r\n * Strings for Moodle Vortual Keyboard plugin.\r\n *\r\n * @package   tinymce_virtualkeyboard\r\n * @author DualCube <admin@dualcube.com>\r\n * @copyright  2022 DualCube (https://dualcube.com)\r\n * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\r\n */\r\n$string['pluginname'] = 'Virtual Keyboard';\r\n"
  },
  {
    "path": "lib.php",
    "content": "<?php\r\n// This file is part of Moodle - http://moodle.org/\r\n//\r\n// Moodle is free software: you can redistribute it and/or modify\r\n// it under the terms of the GNU General Public License as published by\r\n// the Free Software Foundation, either version 3 of the License, or\r\n// (at your option) any later version.\r\n//\r\n// Moodle is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r\n// GNU General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU General Public License\r\n// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.\r\n/**\r\n * virtual keyboard addons for tinyMCE editor\r\n *\r\n * @package   tinymce_virtualkeyboard\r\n * @author DualCube <admin@dualcube.com>\r\n * @copyright  2022 DualCube (https://dualcube.com)\r\n * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\r\n */\r\ndefined('MOODLE_INTERNAL') || die();\r\nclass tinymce_virtualkeyboard extends editor_tinymce_plugin {\r\n    /** @var array list of buttons defined by this plugin */\r\n    protected $buttons = array('keyboard');\r\n    /**\r\n     * This load require js files and update the init parameters.\r\n     *\r\n     * @param array $params\r\n     * @param context $context\r\n     * @param array $options display options: null\r\n     * @return void\r\n     */\r\n    protected function update_init_params(array &$params, context $context,\r\n            array $options = null) {\r\n        global $PAGE, $CFG;\r\n        // This plugin overrides standard 'image' button, no need to insert new button.\r\n        $PAGE->requires->js(new moodle_url(\r\n        $CFG->httpswwwroot.'/lib/editor/tinymce/plugins/virtualkeyboard/tinymce/js/keyboard.js'));\r\n        // Add JS file, which uses default name.\r\n        $this->add_js_plugin($params);\r\n    }\r\n    /**\r\n     * Get sort order.\r\n     *\r\n     * @return 110\r\n     */\r\n    protected function get_sort_order() {\r\n        return 110;\r\n    }\r\n}\r\n"
  },
  {
    "path": "readme.md",
    "content": "Moodle Virtual Keyboard Plugin [tinymce_virtualkeyboard]\n=======================\n* Developed by: Team DualCube\n* Copyright: (c) 2022 DualCube (https://dualcube.com)\n* License: [GNU GENERAL PUBLIC LICENSE](LICENSE)\n* Contributors:  DualCube\n\nDescription\n===========\nThis is a TinyMCE editor add-on plugin that helps to type without Keyboard. It's add a virtual Keyboard on web-page with bunch of language and functionality.\n\nThis is a modification of JavaScript Graphical / Virtual Keyboard Interface by GreyWyvern,\nsee http://www.greywyvern.com/code/javascript/keyboard\n\n\n_Added features include:_\n* Language: Default Language is “US International”. You can change the language by selecting from this dropdown list.\n* Number Pad: This will show the number, basic arithmatic notation and currency symbols.\n* Enlarge/Shrink: For zoom In/Out the keyboard.\n* Clear Editor: Clear the whole editor text, Image or any others content.\n* Close: Close the keyboard.\n* Backspace: Delete the character in backward direction of the selected line.\n* Enter: Create the new line.\n* Right/Left Shift: Toggle the charecter (Small to capital or capital to small) and symbols/numbers.\n* Alt: Mathematical symbols and special notation (¼, ß, æ, ø, ¥).\n* Space: Single space between character.\n* Toggle Dead Key: This will show the dead keys (ù, ò, é, ū).\n* Caps: Show the capital letter of the selected language.\n\n\nInstallation\n============\n1. Login to your moodle site as an “admin user” and follow the steps.\n2. Upload the zip package from Site administration > Plugins > Install plugins. or Add files to [\"lib/editor/tinymce/plugins/\"], check the acknowledgement and install.\n3. Go to Administration > Plugins > Text editors > TinyMCE HTML editor > General settings Settings tab and add the keyword “keyboard” in any position of the “editor_tinymce | customtoolbar ” .\n4. Go to Administration > Plugins > Text editors > Manage editors and ensure thet “TinyMCE HTML editor (legacy)” is in the top of the ‘Available text editors’ list. \n5. This completes all the steps from the administrator end. Now all users can use virtual keyboard in any editable form successful, which will appearon the top of the editor.\n\nRequirements\n------------\n* Moodle 2.5.0 - 4.1.X\n\n\n\nUninstall\n=========\n* Go to Administration > Plugins > Text editors > TinyMCE HTML editor > General settings and find Virtual keyboard on the Plugins list and uninstall.\n"
  },
  {
    "path": "thirdpartylibs.xml",
    "content": "<?xml version=\"1.0\"?>\r\n<libraries>\r\n  <library>\r\n    <location>tinymce/js/</location>\r\n    <name>HTML Virtual Keyboard Interface Script</name>\r\n    <license>BSDL</license>\r\n    <version>v1.53</version>\r\n    <licenseversion></licenseversion>\r\n  </library>\r\n</libraries>\r\n"
  },
  {
    "path": "tinymce/css/keyboard.css",
    "content": "span.mce_keyboard img.mceIcon {\r\n    object-fit: contain;\r\n    object-position: center center;\r\n    height: 100%;\r\n    width: 100%;\r\n}\r\n#keyboardInputMaster {\r\n  position:absolute;\r\n  font:normal 0.8rem Arial,sans-serif;\r\n  border-top:0.1em solid #eeeeee;\r\n  border-right:0.1em solid #888888;\r\n  border-bottom:0.1em solid #444444;\r\n  border-left:0.1em solid #cccccc;\r\n  border-collapse:separate;\r\n  border-radius:0.6em;\r\n  box-shadow:0 0.2em 1em #444444;\r\n  opacity:0.95;\r\n  filter:alpha(opacity=95);\r\n  background-color:#dddddd;\r\n  text-align:left;\r\n  z-index:1000000;\r\n  width:auto;\r\n  height:auto;\r\n  min-width:0;\r\n  min-height:0;\r\n  margin:0;\r\n  padding:0;\r\n  line-height:normal;\r\n  pointer-events:auto;\r\n  -moz-user-select:none;\r\n  cursor:default;\r\n}\r\n#keyboardInputMaster * {\r\n  position:static;\r\n  color:#000000;\r\n  opacity:1;\r\n  filter:alpha(opacity=100);\r\n  background:transparent;\r\n  font:normal 0.8rem Arial,sans-serif;\r\n  width:auto;\r\n  height:auto;\r\n  min-width:0;\r\n  min-height:0;\r\n  margin:0;\r\n  padding:0;\r\n  border:0 none;\r\n  outline:0;\r\n  vertical-align:baseline;\r\n  line-height:1.3em;\r\n  pointer-events:auto;\r\n}\r\n#keyboardInputMaster table {\r\n  table-layout:auto;\r\n}\r\n#keyboardInputMaster.keyboardInputSize1,\r\n#keyboardInputMaster.keyboardInputSize1 * {\r\n  font-size:0.7rem;\r\n}\r\n#keyboardInputMaster.keyboardInputSize3,\r\n#keyboardInputMaster.keyboardInputSize3 * {\r\n  font-size:0.9rem;\r\n}\r\n#keyboardInputMaster.keyboardInputSize4,\r\n#keyboardInputMaster.keyboardInputSize4 * {\r\n  font-size:1rem;\r\n}\r\n#keyboardInputMaster.keyboardInputSize5,\r\n#keyboardInputMaster.keyboardInputSize5 * {\r\n  font-size:1.1rem;\r\n}\r\n\r\n#keyboardInputMaster thead tr th {\r\n  padding:0.3em 0.3em 0.1em 0.3em;\r\n  background-color:#999999;\r\n  white-space:nowrap;\r\n  text-align:right;\r\n  border-radius:0.6em 0.6em 0 0;\r\n}\r\n#keyboardInputMaster thead tr th div {\r\n  float:left;\r\n  font-size:130% !important;\r\n  height:1.3em;\r\n  font-weight:bold;\r\n  position:relative;\r\n  z-index:1;\r\n  margin-right:0.5em;\r\n  cursor:pointer;\r\n  background-color:transparent;\r\n}\r\n#keyboardInputMaster thead tr th div ol {\r\n  position:absolute;\r\n  left:0;\r\n  top:90%;\r\n  list-style-type:none;\r\n  height:9.4em;\r\n  overflow-y:auto;\r\n  overflow-x:hidden;\r\n  background-color:#f6f6f6;\r\n  border:0.1em solid #999999;\r\n  display:none;\r\n  text-align:left;\r\n  width:12em;\r\n}\r\n#keyboardInputMaster thead tr th div ol li {\r\n  padding:0.2em 0.4em;\r\n  cursor:pointer;\r\n  white-space:nowrap;\r\n  width:12em;\r\n}\r\n#keyboardInputMaster thead tr th div ol li.selected {\r\n  background-color:#ffffcc;\r\n}\r\n#keyboardInputMaster thead tr th div ol li:hover,\r\n#keyboardInputMaster thead tr th div ol li.hover {\r\n  background-color:#dddddd;\r\n}\r\n#keyboardInputMaster thead tr th span,\r\n#keyboardInputMaster thead tr th strong,\r\n#keyboardInputMaster thead tr th small,\r\n#keyboardInputMaster thead tr th big {\r\n  display:inline-block;\r\n  padding:0 0.4em;\r\n  height:1.4em;\r\n  line-height:1.4em;\r\n  border-top:0.1em solid #e5e5e5;\r\n  border-right:0.1em solid #5d5d5d;\r\n  border-bottom:0.1em solid #5d5d5d;\r\n  border-left:0.1em solid #e5e5e5;\r\n  background-color:#cccccc;\r\n  cursor:pointer;\r\n  margin:0 0 0 0.3em;\r\n  border-radius:0.3em;\r\n  vertical-align:middle;\r\n  transition:background-color .15s ease-in-out;\r\n}\r\n#keyboardInputMaster thead tr th strong {\r\n  font-weight:bold;\r\n}\r\n#keyboardInputMaster thead tr th small {\r\n  border-radius:0.3em 0 0 0.3em;\r\n  border-right:0.1em solid #aaaaaa;\r\n  padding:0 0.2em 0 0.3em;\r\n}\r\n#keyboardInputMaster thead tr th big {\r\n  border-radius:0 0.3em 0.3em 0;\r\n  border-left:0 none;\r\n  margin:0;\r\n  padding:0 0.3em 0 0.2em;\r\n}\r\n#keyboardInputMaster thead tr th span:hover,\r\n#keyboardInputMaster thead tr th span.hover,\r\n#keyboardInputMaster thead tr th strong:hover,\r\n#keyboardInputMaster thead tr th strong.hover,\r\n#keyboardInputMaster thead tr th small:hover,\r\n#keyboardInputMaster thead tr th small.hover,\r\n#keyboardInputMaster thead tr th big:hover,\r\n#keyboardInputMaster thead tr th big.hover {\r\n  background-color:#dddddd;\r\n}\r\n\r\n#keyboardInputMaster tbody tr td {\r\n  text-align:left;\r\n  padding:0.2em 0.3em 0.3em 0.3em;\r\n  vertical-align:top;\r\n}\r\n#keyboardInputMaster tbody tr td div {\r\n  text-align:center;\r\n  position:relative;\r\n  zoom:1;\r\n}\r\n#keyboardInputMaster tbody tr td table {\r\n  white-space:nowrap;\r\n  width:100%;\r\n  border-collapse:separate;\r\n  border-spacing:0;\r\n}\r\n#keyboardInputMaster tbody tr td#keyboardInputNumpad table {\r\n  margin-left:0.2em;\r\n  width:auto;\r\n}\r\n#keyboardInputMaster tbody tr td table.keyboardInputCenter {\r\n  width:auto;\r\n  margin:0 auto;\r\n}\r\n#keyboardInputMaster tbody tr td table tbody tr td {\r\n  vertical-align:middle;\r\n  padding:0 0.45em;\r\n  white-space:pre;\r\n  height:1.8em;\r\n  font-family:'Lucida Console','Arial Unicode MS',monospace;\r\n  border-top:0.1em solid #e5e5e5;\r\n  border-right:0.1em solid #5d5d5d;\r\n  border-bottom:0.1em solid #5d5d5d;\r\n  border-left:0.1em solid #e5e5e5;\r\n  background-color:#eeeeee;\r\n  cursor:default;\r\n  min-width:0.75em;\r\n  border-radius:0.2em;\r\n  transition:background-color .15s ease-in-out;\r\n}\r\n#keyboardInputMaster tbody tr td table tbody tr td.last {\r\n  width:99%;\r\n}\r\n#keyboardInputMaster tbody tr td table tbody tr td.space {\r\n  padding:0 4em;\r\n}\r\n#keyboardInputMaster tbody tr td table tbody tr td.deadkey {\r\n  background-color:#ccccdd;\r\n}\r\n#keyboardInputMaster tbody tr td table tbody tr td.target {\r\n  background-color:#ddddcc;\r\n}\r\n#keyboardInputMaster tbody tr td table tbody tr td:hover,\r\n#keyboardInputMaster tbody tr td table tbody tr td.hover {\r\n  border-top:0.1em solid #d5d5d5;\r\n  border-right:0.1em solid #555555;\r\n  border-bottom:0.1emsolid #555555;\r\n  border-left:0.1em solid #d5d5d5;\r\n  background-color:#cccccc;\r\n}\r\n#keyboardInputMaster thead tr th span:active,\r\n#keyboardInputMaster thead tr th span.pressed,\r\n#keyboardInputMaster tbody tr td table tbody tr td:active,\r\n#keyboardInputMaster tbody tr td table tbody tr td.pressed {\r\n  border-top:0.1em solid #555555 !important;\r\n  border-right:0.1em solid #d5d5d5;\r\n  border-bottom:0.1em solid #d5d5d5;\r\n  border-left:0.1em solid #555555;\r\n  background-color:#cccccc;\r\n}\r\n\r\n#keyboardInputMaster tbody tr td table tbody tr td small {\r\n  display:block;\r\n  text-align:center;\r\n  font-size:0.6em !important;\r\n  line-height:1.1em;\r\n}\r\n\r\n#keyboardInputMaster tbody tr td div label {\r\n  position:absolute;\r\n  bottom:0.2em;\r\n  left:0.3em;\r\n}\r\n#keyboardInputMaster tbody tr td div label input {\r\n  background-color:#f6f6f6;\r\n  vertical-align:middle;\r\n  font-size:inherit;\r\n  width:1.1em;\r\n  height:1.1em;\r\n}\r\n#keyboardInputMaster tbody tr td div var {\r\n  position:absolute;\r\n  bottom:0;\r\n  right:0.3em;\r\n  font-weight:bold;\r\n  font-style:italic;\r\n  color:#444444;\r\n}\r\n\r\n#keyboardInputMaster #keyboardInputNumpadBksp,\r\n#keyboardInputMaster.numpadOnly #keyboardInputSelect,\r\n#keyboardInputMaster.numpadOnly #keyboardInputNumpadToggle,\r\n#keyboardInputMaster.numpadOnly #keyboardInputKeyboard,\r\n#keyboardInputMaster.numpadOnly #keyboardInputNumpad td {\r\n  display:none;\r\n}\r\n#keyboardInputMaster.numpadOnly #keyboardInputNumpadBksp {\r\n  display:inline-block;\r\n}\r\n#keyboardInputMaster.numpadOnly #keyboardInputNumpad table {\r\n  margin-left:auto;\r\n  margin-right:auto;\r\n}\r\n#keyboardInputMaster.numpadOnly > thead > tr > th > * {\r\n  font-size:125%;\r\n}\r\n#keyboardInputMaster.numpadOnly #keyboardInputNumpad td.digit,\r\n#keyboardInputMaster.numpadOnly #keyboardInputNumpad.showNegative td.negative,\r\n#keyboardInputMaster.numpadOnly #keyboardInputNumpad.showDecimal td.decimal {\r\n  display:table-cell;\r\n  font-size:200%;\r\n  padding:0 0.9em;\r\n}\r\n\r\n.keyboardInputInitiator {\r\n  margin:0 0.3em;\r\n  vertical-align:middle;\r\n  cursor:pointer;\r\n  max-height:1.3em;\r\n}"
  },
  {
    "path": "tinymce/editor_plugin.js",
    "content": "/**\r\n * TinyMCE plugin Virtual Keyboard\r\n *\r\n * Copyright 2022 DualCube (https://dualcube.com)\r\n * Author    DualCube <admin@dualcube.com>\r\n * License   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\r\n */\r\n(function() {\r\n\tvar DOM = tinymce.DOM;\r\n\ttinymce.create('tinymce.plugins.MoodleVirtualKeyboardPlugin', {\r\n\t\tinit : function(ed, url) {\r\n\t\t\tvar s = ed.settings;\r\n\t\t\t// Register commands\r\n\t\t\ted.addCommand('mceVirtualKeyboard', function() {\r\n\t\t\t\tdocument.getElementById(ed.id + 'xyz').click();\r\n\t\t\t});\r\n\t\t\tDOM.loadCSS((s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : '') || url + \"/css/keyboard.css\");\r\n\t\t\t// Register buttons\r\n\t\t\ted.addButton('keyboard', {\r\n\t\t\t\ttitle : 'virtual keyboard',\r\n\t\t\t\tcmd : 'mceVirtualKeyboard',\r\n\t\t\t\timage : url + '/img/keyboard.png'\r\n\t\t\t});\r\n\t\t},\r\n\t\tgetInfo : function() {\r\n\t\t\treturn {\r\n\t\t\t\tlongname : 'Virtual Keyboard',\r\n\t\t\t\tauthor : 'DualCube',\r\n                version : '1.2' // Version of Virtual Keyboard plugin this plugin is based on.\r\n\t\t\t};\r\n\t\t}\r\n\t});\r\n\t// Register plugin\r\n\ttinymce.PluginManager.add('virtualkeyboard', tinymce.plugins.MoodleVirtualKeyboardPlugin);\r\n})();\r\n"
  },
  {
    "path": "tinymce/js/keyboard.js",
    "content": "/* ********************************************************************\r\n **********************************************************************\r\n * HTML Virtual Keyboard Interface Script - v1.53\r\n *   Copyright (c) 2022 - GreyWyvern\r\n *\r\n *  - Licenced for free distribution under the BSDL\r\n *          https://www.opensource.org/licenses/bsd-license.php\r\n *\r\n * Add a script-driven keyboard interface to text fields, password\r\n * fields and textareas.\r\n *\r\n * See https://greywyvern.com/code/javascript/keyboard/ for examples\r\n * and usage instructions.\r\n *\r\n * Version 1.53 - December 27, 2022\r\n *   - Prevent showing mobile keyboard (if possible) when Virtual\r\n *     Keyboard is attached\r\n *   - Font size is now rem unit based instead of px based so it should\r\n *     scale better.\r\n *\r\n *   See full changelog at:\r\n *     https://greywyvern.com/code/javascript/keyboard/changelog.txt\r\n *\r\n * Keyboard Credits\r\n *   - Yiddish (Yidish Lebt) keyboard layout by Simche Taub (jidysz.net)\r\n *   - Urdu Phonetic keyboard layout by Khalid Malik\r\n *   - Yiddish keyboard layout by Helmut Wollmersdorfer\r\n *   - Khmer keyboard layout by Sovann Heng (km-kh.com)\r\n *   - Dari keyboard layout by Saif Fazel\r\n *   - Kurdish keyboard layout by Ara Qadir\r\n *   - Assamese keyboard layout by Kanchan Gogoi\r\n *   - Bulgarian BDS keyboard layout by Milen Georgiev\r\n *   - Basic Japanese Hiragana/Katakana keyboard layout by Damjan\r\n *   - Ukrainian keyboard layout by Dmitry Nikitin\r\n *   - Macedonian keyboard layout by Damjan Dimitrioski\r\n *   - Pashto keyboard layout by Ahmad Wali Achakzai (qamosona.com)\r\n *   - Armenian Eastern and Western keyboard layouts by Hayastan Project (www.hayastan.co.uk)\r\n *   - Pinyin keyboard layout from a collaboration with Lou Winklemann\r\n *   - Kazakh keyboard layout by Alex Madyankin\r\n *   - Danish keyboard layout by Verner KjÃ¦rsgaard\r\n *   - Slovak keyboard layout by Daniel Lara (www.learningslovak.com)\r\n *   - Belarusian and Serbian Cyrillic keyboard layouts by Evgeniy Titov\r\n *   - Bulgarian Phonetic keyboard layout by Samuil Gospodinov\r\n *   - Swedish keyboard layout by HÃ¥kan Sandberg\r\n *   - Romanian keyboard layout by Aurel\r\n *   - Farsi (Persian) keyboard layout by Kaveh Bakhtiyari (www.bakhtiyari.com)\r\n *   - Burmese keyboard layout by Cetanapa\r\n *   - Bosnian/Croatian/Serbian Latin/Slovenian keyboard layout by Miran Zeljko\r\n *   - Hungarian keyboard layout by Antal Sall 'Hiromacu'\r\n *   - Arabic keyboard layout by Srinivas Reddy\r\n *   - Italian and Spanish (Spain) keyboard layouts by dictionarist.com\r\n *   - Lithuanian and Russian keyboard layouts by Ramunas\r\n *   - German keyboard layout by QuHno\r\n *   - French keyboard layout by Hidden Evil\r\n *   - Polish Programmers layout by moose\r\n *   - Turkish keyboard layouts by offcu\r\n *   - Dutch and US Int'l keyboard layouts by jerone\r\n *\r\n */\r\nvar VKI_attach, VKI_close;\r\n(function() {\r\n  let self = this;\r\n\r\n  let scripts = document.getElementsByTagName('script');\r\n  let scrpath = new URL(scripts[scripts.length - 1].src);\r\n\r\n  this.VKI_version = '1.53';\r\n  this.VKI_showVersion = true; // Display the version number\r\n  this.VKI_deadBox = true; // Show the dead keys checkbox\r\n  this.VKI_deadkeysOn = false;  // Turn dead keys on by default\r\n  this.VKI_numberPad = true;  // Allow user to open and close the number pad\r\n  this.VKI_numberPadOn = false;  // Show number pad by default\r\n  this.VKI_kts = this.VKI_kt = 'US International';  // Default keyboard layout\r\n  this.VKI_langAdapt = true;  // Use lang attribute of input to pre-select keyboard\r\n  this.VKI_size = 2;  // Default keyboard size (1-5)\r\n  this.VKI_sizeAdj = true;  // Allow user to adjust keyboard size\r\n  this.VKI_clearPasswords = false;  // Clear password fields on focus\r\n  this.VKI_flashPassword = 1000; // Flash last character of password: 0 = disabled, > 0 = delay in ms\r\n  this.VKI_imageURI = 'keyboard.svg';  // If empty string, use imageless mode\r\n  this.VKI_clickless = 0;  // 0 = disabled, > 0 = delay in ms\r\n  this.VKI_activeTab = 0;  // Tab moves to next: 1 = element, 2 = keyboard enabled element\r\n  this.VKI_enterSubmit = true;  // Submit forms when Enter is pressed\r\n  this.VKI_keyCenter = 3; // If this many or fewer keys in a row, center the row\r\n\r\n  // Do not touch these\r\n  this.VKI_target = false;\r\n  this.VKI_shift = this.VKI_shiftlock = false;\r\n  this.VKI_altgr = this.VKI_altgrlock = false;\r\n  this.VKI_dead = false;\r\n  this.VKI_path = scrpath.pathname.replace(/\\/[^\\/]*$/, '/');\r\n\r\n  this.VKI_isIE = /*@cc_on!@*/false;\r\n  this.VKI_isIE6 = /*@if(@_jscript_version == 5.6)!@end@*/false;\r\n  this.VKI_isIElt8 = /*@if(@_jscript_version < 5.8)!@end@*/false;\r\n  this.VKI_isWebKit = RegExp('KHTML').test(navigator.userAgent);\r\n  this.VKI_isOpera = RegExp('Opera').test(navigator.userAgent);\r\n  this.VKI_isMoz = (!this.VKI_isWebKit && navigator.product == 'Gecko');\r\n\r\n  /* ***** i18n text strings ************************************* */\r\n  this.VKI_i18n = {\r\n    '00': 'Display Number Pad',\r\n    '01': 'Display virtual keyboard interface',\r\n    '02': 'Select keyboard layout',\r\n    '03': 'Dead keys',\r\n    '04': 'On',\r\n    '05': 'Off',\r\n    '06': 'Close the keyboard',\r\n    '07': 'Clear',\r\n    '08': 'Clear this input',\r\n    '09': 'Version',\r\n    '10': 'Decrease keyboard size',\r\n    '11': 'Increase keyboard size',\r\n    '12': 'Backspace'\r\n  };\r\n\r\n\r\n  /* ***** Create keyboards ************************************** */\r\n  this.VKI_layout = {};\r\n\r\n  // - Lay out each keyboard in rows of sub-arrays. Each sub-array\r\n  //   represents one key.\r\n  //\r\n  // - Each sub-array consists of four slots described as follows:\r\n  //     example: ['a', 'A', '\\u00e1', '\\u00c1']\r\n  //\r\n  //          a) Normal character\r\n  //          A) Character + Shift/Caps\r\n  //     \\u00e1) Character + Alt/AltGr/AltLk\r\n  //     \\u00c1) Character + Shift/Caps + Alt/AltGr/AltLk\r\n  //\r\n  //   You may include sub-arrays which are fewer than four slots.\r\n  //   In these cases, the missing slots will be blanked when the\r\n  //   corresponding modifier key (Shift or AltGr) is pressed.\r\n  //\r\n  // - If the second slot of a sub-array matches one of the following\r\n  //   strings:\r\n  //     'Tab', 'Caps', 'Shift', 'Enter', 'Bksp',\r\n  //     'Alt' OR 'AltGr', 'AltLk'\r\n  //   then the function of the key will be the following,\r\n  //   respectively:\r\n  //     - Insert a tab\r\n  //     - Toggle Caps Lock (technically a Shift Lock)\r\n  //     - Next entered character will be the shifted character\r\n  //     - Insert a newline (textarea), or close the keyboard\r\n  //     - Delete the previous character\r\n  //     - Next entered character will be the alternate character\r\n  //     - Toggle Alt/AltGr Lock\r\n  //\r\n  //   The first slot of this sub-array will be the text to display\r\n  //   on the corresponding key. This allows for easy localisation\r\n  //   of key names.\r\n  //\r\n  // - Layout dead keys (diacritic + letter) should be added as\r\n  //   property/value pairs of objects with hash keys equal to the\r\n  //   diacritic. See the 'this.VKI_deadkey' object below the layout\r\n  //   definitions. In each property/value pair, the value is what\r\n  //   the diacritic would change the property name to.\r\n  //\r\n  // - Note that any characters beyond the normal ASCII set should be\r\n  //   entered in escaped Unicode format. (eg \\u00a3 = Pound symbol)\r\n  //   You can find Unicode values for characters here:\r\n  //     https://unicode.org/charts/\r\n  //\r\n  // - To remove a keyboard, just delete it, or comment it out of the\r\n  //   source code. If you decide to remove the US International\r\n  //   keyboard layout, make sure you change the default layout\r\n  //   (this.VKI_kt) above so it references an existing layout.\r\n\r\n  this.VKI_layout['\\u0627\\u0644\\u0639\\u0631\\u0628\\u064a\\u0629'] = {\r\n    'name': 'Arabic', 'keys': [\r\n      [['\\u0630', '\\u0651 '], ['1', '!', '\\u00a1', '\\u00b9'], ['2', '@', '\\u00b2'], ['3', '#', '\\u00b3'], ['4', '$', '\\u00a4', '\\u00a3'], ['5', '%', '\\u20ac'], ['6', '^', '\\u00bc'], ['7', '&', '\\u00bd'], ['8', '*', '\\u00be'], ['9', '(', '\\u2018'], ['0', ')', '\\u2019'], ['-', '_', '\\u00a5'], ['=', '+', '\\u00d7', '\\u00f7'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0636', '\\u064e'], ['\\u0635', '\\u064b'], ['\\u062b', '\\u064f'], ['\\u0642', '\\u064c'], ['\\u0641', '\\u0644'], ['\\u063a', '\\u0625'], ['\\u0639', '\\u2018'], ['\\u0647', '\\u00f7'], ['\\u062e', '\\u00d7'], ['\\u062d', '\\u061b'], ['\\u062c', '<'], ['\\u062f', '>'], ['\\\\', '|']],\r\n      [['Caps', 'Caps'], ['\\u0634', '\\u0650'], ['\\u0633', '\\u064d'], ['\\u064a', ']'], ['\\u0628', '['], ['\\u0644', '\\u0644'], ['\\u0627', '\\u0623'], ['\\u062a', '\\u0640'], ['\\u0646', '\\u060c'], ['\\u0645', '/'], ['\\u0643', ':'], ['\\u0637', '\"'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0626', '~'], ['\\u0621', '\\u0652'], ['\\u0624', '}'], ['\\u0631', '{'], ['\\u0644', '\\u0644'], ['\\u0649', '\\u0622'], ['\\u0629', '\\u2019'], ['\\u0648', ','], ['\\u0632', '.'], ['\\u0638', '\\u061f'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['Alt', 'Alt']]\r\n    ], 'lang': ['ar'] };\r\n\r\n  this.VKI_layout['\\u0985\\u09b8\\u09ae\\u09c0\\u09df\\u09be'] = {\r\n    'name': 'Assamese', 'keys': [\r\n      [['+', '?'], ['\\u09E7', '{', '\\u09E7'], ['\\u09E8', '}', '\\u09E8'], ['\\u09E9', '\\u09CD\\u09F0', '\\u09E9'], ['\\u09EA', '\\u09F0\\u09CD', '\\u09EA'], ['\\u09EB', '\\u099C\\u09CD\\u09F0', '\\u09EB'], ['\\u09EC', '\\u0995\\u09CD\\u09B7', '\\u09EC'], ['\\u09ED', '\\u0995\\u09CD\\u09F0', '\\u09ED'], ['\\u09EE', '\\u09B6\\u09CD\\u09F0', '\\u09EE'], ['\\u09EF', '(', '\\u09EF'], ['\\u09E6', ')', '\\u09E6'], ['-', ''], ['\\u09C3', '\\u098B', '\\u09E2', '\\u09E0'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u09CC', '\\u0994', '\\u09D7'], ['\\u09C8', '\\u0990'], ['\\u09BE', '\\u0986'], ['\\u09C0', '\\u0988', '\\u09E3', '\\u09E1'], ['\\u09C2', '\\u098A'], ['\\u09F1', '\\u09AD'], ['\\u09B9', '\\u0999'], ['\\u0997', '\\u0998'], ['\\u09A6', '\\u09A7'], ['\\u099C', '\\u099D'], ['\\u09A1', '\\u09A2', '\\u09DC', '\\u09DD'], ['Enter', 'Enter']],\r\n      [['Caps', 'Caps'], ['\\u09CB', '\\u0993', '\\u09F4', '\\u09F5'], ['\\u09C7', '\\u098F', '\\u09F6', '\\u09F7'], ['\\u09CD', '\\u0985', '\\u09F8', '\\u09F9'], ['\\u09BF', '\\u0987', '\\u09E2', '\\u098C'], ['\\u09C1', '\\u0989'], ['\\u09AA', '\\u09AB'], ['\\u09F0', '', '\\u09F0', '\\u09F1'], ['\\u0995', '\\u0996'], ['\\u09A4', '\\u09A5'], ['\\u099A', '\\u099B'], ['\\u099F', '\\u09A0'], ['\\u09BC', '\\u099E']],\r\n      [['Shift', 'Shift'], ['\\u09CE', '\\u0983'], ['\\u0982', '\\u0981', '\\u09FA'], ['\\u09AE', '\\u09A3'], ['\\u09A8', '\\u09F7'], ['\\u09AC', '\"'], ['\\u09B2', '\\''], ['\\u09B8', '\\u09B6'], [',', '\\u09B7'], ['.', ';'], ['\\u09AF', '\\u09DF'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['as'] };\r\n\r\n  this.VKI_layout['\\u0410\\u0437\\u04d9\\u0440\\u0431\\u0430\\u0458\\u04b9\\u0430\\u043d\\u04b9\\u0430'] = {\r\n    'name': 'Azerbaijani Cyrillic', 'keys': [\r\n      [['`', '~'], ['1', '!'], ['2', '\"'], ['3', '\\u2116'], ['4', ';'], ['5', '%'], ['6', ':'], ['7', '?'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0458', '\\u0408'], ['\\u04AF', '\\u04AE'], ['\\u0443', '\\u0423'], ['\\u043A', '\\u041A'], ['\\u0435', '\\u0415'], ['\\u043D', '\\u041D'], ['\\u0433', '\\u0413'], ['\\u0448', '\\u0428'], ['\\u04BB', '\\u04BA'], ['\\u0437', '\\u0417'], ['\\u0445', '\\u0425'], ['\\u04B9', '\\u04B8'], ['\\\\', '/']],\r\n      [['Caps', 'Caps'], ['\\u0444', '\\u0424'], ['\\u044B', '\\u042B'], ['\\u0432', '\\u0412'], ['\\u0430', '\\u0410'], ['\\u043F', '\\u041F'], ['\\u0440', '\\u0420'], ['\\u043E', '\\u041E'], ['\\u043B', '\\u041B'], ['\\u0434', '\\u0414'], ['\\u0436', '\\u0416'], ['\\u049D', '\\u049C'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\\\', '|'], ['\\u04D9', '\\u04D8'], ['\\u0447', '\\u0427'], ['\\u0441', '\\u0421'], ['\\u043C', '\\u041C'], ['\\u0438', '\\u0418'], ['\\u0442', '\\u0422'], ['\\u0493', '\\u0492'], ['\\u0431', '\\u0411'], ['\\u04E9', '\\u04E8'], ['.', ','], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['az-Cyrl'] };\r\n\r\n  this.VKI_layout['Az\\u0259rbaycanca'] = {\r\n    'name': 'Azerbaijani Latin', 'keys': [\r\n      [['`', '~'], ['1', '!'], ['2', '\"'], ['3', '\\u2166'], ['4', ';'], ['5', '%'], ['6', ':'], ['7', '?'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['\\u00FC', '\\u00DC'], ['e', 'E'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', '\\u0130'], ['o', 'O'], ['p', 'P'], ['\\u00F6', '\\u00D6'], ['\\u011F', '\\u011E'], ['\\\\', '/']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\\u0131', 'I'], ['\\u0259', '\\u018F'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], ['\\u00E7', '\\u00C7'], ['\\u015F', '\\u015E'], ['.', ','], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['az'] };\r\n\r\n  this.VKI_layout['\\u0411\\u0435\\u043b\\u0430\\u0440\\u0443\\u0441\\u043a\\u0430\\u044f'] = {\r\n    'name': 'Belarusian', 'keys': [\r\n      [['\\u0451', '\\u0401'], ['1', '!'], ['2', '\"'], ['3', '\\u2116'], ['4', ';'], ['5', '%'], ['6', ':'], ['7', '?'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0439', '\\u0419'], ['\\u0446', '\\u0426'], ['\\u0443', '\\u0423'], ['\\u043a', '\\u041a'], ['\\u0435', '\\u0415'], ['\\u043d', '\\u041d'], ['\\u0433', '\\u0413'], ['\\u0448', '\\u0428'], ['\\u045e', '\\u040e'], ['\\u0437', '\\u0417'], ['\\u0445', '\\u0425'], ['\\'', '\\''], ['\\\\', '/']],\r\n      [['Caps', 'Caps'], ['\\u0444', '\\u0424'], ['\\u044b', '\\u042b'], ['\\u0432', '\\u0412'], ['\\u0430', '\\u0410'], ['\\u043f', '\\u041f'], ['\\u0440', '\\u0420'], ['\\u043e', '\\u041e'], ['\\u043b', '\\u041b'], ['\\u0434', '\\u0414'], ['\\u0436', '\\u0416'], ['\\u044d', '\\u042d'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['/', '|'], ['\\u044f', '\\u042f'], ['\\u0447', '\\u0427'], ['\\u0441', '\\u0421'], ['\\u043c', '\\u041c'], ['\\u0456', '\\u0406'], ['\\u0442', '\\u0422'], ['\\u044c', '\\u042c'], ['\\u0431', '\\u0411'], ['\\u044e', '\\u042e'], ['.', ','], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['be'] };\r\n\r\n  this.VKI_layout['Belgische / Belge'] = {\r\n    'name': 'Belgian', 'keys': [\r\n      [['\\u00b2', '\\u00b3'], ['&', '1', '|'], ['\\u00e9', '2', '@'], ['\"', '3', '#'], ['\\'', '4'], ['(', '5'], ['\\u00a7', '6', '^'], ['\\u00e8', '7'], ['!', '8'], ['\\u00e7', '9', '{'], ['\\u00e0', '0', '}'], [')', '\\u00b0'], ['-', '_'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['a', 'A'], ['z', 'Z'], ['e', 'E', '\\u20ac'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['^', '\\u00a8', '['], ['$', '*', ']'], ['\\u03bc', '\\u00a3', '`']],\r\n      [['Caps', 'Caps'], ['q', 'Q'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['m', 'M'], ['\\u00f9', '%', '\\u00b4'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>', '\\\\'], ['w', 'W'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], [',', '?'], [';', '.'], [':', '/'], ['=', '+', '~'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['nl-BE', 'fr-BE'] };\r\n\r\n  this.VKI_layout['\\u0411\\u044a\\u043b\\u0433\\u0430\\u0440\\u0441\\u043a\\u0438 \\u0424\\u043e\\u043d\\u0435\\u0442\\u0438\\u0447\\u0435\\u043d'] = {\r\n    'name': 'Bulgarian Phonetic', 'keys': [\r\n      [['\\u0447', '\\u0427'], ['1', '!'], ['2', '@'], ['3', '#'], ['4', '$'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u044F', '\\u042F'], ['\\u0432', '\\u0412'], ['\\u0435', '\\u0415'], ['\\u0440', '\\u0420'], ['\\u0442', '\\u0422'], ['\\u044A', '\\u042A'], ['\\u0443', '\\u0423'], ['\\u0438', '\\u0418'], ['\\u043E', '\\u041E'], ['\\u043F', '\\u041F'], ['\\u0448', '\\u0428'], ['\\u0449', '\\u0429'], ['\\u044E', '\\u042E']],\r\n      [['Caps', 'Caps'], ['\\u0430', '\\u0410'], ['\\u0441', '\\u0421'], ['\\u0434', '\\u0414'], ['\\u0444', '\\u0424'], ['\\u0433', '\\u0413'], ['\\u0445', '\\u0425'], ['\\u0439', '\\u0419'], ['\\u043A', '\\u041A'], ['\\u043B', '\\u041B'], [';', ':'], ['\\'', '\"'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0437', '\\u0417'], ['\\u044C', '\\u042C'], ['\\u0446', '\\u0426'], ['\\u0436', '\\u0416'], ['\\u0431', '\\u0411'], ['\\u043D', '\\u041D'], ['\\u043C', '\\u041C'], [',', '<'], ['.', '>'], ['/', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['bg'] };\r\n\r\n  this.VKI_layout['\\u0411\\u044a\\u043b\\u0433\\u0430\\u0440\\u0441\\u043a\\u0438'] = {\r\n    'name': 'Bulgarian BDS', 'keys': [\r\n      [['`', '~'], ['1', '!'], ['2', '?'], ['3', '+'], ['4', '\"'], ['5', '%'], ['6', '='], ['7', ':'], ['8', '/'], ['9', '_'], ['0', '\\u2116'], ['-', '\\u0406'], ['=', 'V'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], [',', '\\u044b'], ['\\u0443', '\\u0423'], ['\\u0435', '\\u0415'], ['\\u0438', '\\u0418'], ['\\u0448', '\\u0428'], ['\\u0449', '\\u0429'], ['\\u043a', '\\u041a'], ['\\u0441', '\\u0421'], ['\\u0434', '\\u0414'], ['\\u0437', '\\u0417'], ['\\u0446', '\\u0426'], [';', '\\u00a7'], ['(', ')']],\r\n      [['Caps', 'Caps'], ['\\u044c', '\\u042c'], ['\\u044f', '\\u042f'], ['\\u0430', '\\u0410'], ['\\u043e', '\\u041e'], ['\\u0436', '\\u0416'], ['\\u0433', '\\u0413'], ['\\u0442', '\\u0422'], ['\\u043d', '\\u041d'], ['\\u0412', '\\u0412'], ['\\u043c', '\\u041c'], ['\\u0447', '\\u0427'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u042e', '\\u044e'], ['\\u0439', '\\u0419'], ['\\u044a', '\\u042a'], ['\\u044d', '\\u042d'], ['\\u0444', '\\u0424'], ['\\u0445', '\\u0425'], ['\\u043f', '\\u041f'], ['\\u0440', '\\u0420'], ['\\u043b', '\\u041b'], ['\\u0431', '\\u0411'], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ]};\r\n\r\n  this.VKI_layout['\\u09ac\\u09be\\u0982\\u09b2\\u09be'] = {\r\n    'name': 'Bengali', 'keys': [\r\n      [[''], ['1', '', '\\u09E7'], ['2', '', '\\u09E8'], ['3', '\\u09CD\\u09B0', '\\u09E9'], ['4', '\\u09B0\\u09CD', '\\u09EA'], ['5', '\\u099C\\u09CD\\u09B0', '\\u09EB'], ['6', '\\u09A4\\u09CD\\u09B7', '\\u09EC'], ['7', '\\u0995\\u09CD\\u09B0', '\\u09ED'], ['8', '\\u09B6\\u09CD\\u09B0', '\\u09EE'], ['9', '(', '\\u09EF'], ['0', ')', '\\u09E6'], ['-', '\\u0983'], ['\\u09C3', '\\u098B', '\\u09E2', '\\u09E0'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u09CC', '\\u0994', '\\u09D7'], ['\\u09C8', '\\u0990'], ['\\u09BE', '\\u0986'], ['\\u09C0', '\\u0988', '\\u09E3', '\\u09E1'], ['\\u09C2', '\\u098A'], ['\\u09AC', '\\u09AD'], ['\\u09B9', '\\u0999'], ['\\u0997', '\\u0998'], ['\\u09A6', '\\u09A7'], ['\\u099C', '\\u099D'], ['\\u09A1', '\\u09A2', '\\u09DC', '\\u09DD'], ['Enter', 'Enter']],\r\n      [['Caps', 'Caps'], ['\\u09CB', '\\u0993', '\\u09F4', '\\u09F5'], ['\\u09C7', '\\u098F', '\\u09F6', '\\u09F7'], ['\\u09CD', '\\u0985', '\\u09F8', '\\u09F9'], ['\\u09BF', '\\u0987', '\\u09E2', '\\u098C'], ['\\u09C1', '\\u0989'], ['\\u09AA', '\\u09AB'], ['\\u09B0', '', '\\u09F0', '\\u09F1'], ['\\u0995', '\\u0996'], ['\\u09A4', '\\u09A5'], ['\\u099A', '\\u099B'], ['\\u099F', '\\u09A0'], ['\\u09BC', '\\u099E']],\r\n      [['Shift', 'Shift'], [''], ['\\u0982', '\\u0981', '\\u09FA'], ['\\u09AE', '\\u09A3'], ['\\u09A8'], ['\\u09AC'], ['\\u09B2'], ['\\u09B8', '\\u09B6'], [',', '\\u09B7'], ['.', '{'], ['\\u09AF', '\\u09DF'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['bn'] };\r\n\r\n  this.VKI_layout['Bosanski'] = {\r\n    'name': 'Bosnian', 'keys': [\r\n      [['\\u00B8', '\\u00A8'], ['1', '!', '~'], ['2', '\"', '\\u02C7'], ['3', '#', '^'], ['4', '$', '\\u02D8'], ['5', '%', '\\u00B0'], ['6', '&', '\\u02DB'], ['7', '/', '`'], ['8', '(', '\\u02D9'], ['9', ')', '\\u00B4'], ['0', '=', '\\u02DD'], ['\\'', '?', '\\u00A8'], ['+', '*', '\\u00B8'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q', '\\\\'], ['w', 'W', '|'], ['e', 'E', '\\u20AC'], ['r', 'R'], ['t', 'T'], ['z', 'Z'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\\u0161', '\\u0160', '\\u00F7'], ['\\u0111', '\\u0110', '\\u00D7'], ['\\u017E', '\\u017D', '\\u00A4']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F', '['], ['g', 'G', ']'], ['h', 'H'], ['j', 'J'], ['k', 'K', '\\u0142'], ['l', 'L', '\\u0141'], ['\\u010D', '\\u010C'], ['\\u0107', '\\u0106', '\\u00DF'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>'], ['y', 'Y'], ['x', 'X'], ['c', 'C'], ['v', 'V', '@'], ['b', 'B', '{'], ['n', 'N', '}'], ['m', 'M', '\\u00A7'], [',', ';', '<'], ['.', ':', '>'], ['-', '_', '\\u00A9'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['bs'] };\r\n\r\n  this.VKI_layout['Canadienne-fran\\u00e7aise'] = {\r\n    'name': 'Canadian French', 'keys': [\r\n      [['#', '|', '\\\\'], ['1', '!', '\\u00B1'], ['2', '\"', '@'], ['3', '/', '\\u00A3'], ['4', '$', '\\u00A2'], ['5', '%', '\\u00A4'], ['6', '?', '\\u00AC'], ['7', '&', '\\u00A6'], ['8', '*', '\\u00B2'], ['9', '(', '\\u00B3'], ['0', ')', '\\u00BC'], ['-', '_', '\\u00BD'], ['=', '+', '\\u00BE'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O', '\\u00A7'], ['p', 'P', '\\u00B6'], ['^', '^', '['], ['\\u00B8', '\\u00A8', ']'], ['<', '>', '}']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], [';', ':', '~'], ['`', '`', '{'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u00AB', '\\u00BB', '\\u00B0'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M', '\\u00B5'], [',', '\\'', '\\u00AF'], ['.', '.', '\\u00AD'], ['\\u00E9', '\\u00C9', '\\u00B4'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['fr-CA'] };\r\n\r\n  this.VKI_layout['\\u010cesky'] = {\r\n    'name': 'Czech', 'keys': [\r\n      [[';', '\\u00b0', '`', '~'], ['+', '1', '!'], ['\\u011B', '2', '@'], ['\\u0161', '3', '#'], ['\\u010D', '4', '$'], ['\\u0159', '5', '%'], ['\\u017E', '6', '^'], ['\\u00FD', '7', '&'], ['\\u00E1', '8', '*'], ['\\u00ED', '9', '('], ['\\u00E9', '0', ')'], ['=', '%', '-', '_'], ['\\u00B4', '\\u02c7', '=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\\u20AC'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\\u00FA', '/', '[', '{'], [')', '(', ']', '}'], ['\\u00A8', '\\'', '\\\\', '|']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\\u016F', '\"', ';', ':'], ['\\u00A7', '!', '\\u00a4', '^'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\\\', '|', '', '\\u02dd'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', '?', '<', '\\u00d7'], ['.', ':', '>', '\\u00f7'], ['-', '_', '/', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['Alt', 'Alt']]\r\n    ], 'lang': ['cs'] };\r\n\r\n  this.VKI_layout['Dansk'] = {\r\n    'name': 'Danish', 'keys': [\r\n      [['\\u00bd', '\\u00a7'], ['1', '!'], ['2', '\"', '@'], ['3', '#', '\\u00a3'], ['4', '\\u00a4', '$'], ['5', '%', '\\u20ac'], ['6', '&'], ['7', '/', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['+', '?'], ['\\u00b4', '`', '|'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\\u20ac'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\\u00e5', '\\u00c5'], ['\\u00a8', '^', '~'], ['\\'', '*']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\\u00e6', '\\u00c6'], ['\\u00f8', '\\u00d8'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>', '\\\\'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M', '\\u03bc', '\\u039c'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['da'] };\r\n\r\n  this.VKI_layout['Deutsch'] = {\r\n    'name': 'German', 'keys': [\r\n      [['^', '\\u00b0'], ['1', '!'], ['2', '\"', '\\u00b2'], ['3', '\\u00a7', '\\u00b3'], ['4', '$'], ['5', '%'], ['6', '&'], ['7', '/', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['\\u00df', '?', '\\\\'], ['\\u00b4', '`'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q', '@'], ['w', 'W'], ['e', 'E', '\\u20ac'], ['r', 'R'], ['t', 'T'], ['z', 'Z'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\\u00fc', '\\u00dc'], ['+', '*', '~'], ['#', '\\'']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\\u00f6', '\\u00d6'], ['\\u00e4', '\\u00c4'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>', '\\u00a6'], ['y', 'Y'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M', '\\u00b5'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['de'] };\r\n\r\n  this.VKI_layout['Dingbats'] = {\r\n    'name': 'Dingbats', 'keys': [\r\n      [['\\u2764', '\\u2765', '\\u2766', '\\u2767'], ['\\u278a', '\\u2780', '\\u2776', '\\u2768'], ['\\u278b', '\\u2781', '\\u2777', '\\u2769'], ['\\u278c', '\\u2782', '\\u2778', '\\u276a'], ['\\u278d', '\\u2783', '\\u2779', '\\u276b'], ['\\u278e', '\\u2784', '\\u277a', '\\u276c'], ['\\u278f', '\\u2785', '\\u277b', '\\u276d'], ['\\u2790', '\\u2786', '\\u277c', '\\u276e'], ['\\u2791', '\\u2787', '\\u277d', '\\u276f'], ['\\u2792', '\\u2788', '\\u277e', '\\u2770'], ['\\u2793', '\\u2789', '\\u277f', '\\u2771'], ['\\u2795', '\\u2796', '\\u274c', '\\u2797'], ['\\u2702', '\\u2704', '\\u2701', '\\u2703'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u2714', '\\u2705', '\\u2713'], ['\\u2718', '\\u2715', '\\u2717', '\\u2716'], ['\\u271a', '\\u2719', '\\u271b', '\\u271c'], ['\\u271d', '\\u271e', '\\u271f', '\\u2720'], ['\\u2722', '\\u2723', '\\u2724', '\\u2725'], ['\\u2726', '\\u2727', '\\u2728', '\\u2756'], ['\\u2729', '\\u272a', '\\u272d', '\\u2730'], ['\\u272c', '\\u272b', '\\u272e', '\\u272f'], ['\\u2736', '\\u2731', '\\u2732', '\\u2749'], ['\\u273b', '\\u273c', '\\u273d', '\\u273e'], ['\\u2744', '\\u2745', '\\u2746', '\\u2743'], ['\\u2733', '\\u2734', '\\u2735', '\\u2721'], ['\\u2737', '\\u2738', '\\u2739', '\\u273a']],\r\n      [['Caps', 'Caps'], ['\\u2799', '\\u279a', '\\u2798', '\\u2758'], ['\\u27b5', '\\u27b6', '\\u27b4', '\\u2759'], ['\\u27b8', '\\u27b9', '\\u27b7', '\\u275a'], ['\\u2794', '\\u279c', '\\u27ba', '\\u27bb'], ['\\u279d', '\\u279e', '\\u27a1', '\\u2772'], ['\\u27a9', '\\u27aa', '\\u27ab', '\\u27ac'], ['\\u27a4', '\\u27a3', '\\u27a2', '\\u279b'], ['\\u27b3', '\\u27bc', '\\u27bd', '\\u2773'], ['\\u27ad', '\\u27ae', '\\u27af', '\\u27b1'], ['\\u27a8', '\\u27a6', '\\u27a5', '\\u27a7'], ['\\u279f', '\\u27a0', '\\u27be', '\\u27b2'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'],  ['\\u270c', '\\u270b', '\\u270a', '\\u270d'], ['\\u274f', '\\u2750', '\\u2751', '\\u2752'], ['\\u273f', '\\u2740', '\\u2741', '\\u2742'], ['\\u2747', '\\u2748', '\\u274a', '\\u274b'], ['\\u2757', '\\u2755', '\\u2762', '\\u2763'], ['\\u2753', '\\u2754', '\\u27b0', '\\u27bf'], ['\\u270f', '\\u2710', '\\u270e', '\\u2774'], ['\\u2712', '\\u2711', '\\u274d', '\\u274e'], ['\\u2709', '\\u2706', '\\u2708', '\\u2707'], ['\\u275b', '\\u275d', '\\u2761', '\\u2775'], ['\\u275c', '\\u275e', '\\u275f', '\\u2760'], ['Shift', 'Shift']],\r\n      [['AltLk', 'AltLk'], [' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ]};\r\n\r\n  this.VKI_layout['\\u078b\\u07a8\\u0788\\u07ac\\u0780\\u07a8\\u0784\\u07a6\\u0790\\u07b0'] = {\r\n    'name': 'Divehi', 'keys': [\r\n      [['`', '~'], ['1', '!'], ['2', '@'], ['3', '#'], ['4', '$'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', ')'], ['0', '('], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u07ab', '\\u00d7'], ['\\u07ae', '\\u2019'], ['\\u07a7', '\\u201c'], ['\\u07a9', '/'], ['\\u07ad', ':'], ['\\u078e', '\\u07a4'], ['\\u0783', '\\u079c'], ['\\u0789', '\\u07a3'], ['\\u078c', '\\u07a0'], ['\\u0780', '\\u0799'], ['\\u078d', '\\u00f7'], ['[', '{'], [']', '}']],\r\n      [['Caps', 'Caps'], ['\\u07a8', '<'], ['\\u07aa', '>'], ['\\u07b0', '.', ',', ','], ['\\u07a6', '\\u060c'], ['\\u07ac', '\"'], ['\\u0788', '\\u07a5'], ['\\u0787', '\\u07a2'], ['\\u0782', '\\u0798'], ['\\u0786', '\\u079a'], ['\\u078a', '\\u07a1'], ['\\ufdf2', '\\u061b', ';', ';'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\\\', '|'], ['\\u0792', '\\u0796'], ['\\u0791', '\\u0795'], ['\\u0790', '\\u078f'], ['\\u0794', '\\u0797', '\\u200D'], ['\\u0785', '\\u079f', '\\u200C'], ['\\u078b', '\\u079b', '\\u200E'], ['\\u0784', '\\u079D', '\\u200F'], ['\\u0781', '\\\\'], ['\\u0793', '\\u079e'], ['\\u07af', '\\u061f'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['dv'] };\r\n\r\n  this.VKI_layout['Dvorak'] = {\r\n    'name': 'Dvorak', 'keys': [\r\n      [['`', '~'], ['1', '!'], ['2', '@'], ['3', '#'], ['4', '$'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['[', '{'], [']', '}'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\'', '\"'], [',', '<'], ['.', '>'], ['p', 'P'], ['y', 'Y'], ['f', 'F'], ['g', 'G'], ['c', 'C'], ['r', 'R'], ['l', 'L'], ['/', '?'], ['=', '+'], ['\\\\', '|']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['o', 'O'], ['e', 'E'], ['u', 'U'], ['i', 'I'], ['d', 'D'], ['h', 'H'], ['t', 'T'], ['n', 'N'], ['s', 'S'], ['-', '_'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], [';', ':'], ['q', 'Q'], ['j', 'J'], ['k', 'K'], ['x', 'X'], ['b', 'B'], ['m', 'M'], ['w', 'W'], ['v', 'V'], ['z', 'Z'], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ]};\r\n\r\n  this.VKI_layout['\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac'] = {\r\n    'name': 'Greek', 'keys': [\r\n      [['`', '~'], ['1', '!'], ['2', '@', '\\u00b2'], ['3', '#', '\\u00b3'], ['4', '$', '\\u00a3'], ['5', '%', '\\u00a7'], ['6', '^', '\\u00b6'], ['7', '&'], ['8', '*', '\\u00a4'], ['9', '(', '\\u00a6'], ['0', ')', '\\u00ba'], ['-', '_', '\\u00b1'], ['=', '+', '\\u00bd'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], [';', ':'], ['\\u03c2', '^'], ['\\u03b5', '\\u0395'], ['\\u03c1', '\\u03a1'], ['\\u03c4', '\\u03a4'], ['\\u03c5', '\\u03a5'], ['\\u03b8', '\\u0398'], ['\\u03b9', '\\u0399'], ['\\u03bf', '\\u039f'], ['\\u03c0', '\\u03a0'], ['[', '{', '\\u201c'], [']', '}', '\\u201d'], ['\\\\', '|', '\\u00ac']],\r\n      [['Caps', 'Caps'], ['\\u03b1', '\\u0391'], ['\\u03c3', '\\u03a3'], ['\\u03b4', '\\u0394'], ['\\u03c6', '\\u03a6'], ['\\u03b3', '\\u0393'], ['\\u03b7', '\\u0397'], ['\\u03be', '\\u039e'], ['\\u03ba', '\\u039a'], ['\\u03bb', '\\u039b'], ['\\u0384', '\\u00a8', '\\u0385'], ['\\'', '\"'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>'], ['\\u03b6', '\\u0396'], ['\\u03c7', '\\u03a7'], ['\\u03c8', '\\u03a8'], ['\\u03c9', '\\u03a9'], ['\\u03b2', '\\u0392'], ['\\u03bd', '\\u039d'], ['\\u03bc', '\\u039c'], [',', '<'], ['.', '>'], ['/', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['el'] };\r\n\r\n  this.VKI_layout['Eesti'] = {\r\n    'name': 'Estonian', 'keys': [\r\n      [['\\u02C7', '~'], ['1', '!'], ['2', '\"', '@', '@'], ['3', '#', '\\u00A3', '\\u00A3'], ['4', '\\u00A4', '$', '$'], ['5', '%', '\\u20AC'], ['6', '&'], ['7', '/', '{', '{'], ['8', '(', '[', '['], ['9', ')', ']', ']'], ['0', '=', '}', '}'], ['+', '?', '\\\\', '\\\\'], ['\\u00B4', '`'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\\u20AC'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\\u00FC', '\\u00DC'], ['\\u00F5', '\\u00D5', '\\u00A7', '\\u00A7'], ['\\'', '*', '\\u00BD', '\\u00BD']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S', '\\u0161', '\\u0160'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\\u00F6', '\\u00D6'], ['\\u00E4', '\\u00C4', '^', '^'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>', '|', '|'], ['z', 'Z', '\\u017E', '\\u017D'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['et'] };\r\n\r\n  this.VKI_layout['Espa\\u00f1ol'] = {\r\n    'name': 'Spanish', 'keys': [\r\n      [['\\u00ba', '\\u00aa', '\\\\'], ['1', '!', '|'], ['2', '\"', '@'], ['3', '\\'', '#'], ['4', '$', '~'], ['5', '%', '\\u20ac'], ['6', '&', '\\u00ac'], ['7', '/'], ['8', '('], ['9', ')'], ['0', '='], ['\\'', '?'], ['\\u00a1', '\\u00bf'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['`', '^', '['], ['+', '*', ']'], ['\\u00e7', '\\u00c7', '}']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\\u00f1', '\\u00d1'], ['\\u00b4', '\\u00a8', '{'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['es'] };\r\n\r\n  this.VKI_layout['\\u062f\\u0631\\u06cc'] = {\r\n    'name': 'Dari', 'keys': [\r\n      [['\\u200D', '\\u00F7', '~'], ['\\u06F1', '!', '`'], ['\\u06F2', '\\u066C', '@'], ['\\u06F3', '\\u066B', '#'], ['\\u06F4', '\\u060B', '$'], ['\\u06F5', '\\u066A', '%'], ['\\u06F6', '\\u00D7', '^'], ['\\u06F7', '\\u060C', '&'], ['\\u06F8', '*', '\\u2022'], ['\\u06F9', ')', '\\u200E'], ['\\u06F0', '(', '\\u200F'], ['-', '\\u0640', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0636', '\\u0652', '\\u00B0'], ['\\u0635', '\\u064C'], ['\\u062B', '\\u064D', '\\u20AC'], ['\\u0642', '\\u064B', '\\uFD3E'], ['\\u0641', '\\u064F', '\\uFD3F'], ['\\u063A', '\\u0650', '\\u0656'], ['\\u0639', '\\u064E', '\\u0659'], ['\\u0647', '\\u0651', '\\u0655'], ['\\u062E', ']', '\\''], ['\\u062D', '[', '\"'], ['\\u062C', '}', '\\u0681'], ['\\u0686', '{', '\\u0685'], ['\\\\', '|', '?']],\r\n      [['Caps', 'Caps'], ['\\u0634', '\\u0624', '\\u069A'], ['\\u0633', '\\u0626', '\\u06CD'], ['\\u06CC', '\\u064A', '\\u0649'], ['\\u0628', '\\u0625', '\\u06D0'], ['\\u0644', '\\u0623', '\\u06B7'], ['\\u0627', '\\u0622', '\\u0671'], ['\\u062A', '\\u0629', '\\u067C'], ['\\u0646', '\\u00BB', '\\u06BC'], ['\\u0645', '\\u00AB', '\\u06BA'], ['\\u06A9', ':', ';'], ['\\u06AF', '\\u061B', '\\u06AB'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0638', '\\u0643', '\\u06D2'], ['\\u0637', '\\u0653', '\\u0691'], ['\\u0632', '\\u0698', '\\u0696'], ['\\u0631', '\\u0670', '\\u0693'], ['\\u0630', '\\u200C', '\\u0688'], ['\\u062F', '\\u0654', '\\u0689'], ['\\u067E', '\\u0621', '\\u0679'], ['\\u0648', '>', ','], ['.', '<', '\\u06C7'], ['/', '\\u061F', '\\u06C9'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['fa-AF'] };\r\n\r\n  this.VKI_layout['\\u0641\\u0627\\u0631\\u0633\\u06cc'] = {\r\n    'name': 'Farsi', 'keys': [\r\n      [['\\u067e', '\\u0651 '], ['1', '!', '\\u00a1', '\\u00b9'], ['2', '@', '\\u00b2'], ['3', '#', '\\u00b3'], ['4', '$', '\\u00a4', '\\u00a3'], ['5', '%', '\\u20ac'], ['6', '^', '\\u00bc'], ['7', '&', '\\u00bd'], ['8', '*', '\\u00be'], ['9', '(', '\\u2018'], ['0', ')', '\\u2019'], ['-', '_', '\\u00a5'], ['=', '+', '\\u00d7', '\\u00f7'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0636', '\\u064e'], ['\\u0635', '\\u064b'], ['\\u062b', '\\u064f'], ['\\u0642', '\\u064c'], ['\\u0641', '\\u0644'], ['\\u063a', '\\u0625'], ['\\u0639', '\\u2018'], ['\\u0647', '\\u00f7'], ['\\u062e', '\\u00d7'], ['\\u062d', '\\u061b'], ['\\u062c', '<'], ['\\u0686', '>'], ['\\u0698', '|']],\r\n      [['Caps', 'Caps'], ['\\u0634', '\\u0650'], ['\\u0633', '\\u064d'], ['\\u064a', ']'], ['\\u0628', '['], ['\\u0644', '\\u0644'], ['\\u0627', '\\u0623'], ['\\u062a', '\\u0640'], ['\\u0646', '\\u060c'], ['\\u0645', '\\\\'], ['\\u06af', ':'], ['\\u0643', '\"'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0638', '~'], ['\\u0637', '\\u0652'], ['\\u0632', '}'], ['\\u0631', '{'], ['\\u0630', '\\u0644'], ['\\u062f', '\\u0622'], ['\\u0626', '\\u0621'], ['\\u0648', ','], ['.', '.'], ['/', '\\u061f'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['Alt', 'Alt']]\r\n    ], 'lang': ['fa'] };\r\n\r\n  this.VKI_layout['F\\u00f8royskt'] = {\r\n    'name': 'Faeroese', 'keys': [\r\n      [['\\u00BD', '\\u00A7'], ['1', '!'], ['2', '\"', '@'], ['3', '#', '\\u00A3'], ['4', '\\u00A4', '$'], ['5', '%', '\\u20AC'], ['6', '&'], ['7', '/', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['+', '?'], ['\\u00B4', '`', '|'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\\u20AC'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\\u00E5', '\\u00C5', '\\u00A8'], ['\\u00F0', '\\u00D0', '~'], ['\\'', '*']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\\u00E6', '\\u00C6'], ['\\u00F8', '\\u00D8', '^'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>', '\\\\'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M', '\\u00B5'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['fo'] };\r\n\r\n  this.VKI_layout['Fran\\u00e7ais'] = {\r\n    'name': 'French', 'keys': [\r\n      [['\\u00b2', '\\u00b3'], ['&', '1'], ['\\u00e9', '2', '~'], ['\"', '3', '#'], ['\\'', '4', '{'], ['(', '5', '['], ['-', '6', '|'], ['\\u00e8', '7', '`'], ['_', '8', '\\\\'], ['\\u00e7', '9', '^'], ['\\u00e0', '0', '@'], [')', '\\u00b0', ']'], ['=', '+', '}'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['a', 'A'], ['z', 'Z'], ['e', 'E', '\\u20ac'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['^', '\\u00a8'], ['$', '\\u00a3', '\\u00a4'], ['*', '\\u03bc']],\r\n      [['Caps', 'Caps'], ['q', 'Q'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['m', 'M'], ['\\u00f9', '%'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>'], ['w', 'W'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], [',', '?'], [';', '.'], [':', '/'], ['!', '\\u00a7'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['fr'] };\r\n\r\n  this.VKI_layout['Gaeilge'] = {\r\n    'name': 'Irish / Gaelic', 'keys': [\r\n      [['`', '\\u00AC', '\\u00A6', '\\u00A6'], ['1', '!'], ['2', '\"'], ['3', '\\u00A3'], ['4', '$', '\\u20AC'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\\u00E9', '\\u00C9'], ['r', 'R'], ['t', 'T'], ['y', 'Y', '\\u00FD', '\\u00DD'], ['u', 'U', '\\u00FA', '\\u00DA'], ['i', 'I', '\\u00ED', '\\u00CD'], ['o', 'O', '\\u00F3', '\\u00D3'], ['p', 'P'], ['[', '{'], [']', '}'], ['#', '~']],\r\n      [['Caps', 'Caps'], ['a', 'A', '\\u00E1', '\\u00C1'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], [';', ':'], ['\\'', '@', '\\u00B4', '`'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\\\', '|'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', '<'], ['.', '>'], ['/', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['ga', 'gd'] };\r\n\r\n  this.VKI_layout['\\u0a97\\u0ac1\\u0a9c\\u0ab0\\u0abe\\u0aa4\\u0ac0'] = {\r\n    'name': 'Gujarati', 'keys': [\r\n      [[''], ['1', '\\u0A8D', '\\u0AE7'], ['2', '\\u0AC5', '\\u0AE8'], ['3', '\\u0ACD\\u0AB0', '\\u0AE9'], ['4', '\\u0AB0\\u0ACD', '\\u0AEA'], ['5', '\\u0A9C\\u0ACD\\u0A9E', '\\u0AEB'], ['6', '\\u0AA4\\u0ACD\\u0AB0', '\\u0AEC'], ['7', '\\u0A95\\u0ACD\\u0AB7', '\\u0AED'], ['8', '\\u0AB6\\u0ACD\\u0AB0', '\\u0AEE'], ['9', '(', '\\u0AEF'], ['0', ')', '\\u0AE6'], ['-', '\\u0A83'], ['\\u0AC3', '\\u0A8B', '\\u0AC4', '\\u0AE0'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0ACC', '\\u0A94'], ['\\u0AC8', '\\u0A90'], ['\\u0ABE', '\\u0A86'], ['\\u0AC0', '\\u0A88'], ['\\u0AC2', '\\u0A8A'], ['\\u0AAC', '\\u0AAD'], ['\\u0AB9', '\\u0A99'], ['\\u0A97', '\\u0A98'], ['\\u0AA6', '\\u0AA7'], ['\\u0A9C', '\\u0A9D'], ['\\u0AA1', '\\u0AA2'], ['\\u0ABC', '\\u0A9E'], ['\\u0AC9', '\\u0A91']],\r\n      [['Caps', 'Caps'], ['\\u0ACB', '\\u0A93'], ['\\u0AC7', '\\u0A8F'], ['\\u0ACD', '\\u0A85'], ['\\u0ABF', '\\u0A87'], ['\\u0AC1', '\\u0A89'], ['\\u0AAA', '\\u0AAB'], ['\\u0AB0'], ['\\u0A95', '\\u0A96'], ['\\u0AA4', '\\u0AA5'], ['\\u0A9A', '\\u0A9B'], ['\\u0A9F', '\\u0AA0'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], [''], ['\\u0A82', '\\u0A81', '', '\\u0AD0'], ['\\u0AAE', '\\u0AA3'], ['\\u0AA8'], ['\\u0AB5'], ['\\u0AB2', '\\u0AB3'], ['\\u0AB8', '\\u0AB6'], [',', '\\u0AB7'], ['.', '\\u0964', '\\u0965', '\\u0ABD'], ['\\u0AAF'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['gu'] };\r\n\r\n  this.VKI_layout['\\u05e2\\u05d1\\u05e8\\u05d9\\u05ea'] = {\r\n    'name': 'Hebrew', 'keys': [\r\n      [['~', '`'], ['1', '!'], ['2', '@'], ['3', '#'], ['4' , '$', '\\u20aa'], ['5' , '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', ')'], ['0', '('], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['/', 'Q'], ['\\'', 'W'], ['\\u05e7', 'E', '\\u20ac'], ['\\u05e8', 'R'], ['\\u05d0', 'T'], ['\\u05d8', 'Y'], ['\\u05d5', 'U', '\\u05f0'], ['\\u05df', 'I'], ['\\u05dd', 'O'], ['\\u05e4', 'P'], ['\\\\', '|'], ['Enter', 'Enter']],\r\n      [['Caps', 'Caps'], ['\\u05e9', 'A'], ['\\u05d3', 'S'], ['\\u05d2', 'D'], ['\\u05db', 'F'], ['\\u05e2', 'G'], ['\\u05d9', 'H', '\\u05f2'], ['\\u05d7', 'J', '\\u05f1'], ['\\u05dc', 'K'], ['\\u05da', 'L'], ['\\u05e3', ':'], [',' , '\"'], [']', '}'], ['[', '{']],\r\n      [['Shift', 'Shift'], ['\\u05d6', 'Z'], ['\\u05e1', 'X'], ['\\u05d1', 'C'], ['\\u05d4', 'V'], ['\\u05e0', 'B'], ['\\u05de', 'N'], ['\\u05e6', 'M'], ['\\u05ea', '>'], ['\\u05e5', '<'], ['.', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['he'] };\r\n\r\n  this.VKI_layout['\\u0926\\u0947\\u0935\\u0928\\u093e\\u0917\\u0930\\u0940'] = {\r\n    'name': 'Devanagari', 'keys': [\r\n      [['\\u094A', '\\u0912'], ['1', '\\u090D', '\\u0967'], ['2', '\\u0945', '\\u0968'], ['3', '\\u094D\\u0930', '\\u0969'], ['4', '\\u0930\\u094D', '\\u096A'], ['5', '\\u091C\\u094D\\u091E', '\\u096B'], ['6', '\\u0924\\u094D\\u0930', '\\u096C'], ['7', '\\u0915\\u094D\\u0937', '\\u096D'], ['8', '\\u0936\\u094D\\u0930', '\\u096E'], ['9', '(', '\\u096F'], ['0', ')', '\\u0966'], ['-', '\\u0903'], ['\\u0943', '\\u090B', '\\u0944', '\\u0960'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u094C', '\\u0914'], ['\\u0948', '\\u0910'], ['\\u093E', '\\u0906'], ['\\u0940', '\\u0908', '\\u0963', '\\u0961'], ['\\u0942', '\\u090A'], ['\\u092C', '\\u092D'], ['\\u0939', '\\u0919'], ['\\u0917', '\\u0918', '\\u095A'], ['\\u0926', '\\u0927'], ['\\u091C', '\\u091D', '\\u095B'], ['\\u0921', '\\u0922', '\\u095C', '\\u095D'], ['\\u093C', '\\u091E'], ['\\u0949', '\\u0911']],\r\n      [['Caps', 'Caps'], ['\\u094B', '\\u0913'], ['\\u0947', '\\u090F'], ['\\u094D', '\\u0905'], ['\\u093F', '\\u0907', '\\u0962', '\\u090C'], ['\\u0941', '\\u0909'], ['\\u092A', '\\u092B', '', '\\u095E'], ['\\u0930', '\\u0931'], ['\\u0915', '\\u0916', '\\u0958', '\\u0959'], ['\\u0924', '\\u0925'], ['\\u091A', '\\u091B', '\\u0952'], ['\\u091F', '\\u0920', '', '\\u0951'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0946', '\\u090E', '\\u0953'], ['\\u0902', '\\u0901', '', '\\u0950'], ['\\u092E', '\\u0923', '\\u0954'], ['\\u0928', '\\u0929'], ['\\u0935', '\\u0934'], ['\\u0932', '\\u0933'], ['\\u0938', '\\u0936'], [',', '\\u0937', '\\u0970'], ['.', '\\u0964', '\\u0965', '\\u093D'], ['\\u092F', '\\u095F'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['hi-Deva'] };\r\n\r\n  this.VKI_layout['\\u0939\\u093f\\u0902\\u0926\\u0940'] = {\r\n    'name': 'Hindi', 'keys': [\r\n      [['\\u200d', '\\u200c', '`', '~'], ['1', '\\u090D', '\\u0967', '!'], ['2', '\\u0945', '\\u0968', '@'], ['3', '\\u094D\\u0930', '\\u0969', '#'], ['4', '\\u0930\\u094D', '\\u096A', '$'], ['5', '\\u091C\\u094D\\u091E', '\\u096B', '%'], ['6', '\\u0924\\u094D\\u0930', '\\u096C', '^'], ['7', '\\u0915\\u094D\\u0937', '\\u096D', '&'], ['8', '\\u0936\\u094D\\u0930', '\\u096E', '*'], ['9', '(', '\\u096F', '('], ['0', ')', '\\u0966', ')'], ['-', '\\u0903', '-', '_'], ['\\u0943', '\\u090B', '=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u094C', '\\u0914'], ['\\u0948', '\\u0910'], ['\\u093E', '\\u0906'], ['\\u0940', '\\u0908'], ['\\u0942', '\\u090A'], ['\\u092C', '\\u092D'], ['\\u0939', '\\u0919'], ['\\u0917', '\\u0918'], ['\\u0926', '\\u0927'], ['\\u091C', '\\u091D'], ['\\u0921', '\\u0922', '[', '{'], ['\\u093C', '\\u091E', ']', '}'], ['\\u0949', '\\u0911', '\\\\', '|']],\r\n      [['Caps', 'Caps'], ['\\u094B', '\\u0913'], ['\\u0947', '\\u090F'], ['\\u094D', '\\u0905'], ['\\u093F', '\\u0907'], ['\\u0941', '\\u0909'], ['\\u092A', '\\u092B'], ['\\u0930', '\\u0931'], ['\\u0915', '\\u0916'], ['\\u0924', '\\u0925'], ['\\u091A', '\\u091B', ';', ':'], ['\\u091F', '\\u0920', '\\'', '\"'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], [''], ['\\u0902', '\\u0901', '', '\\u0950'], ['\\u092E', '\\u0923'], ['\\u0928'], ['\\u0935'], ['\\u0932', '\\u0933'], ['\\u0938', '\\u0936'], [',', '\\u0937', ',', '<'], ['.', '\\u0964', '.', '>'], ['\\u092F', '\\u095F', '/', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['hi'] };\r\n\r\n  this.VKI_layout['Hrvatski'] = {\r\n    'name': 'Croatian', 'keys': this.VKI_layout['Bosanski'].keys.slice(0), 'lang': ['hr']\r\n  };\r\n\r\n  this.VKI_layout['\\u0540\\u0561\\u0575\\u0565\\u0580\\u0565\\u0576 \\u0561\\u0580\\u0565\\u0582\\u0574\\u0578\\u0582\\u057f\\u0584'] = {\r\n    'name': 'Western Armenian', 'keys': [\r\n      [['\\u055D', '\\u055C'], [':', '1'], ['\\u0571', '\\u0541'], ['\\u0575', '\\u0545'], ['\\u055B', '3'], [',', '4'], ['-', '9'], ['.', '\\u0587'], ['\\u00AB', '('], ['\\u00BB', ')'], ['\\u0585', '\\u0555'], ['\\u057C', '\\u054C'], ['\\u056A', '\\u053A'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u056D', '\\u053D'], ['\\u057E', '\\u054E'], ['\\u0567', '\\u0537'], ['\\u0580', '\\u0550'], ['\\u0564', '\\u0534'], ['\\u0565', '\\u0535'], ['\\u0568', '\\u0538'], ['\\u056B', '\\u053B'], ['\\u0578', '\\u0548'], ['\\u0562', '\\u0532'], ['\\u0579', '\\u0549'], ['\\u057B', '\\u054B'], ['\\'', '\\u055E']],\r\n      [['Caps', 'Caps'], ['\\u0561', '\\u0531'], ['\\u057D', '\\u054D'], ['\\u057F', '\\u054F'], ['\\u0586', '\\u0556'], ['\\u056F', '\\u053F'], ['\\u0570', '\\u0540'], ['\\u0573', '\\u0543'], ['\\u0584', '\\u0554'], ['\\u056C', '\\u053C'], ['\\u0569', '\\u0539'], ['\\u0583', '\\u0553'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0566', '\\u0536'], ['\\u0581', '\\u0551'], ['\\u0563', '\\u0533'], ['\\u0582', '\\u0552'], ['\\u057A', '\\u054A'], ['\\u0576', '\\u0546'], ['\\u0574', '\\u0544'], ['\\u0577', '\\u0547'], ['\\u0572', '\\u0542'], ['\\u056E', '\\u053E'], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['hy-arevmda'] };\r\n\r\n  this.VKI_layout['\\u0540\\u0561\\u0575\\u0565\\u0580\\u0565\\u0576 \\u0561\\u0580\\u0565\\u0582\\u0565\\u056c\\u0584'] = {\r\n    'name': 'Eastern Armenian', 'keys': [\r\n      [['\\u055D', '\\u055C'], [':', '1'], ['\\u0571', '\\u0541'], ['\\u0575', '\\u0545'], ['\\u055B', '3'], [',', '4'], ['-', '9'], ['.', '\\u0587'], ['\\u00AB', '('], ['\\u00BB', ')'], ['\\u0585', '\\u0555'], ['\\u057C', '\\u054C'], ['\\u056A', '\\u053A'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u056D', '\\u053D'], ['\\u0582', '\\u0552'], ['\\u0567', '\\u0537'], ['\\u0580', '\\u0550'], ['\\u057F', '\\u054F'], ['\\u0565', '\\u0535'], ['\\u0568', '\\u0538'], ['\\u056B', '\\u053B'], ['\\u0578', '\\u0548'], ['\\u057A', '\\u054A'], ['\\u0579', '\\u0549'], ['\\u057B', '\\u054B'], ['\\'', '\\u055E']],\r\n      [['Caps', 'Caps'], ['\\u0561', '\\u0531'], ['\\u057D', '\\u054D'], ['\\u0564', '\\u0534'], ['\\u0586', '\\u0556'], ['\\u0584', '\\u0554'], ['\\u0570', '\\u0540'], ['\\u0573', '\\u0543'], ['\\u056F', '\\u053F'], ['\\u056C', '\\u053C'], ['\\u0569', '\\u0539'], ['\\u0583', '\\u0553'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0566', '\\u0536'], ['\\u0581', '\\u0551'], ['\\u0563', '\\u0533'], ['\\u057E', '\\u054E'], ['\\u0562', '\\u0532'], ['\\u0576', '\\u0546'], ['\\u0574', '\\u0544'], ['\\u0577', '\\u0547'], ['\\u0572', '\\u0542'], ['\\u056E', '\\u053E'], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['hy'] };\r\n\r\n  this.VKI_layout['\\u00cdslenska'] = {\r\n    'name': 'Icelandic', 'keys': [\r\n      [['\\u00B0', '\\u00A8', '\\u00B0'], ['1', '!'], ['2', '\"'], ['3', '#'], ['4', '$'], ['5', '%', '\\u20AC'], ['6', '&'], ['7', '/', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['\\u00F6', '\\u00D6', '\\\\'], ['-', '_'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q', '@'], ['w', 'W'], ['e', 'E', '\\u20AC'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\\u00F0', '\\u00D0'], ['\\'', '?', '~'], ['+', '*', '`']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\\u00E6', '\\u00C6'], ['\\u00B4', '\\'', '^'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>', '|'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M', '\\u00B5'], [',', ';'], ['.', ':'], ['\\u00FE', '\\u00DE'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['is'] };\r\n\r\n  this.VKI_layout['Italiano'] = {\r\n    'name': 'Italian', 'keys': [\r\n      [['\\\\', '|'], ['1', '!'], ['2', '\"'], ['3', '\\u00a3'], ['4', '$', '\\u20ac'], ['5', '%'], ['6', '&'], ['7', '/'], ['8', '('], ['9', ')'], ['0', '='], ['\\'', '?'], ['\\u00ec', '^'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\\u20ac'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\\u00e8', '\\u00e9', '[', '{'], ['+', '*', ']', '}'], ['\\u00f9', '\\u00a7']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\\u00f2', '\\u00e7', '@'], ['\\u00e0', '\\u00b0', '#'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['it'] };\r\n\r\n  this.VKI_layout['\\u65e5\\u672c\\u8a9e'] = {\r\n    'name': 'Japanese Hiragana/Katakana', 'keys': [\r\n      [['\\uff5e'], ['\\u306c', '\\u30cc'], ['\\u3075', '\\u30d5'], ['\\u3042', '\\u30a2', '\\u3041', '\\u30a1'], ['\\u3046', '\\u30a6', '\\u3045', '\\u30a5'], ['\\u3048', '\\u30a8', '\\u3047', '\\u30a7'], ['\\u304a', '\\u30aa', '\\u3049', '\\u30a9'], ['\\u3084', '\\u30e4', '\\u3083', '\\u30e3'], ['\\u3086', '\\u30e6', '\\u3085', '\\u30e5'], ['\\u3088', '\\u30e8', '\\u3087', '\\u30e7'], ['\\u308f', '\\u30ef', '\\u3092', '\\u30f2'], ['\\u307b', '\\u30db', '\\u30fc', '\\uff1d'], ['\\u3078', '\\u30d8' , '\\uff3e', '\\uff5e'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u305f', '\\u30bf'], ['\\u3066', '\\u30c6'], ['\\u3044', '\\u30a4', '\\u3043', '\\u30a3'], ['\\u3059', '\\u30b9'], ['\\u304b', '\\u30ab'], ['\\u3093', '\\u30f3'], ['\\u306a', '\\u30ca'], ['\\u306b', '\\u30cb'], ['\\u3089', '\\u30e9'], ['\\u305b', '\\u30bb'], ['\\u3001', '\\u3001', '\\uff20', '\\u2018'], ['\\u3002', '\\u3002', '\\u300c', '\\uff5b'], ['\\uffe5', '', '', '\\uff0a'], ['\\u309B', '\"', '\\uffe5', '\\uff5c']],\r\n      [['Caps', 'Caps'], ['\\u3061', '\\u30c1'], ['\\u3068', '\\u30c8'], ['\\u3057', '\\u30b7'], ['\\u306f', '\\u30cf'], ['\\u304d', '\\u30ad'], ['\\u304f', '\\u30af'], ['\\u307e', '\\u30de'], ['\\u306e', '\\u30ce'], ['\\u308c', '\\u30ec', '\\uff1b', '\\uff0b'], ['\\u3051', '\\u30b1', '\\uff1a', '\\u30f6'], ['\\u3080', '\\u30e0', '\\u300d', '\\uff5d'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u3064', '\\u30c4'], ['\\u3055', '\\u30b5'], ['\\u305d', '\\u30bd'], ['\\u3072', '\\u30d2'], ['\\u3053', '\\u30b3'], ['\\u307f', '\\u30df'], ['\\u3082', '\\u30e2'], ['\\u306d', '\\u30cd', '\\u3001', '\\uff1c'], ['\\u308b', '\\u30eb', '\\u3002', '\\uff1e'], ['\\u3081', '\\u30e1', '\\u30fb', '\\uff1f'], ['\\u308d', '\\u30ed', '', '\\uff3f'], ['Shift', 'Shift']],\r\n      [['AltLk', 'AltLk'], [' ', ' ', ' ', ' '], ['Alt', 'Alt']]\r\n    ], 'lang': ['ja'] };\r\n\r\n  this.VKI_layout['\\u10e5\\u10d0\\u10e0\\u10d7\\u10e3\\u10da\\u10d8'] = {\r\n    'name': 'Georgian', 'keys': [\r\n      [['\\u201E', '\\u201C'], ['!', '1'], ['?', '2'], ['\\u2116', '3'], ['\\u00A7', '4'], ['%', '5'], [':', '6'], ['.', '7'], [';', '8'], [',', '9'], ['/', '0'], ['\\u2013', '-'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u10E6', '\\u10E6'], ['\\u10EF', '\\u10EF'], ['\\u10E3', '\\u10E3'], ['\\u10D9', '\\u10D9'], ['\\u10D4', '\\u10D4', '\\u10F1'], ['\\u10DC', '\\u10DC'], ['\\u10D2', '\\u10D2'], ['\\u10E8', '\\u10E8'], ['\\u10EC', '\\u10EC'], ['\\u10D6', '\\u10D6'], ['\\u10EE', '\\u10EE', '\\u10F4'], ['\\u10EA', '\\u10EA'], ['(', ')']],\r\n      [['Caps', 'Caps'], ['\\u10E4', '\\u10E4', '\\u10F6'], ['\\u10EB', '\\u10EB'], ['\\u10D5', '\\u10D5', '\\u10F3'], ['\\u10D7', '\\u10D7'], ['\\u10D0', '\\u10D0'], ['\\u10DE', '\\u10DE'], ['\\u10E0', '\\u10E0'], ['\\u10DD', '\\u10DD'], ['\\u10DA', '\\u10DA'], ['\\u10D3', '\\u10D3'], ['\\u10DF', '\\u10DF'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u10ED', '\\u10ED'], ['\\u10E9', '\\u10E9'], ['\\u10E7', '\\u10E7'], ['\\u10E1', '\\u10E1'], ['\\u10DB', '\\u10DB'], ['\\u10D8', '\\u10D8', '\\u10F2'], ['\\u10E2', '\\u10E2'], ['\\u10E5', '\\u10E5'], ['\\u10D1', '\\u10D1'], ['\\u10F0', '\\u10F0', '\\u10F5'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['ka'] };\r\n\r\n  this.VKI_layout['\\u049a\\u0430\\u0437\\u0430\\u049b\\u0448\\u0430'] = {\r\n    'name': 'Kazakh', 'keys': [\r\n      [['(', ')'], ['\"', '!'], ['\\u04d9', '\\u04d8'], ['\\u0456', '\\u0406'], ['\\u04a3', '\\u04a2'], ['\\u0493', '\\u0492'], [',', ';'], ['.', ':'], ['\\u04af', '\\u04ae'], ['\\u04b1', '\\u04b0'], ['\\u049b', '\\u049a'], ['\\u04e9', '\\u04e8'], ['\\u04bb', '\\u04ba'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0439', '\\u0419'], ['\\u0446', '\\u0426'], ['\\u0443', '\\u0423'], ['\\u043A', '\\u041A'], ['\\u0435', '\\u0415'], ['\\u043D', '\\u041D'], ['\\u0433', '\\u0413'], ['\\u0448', '\\u0428'], ['\\u0449', '\\u0429'], ['\\u0437', '\\u0417'], ['\\u0445', '\\u0425'], ['\\u044A', '\\u042A'], ['\\\\', '/']],\r\n      [['Caps', 'Caps'], ['\\u0444', '\\u0424'], ['\\u044B', '\\u042B'], ['\\u0432', '\\u0412'], ['\\u0430', '\\u0410'], ['\\u043F', '\\u041F'], ['\\u0440', '\\u0420'], ['\\u043E', '\\u041E'], ['\\u043B', '\\u041B'], ['\\u0434', '\\u0414'], ['\\u0436', '\\u0416'], ['\\u044D', '\\u042D'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\\\', '|'], ['\\u044F', '\\u042F'], ['\\u0447', '\\u0427'], ['\\u0441', '\\u0421'], ['\\u043C', '\\u041C'], ['\\u0438', '\\u0418'], ['\\u0442', '\\u0422'], ['\\u044C', '\\u042C'], ['\\u0431', '\\u0411'], ['\\u044E', '\\u042E'], ['\\u2116', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['kk'] };\r\n\r\n  this.VKI_layout['\\u1797\\u17b6\\u179f\\u17b6\\u1781\\u17d2\\u1798\\u17c2\\u179a'] = {\r\n    'name': 'Khmer', 'keys': [\r\n      [['\\u00AB', '\\u00BB','\\u200D'], ['\\u17E1', '!','\\u200C','\\u17F1'], ['\\u17E2', '\\u17D7', '@', '\\u17F2'], ['\\u17E3', '\"', '\\u17D1', '\\u17F3'], ['\\u17E4', '\\u17DB', '$', '\\u17F4'], ['\\u17E5', '%' ,'\\u20AC', '\\u17F5'], ['\\u17E6', '\\u17CD', '\\u17D9', '\\u17F6'], ['\\u17E7', '\\u17D0', '\\u17DA', '\\u17F7'], ['\\u17E8', '\\u17CF', '*', '\\u17F8'], ['\\u17E9', '(', '{', '\\u17F9'], ['\\u17E0', ')', '}', '\\u17F0'], ['\\u17A5', '\\u17CC', 'x'], ['\\u17B2', '=', '\\u17CE'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u1786', '\\u1788', '\\u17DC', '\\u19E0'], ['\\u17B9', '\\u17BA', '\\u17DD', '\\u19E1'], ['\\u17C1', '\\u17C2', '\\u17AF', '\\u19E2'], ['\\u179A', '\\u17AC', '\\u17AB', '\\u19E3'], ['\\u178F', '\\u1791', '\\u17A8', '\\u19E4'], ['\\u1799', '\\u17BD', '\\u1799\\u17BE\\u1784', '\\u19E5'], ['\\u17BB', '\\u17BC', '', '\\u19E6'], ['\\u17B7', '\\u17B8', '\\u17A6', '\\u19E7'], ['\\u17C4', '\\u17C5', '\\u17B1', '\\u19E8'], ['\\u1795', '\\u1797', '\\u17B0', '\\u19E9'], ['\\u17C0', '\\u17BF', '\\u17A9', '\\u19EA'], ['\\u17AA', '\\u17A7', '\\u17B3', '\\u19EB'], ['\\u17AE', '\\u17AD', '\\\\']],\r\n      [['Caps', 'Caps'], ['\\u17B6', '\\u17B6\\u17C6', '\\u17B5', '\\u19EC'], ['\\u179F', '\\u17C3', '', '\\u19ED'], ['\\u178A', '\\u178C', '\\u17D3', '\\u19EE'], ['\\u1790', '\\u1792', '', '\\u19EF'], ['\\u1784', '\\u17A2', '\\u17A4', '\\u19F0'], ['\\u17A0', '\\u17C7', '\\u17A3', '\\u19F1'], ['\\u17D2', '\\u1789', '\\u17B4', '\\u19F2'], ['\\u1780', '\\u1782', '\\u179D', '\\u19F3'], ['\\u179B', '\\u17A1', '\\u17D8', '\\u19F4'], ['\\u17BE', '\\u17C4\\u17C7', '\\u17D6', '\\u19F5'], ['\\u17CB', '\\u17C9', '\\u17C8', '\\u19F6'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u178B', '\\u178D', '|', '\\u19F7'], ['\\u1781', '\\u1783', '\\u1781\\u17D2\\u1789\\u17BB\\u17C6', '\\u19F8'], ['\\u1785', '\\u1787', '-', '\\u19F9'], ['\\u179C', '\\u17C1\\u17C7', '+', '\\u19FA'], ['\\u1794', '\\u1796', '\\u179E', '\\u19FB'], ['\\u1793', '\\u178E', '[', '\\u19FC'], ['\\u1798', '\\u17C6', ']', '\\u19FD'], ['\\u17BB\\u17C6', '\\u17BB\\u17C7', ',', '\\u19FE'], ['\\u17D4', '\\u17D5', '.', '\\u19FF'], ['\\u17CA', '?', '/'], ['Shift', 'Shift']],\r\n      [['\\u200B', ' ', '\\u00A0', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['km'] };\r\n\r\n  this.VKI_layout['\\u0c95\\u0ca8\\u0ccd\\u0ca8\\u0ca1'] = {\r\n    'name': 'Kannada', 'keys': [\r\n      [['\\u0CCA', '\\u0C92'], ['1', '', '\\u0CE7'], ['2', '', '\\u0CE8'], ['3', '\\u0CCD\\u0CB0', '\\u0CE9'], ['4', '\\u0CB0\\u0CCD', '\\u0CEA'], ['5', '\\u0C9C\\u0CCD\\u0C9E', '\\u0CEB'], ['6', '\\u0CA4\\u0CCD\\u0CB0', '\\u0CEC'], ['7', '\\u0C95\\u0CCD\\u0CB7', '\\u0CED'], ['8', '\\u0CB6\\u0CCD\\u0CB0', '\\u0CEE'], ['9', '(', '\\u0CEF'], ['0', ')', '\\u0CE6'], ['-', '\\u0C83'], ['\\u0CC3', '\\u0C8B', '\\u0CC4', '\\u0CE0'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0CCC', '\\u0C94'], ['\\u0CC8', '\\u0C90', '\\u0CD6'], ['\\u0CBE', '\\u0C86'], ['\\u0CC0', '\\u0C88', '', '\\u0CE1'], ['\\u0CC2', '\\u0C8A'], ['\\u0CAC', '\\u0CAD'], ['\\u0CB9', '\\u0C99'], ['\\u0C97', '\\u0C98'], ['\\u0CA6', '\\u0CA7'], ['\\u0C9C', '\\u0C9D'], ['\\u0CA1', '\\u0CA2'], ['Enter', 'Enter']],\r\n      [['Caps', 'Caps'], ['\\u0CCB', '\\u0C93'], ['\\u0CC7', '\\u0C8F', '\\u0CD5'], ['\\u0CCD', '\\u0C85'], ['\\u0CBF', '\\u0C87', '', '\\u0C8C'], ['\\u0CC1', '\\u0C89'], ['\\u0CAA', '\\u0CAB', '', '\\u0CDE'], ['\\u0CB0', '\\u0CB1'], ['\\u0C95', '\\u0C96'], ['\\u0CA4', '\\u0CA5'], ['\\u0C9A', '\\u0C9B'], ['\\u0C9F', '\\u0CA0'], ['', '\\u0C9E']],\r\n      [['Shift', 'Shift'], ['\\u0CC6', '\\u0C8F'], ['\\u0C82'], ['\\u0CAE', '\\u0CA3'], ['\\u0CA8'], ['\\u0CB5'], ['\\u0CB2', '\\u0CB3'], ['\\u0CB8', '\\u0CB6'], [',', '\\u0CB7'], ['.', '|'], ['\\u0CAF'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['kn'] };\r\n\r\n  this.VKI_layout['\\ud55c\\uad6d\\uc5b4'] = {\r\n    'name': 'Korean', 'keys': [\r\n      [['`', '~', '`', '~'], ['1', '!', '1', '!'], ['2', '@', '2', '@'], ['3', '#', '3', '#'], ['4', '$', '4', '$'], ['5', '%', '5', '%'], ['6', '^', '6', '^'], ['7', '&', '7', '&'], ['8', '*', '8', '*'], ['9', ')', '9', ')'], ['0', '(', '0', '('], ['-', '_', '-', '_'], ['=', '+', '=', '+'], ['\\u20A9', '|', '\\u20A9', '|'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u1107', '\\u1108', 'q', 'Q'], ['\\u110C', '\\u110D', 'w', 'W'], ['\\u1103', '\\u1104', 'e', 'E'], ['\\u1100', '\\u1101', 'r', 'R'], ['\\u1109', '\\u110A', 't', 'T'], ['\\u116D', '', 'y', 'Y'], ['\\u1167', '', 'u', 'U'], ['\\u1163', '', 'i', 'I'], ['\\u1162', '\\u1164', 'o', 'O'], ['\\u1166', '\\u1168', 'p', 'P'], ['[', '{', '[', '{'], [']', '}', ']', '}']],\r\n      [['Caps', 'Caps'], ['\\u1106', '', 'a', 'A'], ['\\u1102', '', 's', 'S'], ['\\u110B', '', 'd', 'D'], ['\\u1105', '', 'f', 'F'], ['\\u1112', '', 'g', 'G'], ['\\u1169', '', 'h', 'H'], ['\\u1165', '', 'j', 'J'], ['\\u1161', '', 'k', 'K'], ['\\u1175', '', 'l', 'L'], [';', ':', ';', ':'], ['\\'', '\"', '\\'', '\"'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u110F', '', 'z', 'Z'], ['\\u1110', '', 'x', 'X'], ['\\u110E', '', 'c', 'C'], ['\\u1111', '', 'v', 'V'], ['\\u1172', '', 'b', 'B'], ['\\u116E', '', 'n', 'N'], ['\\u1173', '', 'm', 'M'], [',', '<', ',', '<'], ['.', '>', '.', '>'], ['/', '?', '/', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['Kor', 'Alt']]\r\n    ], 'lang': ['ko'] };\r\n\r\n  this.VKI_layout['Kurd\\u00ee'] = {\r\n    'name': 'Kurdish', 'keys': [\r\n      [['\\u20ac', '~'], ['\\u0661', '!'], ['\\u0662', '@'], ['\\u0663', '#'], ['\\u0664', '$'], ['\\u0665', '%'], ['\\u0666', '^'], ['\\u0667', '&'], ['\\u0668', '*'], ['\\u0669', '('], ['\\u0660', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0642', '`'], ['\\u0648', '\\u0648\\u0648'], ['\\u06d5', '\\u064a'], ['\\u0631', '\\u0695'], ['\\u062a', '\\u0637'], ['\\u06cc', '\\u06ce'], ['\\u0626', '\\u0621'], ['\\u062d', '\\u0639'], ['\\u06c6', '\\u0624'], ['\\u067e', '\\u062b'], ['[', '{'], [']', '}'], ['\\\\', '|']],\r\n      [['Caps', 'Caps'], ['\\u0627', '\\u0622'], ['\\u0633', '\\u0634'], ['\\u062f', '\\u0630'], ['\\u0641', '\\u0625'], ['\\u06af', '\\u063a'], ['\\u0647', '\\u200c'], ['\\u0698', '\\u0623'], ['\\u06a9', '\\u0643'], ['\\u0644', '\\u06b5'], ['\\u061b', ':'], ['\\'', '\"'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0632', '\\u0636'], ['\\u062e', '\\u0635'], ['\\u062c', '\\u0686'], ['\\u06a4', '\\u0638'], ['\\u0628', '\\u0649'], ['\\u0646', '\\u0629'], ['\\u0645', '\\u0640'], ['\\u060c', '<'], ['.', '>'], ['/', '\\u061f'], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['ku'] };\r\n\r\n  this.VKI_layout['\\u041a\\u044b\\u0440\\u0433\\u044b\\u0437\\u0447\\u0430'] = {\r\n    'name': 'Kyrgyz', 'keys': [\r\n      [['\\u0451', '\\u0401'], ['1', '!'], ['2', '\"'], ['3', '\\u2116'], ['4', ';'], ['5', '%'], ['6', ':'], ['7', '?'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0439', '\\u0419'], ['\\u0446', '\\u0426'], ['\\u0443', '\\u0423', '\\u04AF', '\\u04AE'], ['\\u043A', '\\u041A'], ['\\u0435', '\\u0415'], ['\\u043D', '\\u041D', '\\u04A3', '\\u04A2'], ['\\u0433', '\\u0413'], ['\\u0448', '\\u0428'], ['\\u0449', '\\u0429'], ['\\u0437', '\\u0417'], ['\\u0445', '\\u0425'], ['\\u044A', '\\u042A'], ['\\\\', '/']],\r\n      [['Caps', 'Caps'], ['\\u0444', '\\u0424'], ['\\u044B', '\\u042B'], ['\\u0432', '\\u0412'], ['\\u0430', '\\u0410'], ['\\u043F', '\\u041F'], ['\\u0440', '\\u0420'], ['\\u043E', '\\u041E', '\\u04E9', '\\u04E8'], ['\\u043B', '\\u041B'], ['\\u0434', '\\u0414'], ['\\u0436', '\\u0416'], ['\\u044D', '\\u042D'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u044F', '\\u042F'], ['\\u0447', '\\u0427'], ['\\u0441', '\\u0421'], ['\\u043C', '\\u041C'], ['\\u0438', '\\u0418'], ['\\u0442', '\\u0422'], ['\\u044C', '\\u042C'], ['\\u0431', '\\u0411'], ['\\u044E', '\\u042E'], ['.', ','], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['ky'] };\r\n\r\n  this.VKI_layout['Latvie\\u0161u'] = {\r\n    'name': 'Latvian', 'keys': [\r\n      [['\\u00AD', '?'], ['1', '!', '\\u00AB'], ['2', '\\u00AB', '', '@'], ['3', '\\u00BB', '', '#'], ['4', '$', '\\u20AC', '$'], ['5', '%', '\"', '~'], ['6', '/', '\\u2019', '^'], ['7', '&', '', '\\u00B1'], ['8', '\\u00D7', ':'], ['9', '('], ['0', ')'], ['-', '_', '\\u2013', '\\u2014'], ['f', 'F', '=', ';'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u016B', '\\u016A', 'q', 'Q'], ['g', 'G', '\\u0123', '\\u0122'], ['j', 'J'], ['r', 'R', '\\u0157', '\\u0156'], ['m', 'M', 'w', 'W'], ['v', 'V', 'y', 'Y'], ['n', 'N'], ['z', 'Z'], ['\\u0113', '\\u0112'], ['\\u010D', '\\u010C'], ['\\u017E', '\\u017D', '[', '{'], ['h', 'H', ']', '}'], ['\\u0137', '\\u0136']],\r\n      [['Caps', 'Caps'], ['\\u0161', '\\u0160'], ['u', 'U'], ['s', 'S'], ['i', 'I'], ['l', 'L'], ['d', 'D'], ['a', 'A'], ['t', 'T'], ['e', 'E', '\\u20AC'], ['c', 'C'], ['\\u00B4', '\\u00B0', '\\u00B4', '\\u00A8'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0146', '\\u0145'], ['b', 'B', 'x', 'X'], ['\\u012B', '\\u012A'], ['k', 'K', '\\u0137', '\\u0136'], ['p', 'P'], ['o', 'O', '\\u00F5', '\\u00D5'], ['\\u0101', '\\u0100'], [',', ';', '<'], ['.', ':', '>'], ['\\u013C', '\\u013B'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['lv'] };\r\n\r\n  this.VKI_layout['Lietuvi\\u0173'] = {\r\n    'name': 'Lithuanian', 'keys': [\r\n      [['`', '~'], ['\\u0105', '\\u0104'], ['\\u010D', '\\u010C'], ['\\u0119', '\\u0118'], ['\\u0117', '\\u0116'], ['\\u012F', '\\u012E'], ['\\u0161', '\\u0160'], ['\\u0173', '\\u0172'], ['\\u016B', '\\u016A'], ['\\u201E', '('], ['\\u201C', ')'], ['-', '_'], ['\\u017E', '\\u017D'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['[', '{'], [']', '}'], ['\\\\', '|']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], [';', ':'], ['\\'', '\"'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u2013', '\\u20AC'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', '<'], ['.', '>'], ['/', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['lt'] };\r\n\r\n  this.VKI_layout['Magyar'] = {\r\n    'name': 'Hungarian', 'keys': [\r\n      [['0', '\\u00a7'], ['1', '\\'', '~'], ['2', '\"', '\\u02c7'], ['3', '+', '\\u02c6'], ['4', '!', '\\u02d8'], ['5', '%', '\\u00b0'], ['6', '/', '\\u02db'], ['7', '=', '`'], ['8', '(', '\\u02d9'], ['9', ')', '\\u00b4'], ['\\u00f6', '\\u00d6', '\\u02dd'], ['\\u00fc', '\\u00dc', '\\u00a8'], ['\\u00f3', '\\u00d3', '\\u00b8'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q', '\\\\'], ['w', 'W', '|'], ['e', 'E', '\\u00c4'], ['r', 'R'], ['t', 'T'], ['z', 'Z'], ['u', 'U', '\\u20ac'], ['i', 'I', '\\u00cd'], ['o', 'O'], ['p', 'P'], ['\\u0151', '\\u0150', '\\u00f7'], ['\\u00fa', '\\u00da', '\\u00d7'], ['\\u0171', '\\u0170', '\\u00a4']],\r\n      [['Caps', 'Caps'], ['a', 'A', '\\u00e4'], ['s', 'S', '\\u0111'], ['d', 'D', '\\u0110'], ['f', 'F', '['], ['g', 'G', ']'], ['h', 'H'], ['j', 'J', '\\u00ed'], ['k', 'K', '\\u0141'], ['l', 'L', '\\u0142'], ['\\u00e9', '\\u00c9', '$'], ['\\u00e1', '\\u00c1', '\\u00df'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u00ed', '\\u00cd', '<'], ['y', 'Y', '>'], ['x', 'X', '#'], ['c', 'C', '&'], ['v', 'V', '@'], ['b', 'B', '{'], ['n', 'N', '}'], ['m', 'M', '<'], [',', '?', ';'], ['.', ':', '>'], ['-', '_', '*'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['hu'] };\r\n\r\n  this.VKI_layout['Malti'] = {\r\n    'name': 'Maltese 48', 'keys': [\r\n      [['\\u010B', '\\u010A', '`'], ['1', '!'], ['2', '\"'], ['3', '\\u20ac', '\\u00A3'], ['4', '$'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\\u00E8', '\\u00C8'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U', '\\u00F9', '\\u00D9'], ['i', 'I', '\\u00EC', '\\u00cc'], ['o', 'O', '\\u00F2', '\\u00D2'], ['p', 'P'], ['\\u0121', '\\u0120', '[', '{'], ['\\u0127', '\\u0126', ']', '}'], ['#', '\\u017e']],\r\n      [['Caps', 'Caps'], ['a', 'A', '\\u00E0', '\\u00C0'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], [';', ':'], ['\\'', '@'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u017c', '\\u017b', '\\\\', '|'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', '<'], ['.', '>'], ['/', '?', '', '`'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['mt'] };\r\n\r\n  this.VKI_layout['\\u041c\\u0430\\u043a\\u0435\\u0434\\u043e\\u043d\\u0441\\u043a\\u0438'] = {\r\n    'name': 'Macedonian Cyrillic', 'keys': [\r\n      [['`', '~'], ['1', '!'], ['2', '\\u201E'], ['3', '\\u201C'], ['4', '\\u2019'], ['5', '%'], ['6', '\\u2018'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0459', '\\u0409'], ['\\u045A', '\\u040A'], ['\\u0435', '\\u0415', '\\u20AC'], ['\\u0440', '\\u0420'], ['\\u0442', '\\u0422'], ['\\u0455', '\\u0405'], ['\\u0443', '\\u0423'], ['\\u0438', '\\u0418'], ['\\u043E', '\\u041E'], ['\\u043F', '\\u041F'], ['\\u0448', '\\u0428', '\\u0402'], ['\\u0453', '\\u0403', '\\u0452'], ['\\u0436', '\\u0416']],\r\n      [['Caps', 'Caps'], ['\\u0430', '\\u0410'], ['\\u0441', '\\u0421'], ['\\u0434', '\\u0414'], ['\\u0444', '\\u0424', '['], ['\\u0433', '\\u0413', ']'], ['\\u0445', '\\u0425'], ['\\u0458', '\\u0408'], ['\\u043A', '\\u041A'], ['\\u043B', '\\u041B'], ['\\u0447', '\\u0427', '\\u040B'], ['\\u045C', '\\u040C', '\\u045B'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0451', '\\u0401'], ['\\u0437', '\\u0417'], ['\\u045F', '\\u040F'], ['\\u0446', '\\u0426'], ['\\u0432', '\\u0412', '@'], ['\\u0431', '\\u0411', '{'], ['\\u043D', '\\u041D', '}'], ['\\u043C', '\\u041C', '\\u00A7'], [',', ';'], ['.', ':'], ['/', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['mk'] };\r\n\r\n  this.VKI_layout['\\u0d2e\\u0d32\\u0d2f\\u0d3e\\u0d33\\u0d02'] = {\r\n    'name': 'Malayalam', 'keys': [\r\n      [['\\u0D4A', '\\u0D12'], ['1', '', '\\u0D67'], ['2', '', '\\u0D68'], ['3', '\\u0D4D\\u0D30', '\\u0D69'], ['4', '', '\\u0D6A'], ['5', '', '\\u0D6B'], ['6', '', '\\u0D6C'], ['7', '\\u0D15\\u0D4D\\u0D37', '\\u0D6D'], ['8', '', '\\u0D6E'], ['9', '(', '\\u0D6F'], ['0', ')', '\\u0D66'], ['-', '\\u0D03'], ['\\u0D43', '\\u0D0B', '', '\\u0D60'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0D4C', '\\u0D14', '\\u0D57'], ['\\u0D48', '\\u0D10'], ['\\u0D3E', '\\u0D06'], ['\\u0D40', '\\u0D08', '', '\\u0D61'], ['\\u0D42', '\\u0D0A'], ['\\u0D2C', '\\u0D2D'], ['\\u0D39', '\\u0D19'], ['\\u0D17', '\\u0D18'], ['\\u0D26', '\\u0D27'], ['\\u0D1C', '\\u0D1D'], ['\\u0D21', '\\u0D22'], ['', '\\u0D1E']],\r\n      [['Caps', 'Caps'], ['\\u0D4B', '\\u0D13'], ['\\u0D47', '\\u0D0F'], ['\\u0D4D', '\\u0D05', '', '\\u0D0C'], ['\\u0D3F', '\\u0D07'], ['\\u0D41', '\\u0D09'], ['\\u0D2A', '\\u0D2B'], ['\\u0D30', '\\u0D31'], ['\\u0D15', '\\u0D16'], ['\\u0D24', '\\u0D25'], ['\\u0D1A', '\\u0D1B'], ['\\u0D1F', '\\u0D20'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0D46', '\\u0D0F'], ['\\u0D02'], ['\\u0D2E', '\\u0D23'], ['\\u0D28'], ['\\u0D35', '\\u0D34'], ['\\u0D32', '\\u0D33'], ['\\u0D38', '\\u0D36'], [',', '\\u0D37'], ['.'], ['\\u0D2F'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['ml'] };\r\n\r\n  this.VKI_layout['Misc. Symbols'] = {\r\n    'name': 'Misc. Symbols', 'keys': [\r\n      [['\\u2605', '\\u2606', '\\u260e', '\\u260f'], ['\\u2648', '\\u2673', '\\u2659', '\\u2630'], ['\\u2649', '\\u2674', '\\u2658', '\\u2631'], ['\\u264a', '\\u2675', '\\u2657', '\\u2632'], ['\\u264b', '\\u2676', '\\u2656', '\\u2633'], ['\\u264c', '\\u2677', '\\u2655', '\\u2634'], ['\\u264d', '\\u2678', '\\u2654', '\\u2635'], ['\\u264e', '\\u2679', '\\u265f', '\\u2636'], ['\\u264f', '\\u267a', '\\u265e', '\\u2637'], ['\\u2650', '\\u267b', '\\u265d', '\\u2686'], ['\\u2651', '\\u267c', '\\u265c', '\\u2687'], ['\\u2652', '\\u267d', '\\u265b', '\\u2688'], ['\\u2653', '\\u2672', '\\u265a', '\\u2689'], ['Bksp', 'Bksp']],\r\n      [['\\u263f', '\\u2680', '\\u268a', '\\u26a2'], ['\\u2640', '\\u2681', '\\u268b', '\\u26a3'], ['\\u2641', '\\u2682', '\\u268c', '\\u26a4'], ['\\u2642', '\\u2683', '\\u268d', '\\u26a5'], ['\\u2643', '\\u2684', '\\u268e', '\\u26a6'], ['\\u2644', '\\u2685', '\\u268f', '\\u26a7'], ['\\u2645', '\\u2620', '\\u26ff', '\\u26a8'], ['\\u2646', '\\u2622', '\\u2692', '\\u26a9'], ['\\u2647', '\\u2623', '\\u2693', '\\u26b2'], ['\\u2669', '\\u266d', '\\u2694', '\\u26ac'], ['\\u266a', '\\u266e', '\\u2695', '\\u26ad'], ['\\u266b', '\\u266f', '\\u2696', '\\u26ae'], ['\\u266c', '\\u2607', '\\u2697', '\\u26af'], ['\\u26f9', '\\u2608', '\\u2698', '\\u26b0'], ['\\u267f', '\\u262e', '\\u2638', '\\u2609']],\r\n      [['Tab', 'Tab'], ['\\u261e', '\\u261c', '\\u261d', '\\u261f'], ['\\u261b', '\\u261a', '\\u2618', '\\u2619'], ['\\u2602', '\\u2614', '\\u26f1', '\\u26d9'], ['\\u2615', '\\u2668', '\\u26fe', '\\u26d8'], ['\\u263a', '\\u2639', '\\u263b', '\\u26dc'], ['\\u2617', '\\u2616', '\\u26ca', '\\u26c9'], ['\\u2660', '\\u2663', '\\u2665', '\\u2666'], ['\\u2664', '\\u2667', '\\u2661', '\\u2662'], ['\\u26c2', '\\u26c0', '\\u26c3', '\\u26c1'], ['\\u2624', '\\u2625', '\\u269a', '\\u26b1'], ['\\u2610', '\\u2611', '\\u2612', '\\u2613'], ['\\u2628', '\\u2626', '\\u2627', '\\u2629'], ['\\u262a', '\\u262b', '\\u262c', '\\u262d'], ['\\u26fa', '\\u26fb', '\\u26fc', '\\u26fd']],\r\n      [['Caps', 'Caps'], ['\\u262f', '\\u2670', '\\u2671', '\\u267e'], ['\\u263c', '\\u2699', '\\u263d', '\\u263e'], ['\\u26c4', '\\u2603', '\\u26c7', '\\u26c6'], ['\\u26a0', '\\u26a1', '\\u2621', '\\u26d4'], ['\\u26e4', '\\u26e5', '\\u26e6', '\\u26e7'], ['\\u260a', '\\u260b', '\\u260c', '\\u260d'], ['\\u269c', '\\u269b', '\\u269d', '\\u2604'], ['\\u26b3', '\\u26b4', '\\u26b5', '\\u26b6'], ['\\u26b7', '\\u26bf', '\\u26b8', '\\u26f8'], ['\\u26b9', '\\u26ba', '\\u26bb', '\\u26bc'], ['\\u26bd', '\\u26be', '\\u269f', '\\u269e'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u2600', '\\u2601', '\\u26c5', '\\u26c8'], ['\\u2691', '\\u2690', '\\u26ab', '\\u26aa'], ['\\u26cb', '\\u26cc', '\\u26cd', '\\u26ce'], ['\\u26cf', '\\u26d0', '\\u26d1', '\\u26d2'], ['\\u26d3', '\\u26d5', '\\u26d6', '\\u26d7'], ['\\u26da', '\\u26db', '\\u26dd', '\\u26de'], ['\\u26df', '\\u26e0', '\\u26e1', '\\u26e2'], ['\\u26e3', '\\u26e8', '\\u26e9', '\\u26ea'], ['\\u26eb', '\\u26ec', '\\u26ed', '\\u26ee'], ['\\u26ef', '\\u26f0', '\\u26f2', '\\u26f3'], ['\\u26f4', '\\u26f5', '\\u26f6', '\\u26f7'], ['Shift', 'Shift']],\r\n      [['AltLk', 'AltLk'], [' ', ' ', ' ', ' '], ['Alt', 'Alt']]\r\n    ]};\r\n\r\n  this.VKI_layout['\\u041c\\u043e\\u043d\\u0433\\u043e\\u043b'] = {\r\n    'name': 'Mongolian Cyrillic', 'keys': [\r\n      [['=', '+'], ['\\u2116', '1'], ['-', '2'], ['\"', '3'], ['\\u20AE', '4'], [':', '5'], ['.', '6'], ['_', '7'], [',', '8'], ['%', '9'], ['?', '0'], ['\\u0435', '\\u0415'], ['\\u0449', '\\u0429'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0444', '\\u0424'], ['\\u0446', '\\u0426'], ['\\u0443', '\\u0423'], ['\\u0436', '\\u0416'], ['\\u044d', '\\u042d'], ['\\u043D', '\\u041D'], ['\\u0433', '\\u0413'], ['\\u0448', '\\u0428'], ['\\u04af', '\\u04AE'], ['\\u0437', '\\u0417'], ['\\u043A', '\\u041a'], ['\\u044A', '\\u042A'], ['\\\\', '|']],\r\n      [['Caps', 'Caps'], ['\\u0439', '\\u0419'], ['\\u044B', '\\u042B'], ['\\u0431', '\\u0411'], ['\\u04e9', '\\u04e8'], ['\\u0430', '\\u0410'], ['\\u0445', '\\u0425'], ['\\u0440', '\\u0420'], ['\\u043e', '\\u041e'], ['\\u043B', '\\u041b'], ['\\u0434', '\\u0414'], ['\\u043f', '\\u041f'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u044F', '\\u042F'], ['\\u0447', '\\u0427'], ['\\u0451', '\\u0401'], ['\\u0441', '\\u0421'], ['\\u043c', '\\u041c'], ['\\u0438', '\\u0418'], ['\\u0442', '\\u0422'], ['\\u044c', '\\u042c'], ['\\u0432', '\\u0412'], ['\\u044e', '\\u042e'], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['mn'] };\r\n\r\n  this.VKI_layout['\\u092e\\u0930\\u093e\\u0920\\u0940'] = {\r\n    'name': 'Marathi', 'keys': [\r\n      [['', '', '`', '~'], ['\\u0967', '\\u090D', '1', '!'], ['\\u0968', '\\u0945', '2', '@'], ['\\u0969', '\\u094D\\u0930', '3', '#'], ['\\u096A', '\\u0930\\u094D', '4', '$'], ['\\u096B', '\\u091C\\u094D\\u091E', '5', '%'], ['\\u096C', '\\u0924\\u094D\\u0930', '6', '^'], ['\\u096D', '\\u0915\\u094D\\u0937', '7', '&'], ['\\u096E', '\\u0936\\u094D\\u0930', '8', '*'], ['\\u096F', '(', '9', '('], ['\\u0966', ')', '0', ')'], ['-', '\\u0903', '-', '_'], ['\\u0943', '\\u090B', '=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u094C', '\\u0914'], ['\\u0948', '\\u0910'], ['\\u093E', '\\u0906'], ['\\u0940', '\\u0908'], ['\\u0942', '\\u090A'], ['\\u092C', '\\u092D'], ['\\u0939', '\\u0919'], ['\\u0917', '\\u0918'], ['\\u0926', '\\u0927'], ['\\u091C', '\\u091D'], ['\\u0921', '\\u0922', '[', '{'], ['\\u093C', '\\u091E', ']', '}'], ['\\u0949', '\\u0911', '\\\\', '|']],\r\n      [['Caps', 'Caps'], ['\\u094B', '\\u0913'], ['\\u0947', '\\u090F'], ['\\u094D', '\\u0905'], ['\\u093F', '\\u0907'], ['\\u0941', '\\u0909'], ['\\u092A', '\\u092B'], ['\\u0930', '\\u0931'], ['\\u0915', '\\u0916'], ['\\u0924', '\\u0925'], ['\\u091A', '\\u091B', ';', ':'], ['\\u091F', '\\u0920', '\\'', '\"'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], [''], ['\\u0902', '\\u0901', '', '\\u0950'], ['\\u092E', '\\u0923'], ['\\u0928'], ['\\u0935'], ['\\u0932', '\\u0933'], ['\\u0938', '\\u0936'], [',', '\\u0937', ',', '<'], ['.', '\\u0964', '.', '>'], ['\\u092F', '\\u095F', '/', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['mr'] };\r\n\r\n  this.VKI_layout['\\u1019\\u103c\\u1014\\u103a\\u1019\\u102c\\u1018\\u102c\\u101e\\u102c'] = {\r\n    'name': 'Burmese', 'keys': [\r\n      [['\\u1039`', '~'], ['\\u1041', '\\u100D'], ['\\u1042', '\\u100E'], ['\\u1043', '\\u100B'], ['\\u1044', '\\u1000\\u103B\\u1015\\u103A'], ['\\u1045', '%'], ['\\u1046', '/'], ['\\u1047', '\\u101B'], ['\\u1048', '\\u1002'], ['\\u1049', '('], ['\\u1040', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u1006', '\\u1029'], ['\\u1010', '\\u1040'], ['\\u1014', '\\u103F'], ['\\u1019', '\\u1023'], ['\\u1021', '\\u1024'], ['\\u1015', '\\u104C'], ['\\u1000', '\\u1009'], ['\\u1004', '\\u104D'], ['\\u101E', '\\u1025'], ['\\u1005', '\\u100F'], ['\\u101F', '\\u1027'], ['\\u2018', '\\u2019'], ['\\u104F', '\\u100B\\u1039\\u100C']],\r\n      [['Caps', 'Caps'], ['\\u200B\\u1031', '\\u1017'], ['\\u200B\\u103B', '\\u200B\\u103E'], ['\\u200B\\u102D', '\\u200B\\u102E'], ['\\u200B\\u103A', '\\u1004\\u103A\\u1039\\u200B'], ['\\u200B\\u102B', '\\u200B\\u103D'], ['\\u200B\\u1037', '\\u200B\\u1036'], ['\\u200B\\u103C', '\\u200B\\u1032'], ['\\u200B\\u102F', '\\u200B\\u102F'], ['\\u200B\\u1030', '\\u200B\\u1030'], ['\\u200B\\u1038', '\\u200B\\u102B\\u103A'], ['\\u1012', '\\u1013'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u1016', '\\u1007'], ['\\u1011', '\\u100C'], ['\\u1001', '\\u1003'], ['\\u101C', '\\u1020'], ['\\u1018', '\\u1026'], ['\\u100A', '\\u1008'], ['\\u200B\\u102C', '\\u102A'], ['\\u101A', '\\u101B'], ['.', '\\u101B'], ['\\u104B', '\\u104A'], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['my'] };\r\n\r\n  this.VKI_layout['Nederlands'] = {\r\n    'name': 'Dutch', 'keys': [\r\n      [['@', '\\u00a7', '\\u00ac'], ['1', '!', '\\u00b9'], ['2', '\"', '\\u00b2'], ['3', '#', '\\u00b3'], ['4', '$', '\\u00bc'], ['5', '%', '\\u00bd'], ['6', '&', '\\u00be'], ['7', '_', '\\u00a3'], ['8', '(', '{'], ['9', ')', '}'], ['0', '\\''], ['/', '?', '\\\\'], ['\\u00b0', '~', '\\u00b8'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\\u20ac'], ['r', 'R', '\\u00b6'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\\u00a8', '^'], ['*', '|'], ['<', '>']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S', '\\u00df'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['+', '\\u00b1'], ['\\u00b4', '`'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], [']', '[', '\\u00a6'], ['z', 'Z', '\\u00ab'], ['x', 'X', '\\u00bb'], ['c', 'C', '\\u00a2'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M', '\\u00b5'], [',', ';'], ['.', ':', '\\u00b7'], ['-', '='], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['nl'] };\r\n\r\n  this.VKI_layout['Norsk'] = {\r\n    'name': 'Norwegian', 'keys': [\r\n      [['|', '\\u00a7'], ['1', '!'], ['2', '\"', '@'], ['3', '#', '\\u00a3'], ['4', '\\u00a4', '$'], ['5', '%'], ['6', '&'], ['7', '/', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['+', '?'], ['\\\\', '`', '\\u00b4'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\\u20ac'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\\u00e5', '\\u00c5'], ['\\u00a8', '^', '~'], ['\\'', '*']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\\u00f8', '\\u00d8'], ['\\u00e6', '\\u00c6'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M', '\\u03bc', '\\u039c'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['no', 'nb', 'nn'] };\r\n\r\n  this.VKI_layout['\\u067e\\u069a\\u062a\\u0648'] = {\r\n    'name': 'Pashto', 'keys': [\r\n      [['\\u200d', '\\u00f7', '`'], ['\\u06f1', '!', '`'], ['\\u06f2', '\\u066c', '@'], ['\\u06f3', '\\u066b', '\\u066b'], ['\\u06f4', '\\u00a4', '\\u00a3'], ['\\u06f5', '\\u066a', '%'], ['\\u06f6', '\\u00d7', '^'], ['\\u06f7', '\\u00ab', '&'], ['\\u06f8', '\\u00bb', '*'], ['\\u06f9', '(', '\\ufdf2'], ['\\u06f0', ')', '\\ufefb'], ['-', '\\u0640', '_'], ['=', '+', '\\ufe87', '\\u00f7'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0636', '\\u0652', '\\u06d5'], ['\\u0635', '\\u064c', '\\u0653'], ['\\u062b', '\\u064d', '\\u20ac'], ['\\u0642', '\\u064b', '\\ufef7'], ['\\u0641', '\\u064f', '\\ufef5'], ['\\u063a', '\\u0650', '\\''], ['\\u0639', '\\u064e', '\\ufe84'], ['\\u0647', '\\u0651', '\\u0670'], ['\\u062e', '\\u0681', '\\''], ['\\u062d', '\\u0685', '\"'], ['\\u062c', ']', '}'], ['\\u0686', '[', '{'], ['\\\\', '\\u066d', '|']],\r\n      [['Caps', 'Caps'], ['\\u0634', '\\u069a', '\\ufbb0'], ['\\u0633', '\\u06cd', '\\u06d2'], ['\\u06cc', '\\u064a', '\\u06d2'], ['\\u0628', '\\u067e', '\\u06ba'], ['\\u0644', '\\u0623', '\\u06b7'], ['\\u0627', '\\u0622', '\\u0671'], ['\\u062a', '\\u067c', '\\u0679'], ['\\u0646', '\\u06bc', '<'], ['\\u0645', '\\u0629', '>'], ['\\u06a9', ':', '\\u0643'], ['\\u06af', '\\u061b', '\\u06ab'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0638', '\\u0626', '?'], ['\\u0637', '\\u06d0', ';'], ['\\u0632', '\\u0698', '\\u0655'], ['\\u0631', '\\u0621', '\\u0654'], ['\\u0630', '\\u200c', '\\u0625'], ['\\u062f', '\\u0689', '\\u0688'], ['\\u0693', '\\u0624', '\\u0691'], ['\\u0648', '\\u060c', ','], ['\\u0696', '.', '\\u06c7'], ['/', '\\u061f', '\\u06c9'], ['Shift', 'Shift', '\\u064d']],\r\n      [[' ', ' ', ' ', ' '], ['Alt', 'Alt']]\r\n    ], 'lang': ['ps'] };\r\n\r\n  this.VKI_layout['\\u0a2a\\u0a70\\u0a1c\\u0a3e\\u0a2c\\u0a40'] = {\r\n    'name': 'Punjabi (Gurmukhi)', 'keys': [\r\n      [[''], ['1', '\\u0A4D\\u0A35', '\\u0A67', '\\u0A67'], ['2', '\\u0A4D\\u0A2F', '\\u0A68', '\\u0A68'], ['3', '\\u0A4D\\u0A30', '\\u0A69', '\\u0A69'], ['4', '\\u0A71', '\\u0A6A', '\\u0A6A'], ['5', '', '\\u0A6B', '\\u0A6B'], ['6', '', '\\u0A6C', '\\u0A6C'], ['7', '', '\\u0A6D', '\\u0A6D'], ['8', '', '\\u0A6E', '\\u0A6E'], ['9', '(', '\\u0A6F', '\\u0A6F'], ['0', ')', '\\u0A66', '\\u0A66'], ['-'], [''], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0A4C', '\\u0A14'], ['\\u0A48', '\\u0A10'], ['\\u0A3E', '\\u0A06'], ['\\u0A40', '\\u0A08'], ['\\u0A42', '\\u0A0A'], ['\\u0A2C', '\\u0A2D'], ['\\u0A39', '\\u0A19'], ['\\u0A17', '\\u0A18', '\\u0A5A', '\\u0A5A'], ['\\u0A26', '\\u0A27'], ['\\u0A1C', '\\u0A1D', '\\u0A5B', '\\u0A5B'], ['\\u0A21', '\\u0A22', '\\u0A5C', '\\u0A5C'], ['Enter', 'Enter']],\r\n      [['Caps', 'Caps'], ['\\u0A4B', '\\u0A13'], ['\\u0A47', '\\u0A0F'], ['\\u0A4D', '\\u0A05'], ['\\u0A3F', '\\u0A07'], ['\\u0A41', '\\u0A09'], ['\\u0A2A', '\\u0A2B', '\\u0A5E', '\\u0A5E'], ['\\u0A30'], ['\\u0A15', '\\u0A16', '\\u0A59', '\\u0A59'], ['\\u0A24', '\\u0A25'], ['\\u0A1A', '\\u0A1B'], ['\\u0A1F', '\\u0A20'], ['\\u0A3C', '\\u0A1E']],\r\n      [['Shift', 'Shift'], [''], ['\\u0A02', '\\u0A02'], ['\\u0A2E', '\\u0A23'], ['\\u0A28'], ['\\u0A35', '\\u0A72', '\\u0A73', '\\u0A73'], ['\\u0A32', '\\u0A33'], ['\\u0A38', '\\u0A36'], [','], ['.', '|', '\\u0965', '\\u0965'], ['\\u0A2F'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['pa'] };\r\n\r\n  this.VKI_layout['\\u62fc\\u97f3 (Pinyin)'] = {\r\n    'name': 'Pinyin', 'keys': [\r\n      [['`', '~', '\\u4e93', '\\u301C'], ['1', '!', '\\uFF62'], ['2', '@', '\\uFF63'], ['3', '#', '\\u301D'], ['4', '$', '\\u301E'], ['5', '%', '\\u301F'], ['6', '^', '\\u3008'], ['7', '&', '\\u3009'], ['8', '*', '\\u302F'], ['9', '(', '\\u300A'], ['0', ')', '\\u300B'], ['-', '_', '\\u300E'], ['=', '+', '\\u300F'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q', '\\u0101', '\\u0100'], ['w', 'W', '\\u00E1', '\\u00C1'], ['e', 'E', '\\u01CE', '\\u01CD'], ['r', 'R', '\\u00E0', '\\u00C0'], ['t', 'T', '\\u0113', '\\u0112'], ['y', 'Y', '\\u00E9', '\\u00C9'], ['u', 'U', '\\u011B', '\\u011A'], ['i', 'I', '\\u00E8', '\\u00C8'], ['o', 'O', '\\u012B', '\\u012A'], ['p', 'P', '\\u00ED', '\\u00CD'], ['[', '{', '\\u01D0', '\\u01CF'], [']', '}', '\\u00EC', '\\u00CC'], ['\\\\', '|', '\\u3020']],\r\n      [['Caps', 'Caps'], ['a', 'A', '\\u014D', '\\u014C'], ['s', 'S', '\\u00F3', '\\u00D3'], ['d', 'D', '\\u01D2', '\\u01D1'], ['f', 'F', '\\u00F2', '\\u00D2'], ['g', 'G', '\\u00fc', '\\u00dc'], ['h', 'H', '\\u016B', '\\u016A'], ['j', 'J', '\\u00FA', '\\u00DA'], ['k', 'K', '\\u01D4', '\\u01D3'], ['l', 'L', '\\u00F9', '\\u00D9'], [';', ':'], ['\\'', '\"'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['z', 'Z', '\\u01D6', '\\u01D5'], ['x', 'X', '\\u01D8', '\\u01D7'], ['c', 'C', '\\u01DA', '\\u01D9'], ['v', 'V', '\\u01DC', '\\u01DB'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', '<', '\\u3001'], ['.', '>', '\\u3002'], ['/', '?'], ['Shift', 'Shift']],\r\n      [['AltLk', 'AltLk'], [' ', ' ', ' ', ' '], ['Alt', 'Alt']]\r\n    ], 'lang': ['zh-Latn'] };\r\n\r\n  this.VKI_layout['Polski'] = {\r\n    'name': 'Polish (214)', 'keys': [\r\n      [['\\u02DB', '\\u00B7'], ['1', '!', '~'], ['2', '\"', '\\u02C7'], ['3', '#', '^'], ['4', '\\u00A4', '\\u02D8'], ['5', '%', '\\u00B0'], ['6', '&', '\\u02DB'], ['7', '/', '`'], ['8', '(', '\\u00B7'], ['9', ')', '\\u00B4'], ['0', '=', '\\u02DD'], ['+', '?', '\\u00A8'], ['\\'', '*', '\\u00B8'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q', '\\\\'], ['w', 'W', '\\u00A6'], ['e', 'E'], ['r', 'R'], ['t', 'T'], ['z', 'Z'], ['u', 'U', '\\u20AC'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\\u017C', '\\u0144', '\\u00F7'], ['\\u015B', '\\u0107', '\\u00D7'], ['\\u00F3', '\\u017A']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S', '\\u0111'], ['d', 'D', '\\u0110'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\\u0142', '\\u0141', '$'], ['\\u0105', '\\u0119', '\\u00DF'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>'], ['y', 'Y'], ['x', 'X'], ['c', 'C'], ['v', 'V', '@'], ['b', 'B', '{'], ['n', 'N', '}'], ['m', 'M', '\\u00A7'], [',', ';', '<'], ['.', ':', '>'], ['-', '_'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ]};\r\n\r\n  this.VKI_layout['Polski Programisty'] = {\r\n    'name': 'Polish Programmers', 'keys': [\r\n      [['`', '~'], ['1', '!'], ['2', '@'], ['3', '#'], ['4', '$'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\\u0119', '\\u0118'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O', '\\u00f3', '\\u00d3'], ['p', 'P'], ['[', '{'], [']', '}'], ['\\\\', '|']],\r\n      [['Caps', 'Caps'], ['a', 'A', '\\u0105', '\\u0104'], ['s', 'S', '\\u015b', '\\u015a'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L', '\\u0142', '\\u0141'], [';', ':'], ['\\'', '\"'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['z', 'Z', '\\u017c', '\\u017b'], ['x', 'X', '\\u017a', '\\u0179'], ['c', 'C', '\\u0107', '\\u0106'], ['v', 'V'], ['b', 'B'], ['n', 'N', '\\u0144', '\\u0143'], ['m', 'M'], [',', '<'], ['.', '>'], ['/', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['Alt', 'Alt']]\r\n    ], 'lang': ['pl'] };\r\n\r\n  this.VKI_layout['Portugu\\u00eas Brasileiro'] = {\r\n    'name': 'Portuguese (Brazil)', 'keys': [\r\n      [['\\'', '\"'], ['1', '!', '\\u00b9'], ['2', '@', '\\u00b2'], ['3', '#', '\\u00b3'], ['4', '$', '\\u00a3'], ['5', '%', '\\u00a2'], ['6', '\\u00a8', '\\u00ac'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+', '\\u00a7'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q', '/'], ['w', 'W', '?'], ['e', 'E', '\\u20ac'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\\u00b4', '`'], ['[', '{', '\\u00aa'], ['Enter', 'Enter']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\\u00e7', '\\u00c7'], ['~', '^'], [']', '}', '\\u00ba'], ['/', '?']],\r\n      [['Shift', 'Shift'], ['\\\\', '|'], ['z', 'Z'], ['x', 'X'], ['c', 'C', '\\u20a2'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', '<'], ['.', '>'], [':', ':'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['pt-BR'] };\r\n\r\n  this.VKI_layout['Portugu\\u00eas'] = {\r\n    'name': 'Portuguese', 'keys': [\r\n      [['\\\\', '|'], ['1', '!'], ['2', '\"', '@'], ['3', '#', '\\u00a3'], ['4', '$', '\\u00a7'], ['5', '%'], ['6', '&'], ['7', '/', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['\\'', '?'], ['\\u00ab', '\\u00bb'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\\u20ac'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['+', '*', '\\u00a8'], ['\\u00b4', '`'], ['~', '^']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\\u00e7', '\\u00c7'], ['\\u00ba', '\\u00aa'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>', '\\\\'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['pt'] };\r\n\r\n  this.VKI_layout['Rom\\u00e2n\\u0103'] = {\r\n    'name': 'Romanian', 'keys': [\r\n      [['\\u201E', '\\u201D', '`', '~'], ['1', '!', '~'], ['2', '@', '\\u02C7'], ['3', '#', '^'], ['4', '$', '\\u02D8'], ['5', '%', '\\u00B0'], ['6', '^', '\\u02DB'], ['7', '&', '`'], ['8', '*', '\\u02D9'], ['9', '(', '\\u00B4'], ['0', ')', '\\u02DD'], ['-', '_', '\\u00A8'], ['=', '+', '\\u00B8', '\\u00B1'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\\u20AC'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P', '\\u00A7'], ['\\u0103', '\\u0102', '[', '{'], ['\\u00EE', '\\u00CE', ']', '}'], ['\\u00E2', '\\u00C2', '\\\\', '|']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S', '\\u00df'], ['d', 'D', '\\u00f0', '\\u00D0'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L', '\\u0142', '\\u0141'], [(this.VKI_isIElt8) ? '\\u015F' : '\\u0219', (this.VKI_isIElt8) ? '\\u015E' : '\\u0218', ';', ':'], [(this.VKI_isIElt8) ? '\\u0163' : '\\u021B', (this.VKI_isIElt8) ? '\\u0162' : '\\u021A', '\\'', '\"'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\\\', '|'], ['z', 'Z'], ['x', 'X'], ['c', 'C', '\\u00A9'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', ';', '<', '\\u00AB'], ['.', ':', '>', '\\u00BB'], ['/', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['ro'] };\r\n\r\n  this.VKI_layout['\\u0420\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439'] = {\r\n    'name': 'Russian', 'keys': [\r\n      [['\\u0451', '\\u0401'], ['1', '!'], ['2', '\"'], ['3', '\\u2116'], ['4', ';'], ['5', '%'], ['6', ':'], ['7', '?'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0439', '\\u0419'], ['\\u0446', '\\u0426'], ['\\u0443', '\\u0423'], ['\\u043A', '\\u041A'], ['\\u0435', '\\u0415'], ['\\u043D', '\\u041D'], ['\\u0433', '\\u0413'], ['\\u0448', '\\u0428'], ['\\u0449', '\\u0429'], ['\\u0437', '\\u0417'], ['\\u0445', '\\u0425'], ['\\u044A', '\\u042A'], ['\\\\', '/']],\r\n      [['Caps', 'Caps'], ['\\u0444', '\\u0424'], ['\\u044B', '\\u042B'], ['\\u0432', '\\u0412'], ['\\u0430', '\\u0410'], ['\\u043F', '\\u041F'], ['\\u0440', '\\u0420'], ['\\u043E', '\\u041E'], ['\\u043B', '\\u041B'], ['\\u0434', '\\u0414'], ['\\u0436', '\\u0416'], ['\\u044D', '\\u042D'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['/', '|'], ['\\u044F', '\\u042F'], ['\\u0447', '\\u0427'], ['\\u0441', '\\u0421'], ['\\u043C', '\\u041C'], ['\\u0438', '\\u0418'], ['\\u0442', '\\u0422'], ['\\u044C', '\\u042C'], ['\\u0431', '\\u0411'], ['\\u044E', '\\u042E'], ['.', ','], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['ru'] };\r\n\r\n  this.VKI_layout['Schweizerdeutsch'] = {\r\n    'name': 'Swiss German', 'keys': [\r\n      [['\\u00A7', '\\u00B0'], ['1', '+', '\\u00A6'], ['2', '\"', '@'], ['3', '*', '#'], ['4', '\\u00E7', '\\u00B0'], ['5', '%', '\\u00A7'], ['6', '&', '\\u00AC'], ['7', '/', '|'], ['8', '(', '\\u00A2'], ['9', ')'], ['0', '='], ['\\'', '?', '\\u00B4'], ['^', '`', '~'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\\u20AC'], ['r', 'R'], ['t', 'T'], ['z', 'Z'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\\u00FC', '\\u00E8', '['], ['\\u00A8', '!', ']'], ['$', '\\u00A3', '}']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\\u00F6', '\\u00E9'], ['\\u00E4', '\\u00E0', '{'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>', '\\\\'], ['y', 'Y'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['de-CH'] };\r\n\r\n  this.VKI_layout['Shqip'] = {\r\n    'name': 'Albanian', 'keys': [\r\n      [['\\\\', '|'], ['1', '!', '~'], ['2', '\"', '\\u02C7'], ['3', '#', '^'], ['4', '$', '\\u02D8'], ['5', '%', '\\u00B0'], ['6', '^', '\\u02DB'], ['7', '&', '`'], ['8', '*', '\\u02D9'], ['9', '(', '\\u00B4'], ['0', ')', '\\u02DD'], ['-', '_', '\\u00A8'], ['=', '+', '\\u00B8'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q', '\\\\'], ['w', 'W', '|'], ['e', 'E'], ['r', 'R'], ['t', 'T'], ['z', 'Z'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\\u00E7', '\\u00C7', '\\u00F7'], ['[', '{', '\\u00DF'], [']', '}', '\\u00A4']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S', '\\u0111'], ['d', 'D', '\\u0110'], ['f', 'F', '['], ['g', 'G', ']'], ['h', 'H'], ['j', 'J'], ['k', 'K', '\\u0142'], ['l', 'L', '\\u0141'], ['\\u00EB', '\\u00CB', '$'], ['@', '\\'', '\\u00D7'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>'], ['y', 'Y'], ['x', 'X'], ['c', 'C'], ['v', 'V', '@'], ['b', 'B', '{'], ['n', 'N', '}'], ['m', 'M', '\\u00A7'], [',', ';', '<'], ['.', ':', '>'], ['/', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['sq'] };\r\n\r\n  this.VKI_layout['Sloven\\u010dina'] = {\r\n    'name': 'Slovak', 'keys': [\r\n      [[';', '\\u00b0'], ['+', '1', '~'], ['\\u013E', '2', '\\u02C7'], ['\\u0161', '3', '^'], ['\\u010D', '4', '\\u02D8'], ['\\u0165', '5', '\\u00B0'], ['\\u017E', '6', '\\u02DB'], ['\\u00FD', '7', '`'], ['\\u00E1', '8', '\\u02D9'], ['\\u00ED', '9', '\\u00B4'], ['\\u00E9', '0', '\\u02DD'], ['=', '%', '\\u00A8'], ['\\u00B4', '\\u02c7', '\\u00B8'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q', '\\\\'], ['w', 'W', '|'], ['e', 'E', '\\u20AC'], ['r', 'R'], ['t', 'T'], ['z', 'Z'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P', '\\''], ['\\u00FA', '/', '\\u00F7'], ['\\u00E4', '(', '\\u00D7'], ['\\u0148', ')', '\\u00A4']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S', '\\u0111'], ['d', 'D', '\\u0110'], ['f', 'F', '['], ['g', 'G', ']'], ['h', 'H'], ['j', 'J'], ['k', 'K', '\\u0142'], ['l', 'L', '\\u0141'], ['\\u00F4', '\"', '$'], ['\\u00A7', '!', '\\u00DF'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['&', '*', '<'], ['y', 'Y', '>'], ['x', 'X', '#'], ['c', 'C', '&'], ['v', 'V', '@'], ['b', 'B', '{'], ['n', 'N', '}'], ['m', 'M'], [',', '?', '<'], ['.', ':', '>'], ['-', '_', '*', ], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['sk'] };\r\n\r\n  this.VKI_layout['Sloven\\u0161\\u010dina'] = {\r\n    'name': 'Slovenian', 'keys': this.VKI_layout['Bosanski'].keys.slice(0), 'lang': ['sl']\r\n  };\r\n\r\n  this.VKI_layout['\\u0441\\u0440\\u043f\\u0441\\u043a\\u0438'] = {\r\n    'name': 'Serbian Cyrillic', 'keys': [\r\n      [['`', '~'], ['1', '!'], ['2', '\"'], ['3', '#'], ['4', '$'], ['5', '%'], ['6', '&'], ['7', '/'], ['8', '('], ['9', ')'], ['0', '='], ['\\'', '?'], ['+', '*'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0459', '\\u0409'], ['\\u045a', '\\u040a'], ['\\u0435', '\\u0415', '\\u20ac'], ['\\u0440', '\\u0420'], ['\\u0442', '\\u0422'], ['\\u0437', '\\u0417'], ['\\u0443', '\\u0423'], ['\\u0438', '\\u0418'], ['\\u043e', '\\u041e'], ['\\u043f', '\\u041f'], ['\\u0448', '\\u0428'], ['\\u0452', '\\u0402'], ['\\u0436', '\\u0416']],\r\n      [['Caps', 'Caps'], ['\\u0430', '\\u0410'], ['\\u0441', '\\u0421'], ['\\u0434', '\\u0414'], ['\\u0444', '\\u0424'], ['\\u0433', '\\u0413'], ['\\u0445', '\\u0425'], ['\\u0458', '\\u0408'], ['\\u043a', '\\u041a'], ['\\u043b', '\\u041b'], ['\\u0447', '\\u0427'], ['\\u045b', '\\u040b'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>'], ['\\u0455', '\\u0405'], ['\\u045f', '\\u040f'], ['\\u0446', '\\u0426'], ['\\u0432', '\\u0412'], ['\\u0431', '\\u0411'], ['\\u043d', '\\u041d'], ['\\u043c', '\\u041c'], [',', ';', '<'], ['.', ':', '>'], ['-', '_', '\\u00a9'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['sr-Cyrl'] };\r\n\r\n  this.VKI_layout['Srpski'] = {\r\n    'name': 'Serbian Latin', 'keys': this.VKI_layout['Bosanski'].keys.slice(0), 'lang': ['sr']\r\n  };\r\n\r\n  this.VKI_layout['Suomi'] = {\r\n    'name': 'Finnish', 'keys': [\r\n      [['\\u00a7', '\\u00BD'], ['1', '!'], ['2', '\"', '@'], ['3', '#', '\\u00A3'], ['4', '\\u00A4', '$'], ['5', '%', '\\u20AC'], ['6', '&'], ['7', '/', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['+', '?', '\\\\'], ['\\u00B4', '`'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q', '\\u00E2', '\\u00C2'], ['w', 'W'], ['e', 'E', '\\u20AC'], ['r', 'R'], ['t', 'T', '\\u0167', '\\u0166'], ['y', 'Y'], ['u', 'U'], ['i', 'I', '\\u00ef', '\\u00CF'], ['o', 'O', '\\u00f5', '\\u00D5'], ['p', 'P'], ['\\u00E5', '\\u00C5'], ['\\u00A8', '^', '~'], ['\\'', '*']],\r\n      [['Caps', 'Caps'], ['a', 'A', '\\u00E1', '\\u00C1'], ['s', 'S', '\\u0161', '\\u0160'], ['d', 'D', '\\u0111', '\\u0110'], ['f', 'F', '\\u01e5', '\\u01E4'], ['g', 'G', '\\u01E7', '\\u01E6'], ['h', 'H', '\\u021F', '\\u021e'], ['j', 'J'], ['k', 'K', '\\u01e9', '\\u01E8'], ['l', 'L'], ['\\u00F6', '\\u00D6', '\\u00F8', '\\u00D8'], ['\\u00E4', '\\u00C4', '\\u00E6', '\\u00C6'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>', '|'], ['z', 'Z', '\\u017E', '\\u017D'], ['x', 'X'], ['c', 'C', '\\u010d', '\\u010C'], ['v', 'V', '\\u01EF', '\\u01EE'], ['b', 'B', '\\u0292', '\\u01B7'], ['n', 'N', '\\u014B', '\\u014A'], ['m', 'M', '\\u00B5'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],\r\n      [['Alt', 'Alt'], [' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['fi'] };\r\n\r\n  this.VKI_layout['Svenska'] = {\r\n    'name': 'Swedish', 'keys': [\r\n      [['\\u00a7', '\\u00bd'], ['1', '!'], ['2', '\"', '@'], ['3', '#', '\\u00a3'], ['4', '\\u00a4', '$'], ['5', '%', '\\u20ac'], ['6', '&'], ['7', '/', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['+', '?', '\\\\'], ['\\u00b4', '`'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\\u20ac'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\\u00e5', '\\u00c5'], ['\\u00a8', '^', '~'], ['\\'', '*']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\\u00f6', '\\u00d6'], ['\\u00e4', '\\u00c4'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>', '|'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M', '\\u03bc', '\\u039c'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['sv'] };\r\n\r\n  this.VKI_layout['Swiss Fran\\u00e7ais'] = {\r\n    'name': 'Swiss French', 'keys': [\r\n      [['\\u00A7', '\\u00B0'], ['1', '+', '\\u00A6'], ['2', '\"', '@'], ['3', '*', '#'], ['4', '\\u00E7', '\\u00B0'], ['5', '%', '\\u00A7'], ['6', '&', '\\u00AC'], ['7', '/', '|'], ['8', '(', '\\u00A2'], ['9', ')'], ['0', '='], ['\\'', '?', '\\u00B4'], ['^', '`', '~'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\\u20AC'], ['r', 'R'], ['t', 'T'], ['z', 'Z'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\\u00E8', '\\u00FC', '['], ['\\u00A8', '!', ']'], ['$', '\\u00A3', '}']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\\u00E9', '\\u00F6'], ['\\u00E0', '\\u00E4', '{'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>', '\\\\'], ['y', 'Y'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['fr-CH'] };\r\n\r\n  this.VKI_layout['\\u0723\\u0718\\u072a\\u071d\\u071d\\u0710'] = {\r\n    'name': 'Syriac', 'keys': [\r\n      [['\\u070f', '\\u032e', '\\u0651', '\\u0651'], ['1', '!', '\\u0701', '\\u0701'], ['2', '\\u030a', '\\u0702', '\\u0702'], ['3', '\\u0325', '\\u0703', '\\u0703'], ['4', '\\u0749', '\\u0704', '\\u0704'], ['5', '\\u2670', '\\u0705', '\\u0705'], ['6', '\\u2671', '\\u0708', '\\u0708'], ['7', '\\u070a', '\\u0709', '\\u0709'], ['8', '\\u00bb', '\\u070B', '\\u070B'], ['9', ')', '\\u070C', '\\u070C'], ['0', '(', '\\u070D', '\\u070D'], ['-', '\\u00ab', '\\u250C', '\\u250C'], ['=', '+', '\\u2510', '\\u2510'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0714', '\\u0730', '\\u064E', '\\u064E'], ['\\u0728', '\\u0733', '\\u064B', '\\u064B'], ['\\u0716', '\\u0736', '\\u064F', '\\u064F'], ['\\u0729', '\\u073A', '\\u064C', '\\u064C'], ['\\u0726', '\\u073D', '\\u0653', '\\u0653'], ['\\u071c', '\\u0740', '\\u0654', '\\u0654'], ['\\u0725', '\\u0741', '\\u0747', '\\u0747'], ['\\u0717', '\\u0308', '\\u0743', '\\u0743'], ['\\u071e', '\\u0304', '\\u0745', '\\u0745'], ['\\u071a', '\\u0307', '\\u032D', '\\u032D'], ['\\u0713', '\\u0303'], ['\\u0715', '\\u074A'], ['\\u0706', ':']],\r\n      [['Caps', 'Caps'], ['\\u072b', '\\u0731', '\\u0650', '\\u0650'], ['\\u0723', '\\u0734', '\\u064d', '\\u064d'], ['\\u071d', '\\u0737'], ['\\u0712', '\\u073b', '\\u0621', '\\u0621'], ['\\u0720', '\\u073e', '\\u0655', '\\u0655'], ['\\u0710', '\\u0711', '\\u0670', '\\u0670'], ['\\u072c', '\\u0640', '\\u0748', '\\u0748'], ['\\u0722', '\\u0324', '\\u0744', '\\u0744'], ['\\u0721', '\\u0331', '\\u0746', '\\u0746'], ['\\u071f', '\\u0323'], ['\\u071b', '\\u0330'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], [']', '\\u0732'], ['[', '\\u0735', '\\u0652', '\\u0652'], ['\\u0724', '\\u0738'], ['\\u072a', '\\u073c', '\\u200D'], ['\\u0727', '\\u073f', '\\u200C'], ['\\u0700', '\\u0739', '\\u200E'], ['.', '\\u0742', '\\u200F'], ['\\u0718', '\\u060c'], ['\\u0719', '\\u061b'], ['\\u0707', '\\u061F'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['syc'] };\r\n\r\n  this.VKI_layout['\\u0ba4\\u0bae\\u0bbf\\u0bb4\\u0bcd'] = {\r\n    'name': 'Tamil', 'keys': [\r\n      [['\\u0BCA', '\\u0B92'], ['1', '', '\\u0BE7'], ['2', '', '\\u0BE8'], ['3', '', '\\u0BE9'], ['4', '', '\\u0BEA'], ['5', '', '\\u0BEB'], ['6', '\\u0BA4\\u0BCD\\u0BB0', '\\u0BEC'], ['7', '\\u0B95\\u0BCD\\u0BB7', '\\u0BED'], ['8', '\\u0BB7\\u0BCD\\u0BB0', '\\u0BEE'], ['9', '', '\\u0BEF'], ['0', '', '\\u0BF0'], ['-', '\\u0B83', '\\u0BF1'], ['', '', '\\u0BF2'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0BCC', '\\u0B94'], ['\\u0BC8', '\\u0B90'], ['\\u0BBE', '\\u0B86'], ['\\u0BC0', '\\u0B88'], ['\\u0BC2', '\\u0B8A'], ['\\u0BAA', '\\u0BAA'], ['\\u0BB9', '\\u0B99'], ['\\u0B95', '\\u0B95'], ['\\u0BA4', '\\u0BA4'], ['\\u0B9C', '\\u0B9A'], ['\\u0B9F', '\\u0B9F'], ['\\u0B9E']],\r\n      [['Caps', 'Caps'], ['\\u0BCB', '\\u0B93'], ['\\u0BC7', '\\u0B8F'], ['\\u0BCD', '\\u0B85'], ['\\u0BBF', '\\u0B87'], ['\\u0BC1', '\\u0B89'], ['\\u0BAA', '\\u0BAA'], ['\\u0BB0', '\\u0BB1'], ['\\u0B95', '\\u0B95'], ['\\u0BA4', '\\u0BA4'], ['\\u0B9A', '\\u0B9A'], ['\\u0B9F', '\\u0B9F'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0BC6', '\\u0B8E'], [''], ['\\u0BAE', '\\u0BA3'], ['\\u0BA8', '\\u0BA9'], ['\\u0BB5', '\\u0BB4'], ['\\u0BB2', '\\u0BB3'], ['\\u0BB8', '\\u0BB7'], [',', '\\u0BB7'], ['.', '\\u0BB8\\u0BCD\\u0BB0\\u0BC0'], ['\\u0BAF', '\\u0BAF'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['ta'] };\r\n\r\n  this.VKI_layout['\\u0c24\\u0c46\\u0c32\\u0c41\\u0c17\\u0c41'] = {\r\n    'name': 'Telugu', 'keys': [\r\n      [['\\u0C4A', '\\u0C12'], ['1', '', '\\u0C67'], ['2', '', '\\u0C68'], ['3', '\\u0C4D\\u0C30', '\\u0C69'], ['4', '', '\\u0C6A'], ['5', '\\u0C1C\\u0C4D\\u0C1E', '\\u0C6B'], ['6', '\\u0C24\\u0C4D\\u0C30', '\\u0C6C'], ['7', '\\u0C15\\u0C4D\\u0C37', '\\u0C6D'], ['8', '\\u0C36\\u0C4D\\u0C30', '\\u0C6E'], ['9', '(', '\\u0C6F'], ['0', ')', '\\u0C66'], ['-', '\\u0C03'], ['\\u0C43', '\\u0C0B', '\\u0C44'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0C4C', '\\u0C14'], ['\\u0C48', '\\u0C10', '\\u0C56'], ['\\u0C3E', '\\u0C06'], ['\\u0C40', '\\u0C08', '', '\\u0C61'], ['\\u0C42', '\\u0C0A'], ['\\u0C2C'], ['\\u0C39', '\\u0C19'], ['\\u0C17', '\\u0C18'], ['\\u0C26', '\\u0C27'], ['\\u0C1C', '\\u0C1D'], ['\\u0C21', '\\u0C22'], ['', '\\u0C1E']],\r\n      [['Caps', 'Caps'], ['\\u0C4B', '\\u0C13'], ['\\u0C47', '\\u0C0F', '\\u0C55'], ['\\u0C4D', '\\u0C05'], ['\\u0C3F', '\\u0C07', '', '\\u0C0C'], ['\\u0C41', '\\u0C09'], ['\\u0C2A', '\\u0C2B'], ['\\u0C30', '\\u0C31'], ['\\u0C15', '\\u0C16'], ['\\u0C24', '\\u0C25'], ['\\u0C1A', '\\u0C1B'], ['\\u0C1F', '\\u0C25'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0C46', '\\u0C0E'], ['\\u0C02', '\\u0C01'], ['\\u0C2E', '\\u0C23'], ['\\u0C28', '\\u0C28'], ['\\u0C35'], ['\\u0C32', '\\u0C33'], ['\\u0C38', '\\u0C36'], [',', '\\u0C37'], ['.'], ['\\u0C2F'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['te'] };\r\n\r\n  this.VKI_layout['Ti\\u1ebfng Vi\\u1ec7t'] = {\r\n    'name': 'Vietnamese', 'keys': [\r\n      [['`', '~', '`', '~'], ['\\u0103', '\\u0102', '1', '!'], ['\\u00E2', '\\u00C2', '2', '@'], ['\\u00EA', '\\u00CA', '3', '#'], ['\\u00F4', '\\u00D4', '4', '$'], ['\\u0300', '\\u0300', '5', '%'], ['\\u0309', '\\u0309', '6', '^'], ['\\u0303', '\\u0303', '7', '&'], ['\\u0301', '\\u0301', '8', '*'], ['\\u0323', '\\u0323', '9', '('], ['\\u0111', '\\u0110', '0', ')'], ['-', '_', '-', '_'], ['\\u20AB', '+', '=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q', 'q', 'Q'], ['w', 'W', 'w', 'W'], ['e', 'E', 'e', 'E'], ['r', 'R', 'r', 'R'], ['t', 'T', 't', 'T'], ['y', 'Y', 'y', 'Y'], ['u', 'U', 'u', 'U'], ['i', 'I', 'i', 'I'], ['o', 'O', 'o', 'O'], ['p', 'P', 'p', 'P'], ['\\u01B0', '\\u01AF', '[', '{'], ['\\u01A1', '\\u01A0', ']', '}'], ['\\\\', '|', '\\\\', '|']],\r\n      [['Caps', 'Caps'], ['a', 'A', 'a', 'A'], ['s', 'S', 's', 'S'], ['d', 'D', 'd', 'D'], ['f', 'F', 'f', 'F'], ['g', 'G', 'g', 'G'], ['h', 'H', 'h', 'H'], ['j', 'J', 'j', 'J'], ['k', 'K', 'k', 'K'], ['l', 'L', 'l', 'L'], [';', ':', ';', ':'], ['\\'', '\"', '\\'', '\"'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['z', 'Z', 'z', 'Z'], ['x', 'X', 'x', 'X'], ['c', 'C', 'c', 'C'], ['v', 'V', 'v', 'V'], ['b', 'B', 'b', 'B'], ['n', 'N', 'n', 'N'], ['m', 'M', 'm', 'M'], [',', '<', ',', '<'], ['.', '>', '.', '>'], ['/', '?', '/', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['vi'] };\r\n\r\n  this.VKI_layout['\\u0e44\\u0e17\\u0e22 Kedmanee'] = {\r\n    'name': 'Thai Kedmanee', 'keys': [\r\n      [['_', '%'], ['\\u0E45', '+'], ['/', '\\u0E51'], ['-', '\\u0E52'], ['\\u0E20', '\\u0E53'], ['\\u0E16', '\\u0E54'], ['\\u0E38', '\\u0E39'], ['\\u0E36', '\\u0E3F'], ['\\u0E04', '\\u0E55'], ['\\u0E15', '\\u0E56'], ['\\u0E08', '\\u0E57'], ['\\u0E02', '\\u0E58'], ['\\u0E0A', '\\u0E59'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0E46', '\\u0E50'], ['\\u0E44', '\"'], ['\\u0E33', '\\u0E0E'], ['\\u0E1E', '\\u0E11'], ['\\u0E30', '\\u0E18'], ['\\u0E31', '\\u0E4D'], ['\\u0E35', '\\u0E4A'], ['\\u0E23', '\\u0E13'], ['\\u0E19', '\\u0E2F'], ['\\u0E22', '\\u0E0D'], ['\\u0E1A', '\\u0E10'], ['\\u0E25', ','], ['\\u0E03', '\\u0E05']],\r\n      [['Caps', 'Caps'], ['\\u0E1F', '\\u0E24'], ['\\u0E2B', '\\u0E06'], ['\\u0E01', '\\u0E0F'], ['\\u0E14', '\\u0E42'], ['\\u0E40', '\\u0E0C'], ['\\u0E49', '\\u0E47'], ['\\u0E48', '\\u0E4B'], ['\\u0E32', '\\u0E29'], ['\\u0E2A', '\\u0E28'], ['\\u0E27', '\\u0E0B'], ['\\u0E07', '.'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0E1C', '('], ['\\u0E1B', ')'], ['\\u0E41', '\\u0E09'], ['\\u0E2D', '\\u0E2E'], ['\\u0E34', '\\u0E3A'], ['\\u0E37', '\\u0E4C'], ['\\u0E17', '?'], ['\\u0E21', '\\u0E12'], ['\\u0E43', '\\u0E2C'], ['\\u0E1D', '\\u0E26'], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['th'] };\r\n\r\n  this.VKI_layout['\\u0e44\\u0e17\\u0e22 Pattachote'] = {\r\n    'name': 'Thai Pattachote', 'keys': [\r\n      [['_', '\\u0E3F'], ['=', '+'], ['\\u0E52', '\"'], ['\\u0E53', '/'], ['\\u0E54', ','], ['\\u0E55', '?'], ['\\u0E39', '\\u0E38'], ['\\u0E57', '_'], ['\\u0E58', '.'], ['\\u0E59', '('], ['\\u0E50', ')'], ['\\u0E51', '-'], ['\\u0E56', '%'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0E47', '\\u0E4A'], ['\\u0E15', '\\u0E24'], ['\\u0E22', '\\u0E46'], ['\\u0E2D', '\\u0E0D'], ['\\u0E23', '\\u0E29'], ['\\u0E48', '\\u0E36'], ['\\u0E14', '\\u0E1D'], ['\\u0E21', '\\u0E0B'], ['\\u0E27', '\\u0E16'], ['\\u0E41', '\\u0E12'], ['\\u0E43', '\\u0E2F'], ['\\u0E0C', '\\u0E26'], ['\\uF8C7', '\\u0E4D']],\r\n      [['Caps', 'Caps'], ['\\u0E49', '\\u0E4B'], ['\\u0E17', '\\u0E18'], ['\\u0E07', '\\u0E33'], ['\\u0E01', '\\u0E13'], ['\\u0E31', '\\u0E4C'], ['\\u0E35', '\\u0E37'], ['\\u0E32', '\\u0E1C'], ['\\u0E19', '\\u0E0A'], ['\\u0E40', '\\u0E42'], ['\\u0E44', '\\u0E06'], ['\\u0E02', '\\u0E11'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0E1A', '\\u0E0E'], ['\\u0E1B', '\\u0E0F'], ['\\u0E25', '\\u0E10'], ['\\u0E2B', '\\u0E20'], ['\\u0E34', '\\u0E31'], ['\\u0E04', '\\u0E28'], ['\\u0E2A', '\\u0E2E'], ['\\u0E30', '\\u0E1F'], ['\\u0E08', '\\u0E09'], ['\\u0E1E', '\\u0E2C'], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ]};\r\n\r\n  this.VKI_layout['\\u0422\\u0430\\u0442\\u0430\\u0440\\u0447\\u0430'] = {\r\n    'name': 'Tatar', 'keys': [\r\n      [['\\u04BB', '\\u04BA', '\\u0451', '\\u0401'], ['1', '!'], ['2', '\"', '@'], ['3', '\\u2116', '#'], ['4', ';', '$'], ['5', '%'], ['6', ':'], ['7', '?', '['], ['8', '*', ']'], ['9', '(', '{'], ['0', ')', '}'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0439', '\\u0419'], ['\\u04E9', '\\u04E8', '\\u0446', '\\u0426'], ['\\u0443', '\\u0423'], ['\\u043A', '\\u041A'], ['\\u0435', '\\u0415'], ['\\u043D', '\\u041D'], ['\\u0433', '\\u0413'], ['\\u0448', '\\u0428'], ['\\u04D9', '\\u04D8', '\\u0449', '\\u0429'], ['\\u0437', '\\u0417'], ['\\u0445', '\\u0425'], ['\\u04AF', '\\u04AE', '\\u044A', '\\u042A'], ['\\\\', '/']],\r\n      [['Caps', 'Caps'], ['\\u0444', '\\u0424'], ['\\u044B', '\\u042B'], ['\\u0432', '\\u0412'], ['\\u0430', '\\u0410'], ['\\u043F', '\\u041F'], ['\\u0440', '\\u0420'], ['\\u043E', '\\u041E'], ['\\u043B', '\\u041B'], ['\\u0434', '\\u0414'], ['\\u04A3', '\\u04A2', '\\u0436', '\\u0416'], ['\\u044D', '\\u042D', '\\''], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0491', '\\u0490'], ['\\u044F', '\\u042F'], ['\\u0447', '\\u0427'], ['\\u0441', '\\u0421'], ['\\u043C', '\\u041C'], ['\\u0438', '\\u0418'], ['\\u0442', '\\u0422'], ['\\u0497', '\\u0496', '\\u044C', '\\u042C'], ['\\u0431', '\\u0411', '<'], ['\\u044E', '\\u042E', '>'], ['.', ','], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['tt'] };\r\n\r\n  this.VKI_layout['T\\u00fcrk\\u00e7e F'] = {\r\n    'name': 'Turkish F', 'keys': [\r\n      [['+', '*', '\\u00ac'], ['1', '!', '\\u00b9', '\\u00a1'], ['2', '\"', '\\u00b2'], ['3', '^', '#', '\\u00b3'], ['4', '$', '\\u00bc', '\\u00a4'], ['5', '%', '\\u00bd'], ['6', '&', '\\u00be'], ['7', '\\'', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['/', '?', '\\\\', '\\u00bf'], ['-', '_', '|'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['f', 'F', '@'], ['g', 'G'], ['\\u011f', '\\u011e'], ['\\u0131', 'I', '\\u00b6', '\\u00ae'], ['o', 'O'], ['d', 'D', '\\u00a5'], ['r', 'R'], ['n', 'N'], ['h', 'H', '\\u00f8', '\\u00d8'], ['p', 'P', '\\u00a3'], ['q', 'Q', '\\u00a8'], ['w', 'W', '~'], ['x', 'X', '`']],\r\n      [['Caps', 'Caps'], ['u', 'U', '\\u00e6', '\\u00c6'], ['i', '\\u0130', '\\u00df', '\\u00a7'], ['e', 'E', '\\u20ac'], ['a', 'A', ' ', '\\u00aa'], ['\\u00fc', '\\u00dc'], ['t', 'T'], ['k', 'K'], ['m', 'M'], ['l', 'L'], ['y', 'Y', '\\u00b4'], ['\\u015f', '\\u015e'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>', '|', '\\u00a6'], ['j', 'J', '\\u00ab', '<'], ['\\u00f6', '\\u00d6', '\\u00bb', '>'], ['v', 'V', '\\u00a2', '\\u00a9'], ['c', 'C'], ['\\u00e7', '\\u00c7'], ['z', 'Z'], ['s', 'S', '\\u00b5', '\\u00ba'], ['b', 'B', '\\u00d7'], ['.', ':', '\\u00f7'], [',', ';', '-'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '],  ['AltGr', 'AltGr']]\r\n    ]};\r\n\r\n  this.VKI_layout['T\\u00fcrk\\u00e7e Q'] = {\r\n    'name': 'Turkish Q', 'keys': [\r\n      [['\"', '\\u00e9', '<'], ['1', '!', '>'], ['2', '\\'', '\\u00a3'], ['3', '^', '#'], ['4', '+', '$'], ['5', '%', '\\u00bd'], ['6', '&'], ['7', '/', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['*', '?', '\\\\'], ['-', '_', '|'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q', '@'], ['w', 'W'], ['e', 'E', '\\u20ac'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['\\u0131', 'I', 'i', '\\u0130'], ['o', 'O'], ['p', 'P'], ['\\u011f', '\\u011e', '\\u00a8'], ['\\u00fc', '\\u00dc', '~'], [',', ';', '`']],\r\n      [['Caps', 'Caps'], ['a', 'A', '\\u00e6', '\\u00c6'], ['s', 'S', '\\u00df'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\\u015f', '\\u015e', '\\u00b4'], ['i', '\\u0130'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['<', '>', '|'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], ['\\u00f6', '\\u00d6'], ['\\u00e7', '\\u00c7'], ['.', ':'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '],  ['AltGr', 'AltGr']]\r\n    ], 'lang': ['tr'] };\r\n\r\n  this.VKI_layout['\\u0423\\u043a\\u0440\\u0430\\u0457\\u043d\\u0441\\u044c\\u043a\\u0430'] = {\r\n    'name': 'Ukrainian', 'keys': [\r\n      [['\\u00b4', '~'], ['1', '!'], ['2', '\"'], ['3', '\\u2116'], ['4', ';'], ['5', '%'], ['6', ':'], ['7', '?'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0439', '\\u0419'], ['\\u0446', '\\u0426'], ['\\u0443', '\\u0423'], ['\\u043A', '\\u041A'], ['\\u0435', '\\u0415'], ['\\u043D', '\\u041D'], ['\\u0433', '\\u0413'], ['\\u0448', '\\u0428'], ['\\u0449', '\\u0429'], ['\\u0437', '\\u0417'], ['\\u0445', '\\u0425'], ['\\u0457', '\\u0407'], ['\\u0491', '\\u0490']],\r\n      [['Caps', 'Caps'], ['\\u0444', '\\u0424'], ['\\u0456', '\\u0406'], ['\\u0432', '\\u0412'], ['\\u0430', '\\u0410'], ['\\u043F', '\\u041F'], ['\\u0440', '\\u0420'], ['\\u043E', '\\u041E'], ['\\u043B', '\\u041B'], ['\\u0434', '\\u0414'], ['\\u0436', '\\u0416'], ['\\u0454', '\\u0404'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u044F', '\\u042F'], ['\\u0447', '\\u0427'], ['\\u0441', '\\u0421'], ['\\u043C', '\\u041C'], ['\\u0438', '\\u0418'], ['\\u0442', '\\u0422'], ['\\u044C', '\\u042C'], ['\\u0431', '\\u0411'], ['\\u044E', '\\u042E'], ['.', ','], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['uk'] };\r\n\r\n  this.VKI_layout['United Kingdom'] = {\r\n    'name': 'United Kingdom', 'keys': [\r\n      [['`', '\\u00ac', '\\u00a6'], ['1', '!'], ['2', '\"'], ['3', '\\u00a3'], ['4', '$', '\\u20ac'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\\u00e9', '\\u00c9'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U', '\\u00fa', '\\u00da'], ['i', 'I', '\\u00ed', '\\u00cd'], ['o', 'O', '\\u00f3', '\\u00d3'], ['p', 'P'], ['[', '{'], [']', '}'], ['#', '~']],\r\n      [['Caps', 'Caps'], ['a', 'A', '\\u00e1', '\\u00c1'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], [';', ':'], ['\\'', '@'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\\\', '|'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', '<'], ['.', '>'], ['/', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]\r\n    ], 'lang': ['en-gb'] };\r\n\r\n  this.VKI_layout['\\u0627\\u0631\\u062f\\u0648'] = {\r\n    'name': 'Urdu', 'keys': [\r\n      [['`', '~'], ['1', '!'], ['2', '@'], ['3', '#'], ['4', '$'], ['5', '\\u066A'], ['6', '^'], ['7', '\\u06D6'], ['8', '\\u066D'], ['9', ')'], ['0', '('], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0637', '\\u0638'], ['\\u0635', '\\u0636'], ['\\u06be', '\\u0630'], ['\\u062f', '\\u0688'], ['\\u0679', '\\u062B'], ['\\u067e', '\\u0651'], ['\\u062a', '\\u06C3'], ['\\u0628', '\\u0640'], ['\\u062c', '\\u0686'], ['\\u062d', '\\u062E'], [']', '}'], ['[', '{'], ['\\\\', '|']],\r\n      [['Caps', 'Caps'], ['\\u0645', '\\u0698'], ['\\u0648', '\\u0632'], ['\\u0631', '\\u0691'], ['\\u0646', '\\u06BA'], ['\\u0644', '\\u06C2'], ['\\u06c1', '\\u0621'], ['\\u0627', '\\u0622'], ['\\u06A9', '\\u06AF'], ['\\u06CC', '\\u064A'], ['\\u061b', ':'], ['\\'', '\"'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0642', '\\u200D'], ['\\u0641', '\\u200C'], ['\\u06D2', '\\u06D3'], ['\\u0633', '\\u200E'], ['\\u0634', '\\u0624'], ['\\u063a', '\\u0626'], ['\\u0639', '\\u200F'], ['\\u060C', '>'], ['\\u06D4', '<'], ['/', '\\u061F'], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['ur'] };\r\n\r\n  this.VKI_layout['\\u0627\\u0631\\u062f\\u0648 Phonetic'] = {\r\n    'name': 'Urdu Phonetic', 'keys': [\r\n      [['\\u064D', '\\u064B', '~'], ['\\u06F1', '1', '!'], ['\\u06F2', '2', '@'], ['\\u06F3', '3', '#'], ['\\u06F4', '4', '$'], ['\\u06F5', '5', '\\u066A'], ['\\u06F6', '6', '^'], ['\\u06F7', '7', '&'], ['\\u06F8', '8', '*'], ['\\u06F9', '9', '('], ['\\u06F0', '0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0642', '\\u0652'], ['\\u0648', '\\u0651', '\\u0602'], ['\\u0639', '\\u0670', '\\u0656'], ['\\u0631', '\\u0691', '\\u0613'], ['\\u062A', '\\u0679', '\\u0614'], ['\\u06D2', '\\u064E', '\\u0601'], ['\\u0621', '\\u0626', '\\u0654'], ['\\u06CC', '\\u0650', '\\u0611'], ['\\u06C1', '\\u06C3'], ['\\u067E', '\\u064F', '\\u0657'], ['[', '{'], [']', '}'], ['\\\\', '|']],\r\n      [['Caps', 'Caps'], ['\\u0627', '\\u0622', '\\uFDF2'], ['\\u0633', '\\u0635', '\\u0610'], ['\\u062F', '\\u0688', '\\uFDFA'], ['\\u0641'], ['\\u06AF', '\\u063A'], ['\\u062D', '\\u06BE', '\\u0612'], ['\\u062C', '\\u0636', '\\uFDFB'], ['\\u06A9', '\\u062E'], ['\\u0644'], ['\\u061B', ':'], ['\\'', '\"'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u0632', '\\u0630', '\\u060F'], ['\\u0634', '\\u0698', '\\u060E'], ['\\u0686', '\\u062B', '\\u0603'], ['\\u0637', '\\u0638'], ['\\u0628', '', '\\uFDFD'], ['\\u0646', '\\u06BA', '\\u0600'], ['\\u0645', '\\u0658'], ['\\u060C', '', '<'], ['\\u06D4', '\\u066B', '>'], ['/', '\\u061F'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['Alt', 'Alt']]\r\n    ]};\r\n\r\n  this.VKI_layout['US Standard'] = {\r\n    'name': 'US Standard', 'keys': [\r\n      [['`', '~'], ['1', '!'], ['2', '@'], ['3', '#'], ['4', '$'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['[', '{'], [']', '}'], ['\\\\', '|']],\r\n      [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], [';', ':'], ['\\'', '\"'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', '<'], ['.', '>'], ['/', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['en-us'] };\r\n\r\n   this.VKI_layout['US International'] = {\r\n    'name': 'US International', 'keys': [\r\n      [['`', '~'], ['1', '!', '\\u00a1', '\\u00b9'], ['2', '@', '\\u00b2'], ['3', '#', '\\u00b3'], ['4', '$', '\\u00a4', '\\u00a3'], ['5', '%', '\\u20ac'], ['6', '^', '\\u00bc'], ['7', '&', '\\u00bd'], ['8', '*', '\\u00be'], ['9', '(', '\\u2018'], ['0', ')', '\\u2019'], ['-', '_', '\\u00a5'], ['=', '+', '\\u00d7', '\\u00f7'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['q', 'Q', '\\u00e4', '\\u00c4'], ['w', 'W', '\\u00e5', '\\u00c5'], ['e', 'E', '\\u00e9', '\\u00c9'], ['r', 'R', '\\u00ae'], ['t', 'T', '\\u00fe', '\\u00de'], ['y', 'Y', '\\u00fc', '\\u00dc'], ['u', 'U', '\\u00fa', '\\u00da'], ['i', 'I', '\\u00ed', '\\u00cd'], ['o', 'O', '\\u00f3', '\\u00d3'], ['p', 'P', '\\u00f6', '\\u00d6'], ['[', '{', '\\u00ab'], [']', '}', '\\u00bb'], ['\\\\', '|', '\\u00ac', '\\u00a6']],\r\n      [['Caps', 'Caps'], ['a', 'A', '\\u00e1', '\\u00c1'], ['s', 'S', '\\u00df', '\\u00a7'], ['d', 'D', '\\u00f0', '\\u00d0'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L', '\\u00f8', '\\u00d8'], [';', ':', '\\u00b6', '\\u00b0'], ['\\'', '\"', '\\u00b4', '\\u00a8'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['z', 'Z', '\\u00e6', '\\u00c6'], ['x', 'X'], ['c', 'C', '\\u00a9', '\\u00a2'], ['v', 'V'], ['b', 'B'], ['n', 'N', '\\u00f1', '\\u00d1'], ['m', 'M', '\\u00b5'], [',', '<', '\\u00e7', '\\u00c7'], ['.', '>'], ['/', '?', '\\u00bf'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['Alt', 'Alt']]\r\n    ], 'lang': ['en'] };\r\n\r\n  this.VKI_layout['\\u040e\\u0437\\u0431\\u0435\\u043a\\u0447\\u0430'] = {\r\n    'name': 'Uzbek Cyrillic', 'keys': [\r\n      [['\\u0451', '\\u0401'], ['1', '!'], ['2', '\"'], ['3', '\\u2116'], ['4', ';'], ['5', '%'], ['6', ':'], ['7', '?'], ['8', '*'], ['9', '('], ['0', ')'], ['\\u0493', '\\u0492'], ['\\u04B3', '\\u04B2'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u0439', '\\u0419'], ['\\u0446', '\\u0426'], ['\\u0443', '\\u0423'], ['\\u043A', '\\u041A'], ['\\u0435', '\\u0415'], ['\\u043D', '\\u041D'], ['\\u0433', '\\u0413'], ['\\u0448', '\\u0428'], ['\\u045E', '\\u040E'], ['\\u0437', '\\u0417'], ['\\u0445', '\\u0425'], ['\\u044A', '\\u042A'], ['\\\\', '/']],\r\n      [['Caps', 'Caps'], ['\\u0444', '\\u0424'], ['\\u049B', '\\u049A'], ['\\u0432', '\\u0412'], ['\\u0430', '\\u0410'], ['\\u043F', '\\u041F'], ['\\u0440', '\\u0420'], ['\\u043E', '\\u041E'], ['\\u043B', '\\u041B'], ['\\u0434', '\\u0414'], ['\\u0436', '\\u0416'], ['\\u044D', '\\u042D'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u044F', '\\u042F'], ['\\u0447', '\\u0427'], ['\\u0441', '\\u0421'], ['\\u043C', '\\u041C'], ['\\u0438', '\\u0418'], ['\\u0442', '\\u0422'], ['\\u044C', '\\u042C'], ['\\u0431', '\\u0411'], ['\\u044E', '\\u042E'], ['.', ','], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['uz'] };\r\n\r\n  this.VKI_layout['\\u05d9\\u05d9\\u05b4\\u05d3\\u05d9\\u05e9'] = { // from https://www.yv.org/uyip/hebyidkbd.txt https://uyip.org/keyboards.html\r\n    'name': 'Yiddish', 'keys': [\r\n      [[';', '~', '\\u05B0'], ['1', '!', '\\u05B1'], ['2', '@', '\\u05B2'], ['3', '#', '\\u05B3'], ['4', '$', '\\u05B4'], ['5', '%', '\\u05B5'], ['6', '^', '\\u05B6'], ['7', '*', '\\u05B7'], ['8', '&', '\\u05B8'], ['9', '(', '\\u05C2'], ['0', ')', '\\u05C1'], ['-', '_', '\\u05B9'], ['=', '+', '\\u05BC'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['/', '\\u201F', '\\u201F'], ['\\'', '\\u201E', '\\u201E'], ['\\u05E7', '`', '`'], ['\\u05E8', '\\uFB2F', '\\uFB2F'], ['\\u05D0', '\\uFB2E', '\\uFB2E'], ['\\u05D8', '\\u05F0', '\\u05F0'], ['\\u05D5', '\\uFB35', '\\uFB35'], ['\\u05DF', '\\uFB4B', '\\uFB4B'], ['\\u05DD', '\\uFB4E', '\\uFB4E'], ['\\u05E4', '\\uFB44', '\\uFB44'], ['[', '{', '\\u05BD'], [']', '}', '\\u05BF'], ['\\\\', '|', '\\u05BB']],\r\n      [['Caps', 'Caps'], ['\\u05E9', '\\uFB2A', '\\uFB2A'], ['\\u05D3', '\\uFB2B', '\\uFB2B'], ['\\u05D2'], ['\\u05DB', '\\uFB3B', '\\uFB3B'], ['\\u05E2', '\\u05F1', '\\u05F1'], ['\\u05D9', '\\uFB1D', '\\uFB1D'], ['\\u05D7', '\\uFF1F', '\\uFF1F'], ['\\u05DC', '\\u05F2', '\\u05F2'], ['\\u05DA'], ['\\u05E3', ':', '\\u05C3'], [',', '\"', '\\u05C0'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u05D6', '\\u2260', '\\u2260'], ['\\u05E1', '\\uFB4C', '\\uFB4C'], ['\\u05D1', '\\uFB31', '\\uFB31'], ['\\u05D4', '\\u05BE', '\\u05BE'], ['\\u05E0', '\\u2013', '\\u2013'], ['\\u05DE', '\\u2014', '\\u2014'], ['\\u05E6', '\\uFB4A', '\\uFB4A'], ['\\u05EA', '<', '\\u05F3'], ['\\u05E5', '>', '\\u05F4'], ['.', '?', '\\u20AA'], ['Shift', 'Shift']],\r\n      [[' ', ' '], ['Alt', 'Alt']]\r\n    ], 'lang': ['yi'] };\r\n\r\n  this.VKI_layout['\\u05d9\\u05d9\\u05b4\\u05d3\\u05d9\\u05e9 \\u05dc\\u05e2\\u05d1\\u05d8'] = { // from https://jidysz.net/ \r\n    'name': 'Yiddish (Yidish Lebt)', 'keys': [\r\n      [[';', '~'], ['1', '!', '\\u05B2', '\\u05B2'], ['2', '@', '\\u05B3', '\\u05B3'], ['3', '#', '\\u05B1', '\\u05B1'], ['4', '$', '\\u05B4', '\\u05B4'], ['5', '%', '\\u05B5', '\\u05B5'], ['6', '^', '\\u05B7', '\\u05B7'], ['7', '&', '\\u05B8', '\\u05B8'], ['8', '*', '\\u05BB', '\\u05BB'], ['9', ')', '\\u05B6', '\\u05B6'], ['0', '(', '\\u05B0', '\\u05B0'], ['-', '_', '\\u05BF', '\\u05BF'], ['=', '+', '\\u05B9', '\\u05B9'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['/', '', '\\u05F4', '\\u05F4'], ['\\'', '', '\\u05F3', '\\u05F3'], ['\\u05E7', '', '\\u20AC'], ['\\u05E8'], ['\\u05D0', '', '\\u05D0\\u05B7', '\\uFB2E'], ['\\u05D8', '', '\\u05D0\\u05B8', '\\uFB2F'], ['\\u05D5', '\\u05D5\\u05B9', '\\u05D5\\u05BC', '\\uFB35'], ['\\u05DF', '', '\\u05D5\\u05D5', '\\u05F0'], ['\\u05DD', '', '\\u05BC'], ['\\u05E4', '', '\\u05E4\\u05BC', '\\uFB44'], [']', '}', '\\u201E', '\\u201D'], ['[', '{', '\\u201A', '\\u2019'], ['\\\\', '|', '\\u05BE', '\\u05BE']],\r\n      [['Caps', 'Caps'], ['\\u05E9', '\\u05E9\\u05C1', '\\u05E9\\u05C2', '\\uFB2B'], ['\\u05D3', '', '\\u20AA'], ['\\u05D2', '\\u201E'], ['\\u05DB', '', '\\u05DB\\u05BC', '\\uFB3B'], ['\\u05E2', '', '', '\\uFB20'], ['\\u05D9', '', '\\u05D9\\u05B4', '\\uFB1D'], ['\\u05D7', '', '\\u05F2\\u05B7', '\\uFB1F'], ['\\u05DC', '\\u05DC\\u05B9', '\\u05D5\\u05D9', '\\u05F1'], ['\\u05DA', '', '', '\\u05F2'], ['\\u05E3', ':', '\\u05E4\\u05BF', '\\uFB4E'], [',', '\"', ';', '\\u05B2'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u05D6', '', '\\u2013', '\\u2013'], ['\\u05E1', '', '\\u2014', '\\u2014'], ['\\u05D1', '\\u05DC\\u05B9', '\\u05D1\\u05BF', '\\uFB4C'], ['\\u05D4', '', '\\u201D', '\\u201C'], ['\\u05E0', '', '\\u059C', '\\u059E'], ['\\u05DE', '', '\\u2019', '\\u2018'], ['\\u05E6', '', '\\u05E9\\u05C1', '\\uFB2A'], ['\\u05EA', '>', '\\u05EA\\u05BC', '\\uFB4A'], ['\\u05E5', '<'], ['.', '?', '\\u2026'], ['Shift', 'Shift']],\r\n      [[' ', ' ', ' ', ' '], ['Alt', 'Alt']]\r\n    ], 'lang': ['yi'] };\r\n\r\n  this.VKI_layout['\\u4e2d\\u6587\\u6ce8\\u97f3\\u7b26\\u53f7'] = {\r\n    'name': 'Chinese Bopomofo IME', 'keys': [\r\n      [['\\u20AC', '~'], ['\\u3105', '!'], ['\\u3109', '@'], ['\\u02C7', '#'], ['\\u02CB', '$'], ['\\u3113', '%'], ['\\u02CA', '^'], ['\\u02D9', '&'], ['\\u311A', '*'], ['\\u311E', ')'], ['\\u3122', '('], ['\\u3126', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u3106', 'q'], ['\\u310A', 'w'], ['\\u310D', 'e'], ['\\u3110', 'r'], ['\\u3114', 't'], ['\\u3117', 'y'], ['\\u3127', 'u'], ['\\u311B', 'i'], ['\\u311F', 'o'], ['\\u3123', 'p'], ['[', '{'], [']', '}'], ['\\\\', '|']],\r\n      [['Caps', 'Caps'], ['\\u3107', 'a'], ['\\u310B', 's'], ['\\u310E', 'd'], ['\\u3111', 'f'], ['\\u3115', 'g'], ['\\u3118', 'h'], ['\\u3128', 'j'], ['\\u311C', 'k'], ['\\u3120', 'l'], ['\\u3124', ':'], ['\\'', '\"'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\u3108', 'z'], ['\\u310C', 'x'], ['\\u310F', 'c'], ['\\u3112', 'v'], ['\\u3116', 'b'], ['\\u3119', 'n'], ['\\u3129', 'm'], ['\\u311D', '<'], ['\\u3121', '>'], ['\\u3125', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['zh-Bopo'] };\r\n\r\n  this.VKI_layout['\\u4e2d\\u6587\\u4ed3\\u9889\\u8f93\\u5165\\u6cd5'] = {\r\n    'name': 'Chinese Cangjie IME', 'keys': [\r\n      [['\\u20AC', '~'], ['1', '!'], ['2', '@'], ['3', '#'], ['4', '$'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', ')'], ['0', '('], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],\r\n      [['Tab', 'Tab'], ['\\u624B', 'q'], ['\\u7530', 'w'], ['\\u6C34', 'e'], ['\\u53E3', 'r'], ['\\u5EFF', 't'], ['\\u535C', 'y'], ['\\u5C71', 'u'], ['\\u6208', 'i'], ['\\u4EBA', 'o'], ['\\u5FC3', 'p'], ['[', '{'], [']', '}'], ['\\\\', '|']],\r\n      [['Caps', 'Caps'], ['\\u65E5', 'a'], ['\\u5C38', 's'], ['\\u6728', 'd'], ['\\u706B', 'f'], ['\\u571F', 'g'], ['\\u7AF9', 'h'], ['\\u5341', 'j'], ['\\u5927', 'k'], ['\\u4E2D', 'l'], [';', ':'], ['\\'', '\"'], ['Enter', 'Enter']],\r\n      [['Shift', 'Shift'], ['\\uFF3A', 'z'], ['\\u96E3', 'x'], ['\\u91D1', 'c'], ['\\u5973', 'v'], ['\\u6708', 'b'], ['\\u5F13', 'n'], ['\\u4E00', 'm'], [',', '<'], ['.', '>'], ['/', '?'], ['Shift', 'Shift']],\r\n      [[' ', ' ']]\r\n    ], 'lang': ['zh'] };\r\n\r\n\r\n  /* ***** Define Dead Keys ************************************** */\r\n  this.VKI_deadkey = {};\r\n\r\n  // - Lay out each dead key set as an object of property/value\r\n  //   pairs. The rows below are wrapped so uppercase letters are\r\n  //   below their lowercase equivalents.\r\n  //\r\n  // - The property name is the letter pressed after the diacritic.\r\n  //   The property value is the letter this key-combo will generate.\r\n  //\r\n  // - Note that if you have created a new keyboard layout and want\r\n  //   it included in the distributed script, PLEASE TELL ME if you\r\n  //   have added additional dead keys to the ones below.\r\n\r\n  this.VKI_deadkey['\"'] = this.VKI_deadkey['\\u00a8'] = this.VKI_deadkey['\\u309B'] = { // Umlaut / Diaeresis / Greek Dialytika / Hiragana/Katakana Voiced Sound Mark\r\n    'a': '\\u00e4', 'e': '\\u00eb', 'i': '\\u00ef', 'o': '\\u00f6', 'u': '\\u00fc', 'y': '\\u00ff', '\\u03b9': '\\u03ca', '\\u03c5': '\\u03cb', '\\u016B': '\\u01D6', '\\u00FA': '\\u01D8', '\\u01D4': '\\u01DA', '\\u00F9': '\\u01DC',\r\n    'A': '\\u00c4', 'E': '\\u00cb', 'I': '\\u00cf', 'O': '\\u00d6', 'U': '\\u00dc', 'Y': '\\u0178', '\\u0399': '\\u03aa', '\\u03a5': '\\u03ab', '\\u016A': '\\u01D5', '\\u00DA': '\\u01D7', '\\u01D3': '\\u01D9', '\\u00D9': '\\u01DB',\r\n    '\\u304b': '\\u304c', '\\u304d': '\\u304e', '\\u304f': '\\u3050', '\\u3051': '\\u3052', '\\u3053': '\\u3054', '\\u305f': '\\u3060', '\\u3061': '\\u3062', '\\u3064': '\\u3065', '\\u3066': '\\u3067', '\\u3068': '\\u3069',\r\n    '\\u3055': '\\u3056', '\\u3057': '\\u3058', '\\u3059': '\\u305a', '\\u305b': '\\u305c', '\\u305d': '\\u305e', '\\u306f': '\\u3070', '\\u3072': '\\u3073', '\\u3075': '\\u3076', '\\u3078': '\\u3079', '\\u307b': '\\u307c',\r\n    '\\u30ab': '\\u30ac', '\\u30ad': '\\u30ae', '\\u30af': '\\u30b0', '\\u30b1': '\\u30b2', '\\u30b3': '\\u30b4', '\\u30bf': '\\u30c0', '\\u30c1': '\\u30c2', '\\u30c4': '\\u30c5', '\\u30c6': '\\u30c7', '\\u30c8': '\\u30c9',\r\n    '\\u30b5': '\\u30b6', '\\u30b7': '\\u30b8', '\\u30b9': '\\u30ba', '\\u30bb': '\\u30bc', '\\u30bd': '\\u30be', '\\u30cf': '\\u30d0', '\\u30d2': '\\u30d3', '\\u30d5': '\\u30d6', '\\u30d8': '\\u30d9', '\\u30db': '\\u30dc'\r\n  };\r\n  this.VKI_deadkey['~'] = { // Tilde / Stroke\r\n    'a': '\\u00e3', 'l': '\\u0142', 'n': '\\u00f1', 'o': '\\u00f5',\r\n    'A': '\\u00c3', 'L': '\\u0141', 'N': '\\u00d1', 'O': '\\u00d5'\r\n  };\r\n  this.VKI_deadkey['^'] = { // Circumflex\r\n    'a': '\\u00e2', 'e': '\\u00ea', 'i': '\\u00ee', 'o': '\\u00f4', 'u': '\\u00fb', 'w': '\\u0175', 'y': '\\u0177',\r\n    'A': '\\u00c2', 'E': '\\u00ca', 'I': '\\u00ce', 'O': '\\u00d4', 'U': '\\u00db', 'W': '\\u0174', 'Y': '\\u0176'\r\n  };\r\n  this.VKI_deadkey['\\u02c7'] = { // Baltic caron\r\n    'c': '\\u010D', 'd': '\\u010f', 'e': '\\u011b', 's': '\\u0161', 'l': '\\u013e', 'n': '\\u0148', 'r': '\\u0159', 't': '\\u0165', 'u': '\\u01d4', 'z': '\\u017E', '\\u00fc': '\\u01da',\r\n    'C': '\\u010C', 'D': '\\u010e', 'E': '\\u011a', 'S': '\\u0160', 'L': '\\u013d', 'N': '\\u0147', 'R': '\\u0158', 'T': '\\u0164', 'U': '\\u01d3', 'Z': '\\u017D', '\\u00dc': '\\u01d9'\r\n  };\r\n  this.VKI_deadkey['\\u02d8'] = { // Romanian and Turkish breve\r\n    'a': '\\u0103', 'g': '\\u011f',\r\n    'A': '\\u0102', 'G': '\\u011e'\r\n  };\r\n  this.VKI_deadkey['-'] = this.VKI_deadkey['\\u00af'] = { // Macron\r\n    'a': '\\u0101', 'e': '\\u0113', 'i': '\\u012b', 'o': '\\u014d', 'u': '\\u016B', 'y': '\\u0233', '\\u00fc': '\\u01d6',\r\n    'A': '\\u0100', 'E': '\\u0112', 'I': '\\u012a', 'O': '\\u014c', 'U': '\\u016A', 'Y': '\\u0232', '\\u00dc': '\\u01d5'\r\n  };\r\n  this.VKI_deadkey['`'] = { // Grave\r\n    'a': '\\u00e0', 'e': '\\u00e8', 'i': '\\u00ec', 'o': '\\u00f2', 'u': '\\u00f9', '\\u00fc': '\\u01dc',\r\n    'A': '\\u00c0', 'E': '\\u00c8', 'I': '\\u00cc', 'O': '\\u00d2', 'U': '\\u00d9', '\\u00dc': '\\u01db'\r\n  };\r\n  this.VKI_deadkey['\\''] = this.VKI_deadkey['\\u00b4'] = this.VKI_deadkey['\\u0384'] = { // Acute / Greek Tonos\r\n    'a': '\\u00e1', 'e': '\\u00e9', 'i': '\\u00ed', 'o': '\\u00f3', 'u': '\\u00fa', 'y': '\\u00fd', '\\u03b1': '\\u03ac', '\\u03b5': '\\u03ad', '\\u03b7': '\\u03ae', '\\u03b9': '\\u03af', '\\u03bf': '\\u03cc', '\\u03c5': '\\u03cd', '\\u03c9': '\\u03ce', '\\u00fc': '\\u01d8',\r\n    'A': '\\u00c1', 'E': '\\u00c9', 'I': '\\u00cd', 'O': '\\u00d3', 'U': '\\u00da', 'Y': '\\u00dd', '\\u0391': '\\u0386', '\\u0395': '\\u0388', '\\u0397': '\\u0389', '\\u0399': '\\u038a', '\\u039f': '\\u038c', '\\u03a5': '\\u038e', '\\u03a9': '\\u038f', '\\u00dc': '\\u01d7'\r\n  };\r\n  this.VKI_deadkey['\\u02dd'] = { // Hungarian Double Acute Accent\r\n    'o': '\\u0151', 'u': '\\u0171',\r\n    'O': '\\u0150', 'U': '\\u0170'\r\n  };\r\n  this.VKI_deadkey['\\u0385'] = { // Greek Dialytika + Tonos\r\n    '\\u03b9': '\\u0390', '\\u03c5': '\\u03b0'\r\n  };\r\n  this.VKI_deadkey['\\u00b0'] = this.VKI_deadkey['\\u00ba'] = { // Ring\r\n    'a': '\\u00e5', 'u': '\\u016f',\r\n    'A': '\\u00c5', 'U': '\\u016e'\r\n  };\r\n  this.VKI_deadkey['\\u02DB'] = { // Ogonek\r\n    'a': '\\u0106', 'e': '\\u0119', 'i': '\\u012f', 'o': '\\u01eb', 'u': '\\u0173', 'y': '\\u0177',\r\n    'A': '\\u0105', 'E': '\\u0118', 'I': '\\u012e', 'O': '\\u01ea', 'U': '\\u0172', 'Y': '\\u0176'\r\n  };\r\n  this.VKI_deadkey['\\u02D9'] = { // Dot-above\r\n    'c': '\\u010B', 'e': '\\u0117', 'g': '\\u0121', 'z': '\\u017C',\r\n    'C': '\\u010A', 'E': '\\u0116', 'G': '\\u0120', 'Z': '\\u017B'\r\n  };\r\n  this.VKI_deadkey['\\u00B8'] = this.VKI_deadkey['\\u201a'] = { // Cedilla\r\n    'c': '\\u00e7', 's': '\\u015F',\r\n    'C': '\\u00c7', 'S': '\\u015E'\r\n  };\r\n  this.VKI_deadkey[','] = { // Comma\r\n    's': (this.VKI_isIElt8) ? '\\u015F' : '\\u0219', 't': (this.VKI_isIElt8) ? '\\u0163' : '\\u021B',\r\n    'S': (this.VKI_isIElt8) ? '\\u015E' : '\\u0218', 'T': (this.VKI_isIElt8) ? '\\u0162' : '\\u021A'\r\n  };\r\n  this.VKI_deadkey['\\u3002'] = { // Hiragana/Katakana Point\r\n    '\\u306f': '\\u3071', '\\u3072': '\\u3074', '\\u3075': '\\u3077', '\\u3078': '\\u307a', '\\u307b': '\\u307d',\r\n    '\\u30cf': '\\u30d1', '\\u30d2': '\\u30d4', '\\u30d5': '\\u30d7', '\\u30d8': '\\u30da', '\\u30db': '\\u30dd'\r\n  };\r\n\r\n\r\n  /* ***** Define Symbols **************************************** */\r\n  this.VKI_symbol = {\r\n    '\\u00a0': \"NB\\nSP\", '\\u200b': \"ZW\\nSP\", '\\u200c': \"ZW\\nNJ\", '\\u200d': \"ZW\\nJ\"\r\n  };\r\n\r\n\r\n  /* ***** Layout Number Pad ************************************* */\r\n  this.VKI_numpad = [\r\n    [['$'], ['\\u00a3'], ['\\u20ac'], ['\\u00a5']],\r\n    [['7'], ['8'], ['9'], ['/']],\r\n    [['4'], ['5'], ['6'], ['*']],\r\n    [['1'], ['2'], ['3'], ['=']],\r\n    [['0'], ['.'], ['+'], ['-']]\r\n  ];\r\n\r\n\r\n  /* ****************************************************************\r\n   * Attach the keyboard to an element\r\n   *\r\n   */\r\n  VKI_attach = function(elem) {\r\n    if (elem.getAttribute('VKI_attached')) return false;\r\n    if (self.VKI_imageURI) {\r\n      let keybut = document.createElement('img');\r\n          keybut.src = self.VKI_path + self.VKI_imageURI;\r\n          keybut.alt = self.VKI_i18n['01'];\r\n          keybut.classList.add('keyboardInputInitiator');\r\n          keybut.title = self.VKI_i18n['01'];\r\n          keybut.elem = elem;\r\n          keybut.addEventListener('click', function(e) {\r\n            e = e || event;\r\n            if (e.stopPropagation) { e.stopPropagation(); } else e.cancelBubble = true;\r\n            self.VKI_show(this.elem);\r\n          }, false);\r\n      elem.parentNode.insertBefore(keybut, (elem.dir == 'rtl') ? elem : elem.nextSibling);\r\n    } else {\r\n      elem.addEventListener('focus', function() {\r\n        if (self.VKI_target != this) {\r\n          if (self.VKI_target) self.VKI_close();\r\n          self.VKI_show(this);\r\n        }\r\n      }, false);\r\n      elem.addEventListener('click', function() {\r\n        if (!self.VKI_target) self.VKI_show(this);\r\n      }, false);\r\n    }\r\n    elem.setAttribute('VKI_attached', 'true');\r\n    elem.setAttribute('VKI_type', elem.type);\r\n    elem.setAttribute('inputmode', 'none');\r\n    if (elem.classList.contains('keyboardInputNumbersOnly')) {\r\n      elem.setAttribute('VKI_numpadInput', 'true');\r\n      elem.min = 0;\r\n      elem.step = 1;\r\n    } else if (elem.type == 'number') {\r\n      elem.setAttribute('VKI_numpadInput', 'true');\r\n    } else elem.setAttribute('VKI_numpadInput', 'false');\r\n    if (self.VKI_isIE) {\r\n      elem.onclick = elem.onselect = elem.onkeyup = function(e) {\r\n        if ((e || event).type != 'keyup' || !this.readOnly)\r\n          this.range = document.selection.createRange();\r\n      };\r\n    }\r\n    VKI_addListener(elem, 'click', function(e) {\r\n      if (self.VKI_target == this) {\r\n        e = e || event;\r\n        if (e.stopPropagation) { e.stopPropagation(); } else e.cancelBubble = true;\r\n      } return false;\r\n    }, false);\r\n    if (self.VKI_flashPassword && elem.getAttribute('VKI_type') == 'password') {\r\n      elem.setAttribute('autocomplete', 'new-password');\r\n      elem.storeValue = elem.value;\r\n      elem.timeout = false;\r\n      elem.addEventListener('focus', function() {\r\n        if (typeof this.timeout !== 'number')\r\n          this.storeValue = this.value;\r\n      }, false);\r\n      elem.restorePassword = function() {\r\n        if (typeof this.timeout === 'number') {\r\n          this.type = 'password';\r\n          this.value = this.storeValue;\r\n          clearTimeout(this.timeout);\r\n          this.timeout = false;\r\n        }\r\n      };\r\n      if (elem.form) {\r\n        elem.form.addEventListener('submit', function(e) {\r\n          elem.restorePassword();\r\n        }, false);\r\n      }\r\n      elem.addEventListener('beforeinput', function() {\r\n        elem.restorePassword();\r\n      }, false);\r\n      elem.addEventListener('input', function() {\r\n        let selfPass = this;\r\n        if (this.value.length == this.storeValue.length + 1) {\r\n          this.storeValue = this.value;\r\n          this.value = this.value.replace(/.(?!$)/g, 'â€¢');\r\n          setTimeout(function() {\r\n            selfPass.type = 'text';\r\n            selfPass.setSelectionRange(selfPass.value.length, selfPass.value.length);\r\n          }, 0);\r\n          this.timeout = setTimeout(function() {\r\n            selfPass.type = 'password';\r\n            selfPass.value = selfPass.storeValue;\r\n            selfPass.timeout = false;\r\n          }, self.VKI_flashPassword);\r\n        } else this.storeValue = this.value;\r\n      }, false);\r\n    }\r\n    if (elem.getAttribute('VKI_numpadInput') == 'true') {\r\n      elem.type = (elem.getAttribute('VKI_type') == 'password') ? 'password' : 'text';\r\n      elem.addEventListener('beforeinput', function() {\r\n        if (this.getAttribute('VKI_type') != 'password')\r\n          this.storeValue = this.value;\r\n      }, false);\r\n      elem.addEventListener('input', function() {\r\n        let selfNumpadInput = this;\r\n        if (!this.value.match(new RegExp(this.pattern)) ||\r\n            (this.max && parseFloat(this.value) > parseFloat(this.max)) ||\r\n            (this.min && parseFloat(this.value) < parseFloat(this.min))) {\r\n          if (this.getAttribute('VKI_type') != 'password')\r\n            this.value = this.storeValue;\r\n        }\r\n      }, false);\r\n    }\r\n    if (self.VKI_isMoz)\r\n      elem.addEventListener('blur', function() { this.setAttribute('_scrollTop', this.scrollTop); }, false);\r\n  };\r\n\r\n\r\n  /* ***** Find tagged input & textarea elements ***************** */\r\n  function VKI_buildKeyboardInputs() {\r\n    let inputElems = [\r\n      document.getElementsByTagName('input'),\r\n      document.getElementsByTagName('textarea')\r\n    ];\r\n    for (let x = 0, elem; elem = inputElems[x++];)\r\n      for (let y = 0, ex; ex = elem[y++];)\r\n        if (ex.nodeName == 'TEXTAREA' || ex.type == 'text' || ex.type == 'number' || ex.type == 'password')\r\n          if (ex.classList.contains('keyboardInput')) VKI_attach(ex);\r\n\r\n    VKI_addListener(document.documentElement, 'click', function(e) { self.VKI_close(); }, false);\r\n  }\r\n\r\n\r\n  /* ****************************************************************\r\n   * Common mouse event actions\r\n   *\r\n   */\r\n  function VKI_mouseEvents(elem) {\r\n    if (elem.nodeName == 'TD') {\r\n      if (!elem.click) elem.click = function() {\r\n        let evt = this.ownerDocument.createEvent('MouseEvents');\r\n        evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);\r\n        this.dispatchEvent(evt);\r\n      };\r\n      elem.VKI_clickless = 0;\r\n      VKI_addListener(elem, 'dblclick', function() { return false; }, false);\r\n    }\r\n    VKI_addListener(elem, 'mouseover', function() {\r\n      if (this.nodeName == 'TD' && self.VKI_clickless) {\r\n        let _self = this;\r\n        clearTimeout(this.VKI_clickless);\r\n        this.VKI_clickless = setTimeout(function() { _self.click(); }, self.VKI_clickless);\r\n      }\r\n      if (self.VKI_isIE) this.classList.add('hover');\r\n    }, false);\r\n    VKI_addListener(elem, 'mouseout', function() {\r\n      if (this.nodeName == 'TD') clearTimeout(this.VKI_clickless);\r\n      if (self.VKI_isIE) this.classList.remove('hover', 'pressed');\r\n    }, false);\r\n    VKI_addListener(elem, 'mousedown', function() {\r\n      if (this.nodeName == 'TD') clearTimeout(this.VKI_clickless);\r\n      if (self.VKI_isIE) this.classList.add('pressed');\r\n    }, false);\r\n    VKI_addListener(elem, 'mouseup', function() {\r\n      if (this.nodeName == 'TD') clearTimeout(this.VKI_clickless);\r\n      if (self.VKI_isIE) this.classList.remove('pressed');\r\n    }, false);\r\n  }\r\n\r\n\r\n  /* ***** Build the keyboard interface ************************** */\r\n  this.VKI_keyboard = document.createElement('table');\r\n  this.VKI_keyboard.id = 'keyboardInputMaster';\r\n  this.VKI_keyboard.dir = 'ltr';\r\n  this.VKI_keyboard.cellSpacing = '0';\r\n  this.VKI_keyboard.reflow = function() {\r\n    this.style.width = '50px';\r\n    let foo = this.offsetWidth;\r\n    this.style.width = '';\r\n  };\r\n  VKI_addListener(this.VKI_keyboard, 'click', function(e) {\r\n    e = e || event;\r\n    if (e.stopPropagation) { e.stopPropagation(); } else e.cancelBubble = true;\r\n    return false;\r\n  }, false);\r\n\r\n  if (!this.VKI_layout[this.VKI_kt])\r\n    return alert('No keyboard named \"' + this.VKI_kt + '\"');\r\n\r\n  this.VKI_langCode = {};\r\n  let thead = document.createElement('thead');\r\n    let thtr = document.createElement('tr');\r\n      let thth = document.createElement('th');\r\n          thth.colSpan = '2';\r\n\r\n        let kbSelect = document.createElement('div');\r\n            kbSelect.id = 'keyboardInputSelect';\r\n            kbSelect.title = this.VKI_i18n['02'];\r\n          VKI_addListener(kbSelect, 'click', function() {\r\n            let ol = this.getElementsByTagName('ol')[0];\r\n            if (!ol.style.display) {\r\n                ol.style.display = 'block';\r\n              let li = ol.getElementsByTagName('li'), scr = 0;\r\n              for (let x = 0; x < li.length; x++) {\r\n                if (VKI_kt == li[x].firstChild.nodeValue) {\r\n                  li[x].classList.add('selected');\r\n                  scr = li[x].offsetTop - li[x].offsetHeight * 2;\r\n                } else li[x].classList.remove('selected');\r\n              } setTimeout(function() { ol.scrollTop = scr; }, 0);\r\n            } else ol.style.display = '';\r\n          }, false);\r\n            kbSelect.appendChild(document.createTextNode(this.VKI_kt));\r\n            kbSelect.appendChild(document.createTextNode(this.VKI_isIElt8 ? ' \\u2193' : ' \\u25be'));\r\n            kbSelect.langCount = 0;\r\n          let ol = document.createElement('ol');\r\n            for (ktype in this.VKI_layout) {\r\n              if (typeof this.VKI_layout[ktype] == 'object') {\r\n                if (!this.VKI_layout[ktype].lang) this.VKI_layout[ktype].lang = [];\r\n                for (let x = 0; x < this.VKI_layout[ktype].lang.length; x++)\r\n                  this.VKI_langCode[this.VKI_layout[ktype].lang[x].toLowerCase().replace(/-/g, '_')] = ktype;\r\n                let li = document.createElement('li');\r\n                    li.title = this.VKI_layout[ktype].name;\r\n                  VKI_addListener(li, 'click', function(e) {\r\n                    e = e || event;\r\n                    if (e.stopPropagation) { e.stopPropagation(); } else e.cancelBubble = true;\r\n                    this.parentNode.style.display = '';\r\n                    self.VKI_kts = self.VKI_kt = kbSelect.firstChild.nodeValue = this.firstChild.nodeValue;\r\n                    self.VKI_buildKeys();\r\n                    self.VKI_position(true);\r\n                  }, false);\r\n                  VKI_mouseEvents(li);\r\n                    li.appendChild(document.createTextNode(ktype));\r\n                  ol.appendChild(li);\r\n                kbSelect.langCount++;\r\n              }\r\n            } kbSelect.appendChild(ol);\r\n          if (kbSelect.langCount > 1) thth.appendChild(kbSelect);\r\n        this.VKI_langCode.index = [];\r\n        for (prop in this.VKI_langCode)\r\n          if (prop != 'index' && typeof this.VKI_langCode[prop] == 'string')\r\n            this.VKI_langCode.index.push(prop);\r\n        this.VKI_langCode.index.sort();\r\n        this.VKI_langCode.index.reverse();\r\n\r\n        if (this.VKI_numberPad) {\r\n          let numtogspan = document.createElement('span');\r\n              numtogspan.id = 'keyboardInputNumpadToggle';\r\n              numtogspan.appendChild(document.createTextNode('#'));\r\n              numtogspan.title = this.VKI_i18n['00'];\r\n            VKI_addListener(numtogspan, 'click', function() {\r\n              kbNumpad.style.display = (!kbNumpad.style.display) ? 'none' : '';\r\n              kbNumpad.previousStyle = kbNumpad.style.display;\r\n              self.VKI_position(true);\r\n            }, false);\r\n            VKI_mouseEvents(numtogspan);\r\n            thth.appendChild(numtogspan);\r\n        }\r\n\r\n        this.VKI_kbsize = function(e) {\r\n          self.VKI_size = Math.min(5, Math.max(1, self.VKI_size));\r\n          self.VKI_keyboard.className = self.VKI_keyboard.className.replace(/\\bkeyboardInputSize\\d\\b/, '');\r\n          if (self.VKI_size != 2) self.VKI_keyboard.classList.add('keyboardInputSize' + self.VKI_size);\r\n          self.VKI_position(true);\r\n          if (self.VKI_isOpera) self.VKI_keyboard.reflow();\r\n        };\r\n        if (this.VKI_sizeAdj) {\r\n          let small = document.createElement('small');\r\n              small.title = this.VKI_i18n['10'];\r\n            VKI_addListener(small, 'click', function() {\r\n              --self.VKI_size;\r\n              self.VKI_kbsize();\r\n            }, false);\r\n            VKI_mouseEvents(small);\r\n              small.appendChild(document.createTextNode(this.VKI_isIElt8 ? '\\u2193' : '\\u21d3'));\r\n            thth.appendChild(small);\r\n          let big = document.createElement('big');\r\n              big.title = this.VKI_i18n['11'];\r\n            VKI_addListener(big, 'click', function() {\r\n              ++self.VKI_size;\r\n              self.VKI_kbsize();\r\n            }, false);\r\n            VKI_mouseEvents(big);\r\n              big.appendChild(document.createTextNode(this.VKI_isIElt8 ? '\\u2191' : '\\u21d1'));\r\n            thth.appendChild(big);\r\n        }\r\n\r\n        let numbkspspan = document.createElement('span');\r\n            numbkspspan.id = 'keyboardInputNumpadBksp';\r\n            numbkspspan.appendChild(document.createTextNode('\\u21E6'));\r\n            numbkspspan.title = this.VKI_i18n['12'];\r\n          VKI_addListener(numbkspspan, 'click', function() { self.VKI_backspace(); }, false);\r\n          VKI_mouseEvents(numbkspspan);\r\n          thth.appendChild(numbkspspan);     \r\n\r\n        let clrspan = document.createElement('span');\r\n            clrspan.appendChild(document.createTextNode(this.VKI_i18n['07']));\r\n            clrspan.title = this.VKI_i18n['08'];\r\n          VKI_addListener(clrspan, 'click', function() {\r\n            self.VKI_target.value = '';\r\n            self.VKI_target.focus();\r\n            return false;\r\n          }, false);\r\n          VKI_mouseEvents(clrspan);\r\n          thth.appendChild(clrspan);\r\n\r\n        let strong = document.createElement('strong');\r\n            strong.appendChild(document.createTextNode('X'));\r\n            strong.title = this.VKI_i18n['06'];\r\n          VKI_addListener(strong, 'click', function() { self.VKI_close(); }, false);\r\n          VKI_mouseEvents(strong);\r\n          thth.appendChild(strong);\r\n\r\n        thtr.appendChild(thth);\r\n      thead.appendChild(thtr);\r\n  this.VKI_keyboard.appendChild(thead);\r\n\r\n  let tbody = document.createElement('tbody');\r\n    let tr = document.createElement('tr');\r\n      let td = document.createElement('td');\r\n          td.id = 'keyboardInputKeyboard';\r\n        let div = document.createElement('div');\r\n\r\n        if (this.VKI_deadBox) {\r\n          let label = document.createElement('label');\r\n            let checkbox = document.createElement('input');\r\n                checkbox.type = 'checkbox';\r\n                checkbox.title = this.VKI_i18n['03'] + ': ' + ((this.VKI_deadkeysOn) ? this.VKI_i18n['04'] : this.VKI_i18n['05']);\r\n                checkbox.defaultChecked = this.VKI_deadkeysOn;\r\n              VKI_addListener(checkbox, 'click', function() {\r\n                this.title = self.VKI_i18n['03'] + ': ' + ((this.checked) ? self.VKI_i18n['04'] : self.VKI_i18n['05']);\r\n                self.VKI_modify('');\r\n                return true;\r\n              }, false);\r\n              label.appendChild(checkbox);\r\n                checkbox.checked = this.VKI_deadkeysOn;\r\n            div.appendChild(label);\r\n          this.VKI_deadkeysOn = checkbox;\r\n        } else this.VKI_deadkeysOn.checked = this.VKI_deadkeysOn;\r\n\r\n        if (this.VKI_showVersion) {\r\n          let vr = document.createElement('var');\r\n              vr.title = this.VKI_i18n['09'] + ' ' + this.VKI_version;\r\n              vr.appendChild(document.createTextNode('v' + this.VKI_version));\r\n            div.appendChild(vr);\r\n        } td.appendChild(div);\r\n        tr.appendChild(td);\r\n\r\n      let kbNumpad = document.createElement('td');\r\n          kbNumpad.id = 'keyboardInputNumpad';\r\n        if (!this.VKI_numberPadOn) {\r\n          kbNumpad.style.display = 'none';\r\n          kbNumpad.previousStyle = 'none';\r\n        } else kbNumpad.previousStyle = '';\r\n        let ntable = document.createElement('table');\r\n            ntable.cellSpacing = '0';\r\n          let ntbody = document.createElement('tbody');\r\n            for (let x = 0; x < this.VKI_numpad.length; x++) {\r\n              let ntr = document.createElement('tr');\r\n                for (let y = 0; y < this.VKI_numpad[x].length; y++) {\r\n                  let ntd = document.createElement('td');\r\n                    VKI_addListener(ntd, 'click', VKI_keyClick, false);\r\n                    VKI_mouseEvents(ntd);\r\n                      if (this.VKI_numpad[x][y][0].match(/\\d/)) ntd.classList.add('digit');\r\n                      if (this.VKI_numpad[x][y][0] == '.') ntd.classList.add('decimal');\r\n                      if (this.VKI_numpad[x][y][0] == '-') ntd.classList.add('negative');\r\n                      ntd.appendChild(document.createTextNode(this.VKI_numpad[x][y][0]));\r\n                    ntr.appendChild(ntd);\r\n                } ntbody.appendChild(ntr);\r\n            } ntable.appendChild(ntbody);\r\n          kbNumpad.appendChild(ntable);\r\n        tr.appendChild(kbNumpad);\r\n      tbody.appendChild(tr);\r\n  this.VKI_keyboard.appendChild(tbody);\r\n\r\n  if (this.VKI_isIE6) {\r\n    this.VKI_iframe = document.createElement('iframe');\r\n    this.VKI_iframe.style.position = 'absolute';\r\n    this.VKI_iframe.style.border = '0 none';\r\n    this.VKI_iframe.style.filter = 'mask()';\r\n    this.VKI_iframe.style.zIndex = '999999';\r\n    this.VKI_iframe.src = this.VKI_imageURI;\r\n  }\r\n\r\n\r\n  /* ****************************************************************\r\n   * Private table cell attachment function for generic characters\r\n   *\r\n   */\r\n  function VKI_keyClick() {\r\n    let done = false, character = '\\xa0';\r\n    if (this.firstChild.nodeName.toLowerCase() != 'small') {\r\n      if ((character = this.firstChild.nodeValue) == '\\xa0') return false;\r\n    } else character = this.firstChild.getAttribute('char');\r\n    if (self.VKI_deadkeysOn.checked && self.VKI_dead) {\r\n      if (self.VKI_dead != character) {\r\n        if (character != ' ') {\r\n          if (self.VKI_deadkey[self.VKI_dead][character]) {\r\n            self.VKI_insert(self.VKI_deadkey[self.VKI_dead][character]);\r\n            done = true;\r\n          }\r\n        } else {\r\n          self.VKI_insert(self.VKI_dead);\r\n          done = true;\r\n        }\r\n      } else done = true;\r\n    } self.VKI_dead = false;\r\n\r\n    if (!done) {\r\n      if (self.VKI_deadkeysOn.checked && self.VKI_deadkey[character]) {\r\n        self.VKI_dead = character;\r\n        this.classList.add('dead');\r\n        if (self.VKI_shift) self.VKI_modify('Shift');\r\n        if (self.VKI_altgr) self.VKI_modify('AltGr');\r\n      } else self.VKI_insert(character);\r\n    } self.VKI_modify('');\r\n    return false;\r\n  }\r\n\r\n\r\n  /* ****************************************************************\r\n   * Build or rebuild the keyboard keys\r\n   *\r\n   */\r\n  this.VKI_buildKeys = function() {\r\n    this.VKI_shift = this.VKI_shiftlock = this.VKI_altgr = this.VKI_altgrlock = this.VKI_dead = false;\r\n    let container = this.VKI_keyboard.tBodies[0].getElementsByTagName('div')[0];\r\n    let tables = container.getElementsByTagName('table');\r\n    for (let x = tables.length - 1; x >= 0; x--) container.removeChild(tables[x]);\r\n\r\n    let hasDeadKey = false;\r\n    for (let x = 0, lyt; lyt = this.VKI_layout[this.VKI_kt].keys[x++];) {\r\n      let table = document.createElement('table');\r\n          table.cellSpacing = '0';\r\n        if (lyt.length <= this.VKI_keyCenter) table.classList.add('keyboardInputCenter');\r\n        let tbody = document.createElement('tbody');\r\n          let tr = document.createElement('tr');\r\n            for (let y = 0, lkey; lkey = lyt[y++];) {\r\n              let td = document.createElement('td');\r\n                if (this.VKI_symbol[lkey[0]]) {\r\n                  let text = this.VKI_symbol[lkey[0]].split(\"\\n\");\r\n                  let small = document.createElement('small');\r\n                      small.setAttribute('char', lkey[0]);\r\n                  for (let z = 0; z < text.length; z++) {\r\n                    if (z) small.appendChild(document.createElement('br'));\r\n                    small.appendChild(document.createTextNode(text[z]));\r\n                  } td.appendChild(small);\r\n                } else td.appendChild(document.createTextNode(lkey[0] || '\\xa0'));\r\n\r\n                if (this.VKI_deadkeysOn.checked)\r\n                  for (key in this.VKI_deadkey)\r\n                    if (key === lkey[0]) { td.classList.add('deadkey'); break; }\r\n                if (lyt.length > this.VKI_keyCenter && y == lyt.length) td.classList.add('last');\r\n                if (lkey[0] == ' ' || lkey[1] == ' ') td.classList.add('space');\r\n\r\n                switch (lkey[1]) {\r\n                  case 'Caps': case 'Shift':\r\n                  case 'Alt': case 'AltGr': case 'AltLk':\r\n                    VKI_addListener(td, 'click', (function(type) { return function() { self.VKI_modify(type); return false; }})(lkey[1]), false);\r\n                    break;\r\n                  case 'Tab':\r\n                    VKI_addListener(td, 'click', function() {\r\n                      if (self.VKI_activeTab) {\r\n                        if (self.VKI_target.form) {\r\n                          let target = self.VKI_target, elems = target.form.elements;\r\n                          self.VKI_close();\r\n                          for (let z = 0, me = false, j = -1; z < elems.length; z++) {\r\n                            if (j == -1 && elems[z].getAttribute('VKI_attached')) j = z;\r\n                            if (me) {\r\n                              if (self.VKI_activeTab == 1 && elems[z]) break;\r\n                              if (elems[z].getAttribute('VKI_attached')) break;\r\n                            } else if (elems[z] == target) me = true;\r\n                          } if (z == elems.length) z = Math.max(j, 0);\r\n                          if (elems[z].getAttribute('VKI_attached')) {\r\n                            self.VKI_show(elems[z]);\r\n                          } else elems[z].focus();\r\n                        } else self.VKI_target.focus();\r\n                      } else self.VKI_insert(\"\\t\");\r\n                      return false;\r\n                    }, false);\r\n                    break;\r\n                  case 'Bksp':\r\n                    td.title = this.VKI_i18n['12'];\r\n                    VKI_addListener(td, 'click', function() { self.VKI_backspace(); }, false);\r\n                    break;\r\n                  case 'Enter':\r\n                    VKI_addListener(td, 'click', function() {\r\n                      if (self.VKI_target.nodeName != 'TEXTAREA') {\r\n                        if (self.VKI_enterSubmit && self.VKI_target.form) {\r\n                          for (let z = 0, subm = false; z < self.VKI_target.form.elements.length; z++)\r\n                            if (self.VKI_target.form.elements[z].type == 'submit') subm = true;\r\n                          if (!subm) self.VKI_target.form.submit();\r\n                        }\r\n                        self.VKI_close();\r\n                      } else self.VKI_insert(\"\\n\");\r\n                      return true;\r\n                    }, false);\r\n                    break;\r\n                  default:\r\n                    VKI_addListener(td, 'click', VKI_keyClick, false);\r\n\r\n                } VKI_mouseEvents(td);\r\n                tr.appendChild(td);\r\n              for (let z = 0; z < 4; z++)\r\n                if (this.VKI_deadkey[lkey[z] = lkey[z] || '']) hasDeadKey = true;\r\n            } tbody.appendChild(tr);\r\n          table.appendChild(tbody);\r\n        container.appendChild(table);\r\n    }\r\n    if (this.VKI_deadBox)\r\n      this.VKI_deadkeysOn.style.display = (hasDeadKey) ? 'inline' : 'none';\r\n    if (this.VKI_isIE6) {\r\n      this.VKI_iframe.style.width = this.VKI_keyboard.offsetWidth + 'px';\r\n      this.VKI_iframe.style.height = this.VKI_keyboard.offsetHeight + 'px';\r\n    }\r\n  };\r\n\r\n  this.VKI_buildKeys();\r\n  VKI_addListener(this.VKI_keyboard, 'selectstart', function() { return false; }, false);\r\n  this.VKI_keyboard.unselectable = 'on';\r\n  if (this.VKI_isOpera)\r\n    VKI_addListener(this.VKI_keyboard, 'mousedown', function() { return false; }, false);\r\n\r\n\r\n  /* ****************************************************************\r\n   * Controls modifier keys\r\n   *\r\n   */\r\n  this.VKI_modify = function(type) {\r\n    switch (type) {\r\n      case 'Alt':\r\n      case 'AltGr': this.VKI_altgr = !this.VKI_altgr; break;\r\n      case 'AltLk': this.VKI_altgr = 0; this.VKI_altgrlock = !this.VKI_altgrlock; break;\r\n      case 'Caps': this.VKI_shift = 0; this.VKI_shiftlock = !this.VKI_shiftlock; break;\r\n      case 'Shift': this.VKI_shift = !this.VKI_shift; break;\r\n    }\r\n    let vchar = 0;\r\n    if (!this.VKI_shift != !this.VKI_shiftlock) vchar += 1;\r\n    if (!this.VKI_altgr != !this.VKI_altgrlock) vchar += 2;\r\n\r\n    let tables = this.VKI_keyboard.tBodies[0].getElementsByTagName('div')[0].getElementsByTagName('table');\r\n    for (let x = 0; x < tables.length; x++) {\r\n      let tds = tables[x].getElementsByTagName('td');\r\n      for (let y = 0; y < tds.length; y++) {\r\n        tds[y].className = '';\r\n        let lkey = this.VKI_layout[this.VKI_kt].keys[x][y];\r\n\r\n        switch (lkey[1]) {\r\n          case 'Alt':\r\n          case 'AltGr':\r\n            if (this.VKI_altgr) tds[y].classList.add('pressed');\r\n            break;\r\n          case 'AltLk':\r\n            if (this.VKI_altgrlock) tds[y].classList.add('pressed');\r\n            break;\r\n          case 'Shift':\r\n            if (this.VKI_shift) tds[y].classList.add('pressed');\r\n            break;\r\n          case 'Caps':\r\n            if (this.VKI_shiftlock) tds[y].classList.add('pressed');\r\n            break;\r\n          case 'Tab': case 'Enter': case 'Bksp': break;\r\n          default:\r\n            if (type) {\r\n              tds[y].removeChild(tds[y].firstChild);\r\n              if (this.VKI_symbol[lkey[vchar]]) {\r\n                let text = this.VKI_symbol[lkey[vchar]].split(\"\\n\");\r\n                let small = document.createElement('small');\r\n                    small.setAttribute('char', lkey[vchar]);\r\n                for (let z = 0; z < text.length; z++) {\r\n                  if (z) small.appendChild(document.createElement('br'));\r\n                  small.appendChild(document.createTextNode(text[z]));\r\n                } tds[y].appendChild(small);\r\n              } else tds[y].appendChild(document.createTextNode(lkey[vchar] || '\\xa0'));\r\n            }\r\n            if (this.VKI_deadkeysOn.checked) {\r\n              let character = tds[y].firstChild.nodeValue || tds[y].firstChild.className;\r\n              if (this.VKI_dead) {\r\n                if (character == this.VKI_dead) tds[y].classList.add('pressed');\r\n                if (this.VKI_deadkey[this.VKI_dead][character]) tds[y].classList.add('target');\r\n              }\r\n              if (this.VKI_deadkey[character]) tds[y].classList.add('deadkey');\r\n            }\r\n        }\r\n\r\n        if (y == tds.length - 1 && tds.length > this.VKI_keyCenter) tds[y].classList.add('last');\r\n        if (lkey[0] == ' ' || lkey[1] == ' ') tds[y].classList.add('space');\r\n      }\r\n    }\r\n  };\r\n\r\n\r\n  /* ****************************************************************\r\n   * Insert text at the cursor\r\n   *\r\n   */\r\n  this.VKI_insert = function(text) {\r\n    this.VKI_target.dispatchEvent(new Event('beforeinput'));\r\n    this.VKI_target.focus();\r\n    if (this.VKI_target.maxLength) this.VKI_target.maxlength = this.VKI_target.maxLength;\r\n    if (typeof this.VKI_target.maxlength == 'undefined' ||\r\n        this.VKI_target.maxlength < 0 ||\r\n        this.VKI_target.value.length < this.VKI_target.maxlength) {\r\n      if (this.VKI_target.setSelectionRange && !this.VKI_target.readOnly && !this.VKI_isIE) {\r\n        let rng = [this.VKI_target.selectionStart, this.VKI_target.selectionEnd];\r\n        this.VKI_target.value = this.VKI_target.value.substr(0, rng[0]) + text + this.VKI_target.value.substr(rng[1]);\r\n        if (text == \"\\n\" && this.VKI_isOpera) rng[0]++;\r\n        this.VKI_target.setSelectionRange(rng[0] + text.length, rng[0] + text.length);\r\n      } else if (this.VKI_target.createTextRange && !this.VKI_target.readOnly) {\r\n        try {\r\n          this.VKI_target.range.select();\r\n        } catch(e) { this.VKI_target.range = document.selection.createRange(); }\r\n        this.VKI_target.range.text = text;\r\n        this.VKI_target.range.collapse(true);\r\n        this.VKI_target.range.select();\r\n      } else this.VKI_target.value += text;\r\n      if (this.VKI_shift) this.VKI_modify('Shift');\r\n      if (this.VKI_altgr) this.VKI_modify('AltGr');\r\n      this.VKI_target.dispatchEvent(new Event('input'));\r\n      this.VKI_target.focus();\r\n    } else if (this.VKI_target.createTextRange && this.VKI_target.range)\r\n      this.VKI_target.range.select();\r\n  };\r\n\r\n\r\n  /* ****************************************************************\r\n   * Delete a character behind the cursor\r\n   *\r\n   */\r\n  this.VKI_backspace = function() {\r\n    self.VKI_target.focus();\r\n    if (self.VKI_target.setSelectionRange && !self.VKI_target.readOnly) {\r\n      let rng = [self.VKI_target.selectionStart, self.VKI_target.selectionEnd];\r\n      if (rng[0] < rng[1]) rng[0]++;\r\n      self.VKI_target.value = self.VKI_target.value.substr(0, rng[0] - 1) + self.VKI_target.value.substr(rng[1]);\r\n      self.VKI_target.setSelectionRange(rng[0] - 1, rng[0] - 1);\r\n    } else if (self.VKI_target.createTextRange && !self.VKI_target.readOnly) {\r\n      try {\r\n        self.VKI_target.range.select();\r\n      } catch(e) { self.VKI_target.range = document.selection.createRange(); }\r\n      if (!self.VKI_target.range.text.length) self.VKI_target.range.moveStart('character', -1);\r\n      self.VKI_target.range.text = '';\r\n    } else self.VKI_target.value = self.VKI_target.value.substr(0, self.VKI_target.value.length - 1);\r\n    if (self.VKI_shift) self.VKI_modify('Shift');\r\n    if (self.VKI_altgr) self.VKI_modify('AltGr');\r\n    self.VKI_target.focus();\r\n    return true;\r\n  };\r\n\r\n\r\n  /* ****************************************************************\r\n   * Show the keyboard interface\r\n   *\r\n   */\r\n  this.VKI_show = function(elem) {\r\n    if (!this.VKI_target) {\r\n      this.VKI_target = elem;\r\n      if (this.VKI_langAdapt && this.VKI_target.lang) {\r\n        let chg = false, sub = [], lang = this.VKI_target.lang.toLowerCase().replace(/-/g, '_');\r\n        for (let x = 0; !chg && x < this.VKI_langCode.index.length; x++)\r\n          if (lang.indexOf(this.VKI_langCode.index[x]) == 0)\r\n            chg = kbSelect.firstChild.nodeValue = this.VKI_kt = this.VKI_langCode[this.VKI_langCode.index[x]];\r\n        if (chg) this.VKI_buildKeys();\r\n      }\r\n      if (this.VKI_isIE) {\r\n        if (!this.VKI_target.range) {\r\n          this.VKI_target.range = this.VKI_target.createTextRange();\r\n          this.VKI_target.range.moveStart('character', this.VKI_target.value.length);\r\n        } this.VKI_target.range.select();\r\n      }\r\n      try { this.VKI_keyboard.parentNode.removeChild(this.VKI_keyboard); } catch (e) {}\r\n      if (this.VKI_target.getAttribute('VKI_type') == 'password') {\r\n        this.VKI_target.storeReadOnly = this.VKI_target.readOnly;\r\n        this.VKI_target.readOnly = 'readonly';\r\n        if (this.VKI_clearPasswords) this.VKI_target.value = '';\r\n      }\r\n\r\n      if (this.VKI_target.getAttribute('VKI_numpadInput') == 'true') {\r\n        this.VKI_keyboard.classList.add('numpadOnly');\r\n        kbNumpad.classList.add('showNegative', 'showDecimal');\r\n        kbNumpad.previousStyle = kbNumpad.style.display;\r\n        kbNumpad.style.display = '';\r\n        let noNeg = false;\r\n        this.VKI_target.pattern = '^[+-]?[0-9]*\\\\.?[0-9]*$';\r\n        if (this.VKI_target.min && parseFloat(this.VKI_target.min) >= 0) {\r\n          this.VKI_target.pattern = '^\\\\+?[0-9]*\\\\.?[0-9]*$';\r\n          kbNumpad.classList.remove('showNegative');\r\n          noNeg = true;\r\n        }\r\n        if (this.VKI_target.step && !parseFloat(this.VKI_target.step).toString().match(/\\./)) {\r\n          this.VKI_target.pattern = (noNeg) ? '^\\\\+?[0-9]*$' : '^[+-]?[0-9]*$';\r\n          kbNumpad.classList.remove('showDecimal');\r\n        }\r\n      } else {\r\n        this.VKI_keyboard.classList.remove('numpadOnly');\r\n        kbNumpad.style.display = kbNumpad.previousStyle;\r\n      }\r\n\r\n      let elemStep = this.VKI_target;\r\n      this.VKI_target.keyboardPosition = 'absolute';\r\n      do {\r\n        if (VKI_getStyle(elemStep, 'position') == 'fixed') {\r\n          this.VKI_target.keyboardPosition = 'fixed';\r\n          break;\r\n        }\r\n      } while (elemStep = elemStep.offsetParent);\r\n\r\n      if (this.VKI_isIE6) document.body.appendChild(this.VKI_iframe);\r\n      document.body.appendChild(this.VKI_keyboard);\r\n      this.VKI_keyboard.style.position = this.VKI_target.keyboardPosition;\r\n      if (this.VKI_isOpera) this.VKI_keyboard.reflow();\r\n\r\n      this.VKI_position(true);\r\n      if (self.VKI_isMoz || self.VKI_isWebKit) this.VKI_position(true);\r\n      this.VKI_target.blur();\r\n      this.VKI_target.focus();\r\n    } else this.VKI_close();\r\n  };\r\n\r\n\r\n  /* ****************************************************************\r\n   * Position the keyboard\r\n   *\r\n   */\r\n  this.VKI_position = function(force) {\r\n    if (self.VKI_target) {\r\n      let kPos = VKI_findPos(self.VKI_keyboard), wDim = VKI_innerDimensions(), sDis = VKI_scrollDist();\r\n      let place = false, fudge = self.VKI_target.offsetHeight + 3;\r\n      if (force !== true) {\r\n        if (kPos[1] + self.VKI_keyboard.offsetHeight - sDis[1] - wDim[1] > 0) {\r\n          place = true;\r\n          fudge = -self.VKI_keyboard.offsetHeight - 3;\r\n        } else if (kPos[1] - sDis[1] < 0) place = true;\r\n      }\r\n      if (place || force === true) {\r\n        let iPos = VKI_findPos(self.VKI_target), scr = self.VKI_target;\r\n        while (scr = scr.parentNode) {\r\n          if (scr == document.body) break;\r\n          if (scr.scrollHeight > scr.offsetHeight || scr.scrollWidth > scr.offsetWidth) {\r\n            if (!scr.getAttribute('VKI_scrollListener')) {\r\n              scr.setAttribute('VKI_scrollListener', true);\r\n              VKI_addListener(scr, 'scroll', function() { self.VKI_position(true); }, false);\r\n            } // Check if the input is in view\r\n            let pPos = VKI_findPos(scr), oTop = iPos[1] - pPos[1], oLeft = iPos[0] - pPos[0];\r\n            let top = oTop + self.VKI_target.offsetHeight;\r\n            let left = oLeft + self.VKI_target.offsetWidth;\r\n            let bottom = scr.offsetHeight - oTop - self.VKI_target.offsetHeight;\r\n            let right = scr.offsetWidth - oLeft - self.VKI_target.offsetWidth;\r\n            self.VKI_keyboard.style.display = (top < 0 || left < 0 || bottom < 0 || right < 0) ? 'none' : '';\r\n            if (self.VKI_isIE6) self.VKI_iframe.style.display = (top < 0 || left < 0 || bottom < 0 || right < 0) ? 'none' : '';\r\n          }\r\n        }\r\n        self.VKI_keyboard.style.top = iPos[1] + fudge + 'px';\r\n        self.VKI_keyboard.style.left = Math.max(10, Math.min(wDim[0] - self.VKI_keyboard.offsetWidth - 25, iPos[0])) + 'px';\r\n        if (self.VKI_isIE6) {\r\n          self.VKI_iframe.style.width = self.VKI_keyboard.offsetWidth + 'px';\r\n          self.VKI_iframe.style.height = self.VKI_keyboard.offsetHeight + 'px';\r\n          self.VKI_iframe.style.top = self.VKI_keyboard.style.top;\r\n          self.VKI_iframe.style.left = self.VKI_keyboard.style.left;\r\n        }\r\n      }\r\n      if (force === true) self.VKI_position();\r\n    }\r\n  };\r\n\r\n\r\n  /* ****************************************************************\r\n   * Close the keyboard interface\r\n   *\r\n   */\r\n  this.VKI_close = VKI_close = function() {\r\n    if (this.VKI_target) {\r\n      if (this.VKI_target.getAttribute('VKI_type') == 'password')\r\n        this.VKI_target.readOnly = this.VKI_target.storeReadOnly;\r\n      if (this.VKI_target.getAttribute('VKI_numpadInput') == 'true')\r\n        this.VKI_target.pattern = '.*';\r\n      try {\r\n        this.VKI_keyboard.parentNode.removeChild(this.VKI_keyboard);\r\n        if (this.VKI_isIE6) this.VKI_iframe.parentNode.removeChild(this.VKI_iframe);\r\n      } catch (e) {}\r\n      if (this.VKI_kt != this.VKI_kts) {\r\n        kbSelect.firstChild.nodeValue = this.VKI_kt = this.VKI_kts;\r\n        this.VKI_buildKeys();\r\n      } kbSelect.getElementsByTagName('ol')[0].style.display = '';;\r\n      this.VKI_target.focus();\r\n      if (this.VKI_isIE) {\r\n        setTimeout(function() { self.VKI_target = false; }, 0);\r\n      } else this.VKI_target = false;\r\n    }\r\n  };\r\n\r\n\r\n  /* ***** Private functions *************************************** */\r\n  function VKI_addListener(elem, type, func, cap) {\r\n    if (elem.addEventListener) {\r\n      elem.addEventListener(type, function(e) { func.call(elem, e); }, cap);\r\n    } else if (elem.attachEvent)\r\n      elem.attachEvent('on' + type, function() { func.call(elem); });\r\n  }\r\n\r\n  function VKI_findPos(obj) {\r\n    let curleft = curtop = 0, scr = obj;\r\n    while ((scr = scr.parentNode) && scr != document.body) {\r\n      curleft -= scr.scrollLeft || 0;\r\n      curtop -= scr.scrollTop || 0;\r\n    }\r\n    do {\r\n      curleft += obj.offsetLeft;\r\n      curtop += obj.offsetTop;\r\n    } while (obj = obj.offsetParent);\r\n    return [curleft, curtop];\r\n  }\r\n\r\n  function VKI_innerDimensions() {\r\n    if (self.innerHeight) {\r\n      return [self.innerWidth, self.innerHeight];\r\n    } else if (document.documentElement && document.documentElement.clientHeight) {\r\n      return [document.documentElement.clientWidth, document.documentElement.clientHeight];\r\n    } else if (document.body)\r\n      return [document.body.clientWidth, document.body.clientHeight];\r\n    return [0, 0];\r\n  }\r\n\r\n  function VKI_scrollDist() {\r\n    let html = document.getElementsByTagName('html')[0];\r\n    if (html.scrollTop && document.documentElement.scrollTop) {\r\n      return [html.scrollLeft, html.scrollTop];\r\n    } else if (html.scrollTop || document.documentElement.scrollTop) {\r\n      return [html.scrollLeft + document.documentElement.scrollLeft, html.scrollTop + document.documentElement.scrollTop];\r\n    } else if (document.body.scrollTop)\r\n      return [document.body.scrollLeft, document.body.scrollTop];\r\n    return [0, 0];\r\n  }\r\n\r\n  function VKI_getStyle(obj, styleProp) {\r\n    let y;\r\n    if (obj.currentStyle) {\r\n      y = obj.currentStyle[styleProp];\r\n    } else if (window.getComputedStyle)\r\n      y = window.getComputedStyle(obj, null)[styleProp];\r\n    return y;\r\n  }\r\n\r\n  VKI_addListener(window, 'resize', this.VKI_position, false);\r\n  VKI_addListener(window, 'scroll', this.VKI_position, false);\r\n  this.VKI_kbsize();\r\n  VKI_addListener(window, 'load', VKI_buildKeyboardInputs, false);\r\n  // VKI_addListener(window, 'load', function() {\r\n  //   setTimeout(VKI_buildKeyboardInputs, 5);\r\n  // }, false);\r\n})();"
  },
  {
    "path": "version.php",
    "content": "<?php\r\n// This file is part of Moodle - http://moodle.org/\r\n//\r\n// Moodle is free software: you can redistribute it and/or modify\r\n// it under the terms of the GNU General Public License as published by\r\n// the Free Software Foundation, either version 3 of the License, or\r\n// (at your option) any later version.\r\n//\r\n// Moodle is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r\n// GNU General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU General Public License\r\n// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.\r\n/**\r\n * TinyMCE virtualkeyboard plugin version details.\r\n *\r\n * @package   tinymce_virtualkeyboard\r\n * @author DualCube <admin@dualcube.com>\r\n * @copyright  2022 DualCube (https://dualcube.com)\r\n * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\r\n */\r\ndefined('MOODLE_INTERNAL') || die();\r\n$plugin->component = 'tinymce_virtualkeyboard';\r\n$plugin->version   = 2023042500;\r\n$plugin->requires  = 2013051400;\r\n$plugin->maturity = MATURITY_STABLE;\r\n$plugin->release = '1.3 (Build: 2023042500)';\r\n"
  }
]