Compare commits
	
		
			3 commits
		
	
	
		
			master
			...
			subvendor_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
							 | 
						522876dc5a | ||
| 
							 | 
						f2991c639d | ||
| 
							 | 
						c31070dd3f | 
					 26113 changed files with 650942 additions and 1768497 deletions
				
			
		| 
						 | 
				
			
			@ -1,30 +0,0 @@
 | 
			
		|||
---
 | 
			
		||||
BasedOnStyle: Google
 | 
			
		||||
AlignAfterOpenBracket: Align
 | 
			
		||||
AlignConsecutiveAssignments: 'true'
 | 
			
		||||
AlignConsecutiveDeclarations: 'true'
 | 
			
		||||
AlignOperands: 'true'
 | 
			
		||||
AllowAllParametersOfDeclarationOnNextLine: 'false'
 | 
			
		||||
AllowShortCaseLabelsOnASingleLine: 'false'
 | 
			
		||||
AllowShortFunctionsOnASingleLine: Empty
 | 
			
		||||
AllowShortLoopsOnASingleLine: 'false'
 | 
			
		||||
AlwaysBreakAfterDefinitionReturnType: None
 | 
			
		||||
AlwaysBreakAfterReturnType: None
 | 
			
		||||
AlwaysBreakBeforeMultilineStrings: 'false'
 | 
			
		||||
BinPackArguments: 'true'
 | 
			
		||||
BinPackParameters: 'true'
 | 
			
		||||
ColumnLimit: '1000'
 | 
			
		||||
IndentCaseLabels: 'true'
 | 
			
		||||
IndentPPDirectives: AfterHash
 | 
			
		||||
IndentWidth: '4'
 | 
			
		||||
MaxEmptyLinesToKeep: '1'
 | 
			
		||||
PointerAlignment: Right
 | 
			
		||||
SortIncludes: 'false'
 | 
			
		||||
SpaceBeforeAssignmentOperators: 'true'
 | 
			
		||||
SpaceBeforeParens: ControlStatements
 | 
			
		||||
SpaceInEmptyParentheses: 'false'
 | 
			
		||||
SpacesBeforeTrailingComments: 1
 | 
			
		||||
TabWidth: '4'
 | 
			
		||||
UseTab: Never
 | 
			
		||||
 | 
			
		||||
...
 | 
			
		||||
							
								
								
									
										33
									
								
								.clangd
									
										
									
									
									
								
							
							
						
						
									
										33
									
								
								.clangd
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,33 +0,0 @@
 | 
			
		|||
CompileFlags:
 | 
			
		||||
    Add:
 | 
			
		||||
        [
 | 
			
		||||
            -Wno-unknown-attributes,
 | 
			
		||||
            -Wno-maybe-uninitialized,
 | 
			
		||||
            -Wno-unknown-warning-option,
 | 
			
		||||
            -Wno-pointer-to-int-cast,
 | 
			
		||||
            -Wno-int-to-void-pointer-cast,
 | 
			
		||||
            -DPROGMEM=,
 | 
			
		||||
        ]
 | 
			
		||||
    Remove:
 | 
			
		||||
        [
 | 
			
		||||
            -W*,
 | 
			
		||||
            -mmcu=*,
 | 
			
		||||
            -mcpu=*,
 | 
			
		||||
            -mfpu=*,
 | 
			
		||||
            -mfloat-abi=*,
 | 
			
		||||
            -mno-unaligned-access,
 | 
			
		||||
            -mno-thumb-interwork,
 | 
			
		||||
            -mcall-prologues,
 | 
			
		||||
            -D__has_include*,
 | 
			
		||||
            -mlra,
 | 
			
		||||
        ]
 | 
			
		||||
    Compiler: clang
 | 
			
		||||
Diagnostics:
 | 
			
		||||
    UnusedIncludes: None
 | 
			
		||||
    Suppress:
 | 
			
		||||
        [
 | 
			
		||||
            asm_invalid_output_constraint,
 | 
			
		||||
            asm_invalid_input_constraint,
 | 
			
		||||
            invalid_asm_value_for_constraint,
 | 
			
		||||
            anyx86_interrupt_attribute,
 | 
			
		||||
        ]
 | 
			
		||||
| 
						 | 
				
			
			@ -4,40 +4,15 @@
 | 
			
		|||
root = true
 | 
			
		||||
 | 
			
		||||
[*]
 | 
			
		||||
end_of_line = lf
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 4
 | 
			
		||||
indent_size = 2
 | 
			
		||||
 | 
			
		||||
# We recommend you to keep these unchanged
 | 
			
		||||
end_of_line = lf
 | 
			
		||||
charset = utf-8
 | 
			
		||||
trim_trailing_whitespace = true
 | 
			
		||||
insert_final_newline = true
 | 
			
		||||
 | 
			
		||||
 # To match GitHub Actions formatting
 | 
			
		||||
[*.{yaml,yml}]
 | 
			
		||||
indent_size = 2
 | 
			
		||||
 | 
			
		||||
[*.md]
 | 
			
		||||
trim_trailing_whitespace = false
 | 
			
		||||
 | 
			
		||||
[{Makefile,*.mk}]
 | 
			
		||||
indent_style = tab
 | 
			
		||||
 | 
			
		||||
# Don't override anything in `lib/`...
 | 
			
		||||
[lib/**]
 | 
			
		||||
indent_style = unset
 | 
			
		||||
indent_size = unset
 | 
			
		||||
tab_width = unset
 | 
			
		||||
end_of_line = unset
 | 
			
		||||
charset = unset
 | 
			
		||||
spelling_language = unset
 | 
			
		||||
trim_trailing_whitespace = unset
 | 
			
		||||
insert_final_newline = unset
 | 
			
		||||
 | 
			
		||||
# ...except QMK's `lib/python`.
 | 
			
		||||
[{*.py,lib/python/**.py}]
 | 
			
		||||
end_of_line = lf
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 4
 | 
			
		||||
charset = utf-8
 | 
			
		||||
trim_trailing_whitespace = true
 | 
			
		||||
insert_final_newline = true
 | 
			
		||||
max_line_length = 200
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										114
									
								
								.gitattributes
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										114
									
								
								.gitattributes
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -2,70 +2,69 @@
 | 
			
		|||
* text=auto
 | 
			
		||||
 | 
			
		||||
# sources
 | 
			
		||||
*.c      text eol=lf
 | 
			
		||||
*.cc     text eol=lf
 | 
			
		||||
*.cxx    text eol=lf
 | 
			
		||||
*.cpp    text eol=lf
 | 
			
		||||
*.c++    text eol=lf
 | 
			
		||||
*.hpp    text eol=lf
 | 
			
		||||
*.h      text eol=lf
 | 
			
		||||
*.h++    text eol=lf
 | 
			
		||||
*.hh     text eol=lf
 | 
			
		||||
*.bat    text eol=crlf
 | 
			
		||||
*.cmd    text eol=crlf
 | 
			
		||||
*.coffee text eol=lf
 | 
			
		||||
*.css    text eol=lf
 | 
			
		||||
*.htm    text eol=lf
 | 
			
		||||
*.html   text eol=lf
 | 
			
		||||
*.inc    text eol=lf
 | 
			
		||||
*.ini    text eol=crlf
 | 
			
		||||
*.js     text eol=lf
 | 
			
		||||
*.jsx    text eol=lf
 | 
			
		||||
*.json   text eol=lf
 | 
			
		||||
*.less   text eol=lf
 | 
			
		||||
*.php    text eol=lf
 | 
			
		||||
*.pl     text eol=lf
 | 
			
		||||
*.py     text eol=lf
 | 
			
		||||
*.rb     text eol=lf
 | 
			
		||||
*.sass   text eol=lf
 | 
			
		||||
*.scm    text eol=lf
 | 
			
		||||
*.scss   text eol=lf
 | 
			
		||||
*.sh     text eol=lf
 | 
			
		||||
*.sql    text eol=lf
 | 
			
		||||
*.styl   text eol=lf
 | 
			
		||||
*.ts     text eol=lf
 | 
			
		||||
*.xml    text eol=lf
 | 
			
		||||
*.xhtml  text eol=lf
 | 
			
		||||
*.c text
 | 
			
		||||
*.cc text
 | 
			
		||||
*.cxx text
 | 
			
		||||
*.cpp text
 | 
			
		||||
*.c++ text
 | 
			
		||||
*.hpp text
 | 
			
		||||
*.h text
 | 
			
		||||
*.h++ text
 | 
			
		||||
*.hh text
 | 
			
		||||
*.bat    text
 | 
			
		||||
*.coffee text
 | 
			
		||||
*.css    text
 | 
			
		||||
*.htm    text
 | 
			
		||||
*.html   text
 | 
			
		||||
*.inc    text
 | 
			
		||||
*.ini    text
 | 
			
		||||
*.js     text
 | 
			
		||||
*.jsx    text
 | 
			
		||||
*.json   text
 | 
			
		||||
*.less   text
 | 
			
		||||
*.php    text
 | 
			
		||||
*.pl     text
 | 
			
		||||
*.py     text
 | 
			
		||||
*.rb     text
 | 
			
		||||
*.sass   text
 | 
			
		||||
*.scm    text
 | 
			
		||||
*.scss   text
 | 
			
		||||
*.sh     text
 | 
			
		||||
*.sql    text
 | 
			
		||||
*.styl   text
 | 
			
		||||
*.ts     text
 | 
			
		||||
*.xml    text
 | 
			
		||||
*.xhtml  text
 | 
			
		||||
 | 
			
		||||
# make files (need to always use lf for compatibility with Windows 10 bash)
 | 
			
		||||
Makefile eol=lf
 | 
			
		||||
*.mk     eol=lf
 | 
			
		||||
*.mk eol=lf
 | 
			
		||||
 | 
			
		||||
# make files (need to always use lf for compatibility with Windows 10 bash)
 | 
			
		||||
*.sh eol=lf
 | 
			
		||||
 | 
			
		||||
# documentation
 | 
			
		||||
*.markdown   text eol=lf
 | 
			
		||||
*.md         text eol=lf
 | 
			
		||||
*.mdwn       text eol=lf
 | 
			
		||||
*.mdown      text eol=lf
 | 
			
		||||
*.mkd        text eol=lf
 | 
			
		||||
*.mkdn       text eol=lf
 | 
			
		||||
*.mdtxt      text eol=lf
 | 
			
		||||
*.mdtext     text eol=lf
 | 
			
		||||
*.txt        text eol=lf
 | 
			
		||||
AUTHORS      text eol=lf
 | 
			
		||||
CHANGELOG    text eol=lf
 | 
			
		||||
CHANGES      text eol=lf
 | 
			
		||||
CONTRIBUTING text eol=lf
 | 
			
		||||
COPYING      text eol=lf
 | 
			
		||||
INSTALL      text eol=lf
 | 
			
		||||
license      text eol=lf
 | 
			
		||||
LICENSE      text eol=lf
 | 
			
		||||
NEWS         text eol=lf
 | 
			
		||||
readme       text eol=lf
 | 
			
		||||
*README*     text eol=lf
 | 
			
		||||
TODO         text eol=lf
 | 
			
		||||
*.markdown   text
 | 
			
		||||
*.md         text
 | 
			
		||||
*.mdwn       text
 | 
			
		||||
*.mdown      text
 | 
			
		||||
*.mkd        text
 | 
			
		||||
*.mkdn       text
 | 
			
		||||
*.mdtxt      text
 | 
			
		||||
*.mdtext     text
 | 
			
		||||
*.txt        text
 | 
			
		||||
AUTHORS      text
 | 
			
		||||
CHANGELOG    text
 | 
			
		||||
CHANGES      text
 | 
			
		||||
CONTRIBUTING text
 | 
			
		||||
COPYING      text
 | 
			
		||||
INSTALL      text
 | 
			
		||||
license      text
 | 
			
		||||
LICENSE      text
 | 
			
		||||
NEWS         text
 | 
			
		||||
readme       text
 | 
			
		||||
*README*     text
 | 
			
		||||
TODO         text
 | 
			
		||||
 | 
			
		||||
GRAPHICS
 | 
			
		||||
*.ai   binary
 | 
			
		||||
| 
						 | 
				
			
			@ -83,7 +82,7 @@ GRAPHICS
 | 
			
		|||
*.png  binary
 | 
			
		||||
*.psb  binary
 | 
			
		||||
*.psd  binary
 | 
			
		||||
*.svg  text eol=lf
 | 
			
		||||
*.svg  text
 | 
			
		||||
*.svgz binary
 | 
			
		||||
*.tif  binary
 | 
			
		||||
*.tiff binary
 | 
			
		||||
| 
						 | 
				
			
			@ -93,4 +92,3 @@ GRAPHICS
 | 
			
		|||
# hex files
 | 
			
		||||
*.hex binary
 | 
			
		||||
*.eep binary
 | 
			
		||||
nix/sources.nix linguist-generated=true
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										41
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										41
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,41 +0,0 @@
 | 
			
		|||
name: Bug report
 | 
			
		||||
description: Create a report to help us improve QMK Firmware.
 | 
			
		||||
title: "[Bug] "
 | 
			
		||||
labels: ["bug", "help wanted"]
 | 
			
		||||
body:
 | 
			
		||||
  - type: markdown
 | 
			
		||||
    attributes:
 | 
			
		||||
      value: |
 | 
			
		||||
        Provide a general summary of the bug in the title above.
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Describe the Bug
 | 
			
		||||
      description: A clear and concise description of what the bug is.
 | 
			
		||||
  - type: input
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Keyboard Used
 | 
			
		||||
      description: The name of the keyboard from the `make` or `qmk compile`/`qmk flash` commands, eg. `planck/rev6`.
 | 
			
		||||
  - type: input
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Link to product page (if applicable)
 | 
			
		||||
  - type: input
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Operating System
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: qmk doctor Output
 | 
			
		||||
      description: Output from running the `qmk doctor` command.
 | 
			
		||||
      render: text
 | 
			
		||||
  - type: checkboxes
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Is AutoHotKey / Karabiner installed
 | 
			
		||||
      options:
 | 
			
		||||
        - label: AutoHotKey (Windows)
 | 
			
		||||
        - label: Karabiner (macOS)
 | 
			
		||||
  - type: input
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Other keyboard-related software installed
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Additional Context
 | 
			
		||||
      description: Add any other relevant information about the problem here.
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,8 +0,0 @@
 | 
			
		|||
blank_issues_enabled: false
 | 
			
		||||
contact_links:
 | 
			
		||||
  - name: QMK Discord
 | 
			
		||||
    url: https://discord.gg/qmk
 | 
			
		||||
    about: Ask questions, discuss issues and features. Chill.
 | 
			
		||||
  - name: OLKB Subreddit
 | 
			
		||||
    url: https://www.reddit.com/r/olkb
 | 
			
		||||
    about: All things OLKB and QMK.
 | 
			
		||||
							
								
								
									
										24
									
								
								.github/ISSUE_TEMPLATE/feature_request.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								.github/ISSUE_TEMPLATE/feature_request.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,24 +0,0 @@
 | 
			
		|||
name: Feature request
 | 
			
		||||
description: Suggest a new feature or changes to existing features.
 | 
			
		||||
title: "[Feature Request] "
 | 
			
		||||
labels: ["enhancement", "help wanted"]
 | 
			
		||||
body:
 | 
			
		||||
  - type: markdown
 | 
			
		||||
    attributes:
 | 
			
		||||
      value: |
 | 
			
		||||
        Provide a general summary of the changes you want in the title above.
 | 
			
		||||
 | 
			
		||||
        Please refrain from asking maintainers to add support for specific keyboards -- it is unlikely they will have hardware available, and will not be able to help.
 | 
			
		||||
        Your best bet is to take the initiative, add support, then submit a PR yourself.
 | 
			
		||||
  - type: checkboxes
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Feature Request Type
 | 
			
		||||
      options:
 | 
			
		||||
        - label: Core functionality
 | 
			
		||||
        - label: Add-on hardware support (eg. audio, RGB, OLED screen, etc.)
 | 
			
		||||
        - label: Alteration (enhancement/optimization) of existing feature(s)
 | 
			
		||||
        - label: New behavior
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Description
 | 
			
		||||
      description: A few sentences describing what it is that you'd like to see in QMK. Additional information (such as links to spec sheets, licensing info, other related issues or PRs, etc) would be helpful.
 | 
			
		||||
							
								
								
									
										19
									
								
								.github/ISSUE_TEMPLATE/other_issues.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								.github/ISSUE_TEMPLATE/other_issues.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,19 +0,0 @@
 | 
			
		|||
name: Other issues
 | 
			
		||||
description: Anything else that doesn't fall into the above categories.
 | 
			
		||||
labels: ["help wanted", "question"]
 | 
			
		||||
body:
 | 
			
		||||
  - type: markdown
 | 
			
		||||
    attributes:
 | 
			
		||||
      value: |
 | 
			
		||||
        Provide a general summary of the changes you want in the title above.
 | 
			
		||||
  - type: markdown
 | 
			
		||||
    attributes:
 | 
			
		||||
      value: |
 | 
			
		||||
        Please check [https://docs.qmk.fm/#/support](https://docs.qmk.fm/#/support) for additional resources first. If that doesn't answer your question, choose the bug report template instead, as that may be more appropriate.
 | 
			
		||||
 | 
			
		||||
        Please refrain from asking maintainers to add support for specific keyboards -- it is unlikely they will have hardware available, and will not be able to help.
 | 
			
		||||
        Your best bet is to take the initiative, add support, then submit a PR yourself.
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Issue Description
 | 
			
		||||
      description: Describe your issue in as much detail as possible.
 | 
			
		||||
							
								
								
									
										11
									
								
								.github/ISSUE_TEMPLATE/zzz_blank.md
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/ISSUE_TEMPLATE/zzz_blank.md
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,11 +0,0 @@
 | 
			
		|||
---
 | 
			
		||||
name: Blank issue
 | 
			
		||||
about: If you're 100% sure that you don't need one of the other issue templates, use
 | 
			
		||||
  this one instead.
 | 
			
		||||
title: ''
 | 
			
		||||
labels: help wanted, question
 | 
			
		||||
assignees: ''
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										34
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,34 +0,0 @@
 | 
			
		|||
<!--- Provide a general summary of your changes in the title above. -->
 | 
			
		||||
 | 
			
		||||
<!--- Anything on lines wrapped in comments like these will not show up in the final text. -->
 | 
			
		||||
 | 
			
		||||
## Description
 | 
			
		||||
 | 
			
		||||
<!--- Describe your changes in detail here. -->
 | 
			
		||||
 | 
			
		||||
## Types of Changes
 | 
			
		||||
 | 
			
		||||
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply. -->
 | 
			
		||||
- [ ] Core
 | 
			
		||||
- [ ] Bugfix
 | 
			
		||||
- [ ] New feature
 | 
			
		||||
- [ ] Enhancement/optimization
 | 
			
		||||
- [ ] Keyboard (addition or update)
 | 
			
		||||
- [ ] Keymap/layout (addition or update)
 | 
			
		||||
- [ ] Documentation
 | 
			
		||||
 | 
			
		||||
## Issues Fixed or Closed by This PR
 | 
			
		||||
 | 
			
		||||
* 
 | 
			
		||||
 | 
			
		||||
## Checklist
 | 
			
		||||
 | 
			
		||||
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
 | 
			
		||||
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
 | 
			
		||||
- [ ] My code follows the code style of this project: [**C**](https://docs.qmk.fm/#/coding_conventions_c), [**Python**](https://docs.qmk.fm/#/coding_conventions_python)
 | 
			
		||||
- [ ] I have read the [**PR Checklist** document](https://docs.qmk.fm/#/pr_checklist) and have made the appropriate changes.
 | 
			
		||||
- [ ] My change requires a change to the documentation.
 | 
			
		||||
- [ ] I have updated the documentation accordingly.
 | 
			
		||||
- [ ] I have read the [**CONTRIBUTING** document](https://docs.qmk.fm/#/contributing).
 | 
			
		||||
- [ ] I have added tests to cover my changes.
 | 
			
		||||
- [ ] I have tested the changes and verified that they work and don't break anything (as well as I can manage).
 | 
			
		||||
							
								
								
									
										9
									
								
								.github/dependabot.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.github/dependabot.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,9 +0,0 @@
 | 
			
		|||
version: 2
 | 
			
		||||
updates:
 | 
			
		||||
  - package-ecosystem: "github-actions"
 | 
			
		||||
    directory: "/"
 | 
			
		||||
    labels: CI
 | 
			
		||||
    reviewers:
 | 
			
		||||
      - "qmk/collaborators"
 | 
			
		||||
    schedule:
 | 
			
		||||
      interval: "daily"
 | 
			
		||||
							
								
								
									
										60
									
								
								.github/labeler.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										60
									
								
								.github/labeler.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,60 +0,0 @@
 | 
			
		|||
core:
 | 
			
		||||
  - changed-files:
 | 
			
		||||
    - any-glob-to-any-file:
 | 
			
		||||
      - quantum/**
 | 
			
		||||
      - tmk_core/**
 | 
			
		||||
      - drivers/**
 | 
			
		||||
      - tests/**
 | 
			
		||||
      - util/**
 | 
			
		||||
      - platforms/**
 | 
			
		||||
      - builddefs/*.mk
 | 
			
		||||
      - Makefile
 | 
			
		||||
      - '*.mk'
 | 
			
		||||
dependencies:
 | 
			
		||||
  - changed-files:
 | 
			
		||||
    - all-globs-to-any-file:
 | 
			
		||||
      - lib/**
 | 
			
		||||
      - '!lib/python/**'
 | 
			
		||||
keyboard:
 | 
			
		||||
  - changed-files:
 | 
			
		||||
    - all-globs-to-any-file:
 | 
			
		||||
      - keyboards/**
 | 
			
		||||
      - '!keyboards/**/keymaps/**'
 | 
			
		||||
keymap:
 | 
			
		||||
  - changed-files:
 | 
			
		||||
    - any-glob-to-any-file:
 | 
			
		||||
      - users/**
 | 
			
		||||
      - layouts/**
 | 
			
		||||
      - keyboards/**/keymaps/**
 | 
			
		||||
via:
 | 
			
		||||
  - changed-files:
 | 
			
		||||
    - any-glob-to-any-file:
 | 
			
		||||
      - keyboards/**/keymaps/via/*
 | 
			
		||||
cli:
 | 
			
		||||
  - changed-files:
 | 
			
		||||
    - any-glob-to-any-file:
 | 
			
		||||
      - requirements.txt
 | 
			
		||||
      - lib/python/**
 | 
			
		||||
python:
 | 
			
		||||
  - changed-files:
 | 
			
		||||
    - any-glob-to-any-file:
 | 
			
		||||
      - '**/*.py'
 | 
			
		||||
documentation:
 | 
			
		||||
  - changed-files:
 | 
			
		||||
    - any-glob-to-any-file:
 | 
			
		||||
      - docs/**
 | 
			
		||||
      - builddefs/docsgen/**
 | 
			
		||||
CI:
 | 
			
		||||
  - changed-files:
 | 
			
		||||
    - any-glob-to-any-file:
 | 
			
		||||
      - .github/**
 | 
			
		||||
dd:
 | 
			
		||||
  - changed-files:
 | 
			
		||||
    - any-glob-to-any-file:
 | 
			
		||||
      - data/constants/**
 | 
			
		||||
      - data/mappings/**
 | 
			
		||||
      - data/schemas/**
 | 
			
		||||
community_module:
 | 
			
		||||
  - changed-files:
 | 
			
		||||
    - any-glob-to-any-file:
 | 
			
		||||
      - modules/**
 | 
			
		||||
							
								
								
									
										50
									
								
								.github/workflows/api.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										50
									
								
								.github/workflows/api.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,50 +0,0 @@
 | 
			
		|||
name: Update API Data
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: read
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
    - master
 | 
			
		||||
    - develop
 | 
			
		||||
    paths:
 | 
			
		||||
    - 'keyboards/**'
 | 
			
		||||
    - 'layouts/community/**'
 | 
			
		||||
    - 'lib/python/**'
 | 
			
		||||
    - 'data/**'
 | 
			
		||||
    - '.github/workflows/api.yml'
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  api_data:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    container: ghcr.io/qmk/qmk_cli
 | 
			
		||||
 | 
			
		||||
    # protect against those who work in their fork on 'important' branches
 | 
			
		||||
    if: github.repository == 'qmk/qmk_firmware'
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - uses: actions/checkout@v4
 | 
			
		||||
      with:
 | 
			
		||||
        fetch-depth: 1
 | 
			
		||||
        persist-credentials: false
 | 
			
		||||
 | 
			
		||||
    - name: Install dependencies
 | 
			
		||||
      run: |
 | 
			
		||||
        pip3 install -r requirements-dev.txt
 | 
			
		||||
 | 
			
		||||
    - name: Generate API Data
 | 
			
		||||
      run: |
 | 
			
		||||
        qmk generate-api
 | 
			
		||||
 | 
			
		||||
    - name: Upload API Data
 | 
			
		||||
      uses: jakejarvis/s3-sync-action@master
 | 
			
		||||
      with:
 | 
			
		||||
        args: --acl public-read --follow-symlinks --delete
 | 
			
		||||
      env:
 | 
			
		||||
        AWS_S3_BUCKET: ${{ github.ref == 'refs/heads/develop' && secrets['API_SPACE_DEVELOP'] || secrets['API_SPACE_MASTER'] }}
 | 
			
		||||
        AWS_ACCESS_KEY_ID: ${{ secrets.SPACES_ACCESS_KEY }}
 | 
			
		||||
        AWS_SECRET_ACCESS_KEY: ${{ secrets.SPACES_SECRET_KEY }}
 | 
			
		||||
        AWS_S3_ENDPOINT: https://nyc3.digitaloceanspaces.com
 | 
			
		||||
        SOURCE_DIR: '.build/api_data'
 | 
			
		||||
							
								
								
									
										20
									
								
								.github/workflows/auto_approve.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/auto_approve.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,20 +0,0 @@
 | 
			
		|||
name: Automatic Approve
 | 
			
		||||
 | 
			
		||||
permissions: {}
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  schedule:
 | 
			
		||||
    - cron: "*/5 * * * *"
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  automatic_approve:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    if: github.repository == 'qmk/qmk_firmware'
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - uses: zvecr/automatic-approve-action@safe_files
 | 
			
		||||
      with:
 | 
			
		||||
        token: ${{ secrets.QMK_BOT_TOKEN }}
 | 
			
		||||
        workflows: "labeler.yml,lint.yml,docs.yml"
 | 
			
		||||
        safe_files: "keyboards/,docs/"
 | 
			
		||||
							
								
								
									
										39
									
								
								.github/workflows/auto_tag.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								.github/workflows/auto_tag.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,39 +0,0 @@
 | 
			
		|||
name: Essential files modified
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: write
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
    - master
 | 
			
		||||
    paths:
 | 
			
		||||
    - builddefs/**/*
 | 
			
		||||
    - drivers/**/*
 | 
			
		||||
    - platforms/**/*
 | 
			
		||||
    - quantum/**/*
 | 
			
		||||
    - tests/**/*
 | 
			
		||||
    - tmk_core/**/*
 | 
			
		||||
    - lib/python/**/*
 | 
			
		||||
    - util/**/*
 | 
			
		||||
    - Makefile
 | 
			
		||||
    - '*.mk'
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  tag:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    # protect against those who develop with their fork on master
 | 
			
		||||
    if: github.repository == 'qmk/qmk_firmware'
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - uses: actions/checkout@v4
 | 
			
		||||
      with:
 | 
			
		||||
        fetch-depth: 0
 | 
			
		||||
 | 
			
		||||
    - name: Bump version and push tag
 | 
			
		||||
      uses: anothrNick/github-tag-action@1.66.0
 | 
			
		||||
      env:
 | 
			
		||||
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
        DEFAULT_BUMP: 'patch'
 | 
			
		||||
							
								
								
									
										139
									
								
								.github/workflows/ci_build_major_branch.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										139
									
								
								.github/workflows/ci_build_major_branch.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,139 +0,0 @@
 | 
			
		|||
name: CI Build Major Branch
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: read
 | 
			
		||||
  actions: write
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches: [master, develop]
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
    inputs:
 | 
			
		||||
      branch:
 | 
			
		||||
        type: choice
 | 
			
		||||
        description: "Branch to build"
 | 
			
		||||
        options: [master, develop]
 | 
			
		||||
 | 
			
		||||
env:
 | 
			
		||||
  # https://docs.github.com/en/actions/learn-github-actions/usage-limits-billing-and-administration#usage-limits
 | 
			
		||||
  # We've decreased it from 20 to 15 to allow for other GHA to run unimpeded
 | 
			
		||||
  CONCURRENT_JOBS: 15
 | 
			
		||||
 | 
			
		||||
# Ensure we only have one build running at a time, cancelling any active builds if a new commit is pushed to the respective branch
 | 
			
		||||
concurrency:
 | 
			
		||||
  group: ci_build-${{ github.event.inputs.branch || github.ref_name }}
 | 
			
		||||
  cancel-in-progress: true
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  determine_concurrency:
 | 
			
		||||
    name: "Determine concurrency"
 | 
			
		||||
    if: github.repository == 'qmk/qmk_firmware'
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    container: ghcr.io/qmk/qmk_cli
 | 
			
		||||
 | 
			
		||||
    outputs:
 | 
			
		||||
      slice_length: ${{ steps.generate_slice_length.outputs.slice_length }}
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Install prerequisites
 | 
			
		||||
        run: |
 | 
			
		||||
          apt-get update
 | 
			
		||||
          apt-get install -y jq
 | 
			
		||||
 | 
			
		||||
      - name: Disable safe.directory check
 | 
			
		||||
        run: |
 | 
			
		||||
          git config --global --add safe.directory '*'
 | 
			
		||||
 | 
			
		||||
      - name: Checkout QMK Firmware
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
 | 
			
		||||
      - name: Determine concurrency
 | 
			
		||||
        id: generate_slice_length
 | 
			
		||||
        run: |
 | 
			
		||||
          target_count=$( {
 | 
			
		||||
            qmk find -km default 2>/dev/null
 | 
			
		||||
            # qmk find -km xap 2>/dev/null
 | 
			
		||||
          } | sort | uniq | wc -l)
 | 
			
		||||
          slice_length=$((target_count / ($CONCURRENT_JOBS - 1))) # Err on the side of caution
 | 
			
		||||
          echo "slice_length=$slice_length" >> $GITHUB_OUTPUT
 | 
			
		||||
 | 
			
		||||
  build_targets:
 | 
			
		||||
    name: "Compile keymap ${{ matrix.keymap }}"
 | 
			
		||||
    needs: determine_concurrency
 | 
			
		||||
    strategy:
 | 
			
		||||
      fail-fast: false
 | 
			
		||||
      matrix:
 | 
			
		||||
        keymap: [default]
 | 
			
		||||
        # keymap: [default, xap]
 | 
			
		||||
    uses: ./.github/workflows/ci_build_major_branch_keymap.yml
 | 
			
		||||
    with:
 | 
			
		||||
      branch: ${{ inputs.branch || github.ref_name }}
 | 
			
		||||
      keymap: ${{ matrix.keymap }}
 | 
			
		||||
      slice_length: ${{ needs.determine_concurrency.outputs.slice_length }}
 | 
			
		||||
    secrets: inherit
 | 
			
		||||
 | 
			
		||||
  rollup_tasks:
 | 
			
		||||
    name: "Consolidation"
 | 
			
		||||
    needs: build_targets
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Disable safe.directory check
 | 
			
		||||
        run: |
 | 
			
		||||
          git config --global --add safe.directory '*'
 | 
			
		||||
 | 
			
		||||
      - name: Checkout QMK Firmware
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
        with:
 | 
			
		||||
          fetch-depth: 0
 | 
			
		||||
 | 
			
		||||
      - name: Download firmwares
 | 
			
		||||
        uses: actions/download-artifact@v4
 | 
			
		||||
        with:
 | 
			
		||||
          pattern: firmware-*
 | 
			
		||||
          path: .
 | 
			
		||||
          merge-multiple: true
 | 
			
		||||
 | 
			
		||||
      - name: Generate index page
 | 
			
		||||
        run: |
 | 
			
		||||
          python3 -m pip install -r ./util/ci/requirements.txt
 | 
			
		||||
          ./util/ci/index_generator.py > index.html
 | 
			
		||||
          ./util/ci/firmware_list_generator.py > firmware_list.json
 | 
			
		||||
 | 
			
		||||
      - name: Upload to https://ci.qmk.fm/${{ inputs.branch || github.ref_name }}/${{ github.sha }}
 | 
			
		||||
        uses: jakejarvis/s3-sync-action@master
 | 
			
		||||
        with:
 | 
			
		||||
          args: --acl public-read --follow-symlinks --delete --exclude '*' --include 'index.html' --include 'firmware_list.json' --include '*.hex' --include '*.bin' --include '*.uf2'
 | 
			
		||||
        env:
 | 
			
		||||
          AWS_S3_BUCKET: ${{ vars.CI_QMK_FM_SPACES_BUCKET }}
 | 
			
		||||
          AWS_ACCESS_KEY_ID: ${{ secrets.CI_QMK_FM_SPACES_KEY }}
 | 
			
		||||
          AWS_SECRET_ACCESS_KEY: ${{ secrets.CI_QMK_FM_SPACES_SECRET }}
 | 
			
		||||
          AWS_REGION: ${{ vars.CI_QMK_FM_SPACES_REGION }}
 | 
			
		||||
          AWS_S3_ENDPOINT: ${{ vars.CI_QMK_FM_SPACES_ENDPOINT }}
 | 
			
		||||
          SOURCE_DIR: .
 | 
			
		||||
          DEST_DIR: ${{ inputs.branch || github.ref_name }}/${{ github.sha }}
 | 
			
		||||
 | 
			
		||||
      - name: Upload to https://ci.qmk.fm/${{ inputs.branch || github.ref_name }}/latest
 | 
			
		||||
        uses: jakejarvis/s3-sync-action@master
 | 
			
		||||
        with:
 | 
			
		||||
          args: --acl public-read --follow-symlinks --delete --exclude '*' --include 'index.html' --include 'firmware_list.json' --include '*.hex' --include '*.bin' --include '*.uf2'
 | 
			
		||||
        env:
 | 
			
		||||
          AWS_S3_BUCKET: ${{ vars.CI_QMK_FM_SPACES_BUCKET }}
 | 
			
		||||
          AWS_ACCESS_KEY_ID: ${{ secrets.CI_QMK_FM_SPACES_KEY }}
 | 
			
		||||
          AWS_SECRET_ACCESS_KEY: ${{ secrets.CI_QMK_FM_SPACES_SECRET }}
 | 
			
		||||
          AWS_REGION: ${{ vars.CI_QMK_FM_SPACES_REGION }}
 | 
			
		||||
          AWS_S3_ENDPOINT: ${{ vars.CI_QMK_FM_SPACES_ENDPOINT }}
 | 
			
		||||
          SOURCE_DIR: .
 | 
			
		||||
          DEST_DIR: ${{ inputs.branch || github.ref_name }}/latest
 | 
			
		||||
 | 
			
		||||
      - name: Check if failure marker file exists
 | 
			
		||||
        id: check_failure_marker
 | 
			
		||||
        uses: andstor/file-existence-action@v3
 | 
			
		||||
        with:
 | 
			
		||||
          files: ./.failed
 | 
			
		||||
 | 
			
		||||
      - name: Fail build if needed
 | 
			
		||||
        if: steps.check_failure_marker.outputs.files_exists == 'true'
 | 
			
		||||
        run: |
 | 
			
		||||
          # Exit with failure if the compilation stage failed
 | 
			
		||||
          exit 1
 | 
			
		||||
							
								
								
									
										181
									
								
								.github/workflows/ci_build_major_branch_keymap.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										181
									
								
								.github/workflows/ci_build_major_branch_keymap.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,181 +0,0 @@
 | 
			
		|||
name: CI Build Major Branch Keymap
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: read
 | 
			
		||||
  actions: write
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  workflow_call:
 | 
			
		||||
    inputs:
 | 
			
		||||
      branch:
 | 
			
		||||
        type: string
 | 
			
		||||
        required: true
 | 
			
		||||
      keymap:
 | 
			
		||||
        type: string
 | 
			
		||||
        required: true
 | 
			
		||||
      slice_length:
 | 
			
		||||
        type: string
 | 
			
		||||
        required: true
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  generate_targets:
 | 
			
		||||
    name: "Generate targets (${{ inputs.keymap }})"
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    container: ghcr.io/qmk/qmk_cli
 | 
			
		||||
 | 
			
		||||
    outputs:
 | 
			
		||||
      targets: ${{ steps.generate_targets.outputs.targets }}
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Install prerequisites
 | 
			
		||||
        run: |
 | 
			
		||||
          apt-get update
 | 
			
		||||
          apt-get install -y jq
 | 
			
		||||
 | 
			
		||||
      - name: Disable safe.directory check
 | 
			
		||||
        run: |
 | 
			
		||||
          git config --global --add safe.directory '*'
 | 
			
		||||
 | 
			
		||||
      - name: Checkout QMK Firmware
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
 | 
			
		||||
      - name: Generate build targets
 | 
			
		||||
        id: generate_targets
 | 
			
		||||
        run: |
 | 
			
		||||
          { # Intentionally use `shuf` here so that we share manufacturers across all build groups -- some have a lot of ARM-based boards which inherently take longer
 | 
			
		||||
            counter=0
 | 
			
		||||
            echo -n '{'
 | 
			
		||||
            qmk find -km ${{ inputs.keymap }} 2>/dev/null | sort | uniq | shuf | xargs -L${{ inputs.slice_length }} | while IFS=$'\n' read target ; do
 | 
			
		||||
                if [ $counter -gt 0 ]; then
 | 
			
		||||
                    echo -n ','
 | 
			
		||||
                fi
 | 
			
		||||
                counter=$((counter+1))
 | 
			
		||||
                printf "\"group %02d\":{" $counter
 | 
			
		||||
                echo -n '"targets":"'
 | 
			
		||||
                echo $target | tr ' ' '\n' | sort | uniq | xargs echo -n
 | 
			
		||||
                echo -n '"}'
 | 
			
		||||
            done
 | 
			
		||||
            echo -n '}'
 | 
			
		||||
          } | sed -e 's@\n@@g' > targets.json
 | 
			
		||||
 | 
			
		||||
          # Output the target keys as a variable
 | 
			
		||||
          echo "targets=$(jq -c 'keys' targets.json)" >> $GITHUB_OUTPUT
 | 
			
		||||
 | 
			
		||||
      - name: Upload targets json
 | 
			
		||||
        uses: actions/upload-artifact@v4
 | 
			
		||||
        with:
 | 
			
		||||
          name: targets-${{ inputs.keymap }}
 | 
			
		||||
          path: targets.json
 | 
			
		||||
 | 
			
		||||
  build_targets:
 | 
			
		||||
    name: "Compile ${{ matrix.target }} (${{ inputs.keymap }})"
 | 
			
		||||
    needs: generate_targets
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    container: ghcr.io/qmk/qmk_cli
 | 
			
		||||
    continue-on-error: true
 | 
			
		||||
 | 
			
		||||
    strategy:
 | 
			
		||||
      matrix:
 | 
			
		||||
        target: ${{ fromJson(needs.generate_targets.outputs.targets) }}
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Install prerequisites
 | 
			
		||||
        run: |
 | 
			
		||||
          apt-get update
 | 
			
		||||
          apt-get install -y jq
 | 
			
		||||
 | 
			
		||||
      - name: Disable safe.directory check
 | 
			
		||||
        run: |
 | 
			
		||||
          git config --global --add safe.directory '*'
 | 
			
		||||
 | 
			
		||||
      - name: Checkout QMK Firmware
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
 | 
			
		||||
      - name: Get target definitions
 | 
			
		||||
        uses: actions/download-artifact@v4
 | 
			
		||||
        with:
 | 
			
		||||
          name: targets-${{ inputs.keymap }}
 | 
			
		||||
          path: .
 | 
			
		||||
 | 
			
		||||
      - name: Deploy submodules
 | 
			
		||||
        run: |
 | 
			
		||||
          qmk git-submodule -f
 | 
			
		||||
 | 
			
		||||
      - name: Dump targets
 | 
			
		||||
        run: |
 | 
			
		||||
          jq -r '.["${{ matrix.target }}"].targets' targets.json | tr ' ' '\n' | sort
 | 
			
		||||
 | 
			
		||||
      - name: Build targets
 | 
			
		||||
        continue-on-error: true
 | 
			
		||||
        run: |
 | 
			
		||||
          export NCPUS=$(( $(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null) -1 ))
 | 
			
		||||
          qmk mass-compile -t -j $NCPUS -e DUMP_CI_METADATA=yes $(jq -r '.["${{ matrix.target }}"].targets' targets.json) || touch .failed
 | 
			
		||||
 | 
			
		||||
      - name: Upload binaries
 | 
			
		||||
        uses: actions/upload-artifact@v4
 | 
			
		||||
        with:
 | 
			
		||||
          name: firmware-${{ inputs.keymap }}-${{ matrix.target }}
 | 
			
		||||
          if-no-files-found: ignore
 | 
			
		||||
          path: |
 | 
			
		||||
            *.bin
 | 
			
		||||
            *.hex
 | 
			
		||||
            *.uf2
 | 
			
		||||
            .build/failed.*
 | 
			
		||||
            .failed
 | 
			
		||||
 | 
			
		||||
      - name: Fail build if any group failed
 | 
			
		||||
        run: |
 | 
			
		||||
          # Exit with failure if the compilation stage failed
 | 
			
		||||
          [ ! -f .failed ] || exit 1
 | 
			
		||||
 | 
			
		||||
  repack_firmware:
 | 
			
		||||
    if: always()
 | 
			
		||||
    name: "Repack artifacts"
 | 
			
		||||
    needs: build_targets
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout QMK Firmware
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
 | 
			
		||||
      - name: Download firmwares
 | 
			
		||||
        uses: actions/download-artifact@v4
 | 
			
		||||
        with:
 | 
			
		||||
          pattern: firmware-${{ inputs.keymap }}-*
 | 
			
		||||
          path: .
 | 
			
		||||
          merge-multiple: true
 | 
			
		||||
 | 
			
		||||
      - name: Upload all firmwares
 | 
			
		||||
        uses: actions/upload-artifact@v4
 | 
			
		||||
        with:
 | 
			
		||||
          name: firmware-${{ inputs.keymap }}
 | 
			
		||||
          if-no-files-found: ignore
 | 
			
		||||
          path: |
 | 
			
		||||
            *.bin
 | 
			
		||||
            *.hex
 | 
			
		||||
            *.uf2
 | 
			
		||||
            .build/failed.*
 | 
			
		||||
            .failed
 | 
			
		||||
 | 
			
		||||
      - name: Generate output logs
 | 
			
		||||
        run: |
 | 
			
		||||
          # Generate the step summary markdown
 | 
			
		||||
          ./util/ci/generate_failure_markdown.sh > $GITHUB_STEP_SUMMARY || true
 | 
			
		||||
          # Truncate to a maximum of 1MB to deal with GitHub workflow limit
 | 
			
		||||
          truncate --size='<960K' $GITHUB_STEP_SUMMARY || true
 | 
			
		||||
 | 
			
		||||
      - name: Delete temporary build artifacts
 | 
			
		||||
        uses: geekyeggo/delete-artifact@v5
 | 
			
		||||
        with:
 | 
			
		||||
          name: |
 | 
			
		||||
            firmware-${{ inputs.keymap }}-*
 | 
			
		||||
            targets-${{ inputs.keymap }}
 | 
			
		||||
 | 
			
		||||
      - name: 'CI Discord Notification'
 | 
			
		||||
        if: always() && !cancelled()
 | 
			
		||||
        working-directory: util/ci/
 | 
			
		||||
        env:
 | 
			
		||||
          DISCORD_WEBHOOK: ${{ secrets.CI_DISCORD_WEBHOOK }}
 | 
			
		||||
        run: |
 | 
			
		||||
          python3 -m pip install -r requirements.txt
 | 
			
		||||
          python3 ./discord-results.py --branch ${{ inputs.branch || github.ref_name }} --sha $(git rev-parse HEAD) --keymap ${{ inputs.keymap }} --url ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
 | 
			
		||||
							
								
								
									
										34
									
								
								.github/workflows/cli.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								.github/workflows/cli.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,34 +0,0 @@
 | 
			
		|||
name: CLI CI
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: read
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
    - master
 | 
			
		||||
    - develop
 | 
			
		||||
  pull_request:
 | 
			
		||||
    paths:
 | 
			
		||||
    - 'lib/python/**'
 | 
			
		||||
    - 'requirements.txt'
 | 
			
		||||
    - '.github/workflows/cli.yml'
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  test:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    container: ghcr.io/qmk/qmk_cli
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Disable safe.directory check
 | 
			
		||||
      run : git config --global --add safe.directory '*'
 | 
			
		||||
 | 
			
		||||
    - uses: actions/checkout@v4
 | 
			
		||||
      with:
 | 
			
		||||
        submodules: recursive
 | 
			
		||||
 | 
			
		||||
    - name: Install dependencies
 | 
			
		||||
      run: pip3 install -r requirements-dev.txt
 | 
			
		||||
    - name: Run tests
 | 
			
		||||
      run: qmk pytest
 | 
			
		||||
							
								
								
									
										37
									
								
								.github/workflows/develop_update.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										37
									
								
								.github/workflows/develop_update.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,37 +0,0 @@
 | 
			
		|||
name: Update develop after master merge
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: write
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
    - master
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  develop_update:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    if: github.repository == 'qmk/qmk_firmware'
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - uses: actions/checkout@v4
 | 
			
		||||
      with:
 | 
			
		||||
        token: ${{ secrets.QMK_BOT_TOKEN }}
 | 
			
		||||
        fetch-depth: 0
 | 
			
		||||
 | 
			
		||||
    - name: Disable automatic eol conversion
 | 
			
		||||
      run: |
 | 
			
		||||
        echo "* -text" > .git/info/attributes
 | 
			
		||||
 | 
			
		||||
    - name: Checkout develop
 | 
			
		||||
      run: |
 | 
			
		||||
        git fetch origin master develop
 | 
			
		||||
        git checkout develop
 | 
			
		||||
 | 
			
		||||
    - name: Update develop from master
 | 
			
		||||
      run: |
 | 
			
		||||
        git config --global user.name "QMK Bot"
 | 
			
		||||
        git config --global user.email "hello@qmk.fm"
 | 
			
		||||
        git merge origin/master
 | 
			
		||||
        git push origin develop
 | 
			
		||||
							
								
								
									
										65
									
								
								.github/workflows/docs.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										65
									
								
								.github/workflows/docs.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,65 +0,0 @@
 | 
			
		|||
name: Generate Docs
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: write
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
    - master
 | 
			
		||||
    paths:
 | 
			
		||||
    - 'builddefs/docsgen/**'
 | 
			
		||||
    - 'tmk_core/**'
 | 
			
		||||
    - 'quantum/**'
 | 
			
		||||
    - 'platforms/**'
 | 
			
		||||
    - 'docs/**'
 | 
			
		||||
    - '.github/workflows/docs.yml'
 | 
			
		||||
  pull_request:
 | 
			
		||||
    paths:
 | 
			
		||||
    - 'builddefs/docsgen/**'
 | 
			
		||||
    - 'docs/**'
 | 
			
		||||
    - '.github/workflows/docs.yml'
 | 
			
		||||
 | 
			
		||||
defaults:
 | 
			
		||||
  run:
 | 
			
		||||
    shell: bash
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  generate:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    container: ghcr.io/qmk/qmk_cli
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - uses: actions/checkout@v4
 | 
			
		||||
      with:
 | 
			
		||||
        fetch-depth: 1
 | 
			
		||||
 | 
			
		||||
    - name: Install dependencies
 | 
			
		||||
      run: |
 | 
			
		||||
        apt-get update && apt-get install -y rsync doxygen
 | 
			
		||||
        # install nvm
 | 
			
		||||
        touch $HOME/.bashrc
 | 
			
		||||
        wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
 | 
			
		||||
 | 
			
		||||
    - name: Install node
 | 
			
		||||
      run: |
 | 
			
		||||
        source $HOME/.bashrc
 | 
			
		||||
        nvm install 20
 | 
			
		||||
        nvm use 20
 | 
			
		||||
        corepack enable
 | 
			
		||||
 | 
			
		||||
    - name: Build docs
 | 
			
		||||
      run: |
 | 
			
		||||
        source $HOME/.bashrc
 | 
			
		||||
        nvm use 20
 | 
			
		||||
        qmk --verbose generate-docs
 | 
			
		||||
 | 
			
		||||
    - name: Deploy
 | 
			
		||||
      if: ${{ github.event_name == 'push' && github.repository == 'qmk/qmk_firmware' }}
 | 
			
		||||
      uses: JamesIves/github-pages-deploy-action@v4.7.3
 | 
			
		||||
      with:
 | 
			
		||||
          token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
          branch: gh-pages
 | 
			
		||||
          folder: .build/docs
 | 
			
		||||
          git-config-name: QMK Bot
 | 
			
		||||
          git-config-email: hello@qmk.fm
 | 
			
		||||
							
								
								
									
										43
									
								
								.github/workflows/feature_branch_update.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										43
									
								
								.github/workflows/feature_branch_update.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,43 +0,0 @@
 | 
			
		|||
name: Update feature branches after develop merge
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: write
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
    - develop
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  feature_branch_update:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    if: github.repository == 'qmk/qmk_firmware'
 | 
			
		||||
 | 
			
		||||
    strategy:
 | 
			
		||||
      matrix:
 | 
			
		||||
        branch:
 | 
			
		||||
        - xap
 | 
			
		||||
        - riot
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - uses: actions/checkout@v4
 | 
			
		||||
      with:
 | 
			
		||||
        token: ${{ secrets.QMK_BOT_TOKEN }}
 | 
			
		||||
        fetch-depth: 0
 | 
			
		||||
 | 
			
		||||
    - name: Disable automatic eol conversion
 | 
			
		||||
      run: |
 | 
			
		||||
        echo "* -text" > .git/info/attributes
 | 
			
		||||
 | 
			
		||||
    - name: Checkout branch
 | 
			
		||||
      run: |
 | 
			
		||||
        git fetch origin develop ${{ matrix.branch }}
 | 
			
		||||
        git checkout ${{ matrix.branch }}
 | 
			
		||||
 | 
			
		||||
    - name: Update branch from develop
 | 
			
		||||
      run: |
 | 
			
		||||
        git config --global user.name "QMK Bot"
 | 
			
		||||
        git config --global user.email "hello@qmk.fm"
 | 
			
		||||
        git merge origin/develop
 | 
			
		||||
        git push origin ${{ matrix.branch }}
 | 
			
		||||
							
								
								
									
										58
									
								
								.github/workflows/format.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										58
									
								
								.github/workflows/format.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,58 +0,0 @@
 | 
			
		|||
name: PR Lint Format
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: read
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  pull_request:
 | 
			
		||||
    paths:
 | 
			
		||||
    - 'drivers/**'
 | 
			
		||||
    - 'lib/arm_atsam/**'
 | 
			
		||||
    - 'lib/lib8tion/**'
 | 
			
		||||
    - 'lib/python/**'
 | 
			
		||||
    - 'modules/**'
 | 
			
		||||
    - 'platforms/**'
 | 
			
		||||
    - 'quantum/**'
 | 
			
		||||
    - 'tests/**'
 | 
			
		||||
    - 'tmk_core/**'
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  lint:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    container: ghcr.io/qmk/qmk_cli
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Disable safe.directory check
 | 
			
		||||
      run : git config --global --add safe.directory '*'
 | 
			
		||||
 | 
			
		||||
    - uses: actions/checkout@v4
 | 
			
		||||
      with:
 | 
			
		||||
        fetch-depth: 0
 | 
			
		||||
 | 
			
		||||
    - name: Install dependencies
 | 
			
		||||
      run: |
 | 
			
		||||
        pip3 install -r requirements-dev.txt
 | 
			
		||||
 | 
			
		||||
    - name: Get changed files
 | 
			
		||||
      id: file_changes
 | 
			
		||||
      uses: tj-actions/changed-files@v46
 | 
			
		||||
      with:
 | 
			
		||||
        use_rest_api: true
 | 
			
		||||
 | 
			
		||||
    - name: Run qmk formatters
 | 
			
		||||
      shell: 'bash {0}'
 | 
			
		||||
      run: |
 | 
			
		||||
        echo '${{ steps.file_changes.outputs.added_files}}' '${{ steps.file_changes.outputs.modified_files}}' > ~/files_changed.txt
 | 
			
		||||
        qmk format-c --core-only $(< ~/files_changed.txt) || true
 | 
			
		||||
        qmk format-python $(< ~/files_changed.txt) || true
 | 
			
		||||
        qmk format-text $(< ~/files_changed.txt) || true
 | 
			
		||||
 | 
			
		||||
    - name: Fail when formatting required
 | 
			
		||||
      run: |
 | 
			
		||||
        git diff
 | 
			
		||||
        for file in $(git diff --name-only); do
 | 
			
		||||
          echo "File '${file}' Requires Formatting"
 | 
			
		||||
          echo "::error file=${file}::Requires Formatting"
 | 
			
		||||
        done
 | 
			
		||||
        test -z "$(git diff --name-only)"
 | 
			
		||||
							
								
								
									
										59
									
								
								.github/workflows/format_push.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										59
									
								
								.github/workflows/format_push.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,59 +0,0 @@
 | 
			
		|||
name: Lint Format
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: read
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
    - master
 | 
			
		||||
    - develop
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  lint:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    container: ghcr.io/qmk/qmk_cli
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Disable safe.directory check
 | 
			
		||||
      run : git config --global --add safe.directory '*'
 | 
			
		||||
 | 
			
		||||
    - uses: actions/checkout@v4
 | 
			
		||||
      with:
 | 
			
		||||
        fetch-depth: 0
 | 
			
		||||
 | 
			
		||||
    - name: Disable automatic eol conversion
 | 
			
		||||
      run: |
 | 
			
		||||
        echo "* -text" > .git/info/attributes
 | 
			
		||||
 | 
			
		||||
    - name: Install dependencies
 | 
			
		||||
      run: |
 | 
			
		||||
        pip3 install -r requirements-dev.txt
 | 
			
		||||
 | 
			
		||||
    - name: Run qmk formatters
 | 
			
		||||
      shell: 'bash {0}'
 | 
			
		||||
      run: |
 | 
			
		||||
        qmk format-c -a
 | 
			
		||||
        qmk format-python -a
 | 
			
		||||
        qmk format-text -a
 | 
			
		||||
        git diff
 | 
			
		||||
 | 
			
		||||
    - uses: rlespinasse/github-slug-action@v5
 | 
			
		||||
 | 
			
		||||
    - name: Become QMK Bot
 | 
			
		||||
      run: |
 | 
			
		||||
        git config user.name 'QMK Bot'
 | 
			
		||||
        git config user.email 'hello@qmk.fm'
 | 
			
		||||
 | 
			
		||||
    - name: Create Pull Request
 | 
			
		||||
      uses: peter-evans/create-pull-request@v7
 | 
			
		||||
      if: ${{ github.repository == 'qmk/qmk_firmware'}}
 | 
			
		||||
      with:
 | 
			
		||||
        token: ${{ secrets.QMK_BOT_TOKEN }}
 | 
			
		||||
        delete-branch: true
 | 
			
		||||
        branch: bugfix/format_${{ env.GITHUB_REF_SLUG }}
 | 
			
		||||
        author: QMK Bot <hello@qmk.fm>
 | 
			
		||||
        committer: QMK Bot <hello@qmk.fm>
 | 
			
		||||
        commit-message: Format code according to conventions
 | 
			
		||||
        title: '[CI] Format code according to conventions'
 | 
			
		||||
							
								
								
									
										13
									
								
								.github/workflows/labeler.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								.github/workflows/labeler.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,13 +0,0 @@
 | 
			
		|||
name: "Pull Request Labeler"
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
- pull_request_target
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  triage:
 | 
			
		||||
    permissions:
 | 
			
		||||
      contents: read
 | 
			
		||||
      pull-requests: write
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
    - uses: actions/labeler@v5
 | 
			
		||||
							
								
								
									
										87
									
								
								.github/workflows/lint.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										87
									
								
								.github/workflows/lint.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,87 +0,0 @@
 | 
			
		|||
name: PR Lint keyboards
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: read
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  pull_request:
 | 
			
		||||
    paths:
 | 
			
		||||
    - 'keyboards/**'
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  lint:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    container: ghcr.io/qmk/qmk_cli
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Disable safe.directory check
 | 
			
		||||
      run : git config --global --add safe.directory '*'
 | 
			
		||||
 | 
			
		||||
    - uses: actions/checkout@v4
 | 
			
		||||
      with:
 | 
			
		||||
        fetch-depth: 0
 | 
			
		||||
 | 
			
		||||
    - name: Install dependencies
 | 
			
		||||
      run: pip3 install -r requirements-dev.txt
 | 
			
		||||
 | 
			
		||||
    - name: Get changed files
 | 
			
		||||
      id: file_changes
 | 
			
		||||
      uses: tj-actions/changed-files@v46
 | 
			
		||||
      with:
 | 
			
		||||
        use_rest_api: true
 | 
			
		||||
 | 
			
		||||
    - name: Print info
 | 
			
		||||
      run: |
 | 
			
		||||
        git rev-parse --short HEAD
 | 
			
		||||
        echo ${{ github.event.pull_request.base.sha }}
 | 
			
		||||
        echo '${{ steps.file_changes.outputs.all_changed_files}}'
 | 
			
		||||
 | 
			
		||||
    - name: Run qmk lint
 | 
			
		||||
      if: always()
 | 
			
		||||
      shell: 'bash {0}'
 | 
			
		||||
      run: |
 | 
			
		||||
        QMK_CHANGES=$(echo -e '${{ steps.file_changes.outputs.all_changed_files}}' | sed 's/ /\n/g')
 | 
			
		||||
        QMK_KEYBOARDS=$(qmk list-keyboards)
 | 
			
		||||
 | 
			
		||||
        exit_code=0
 | 
			
		||||
 | 
			
		||||
        for KB in $QMK_KEYBOARDS; do
 | 
			
		||||
          KEYBOARD_CHANGES=$(echo "$QMK_CHANGES" | grep -E '^(keyboards/'${KB}'/)')
 | 
			
		||||
          if [[ -z "$KEYBOARD_CHANGES" ]]; then
 | 
			
		||||
            # skip as no changes for this keyboard
 | 
			
		||||
            continue
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
          KEYMAP_ONLY=$(echo "$KEYBOARD_CHANGES" | grep -cv /keymaps/)
 | 
			
		||||
          if [[ $KEYMAP_ONLY -gt 0 ]]; then
 | 
			
		||||
            echo "linting ${KB}"
 | 
			
		||||
 | 
			
		||||
            qmk lint --keyboard ${KB} && qmk info -l --keyboard ${KB}
 | 
			
		||||
            exit_code=$(($exit_code + $?))
 | 
			
		||||
          fi
 | 
			
		||||
        done
 | 
			
		||||
 | 
			
		||||
        qmk format-text ${{ steps.file_changes.outputs.all_changed_files}} || true
 | 
			
		||||
        for file in ${{ steps.file_changes.outputs.all_changed_files}}; do
 | 
			
		||||
          if [[ -f $file ]]; then
 | 
			
		||||
            if ! git diff --quiet $file; then
 | 
			
		||||
              echo "File '${file}' Requires Formatting"
 | 
			
		||||
              echo "::error file=${file}::Requires Formatting"
 | 
			
		||||
              exit_code=$(($exit_code + 1))
 | 
			
		||||
            fi
 | 
			
		||||
          fi
 | 
			
		||||
        done
 | 
			
		||||
 | 
			
		||||
        if [[ $exit_code -gt 255 ]]; then
 | 
			
		||||
            exit 255
 | 
			
		||||
        fi
 | 
			
		||||
        exit $exit_code
 | 
			
		||||
 | 
			
		||||
    - name: Verify keyboard aliases
 | 
			
		||||
      if: always()
 | 
			
		||||
      shell: 'bash {0}'
 | 
			
		||||
      run: |
 | 
			
		||||
        git reset --hard
 | 
			
		||||
        git clean -xfd
 | 
			
		||||
        qmk ci-validate-aliases
 | 
			
		||||
							
								
								
									
										36
									
								
								.github/workflows/regen.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								.github/workflows/regen.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,36 +0,0 @@
 | 
			
		|||
name: PR Regenerate Files
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: read
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  pull_request:
 | 
			
		||||
    paths:
 | 
			
		||||
    - 'data/constants/**'
 | 
			
		||||
    - 'lib/python/**'
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  regen:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    container: ghcr.io/qmk/qmk_cli
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Disable safe.directory check
 | 
			
		||||
      run : git config --global --add safe.directory '*'
 | 
			
		||||
 | 
			
		||||
    - uses: actions/checkout@v4
 | 
			
		||||
 | 
			
		||||
    - name: Run qmk generators
 | 
			
		||||
      run: |
 | 
			
		||||
        util/regen.sh
 | 
			
		||||
        git diff
 | 
			
		||||
 | 
			
		||||
    - name: Fail when regeneration required
 | 
			
		||||
      run: |
 | 
			
		||||
        git diff
 | 
			
		||||
        for file in $(git diff --name-only); do
 | 
			
		||||
          echo "File '${file}' Requires Regeneration"
 | 
			
		||||
          echo "::error file=${file}::Requires Regeneration"
 | 
			
		||||
        done
 | 
			
		||||
        test -z "$(git diff --name-only)"
 | 
			
		||||
							
								
								
									
										46
									
								
								.github/workflows/regen_push.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										46
									
								
								.github/workflows/regen_push.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,46 +0,0 @@
 | 
			
		|||
name: Regenerate Files
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: write
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
    - master
 | 
			
		||||
    - develop
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  regen:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    container: ghcr.io/qmk/qmk_cli
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Disable safe.directory check
 | 
			
		||||
      run : git config --global --add safe.directory '*'
 | 
			
		||||
 | 
			
		||||
    - uses: actions/checkout@v4
 | 
			
		||||
 | 
			
		||||
    - name: Run qmk generators
 | 
			
		||||
      run: |
 | 
			
		||||
        util/regen.sh
 | 
			
		||||
        git diff
 | 
			
		||||
 | 
			
		||||
    - uses: rlespinasse/github-slug-action@v5
 | 
			
		||||
 | 
			
		||||
    - name: Become QMK Bot
 | 
			
		||||
      run: |
 | 
			
		||||
        git config user.name 'QMK Bot'
 | 
			
		||||
        git config user.email 'hello@qmk.fm'
 | 
			
		||||
 | 
			
		||||
    - name: Create Pull Request
 | 
			
		||||
      uses: peter-evans/create-pull-request@v7
 | 
			
		||||
      if: ${{ github.repository == 'qmk/qmk_firmware'}}
 | 
			
		||||
      with:
 | 
			
		||||
        token: ${{ secrets.QMK_BOT_TOKEN }}
 | 
			
		||||
        delete-branch: true
 | 
			
		||||
        branch: bugfix/regen_${{ env.GITHUB_REF_SLUG }}
 | 
			
		||||
        author: QMK Bot <hello@qmk.fm>
 | 
			
		||||
        committer: QMK Bot <hello@qmk.fm>
 | 
			
		||||
        commit-message: Regenerate Files
 | 
			
		||||
        title: '[CI] Regenerate Files'
 | 
			
		||||
							
								
								
									
										66
									
								
								.github/workflows/stale.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										66
									
								
								.github/workflows/stale.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,66 +0,0 @@
 | 
			
		|||
name: 'Close stale issues and PRs'
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  issues: write
 | 
			
		||||
  pull-requests: write
 | 
			
		||||
  actions: write
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  schedule:
 | 
			
		||||
    - cron: '30 1 * * *'
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  stale:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/stale@main
 | 
			
		||||
        with:
 | 
			
		||||
          repo-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
 | 
			
		||||
          remove-stale-when-updated: true
 | 
			
		||||
          exempt-draft-pr: true
 | 
			
		||||
          ascending: true
 | 
			
		||||
          operations-per-run: 150
 | 
			
		||||
 | 
			
		||||
          stale-issue-label: stale
 | 
			
		||||
          days-before-issue-stale: 90
 | 
			
		||||
          days-before-issue-close: 30
 | 
			
		||||
          exempt-issue-labels: bug,in progress,on hold,discussion,to do
 | 
			
		||||
 | 
			
		||||
          stale-issue-message: >
 | 
			
		||||
            This issue has been automatically marked as stale because it has not had activity in the
 | 
			
		||||
            last 90 days. It will be closed in the next 30 days unless it is tagged properly or other activity
 | 
			
		||||
            occurs.
 | 
			
		||||
 | 
			
		||||
            For maintainers: Please label with `bug`, `in progress`, `on hold`, `discussion` or `to do` to prevent
 | 
			
		||||
            the issue from being re-flagged.
 | 
			
		||||
 | 
			
		||||
          close-issue-message: >
 | 
			
		||||
            This issue has been automatically closed because it has not had activity in the last 30 days.
 | 
			
		||||
            If this issue is still valid, re-open the issue and let us know.
 | 
			
		||||
 | 
			
		||||
            // [stale-action-closed]
 | 
			
		||||
 | 
			
		||||
          stale-pr-label: stale
 | 
			
		||||
          days-before-pr-stale: 45
 | 
			
		||||
          days-before-pr-close: 30
 | 
			
		||||
          exempt-pr-labels: bug,awaiting review,breaking_change,in progress,on hold,needs-core-wireless,crippled-firmware
 | 
			
		||||
 | 
			
		||||
          stale-pr-message: >
 | 
			
		||||
            Thank you for your contribution!
 | 
			
		||||
 | 
			
		||||
            This pull request has been automatically marked as stale because it has not had
 | 
			
		||||
            activity in the last 45 days. It will be closed in 30 days if no further activity occurs.
 | 
			
		||||
            Please feel free to give a status update now, or re-open when it's ready.
 | 
			
		||||
 | 
			
		||||
            For maintainers: Please label with `bug`, `awaiting review`, `breaking_change`, `in progress`, or `on hold`
 | 
			
		||||
            to prevent the issue from being re-flagged.
 | 
			
		||||
 | 
			
		||||
          close-pr-message: >
 | 
			
		||||
            Thank you for your contribution!
 | 
			
		||||
 | 
			
		||||
            This pull request has been automatically closed because it has not had activity in the last 30 days.
 | 
			
		||||
            Please feel free to give a status update now, ping for review, or re-open when it's ready.
 | 
			
		||||
 | 
			
		||||
            // [stale-action-closed]
 | 
			
		||||
							
								
								
									
										35
									
								
								.github/workflows/unit_test.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								.github/workflows/unit_test.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,35 +0,0 @@
 | 
			
		|||
name: Unit Tests
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: read
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
    - master
 | 
			
		||||
    - develop
 | 
			
		||||
  pull_request:
 | 
			
		||||
    paths:
 | 
			
		||||
    - 'builddefs/**'
 | 
			
		||||
    - 'quantum/**'
 | 
			
		||||
    - 'platforms/**'
 | 
			
		||||
    - 'tmk_core/**'
 | 
			
		||||
    - 'tests/**'
 | 
			
		||||
    - '*.mk'
 | 
			
		||||
    - 'Makefile'
 | 
			
		||||
    - '.github/workflows/unit_test.yml'
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  test:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    container: ghcr.io/qmk/qmk_cli
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - uses: actions/checkout@v4
 | 
			
		||||
      with:
 | 
			
		||||
        submodules: recursive
 | 
			
		||||
    - name: Install dependencies
 | 
			
		||||
      run: pip3 install -r requirements-dev.txt
 | 
			
		||||
    - name: Run tests
 | 
			
		||||
      run: qmk test-c
 | 
			
		||||
							
								
								
									
										147
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										147
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,122 +1,67 @@
 | 
			
		|||
# Junk files
 | 
			
		||||
*.bak
 | 
			
		||||
*.swp
 | 
			
		||||
*~
 | 
			
		||||
.DS_Store
 | 
			
		||||
._*
 | 
			
		||||
 | 
			
		||||
# Merge files
 | 
			
		||||
*.orig
 | 
			
		||||
*.rej
 | 
			
		||||
 | 
			
		||||
# Build artifacts
 | 
			
		||||
.clang_complete
 | 
			
		||||
.build/
 | 
			
		||||
.dep
 | 
			
		||||
*.o
 | 
			
		||||
*.bin
 | 
			
		||||
*.eep
 | 
			
		||||
*.elf
 | 
			
		||||
*.hex
 | 
			
		||||
*.qmk
 | 
			
		||||
!util/bootloader.hex
 | 
			
		||||
!quantum/tools/eeprom_reset.hex
 | 
			
		||||
*.log
 | 
			
		||||
*.lss
 | 
			
		||||
*.lst
 | 
			
		||||
*.map
 | 
			
		||||
*.o
 | 
			
		||||
*.a
 | 
			
		||||
*.so
 | 
			
		||||
*.dylib
 | 
			
		||||
*.dll
 | 
			
		||||
*.la
 | 
			
		||||
*.stackdump
 | 
			
		||||
*.sym
 | 
			
		||||
index.html
 | 
			
		||||
firmware_list.json
 | 
			
		||||
 | 
			
		||||
# QMK-specific
 | 
			
		||||
api_data/v1
 | 
			
		||||
*.swp
 | 
			
		||||
tags
 | 
			
		||||
*~
 | 
			
		||||
build/
 | 
			
		||||
.build/
 | 
			
		||||
*.bak
 | 
			
		||||
.vagrant/
 | 
			
		||||
quantum/version.h
 | 
			
		||||
*.bin
 | 
			
		||||
*.eep
 | 
			
		||||
*.hex
 | 
			
		||||
*.qmk
 | 
			
		||||
*.uf2
 | 
			
		||||
 | 
			
		||||
# DD config at wrong location
 | 
			
		||||
/keyboards/**/keymaps/*/info.json
 | 
			
		||||
/keyboards/**/keymaps/*/keyboard.json
 | 
			
		||||
 | 
			
		||||
# Old-style QMK Makefiles
 | 
			
		||||
/keyboards/**/Makefile
 | 
			
		||||
 | 
			
		||||
# kbfirmware....
 | 
			
		||||
/keyboards/**/kb.h
 | 
			
		||||
/keyboards/**/kb.c
 | 
			
		||||
.idea/
 | 
			
		||||
CMakeLists.txt
 | 
			
		||||
cmake-build-debug
 | 
			
		||||
.DS_STORE
 | 
			
		||||
/util/wsl_downloaded
 | 
			
		||||
/util/win_downloaded
 | 
			
		||||
/keyboards/*/Makefile
 | 
			
		||||
/keyboards/*/*/Makefile
 | 
			
		||||
/keyboards/*/*/*/Makefile
 | 
			
		||||
/keyboards/*/*/*/*/Makefile
 | 
			
		||||
/keyboards/*/*/*/*/*/Makefile
 | 
			
		||||
/keyboards/*/keymaps/Makefile
 | 
			
		||||
/keyboards/*/*/keymaps/Makefile
 | 
			
		||||
/keyboards/*/*/*/keymaps/Makefile
 | 
			
		||||
/keyboards/*/*/*/*/keymaps/Makefile
 | 
			
		||||
/keyboards/*/*/*/*/*/keymaps/Makefile
 | 
			
		||||
 | 
			
		||||
# Eclipse/PyCharm/Other IDE Settings
 | 
			
		||||
*.iml
 | 
			
		||||
.browse.VC.db*
 | 
			
		||||
.cproject
 | 
			
		||||
.idea
 | 
			
		||||
.idea/
 | 
			
		||||
.project
 | 
			
		||||
.settings/
 | 
			
		||||
 | 
			
		||||
# ?
 | 
			
		||||
.dep
 | 
			
		||||
.history/
 | 
			
		||||
build/
 | 
			
		||||
cmake-build-debug
 | 
			
		||||
CMakeLists.txt
 | 
			
		||||
*.pdf
 | 
			
		||||
 | 
			
		||||
.idea
 | 
			
		||||
.browse.VC.db*
 | 
			
		||||
*.stackdump
 | 
			
		||||
util/Win_Check_Output.txt
 | 
			
		||||
# Let these ones be user specific, since we have so many different configurations
 | 
			
		||||
*.code-workspace
 | 
			
		||||
.stfolder
 | 
			
		||||
.tags
 | 
			
		||||
.vscode/c_cpp_properties.json
 | 
			
		||||
.vscode/ipch/
 | 
			
		||||
.vscode/last.sql
 | 
			
		||||
.vscode/launch.json
 | 
			
		||||
.vscode/tasks.json
 | 
			
		||||
.vscode/last.sql
 | 
			
		||||
.vscode/temp.sql
 | 
			
		||||
tags
 | 
			
		||||
.stfolder
 | 
			
		||||
 | 
			
		||||
# Ignore image/font files
 | 
			
		||||
*.bmp
 | 
			
		||||
*.wbmp
 | 
			
		||||
*.gif
 | 
			
		||||
*.jpg
 | 
			
		||||
*.jpeg
 | 
			
		||||
# ignore image files
 | 
			
		||||
*.png
 | 
			
		||||
*.apng
 | 
			
		||||
*.mng
 | 
			
		||||
*.svg
 | 
			
		||||
*.webp
 | 
			
		||||
*.webm
 | 
			
		||||
*.avi
 | 
			
		||||
*.mp4
 | 
			
		||||
*.mpeg
 | 
			
		||||
*.ttf
 | 
			
		||||
*.otf
 | 
			
		||||
*.jpg
 | 
			
		||||
*.gif
 | 
			
		||||
 | 
			
		||||
# Things Travis sees
 | 
			
		||||
/.vs
 | 
			
		||||
id_rsa_*
 | 
			
		||||
# Do not ignore MiniDox left/right hand eeprom files
 | 
			
		||||
!keyboards/minidox/*.eep
 | 
			
		||||
 | 
			
		||||
# things travis sees
 | 
			
		||||
secrets.tar
 | 
			
		||||
 | 
			
		||||
# Python things
 | 
			
		||||
__pycache__
 | 
			
		||||
.python-version
 | 
			
		||||
.venv
 | 
			
		||||
 | 
			
		||||
# Prerequisites for updating ChibiOS
 | 
			
		||||
/util/fmpp*
 | 
			
		||||
 | 
			
		||||
# Allow to exist but don't include it in the repo
 | 
			
		||||
user_song_list.h
 | 
			
		||||
 | 
			
		||||
# clangd
 | 
			
		||||
compile_commands.json
 | 
			
		||||
.clangd/
 | 
			
		||||
.cache/
 | 
			
		||||
 | 
			
		||||
# VIA(L) files that don't belong in QMK repo
 | 
			
		||||
via*.json
 | 
			
		||||
/keyboards/**/keymaps/via/*
 | 
			
		||||
/keyboards/**/keymaps/vial/*
 | 
			
		||||
id_rsa_*
 | 
			
		||||
/.vs
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										23
									
								
								.gitmodules
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								.gitmodules
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,27 +1,12 @@
 | 
			
		|||
[submodule "lib/chibios"]
 | 
			
		||||
	path = lib/chibios
 | 
			
		||||
	url = https://github.com/qmk/ChibiOS
 | 
			
		||||
	branch = master
 | 
			
		||||
[submodule "lib/chibios-contrib"]
 | 
			
		||||
	path = lib/chibios-contrib
 | 
			
		||||
	url = https://github.com/qmk/ChibiOS-Contrib
 | 
			
		||||
	branch = master
 | 
			
		||||
[submodule "lib/ugfx"]
 | 
			
		||||
	path = lib/ugfx
 | 
			
		||||
	url = https://github.com/qmk/uGFX
 | 
			
		||||
[submodule "lib/googletest"]
 | 
			
		||||
	path = lib/googletest
 | 
			
		||||
	url = https://github.com/qmk/googletest
 | 
			
		||||
[submodule "lib/lufa"]
 | 
			
		||||
	path = lib/lufa
 | 
			
		||||
	url = https://github.com/qmk/lufa
 | 
			
		||||
[submodule "lib/vusb"]
 | 
			
		||||
	path = lib/vusb
 | 
			
		||||
	url = https://github.com/qmk/v-usb
 | 
			
		||||
[submodule "lib/printf"]
 | 
			
		||||
	path = lib/printf
 | 
			
		||||
	url = https://github.com/qmk/printf
 | 
			
		||||
[submodule "lib/pico-sdk"]
 | 
			
		||||
	path = lib/pico-sdk
 | 
			
		||||
	url = https://github.com/qmk/pico-sdk.git
 | 
			
		||||
[submodule "lib/lvgl"]
 | 
			
		||||
	path = lib/lvgl
 | 
			
		||||
	url = https://github.com/qmk/lvgl.git
 | 
			
		||||
	branch = release/v8.2
 | 
			
		||||
	url = https://github.com/google/googletest
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										41
									
								
								.travis.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								.travis.yml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
os: linux
 | 
			
		||||
dist: trusty
 | 
			
		||||
sudo: required
 | 
			
		||||
group: edge
 | 
			
		||||
language: c
 | 
			
		||||
branches:
 | 
			
		||||
  except:
 | 
			
		||||
    - /^.*-automated-build$/
 | 
			
		||||
    - /^[0-9]+\.[0-9]+\.[0-9]+/
 | 
			
		||||
env:
 | 
			
		||||
  global:
 | 
			
		||||
  - secure: vBTSL34BDPxDilKUuTXqU4CJ26Pv5hogD2nghatkxSQkI1/jbdnLj/DQdPUrMJFDIY6TK3AltsBx72MaMsLQ1JO/Ou24IeHINHXzUC1FlS9yQa48cpxnhX5kzXNyGs3oa0qaFbvnr7RgYRWtmD52n4bIZuSuW+xpBv05x2OCizdT2ZonH33nATaHGFasxROm4qYZ241VfzcUv766V6RVHgL4x9V08warugs+RENVkfzxxwhk3NmkrISabze0gSVJLHBPHxroZC6EUcf/ocobcuDrCwFqtEt90i7pNIAFUE7gZsN2uE75LmpzAWin21G7lLPcPL2k4FJVd8an1HiP2WmscJU6U89fOfMb2viObnKcCzebozBCmKGtHEuXZo9FcReOx49AnQSpmESJGs+q2dL/FApkTjQiyT4J6O5dJpoww0/r57Wx0cmmqjETKBb5rSgXM51Etk3wO09mvcPHsEwrT7qH8r9XWdyCDoEn7FCLX3/LYnf/D4SmZ633YPl5gv3v9XEwxR5+04akjgnvWDSNIaDbWBdxHNb7l4pMc+WR1bwCyMyA7KXj0RrftEGOrm9ZRLe6BkbT4cycA+j77nbPOMcyZChliV9pPQos+4TOJoTzcK2L8yWVoY409aDNVuAjdP6Yum0R2maBGl/etLmIMpJC35C5/lZ+dUNjJAM=
 | 
			
		||||
before_install:
 | 
			
		||||
  - wget http://www.atmel.com/images/avr8-gnu-toolchain-3.5.4.1709-linux.any.x86_64.tar.gz || wget http://qmk.fm/avr8-gnu-toolchain-3.5.4.1709-linux.any.x86_64.tar.gz
 | 
			
		||||
install:
 | 
			
		||||
  - tar -zxf avr8-gnu-toolchain-3.5.4.1709-linux.any.x86_64.tar.gz
 | 
			
		||||
  - export PATH="$PATH:$TRAVIS_BUILD_DIR/avr8-gnu-toolchain-linux_x86_64/bin"
 | 
			
		||||
before_script:
 | 
			
		||||
  - avr-gcc --version
 | 
			
		||||
script:
 | 
			
		||||
- make test:all AUTOGEN=false
 | 
			
		||||
- bash util/travis_build.sh
 | 
			
		||||
addons:
 | 
			
		||||
  apt:
 | 
			
		||||
    packages:
 | 
			
		||||
    - dfu-programmer
 | 
			
		||||
    - pandoc
 | 
			
		||||
    - gcc-arm-none-eabi
 | 
			
		||||
    - binutils-arm-none-eabi
 | 
			
		||||
    - libnewlib-arm-none-eabi
 | 
			
		||||
    - diffutils
 | 
			
		||||
    - dos2unix
 | 
			
		||||
after_success: 
 | 
			
		||||
  bash util/travis_compiled_push.sh
 | 
			
		||||
notifications:
 | 
			
		||||
  webhooks:
 | 
			
		||||
    urls:
 | 
			
		||||
      - https://webhooks.gitter.im/e/afce403d65f143dfac09
 | 
			
		||||
    on_success: always  # options: [always|never|change] default: always
 | 
			
		||||
    on_failure: always  # options: [always|never|change] default: always
 | 
			
		||||
    on_start: never     # options: [always|never|change] default: always
 | 
			
		||||
							
								
								
									
										6
									
								
								.vscode/extensions.json
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.vscode/extensions.json
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,10 +1,6 @@
 | 
			
		|||
// Suggested extensions
 | 
			
		||||
{
 | 
			
		||||
  "recommendations": [
 | 
			
		||||
    "EditorConfig.EditorConfig",
 | 
			
		||||
    "xaver.clang-format",
 | 
			
		||||
    "llvm-vs-code-extensions.vscode-clangd",
 | 
			
		||||
    "bierner.github-markdown-preview",
 | 
			
		||||
    "donjayamanne.git-extension-pack"
 | 
			
		||||
    "EditorConfig.EditorConfig"
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										49
									
								
								.vscode/settings.json
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										49
									
								
								.vscode/settings.json
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -5,53 +5,12 @@
 | 
			
		|||
    // Configure glob patterns for excluding files and folders.
 | 
			
		||||
    "files.exclude": {
 | 
			
		||||
        "**/.build": true,
 | 
			
		||||
        "**/*.hex": true,
 | 
			
		||||
        "**/*.bin": true,
 | 
			
		||||
        "**/*.uf2": true
 | 
			
		||||
        "**/*.hex": true
 | 
			
		||||
    },
 | 
			
		||||
    "files.associations": {
 | 
			
		||||
        // QMK Filetypes
 | 
			
		||||
        "keyboard.json": "jsonc",
 | 
			
		||||
        "info.json": "jsonc",
 | 
			
		||||
        "keymap.json": "jsonc",
 | 
			
		||||
        "qmk.json": "jsonc",
 | 
			
		||||
        "qmk_module.json": "jsonc",
 | 
			
		||||
        // Standard filetypes
 | 
			
		||||
        "*.h": "c",
 | 
			
		||||
        "*.c": "c",
 | 
			
		||||
        "*.inc": "c",
 | 
			
		||||
        "*.cpp": "cpp",
 | 
			
		||||
        "*.hpp": "cpp",
 | 
			
		||||
        "xstddef": "c",
 | 
			
		||||
        "type_traits": "c",
 | 
			
		||||
        "utility": "c",
 | 
			
		||||
        "ranges": "c"
 | 
			
		||||
    },
 | 
			
		||||
    "[markdown]": {
 | 
			
		||||
        "editor.trimAutoWhitespace": false,
 | 
			
		||||
        "files.trimTrailingWhitespace": false
 | 
			
		||||
    },
 | 
			
		||||
    "python.formatting.provider": "yapf",
 | 
			
		||||
    "[json]": {
 | 
			
		||||
        "editor.formatOnSave": false
 | 
			
		||||
    },
 | 
			
		||||
    "clangd.arguments": ["--header-insertion=never"],
 | 
			
		||||
    "json.schemas": [
 | 
			
		||||
        {
 | 
			
		||||
            "fileMatch": ["qmk.json"],
 | 
			
		||||
            "url": "./data/schemas/user_repo_v1_1.jsonschema"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "fileMatch": ["qmk_module.json"],
 | 
			
		||||
            "url": "./data/schemas/community_module.jsonschema"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "fileMatch": ["keyboard.json", "info.json"],
 | 
			
		||||
            "url": "./data/schemas/keyboard.jsonschema"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "fileMatch": ["keymap.json"],
 | 
			
		||||
            "url": "./data/schemas/keymap.jsonschema"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
        "*.hpp": "cpp"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								CODE_OF_CONDUCT.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								CODE_OF_CONDUCT.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
# Code Of Conduct
 | 
			
		||||
 | 
			
		||||
QMK strives to be an inclusive and tolerant community. We welcome participation from anyone regardless of age, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, political belief, race, religion, or sexual identity and orientation. 
 | 
			
		||||
 | 
			
		||||
> “A gentle word turns away wrath, but a harsh word stirs up anger.”
 | 
			
		||||
 | 
			
		||||
Our users, contributors, and collaborators are expected to treat each other with respect, to assume good intentions, and to gently correct, where possible, rather than react with escalation. Some examples of behavior we will not tolerate include, but is not limited to:
 | 
			
		||||
 | 
			
		||||
* The use of sexualized language or imagery
 | 
			
		||||
* Unwelcome advances, sexual or otherwise
 | 
			
		||||
* Insults or derogatory comments, or personal or political attacks
 | 
			
		||||
* Publishing others’ private information without explicit permission
 | 
			
		||||
* Other conduct which could reasonably be considered inappropriate in a professional setting
 | 
			
		||||
 | 
			
		||||
If someone is violating this Code of Conduct you may email hello@qmk.fm to bring your concern to the Members. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. 
 | 
			
		||||
							
								
								
									
										28
									
								
								Dockerfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								Dockerfile
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
FROM debian:jessie
 | 
			
		||||
MAINTAINER Erik Dasque <erik@frenchguys.com>
 | 
			
		||||
 | 
			
		||||
RUN apt-get update && apt-get install --no-install-recommends -y build-essential \
 | 
			
		||||
    gcc \
 | 
			
		||||
    unzip \
 | 
			
		||||
    wget \
 | 
			
		||||
    zip \
 | 
			
		||||
    gcc-avr \
 | 
			
		||||
    binutils-avr \
 | 
			
		||||
    avr-libc \
 | 
			
		||||
    dfu-programmer \
 | 
			
		||||
    dfu-util \
 | 
			
		||||
    gcc-arm-none-eabi \
 | 
			
		||||
    binutils-arm-none-eabi \
 | 
			
		||||
    libnewlib-arm-none-eabi \
 | 
			
		||||
    git \
 | 
			
		||||
    software-properties-common \
 | 
			
		||||
    avrdude \
 | 
			
		||||
    && rm -rf /var/lib/apt/lists/*
 | 
			
		||||
 | 
			
		||||
ENV keyboard=ergodox
 | 
			
		||||
ENV subproject=ez
 | 
			
		||||
ENV keymap=default
 | 
			
		||||
 | 
			
		||||
VOLUME /qmk
 | 
			
		||||
WORKDIR /qmk
 | 
			
		||||
CMD make clean ; make keyboard=${keyboard} subproject=${subproject} keymap=${keymap}
 | 
			
		||||
							
								
								
									
										266
									
								
								Doxyfile
									
										
									
									
									
								
							
							
						
						
									
										266
									
								
								Doxyfile
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,266 +0,0 @@
 | 
			
		|||
# Doxyfile 1.8.14
 | 
			
		||||
 | 
			
		||||
# This file describes the settings to be used by the documentation system
 | 
			
		||||
# doxygen (www.doxygen.org) for qmk_firmware (github.com/qmk/qmk_firmware)
 | 
			
		||||
#
 | 
			
		||||
# All text after a double hash (##) is considered a comment and is placed in
 | 
			
		||||
# front of the TAG it is preceding.
 | 
			
		||||
#
 | 
			
		||||
# All text after a single hash (#) is considered a comment and will be ignored.
 | 
			
		||||
# The format is:
 | 
			
		||||
# TAG = value [value, ...]
 | 
			
		||||
# For lists, items can also be appended using:
 | 
			
		||||
# TAG += value [value, ...]
 | 
			
		||||
# Values that contain spaces should be placed between quotes (\" \").
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Project related configuration options
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
DOXYFILE_ENCODING      = UTF-8
 | 
			
		||||
PROJECT_NAME           = "QMK Firmware"
 | 
			
		||||
PROJECT_NUMBER         = https://github.com/qmk/qmk_firmware
 | 
			
		||||
PROJECT_BRIEF          = "Keyboard controller firmware for Atmel AVR and ARM USB families"
 | 
			
		||||
OUTPUT_DIRECTORY       = .build/docs/static/doxygen
 | 
			
		||||
ALLOW_UNICODE_NAMES    = NO
 | 
			
		||||
OUTPUT_LANGUAGE        = English
 | 
			
		||||
BRIEF_MEMBER_DESC      = YES
 | 
			
		||||
REPEAT_BRIEF           = YES
 | 
			
		||||
ABBREVIATE_BRIEF       = "The $name class" \
 | 
			
		||||
                         "The $name widget" \
 | 
			
		||||
                         "The $name file" \
 | 
			
		||||
                         is \
 | 
			
		||||
                         provides \
 | 
			
		||||
                         specifies \
 | 
			
		||||
                         contains \
 | 
			
		||||
                         represents \
 | 
			
		||||
                         a \
 | 
			
		||||
                         an \
 | 
			
		||||
                         the
 | 
			
		||||
ALWAYS_DETAILED_SEC    = NO
 | 
			
		||||
INLINE_INHERITED_MEMB  = NO
 | 
			
		||||
FULL_PATH_NAMES        = YES
 | 
			
		||||
STRIP_FROM_PATH        =
 | 
			
		||||
STRIP_FROM_INC_PATH    =
 | 
			
		||||
SHORT_NAMES            = NO
 | 
			
		||||
JAVADOC_AUTOBRIEF      = NO
 | 
			
		||||
QT_AUTOBRIEF           = NO
 | 
			
		||||
MULTILINE_CPP_IS_BRIEF = NO
 | 
			
		||||
INHERIT_DOCS           = YES
 | 
			
		||||
SEPARATE_MEMBER_PAGES  = NO
 | 
			
		||||
TAB_SIZE               = 4
 | 
			
		||||
ALIASES                =
 | 
			
		||||
TCL_SUBST              =
 | 
			
		||||
OPTIMIZE_OUTPUT_FOR_C  = YES
 | 
			
		||||
OPTIMIZE_OUTPUT_JAVA   = NO
 | 
			
		||||
OPTIMIZE_FOR_FORTRAN   = NO
 | 
			
		||||
OPTIMIZE_OUTPUT_VHDL   = NO
 | 
			
		||||
EXTENSION_MAPPING      =
 | 
			
		||||
MARKDOWN_SUPPORT       = YES
 | 
			
		||||
TOC_INCLUDE_HEADINGS   = 2
 | 
			
		||||
AUTOLINK_SUPPORT       = YES
 | 
			
		||||
BUILTIN_STL_SUPPORT    = NO
 | 
			
		||||
CPP_CLI_SUPPORT        = NO
 | 
			
		||||
SIP_SUPPORT            = NO
 | 
			
		||||
IDL_PROPERTY_SUPPORT   = YES
 | 
			
		||||
DISTRIBUTE_GROUP_DOC   = NO
 | 
			
		||||
GROUP_NESTED_COMPOUNDS = NO
 | 
			
		||||
SUBGROUPING            = YES
 | 
			
		||||
INLINE_GROUPED_CLASSES = NO
 | 
			
		||||
INLINE_SIMPLE_STRUCTS  = NO
 | 
			
		||||
TYPEDEF_HIDES_STRUCT   = NO
 | 
			
		||||
LOOKUP_CACHE_SIZE      = 0
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Build related configuration options
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
EXTRACT_ALL            = NO
 | 
			
		||||
EXTRACT_PRIVATE        = NO
 | 
			
		||||
EXTRACT_PACKAGE        = NO
 | 
			
		||||
EXTRACT_STATIC         = NO
 | 
			
		||||
EXTRACT_LOCAL_CLASSES  = YES
 | 
			
		||||
EXTRACT_LOCAL_METHODS  = NO
 | 
			
		||||
EXTRACT_ANON_NSPACES   = NO
 | 
			
		||||
HIDE_UNDOC_MEMBERS     = NO
 | 
			
		||||
HIDE_UNDOC_CLASSES     = NO
 | 
			
		||||
HIDE_FRIEND_COMPOUNDS  = NO
 | 
			
		||||
HIDE_IN_BODY_DOCS      = NO
 | 
			
		||||
INTERNAL_DOCS          = NO
 | 
			
		||||
CASE_SENSE_NAMES       = NO
 | 
			
		||||
HIDE_SCOPE_NAMES       = YES
 | 
			
		||||
HIDE_COMPOUND_REFERENCE= NO
 | 
			
		||||
SHOW_INCLUDE_FILES     = YES
 | 
			
		||||
SHOW_GROUPED_MEMB_INC  = NO
 | 
			
		||||
FORCE_LOCAL_INCLUDES   = NO
 | 
			
		||||
INLINE_INFO            = YES
 | 
			
		||||
SORT_MEMBER_DOCS       = YES
 | 
			
		||||
SORT_BRIEF_DOCS        = NO
 | 
			
		||||
SORT_MEMBERS_CTORS_1ST = NO
 | 
			
		||||
SORT_GROUP_NAMES       = NO
 | 
			
		||||
SORT_BY_SCOPE_NAME     = NO
 | 
			
		||||
STRICT_PROTO_MATCHING  = NO
 | 
			
		||||
GENERATE_TODOLIST      = YES
 | 
			
		||||
GENERATE_TESTLIST      = YES
 | 
			
		||||
GENERATE_BUGLIST       = YES
 | 
			
		||||
GENERATE_DEPRECATEDLIST= YES
 | 
			
		||||
ENABLED_SECTIONS       =
 | 
			
		||||
MAX_INITIALIZER_LINES  = 30
 | 
			
		||||
SHOW_USED_FILES        = YES
 | 
			
		||||
SHOW_FILES             = YES
 | 
			
		||||
SHOW_NAMESPACES        = YES
 | 
			
		||||
FILE_VERSION_FILTER    =
 | 
			
		||||
LAYOUT_FILE            =
 | 
			
		||||
CITE_BIB_FILES         =
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to warning and progress messages
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
QUIET                  = NO
 | 
			
		||||
WARNINGS               = YES
 | 
			
		||||
WARN_IF_UNDOCUMENTED   = YES
 | 
			
		||||
WARN_IF_DOC_ERROR      = YES
 | 
			
		||||
WARN_NO_PARAMDOC       = NO
 | 
			
		||||
WARN_AS_ERROR          = NO
 | 
			
		||||
WARN_FORMAT            = "$file:$line: $text"
 | 
			
		||||
WARN_LOGFILE           =
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the input files
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
INPUT                  = tmk_core quantum drivers
 | 
			
		||||
INPUT_ENCODING         = UTF-8
 | 
			
		||||
FILE_PATTERNS          = *.c \
 | 
			
		||||
                         *.cc \
 | 
			
		||||
                         *.cxx \
 | 
			
		||||
                         *.cpp \
 | 
			
		||||
                         *.c++ \
 | 
			
		||||
                         *.h \
 | 
			
		||||
                         *.hh \
 | 
			
		||||
                         *.hxx \
 | 
			
		||||
                         *.hpp \
 | 
			
		||||
                         *.h++
 | 
			
		||||
RECURSIVE              = YES
 | 
			
		||||
EXCLUDE                =
 | 
			
		||||
EXCLUDE_SYMLINKS       = NO
 | 
			
		||||
EXCLUDE_PATTERNS       =
 | 
			
		||||
EXCLUDE_SYMBOLS        =
 | 
			
		||||
EXAMPLE_PATH           =
 | 
			
		||||
EXAMPLE_PATTERNS       = *
 | 
			
		||||
EXAMPLE_RECURSIVE      = NO
 | 
			
		||||
IMAGE_PATH             =
 | 
			
		||||
INPUT_FILTER           =
 | 
			
		||||
FILTER_PATTERNS        =
 | 
			
		||||
FILTER_SOURCE_FILES    = NO
 | 
			
		||||
FILTER_SOURCE_PATTERNS =
 | 
			
		||||
USE_MDFILE_AS_MAINPAGE =
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to source browsing
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
SOURCE_BROWSER         = YES
 | 
			
		||||
INLINE_SOURCES         = NO
 | 
			
		||||
STRIP_CODE_COMMENTS    = YES
 | 
			
		||||
REFERENCED_BY_RELATION = NO
 | 
			
		||||
REFERENCES_RELATION    = NO
 | 
			
		||||
REFERENCES_LINK_SOURCE = YES
 | 
			
		||||
SOURCE_TOOLTIPS        = YES
 | 
			
		||||
USE_HTAGS              = NO
 | 
			
		||||
VERBATIM_HEADERS       = YES
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the alphabetical class index
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
ALPHABETICAL_INDEX     = YES
 | 
			
		||||
COLS_IN_ALPHA_INDEX    = 5
 | 
			
		||||
IGNORE_PREFIX          =
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to disabled outputs
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
GENERATE_HTML          = NO
 | 
			
		||||
GENERATE_LATEX         = NO
 | 
			
		||||
GENERATE_RTF           = NO
 | 
			
		||||
GENERATE_MAN           = NO
 | 
			
		||||
GENERATE_DOCBOOK       = NO
 | 
			
		||||
GENERATE_AUTOGEN_DEF   = NO
 | 
			
		||||
GENERATE_PERLMOD       = NO
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the XML output
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
GENERATE_XML           = YES
 | 
			
		||||
XML_OUTPUT             = xml
 | 
			
		||||
XML_PROGRAMLISTING     = YES
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the preprocessor
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
ENABLE_PREPROCESSING   = YES
 | 
			
		||||
MACRO_EXPANSION        = NO
 | 
			
		||||
EXPAND_ONLY_PREDEF     = NO
 | 
			
		||||
SEARCH_INCLUDES        = YES
 | 
			
		||||
INCLUDE_PATH           =
 | 
			
		||||
INCLUDE_FILE_PATTERNS  =
 | 
			
		||||
PREDEFINED             = __DOXYGEN__ PROGMEM
 | 
			
		||||
EXPAND_AS_DEFINED      =
 | 
			
		||||
SKIP_FUNCTION_MACROS   = YES
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to external references
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
TAGFILES               =
 | 
			
		||||
GENERATE_TAGFILE       =
 | 
			
		||||
ALLEXTERNALS           = NO
 | 
			
		||||
EXTERNAL_GROUPS        = YES
 | 
			
		||||
EXTERNAL_PAGES         = YES
 | 
			
		||||
PERL_PATH              = /usr/bin/perl
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the dot tool
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
CLASS_DIAGRAMS         = YES
 | 
			
		||||
MSCGEN_PATH            =
 | 
			
		||||
DIA_PATH               =
 | 
			
		||||
HIDE_UNDOC_RELATIONS   = YES
 | 
			
		||||
HAVE_DOT               = NO
 | 
			
		||||
DOT_NUM_THREADS        = 0
 | 
			
		||||
DOT_FONTNAME           = Helvetica
 | 
			
		||||
DOT_FONTSIZE           = 10
 | 
			
		||||
DOT_FONTPATH           =
 | 
			
		||||
CLASS_GRAPH            = YES
 | 
			
		||||
COLLABORATION_GRAPH    = YES
 | 
			
		||||
GROUP_GRAPHS           = YES
 | 
			
		||||
UML_LOOK               = NO
 | 
			
		||||
UML_LIMIT_NUM_FIELDS   = 10
 | 
			
		||||
TEMPLATE_RELATIONS     = NO
 | 
			
		||||
INCLUDE_GRAPH          = YES
 | 
			
		||||
INCLUDED_BY_GRAPH      = YES
 | 
			
		||||
CALL_GRAPH             = NO
 | 
			
		||||
CALLER_GRAPH           = NO
 | 
			
		||||
GRAPHICAL_HIERARCHY    = YES
 | 
			
		||||
DIRECTORY_GRAPH        = YES
 | 
			
		||||
DOT_IMAGE_FORMAT       = png
 | 
			
		||||
INTERACTIVE_SVG        = NO
 | 
			
		||||
DOT_PATH               =
 | 
			
		||||
DOTFILE_DIRS           =
 | 
			
		||||
MSCFILE_DIRS           =
 | 
			
		||||
DIAFILE_DIRS           =
 | 
			
		||||
PLANTUML_JAR_PATH      =
 | 
			
		||||
PLANTUML_CFG_FILE      =
 | 
			
		||||
PLANTUML_INCLUDE_PATH  =
 | 
			
		||||
DOT_GRAPH_MAX_NODES    = 50
 | 
			
		||||
MAX_DOT_GRAPH_DEPTH    = 0
 | 
			
		||||
DOT_TRANSPARENT        = NO
 | 
			
		||||
DOT_MULTI_TARGETS      = NO
 | 
			
		||||
GENERATE_LEGEND        = YES
 | 
			
		||||
DOT_CLEANUP            = YES
 | 
			
		||||
							
								
								
									
										339
									
								
								LICENSE
									
										
									
									
									
								
							
							
						
						
									
										339
									
								
								LICENSE
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,339 +0,0 @@
 | 
			
		|||
                    GNU GENERAL PUBLIC LICENSE
 | 
			
		||||
                       Version 2, June 1991
 | 
			
		||||
 | 
			
		||||
 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 | 
			
		||||
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
			
		||||
 Everyone is permitted to copy and distribute verbatim copies
 | 
			
		||||
 of this license document, but changing it is not allowed.
 | 
			
		||||
 | 
			
		||||
                            Preamble
 | 
			
		||||
 | 
			
		||||
  The licenses for most software are designed to take away your
 | 
			
		||||
freedom to share and change it.  By contrast, the GNU General Public
 | 
			
		||||
License is intended to guarantee your freedom to share and change free
 | 
			
		||||
software--to make sure the software is free for all its users.  This
 | 
			
		||||
General Public License applies to most of the Free Software
 | 
			
		||||
Foundation's software and to any other program whose authors commit to
 | 
			
		||||
using it.  (Some other Free Software Foundation software is covered by
 | 
			
		||||
the GNU Lesser General Public License instead.)  You can apply it to
 | 
			
		||||
your programs, too.
 | 
			
		||||
 | 
			
		||||
  When we speak of free software, we are referring to freedom, not
 | 
			
		||||
price.  Our General Public Licenses are designed to make sure that you
 | 
			
		||||
have the freedom to distribute copies of free software (and charge for
 | 
			
		||||
this service if you wish), that you receive source code or can get it
 | 
			
		||||
if you want it, that you can change the software or use pieces of it
 | 
			
		||||
in new free programs; and that you know you can do these things.
 | 
			
		||||
 | 
			
		||||
  To protect your rights, we need to make restrictions that forbid
 | 
			
		||||
anyone to deny you these rights or to ask you to surrender the rights.
 | 
			
		||||
These restrictions translate to certain responsibilities for you if you
 | 
			
		||||
distribute copies of the software, or if you modify it.
 | 
			
		||||
 | 
			
		||||
  For example, if you distribute copies of such a program, whether
 | 
			
		||||
gratis or for a fee, you must give the recipients all the rights that
 | 
			
		||||
you have.  You must make sure that they, too, receive or can get the
 | 
			
		||||
source code.  And you must show them these terms so they know their
 | 
			
		||||
rights.
 | 
			
		||||
 | 
			
		||||
  We protect your rights with two steps: (1) copyright the software, and
 | 
			
		||||
(2) offer you this license which gives you legal permission to copy,
 | 
			
		||||
distribute and/or modify the software.
 | 
			
		||||
 | 
			
		||||
  Also, for each author's protection and ours, we want to make certain
 | 
			
		||||
that everyone understands that there is no warranty for this free
 | 
			
		||||
software.  If the software is modified by someone else and passed on, we
 | 
			
		||||
want its recipients to know that what they have is not the original, so
 | 
			
		||||
that any problems introduced by others will not reflect on the original
 | 
			
		||||
authors' reputations.
 | 
			
		||||
 | 
			
		||||
  Finally, any free program is threatened constantly by software
 | 
			
		||||
patents.  We wish to avoid the danger that redistributors of a free
 | 
			
		||||
program will individually obtain patent licenses, in effect making the
 | 
			
		||||
program proprietary.  To prevent this, we have made it clear that any
 | 
			
		||||
patent must be licensed for everyone's free use or not licensed at all.
 | 
			
		||||
 | 
			
		||||
  The precise terms and conditions for copying, distribution and
 | 
			
		||||
modification follow.
 | 
			
		||||
 | 
			
		||||
                    GNU GENERAL PUBLIC LICENSE
 | 
			
		||||
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 | 
			
		||||
 | 
			
		||||
  0. This License applies to any program or other work which contains
 | 
			
		||||
a notice placed by the copyright holder saying it may be distributed
 | 
			
		||||
under the terms of this General Public License.  The "Program", below,
 | 
			
		||||
refers to any such program or work, and a "work based on the Program"
 | 
			
		||||
means either the Program or any derivative work under copyright law:
 | 
			
		||||
that is to say, a work containing the Program or a portion of it,
 | 
			
		||||
either verbatim or with modifications and/or translated into another
 | 
			
		||||
language.  (Hereinafter, translation is included without limitation in
 | 
			
		||||
the term "modification".)  Each licensee is addressed as "you".
 | 
			
		||||
 | 
			
		||||
Activities other than copying, distribution and modification are not
 | 
			
		||||
covered by this License; they are outside its scope.  The act of
 | 
			
		||||
running the Program is not restricted, and the output from the Program
 | 
			
		||||
is covered only if its contents constitute a work based on the
 | 
			
		||||
Program (independent of having been made by running the Program).
 | 
			
		||||
Whether that is true depends on what the Program does.
 | 
			
		||||
 | 
			
		||||
  1. You may copy and distribute verbatim copies of the Program's
 | 
			
		||||
source code as you receive it, in any medium, provided that you
 | 
			
		||||
conspicuously and appropriately publish on each copy an appropriate
 | 
			
		||||
copyright notice and disclaimer of warranty; keep intact all the
 | 
			
		||||
notices that refer to this License and to the absence of any warranty;
 | 
			
		||||
and give any other recipients of the Program a copy of this License
 | 
			
		||||
along with the Program.
 | 
			
		||||
 | 
			
		||||
You may charge a fee for the physical act of transferring a copy, and
 | 
			
		||||
you may at your option offer warranty protection in exchange for a fee.
 | 
			
		||||
 | 
			
		||||
  2. You may modify your copy or copies of the Program or any portion
 | 
			
		||||
of it, thus forming a work based on the Program, and copy and
 | 
			
		||||
distribute such modifications or work under the terms of Section 1
 | 
			
		||||
above, provided that you also meet all of these conditions:
 | 
			
		||||
 | 
			
		||||
    a) You must cause the modified files to carry prominent notices
 | 
			
		||||
    stating that you changed the files and the date of any change.
 | 
			
		||||
 | 
			
		||||
    b) You must cause any work that you distribute or publish, that in
 | 
			
		||||
    whole or in part contains or is derived from the Program or any
 | 
			
		||||
    part thereof, to be licensed as a whole at no charge to all third
 | 
			
		||||
    parties under the terms of this License.
 | 
			
		||||
 | 
			
		||||
    c) If the modified program normally reads commands interactively
 | 
			
		||||
    when run, you must cause it, when started running for such
 | 
			
		||||
    interactive use in the most ordinary way, to print or display an
 | 
			
		||||
    announcement including an appropriate copyright notice and a
 | 
			
		||||
    notice that there is no warranty (or else, saying that you provide
 | 
			
		||||
    a warranty) and that users may redistribute the program under
 | 
			
		||||
    these conditions, and telling the user how to view a copy of this
 | 
			
		||||
    License.  (Exception: if the Program itself is interactive but
 | 
			
		||||
    does not normally print such an announcement, your work based on
 | 
			
		||||
    the Program is not required to print an announcement.)
 | 
			
		||||
 | 
			
		||||
These requirements apply to the modified work as a whole.  If
 | 
			
		||||
identifiable sections of that work are not derived from the Program,
 | 
			
		||||
and can be reasonably considered independent and separate works in
 | 
			
		||||
themselves, then this License, and its terms, do not apply to those
 | 
			
		||||
sections when you distribute them as separate works.  But when you
 | 
			
		||||
distribute the same sections as part of a whole which is a work based
 | 
			
		||||
on the Program, the distribution of the whole must be on the terms of
 | 
			
		||||
this License, whose permissions for other licensees extend to the
 | 
			
		||||
entire whole, and thus to each and every part regardless of who wrote it.
 | 
			
		||||
 | 
			
		||||
Thus, it is not the intent of this section to claim rights or contest
 | 
			
		||||
your rights to work written entirely by you; rather, the intent is to
 | 
			
		||||
exercise the right to control the distribution of derivative or
 | 
			
		||||
collective works based on the Program.
 | 
			
		||||
 | 
			
		||||
In addition, mere aggregation of another work not based on the Program
 | 
			
		||||
with the Program (or with a work based on the Program) on a volume of
 | 
			
		||||
a storage or distribution medium does not bring the other work under
 | 
			
		||||
the scope of this License.
 | 
			
		||||
 | 
			
		||||
  3. You may copy and distribute the Program (or a work based on it,
 | 
			
		||||
under Section 2) in object code or executable form under the terms of
 | 
			
		||||
Sections 1 and 2 above provided that you also do one of the following:
 | 
			
		||||
 | 
			
		||||
    a) Accompany it with the complete corresponding machine-readable
 | 
			
		||||
    source code, which must be distributed under the terms of Sections
 | 
			
		||||
    1 and 2 above on a medium customarily used for software interchange; or,
 | 
			
		||||
 | 
			
		||||
    b) Accompany it with a written offer, valid for at least three
 | 
			
		||||
    years, to give any third party, for a charge no more than your
 | 
			
		||||
    cost of physically performing source distribution, a complete
 | 
			
		||||
    machine-readable copy of the corresponding source code, to be
 | 
			
		||||
    distributed under the terms of Sections 1 and 2 above on a medium
 | 
			
		||||
    customarily used for software interchange; or,
 | 
			
		||||
 | 
			
		||||
    c) Accompany it with the information you received as to the offer
 | 
			
		||||
    to distribute corresponding source code.  (This alternative is
 | 
			
		||||
    allowed only for noncommercial distribution and only if you
 | 
			
		||||
    received the program in object code or executable form with such
 | 
			
		||||
    an offer, in accord with Subsection b above.)
 | 
			
		||||
 | 
			
		||||
The source code for a work means the preferred form of the work for
 | 
			
		||||
making modifications to it.  For an executable work, complete source
 | 
			
		||||
code means all the source code for all modules it contains, plus any
 | 
			
		||||
associated interface definition files, plus the scripts used to
 | 
			
		||||
control compilation and installation of the executable.  However, as a
 | 
			
		||||
special exception, the source code distributed need not include
 | 
			
		||||
anything that is normally distributed (in either source or binary
 | 
			
		||||
form) with the major components (compiler, kernel, and so on) of the
 | 
			
		||||
operating system on which the executable runs, unless that component
 | 
			
		||||
itself accompanies the executable.
 | 
			
		||||
 | 
			
		||||
If distribution of executable or object code is made by offering
 | 
			
		||||
access to copy from a designated place, then offering equivalent
 | 
			
		||||
access to copy the source code from the same place counts as
 | 
			
		||||
distribution of the source code, even though third parties are not
 | 
			
		||||
compelled to copy the source along with the object code.
 | 
			
		||||
 | 
			
		||||
  4. You may not copy, modify, sublicense, or distribute the Program
 | 
			
		||||
except as expressly provided under this License.  Any attempt
 | 
			
		||||
otherwise to copy, modify, sublicense or distribute the Program is
 | 
			
		||||
void, and will automatically terminate your rights under this License.
 | 
			
		||||
However, parties who have received copies, or rights, from you under
 | 
			
		||||
this License will not have their licenses terminated so long as such
 | 
			
		||||
parties remain in full compliance.
 | 
			
		||||
 | 
			
		||||
  5. You are not required to accept this License, since you have not
 | 
			
		||||
signed it.  However, nothing else grants you permission to modify or
 | 
			
		||||
distribute the Program or its derivative works.  These actions are
 | 
			
		||||
prohibited by law if you do not accept this License.  Therefore, by
 | 
			
		||||
modifying or distributing the Program (or any work based on the
 | 
			
		||||
Program), you indicate your acceptance of this License to do so, and
 | 
			
		||||
all its terms and conditions for copying, distributing or modifying
 | 
			
		||||
the Program or works based on it.
 | 
			
		||||
 | 
			
		||||
  6. Each time you redistribute the Program (or any work based on the
 | 
			
		||||
Program), the recipient automatically receives a license from the
 | 
			
		||||
original licensor to copy, distribute or modify the Program subject to
 | 
			
		||||
these terms and conditions.  You may not impose any further
 | 
			
		||||
restrictions on the recipients' exercise of the rights granted herein.
 | 
			
		||||
You are not responsible for enforcing compliance by third parties to
 | 
			
		||||
this License.
 | 
			
		||||
 | 
			
		||||
  7. If, as a consequence of a court judgment or allegation of patent
 | 
			
		||||
infringement or for any other reason (not limited to patent issues),
 | 
			
		||||
conditions are imposed on you (whether by court order, agreement or
 | 
			
		||||
otherwise) that contradict the conditions of this License, they do not
 | 
			
		||||
excuse you from the conditions of this License.  If you cannot
 | 
			
		||||
distribute so as to satisfy simultaneously your obligations under this
 | 
			
		||||
License and any other pertinent obligations, then as a consequence you
 | 
			
		||||
may not distribute the Program at all.  For example, if a patent
 | 
			
		||||
license would not permit royalty-free redistribution of the Program by
 | 
			
		||||
all those who receive copies directly or indirectly through you, then
 | 
			
		||||
the only way you could satisfy both it and this License would be to
 | 
			
		||||
refrain entirely from distribution of the Program.
 | 
			
		||||
 | 
			
		||||
If any portion of this section is held invalid or unenforceable under
 | 
			
		||||
any particular circumstance, the balance of the section is intended to
 | 
			
		||||
apply and the section as a whole is intended to apply in other
 | 
			
		||||
circumstances.
 | 
			
		||||
 | 
			
		||||
It is not the purpose of this section to induce you to infringe any
 | 
			
		||||
patents or other property right claims or to contest validity of any
 | 
			
		||||
such claims; this section has the sole purpose of protecting the
 | 
			
		||||
integrity of the free software distribution system, which is
 | 
			
		||||
implemented by public license practices.  Many people have made
 | 
			
		||||
generous contributions to the wide range of software distributed
 | 
			
		||||
through that system in reliance on consistent application of that
 | 
			
		||||
system; it is up to the author/donor to decide if he or she is willing
 | 
			
		||||
to distribute software through any other system and a licensee cannot
 | 
			
		||||
impose that choice.
 | 
			
		||||
 | 
			
		||||
This section is intended to make thoroughly clear what is believed to
 | 
			
		||||
be a consequence of the rest of this License.
 | 
			
		||||
 | 
			
		||||
  8. If the distribution and/or use of the Program is restricted in
 | 
			
		||||
certain countries either by patents or by copyrighted interfaces, the
 | 
			
		||||
original copyright holder who places the Program under this License
 | 
			
		||||
may add an explicit geographical distribution limitation excluding
 | 
			
		||||
those countries, so that distribution is permitted only in or among
 | 
			
		||||
countries not thus excluded.  In such case, this License incorporates
 | 
			
		||||
the limitation as if written in the body of this License.
 | 
			
		||||
 | 
			
		||||
  9. The Free Software Foundation may publish revised and/or new versions
 | 
			
		||||
of the General Public License from time to time.  Such new versions will
 | 
			
		||||
be similar in spirit to the present version, but may differ in detail to
 | 
			
		||||
address new problems or concerns.
 | 
			
		||||
 | 
			
		||||
Each version is given a distinguishing version number.  If the Program
 | 
			
		||||
specifies a version number of this License which applies to it and "any
 | 
			
		||||
later version", you have the option of following the terms and conditions
 | 
			
		||||
either of that version or of any later version published by the Free
 | 
			
		||||
Software Foundation.  If the Program does not specify a version number of
 | 
			
		||||
this License, you may choose any version ever published by the Free Software
 | 
			
		||||
Foundation.
 | 
			
		||||
 | 
			
		||||
  10. If you wish to incorporate parts of the Program into other free
 | 
			
		||||
programs whose distribution conditions are different, write to the author
 | 
			
		||||
to ask for permission.  For software which is copyrighted by the Free
 | 
			
		||||
Software Foundation, write to the Free Software Foundation; we sometimes
 | 
			
		||||
make exceptions for this.  Our decision will be guided by the two goals
 | 
			
		||||
of preserving the free status of all derivatives of our free software and
 | 
			
		||||
of promoting the sharing and reuse of software generally.
 | 
			
		||||
 | 
			
		||||
                            NO WARRANTY
 | 
			
		||||
 | 
			
		||||
  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
 | 
			
		||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
 | 
			
		||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
 | 
			
		||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
 | 
			
		||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 | 
			
		||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
 | 
			
		||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
 | 
			
		||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
 | 
			
		||||
REPAIR OR CORRECTION.
 | 
			
		||||
 | 
			
		||||
  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
 | 
			
		||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
 | 
			
		||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
 | 
			
		||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
 | 
			
		||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
 | 
			
		||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
 | 
			
		||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
 | 
			
		||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
 | 
			
		||||
POSSIBILITY OF SUCH DAMAGES.
 | 
			
		||||
 | 
			
		||||
                     END OF TERMS AND CONDITIONS
 | 
			
		||||
 | 
			
		||||
            How to Apply These Terms to Your New Programs
 | 
			
		||||
 | 
			
		||||
  If you develop a new program, and you want it to be of the greatest
 | 
			
		||||
possible use to the public, the best way to achieve this is to make it
 | 
			
		||||
free software which everyone can redistribute and change under these terms.
 | 
			
		||||
 | 
			
		||||
  To do so, attach the following notices to the program.  It is safest
 | 
			
		||||
to attach them to the start of each source file to most effectively
 | 
			
		||||
convey the exclusion of warranty; and each file should have at least
 | 
			
		||||
the "copyright" line and a pointer to where the full notice is found.
 | 
			
		||||
 | 
			
		||||
    <one line to give the program's name and a brief idea of what it does.>
 | 
			
		||||
    Copyright (C) <year>  <name of author>
 | 
			
		||||
 | 
			
		||||
    This program is free software; you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU General Public License as published by
 | 
			
		||||
    the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
    (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This program is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
    GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License along
 | 
			
		||||
    with this program; if not, write to the Free Software Foundation, Inc.,
 | 
			
		||||
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | 
			
		||||
 | 
			
		||||
Also add information on how to contact you by electronic and paper mail.
 | 
			
		||||
 | 
			
		||||
If the program is interactive, make it output a short notice like this
 | 
			
		||||
when it starts in an interactive mode:
 | 
			
		||||
 | 
			
		||||
    Gnomovision version 69, Copyright (C) year name of author
 | 
			
		||||
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
 | 
			
		||||
    This is free software, and you are welcome to redistribute it
 | 
			
		||||
    under certain conditions; type `show c' for details.
 | 
			
		||||
 | 
			
		||||
The hypothetical commands `show w' and `show c' should show the appropriate
 | 
			
		||||
parts of the General Public License.  Of course, the commands you use may
 | 
			
		||||
be called something other than `show w' and `show c'; they could even be
 | 
			
		||||
mouse-clicks or menu items--whatever suits your program.
 | 
			
		||||
 | 
			
		||||
You should also get your employer (if you work as a programmer) or your
 | 
			
		||||
school, if any, to sign a "copyright disclaimer" for the program, if
 | 
			
		||||
necessary.  Here is a sample; alter the names:
 | 
			
		||||
 | 
			
		||||
  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
 | 
			
		||||
  `Gnomovision' (which makes passes at compilers) written by James Hacker.
 | 
			
		||||
 | 
			
		||||
  <signature of Ty Coon>, 1 April 1989
 | 
			
		||||
  Ty Coon, President of Vice
 | 
			
		||||
 | 
			
		||||
This General Public License does not permit incorporating your program into
 | 
			
		||||
proprietary programs.  If your program is a subroutine library, you may
 | 
			
		||||
consider it more useful to permit linking proprietary applications with the
 | 
			
		||||
library.  If this is what you want to do, use the GNU Lesser General
 | 
			
		||||
Public License instead of this License.
 | 
			
		||||
							
								
								
									
										479
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										479
									
								
								Makefile
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -19,52 +19,128 @@ endif
 | 
			
		|||
# Otherwise the [OK], [ERROR] and [WARN] messages won't be displayed correctly
 | 
			
		||||
override SILENT := false
 | 
			
		||||
 | 
			
		||||
ifeq ($(shell git rev-parse --is-inside-work-tree 2>/dev/null),)
 | 
			
		||||
    export SKIP_GIT := yes
 | 
			
		||||
    export NOT_REPO := yes
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifdef SKIP_VERSION
 | 
			
		||||
    export SKIP_GIT := yes
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifndef SUB_IS_SILENT
 | 
			
		||||
ifndef SKIP_GIT
 | 
			
		||||
    QMK_VERSION := $(shell git describe --abbrev=0 --tags 2>/dev/null)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
QMK_VERSION := $(shell git describe --abbrev=0 --tags 2>/dev/null)
 | 
			
		||||
ifneq ($(QMK_VERSION),)
 | 
			
		||||
$(info QMK Firmware $(QMK_VERSION))
 | 
			
		||||
endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Try to determine userspace from qmk config, if set.
 | 
			
		||||
ifeq ($(QMK_USERSPACE),)
 | 
			
		||||
    QMK_USERSPACE = $(shell qmk config -ro user.overlay_dir | cut -d= -f2 | sed -e 's@^None$$@@g')
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Determine which qmk cli to use
 | 
			
		||||
QMK_BIN := qmk
 | 
			
		||||
 | 
			
		||||
# avoid 'Entering|Leaving directory' messages
 | 
			
		||||
MAKEFLAGS += --no-print-directory
 | 
			
		||||
 | 
			
		||||
ON_ERROR := error_occurred=1
 | 
			
		||||
 | 
			
		||||
BREAK_ON_ERRORS = no
 | 
			
		||||
 | 
			
		||||
ROOT_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
 | 
			
		||||
STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST))
 | 
			
		||||
ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST))
 | 
			
		||||
ROOT_DIR := $(dir $(ROOT_MAKEFILE))
 | 
			
		||||
ifeq ($(ROOT_DIR),)
 | 
			
		||||
    ROOT_DIR := .
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
include paths.mk
 | 
			
		||||
include $(BUILDDEFS_PATH)/support.mk
 | 
			
		||||
 | 
			
		||||
TEST_OUTPUT_DIR := $(BUILD_DIR)/test
 | 
			
		||||
ABS_STARTING_MAKEFILE := $(abspath $(STARTING_MAKEFILE))
 | 
			
		||||
ABS_ROOT_MAKEFILE := $(abspath $(ROOT_MAKEFILE))
 | 
			
		||||
ABS_STARTING_DIR := $(dir $(ABS_STARTING_MAKEFILE))
 | 
			
		||||
ABS_ROOT_DIR := $(dir $(ABS_ROOT_MAKEFILE))
 | 
			
		||||
STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR))
 | 
			
		||||
BUILD_DIR := $(ROOT_DIR)/.build
 | 
			
		||||
TEST_DIR := $(BUILD_DIR)/test
 | 
			
		||||
ERROR_FILE := $(BUILD_DIR)/error_occurred
 | 
			
		||||
 | 
			
		||||
MAKEFILE_INCLUDED=yes
 | 
			
		||||
 | 
			
		||||
# Helper function to process the newt element of a space separated path
 | 
			
		||||
# It works a bit like the traditional functional head tail
 | 
			
		||||
# so the CURRENT_PATH_ELEMENT will become the new head
 | 
			
		||||
# and the PATH_ELEMENTS are the rest that are still unprocessed
 | 
			
		||||
define NEXT_PATH_ELEMENT
 | 
			
		||||
    $$(eval CURRENT_PATH_ELEMENT := $$(firstword  $$(PATH_ELEMENTS)))
 | 
			
		||||
    $$(eval PATH_ELEMENTS := $$(wordlist  2,9999,$$(PATH_ELEMENTS)))
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
# We change the / to spaces so that we more easily can work with the elements
 | 
			
		||||
# separately
 | 
			
		||||
PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR))
 | 
			
		||||
# Initialize the path elements list for further processing
 | 
			
		||||
$(eval $(call NEXT_PATH_ELEMENT))
 | 
			
		||||
 | 
			
		||||
# This function sets the KEYBOARD; KEYMAP and SUBPROJECT to the correct
 | 
			
		||||
# variables depending on which directory you stand in.
 | 
			
		||||
# It's really a very simple if else chain, if you squint enough,
 | 
			
		||||
# but the makefile syntax makes it very verbose.
 | 
			
		||||
# If we are in a subfolder of keyboards
 | 
			
		||||
# 
 | 
			
		||||
# *** No longer needed **
 | 
			
		||||
#
 | 
			
		||||
# ifeq ($(CURRENT_PATH_ELEMENT),keyboards)
 | 
			
		||||
#     $(eval $(call NEXT_PATH_ELEMENT))
 | 
			
		||||
#     KEYBOARD := $(CURRENT_PATH_ELEMENT)
 | 
			
		||||
#     $(eval $(call NEXT_PATH_ELEMENT))
 | 
			
		||||
#     # If we are in a subfolder of keymaps, or in other words in a keymap
 | 
			
		||||
#     # folder
 | 
			
		||||
#     ifeq ($(CURRENT_PATH_ELEMENT),keymaps)
 | 
			
		||||
#         $(eval $(call NEXT_PATH_ELEMENT))
 | 
			
		||||
#         KEYMAP := $(CURRENT_PATH_ELEMENT)
 | 
			
		||||
#      # else if we are not in the keyboard folder itself
 | 
			
		||||
#     else ifneq ($(CURRENT_PATH_ELEMENT),)
 | 
			
		||||
#         # the we can assume it's a subproject, as no other folders
 | 
			
		||||
#         # should have make files in them
 | 
			
		||||
#         SUBPROJECT := $(CURRENT_PATH_ELEMENT)
 | 
			
		||||
#         $(eval $(call NEXT_PATH_ELEMENT))
 | 
			
		||||
#         # if we are inside a keymap folder of a subproject
 | 
			
		||||
#         ifeq ($(CURRENT_PATH_ELEMENT),keymaps)
 | 
			
		||||
#             $(eval $(call NEXT_PATH_ELEMENT))
 | 
			
		||||
#             KEYMAP := $(CURRENT_PATH_ELEMENT)
 | 
			
		||||
#         endif
 | 
			
		||||
#     endif
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
define GET_KEYBOARDS
 | 
			
		||||
    All_RULES_MK := $$(patsubst $(ROOT_DIR)/keyboards/%/rules.mk,%,$$(wildcard $(ROOT_DIR)/keyboards/*/rules.mk))
 | 
			
		||||
    All_RULES_MK += $$(patsubst $(ROOT_DIR)/keyboards/%/rules.mk,%,$$(wildcard $(ROOT_DIR)/keyboards/*/*/rules.mk))
 | 
			
		||||
    All_RULES_MK += $$(patsubst $(ROOT_DIR)/keyboards/%/rules.mk,%,$$(wildcard $(ROOT_DIR)/keyboards/*/*/*/rules.mk))
 | 
			
		||||
    All_RULES_MK += $$(patsubst $(ROOT_DIR)/keyboards/%/rules.mk,%,$$(wildcard $(ROOT_DIR)/keyboards/*/*/*/*/rules.mk))
 | 
			
		||||
 | 
			
		||||
    KEYMAPS_MK := $$(patsubst $(ROOT_DIR)/keyboards/%/rules.mk,%,$$(wildcard $(ROOT_DIR)/keyboards/*/keymaps/*/rules.mk))
 | 
			
		||||
    KEYMAPS_MK += $$(patsubst $(ROOT_DIR)/keyboards/%/rules.mk,%,$$(wildcard $(ROOT_DIR)/keyboards/*/*/keymaps/*/rules.mk))
 | 
			
		||||
    KEYMAPS_MK += $$(patsubst $(ROOT_DIR)/keyboards/%/rules.mk,%,$$(wildcard $(ROOT_DIR)/keyboards/*/*/*/keymaps/*/rules.mk))
 | 
			
		||||
    KEYMAPS_MK += $$(patsubst $(ROOT_DIR)/keyboards/%/rules.mk,%,$$(wildcard $(ROOT_DIR)/keyboards/*/*/*/*/keymaps/*/rules.mk))
 | 
			
		||||
 | 
			
		||||
    KEYBOARDS := $$(sort $$(filter-out $$(KEYMAPS_MK), $$(All_RULES_MK)))
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
$(eval $(call GET_KEYBOARDS))
 | 
			
		||||
 | 
			
		||||
# Only consider folders with makefiles, to prevent errors in case there are extra folders
 | 
			
		||||
#KEYBOARDS += $(patsubst $(ROOD_DIR)/keyboards/%/rules.mk,%,$(wildcard $(ROOT_DIR)/keyboards/*/*/rules.mk))
 | 
			
		||||
 | 
			
		||||
list-keyboards:
 | 
			
		||||
	echo $(KEYBOARDS)
 | 
			
		||||
	exit 0
 | 
			
		||||
 | 
			
		||||
#Compatibility with the old make variables, anything you specify directly on the command line
 | 
			
		||||
# always overrides the detected folders
 | 
			
		||||
ifdef keyboard
 | 
			
		||||
    KEYBOARD := $(keyboard)
 | 
			
		||||
endif
 | 
			
		||||
ifdef keymap
 | 
			
		||||
    KEYMAP := $(keymap)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Uncomment these for debugging
 | 
			
		||||
# $(info Keyboard: $(KEYBOARD))
 | 
			
		||||
# $(info Keymap: $(KEYMAP))
 | 
			
		||||
# $(info Subproject: $(SUBPROJECT))
 | 
			
		||||
# $(info Keyboards: $(KEYBOARDS))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Set the default goal depending on where we are running make from
 | 
			
		||||
# this handles the case where you run make without any arguments
 | 
			
		||||
.DEFAULT_GOAL := all:all
 | 
			
		||||
ifneq ($(KEYMAP),)
 | 
			
		||||
    .DEFAULT_GOAL := $(KEYBOARD):$(KEYMAP)
 | 
			
		||||
else ifneq ($(KEYBOARD),)
 | 
			
		||||
     # Inside a keyboard folder, build all keymaps for all subprojects
 | 
			
		||||
     # Note that this is different from the old behaviour, which would
 | 
			
		||||
     # build only the default keymap of the default keyboard
 | 
			
		||||
    .DEFAULT_GOAL := $(KEYBOARD):all
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compare the start of the RULE variable with the first argument($1)
 | 
			
		||||
| 
						 | 
				
			
			@ -91,20 +167,54 @@ endef
 | 
			
		|||
# a function that returns the value
 | 
			
		||||
COMPARE_AND_REMOVE_FROM_RULE = $(eval $(call COMPARE_AND_REMOVE_FROM_RULE_HELPER,$1))$(RULE_FOUND)
 | 
			
		||||
 | 
			
		||||
# Try to find a match for the start of the rule to be checked
 | 
			
		||||
 | 
			
		||||
# Recursively try to find a match for the start of the rule to be checked
 | 
			
		||||
# $1 The list to be checked
 | 
			
		||||
# If a match is found, then RULE_FOUND is set to true
 | 
			
		||||
# and MATCHED_ITEM to the item that was matched
 | 
			
		||||
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER3
 | 
			
		||||
    ifneq ($1,)
 | 
			
		||||
        ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1)),true)
 | 
			
		||||
            MATCHED_ITEM := $$(firstword $1)
 | 
			
		||||
        else
 | 
			
		||||
            $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$$(wordlist 2,9999,$1)))
 | 
			
		||||
        endif
 | 
			
		||||
    endif
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
# A recursive helper function for finding the longest match
 | 
			
		||||
# $1 The list to be checked
 | 
			
		||||
# It works by always removing the currently matched item from the list
 | 
			
		||||
# and call itself recursively, until a match is found
 | 
			
		||||
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER2
 | 
			
		||||
    # Stop the recursion when the list is empty
 | 
			
		||||
    ifneq ($1,)
 | 
			
		||||
        RULE_BEFORE := $$(RULE)
 | 
			
		||||
        $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$1))
 | 
			
		||||
        # If a match is found in the current list, otherwise just return what we had before
 | 
			
		||||
        ifeq ($$(RULE_FOUND),true)
 | 
			
		||||
            # Save the best match so far and call itself recursively
 | 
			
		||||
            BEST_MATCH := $$(MATCHED_ITEM)
 | 
			
		||||
            BEST_MATCH_RULE := $$(RULE)
 | 
			
		||||
            RULE_FOUND := false
 | 
			
		||||
            RULE := $$(RULE_BEFORE)
 | 
			
		||||
            $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER2,$$(filter-out $$(MATCHED_ITEM),$1)))
 | 
			
		||||
        endif
 | 
			
		||||
     endif
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Recursively try to find the longest match for the start of the rule to be checked
 | 
			
		||||
# $1 The list to be checked
 | 
			
		||||
# If a match is found, then RULE_FOUND is set to true
 | 
			
		||||
# and MATCHED_ITEM to the item that was matched
 | 
			
		||||
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER
 | 
			
		||||
    # Split on ":", padding with empty strings to avoid indexing issues
 | 
			
		||||
    TOKEN1:=$$(shell python3 -c "import sys; print((sys.argv[1].split(':',1)+[''])[0])" $$(RULE))
 | 
			
		||||
    TOKENr:=$$(shell python3 -c "import sys; print((sys.argv[1].split(':',1)+[''])[1])" $$(RULE))
 | 
			
		||||
 | 
			
		||||
    FOUNDx:=$$(shell echo $1 | tr " " "\n" | grep -Fx $$(TOKEN1))
 | 
			
		||||
    ifneq ($$(FOUNDx),)
 | 
			
		||||
        RULE := $$(TOKENr)
 | 
			
		||||
    BEST_MATCH :=
 | 
			
		||||
    $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER2,$1))
 | 
			
		||||
    ifneq ($$(BEST_MATCH),)
 | 
			
		||||
        RULE_FOUND := true
 | 
			
		||||
        MATCHED_ITEM := $$(TOKEN1)
 | 
			
		||||
        RULE := $$(BEST_MATCH_RULE)
 | 
			
		||||
        MATCHED_ITEM := $$(BEST_MATCH)
 | 
			
		||||
    else
 | 
			
		||||
        RULE_FOUND := false
 | 
			
		||||
        MATCHED_ITEM :=
 | 
			
		||||
| 
						 | 
				
			
			@ -114,29 +224,6 @@ endef
 | 
			
		|||
# Make it easier to call TRY_TO_MATCH_RULE_FROM_LIST
 | 
			
		||||
TRY_TO_MATCH_RULE_FROM_LIST = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER,$1))$(RULE_FOUND)
 | 
			
		||||
 | 
			
		||||
# As TRY_TO_MATCH_RULE_FROM_LIST_HELPER, but with additional
 | 
			
		||||
# resolution of DEFAULT_FOLDER and keyboard_aliases.hjson for provided rule 
 | 
			
		||||
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER_KB
 | 
			
		||||
    # Split on ":", padding with empty strings to avoid indexing issues
 | 
			
		||||
    TOKEN1:=$$(shell python3 -c "import sys; print((sys.argv[1].split(':',1)+[''])[0])" $$(RULE))
 | 
			
		||||
    TOKENr:=$$(shell python3 -c "import sys; print((sys.argv[1].split(':',1)+[''])[1])" $$(RULE))
 | 
			
		||||
 | 
			
		||||
    TOKEN1:=$$(shell $(QMK_BIN) resolve-alias --allow-unknown $$(TOKEN1))
 | 
			
		||||
 | 
			
		||||
    FOUNDx:=$$(shell echo $1 | tr " " "\n" | grep -Fx $$(TOKEN1))
 | 
			
		||||
    ifneq ($$(FOUNDx),)
 | 
			
		||||
        RULE := $$(TOKENr)
 | 
			
		||||
        RULE_FOUND := true
 | 
			
		||||
        MATCHED_ITEM := $$(TOKEN1)
 | 
			
		||||
    else
 | 
			
		||||
        RULE_FOUND := false
 | 
			
		||||
        MATCHED_ITEM :=
 | 
			
		||||
    endif
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
# Make it easier to call TRY_TO_MATCH_RULE_FROM_LIST_KB
 | 
			
		||||
TRY_TO_MATCH_RULE_FROM_LIST_KB = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER_KB,$1))$(RULE_FOUND)
 | 
			
		||||
 | 
			
		||||
define ALL_IN_LIST_LOOP
 | 
			
		||||
    OLD_RULE$1 := $$(RULE)
 | 
			
		||||
    $$(eval $$(call $1,$$(ITEM$1)))
 | 
			
		||||
| 
						 | 
				
			
			@ -156,32 +243,25 @@ define PARSE_RULE
 | 
			
		|||
    # If the rule starts with all, then continue the parsing from
 | 
			
		||||
    # PARSE_ALL_KEYBOARDS
 | 
			
		||||
    ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,all),true)
 | 
			
		||||
        KEYBOARD_RULE=all
 | 
			
		||||
        $$(eval $$(call PARSE_ALL_KEYBOARDS))
 | 
			
		||||
    else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,test),true)
 | 
			
		||||
        $$(eval $$(call PARSE_TEST))
 | 
			
		||||
    # If the rule starts with the name of a known keyboard, then continue
 | 
			
		||||
    # the parsing from PARSE_KEYBOARD
 | 
			
		||||
    else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST_KB,$$(shell $(QMK_BIN) list-keyboards)),true)
 | 
			
		||||
        KEYBOARD_RULE=$$(MATCHED_ITEM)
 | 
			
		||||
    else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true)
 | 
			
		||||
        $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM)))
 | 
			
		||||
    # Otherwise use the KEYBOARD variable, which is determined either by
 | 
			
		||||
    # the current directory you run make from, or passed in as an argument
 | 
			
		||||
    else ifneq ($$(KEYBOARD),)
 | 
			
		||||
        $$(eval $$(call PARSE_KEYBOARD,$$(KEYBOARD)))
 | 
			
		||||
    else
 | 
			
		||||
        $$(info make: *** No rule to make target '$1'. Stop.)
 | 
			
		||||
        $$(info |)
 | 
			
		||||
        $$(info | QMK's make format is:)
 | 
			
		||||
        $$(info |     make keyboard_folder:keymap_folder[:target])
 | 
			
		||||
        $$(info |)
 | 
			
		||||
        $$(info | Where `keyboard_folder` is the path to the keyboard relative to)
 | 
			
		||||
        $$(info | `qmk_firmware/keyboards/`, and `keymap_folder` is the name of the)
 | 
			
		||||
        $$(info | keymap folder under that board's `keymaps/` directory.)
 | 
			
		||||
        $$(info |)
 | 
			
		||||
        $$(info | Examples:)
 | 
			
		||||
        $$(info |     keyboards/dz60, keyboards/dz60/keymaps/default)
 | 
			
		||||
        $$(info |       -> make dz60:default)
 | 
			
		||||
        $$(info |       -> qmk compile -kb dz60 -km default)
 | 
			
		||||
        $$(info |     keyboards/planck/rev6, keyboards/planck/keymaps/default)
 | 
			
		||||
        $$(info |       -> make planck/rev6:default:flash)
 | 
			
		||||
        $$(info |       -> qmk flash -kb planck/rev6 -km default)
 | 
			
		||||
        $$(info |  QMK's make format recently changed to use folder locations and colons:)
 | 
			
		||||
        $$(info |     make project_folder:keymap[:target])
 | 
			
		||||
        $$(info |  Examples:)
 | 
			
		||||
        $$(info |     make planck/rev4:default:dfu)
 | 
			
		||||
        $$(info |     make planck:default)
 | 
			
		||||
        $$(info |)
 | 
			
		||||
    endif
 | 
			
		||||
endef
 | 
			
		||||
| 
						 | 
				
			
			@ -194,12 +274,28 @@ define PARSE_KEYBOARD
 | 
			
		|||
    # include the correct makefile to determine the actual name of it
 | 
			
		||||
    CURRENT_KB := $1
 | 
			
		||||
 | 
			
		||||
    # KEYBOARD_FOLDERS := $$(subst /, , $(CURRENT_KB))
 | 
			
		||||
 | 
			
		||||
    DEFAULT_FOLDER := $$(CURRENT_KB)
 | 
			
		||||
 | 
			
		||||
    # We assume that every rules.mk will contain the full default value
 | 
			
		||||
    $$(eval include $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/rules.mk)
 | 
			
		||||
    ifneq ($$(DEFAULT_FOLDER),$$(CURRENT_KB))
 | 
			
		||||
        $$(eval include $(ROOT_DIR)/keyboards/$$(DEFAULT_FOLDER)/rules.mk)
 | 
			
		||||
    endif
 | 
			
		||||
    CURRENT_KB := $$(DEFAULT_FOLDER)
 | 
			
		||||
 | 
			
		||||
    # 5/4/3/2/1
 | 
			
		||||
    KEYBOARD_FOLDER_PATH_1 := $$(CURRENT_KB)
 | 
			
		||||
    KEYBOARD_FOLDER_PATH_2 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_1)))
 | 
			
		||||
    KEYBOARD_FOLDER_PATH_3 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_2)))
 | 
			
		||||
    KEYBOARD_FOLDER_PATH_4 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_3)))
 | 
			
		||||
    KEYBOARD_FOLDER_PATH_5 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_4)))
 | 
			
		||||
    KEYBOARD_FOLDER_1 := $$(notdir $$(KEYBOARD_FOLDER_PATH_1))
 | 
			
		||||
    KEYBOARD_FOLDER_2 := $$(notdir $$(KEYBOARD_FOLDER_PATH_2))
 | 
			
		||||
    KEYBOARD_FOLDER_3 := $$(notdir $$(KEYBOARD_FOLDER_PATH_3))
 | 
			
		||||
    KEYBOARD_FOLDER_4 := $$(notdir $$(KEYBOARD_FOLDER_PATH_4))
 | 
			
		||||
    KEYBOARD_FOLDER_5 := $$(notdir $$(KEYBOARD_FOLDER_PATH_5))
 | 
			
		||||
 | 
			
		||||
    KEYMAPS :=
 | 
			
		||||
    # get a list of all keymaps
 | 
			
		||||
| 
						 | 
				
			
			@ -208,22 +304,40 @@ define PARSE_KEYBOARD
 | 
			
		|||
    KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_3)/keymaps/*/.)))
 | 
			
		||||
    KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_4)/keymaps/*/.)))
 | 
			
		||||
    KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_5)/keymaps/*/.)))
 | 
			
		||||
    # this might be needed, but in a different form
 | 
			
		||||
    #KEYMAPS := $$(sort $$(filter-out $$(KEYBOARD_FOLDER_1) $$(KEYBOARD_FOLDER_2) \
 | 
			
		||||
        $$(KEYBOARD_FOLDER_3) $$(KEYBOARD_FOLDER_4) $$(KEYBOARD_FOLDER_5), $$(KEYMAPS)))
 | 
			
		||||
 | 
			
		||||
    ifneq ($(QMK_USERSPACE),)
 | 
			
		||||
        KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_1)/keymaps/*/.)))
 | 
			
		||||
        KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_2)/keymaps/*/.)))
 | 
			
		||||
        KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_3)/keymaps/*/.)))
 | 
			
		||||
        KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_4)/keymaps/*/.)))
 | 
			
		||||
        KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_5)/keymaps/*/.)))
 | 
			
		||||
    KEYBOARD_LAYOUTS :=
 | 
			
		||||
    ifneq ("$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_5)/rules.mk)","")
 | 
			
		||||
      LAYOUTS :=
 | 
			
		||||
      $$(eval include $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_5)/rules.mk)
 | 
			
		||||
      KEYBOARD_LAYOUTS := $$(sort $$(LAYOUTS) $$(KEYBOARD_LAYOUTS))
 | 
			
		||||
    endif
 | 
			
		||||
    ifneq ("$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_4)/rules.mk)","")
 | 
			
		||||
      LAYOUTS :=
 | 
			
		||||
      $$(eval include $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_4)/rules.mk)
 | 
			
		||||
      KEYBOARD_LAYOUTS := $$(sort $$(LAYOUTS) $$(KEYBOARD_LAYOUTS))
 | 
			
		||||
    endif
 | 
			
		||||
    ifneq ("$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_3)/rules.mk)","")
 | 
			
		||||
      LAYOUTS :=
 | 
			
		||||
      $$(eval include $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_3)/rules.mk)
 | 
			
		||||
      KEYBOARD_LAYOUTS := $$(sort $$(LAYOUTS) $$(KEYBOARD_LAYOUTS))
 | 
			
		||||
    endif
 | 
			
		||||
    ifneq ("$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_2)/rules.mk)","")
 | 
			
		||||
      LAYOUTS :=
 | 
			
		||||
      $$(eval include $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_2)/rules.mk)
 | 
			
		||||
      KEYBOARD_LAYOUTS := $$(sort $$(LAYOUTS) $$(KEYBOARD_LAYOUTS))
 | 
			
		||||
    endif
 | 
			
		||||
    ifneq ("$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_1)/rules.mk)","")
 | 
			
		||||
      LAYOUTS :=
 | 
			
		||||
      $$(eval include $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_1)/rules.mk)
 | 
			
		||||
      KEYBOARD_LAYOUTS := $$(sort $$(LAYOUTS) $$(KEYBOARD_LAYOUTS))
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    KEYBOARD_LAYOUTS := $(shell $(QMK_BIN) list-layouts --keyboard $1)
 | 
			
		||||
    LAYOUT_KEYMAPS :=
 | 
			
		||||
    $$(foreach LAYOUT,$$(KEYBOARD_LAYOUTS),$$(eval LAYOUT_KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/layouts/*/$$(LAYOUT)/*/.)))))
 | 
			
		||||
    ifneq ($(QMK_USERSPACE),)
 | 
			
		||||
        $$(foreach LAYOUT,$$(KEYBOARD_LAYOUTS),$$(eval LAYOUT_KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/layouts/$$(LAYOUT)/*/.)))))
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    KEYMAPS := $$(sort $$(KEYMAPS) $$(LAYOUT_KEYMAPS))
 | 
			
		||||
 | 
			
		||||
    # if the rule after removing the start of it is empty (we haven't specified a kemap or target)
 | 
			
		||||
| 
						 | 
				
			
			@ -233,18 +347,12 @@ define PARSE_KEYBOARD
 | 
			
		|||
    # The same if all was specified
 | 
			
		||||
    else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,all),true)
 | 
			
		||||
        $$(eval $$(call PARSE_ALL_KEYMAPS))
 | 
			
		||||
    # List all keymaps for the given keyboard
 | 
			
		||||
    else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,list-keymaps),true)
 | 
			
		||||
        $$(eval $$(call LIST_ALL_KEYMAPS))
 | 
			
		||||
    # Try to match the specified keyamp with the list of known keymaps
 | 
			
		||||
    else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS)),true)
 | 
			
		||||
        $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM)))
 | 
			
		||||
    # Otherwise try to match the keymap from the current folder, or arguments to the make command
 | 
			
		||||
    else ifneq ($$(KEYMAP),)
 | 
			
		||||
        $$(eval $$(call PARSE_KEYMAP,$$(KEYMAP)))
 | 
			
		||||
    # Otherwise if we are running make all:<user> just skip
 | 
			
		||||
    else ifeq ($$(KEYBOARD_RULE),all)
 | 
			
		||||
        # $$(info Skipping: No user keymap for $$(CURRENT_KB))
 | 
			
		||||
    # Otherwise, make all keymaps, again this is consistent with how it works without
 | 
			
		||||
    # any arguments
 | 
			
		||||
    else
 | 
			
		||||
| 
						 | 
				
			
			@ -255,18 +363,25 @@ endef
 | 
			
		|||
# if we are going to compile all keyboards, match the rest of the rule
 | 
			
		||||
# for each of them
 | 
			
		||||
define PARSE_ALL_KEYBOARDS
 | 
			
		||||
    $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYBOARD,$(shell $(QMK_BIN) list-keyboards --no-resolve-defaults)))
 | 
			
		||||
    $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYBOARD,$(KEYBOARDS)))
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
# Prints a list of all known keymaps for the given keyboard
 | 
			
		||||
define LIST_ALL_KEYMAPS
 | 
			
		||||
    COMMAND_true_LIST_KEYMAPS := \
 | 
			
		||||
        printf "$$(KEYMAPS)\n";
 | 
			
		||||
    COMMAND_false_LIST_KEYMAPS := \
 | 
			
		||||
        printf "$$(MSG_AVAILABLE_KEYMAPS)\n"; \
 | 
			
		||||
        printf "$$(KEYMAPS)\n";
 | 
			
		||||
    COMMANDS += LIST_KEYMAPS
 | 
			
		||||
endef
 | 
			
		||||
# $1 Subproject
 | 
			
		||||
# When entering this, the keyboard and subproject are known, so now we need
 | 
			
		||||
# to determine which keymaps are going to get compiled
 | 
			
		||||
# define PARSE_SUBPROJECT
 | 
			
		||||
 | 
			
		||||
# endef
 | 
			
		||||
 | 
			
		||||
# If we want to parse all subprojects, but the keyboard doesn't have any,
 | 
			
		||||
# then use defaultsp instead
 | 
			
		||||
# define PARSE_ALL_SUBPROJECTS
 | 
			
		||||
#     ifeq ($$(SUBPROJECTS),)
 | 
			
		||||
#         $$(eval $$(call PARSE_SUBPROJECT,defaultsp))
 | 
			
		||||
#     else
 | 
			
		||||
#         $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$$(SUBPROJECTS)))
 | 
			
		||||
#     endif
 | 
			
		||||
# endef
 | 
			
		||||
 | 
			
		||||
# $1 Keymap
 | 
			
		||||
# This is the meat of compiling a keyboard, when entering this, everything is known
 | 
			
		||||
| 
						 | 
				
			
			@ -278,7 +393,7 @@ define PARSE_KEYMAP
 | 
			
		|||
    # The rest of the rule is the target
 | 
			
		||||
    # Remove the leading ":" from the target, as it acts as a separator
 | 
			
		||||
    MAKE_TARGET := $$(patsubst :%,%,$$(RULE))
 | 
			
		||||
    # We need to generate an unique identifier to append to the COMMANDS list
 | 
			
		||||
    # We need to generate an unique indentifer to append to the COMMANDS list
 | 
			
		||||
    CURRENT_KB_UNDER := $$(subst /,_,$$(CURRENT_KB))
 | 
			
		||||
    COMMAND := COMMAND_KEYBOARD_$$(CURRENT_KB_UNDER)_KEYMAP_$$(CURRENT_KM)
 | 
			
		||||
    # If we are compiling a keyboard without a subproject, we want to display just the name
 | 
			
		||||
| 
						 | 
				
			
			@ -287,9 +402,9 @@ define PARSE_KEYMAP
 | 
			
		|||
    # Format it in bold
 | 
			
		||||
    KB_SP := $(BOLD)$$(KB_SP)$(NO_COLOR)
 | 
			
		||||
    # Specify the variables that we are passing forward to submake
 | 
			
		||||
    MAKE_VARS := KEYBOARD=$$(CURRENT_KB) KEYMAP=$$(CURRENT_KM) QMK_BIN=$$(QMK_BIN)
 | 
			
		||||
    MAKE_VARS := KEYBOARD=$$(CURRENT_KB) KEYMAP=$$(CURRENT_KM)
 | 
			
		||||
    # And the first part of the make command
 | 
			
		||||
    MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f $(BUILDDEFS_PATH)/build_keyboard.mk $$(MAKE_TARGET)
 | 
			
		||||
    MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_keyboard.mk $$(MAKE_TARGET)
 | 
			
		||||
    # The message to display
 | 
			
		||||
    MAKE_MSG := $$(MSG_MAKE_KB)
 | 
			
		||||
    # We run the command differently, depending on if we want more output or not
 | 
			
		||||
| 
						 | 
				
			
			@ -306,8 +421,6 @@ define BUILD
 | 
			
		|||
        LOG=$$$$($$(MAKE_CMD) $$(MAKE_VARS) SILENT=true 2>&1) ; \
 | 
			
		||||
        if [ $$$$? -gt 0 ]; \
 | 
			
		||||
            then $$(PRINT_ERROR_PLAIN); \
 | 
			
		||||
        elif [ "$$$$LOG" = "skipped" ] ; \
 | 
			
		||||
            then $$(PRINT_SKIPPED_PLAIN); \
 | 
			
		||||
        elif [ "$$$$LOG" != "" ] ; \
 | 
			
		||||
            then $$(PRINT_WARNING_PLAIN); \
 | 
			
		||||
        else \
 | 
			
		||||
| 
						 | 
				
			
			@ -327,20 +440,18 @@ define PARSE_ALL_KEYMAPS
 | 
			
		|||
endef
 | 
			
		||||
 | 
			
		||||
define BUILD_TEST
 | 
			
		||||
    TEST_PATH := $1
 | 
			
		||||
    TEST_NAME := $$(notdir $$(TEST_PATH))
 | 
			
		||||
    TEST_FULL_NAME := $$(subst /,_,$$(patsubst $$(ROOT_DIR)tests/%,%,$$(TEST_PATH)))
 | 
			
		||||
    TEST_NAME := $1
 | 
			
		||||
    MAKE_TARGET := $2
 | 
			
		||||
    COMMAND := $1
 | 
			
		||||
    MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f $(BUILDDEFS_PATH)/build_test.mk $$(MAKE_TARGET)
 | 
			
		||||
    MAKE_VARS := TEST=$$(TEST_NAME) TEST_OUTPUT=$$(TEST_FULL_NAME) TEST_PATH=$$(TEST_PATH) FULL_TESTS="$$(FULL_TESTS)"
 | 
			
		||||
    MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_test.mk $$(MAKE_TARGET)
 | 
			
		||||
    MAKE_VARS := TEST=$$(TEST_NAME) FULL_TESTS="$$(FULL_TESTS)"
 | 
			
		||||
    MAKE_MSG := $$(MSG_MAKE_TEST)
 | 
			
		||||
    $$(eval $$(call BUILD))
 | 
			
		||||
    ifneq ($$(MAKE_TARGET),clean)
 | 
			
		||||
        TEST_EXECUTABLE := $$(TEST_OUTPUT_DIR)/$$(TEST_FULL_NAME).elf
 | 
			
		||||
        TESTS += $$(TEST_FULL_NAME)
 | 
			
		||||
        TEST_EXECUTABLE := $$(TEST_DIR)/$$(TEST_NAME).elf
 | 
			
		||||
        TESTS += $$(TEST_NAME)
 | 
			
		||||
        TEST_MSG := $$(MSG_TEST)
 | 
			
		||||
        $$(TEST_FULL_NAME)_COMMAND := \
 | 
			
		||||
        $$(TEST_NAME)_COMMAND := \
 | 
			
		||||
            printf "$$(TEST_MSG)\n"; \
 | 
			
		||||
            $$(TEST_EXECUTABLE); \
 | 
			
		||||
            if [ $$$$? -gt 0 ]; \
 | 
			
		||||
| 
						 | 
				
			
			@ -350,21 +461,14 @@ define BUILD_TEST
 | 
			
		|||
    endif
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
define LIST_TEST
 | 
			
		||||
    include $(BUILDDEFS_PATH)/testlist.mk
 | 
			
		||||
    FOUND_TESTS := $$(patsubst ./tests/%,%,$$(TEST_LIST))
 | 
			
		||||
    $$(info $$(FOUND_TESTS))
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
define PARSE_TEST
 | 
			
		||||
    TESTS :=
 | 
			
		||||
    TEST_NAME := $$(firstword $$(subst :, ,$$(RULE)))
 | 
			
		||||
    TEST_TARGET := $$(subst $$(TEST_NAME),,$$(subst $$(TEST_NAME):,,$$(RULE)))
 | 
			
		||||
    include $(BUILDDEFS_PATH)/testlist.mk
 | 
			
		||||
    ifeq ($$(TEST_NAME),all)
 | 
			
		||||
        MATCHED_TESTS := $$(TEST_LIST)
 | 
			
		||||
    else
 | 
			
		||||
        MATCHED_TESTS := $$(foreach TEST, $$(TEST_LIST),$$(if $$(findstring x$$(TEST_NAME)x, x$$(patsubst ./tests/%,%,$$(TEST)x)), $$(TEST),))
 | 
			
		||||
        MATCHED_TESTS := $$(foreach TEST,$$(TEST_LIST),$$(if $$(findstring $$(TEST_NAME),$$(TEST)),$$(TEST),))
 | 
			
		||||
    endif
 | 
			
		||||
    $$(foreach TEST,$$(MATCHED_TESTS),$$(eval $$(call BUILD_TEST,$$(TEST),$$(TEST_TARGET))))
 | 
			
		||||
endef
 | 
			
		||||
| 
						 | 
				
			
			@ -383,7 +487,7 @@ define SET_SILENT_MODE
 | 
			
		|||
    endif
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
include $(BUILDDEFS_PATH)/message.mk
 | 
			
		||||
include $(ROOT_DIR)/message.mk
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(BREAK_ON_ERRORS)), yes)
 | 
			
		||||
HANDLE_ERROR = exit 1
 | 
			
		||||
| 
						 | 
				
			
			@ -408,18 +512,23 @@ if [ $$error_occurred -gt 0 ]; then $(HANDLE_ERROR); fi;
 | 
			
		|||
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
# Catch everything and parse the command line ourselves.
 | 
			
		||||
# Let's match everything, we handle all the rule parsing ourselves
 | 
			
		||||
.PHONY: %
 | 
			
		||||
%:
 | 
			
		||||
	# Ensure that $(QMK_BIN) works.
 | 
			
		||||
	if ! $(QMK_BIN) hello 1> /dev/null 2>&1; then printf "$(MSG_PYTHON_MISSING)"; exit 1; fi
 | 
			
		||||
ifdef NOT_REPO
 | 
			
		||||
	printf "$(MSG_NOT_REPO)"
 | 
			
		||||
endif
 | 
			
		||||
ifndef SKIP_GIT
 | 
			
		||||
	$(QMK_BIN) git-submodule --sync
 | 
			
		||||
	# Check if we have the CMP tool installed
 | 
			
		||||
	cmp $(ROOT_DIR)/Makefile $(ROOT_DIR)/Makefile >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi;
 | 
			
		||||
	# Check if the submodules are dirty, and display a warning if they are
 | 
			
		||||
	if ! $(QMK_BIN) git-submodule --check 1> /dev/null 2>&1; then printf "$(MSG_SUBMODULE_DIRTY)"; fi
 | 
			
		||||
ifndef SKIP_GIT
 | 
			
		||||
	if [ ! -e lib/chibios ]; then git submodule sync lib/chibios && git submodule update --init lib/chibios; fi
 | 
			
		||||
	if [ ! -e lib/chibios-contrib ]; then git submodule sync lib/chibios-contrib && git submodule update --init lib/chibios-contrib; fi
 | 
			
		||||
	if [ ! -e lib/ugfx ]; then git submodule sync lib/ugfx && git submodule update --init lib/ugfx; fi
 | 
			
		||||
	git submodule status --recursive 2>/dev/null | \
 | 
			
		||||
	while IFS= read -r x; do \
 | 
			
		||||
		case "$$x" in \
 | 
			
		||||
			\ *) ;; \
 | 
			
		||||
			*) printf "$(MSG_SUBMODULE_DIRTY)";break;; \
 | 
			
		||||
		esac \
 | 
			
		||||
	done
 | 
			
		||||
endif
 | 
			
		||||
	rm -f $(ERROR_FILE) > /dev/null 2>&1
 | 
			
		||||
	$(eval $(call PARSE_RULE,$@))
 | 
			
		||||
| 
						 | 
				
			
			@ -428,68 +537,54 @@ endif
 | 
			
		|||
	# it has to be there to allow parallel execution of the submake
 | 
			
		||||
	# This always tries to compile everything, even if error occurs in the middle
 | 
			
		||||
	# But we return the error code at the end, to trigger travis failures
 | 
			
		||||
	# The sort at this point is to remove duplicates
 | 
			
		||||
	$(foreach COMMAND,$(sort $(COMMANDS)),$(RUN_COMMAND))
 | 
			
		||||
	$(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND))
 | 
			
		||||
	if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi;
 | 
			
		||||
	$(foreach TEST,$(sort $(TESTS)),$(RUN_TEST))
 | 
			
		||||
	$(foreach TEST,$(TESTS),$(RUN_TEST))
 | 
			
		||||
	if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi;
 | 
			
		||||
 | 
			
		||||
# These no longer work because of the colon system
 | 
			
		||||
 | 
			
		||||
# All should compile everything
 | 
			
		||||
# .PHONY: all
 | 
			
		||||
# all: all-keyboards test-all
 | 
			
		||||
 | 
			
		||||
# Define some shortcuts, mostly for compatibility with the old syntax
 | 
			
		||||
# .PHONY: all-keyboards
 | 
			
		||||
# all-keyboards: all\:all\:all
 | 
			
		||||
 | 
			
		||||
# .PHONY: all-keyboards-defaults
 | 
			
		||||
# all-keyboards-defaults: all\:default
 | 
			
		||||
 | 
			
		||||
# .PHONY: test
 | 
			
		||||
# test: test-all
 | 
			
		||||
 | 
			
		||||
# .PHONY: test-clean
 | 
			
		||||
# test-clean: test-all-clean
 | 
			
		||||
 | 
			
		||||
lib/%:
 | 
			
		||||
	git submodule sync $?
 | 
			
		||||
	git submodule update --init $?
 | 
			
		||||
 | 
			
		||||
.PHONY: git-submodule
 | 
			
		||||
git-submodule:
 | 
			
		||||
	$(QMK_BIN) git-submodule
 | 
			
		||||
	git submodule sync --recursive
 | 
			
		||||
	git submodule update --init --recursive
 | 
			
		||||
 | 
			
		||||
.PHONY: git-submodules
 | 
			
		||||
git-submodules: git-submodule
 | 
			
		||||
 | 
			
		||||
.PHONY: list-keyboards
 | 
			
		||||
list-keyboards:
 | 
			
		||||
	$(QMK_BIN) list-keyboards --no-resolve-defaults | tr '\n' ' '
 | 
			
		||||
 | 
			
		||||
.PHONY: list-tests
 | 
			
		||||
list-tests:
 | 
			
		||||
	$(eval $(call LIST_TEST))
 | 
			
		||||
 | 
			
		||||
.PHONY: generate-keyboards-file
 | 
			
		||||
generate-keyboards-file:
 | 
			
		||||
	$(QMK_BIN) list-keyboards --no-resolve-defaults
 | 
			
		||||
 | 
			
		||||
.PHONY: clean
 | 
			
		||||
clean:
 | 
			
		||||
	echo -n 'Deleting .build/ ... '
 | 
			
		||||
	rm -rf $(BUILD_DIR)
 | 
			
		||||
	echo 'done.'
 | 
			
		||||
 | 
			
		||||
.PHONY: distclean distclean_qmk
 | 
			
		||||
distclean: distclean_qmk
 | 
			
		||||
distclean_qmk: clean
 | 
			
		||||
	echo -n 'Deleting *.bin, *.hex, and *.uf2 ... '
 | 
			
		||||
	rm -f *.bin *.hex *.uf2
 | 
			
		||||
	echo 'done.'
 | 
			
		||||
 | 
			
		||||
ifneq ($(QMK_USERSPACE),)
 | 
			
		||||
.PHONY: distclean_userspace
 | 
			
		||||
distclean: distclean_userspace
 | 
			
		||||
distclean_userspace: clean
 | 
			
		||||
	echo -n 'Deleting userspace *.bin, *.hex, and *.uf2 ... '
 | 
			
		||||
	rm -f $(QMK_USERSPACE)/*.bin $(QMK_USERSPACE)/*.hex $(QMK_USERSPACE)/*.uf2
 | 
			
		||||
	echo 'done.'
 | 
			
		||||
ifdef SKIP_VERSION
 | 
			
		||||
SKIP_GIT := yes
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Extra targets for formatting and/or pytest, running within the qmk/qmk_cli container to match GHA.
 | 
			
		||||
CONTAINER_PREAMBLE := export HOME="/tmp"; export PATH="/tmp/.local/bin:\$$PATH"; python3 -m pip install --upgrade pip; python3 -m pip install -r requirements-dev.txt
 | 
			
		||||
# Generate the version.h file
 | 
			
		||||
ifndef SKIP_GIT
 | 
			
		||||
    GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S")
 | 
			
		||||
else
 | 
			
		||||
    GIT_VERSION := NA
 | 
			
		||||
endif
 | 
			
		||||
ifndef SKIP_VERSION
 | 
			
		||||
BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S")
 | 
			
		||||
$(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(ROOT_DIR)/quantum/version.h)
 | 
			
		||||
$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(ROOT_DIR)/quantum/version.h)
 | 
			
		||||
else
 | 
			
		||||
BUILD_DATE := NA
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
.PHONY: format-core
 | 
			
		||||
format-core:
 | 
			
		||||
	RUNTIME=docker ./util/docker_cmd.sh bash -lic "$(CONTAINER_PREAMBLE); qmk format-c --core-only -a && qmk format-python -a"
 | 
			
		||||
 | 
			
		||||
.PHONY: pytest
 | 
			
		||||
pytest:
 | 
			
		||||
	RUNTIME=docker ./util/docker_cmd.sh bash -lic "$(CONTAINER_PREAMBLE); qmk pytest"
 | 
			
		||||
 | 
			
		||||
.PHONY: format-and-pytest
 | 
			
		||||
format-and-pytest:
 | 
			
		||||
	RUNTIME=docker ./util/docker_cmd.sh bash -lic "$(CONTAINER_PREAMBLE); qmk format-c --core-only -a && qmk format-python -a && qmk pytest"
 | 
			
		||||
include $(ROOT_DIR)/testlist.mk
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										98
									
								
								Vagrantfile
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								Vagrantfile
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,98 @@
 | 
			
		|||
# -*- mode: ruby -*-
 | 
			
		||||
# vi: set ft=ruby :
 | 
			
		||||
 | 
			
		||||
Vagrant.configure(2) do |config|
 | 
			
		||||
  # You can only have one config.vm.box uncommented at a time
 | 
			
		||||
 | 
			
		||||
  # Comment this and uncomment another if you don't want to use the minimal Arch box
 | 
			
		||||
  #config.vm.box = "dragon788/arch-ala-elasticdog"
 | 
			
		||||
 | 
			
		||||
  # VMware/Virtualbox 64 bit
 | 
			
		||||
  config.vm.box = "phusion/ubuntu-14.04-amd64"
 | 
			
		||||
  #
 | 
			
		||||
  # VMware/Virtualbox 64 bit
 | 
			
		||||
  #config.vm.box = "puphpet/centos65-x64"
 | 
			
		||||
  #
 | 
			
		||||
  # The opensuse boxes don't have dfu-util in their default repositories
 | 
			
		||||
  #
 | 
			
		||||
  # The virtualbox version has tools issues
 | 
			
		||||
  # VMware/Virtualbox 64 bit
 | 
			
		||||
  #config.vm.box = "bento/opensuse-13.2-x86_64"
 | 
			
		||||
  #
 | 
			
		||||
  # Virtualbox only
 | 
			
		||||
  #config.vm.box = "bento/opensuse-13.2-i386"
 | 
			
		||||
  # config.vm.box = ""
 | 
			
		||||
  # config.vm.box = ""
 | 
			
		||||
 | 
			
		||||
  # This section allows you to customize the Virtualbox VM
 | 
			
		||||
  # settings, ie showing the GUI or upping the memory
 | 
			
		||||
  # or cores if desired
 | 
			
		||||
  config.vm.provider "virtualbox" do |vb|
 | 
			
		||||
    # Hide the VirtualBox GUI when booting the machine
 | 
			
		||||
    vb.gui = false
 | 
			
		||||
    # Uncomment the below lines if you want to program
 | 
			
		||||
    # your Teensy via the VM rather than your host OS
 | 
			
		||||
    #vb.customize ['modifyvm', :id, '--usb', 'on']
 | 
			
		||||
    #vb.customize ['usbfilter', 'add', '0',
 | 
			
		||||
    #    	  '--target', :id,
 | 
			
		||||
    #    	  '--name', 'teensy',
 | 
			
		||||
    #    	  '--vendorid', '0x16c0',
 | 
			
		||||
    #    	  '--productid','0x0478'
 | 
			
		||||
    #		 ]
 | 
			
		||||
    # Customize the amount of memory on the VM:
 | 
			
		||||
    vb.memory = "512"
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # This section allows you to customize the VMware VM
 | 
			
		||||
  # settings, ie showing the GUI or upping the memory
 | 
			
		||||
  # or cores if desired
 | 
			
		||||
  config.vm.provider "vmware_workstation" do |vmw|
 | 
			
		||||
    # Hide the VMware GUI when booting the machine
 | 
			
		||||
    vmw.gui = false
 | 
			
		||||
 | 
			
		||||
    # Customize the amount of memory on the VM:
 | 
			
		||||
    vmw.memory = "512"
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  config.vm.provider "vmware_fusion" do |vmf|
 | 
			
		||||
    # Hide the vmfare GUI when booting the machine
 | 
			
		||||
    vmf.gui = false
 | 
			
		||||
 | 
			
		||||
    # Customize the amount of memory on the VM:
 | 
			
		||||
    vmf.memory = "512"
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Docker provider pulls from hub.docker.com respecting docker.image if
 | 
			
		||||
  # config.vm.box is nil. Note that this bind-mounts from the current dir to
 | 
			
		||||
  # /vagrant in the guest, so unless your UID is 1000 to match vagrant in the
 | 
			
		||||
  # image, you'll need to: chmod -R a+rw .
 | 
			
		||||
  config.vm.provider "docker" do |docker, override|
 | 
			
		||||
    override.vm.box = nil
 | 
			
		||||
    docker.image = "jesselang/debian-vagrant:jessie"
 | 
			
		||||
    docker.has_ssh = true
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # This script ensures the required packages for AVR programming are installed
 | 
			
		||||
  # It also ensures the system always gets the latest updates when powered on
 | 
			
		||||
  # If this causes issues you can run a 'vagrant destroy' and then
 | 
			
		||||
  # add a # before ,args: and run 'vagrant up' to get a working
 | 
			
		||||
  # non-updated box and then attempt to troubleshoot or open a Github issue
 | 
			
		||||
 | 
			
		||||
  config.vm.provision "shell", run: "always", path: "./util/install_dependencies.sh", args: "-update"
 | 
			
		||||
 | 
			
		||||
  config.vm.post_up_message = <<-EOT
 | 
			
		||||
  Log into the VM using 'vagrant ssh' on OSX or from Git Bash (Win)
 | 
			
		||||
  or 'vagrant ssh-config' and Putty or Bitvise SSH or another SSH tool
 | 
			
		||||
 | 
			
		||||
  Change directory (cd) to the keyboard you wish to program
 | 
			
		||||
  (Optionally) modify your layout,
 | 
			
		||||
  then run 'make clean'
 | 
			
		||||
  and then 'make' to compile the .eep and .hex files.
 | 
			
		||||
 | 
			
		||||
  Or you can copy and paste the example line below.
 | 
			
		||||
 | 
			
		||||
  cd /vagrant; cd keyboards; cd ergodox; make clean; make
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  EOT
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										1
									
								
								autocomplete.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								autocomplete.sh
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										46
									
								
								book.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								book.json
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,46 @@
 | 
			
		|||
{
 | 
			
		||||
    "structure": {
 | 
			
		||||
        "summary": "_summary.md"
 | 
			
		||||
    },
 | 
			
		||||
    "plugins" : [
 | 
			
		||||
      "edit-link",
 | 
			
		||||
      "forkmegithub",
 | 
			
		||||
      "hints",
 | 
			
		||||
      "page-toc",
 | 
			
		||||
      "terminal",
 | 
			
		||||
      "toolbar",
 | 
			
		||||
      "bulk-redirect"
 | 
			
		||||
    ],
 | 
			
		||||
    "pluginsConfig": {
 | 
			
		||||
      "edit-link": {
 | 
			
		||||
        "base": "https://github.com/qmk/qmk_firmware/edit/master/docs",
 | 
			
		||||
        "label": "Suggest an edit"
 | 
			
		||||
      },
 | 
			
		||||
      "forkmegithub": {
 | 
			
		||||
        "color": "red",
 | 
			
		||||
        "url": "https://github.com/qmk/qmk_firmware"
 | 
			
		||||
      },
 | 
			
		||||
      "page-toc": {
 | 
			
		||||
        "selector": ".markdown-section h1, .markdown-section h2"
 | 
			
		||||
      },
 | 
			
		||||
      "terminal": {
 | 
			
		||||
        "copyButtons": true,
 | 
			
		||||
        "fade": false,
 | 
			
		||||
        "style": "flat"
 | 
			
		||||
      },
 | 
			
		||||
      "toolbar": {
 | 
			
		||||
        "buttons": [
 | 
			
		||||
          {
 | 
			
		||||
            "label": "QMK Firmware",
 | 
			
		||||
            "icon": "fa fa-github",
 | 
			
		||||
            "url": "https://github.com/qmk/qmk_firmware"
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }, 
 | 
			
		||||
      "bulk-redirect": {
 | 
			
		||||
          "basepath": "/",
 | 
			
		||||
          "redirectsFile": "docs/redirects.json"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "root": "./docs/"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										33
									
								
								build_full_test.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								build_full_test.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
# Copyright 2017 Fred Sundvik
 | 
			
		||||
#
 | 
			
		||||
# This program is free software: you can redistribute it and/or modify
 | 
			
		||||
# it under the terms of the GNU General Public License as published by
 | 
			
		||||
# the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
# (at your option) any later version.
 | 
			
		||||
#
 | 
			
		||||
# This program is distributed in the hope that it will be useful,
 | 
			
		||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
# GNU General Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
# You should have received a copy of the GNU General Public License
 | 
			
		||||
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
#include $(TMK_PATH)/protocol.mk
 | 
			
		||||
 | 
			
		||||
TEST_PATH=tests/$(TEST)
 | 
			
		||||
 | 
			
		||||
$(TEST)_SRC= \
 | 
			
		||||
	$(TEST_PATH)/keymap.c \
 | 
			
		||||
	$(TMK_COMMON_SRC) \
 | 
			
		||||
	$(QUANTUM_SRC) \
 | 
			
		||||
	$(SRC) \
 | 
			
		||||
	tests/test_common/matrix.c \
 | 
			
		||||
	tests/test_common/test_driver.cpp \
 | 
			
		||||
	tests/test_common/keyboard_report_util.cpp \
 | 
			
		||||
	tests/test_common/test_fixture.cpp
 | 
			
		||||
$(TEST)_SRC += $(patsubst $(ROOTDIR)/%,%,$(wildcard $(TEST_PATH)/*.cpp))
 | 
			
		||||
 | 
			
		||||
$(TEST)_DEFS=$(TMK_COMMON_DEFS) $(OPT_DEFS)
 | 
			
		||||
$(TEST)_CONFIG=$(TEST_PATH)/config.h
 | 
			
		||||
VPATH+=$(TOP_DIR)/tests/test_common
 | 
			
		||||
							
								
								
									
										258
									
								
								build_keyboard.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										258
									
								
								build_keyboard.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,258 @@
 | 
			
		|||
ifndef VERBOSE
 | 
			
		||||
.SILENT:
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
.DEFAULT_GOAL := all
 | 
			
		||||
 | 
			
		||||
include common.mk
 | 
			
		||||
 | 
			
		||||
# 5/4/3/2/1
 | 
			
		||||
KEYBOARD_FOLDER_PATH_1 := $(KEYBOARD)
 | 
			
		||||
KEYBOARD_FOLDER_PATH_2 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_1)))
 | 
			
		||||
KEYBOARD_FOLDER_PATH_3 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_2)))
 | 
			
		||||
KEYBOARD_FOLDER_PATH_4 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_3)))
 | 
			
		||||
KEYBOARD_FOLDER_PATH_5 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_4)))
 | 
			
		||||
KEYBOARD_FOLDER_1 := $(notdir $(KEYBOARD_FOLDER_PATH_1))
 | 
			
		||||
KEYBOARD_FOLDER_2 := $(notdir $(KEYBOARD_FOLDER_PATH_2))
 | 
			
		||||
KEYBOARD_FOLDER_3 := $(notdir $(KEYBOARD_FOLDER_PATH_3))
 | 
			
		||||
KEYBOARD_FOLDER_4 := $(notdir $(KEYBOARD_FOLDER_PATH_4))
 | 
			
		||||
KEYBOARD_FOLDER_5 := $(notdir $(KEYBOARD_FOLDER_PATH_5))
 | 
			
		||||
 | 
			
		||||
KEYBOARD_FILESAFE := $(subst /,_,$(KEYBOARD))
 | 
			
		||||
 | 
			
		||||
TARGET ?= $(KEYBOARD_FILESAFE)_$(KEYMAP)
 | 
			
		||||
KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD_FILESAFE)
 | 
			
		||||
 | 
			
		||||
# Force expansion
 | 
			
		||||
TARGET := $(TARGET)
 | 
			
		||||
 | 
			
		||||
MASTER ?= left
 | 
			
		||||
ifdef master
 | 
			
		||||
    MASTER = $(master)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(MASTER),right)
 | 
			
		||||
    OPT_DEFS += -DMASTER_IS_ON_RIGHT
 | 
			
		||||
else
 | 
			
		||||
    ifneq ($(MASTER),left)
 | 
			
		||||
$(error MASTER does not have a valid value(left/right))
 | 
			
		||||
    endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
KEYBOARD_PATHS :=
 | 
			
		||||
 | 
			
		||||
KEYBOARD_PATH_1 := keyboards/$(KEYBOARD_FOLDER_PATH_1)
 | 
			
		||||
KEYBOARD_PATH_2 := keyboards/$(KEYBOARD_FOLDER_PATH_2)
 | 
			
		||||
KEYBOARD_PATH_3 := keyboards/$(KEYBOARD_FOLDER_PATH_3)
 | 
			
		||||
KEYBOARD_PATH_4 := keyboards/$(KEYBOARD_FOLDER_PATH_4)
 | 
			
		||||
KEYBOARD_PATH_5 := keyboards/$(KEYBOARD_FOLDER_PATH_5)
 | 
			
		||||
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/rules.mk)","")
 | 
			
		||||
    KEYBOARD_PATHS += $(KEYBOARD_PATH_5)
 | 
			
		||||
    include $(KEYBOARD_PATH_5)/rules.mk
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/rules.mk)","")
 | 
			
		||||
    KEYBOARD_PATHS += $(KEYBOARD_PATH_4)
 | 
			
		||||
    include $(KEYBOARD_PATH_4)/rules.mk
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/rules.mk)","")
 | 
			
		||||
    KEYBOARD_PATHS += $(KEYBOARD_PATH_3)
 | 
			
		||||
    include $(KEYBOARD_PATH_3)/rules.mk
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/rules.mk)","")
 | 
			
		||||
    KEYBOARD_PATHS += $(KEYBOARD_PATH_2)
 | 
			
		||||
    include $(KEYBOARD_PATH_2)/rules.mk
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/rules.mk)","")
 | 
			
		||||
    KEYBOARD_PATHS += $(KEYBOARD_PATH_1)
 | 
			
		||||
    include $(KEYBOARD_PATH_1)/rules.mk
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
KEYBOARD_SRC :=
 | 
			
		||||
 | 
			
		||||
KEYBOARD_C_1 := $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).c
 | 
			
		||||
KEYBOARD_C_2 := $(KEYBOARD_PATH_2)/$(KEYBOARD_FOLDER_2).c
 | 
			
		||||
KEYBOARD_C_3 := $(KEYBOARD_PATH_3)/$(KEYBOARD_FOLDER_3).c
 | 
			
		||||
KEYBOARD_C_4 := $(KEYBOARD_PATH_4)/$(KEYBOARD_FOLDER_4).c
 | 
			
		||||
KEYBOARD_C_5 := $(KEYBOARD_PATH_5)/$(KEYBOARD_FOLDER_5).c
 | 
			
		||||
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_C_5))","")
 | 
			
		||||
    KEYBOARD_SRC += $(KEYBOARD_C_5)
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_C_4))","")
 | 
			
		||||
    KEYBOARD_SRC += $(KEYBOARD_C_4)
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_C_3))","")
 | 
			
		||||
    KEYBOARD_SRC += $(KEYBOARD_C_3)
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_C_2))","")
 | 
			
		||||
    KEYBOARD_SRC += $(KEYBOARD_C_2)
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_C_1))","")
 | 
			
		||||
    KEYBOARD_SRC += $(KEYBOARD_C_1)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE)
 | 
			
		||||
 | 
			
		||||
# We can assume a ChibiOS target When MCU_FAMILY is defined , since it's not used for LUFA
 | 
			
		||||
ifdef MCU_FAMILY
 | 
			
		||||
    PLATFORM=CHIBIOS
 | 
			
		||||
else
 | 
			
		||||
    PLATFORM=AVR
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(PLATFORM),CHIBIOS)
 | 
			
		||||
    include $(TMK_PATH)/protocol/chibios.mk
 | 
			
		||||
    include $(TMK_PATH)/chibios.mk
 | 
			
		||||
    OPT_OS = chibios
 | 
			
		||||
    ifneq ("$(wildcard $(KEYBOARD_PATH_5)/bootloader_defs.h)","")
 | 
			
		||||
        OPT_DEFS += -include $(KEYBOARD_PATH_5)/bootloader_defs.h
 | 
			
		||||
     else ifneq ("$(wildcard $(KEYBOARD_PATH_5)/boards/$(BOARD)/bootloader_defs.h)","")
 | 
			
		||||
        OPT_DEFS += -include $(KEYBOARD_PATH_5)/boards/$(BOARD)/bootloader_defs.h
 | 
			
		||||
    else ifneq ("$(wildcard $(KEYBOARD_PATH_4)/bootloader_defs.h)","")
 | 
			
		||||
        OPT_DEFS += -include $(KEYBOARD_PATH_4)/bootloader_defs.h
 | 
			
		||||
     else ifneq ("$(wildcard $(KEYBOARD_PATH_4)/boards/$(BOARD)/bootloader_defs.h)","")
 | 
			
		||||
        OPT_DEFS += -include $(KEYBOARD_PATH_4)/boards/$(BOARD)/bootloader_defs.h
 | 
			
		||||
    else ifneq ("$(wildcard $(KEYBOARD_PATH_3)/bootloader_defs.h)","")
 | 
			
		||||
        OPT_DEFS += -include $(KEYBOARD_PATH_3)/bootloader_defs.h
 | 
			
		||||
     else ifneq ("$(wildcard $(KEYBOARD_PATH_3)/boards/$(BOARD)/bootloader_defs.h)","")
 | 
			
		||||
        OPT_DEFS += -include $(KEYBOARD_PATH_3)/boards/$(BOARD)/bootloader_defs.h
 | 
			
		||||
    else ifneq ("$(wildcard $(KEYBOARD_PATH_2)/bootloader_defs.h)","")
 | 
			
		||||
        OPT_DEFS += -include $(KEYBOARD_PATH_2)/bootloader_defs.h
 | 
			
		||||
     else ifneq ("$(wildcard $(KEYBOARD_PATH_2)/boards/$(BOARD)/bootloader_defs.h)","")
 | 
			
		||||
        OPT_DEFS += -include $(KEYBOARD_PATH_2)/boards/$(BOARD)/bootloader_defs.h
 | 
			
		||||
    else ifneq ("$(wildcard $(KEYBOARD_PATH_1)/bootloader_defs.h)","")
 | 
			
		||||
        OPT_DEFS += -include $(KEYBOARD_PATH_1)/bootloader_defs.h
 | 
			
		||||
     else ifneq ("$(wildcard $(KEYBOARD_PATH_1)/boards/$(BOARD)/bootloader_defs.h)","")
 | 
			
		||||
        OPT_DEFS += -include $(KEYBOARD_PATH_1)/boards/$(BOARD)/bootloader_defs.h
 | 
			
		||||
    endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
CONFIG_H :=
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/config.h)","")
 | 
			
		||||
    CONFIG_H += $(KEYBOARD_PATH_5)/config.h
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/config.h)","")
 | 
			
		||||
    CONFIG_H += $(KEYBOARD_PATH_4)/config.h
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/config.h)","")
 | 
			
		||||
    CONFIG_H += $(KEYBOARD_PATH_3)/config.h
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/config.h)","")
 | 
			
		||||
    CONFIG_H += $(KEYBOARD_PATH_2)/config.h
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/config.h)","")
 | 
			
		||||
    CONFIG_H += $(KEYBOARD_PATH_1)/config.h
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Save the defines and includes here, so we don't include any keymap specific ones
 | 
			
		||||
PROJECT_DEFS := $(OPT_DEFS)
 | 
			
		||||
PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(KEYBOARD_PATHS)
 | 
			
		||||
PROJECT_CONFIG := $(CONFIG_H)
 | 
			
		||||
 | 
			
		||||
MAIN_KEYMAP_PATH_1 := $(KEYBOARD_PATH_1)/keymaps/$(KEYMAP)
 | 
			
		||||
MAIN_KEYMAP_PATH_2 := $(KEYBOARD_PATH_2)/keymaps/$(KEYMAP)
 | 
			
		||||
MAIN_KEYMAP_PATH_3 := $(KEYBOARD_PATH_3)/keymaps/$(KEYMAP)
 | 
			
		||||
MAIN_KEYMAP_PATH_4 := $(KEYBOARD_PATH_4)/keymaps/$(KEYMAP)
 | 
			
		||||
MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP)
 | 
			
		||||
 | 
			
		||||
ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.c)","")
 | 
			
		||||
    -include $(MAIN_KEYMAP_PATH_5)/rules.mk
 | 
			
		||||
    KEYMAP_C := $(MAIN_KEYMAP_PATH_5)/keymap.c
 | 
			
		||||
    KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5)
 | 
			
		||||
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.c)","")
 | 
			
		||||
    -include $(MAIN_KEYMAP_PATH_4)/rules.mk
 | 
			
		||||
    KEYMAP_C := $(MAIN_KEYMAP_PATH_4)/keymap.c
 | 
			
		||||
    KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4)
 | 
			
		||||
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.c)","")
 | 
			
		||||
    -include $(MAIN_KEYMAP_PATH_3)/rules.mk
 | 
			
		||||
    KEYMAP_C := $(MAIN_KEYMAP_PATH_3)/keymap.c
 | 
			
		||||
    KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3)
 | 
			
		||||
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.c)","")
 | 
			
		||||
    -include $(MAIN_KEYMAP_PATH_2)/rules.mk
 | 
			
		||||
    KEYMAP_C := $(MAIN_KEYMAP_PATH_2)/keymap.c
 | 
			
		||||
    KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2)
 | 
			
		||||
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.c)","")
 | 
			
		||||
    -include $(MAIN_KEYMAP_PATH_1)/rules.mk
 | 
			
		||||
    KEYMAP_C := $(MAIN_KEYMAP_PATH_1)/keymap.c
 | 
			
		||||
    KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1)
 | 
			
		||||
else ifneq ($(LAYOUTS),)
 | 
			
		||||
    include build_layout.mk
 | 
			
		||||
else 
 | 
			
		||||
    $(error Could not find keymap)
 | 
			
		||||
    # this state should never be reached
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# User space stuff
 | 
			
		||||
USER_PATH := users/$(KEYMAP)
 | 
			
		||||
-include $(USER_PATH)/rules.mk
 | 
			
		||||
 | 
			
		||||
# Object files directory
 | 
			
		||||
#     To put object files in current directory, use a dot (.), do NOT make
 | 
			
		||||
#     this an empty or blank macro!
 | 
			
		||||
KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET)
 | 
			
		||||
 | 
			
		||||
ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
 | 
			
		||||
    CONFIG_H += $(KEYMAP_PATH)/config.h
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# # project specific files
 | 
			
		||||
SRC += $(KEYBOARD_SRC) \
 | 
			
		||||
    $(KEYMAP_C) \
 | 
			
		||||
    $(QUANTUM_SRC)
 | 
			
		||||
 | 
			
		||||
# Optimize size but this may cause error "relocation truncated to fit"
 | 
			
		||||
#EXTRALDFLAGS = -Wl,--relax
 | 
			
		||||
 | 
			
		||||
# Search Path
 | 
			
		||||
VPATH += $(KEYMAP_PATH)
 | 
			
		||||
VPATH += $(KEYBOARD_PATHS)
 | 
			
		||||
VPATH += $(COMMON_VPATH)
 | 
			
		||||
VPATH += $(USER_PATH)
 | 
			
		||||
 | 
			
		||||
include common_features.mk
 | 
			
		||||
include $(TMK_PATH)/protocol.mk
 | 
			
		||||
include $(TMK_PATH)/common.mk
 | 
			
		||||
 | 
			
		||||
SRC += $(TMK_COMMON_SRC)
 | 
			
		||||
OPT_DEFS += $(TMK_COMMON_DEFS)
 | 
			
		||||
EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS)
 | 
			
		||||
 | 
			
		||||
ifeq ($(PLATFORM),AVR)
 | 
			
		||||
ifeq ($(strip $(PROTOCOL)), VUSB)
 | 
			
		||||
    include $(TMK_PATH)/protocol/vusb.mk
 | 
			
		||||
else
 | 
			
		||||
    include $(TMK_PATH)/protocol/lufa.mk
 | 
			
		||||
endif
 | 
			
		||||
    include $(TMK_PATH)/avr.mk
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
 | 
			
		||||
    VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer
 | 
			
		||||
    VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer
 | 
			
		||||
    include $(VISUALIZER_PATH)/visualizer.mk
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT)
 | 
			
		||||
$(KEYMAP_OUTPUT)_SRC := $(SRC)
 | 
			
		||||
$(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) $(GFXDEFS) \
 | 
			
		||||
-DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYBOARD_H=\"$(KEYBOARD_FOLDER_1).h\" -DQMK_KEYBOARD_CONFIG_H=\"$(KEYBOARD_PATH_1)/config.h\" \
 | 
			
		||||
-DQMK_KEYMAP=\"$(KEYMAP)\" -DQMK_KEYMAP_H=\"$(KEYMAP).h\" -DQMK_KEYMAP_CONFIG_H=\"$(KEYMAP_PATH)/config.h\" \
 | 
			
		||||
-DQMK_SUBPROJECT -DQMK_SUBPROJECT_H -DQMK_SUBPROJECT_CONFIG_H
 | 
			
		||||
$(KEYMAP_OUTPUT)_INC :=  $(VPATH) $(EXTRAINCDIRS)
 | 
			
		||||
$(KEYMAP_OUTPUT)_CONFIG := $(CONFIG_H)
 | 
			
		||||
$(KEYBOARD_OUTPUT)_SRC := $(CHIBISRC) $(GFXSRC)
 | 
			
		||||
$(KEYBOARD_OUTPUT)_DEFS := $(PROJECT_DEFS) $(GFXDEFS)
 | 
			
		||||
$(KEYBOARD_OUTPUT)_INC := $(PROJECT_INC) $(GFXINC)
 | 
			
		||||
$(KEYBOARD_OUTPUT)_CONFIG := $(PROJECT_CONFIG)
 | 
			
		||||
 | 
			
		||||
# Default target.
 | 
			
		||||
all: build sizeafter
 | 
			
		||||
 | 
			
		||||
# Change the build target to build a HEX file or a library.
 | 
			
		||||
build: elf hex
 | 
			
		||||
#build: elf hex eep lss sym
 | 
			
		||||
#build: lib
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
include $(TMK_PATH)/rules.mk
 | 
			
		||||
							
								
								
									
										18
									
								
								build_layout.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								build_layout.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
LAYOUTS_PATH := layouts
 | 
			
		||||
LAYOUTS_REPOS := $(patsubst %/,%,$(sort $(dir $(wildcard $(LAYOUTS_PATH)/*/))))
 | 
			
		||||
 | 
			
		||||
define SEARCH_LAYOUTS_REPO
 | 
			
		||||
    LAYOUT_KEYMAP_PATH := $$(LAYOUTS_REPO)/$$(LAYOUT)/$$(KEYMAP)
 | 
			
		||||
    LAYOUT_KEYMAP_C := $$(LAYOUT_KEYMAP_PATH)/keymap.c
 | 
			
		||||
    ifneq ("$$(wildcard $$(LAYOUT_KEYMAP_C))","")
 | 
			
		||||
        -include $$(LAYOUT_KEYMAP_PATH)/rules.mk
 | 
			
		||||
        KEYMAP_C := $$(LAYOUT_KEYMAP_C)
 | 
			
		||||
        KEYMAP_PATH := $$(LAYOUT_KEYMAP_PATH)
 | 
			
		||||
    endif
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
define SEARCH_LAYOUTS
 | 
			
		||||
    $$(foreach LAYOUTS_REPO,$$(LAYOUTS_REPOS),$$(eval $$(call SEARCH_LAYOUTS_REPO)))
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
$(foreach LAYOUT,$(LAYOUTS),$(eval $(call SEARCH_LAYOUTS)))
 | 
			
		||||
							
								
								
									
										67
									
								
								build_test.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								build_test.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,67 @@
 | 
			
		|||
ifndef VERBOSE
 | 
			
		||||
.SILENT:
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
.DEFAULT_GOAL := all
 | 
			
		||||
 | 
			
		||||
include common.mk
 | 
			
		||||
 | 
			
		||||
TARGET=test/$(TEST)
 | 
			
		||||
 | 
			
		||||
GTEST_OUTPUT = $(BUILD_DIR)/gtest
 | 
			
		||||
 | 
			
		||||
TEST_OBJ = $(BUILD_DIR)/test_obj
 | 
			
		||||
 | 
			
		||||
OUTPUTS := $(TEST_OBJ)/$(TEST) $(GTEST_OUTPUT)
 | 
			
		||||
 | 
			
		||||
GTEST_INC := \
 | 
			
		||||
	$(LIB_PATH)/googletest/googletest/include\
 | 
			
		||||
	$(LIB_PATH)/googletest/googlemock/include\
 | 
			
		||||
	
 | 
			
		||||
GTEST_INTERNAL_INC :=\
 | 
			
		||||
	$(LIB_PATH)/googletest/googletest\
 | 
			
		||||
	$(LIB_PATH)/googletest/googlemock
 | 
			
		||||
 | 
			
		||||
$(GTEST_OUTPUT)_SRC :=\
 | 
			
		||||
	googletest/src/gtest-all.cc\
 | 
			
		||||
	googletest/src/gtest_main.cc\
 | 
			
		||||
	googlemock/src/gmock-all.cc
 | 
			
		||||
 | 
			
		||||
$(GTEST_OUTPUT)_DEFS := 
 | 
			
		||||
$(GTEST_OUTPUT)_INC := $(GTEST_INC) $(GTEST_INTERNAL_INC)
 | 
			
		||||
 | 
			
		||||
LDFLAGS += -lstdc++ -lpthread -shared-libgcc
 | 
			
		||||
CREATE_MAP := no
 | 
			
		||||
 | 
			
		||||
VPATH +=\
 | 
			
		||||
	$(LIB_PATH)/googletest\
 | 
			
		||||
	$(LIB_PATH)/googlemock
 | 
			
		||||
 | 
			
		||||
all: elf
 | 
			
		||||
 | 
			
		||||
VPATH += $(COMMON_VPATH)
 | 
			
		||||
PLATFORM:=TEST
 | 
			
		||||
 | 
			
		||||
ifneq ($(filter $(FULL_TESTS),$(TEST)),)
 | 
			
		||||
include tests/$(TEST)/rules.mk
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
include common_features.mk
 | 
			
		||||
include $(TMK_PATH)/common.mk
 | 
			
		||||
include $(QUANTUM_PATH)/serial_link/tests/rules.mk
 | 
			
		||||
ifneq ($(filter $(FULL_TESTS),$(TEST)),)
 | 
			
		||||
include build_full_test.mk
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
$(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC)
 | 
			
		||||
$(TEST_OBJ)/$(TEST)_INC := $($(TEST)_INC) $(VPATH) $(GTEST_INC)
 | 
			
		||||
$(TEST_OBJ)/$(TEST)_DEFS := $($(TEST)_DEFS)
 | 
			
		||||
$(TEST_OBJ)/$(TEST)_CONFIG := $($(TEST)_CONFIG)
 | 
			
		||||
 | 
			
		||||
include $(TMK_PATH)/native.mk
 | 
			
		||||
include $(TMK_PATH)/rules.mk
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$(shell mkdir -p $(BUILD_DIR)/test 2>/dev/null)
 | 
			
		||||
$(shell mkdir -p $(TEST_OBJ) 2>/dev/null)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,37 +0,0 @@
 | 
			
		|||
# Copyright 2017 Fred Sundvik
 | 
			
		||||
#
 | 
			
		||||
# This program is free software: you can redistribute it and/or modify
 | 
			
		||||
# it under the terms of the GNU General Public License as published by
 | 
			
		||||
# the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
# (at your option) any later version.
 | 
			
		||||
#
 | 
			
		||||
# This program is distributed in the hope that it will be useful,
 | 
			
		||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
# GNU General Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
# You should have received a copy of the GNU General Public License
 | 
			
		||||
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
$(TEST_OUTPUT)_INC := \
 | 
			
		||||
	tests/test_common/common_config.h
 | 
			
		||||
 | 
			
		||||
$(TEST_OUTPUT)_SRC := \
 | 
			
		||||
	$(QUANTUM_SRC) \
 | 
			
		||||
	$(SRC) \
 | 
			
		||||
	$(QUANTUM_PATH)/keymap_introspection.c \
 | 
			
		||||
	tests/test_common/matrix.c \
 | 
			
		||||
	tests/test_common/pointing_device_driver.c \
 | 
			
		||||
	tests/test_common/test_driver.cpp \
 | 
			
		||||
	tests/test_common/keyboard_report_util.cpp \
 | 
			
		||||
	tests/test_common/mouse_report_util.cpp \
 | 
			
		||||
	tests/test_common/test_fixture.cpp \
 | 
			
		||||
	tests/test_common/test_keymap_key.cpp \
 | 
			
		||||
	tests/test_common/test_logger.cpp \
 | 
			
		||||
	$(patsubst $(ROOTDIR)/%,%,$(wildcard $(TEST_PATH)/*.cpp))
 | 
			
		||||
 | 
			
		||||
$(TEST_OUTPUT)_DEFS := $(OPT_DEFS) "-DKEYMAP_C=\"keymap.c\""
 | 
			
		||||
 | 
			
		||||
$(TEST_OUTPUT)_CONFIG := $(TEST_PATH)/config.h
 | 
			
		||||
 | 
			
		||||
VPATH += $(TOP_DIR)/tests/test_common
 | 
			
		||||
| 
						 | 
				
			
			@ -1,36 +0,0 @@
 | 
			
		|||
# Look for a json keymap file
 | 
			
		||||
ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.json)","")
 | 
			
		||||
    KEYMAP_JSON := $(MAIN_KEYMAP_PATH_5)/keymap.json
 | 
			
		||||
    KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_5)
 | 
			
		||||
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.json)","")
 | 
			
		||||
    KEYMAP_JSON := $(MAIN_KEYMAP_PATH_4)/keymap.json
 | 
			
		||||
    KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_4)
 | 
			
		||||
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.json)","")
 | 
			
		||||
    KEYMAP_JSON := $(MAIN_KEYMAP_PATH_3)/keymap.json
 | 
			
		||||
    KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_3)
 | 
			
		||||
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.json)","")
 | 
			
		||||
    KEYMAP_JSON := $(MAIN_KEYMAP_PATH_2)/keymap.json
 | 
			
		||||
    KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_2)
 | 
			
		||||
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.json)","")
 | 
			
		||||
    KEYMAP_JSON := $(MAIN_KEYMAP_PATH_1)/keymap.json
 | 
			
		||||
    KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_1)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifneq ($(QMK_USERSPACE),)
 | 
			
		||||
    ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/keymap.json)","")
 | 
			
		||||
        KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/keymap.json
 | 
			
		||||
        KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)
 | 
			
		||||
    else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/keymap.json)","")
 | 
			
		||||
        KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/keymap.json
 | 
			
		||||
        KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)
 | 
			
		||||
    else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/keymap.json)","")
 | 
			
		||||
        KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/keymap.json
 | 
			
		||||
        KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)
 | 
			
		||||
    else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/keymap.json)","")
 | 
			
		||||
        KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/keymap.json
 | 
			
		||||
        KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)
 | 
			
		||||
    else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/keymap.json)","")
 | 
			
		||||
        KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/keymap.json
 | 
			
		||||
        KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)
 | 
			
		||||
    endif
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,621 +0,0 @@
 | 
			
		|||
# Determine what keyboard we are building and setup the build environment.
 | 
			
		||||
#
 | 
			
		||||
# We support folders up to 5 levels deep below `keyboards/`. This file is
 | 
			
		||||
# responsible for determining which folder is being used and doing the
 | 
			
		||||
# corresponding environment setup.
 | 
			
		||||
 | 
			
		||||
ifndef VERBOSE
 | 
			
		||||
.SILENT:
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
.DEFAULT_GOAL := all
 | 
			
		||||
 | 
			
		||||
include paths.mk
 | 
			
		||||
include $(BUILDDEFS_PATH)/support.mk
 | 
			
		||||
include $(BUILDDEFS_PATH)/message.mk
 | 
			
		||||
 | 
			
		||||
# Helper to add defines with a 'QMK_' prefix
 | 
			
		||||
define add_qmk_prefix_defs
 | 
			
		||||
    ifdef $1
 | 
			
		||||
        # Need to cater for 'STM32L4xx+'
 | 
			
		||||
        OPT_DEFS += -DQMK_$(2)="$($1)" -DQMK_$(2)_$(shell echo $($1) | sed -e 's@+@Plus@g' -e 's@[^a-zA-Z0-9]@_@g' | tr '[:lower:]' '[:upper:]')
 | 
			
		||||
    endif
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
# Set the qmk cli to use
 | 
			
		||||
QMK_BIN ?= qmk
 | 
			
		||||
 | 
			
		||||
# Set the filename for the final firmware binary
 | 
			
		||||
KEYBOARD_FILESAFE := $(subst /,_,$(KEYBOARD))
 | 
			
		||||
TARGET ?= $(KEYBOARD_FILESAFE)_$(KEYMAP)
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(DUMP_CI_METADATA)),yes)
 | 
			
		||||
    $(info CI Metadata: KEYBOARD=$(KEYBOARD))
 | 
			
		||||
    $(info CI Metadata: KEYMAP=$(KEYMAP))
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Force expansion
 | 
			
		||||
override TARGET := $(TARGET)
 | 
			
		||||
 | 
			
		||||
ifneq ($(FORCE_LAYOUT),)
 | 
			
		||||
    override TARGET := $(TARGET)_$(FORCE_LAYOUT)
 | 
			
		||||
endif
 | 
			
		||||
ifneq ($(CONVERT_TO),)
 | 
			
		||||
    override TARGET := $(TARGET)_$(CONVERT_TO)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Object files and generated keymap directory
 | 
			
		||||
#     To put object files in current directory, use a dot (.), do NOT make
 | 
			
		||||
#     this an empty or blank macro!
 | 
			
		||||
INTERMEDIATE_OUTPUT := $(BUILD_DIR)/obj_$(TARGET)
 | 
			
		||||
 | 
			
		||||
ifdef SKIP_VERSION
 | 
			
		||||
    OPT_DEFS += -DSKIP_VERSION
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Generate the version.h file
 | 
			
		||||
VERSION_H_FLAGS :=
 | 
			
		||||
ifdef SKIP_VERSION
 | 
			
		||||
VERSION_H_FLAGS += --skip-all
 | 
			
		||||
endif
 | 
			
		||||
ifdef SKIP_GIT
 | 
			
		||||
VERSION_H_FLAGS += --skip-git
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Determine which subfolders exist.
 | 
			
		||||
KEYBOARD_FOLDER_PATH_1 := $(KEYBOARD)
 | 
			
		||||
KEYBOARD_FOLDER_PATH_2 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_1)))
 | 
			
		||||
KEYBOARD_FOLDER_PATH_3 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_2)))
 | 
			
		||||
KEYBOARD_FOLDER_PATH_4 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_3)))
 | 
			
		||||
KEYBOARD_FOLDER_PATH_5 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_4)))
 | 
			
		||||
KEYBOARD_FOLDER_1 := $(notdir $(KEYBOARD_FOLDER_PATH_1))
 | 
			
		||||
KEYBOARD_FOLDER_2 := $(notdir $(KEYBOARD_FOLDER_PATH_2))
 | 
			
		||||
KEYBOARD_FOLDER_3 := $(notdir $(KEYBOARD_FOLDER_PATH_3))
 | 
			
		||||
KEYBOARD_FOLDER_4 := $(notdir $(KEYBOARD_FOLDER_PATH_4))
 | 
			
		||||
KEYBOARD_FOLDER_5 := $(notdir $(KEYBOARD_FOLDER_PATH_5))
 | 
			
		||||
KEYBOARD_PATHS :=
 | 
			
		||||
KEYBOARD_PATH_1 := keyboards/$(KEYBOARD_FOLDER_PATH_1)
 | 
			
		||||
KEYBOARD_PATH_2 := keyboards/$(KEYBOARD_FOLDER_PATH_2)
 | 
			
		||||
KEYBOARD_PATH_3 := keyboards/$(KEYBOARD_FOLDER_PATH_3)
 | 
			
		||||
KEYBOARD_PATH_4 := keyboards/$(KEYBOARD_FOLDER_PATH_4)
 | 
			
		||||
KEYBOARD_PATH_5 := keyboards/$(KEYBOARD_FOLDER_PATH_5)
 | 
			
		||||
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/)","")
 | 
			
		||||
    KEYBOARD_PATHS += $(KEYBOARD_PATH_5)
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/)","")
 | 
			
		||||
    KEYBOARD_PATHS += $(KEYBOARD_PATH_4)
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/)","")
 | 
			
		||||
    KEYBOARD_PATHS += $(KEYBOARD_PATH_3)
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/)","")
 | 
			
		||||
    KEYBOARD_PATHS += $(KEYBOARD_PATH_2)
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/)","")
 | 
			
		||||
    KEYBOARD_PATHS += $(KEYBOARD_PATH_1)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Pull in rules.mk files from all our subfolders
 | 
			
		||||
-include $(KEYBOARD_PATH_5)/rules.mk
 | 
			
		||||
-include $(KEYBOARD_PATH_4)/rules.mk
 | 
			
		||||
-include $(KEYBOARD_PATH_3)/rules.mk
 | 
			
		||||
-include $(KEYBOARD_PATH_2)/rules.mk
 | 
			
		||||
-include $(KEYBOARD_PATH_1)/rules.mk
 | 
			
		||||
 | 
			
		||||
# Create dependencies on DD keyboard config - structure validated elsewhere
 | 
			
		||||
DD_CONFIG_FILES :=
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/info.json)","")
 | 
			
		||||
    DD_CONFIG_FILES += $(KEYBOARD_PATH_1)/info.json
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/info.json)","")
 | 
			
		||||
    DD_CONFIG_FILES += $(KEYBOARD_PATH_2)/info.json
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/info.json)","")
 | 
			
		||||
    DD_CONFIG_FILES += $(KEYBOARD_PATH_3)/info.json
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/info.json)","")
 | 
			
		||||
    DD_CONFIG_FILES += $(KEYBOARD_PATH_4)/info.json
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/info.json)","")
 | 
			
		||||
    DD_CONFIG_FILES += $(KEYBOARD_PATH_5)/info.json
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/keyboard.json)","")
 | 
			
		||||
    DD_CONFIG_FILES += $(KEYBOARD_PATH_1)/keyboard.json
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/keyboard.json)","")
 | 
			
		||||
    DD_CONFIG_FILES += $(KEYBOARD_PATH_2)/keyboard.json
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/keyboard.json)","")
 | 
			
		||||
    DD_CONFIG_FILES += $(KEYBOARD_PATH_3)/keyboard.json
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/keyboard.json)","")
 | 
			
		||||
    DD_CONFIG_FILES += $(KEYBOARD_PATH_4)/keyboard.json
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/keyboard.json)","")
 | 
			
		||||
    DD_CONFIG_FILES += $(KEYBOARD_PATH_5)/keyboard.json
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
MAIN_KEYMAP_PATH_1 := $(KEYBOARD_PATH_1)/keymaps/$(KEYMAP)
 | 
			
		||||
MAIN_KEYMAP_PATH_2 := $(KEYBOARD_PATH_2)/keymaps/$(KEYMAP)
 | 
			
		||||
MAIN_KEYMAP_PATH_3 := $(KEYBOARD_PATH_3)/keymaps/$(KEYMAP)
 | 
			
		||||
MAIN_KEYMAP_PATH_4 := $(KEYBOARD_PATH_4)/keymaps/$(KEYMAP)
 | 
			
		||||
MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP)
 | 
			
		||||
 | 
			
		||||
# Pull in rules from DD keyboard config
 | 
			
		||||
INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --keyboard $(KEYBOARD) --output $(INTERMEDIATE_OUTPUT)/src/info_rules.mk)
 | 
			
		||||
include $(INFO_RULES_MK)
 | 
			
		||||
 | 
			
		||||
# Check for keymap.json first, so we can regenerate keymap.c
 | 
			
		||||
include $(BUILDDEFS_PATH)/build_json.mk
 | 
			
		||||
 | 
			
		||||
# Pull in keymap level rules.mk
 | 
			
		||||
ifeq ("$(wildcard $(KEYMAP_PATH))", "")
 | 
			
		||||
    # Look through the possible keymap folders until we find a matching keymap.c
 | 
			
		||||
    ifneq ($(QMK_USERSPACE),)
 | 
			
		||||
        ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/keymap.c)","")
 | 
			
		||||
            -include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/rules.mk
 | 
			
		||||
            KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/keymap.c
 | 
			
		||||
            KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)
 | 
			
		||||
        else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/keymap.c)","")
 | 
			
		||||
            -include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/rules.mk
 | 
			
		||||
            KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/keymap.c
 | 
			
		||||
            KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)
 | 
			
		||||
        else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/keymap.c)","")
 | 
			
		||||
            -include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/rules.mk
 | 
			
		||||
            KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/keymap.c
 | 
			
		||||
            KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)
 | 
			
		||||
        else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/keymap.c)","")
 | 
			
		||||
            -include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/rules.mk
 | 
			
		||||
            KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/keymap.c
 | 
			
		||||
            KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)
 | 
			
		||||
        else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/keymap.c)","")
 | 
			
		||||
            -include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/rules.mk
 | 
			
		||||
            KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/keymap.c
 | 
			
		||||
            KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)
 | 
			
		||||
        endif
 | 
			
		||||
    endif
 | 
			
		||||
    ifeq ($(KEYMAP_PATH),)
 | 
			
		||||
        ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.c)","")
 | 
			
		||||
            -include $(MAIN_KEYMAP_PATH_1)/rules.mk
 | 
			
		||||
            KEYMAP_C := $(MAIN_KEYMAP_PATH_1)/keymap.c
 | 
			
		||||
            KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1)
 | 
			
		||||
        else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.c)","")
 | 
			
		||||
            -include $(MAIN_KEYMAP_PATH_2)/rules.mk
 | 
			
		||||
            KEYMAP_C := $(MAIN_KEYMAP_PATH_2)/keymap.c
 | 
			
		||||
            KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2)
 | 
			
		||||
        else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.c)","")
 | 
			
		||||
            -include $(MAIN_KEYMAP_PATH_3)/rules.mk
 | 
			
		||||
            KEYMAP_C := $(MAIN_KEYMAP_PATH_3)/keymap.c
 | 
			
		||||
            KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3)
 | 
			
		||||
        else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.c)","")
 | 
			
		||||
            -include $(MAIN_KEYMAP_PATH_4)/rules.mk
 | 
			
		||||
            KEYMAP_C := $(MAIN_KEYMAP_PATH_4)/keymap.c
 | 
			
		||||
            KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4)
 | 
			
		||||
        else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.c)","")
 | 
			
		||||
            -include $(MAIN_KEYMAP_PATH_5)/rules.mk
 | 
			
		||||
            KEYMAP_C := $(MAIN_KEYMAP_PATH_5)/keymap.c
 | 
			
		||||
            KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5)
 | 
			
		||||
        else ifneq ($(LAYOUTS),)
 | 
			
		||||
            # If we haven't found a keymap yet fall back to community layouts
 | 
			
		||||
            include $(BUILDDEFS_PATH)/build_layout.mk
 | 
			
		||||
        else ifeq ("$(wildcard $(KEYMAP_JSON_PATH))", "") # Not finding keymap.c is fine if we found a keymap.json
 | 
			
		||||
            $(call CATASTROPHIC_ERROR,Invalid keymap,Could not find keymap)
 | 
			
		||||
            # this state should never be reached
 | 
			
		||||
        endif
 | 
			
		||||
    endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Have we found a keymap.json?
 | 
			
		||||
ifneq ("$(wildcard $(KEYMAP_JSON))", "")
 | 
			
		||||
    ifneq ("$(wildcard $(KEYMAP_C))", "")
 | 
			
		||||
        # Allow a separately-found keymap.c next to keymap.json -- the keymap.c
 | 
			
		||||
        # generator will include the other keymap.c in the process, if supplied.
 | 
			
		||||
        OTHER_KEYMAP_C := $(KEYMAP_C)
 | 
			
		||||
        OPT_DEFS += -DOTHER_KEYMAP_C=\"$(OTHER_KEYMAP_C)\"
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    KEYMAP_PATH := $(KEYMAP_JSON_PATH)
 | 
			
		||||
 | 
			
		||||
    KEYMAP_C := $(INTERMEDIATE_OUTPUT)/src/keymap.c
 | 
			
		||||
    KEYMAP_H := $(INTERMEDIATE_OUTPUT)/src/config.h
 | 
			
		||||
 | 
			
		||||
    ifeq ($(OTHER_KEYMAP_C),)
 | 
			
		||||
        # Load the keymap-level rules.mk if exists (and we havent already loaded it for keymap.c)
 | 
			
		||||
        -include $(KEYMAP_PATH)/rules.mk
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    # Load any rules.mk content from keymap.json
 | 
			
		||||
    INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --output $(INTERMEDIATE_OUTPUT)/src/rules.mk $(KEYMAP_JSON))
 | 
			
		||||
    include $(INFO_RULES_MK)
 | 
			
		||||
 | 
			
		||||
# Add rules to generate the keymap files - indentation here is important
 | 
			
		||||
$(INTERMEDIATE_OUTPUT)/src/keymap.c: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
 | 
			
		||||
	$(eval CMD=$(QMK_BIN) json2c --quiet --output $(KEYMAP_C) $(KEYMAP_JSON))
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
$(INTERMEDIATE_OUTPUT)/src/config.h: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
 | 
			
		||||
	$(eval CMD=$(QMK_BIN) generate-config-h --quiet --output $(KEYMAP_H) $(KEYMAP_JSON))
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
$(INTERMEDIATE_OUTPUT)/src/keymap.h: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
 | 
			
		||||
	$(eval CMD=$(QMK_BIN) generate-keymap-h --quiet --output $(INTERMEDIATE_OUTPUT)/src/keymap.h $(KEYMAP_JSON))
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
generated-files: $(INTERMEDIATE_OUTPUT)/src/config.h $(INTERMEDIATE_OUTPUT)/src/keymap.c $(INTERMEDIATE_OUTPUT)/src/keymap.h
 | 
			
		||||
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Community modules
 | 
			
		||||
COMMUNITY_RULES_MK = $(shell $(QMK_BIN) generate-community-modules-rules-mk -kb $(KEYBOARD) --quiet --escape --output $(INTERMEDIATE_OUTPUT)/src/community_rules.mk $(KEYMAP_JSON))
 | 
			
		||||
include $(COMMUNITY_RULES_MK)
 | 
			
		||||
 | 
			
		||||
$(INTERMEDIATE_OUTPUT)/src/community_modules.h: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
 | 
			
		||||
	$(eval CMD=$(QMK_BIN) generate-community-modules-h -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/community_modules.h $(KEYMAP_JSON))
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
$(INTERMEDIATE_OUTPUT)/src/community_modules.c: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
 | 
			
		||||
	$(eval CMD=$(QMK_BIN) generate-community-modules-c -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/community_modules.c $(KEYMAP_JSON))
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
$(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.c: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
 | 
			
		||||
	$(eval CMD=$(QMK_BIN) generate-community-modules-introspection-c -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.c $(KEYMAP_JSON))
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
$(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.h: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
 | 
			
		||||
	$(eval CMD=$(QMK_BIN) generate-community-modules-introspection-h -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.h $(KEYMAP_JSON))
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
$(INTERMEDIATE_OUTPUT)/src/led_matrix_community_modules.inc: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
 | 
			
		||||
	$(eval CMD=$(QMK_BIN) generate-led-matrix-community-modules-inc -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/led_matrix_community_modules.inc $(KEYMAP_JSON))
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
$(INTERMEDIATE_OUTPUT)/src/rgb_matrix_community_modules.inc: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
 | 
			
		||||
	$(eval CMD=$(QMK_BIN) generate-rgb-matrix-community-modules-inc -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/rgb_matrix_community_modules.inc $(KEYMAP_JSON))
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
SRC += $(INTERMEDIATE_OUTPUT)/src/community_modules.c
 | 
			
		||||
 | 
			
		||||
generated-files: $(INTERMEDIATE_OUTPUT)/src/community_modules.h $(INTERMEDIATE_OUTPUT)/src/community_modules.c $(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.c $(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.h $(INTERMEDIATE_OUTPUT)/src/led_matrix_community_modules.inc $(INTERMEDIATE_OUTPUT)/src/rgb_matrix_community_modules.inc
 | 
			
		||||
 | 
			
		||||
include $(BUILDDEFS_PATH)/converters.mk
 | 
			
		||||
 | 
			
		||||
# Generate the board's version.h file.
 | 
			
		||||
$(shell $(QMK_BIN) generate-version-h $(VERSION_H_FLAGS) -q -o $(INTERMEDIATE_OUTPUT)/src/version.h)
 | 
			
		||||
 | 
			
		||||
MCU_ORIG := $(MCU)
 | 
			
		||||
include $(wildcard $(PLATFORM_PATH)/*/mcu_selection.mk)
 | 
			
		||||
 | 
			
		||||
# PLATFORM_KEY should be detected in DD keyboard config via key 'processor' (or rules.mk 'MCU')
 | 
			
		||||
ifeq ($(PLATFORM_KEY),)
 | 
			
		||||
    $(call CATASTROPHIC_ERROR,Platform not defined)
 | 
			
		||||
endif
 | 
			
		||||
PLATFORM=$(shell echo $(PLATFORM_KEY) | tr '[:lower:]' '[:upper:]')
 | 
			
		||||
 | 
			
		||||
# Find all the C source files to be compiled in subfolders.
 | 
			
		||||
KEYBOARD_SRC :=
 | 
			
		||||
 | 
			
		||||
KEYBOARD_C_1 := $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).c
 | 
			
		||||
KEYBOARD_C_2 := $(KEYBOARD_PATH_2)/$(KEYBOARD_FOLDER_2).c
 | 
			
		||||
KEYBOARD_C_3 := $(KEYBOARD_PATH_3)/$(KEYBOARD_FOLDER_3).c
 | 
			
		||||
KEYBOARD_C_4 := $(KEYBOARD_PATH_4)/$(KEYBOARD_FOLDER_4).c
 | 
			
		||||
KEYBOARD_C_5 := $(KEYBOARD_PATH_5)/$(KEYBOARD_FOLDER_5).c
 | 
			
		||||
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_C_5))","")
 | 
			
		||||
    KEYBOARD_SRC += $(KEYBOARD_C_5)
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_C_4))","")
 | 
			
		||||
    KEYBOARD_SRC += $(KEYBOARD_C_4)
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_C_3))","")
 | 
			
		||||
    KEYBOARD_SRC += $(KEYBOARD_C_3)
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_C_2))","")
 | 
			
		||||
    KEYBOARD_SRC += $(KEYBOARD_C_2)
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_C_1))","")
 | 
			
		||||
    KEYBOARD_SRC += $(KEYBOARD_C_1)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Generate KEYBOARD_name_subname for all levels of the keyboard folder
 | 
			
		||||
KEYBOARD_FILESAFE_1 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_1)))
 | 
			
		||||
KEYBOARD_FILESAFE_2 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_2)))
 | 
			
		||||
KEYBOARD_FILESAFE_3 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_3)))
 | 
			
		||||
KEYBOARD_FILESAFE_4 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_4)))
 | 
			
		||||
KEYBOARD_FILESAFE_5 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_5)))
 | 
			
		||||
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/)","")
 | 
			
		||||
    OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_5)
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/)","")
 | 
			
		||||
    OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_4)
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/)","")
 | 
			
		||||
    OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_3)
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/)","")
 | 
			
		||||
    OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_2)
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/)","")
 | 
			
		||||
    OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_1)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Setup the define for QMK_KEYBOARD_H. This is used inside of keymaps so
 | 
			
		||||
# that the same keymap may be used on multiple keyboards.
 | 
			
		||||
#
 | 
			
		||||
# We grab the most top-level include file that we can. That file should
 | 
			
		||||
# use #ifdef statements to include all the necessary subfolder includes,
 | 
			
		||||
# as described here:
 | 
			
		||||
#
 | 
			
		||||
#    https://docs.qmk.fm/#/feature_layouts?id=tips-for-making-layouts-keyboard-agnostic
 | 
			
		||||
#
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).h)","")
 | 
			
		||||
    FOUND_KEYBOARD_H = $(KEYBOARD_FOLDER_1).h
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/$(KEYBOARD_FOLDER_2).h)","")
 | 
			
		||||
    FOUND_KEYBOARD_H = $(KEYBOARD_FOLDER_2).h
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/$(KEYBOARD_FOLDER_3).h)","")
 | 
			
		||||
    FOUND_KEYBOARD_H = $(KEYBOARD_FOLDER_3).h
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/$(KEYBOARD_FOLDER_4).h)","")
 | 
			
		||||
    FOUND_KEYBOARD_H = $(KEYBOARD_FOLDER_4).h
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/$(KEYBOARD_FOLDER_5).h)","")
 | 
			
		||||
    FOUND_KEYBOARD_H = $(KEYBOARD_FOLDER_5).h
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Find all of the config.h files and add them to our CONFIG_H define.
 | 
			
		||||
CONFIG_H :=
 | 
			
		||||
 | 
			
		||||
define config_h_community_module_appender
 | 
			
		||||
	ifneq ("$(wildcard $(1)/config.h)","")
 | 
			
		||||
		CONFIG_H += $(1)/config.h
 | 
			
		||||
	endif
 | 
			
		||||
endef
 | 
			
		||||
$(foreach module,$(COMMUNITY_MODULE_PATHS),$(eval $(call config_h_community_module_appender,$(module))))
 | 
			
		||||
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/config.h)","")
 | 
			
		||||
    CONFIG_H += $(KEYBOARD_PATH_5)/config.h
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/config.h)","")
 | 
			
		||||
    CONFIG_H += $(KEYBOARD_PATH_4)/config.h
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/config.h)","")
 | 
			
		||||
    CONFIG_H += $(KEYBOARD_PATH_3)/config.h
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/config.h)","")
 | 
			
		||||
    CONFIG_H += $(KEYBOARD_PATH_2)/config.h
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/config.h)","")
 | 
			
		||||
    CONFIG_H += $(KEYBOARD_PATH_1)/config.h
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
POST_CONFIG_H :=
 | 
			
		||||
 | 
			
		||||
define post_config_h_community_module_appender
 | 
			
		||||
	ifneq ("$(wildcard $(1)/post_config.h)","")
 | 
			
		||||
		POST_CONFIG_H += $(1)/post_config.h
 | 
			
		||||
	endif
 | 
			
		||||
endef
 | 
			
		||||
$(foreach module,$(COMMUNITY_MODULE_PATHS),$(eval $(call post_config_h_community_module_appender,$(module))))
 | 
			
		||||
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/post_config.h)","")
 | 
			
		||||
    POST_CONFIG_H += $(KEYBOARD_PATH_1)/post_config.h
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/post_config.h)","")
 | 
			
		||||
    POST_CONFIG_H += $(KEYBOARD_PATH_2)/post_config.h
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/post_config.h)","")
 | 
			
		||||
    POST_CONFIG_H += $(KEYBOARD_PATH_3)/post_config.h
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/post_config.h)","")
 | 
			
		||||
    POST_CONFIG_H += $(KEYBOARD_PATH_4)/post_config.h
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/post_config.h)","")
 | 
			
		||||
    POST_CONFIG_H += $(KEYBOARD_PATH_5)/post_config.h
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
CONFIG_H += $(INTERMEDIATE_OUTPUT)/src/info_config.h
 | 
			
		||||
KEYBOARD_SRC += $(INTERMEDIATE_OUTPUT)/src/default_keyboard.c
 | 
			
		||||
 | 
			
		||||
$(INTERMEDIATE_OUTPUT)/src/info_config.h: $(DD_CONFIG_FILES)
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
 | 
			
		||||
	$(eval CMD=$(QMK_BIN) generate-config-h --quiet --keyboard $(KEYBOARD) --output $(INTERMEDIATE_OUTPUT)/src/info_config.h)
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
$(INTERMEDIATE_OUTPUT)/src/default_keyboard.c: $(DD_CONFIG_FILES)
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
 | 
			
		||||
	$(eval CMD=$(QMK_BIN) generate-keyboard-c --quiet --keyboard $(KEYBOARD) --output $(INTERMEDIATE_OUTPUT)/src/default_keyboard.c)
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
$(INTERMEDIATE_OUTPUT)/src/default_keyboard.h: $(DD_CONFIG_FILES)
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
 | 
			
		||||
	$(eval CMD=$(QMK_BIN) generate-keyboard-h --quiet --keyboard $(KEYBOARD) --include $(FOUND_KEYBOARD_H) --output $(INTERMEDIATE_OUTPUT)/src/default_keyboard.h)
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
generated-files: $(INTERMEDIATE_OUTPUT)/src/info_config.h $(INTERMEDIATE_OUTPUT)/src/default_keyboard.c $(INTERMEDIATE_OUTPUT)/src/default_keyboard.h
 | 
			
		||||
 | 
			
		||||
generated-files: $(INTERMEDIATE_OUTPUT)/src/info_deps.d
 | 
			
		||||
 | 
			
		||||
$(INTERMEDIATE_OUTPUT)/src/info_deps.d:
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
 | 
			
		||||
	$(eval CMD=$(QMK_BIN) generate-make-dependencies -kb $(KEYBOARD) -km $(KEYMAP) -o $(INTERMEDIATE_OUTPUT)/src/info_deps.d)
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
-include $(INTERMEDIATE_OUTPUT)/src/info_deps.d
 | 
			
		||||
 | 
			
		||||
.INTERMEDIATE : generated-files
 | 
			
		||||
 | 
			
		||||
# Userspace setup and definitions
 | 
			
		||||
ifeq ("$(USER_NAME)","")
 | 
			
		||||
    USER_NAME := $(KEYMAP)
 | 
			
		||||
endif
 | 
			
		||||
USER_PATH := users/$(USER_NAME)
 | 
			
		||||
 | 
			
		||||
# If we have userspace, then add it to the lookup VPATH
 | 
			
		||||
ifneq ($(wildcard $(QMK_USERSPACE)),)
 | 
			
		||||
    VPATH += $(QMK_USERSPACE)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# If the equivalent users directory exists in userspace, use that in preference to anything currently in the main repo
 | 
			
		||||
ifneq ($(wildcard $(QMK_USERSPACE)/$(USER_PATH)),)
 | 
			
		||||
    USER_PATH := $(QMK_USERSPACE)/$(USER_PATH)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Pull in user level rules.mk
 | 
			
		||||
-include $(USER_PATH)/rules.mk
 | 
			
		||||
ifneq ("$(wildcard $(USER_PATH)/config.h)","")
 | 
			
		||||
    CONFIG_H += $(USER_PATH)/config.h
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(wildcard $(USER_PATH)/post_config.h)","")
 | 
			
		||||
    POST_CONFIG_H += $(USER_PATH)/post_config.h
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Disable features that a keyboard doesn't support
 | 
			
		||||
-include $(BUILDDEFS_PATH)/disable_features.mk
 | 
			
		||||
 | 
			
		||||
ifneq ("$(CONVERTER)","")
 | 
			
		||||
    -include $(CONVERTER)/post_converter.mk
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Pull in post_rules.mk files from all our subfolders
 | 
			
		||||
-include $(KEYBOARD_PATH_1)/post_rules.mk
 | 
			
		||||
-include $(KEYBOARD_PATH_2)/post_rules.mk
 | 
			
		||||
-include $(KEYBOARD_PATH_3)/post_rules.mk
 | 
			
		||||
-include $(KEYBOARD_PATH_4)/post_rules.mk
 | 
			
		||||
-include $(KEYBOARD_PATH_5)/post_rules.mk
 | 
			
		||||
 | 
			
		||||
define post_rules_mk_community_module_includer
 | 
			
		||||
	ifneq ("$(wildcard $(1)/post_rules.mk)","")
 | 
			
		||||
		include $(1)/post_rules.mk
 | 
			
		||||
	endif
 | 
			
		||||
endef
 | 
			
		||||
$(foreach module,$(COMMUNITY_MODULE_PATHS),$(eval $(call post_rules_mk_community_module_includer,$(module))))
 | 
			
		||||
 | 
			
		||||
ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
 | 
			
		||||
    CONFIG_H += $(KEYMAP_PATH)/config.h
 | 
			
		||||
endif
 | 
			
		||||
ifneq ("$(KEYMAP_H)","")
 | 
			
		||||
    CONFIG_H += $(KEYMAP_H)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(KEYMAP_C),)
 | 
			
		||||
    $(call CATASTROPHIC_ERROR,Invalid keymap,Could not find keymap)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
OPT_DEFS += -DKEYMAP_C=\"$(KEYMAP_C)\"
 | 
			
		||||
 | 
			
		||||
# If a keymap or userspace places their keymap array in another file instead, allow for it to be included
 | 
			
		||||
# !!NOTE!! -- For this to work, the source file cannot be part of $(SRC), so users should not add it via `SRC += <file>`
 | 
			
		||||
ifneq ($(strip $(INTROSPECTION_KEYMAP_C)),)
 | 
			
		||||
OPT_DEFS += -DINTROSPECTION_KEYMAP_C=\"$(strip $(INTROSPECTION_KEYMAP_C))\"
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# project specific files
 | 
			
		||||
SRC += \
 | 
			
		||||
    $(KEYBOARD_SRC) \
 | 
			
		||||
    $(QUANTUM_DIR)/keymap_introspection.c \
 | 
			
		||||
    $(QUANTUM_SRC) \
 | 
			
		||||
    $(QUANTUM_DIR)/main.c \
 | 
			
		||||
 | 
			
		||||
# Optimize size but this may cause error "relocation truncated to fit"
 | 
			
		||||
#EXTRALDFLAGS = -Wl,--relax
 | 
			
		||||
 | 
			
		||||
# Search Path
 | 
			
		||||
VPATH += $(KEYMAP_PATH)
 | 
			
		||||
VPATH += $(USER_PATH)
 | 
			
		||||
VPATH += $(KEYBOARD_PATHS)
 | 
			
		||||
VPATH += $(COMMON_VPATH)
 | 
			
		||||
VPATH += $(INTERMEDIATE_OUTPUT)/src
 | 
			
		||||
 | 
			
		||||
include $(BUILDDEFS_PATH)/common_features.mk
 | 
			
		||||
include $(BUILDDEFS_PATH)/generic_features.mk
 | 
			
		||||
include $(TMK_PATH)/protocol.mk
 | 
			
		||||
include $(PLATFORM_PATH)/common.mk
 | 
			
		||||
 | 
			
		||||
SRC += $(patsubst %.c,%.clib,$(LIB_SRC))
 | 
			
		||||
SRC += $(patsubst %.c,%.clib,$(QUANTUM_LIB_SRC))
 | 
			
		||||
 | 
			
		||||
-include $(PLATFORM_PATH)/$(PLATFORM_KEY)/bootloader.mk
 | 
			
		||||
include $(PLATFORM_PATH)/$(PLATFORM_KEY)/platform.mk
 | 
			
		||||
-include $(PLATFORM_PATH)/$(PLATFORM_KEY)/flash.mk
 | 
			
		||||
 | 
			
		||||
ifneq ($(strip $(PROTOCOL)),)
 | 
			
		||||
PROTOCOL_KEY = $(strip $(shell echo $(PROTOCOL) | tr '[:upper:]' '[:lower:]'))
 | 
			
		||||
else
 | 
			
		||||
PROTOCOL_KEY = $(PLATFORM_KEY)
 | 
			
		||||
endif
 | 
			
		||||
include $(TMK_PATH)/protocol/$(PROTOCOL_KEY)/$(PROTOCOL_KEY).mk
 | 
			
		||||
 | 
			
		||||
# Setup definitions based on the selected MCU
 | 
			
		||||
$(eval $(call add_qmk_prefix_defs,MCU_ORIG,MCU))
 | 
			
		||||
$(eval $(call add_qmk_prefix_defs,MCU_ARCH,MCU_ARCH))
 | 
			
		||||
$(eval $(call add_qmk_prefix_defs,MCU_PORT_NAME,MCU_PORT_NAME))
 | 
			
		||||
$(eval $(call add_qmk_prefix_defs,MCU_FAMILY,MCU_FAMILY))
 | 
			
		||||
$(eval $(call add_qmk_prefix_defs,MCU_SERIES,MCU_SERIES))
 | 
			
		||||
$(eval $(call add_qmk_prefix_defs,BOARD,BOARD))
 | 
			
		||||
$(eval $(call add_qmk_prefix_defs,OPT,OPT))
 | 
			
		||||
 | 
			
		||||
# Control whether intermediate file listings are generated
 | 
			
		||||
# e.g.:
 | 
			
		||||
#    make handwired/onekey/blackpill_f411:default KEEP_INTERMEDIATES=yes
 | 
			
		||||
#    cat .build/obj_handwired_onekey_blackpill_f411_default/quantum/quantum.i | sed -e 's@^#.*@@g' -e 's@^\s*//.*@@g' -e '/^\s*$/d' | clang-format
 | 
			
		||||
ifeq ($(strip $(KEEP_INTERMEDIATES)), yes)
 | 
			
		||||
    OPT_DEFS += -save-temps=obj
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
OUTPUTS := $(INTERMEDIATE_OUTPUT)
 | 
			
		||||
$(INTERMEDIATE_OUTPUT)_SRC := $(SRC) $(PLATFORM_SRC)
 | 
			
		||||
$(INTERMEDIATE_OUTPUT)_DEFS := \
 | 
			
		||||
	-DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYBOARD_H=\"$(INTERMEDIATE_OUTPUT)/src/default_keyboard.h\" \
 | 
			
		||||
	-DQMK_KEYMAP=\"$(KEYMAP)\" -DQMK_KEYMAP_H=\"$(KEYMAP).h\" -DQMK_KEYMAP_CONFIG_H=\"$(KEYMAP_PATH)/config.h\" \
 | 
			
		||||
	$(OPT_DEFS)
 | 
			
		||||
$(INTERMEDIATE_OUTPUT)_INC :=  $(VPATH) $(EXTRAINCDIRS) $(KEYBOARD_PATHS)
 | 
			
		||||
$(INTERMEDIATE_OUTPUT)_CONFIG := $(CONFIG_H) $(POST_CONFIG_H)
 | 
			
		||||
 | 
			
		||||
# Default target.
 | 
			
		||||
all: build check-size
 | 
			
		||||
 | 
			
		||||
build: elf cpfirmware
 | 
			
		||||
check-size: build
 | 
			
		||||
check-md5: build
 | 
			
		||||
objs-size: build
 | 
			
		||||
 | 
			
		||||
ifneq ($(strip $(TOP_SYMBOLS)),)
 | 
			
		||||
ifeq ($(strip $(TOP_SYMBOLS)),yes)
 | 
			
		||||
NUM_TOP_SYMBOLS := 10
 | 
			
		||||
else
 | 
			
		||||
NUM_TOP_SYMBOLS := $(strip $(TOP_SYMBOLS))
 | 
			
		||||
endif
 | 
			
		||||
all: top-symbols
 | 
			
		||||
check-size: top-symbols
 | 
			
		||||
top-symbols: build
 | 
			
		||||
	echo "###########################################"
 | 
			
		||||
	echo "# Highest flash usage:"
 | 
			
		||||
	$(NM) -Crtd --size-sort $(BUILD_DIR)/$(TARGET).elf | grep ' [RrTt] ' | head -n$(NUM_TOP_SYMBOLS) | sed -e 's#^0000000#       #g' -e 's#^000000#      #g' -e 's#^00000#     #g' -e 's#^0000#    #g' -e 's#^000#   #g' -e 's#^00#  #g' -e 's#^0# #g'
 | 
			
		||||
	echo "###########################################"
 | 
			
		||||
	echo "# Highest RAM usage:"
 | 
			
		||||
	$(NM) -Crtd --size-sort $(BUILD_DIR)/$(TARGET).elf | grep ' [BbCDdGgSs] ' | head -n$(NUM_TOP_SYMBOLS) | sed -e 's#^0000000#       #g' -e 's#^000000#      #g' -e 's#^00000#     #g' -e 's#^0000#    #g' -e 's#^000#   #g' -e 's#^00#  #g' -e 's#^0# #g'
 | 
			
		||||
	echo "###########################################"
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
include $(BUILDDEFS_PATH)/show_options.mk
 | 
			
		||||
include $(BUILDDEFS_PATH)/common_rules.mk
 | 
			
		||||
 | 
			
		||||
# Ensure we have generated files available for each of the objects
 | 
			
		||||
define GEN_FILES
 | 
			
		||||
$1: generated-files
 | 
			
		||||
endef
 | 
			
		||||
$(foreach O,$(OBJ),$(eval $(call GEN_FILES,$(patsubst %.a,%.o,$(O)))))
 | 
			
		||||
| 
						 | 
				
			
			@ -1,36 +0,0 @@
 | 
			
		|||
LAYOUTS_PATH := layouts
 | 
			
		||||
LAYOUTS_REPOS := $(patsubst %/,%,$(sort $(dir $(wildcard $(LAYOUTS_PATH)/*/))))
 | 
			
		||||
 | 
			
		||||
ifneq ($(QMK_USERSPACE),)
 | 
			
		||||
    LAYOUTS_REPOS += $(patsubst %/,%,$(QMK_USERSPACE)/$(LAYOUTS_PATH))
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
define SEARCH_LAYOUTS_REPO
 | 
			
		||||
    LAYOUT_KEYMAP_PATH := $$(LAYOUTS_REPO)/$$(LAYOUT)/$$(KEYMAP)
 | 
			
		||||
    LAYOUT_KEYMAP_JSON := $$(LAYOUT_KEYMAP_PATH)/keymap.json
 | 
			
		||||
    LAYOUT_KEYMAP_C := $$(LAYOUT_KEYMAP_PATH)/keymap.c
 | 
			
		||||
    ifneq ("$$(wildcard $$(LAYOUT_KEYMAP_JSON))","")
 | 
			
		||||
        -include $$(LAYOUT_KEYMAP_PATH)/rules.mk
 | 
			
		||||
        KEYMAP_JSON := $$(LAYOUT_KEYMAP_JSON)
 | 
			
		||||
        KEYMAP_PATH := $$(LAYOUT_KEYMAP_PATH)
 | 
			
		||||
    else ifneq ("$$(wildcard $$(LAYOUT_KEYMAP_C))","")
 | 
			
		||||
        -include $$(LAYOUT_KEYMAP_PATH)/rules.mk
 | 
			
		||||
        KEYMAP_C := $$(LAYOUT_KEYMAP_C)
 | 
			
		||||
        KEYMAP_PATH := $$(LAYOUT_KEYMAP_PATH)
 | 
			
		||||
    endif
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
define SEARCH_LAYOUTS
 | 
			
		||||
    $$(foreach LAYOUTS_REPO,$$(LAYOUTS_REPOS),$$(eval $$(call SEARCH_LAYOUTS_REPO)))
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
ifneq ($(FORCE_LAYOUT),)
 | 
			
		||||
    ifneq (,$(findstring $(FORCE_LAYOUT),$(LAYOUTS)))
 | 
			
		||||
        $(info Forcing layout: $(FORCE_LAYOUT))
 | 
			
		||||
        LAYOUTS := $(FORCE_LAYOUT)
 | 
			
		||||
    else
 | 
			
		||||
        $(call CATASTROPHIC_ERROR,Invalid layout,Forced layout does not exist)
 | 
			
		||||
    endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
$(foreach LAYOUT,$(LAYOUTS),$(eval $(call SEARCH_LAYOUTS)))
 | 
			
		||||
| 
						 | 
				
			
			@ -1,94 +0,0 @@
 | 
			
		|||
ifndef VERBOSE
 | 
			
		||||
.SILENT:
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
.DEFAULT_GOAL := all
 | 
			
		||||
 | 
			
		||||
OPT = g
 | 
			
		||||
 | 
			
		||||
include paths.mk
 | 
			
		||||
include $(BUILDDEFS_PATH)/support.mk
 | 
			
		||||
include $(BUILDDEFS_PATH)/message.mk
 | 
			
		||||
 | 
			
		||||
TARGET=test/$(TEST_OUTPUT)
 | 
			
		||||
 | 
			
		||||
GTEST_OUTPUT = $(BUILD_DIR)/gtest
 | 
			
		||||
 | 
			
		||||
TEST_OBJ = $(BUILD_DIR)/test_obj
 | 
			
		||||
 | 
			
		||||
OUTPUTS := $(TEST_OBJ)/$(TEST_OUTPUT) $(GTEST_OUTPUT)
 | 
			
		||||
 | 
			
		||||
GTEST_INC := \
 | 
			
		||||
	$(LIB_PATH)/googletest/googletest/include \
 | 
			
		||||
	$(LIB_PATH)/googletest/googlemock/include
 | 
			
		||||
 | 
			
		||||
GTEST_INTERNAL_INC := \
 | 
			
		||||
	$(LIB_PATH)/googletest/googletest \
 | 
			
		||||
	$(LIB_PATH)/googletest/googlemock
 | 
			
		||||
 | 
			
		||||
$(GTEST_OUTPUT)_SRC := \
 | 
			
		||||
	googletest/src/gtest-all.cc\
 | 
			
		||||
	googlemock/src/gmock-all.cc
 | 
			
		||||
 | 
			
		||||
$(GTEST_OUTPUT)_DEFS :=
 | 
			
		||||
$(GTEST_OUTPUT)_INC := $(GTEST_INC) $(GTEST_INTERNAL_INC)
 | 
			
		||||
 | 
			
		||||
LDFLAGS += -lstdc++ -lpthread -shared-libgcc
 | 
			
		||||
CREATE_MAP := no
 | 
			
		||||
 | 
			
		||||
VPATH += \
 | 
			
		||||
	$(LIB_PATH)/googletest \
 | 
			
		||||
	$(LIB_PATH)/googlemock \
 | 
			
		||||
	$(COMMON_VPATH) \
 | 
			
		||||
	$(TEST_PATH)
 | 
			
		||||
 | 
			
		||||
all: elf
 | 
			
		||||
 | 
			
		||||
PLATFORM:=TEST
 | 
			
		||||
PLATFORM_KEY:=test
 | 
			
		||||
BOOTLOADER_TYPE:=none
 | 
			
		||||
 | 
			
		||||
DEBUG ?= 0
 | 
			
		||||
ifneq ($(strip $(DEBUG)), 0)
 | 
			
		||||
CONSOLE_ENABLE = yes
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifneq ($(filter $(FULL_TESTS),$(TEST)),)
 | 
			
		||||
include tests/test_common/build.mk
 | 
			
		||||
include $(TEST_PATH)/test.mk
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
include $(BUILDDEFS_PATH)/common_features.mk
 | 
			
		||||
include $(BUILDDEFS_PATH)/generic_features.mk
 | 
			
		||||
include $(PLATFORM_PATH)/common.mk
 | 
			
		||||
include $(TMK_PATH)/protocol.mk
 | 
			
		||||
include $(QUANTUM_PATH)/debounce/tests/rules.mk
 | 
			
		||||
include $(QUANTUM_PATH)/encoder/tests/rules.mk
 | 
			
		||||
include $(QUANTUM_PATH)/os_detection/tests/rules.mk
 | 
			
		||||
include $(QUANTUM_PATH)/sequencer/tests/rules.mk
 | 
			
		||||
include $(QUANTUM_PATH)/wear_leveling/tests/rules.mk
 | 
			
		||||
include $(QUANTUM_PATH)/logging/print.mk
 | 
			
		||||
include $(PLATFORM_PATH)/test/rules.mk
 | 
			
		||||
ifneq ($(filter $(FULL_TESTS),$(TEST)),)
 | 
			
		||||
include $(BUILDDEFS_PATH)/build_full_test.mk
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
$(TEST_OUTPUT)_SRC += \
 | 
			
		||||
	tests/test_common/main.cpp \
 | 
			
		||||
	$(QUANTUM_PATH)/logging/print.c
 | 
			
		||||
 | 
			
		||||
ifneq ($(strip $(INTROSPECTION_KEYMAP_C)),)
 | 
			
		||||
$(TEST_OUTPUT)_DEFS += -DINTROSPECTION_KEYMAP_C=\"$(strip $(INTROSPECTION_KEYMAP_C))\"
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
$(TEST_OBJ)/$(TEST_OUTPUT)_SRC := $($(TEST_OUTPUT)_SRC)
 | 
			
		||||
$(TEST_OBJ)/$(TEST_OUTPUT)_INC := $($(TEST_OUTPUT)_INC) $(VPATH) $(GTEST_INC)
 | 
			
		||||
$(TEST_OBJ)/$(TEST_OUTPUT)_DEFS := $($(TEST_OUTPUT)_DEFS)
 | 
			
		||||
$(TEST_OBJ)/$(TEST_OUTPUT)_CONFIG := $($(TEST_OUTPUT)_CONFIG)
 | 
			
		||||
 | 
			
		||||
include $(PLATFORM_PATH)/$(PLATFORM_KEY)/platform.mk
 | 
			
		||||
include $(BUILDDEFS_PATH)/common_rules.mk
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$(shell mkdir -p $(BUILD_DIR)/test 2>/dev/null)
 | 
			
		||||
$(shell mkdir -p $(TEST_OBJ) 2>/dev/null)
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
				
			
			@ -1,408 +0,0 @@
 | 
			
		|||
# Hey Emacs, this is a -*- makefile -*-
 | 
			
		||||
#----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
# Enable vpath searching for source files only
 | 
			
		||||
# Without this, output files, could be read from the wrong .build directories
 | 
			
		||||
VPATH_SRC := $(VPATH)
 | 
			
		||||
vpath %.c $(VPATH_SRC)
 | 
			
		||||
vpath %.h $(VPATH_SRC)
 | 
			
		||||
vpath %.cpp $(VPATH_SRC)
 | 
			
		||||
vpath %.cc $(VPATH_SRC)
 | 
			
		||||
vpath %.hpp $(VPATH_SRC)
 | 
			
		||||
vpath %.S $(VPATH_SRC)
 | 
			
		||||
VPATH :=
 | 
			
		||||
 | 
			
		||||
# Helper to return the distinct elements of a list
 | 
			
		||||
uniq = $(if $1,$(firstword $1) $(call uniq,$(filter-out $(firstword $1),$1)))
 | 
			
		||||
 | 
			
		||||
# Convert all SRC to OBJ
 | 
			
		||||
define OBJ_FROM_SRC
 | 
			
		||||
$(patsubst %.c,$1/%.o,$(patsubst %.cpp,$1/%.o,$(patsubst %.cc,$1/%.o,$(patsubst %.S,$1/%.o,$(patsubst %.clib,$1/%.a,$($1_SRC))))))
 | 
			
		||||
endef
 | 
			
		||||
$(foreach OUTPUT,$(OUTPUTS),$(eval $(OUTPUT)_OBJ +=$(call OBJ_FROM_SRC,$(OUTPUT))))
 | 
			
		||||
 | 
			
		||||
# Define a list of all objects
 | 
			
		||||
OBJ := $(foreach OUTPUT,$(OUTPUTS),$($(OUTPUT)_OBJ))
 | 
			
		||||
NO_LTO_OBJ := $(filter %.a,$(OBJ))
 | 
			
		||||
 | 
			
		||||
MASTER_OUTPUT := $(firstword $(OUTPUTS))
 | 
			
		||||
 | 
			
		||||
# Output format. (can be srec, ihex, binary)
 | 
			
		||||
FORMAT = ihex
 | 
			
		||||
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s].
 | 
			
		||||
OPT ?= s
 | 
			
		||||
 | 
			
		||||
# Compiler flag to set the C and C++ language standard level
 | 
			
		||||
CSTANDARD = -std=gnu11
 | 
			
		||||
CXXSTANDARD = -std=gnu++14
 | 
			
		||||
 | 
			
		||||
# Speed up recompilations by opt-in usage of ccache
 | 
			
		||||
USE_CCACHE ?= no
 | 
			
		||||
ifneq ($(USE_CCACHE),no)
 | 
			
		||||
    CC_PREFIX ?= ccache
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
#---------------- Debug Options ----------------
 | 
			
		||||
 | 
			
		||||
DEBUG_ENABLE ?= no
 | 
			
		||||
ifeq ($(strip $(DEBUG_ENABLE)),yes)
 | 
			
		||||
	CFLAGS 	 += -ggdb3
 | 
			
		||||
	CXXFLAGS += -ggdb3
 | 
			
		||||
	ASFLAGS  += -ggdb3
 | 
			
		||||
# Create a map file when debugging
 | 
			
		||||
	LDFLAGS  += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#---------------- C Compiler Options ----------------
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(LTO_ENABLE)), yes)
 | 
			
		||||
    CDEFS += -flto
 | 
			
		||||
    CDEFS += -DLTO_ENABLE
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
CFLAGS += $(CDEFS)
 | 
			
		||||
CFLAGS += -O$(OPT)
 | 
			
		||||
# add color
 | 
			
		||||
ifeq ($(COLOR),true)
 | 
			
		||||
ifeq ("$(shell echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "")
 | 
			
		||||
	CFLAGS+= -fdiagnostics-color
 | 
			
		||||
endif
 | 
			
		||||
endif
 | 
			
		||||
CFLAGS += -Wall
 | 
			
		||||
CFLAGS += -Wstrict-prototypes
 | 
			
		||||
ifneq ($(strip $(ALLOW_WARNINGS)), yes)
 | 
			
		||||
    CFLAGS += -Werror
 | 
			
		||||
endif
 | 
			
		||||
CFLAGS += $(CSTANDARD)
 | 
			
		||||
 | 
			
		||||
# This fixes lots of keyboards linking errors but SHOULDN'T BE A FINAL SOLUTION
 | 
			
		||||
# Fixing of multiple variable definitions must be made.
 | 
			
		||||
CFLAGS += -fcommon
 | 
			
		||||
 | 
			
		||||
#---------------- C++ Compiler Options ----------------
 | 
			
		||||
 | 
			
		||||
CXXFLAGS += $(CXXDEFS)
 | 
			
		||||
CXXFLAGS += -O$(OPT)
 | 
			
		||||
# to suppress "warning: only initialized variables can be placed into program memory area"
 | 
			
		||||
CXXFLAGS += -w
 | 
			
		||||
CXXFLAGS += -Wall
 | 
			
		||||
CXXFLAGS += -Wundef
 | 
			
		||||
 | 
			
		||||
ifneq ($(strip $(ALLOW_WARNINGS)), yes)
 | 
			
		||||
    CXXFLAGS += -Werror
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
#---------------- Assembler Options ----------------
 | 
			
		||||
 | 
			
		||||
ASFLAGS += $(ADEFS)
 | 
			
		||||
ifeq ($(VERBOSE_AS_CMD),yes)
 | 
			
		||||
	ASFLAGS += -v
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
#---------------- Linker Options ----------------
 | 
			
		||||
 | 
			
		||||
ifeq ($(VERBOSE_LD_CMD),yes)
 | 
			
		||||
	LDFLAGS += -v
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
LDFLAGS += $(EXTMEMOPTS)
 | 
			
		||||
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
 | 
			
		||||
LDFLAGS += -lm
 | 
			
		||||
# You can give EXTRALDFLAGS at 'make' command line.
 | 
			
		||||
LDFLAGS += $(EXTRALDFLAGS)
 | 
			
		||||
 | 
			
		||||
#---------------- Assembler Listings ----------------
 | 
			
		||||
 | 
			
		||||
ADHLNS_ENABLE ?= no
 | 
			
		||||
ifeq ($(ADHLNS_ENABLE),yes)
 | 
			
		||||
  # Avoid "Options to '-Xassembler' do not match" - only specify assembler options at LTO link time
 | 
			
		||||
  ifeq ($(strip $(LTO_ENABLE)), yes)
 | 
			
		||||
    LDFLAGS  += -Wa,-adhlns=$(BUILD_DIR)/$(TARGET).lst
 | 
			
		||||
  else
 | 
			
		||||
    CFLAGS   += -Wa,-adhlns=$(@:%.o=%.lst)
 | 
			
		||||
    CXXFLAGS += -Wa,-adhlns=$(@:%.o=%.lst)
 | 
			
		||||
	ASFLAGS  += -Wa,-adhlns=$(@:%.o=%.lst),--listing-cont-lines=100
 | 
			
		||||
  endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Define programs and commands.
 | 
			
		||||
SHELL = sh
 | 
			
		||||
SED = sed
 | 
			
		||||
REMOVE = rm -f
 | 
			
		||||
REMOVEDIR = rmdir
 | 
			
		||||
COPY = cp
 | 
			
		||||
WINSHELL = cmd
 | 
			
		||||
SECHO = $(SILENT) || echo
 | 
			
		||||
MD5SUM ?= md5sum
 | 
			
		||||
ifneq ($(filter Darwin FreeBSD,$(shell uname -s)),)
 | 
			
		||||
  MD5SUM = md5
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# UF2 format settings
 | 
			
		||||
# To produce a UF2 file in your build, add to your keyboard's rules.mk:
 | 
			
		||||
#      FIRMWARE_FORMAT = uf2
 | 
			
		||||
UF2CONV = $(TOP_DIR)/util/uf2conv.py
 | 
			
		||||
UF2CONV_ARGS ?=
 | 
			
		||||
UF2_FAMILY ?= 0x0
 | 
			
		||||
 | 
			
		||||
# Compiler flags to generate dependency files.
 | 
			
		||||
#GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
 | 
			
		||||
GENDEPFLAGS = -MMD -MP -MF $(patsubst %.o,%.td,$@)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Combine all necessary flags and optional flags.
 | 
			
		||||
# Add target processor to flags.
 | 
			
		||||
# You can give extra flags at 'make' command line like: make EXTRAFLAGS=-DFOO=bar
 | 
			
		||||
ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(EXTRAFLAGS)
 | 
			
		||||
ALL_CXXFLAGS = $(MCUFLAGS) -x c++ $(CXXFLAGS) $(EXTRAFLAGS)
 | 
			
		||||
ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS)
 | 
			
		||||
 | 
			
		||||
define NO_LTO
 | 
			
		||||
$(patsubst %.a,%.o,$1): NOLTO_CFLAGS += -fno-lto
 | 
			
		||||
endef
 | 
			
		||||
$(foreach LOBJ, $(NO_LTO_OBJ), $(eval $(call NO_LTO,$(LOBJ))))
 | 
			
		||||
 | 
			
		||||
MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@)
 | 
			
		||||
 | 
			
		||||
# For a ChibiOS build, ensure that the board files have the hook overrides injected
 | 
			
		||||
define BOARDSRC_INJECT_HOOKS
 | 
			
		||||
$(INTERMEDIATE_OUTPUT)/$(patsubst %.c,%.o,$(patsubst ./%,%,$1)): FILE_SPECIFIC_CFLAGS += -include $(TOP_DIR)/tmk_core/protocol/chibios/init_hooks.h
 | 
			
		||||
endef
 | 
			
		||||
$(foreach LOBJ, $(BOARDSRC), $(eval $(call BOARDSRC_INJECT_HOOKS,$(LOBJ))))
 | 
			
		||||
 | 
			
		||||
# Add QMK specific flags
 | 
			
		||||
DFU_SUFFIX ?= dfu-suffix
 | 
			
		||||
DFU_SUFFIX_ARGS ?=
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
elf: $(BUILD_DIR)/$(TARGET).elf
 | 
			
		||||
hex: $(BUILD_DIR)/$(TARGET).hex
 | 
			
		||||
uf2: $(BUILD_DIR)/$(TARGET).uf2
 | 
			
		||||
cpfirmware_qmk: $(FIRMWARE_FORMAT)
 | 
			
		||||
	$(SILENT) || printf "Copying $(TARGET).$(FIRMWARE_FORMAT) to qmk_firmware folder" | $(AWK_CMD)
 | 
			
		||||
	$(COPY) $(BUILD_DIR)/$(TARGET).$(FIRMWARE_FORMAT) $(TARGET).$(FIRMWARE_FORMAT) && $(PRINT_OK)
 | 
			
		||||
eep: $(BUILD_DIR)/$(TARGET).eep
 | 
			
		||||
lss: $(BUILD_DIR)/$(TARGET).lss
 | 
			
		||||
sym: $(BUILD_DIR)/$(TARGET).sym
 | 
			
		||||
LIBNAME=lib$(TARGET).a
 | 
			
		||||
lib: $(LIBNAME)
 | 
			
		||||
 | 
			
		||||
cpfirmware: cpfirmware_qmk
 | 
			
		||||
 | 
			
		||||
ifneq ($(QMK_USERSPACE),)
 | 
			
		||||
cpfirmware: cpfirmware_userspace
 | 
			
		||||
cpfirmware_userspace: cpfirmware_qmk
 | 
			
		||||
	$(SILENT) || printf "Copying $(TARGET).$(FIRMWARE_FORMAT) to userspace folder" | $(AWK_CMD)
 | 
			
		||||
	$(COPY) $(BUILD_DIR)/$(TARGET).$(FIRMWARE_FORMAT) $(QMK_USERSPACE)/$(TARGET).$(FIRMWARE_FORMAT) && $(PRINT_OK)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Display size of file, modifying the output so people don't mistakenly grab the hex output
 | 
			
		||||
BINARY_SIZE = $(SIZE) --target=$(FORMAT) $(BUILD_DIR)/$(TARGET).hex | $(SED) -e 's/\.build\/.*$$/$(TARGET).$(FIRMWARE_FORMAT)/g'
 | 
			
		||||
 | 
			
		||||
sizebefore:
 | 
			
		||||
	@if test -f $(BUILD_DIR)/$(TARGET).hex; then $(SECHO) $(MSG_SIZE_BEFORE); $(SILENT) || $(BINARY_SIZE); \
 | 
			
		||||
	2>/dev/null; $(SECHO); fi
 | 
			
		||||
 | 
			
		||||
sizeafter: $(BUILD_DIR)/$(TARGET).hex
 | 
			
		||||
	@if test -f $(BUILD_DIR)/$(TARGET).hex; then $(SECHO); $(SECHO) $(MSG_SIZE_AFTER); $(SILENT) || $(BINARY_SIZE); \
 | 
			
		||||
	2>/dev/null; $(SECHO); fi
 | 
			
		||||
 | 
			
		||||
# Display compiler version information.
 | 
			
		||||
gccversion :
 | 
			
		||||
	@$(SILENT) || $(CC) --version
 | 
			
		||||
 | 
			
		||||
# Create final output files (.hex, .eep) from ELF output file.
 | 
			
		||||
%.hex: %.elf
 | 
			
		||||
	$(eval CMD=$(HEX) $< $@)
 | 
			
		||||
	#@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_FLASH) $@" | $(AWK_CMD)
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
%.uf2: %.elf
 | 
			
		||||
	$(eval CMD=$(HEX) $< $(BUILD_DIR)/$(TARGET).tmp && $(UF2CONV) $(UF2CONV_ARGS) $(BUILD_DIR)/$(TARGET).tmp --output $@ --convert --family $(UF2_FAMILY) >/dev/null 2>&1)
 | 
			
		||||
	#@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_UF2) $@" | $(AWK_CMD)
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
%.eep: %.elf
 | 
			
		||||
	$(eval CMD=$(EEP) $< $@ || exit 0)
 | 
			
		||||
	#@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_EEPROM) $@" | $(AWK_CMD)
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
# Create extended listing file from ELF output file.
 | 
			
		||||
%.lss: %.elf
 | 
			
		||||
	$(eval CMD=$(OBJDUMP) -h -S -z $< > $@)
 | 
			
		||||
	#@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_EXTENDED_LISTING) $@" | $(AWK_CMD)
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
# Create a symbol table from ELF output file.
 | 
			
		||||
%.sym: %.elf
 | 
			
		||||
	$(eval CMD=$(NM) -n $< > $@ )
 | 
			
		||||
	#@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_SYMBOL_TABLE) $@" | $(AWK_CMD)
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
%.bin: %.elf
 | 
			
		||||
	$(eval CMD=$(BIN) $< $@ || exit 0)
 | 
			
		||||
	#@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_BIN) $@" | $(AWK_CMD)
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
	if [ ! -z "$(DFU_SUFFIX_ARGS)" ]; then \
 | 
			
		||||
		$(DFU_SUFFIX) $(DFU_SUFFIX_ARGS) -a $(BUILD_DIR)/$(TARGET).bin 1>/dev/null ;\
 | 
			
		||||
	fi
 | 
			
		||||
	#$(SILENT) || printf "$(MSG_EXECUTING) '$(DFU_SUFFIX) $(DFU_SUFFIX_ARGS) -a $(BUILD_DIR)/$(TARGET).bin 1>/dev/null':\n" ;\
 | 
			
		||||
	$(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin;
 | 
			
		||||
 | 
			
		||||
BEGIN = gccversion sizebefore
 | 
			
		||||
 | 
			
		||||
# Link: create ELF output file from object files.
 | 
			
		||||
.SECONDARY : $(BUILD_DIR)/$(TARGET).elf
 | 
			
		||||
.PRECIOUS : $(OBJ)
 | 
			
		||||
# Note the obj.txt depeendency is there to force linking if a source file is deleted
 | 
			
		||||
%.elf: $(OBJ) $(MASTER_OUTPUT)/cflags.txt $(MASTER_OUTPUT)/ldflags.txt $(MASTER_OUTPUT)/obj.txt | $(BEGIN)
 | 
			
		||||
	@$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD)
 | 
			
		||||
	$(eval CMD=MAKE=$(MAKE) $(CC) $(ALL_CFLAGS) $(call uniq,$(OBJ)) --output $@ $(LDFLAGS))
 | 
			
		||||
	@$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
define GEN_OBJRULE
 | 
			
		||||
$1_INCFLAGS := $$(patsubst %,-I%,$$($1_INC))
 | 
			
		||||
ifdef $1_CONFIG
 | 
			
		||||
$1_CONFIG_FLAGS += $$(patsubst %,-include %,$$($1_CONFIG))
 | 
			
		||||
endif
 | 
			
		||||
$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS) $$(NOLTO_CFLAGS)
 | 
			
		||||
$1_CXXFLAGS = $$(ALL_CXXFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS) $$(NOLTO_CFLAGS)
 | 
			
		||||
$1_ASFLAGS = $$(ALL_ASFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS)
 | 
			
		||||
 | 
			
		||||
# Compile: create object files from C source files.
 | 
			
		||||
$1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN)
 | 
			
		||||
	@mkdir -p $$(@D)
 | 
			
		||||
	@$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD)
 | 
			
		||||
	$$(eval CC_EXEC := $$(CC))
 | 
			
		||||
    ifneq ($$(VERBOSE_C_CMD),)
 | 
			
		||||
	$$(if $$(filter $$(notdir $$(VERBOSE_C_CMD)),$$(notdir $$<)),$$(eval CC_EXEC += -v))
 | 
			
		||||
    endif
 | 
			
		||||
    ifneq ($$(VERBOSE_C_INCLUDE),)
 | 
			
		||||
	$$(if $$(filter $$(notdir $$(VERBOSE_C_INCLUDE)),$$(notdir $$<)),$$(eval CC_EXEC += -H))
 | 
			
		||||
    endif
 | 
			
		||||
	$$(eval CMD := $$(CC_EXEC) -c $$($1_CFLAGS) $$(FILE_SPECIFIC_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
 | 
			
		||||
	@$$(BUILD_CMD)
 | 
			
		||||
    ifneq ($$(DUMP_C_MACROS),)
 | 
			
		||||
	$$(eval CMD := $$(CC) -E -dM $$($1_CFLAGS) $$(FILE_SPECIFIC_CFLAGS) $$(GENDEPFLAGS) $$<)
 | 
			
		||||
	@$$(if $$(filter $$(notdir $$(DUMP_C_MACROS)),$$(notdir $$<)),$$(BUILD_CMD))
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
# Compile: create object files from C++ source files.
 | 
			
		||||
$1/%.o : %.cpp $1/%.d $1/cxxflags.txt $1/compiler.txt | $(BEGIN)
 | 
			
		||||
	@mkdir -p $$(@D)
 | 
			
		||||
	@$$(SILENT) || printf "$$(MSG_COMPILING_CXX) $$<" | $$(AWK_CMD)
 | 
			
		||||
	$$(eval CMD=$$(CC) -c $$($1_CXXFLAGS) $$(FILE_SPECIFIC_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
 | 
			
		||||
	@$$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
$1/%.o : %.cc $1/%.d $1/cxxflags.txt $1/compiler.txt | $(BEGIN)
 | 
			
		||||
	@mkdir -p $$(@D)
 | 
			
		||||
	@$$(SILENT) || printf "$$(MSG_COMPILING_CXX) $$<" | $$(AWK_CMD)
 | 
			
		||||
	$$(eval CMD=$$(CC) -c $$($1_CXXFLAGS) $$(FILE_SPECIFIC_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
 | 
			
		||||
	@$$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
# Assemble: create object files from assembler source files.
 | 
			
		||||
$1/%.o : %.S $1/asflags.txt $1/compiler.txt | $(BEGIN)
 | 
			
		||||
	@mkdir -p $$(@D)
 | 
			
		||||
	@$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD)
 | 
			
		||||
	$$(eval CMD=$$(CC) -c $$($1_ASFLAGS) $$< -o $$@)
 | 
			
		||||
	@$$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
$1/%.a : $1/%.o
 | 
			
		||||
	@mkdir -p $$(@D)
 | 
			
		||||
	@$(SILENT) || printf "Archiving: $$<" | $$(AWK_CMD)
 | 
			
		||||
	$$(eval CMD=$$(AR) rcs $$@ $$<)
 | 
			
		||||
	@$$(BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
$1/force:
 | 
			
		||||
 | 
			
		||||
$1/cflags.txt: $1/force
 | 
			
		||||
	echo '$$($1_CFLAGS)' | cmp -s - $$@ || echo '$$($1_CFLAGS)' > $$@
 | 
			
		||||
 | 
			
		||||
$1/cxxflags.txt: $1/force
 | 
			
		||||
	echo '$$($1_CXXFLAGS)' | cmp -s - $$@ || echo '$$($1_CXXFLAGS)' > $$@
 | 
			
		||||
 | 
			
		||||
$1/asflags.txt: $1/force
 | 
			
		||||
	echo '$$($1_ASFLAGS)' | cmp -s - $$@ || echo '$$($1_ASFLAGS)' > $$@
 | 
			
		||||
 | 
			
		||||
$1/compiler.txt: $1/force
 | 
			
		||||
	test -f $$@ || touch $$@
 | 
			
		||||
	$$(CC) --version | cmp -s - $$@ || $$(CC) --version > $$@
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
.PRECIOUS: $(MASTER_OUTPUT)/obj.txt
 | 
			
		||||
$(MASTER_OUTPUT)/obj.txt: $(MASTER_OUTPUT)/force
 | 
			
		||||
	echo '$(OBJ)' | cmp -s - $@ || echo '$(OBJ)' > $@
 | 
			
		||||
 | 
			
		||||
.PRECIOUS: $(MASTER_OUTPUT)/ldflags.txt
 | 
			
		||||
$(MASTER_OUTPUT)/ldflags.txt: $(MASTER_OUTPUT)/force
 | 
			
		||||
	echo '$(LDFLAGS)' | cmp -s - $@ || echo '$(LDFLAGS)' > $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# We have to use static rules for the .d files for some reason
 | 
			
		||||
DEPS = $(patsubst %.o,%.d,$(patsubst %.a,%.o,$(OBJ)))
 | 
			
		||||
# Keep the .d files
 | 
			
		||||
.PRECIOUS: $(DEPS)
 | 
			
		||||
# Empty rule to force recompilation if the .d file is missing
 | 
			
		||||
$(DEPS):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$(foreach OUTPUT,$(OUTPUTS),$(eval $(call GEN_OBJRULE,$(OUTPUT))))
 | 
			
		||||
 | 
			
		||||
# Create preprocessed source for use in sending a bug report.
 | 
			
		||||
%.i : %.c | $(BEGIN)
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
# Target: clean project.
 | 
			
		||||
clean:
 | 
			
		||||
	$(foreach OUTPUT,$(OUTPUTS), $(REMOVE) -r $(OUTPUT) 2>/dev/null)
 | 
			
		||||
	$(REMOVE) $(BUILD_DIR)/$(TARGET).*
 | 
			
		||||
 | 
			
		||||
show_path:
 | 
			
		||||
	@echo VPATH=$(VPATH)
 | 
			
		||||
	@echo SRC=$(SRC)
 | 
			
		||||
	@echo OBJ=$(OBJ)
 | 
			
		||||
 | 
			
		||||
dump_vars: ERROR_IF_EMPTY=""
 | 
			
		||||
dump_vars: ERROR_IF_NONBOOL=""
 | 
			
		||||
dump_vars: ERROR_IF_UNSET=""
 | 
			
		||||
dump_vars: CATASTROPHIC_ERROR=""
 | 
			
		||||
dump_vars:
 | 
			
		||||
	@$(foreach V,$(sort $(.VARIABLES)),$(if $(filter-out environment% default automatic,$(origin $V)),$(info $V=$($V))))
 | 
			
		||||
 | 
			
		||||
objs-size:
 | 
			
		||||
	for i in $(OBJ); do echo $$i; done | sort | xargs $(SIZE)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# size check optionally implemented in its platform.mk
 | 
			
		||||
check-size:
 | 
			
		||||
 | 
			
		||||
check-md5:
 | 
			
		||||
	$(MD5SUM) $(BUILD_DIR)/$(TARGET).$(FIRMWARE_FORMAT)
 | 
			
		||||
 | 
			
		||||
# Create build directory
 | 
			
		||||
$(shell mkdir -p $(BUILD_DIR) 2>/dev/null)
 | 
			
		||||
 | 
			
		||||
# Create object files directory
 | 
			
		||||
$(eval $(foreach OUTPUT,$(OUTPUTS),$(shell mkdir -p $(OUTPUT) 2>/dev/null)))
 | 
			
		||||
 | 
			
		||||
# Include the dependency files.
 | 
			
		||||
-include $(patsubst %.o,%.d,$(patsubst %.a,%.o,$(OBJ)))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Listing of phony targets.
 | 
			
		||||
.PHONY : all dump_vars finish sizebefore sizeafter qmkversion \
 | 
			
		||||
gccversion build elf hex uf2 eep lss sym coff extcoff \
 | 
			
		||||
clean clean_list debug gdb-config show_path \
 | 
			
		||||
program teensy dfu dfu-ee dfu-start \
 | 
			
		||||
flash dfu-split-left dfu-split-right \
 | 
			
		||||
avrdude-split-left avrdude-split-right \
 | 
			
		||||
avrdude-loop usbasp
 | 
			
		||||
| 
						 | 
				
			
			@ -1,39 +0,0 @@
 | 
			
		|||
ifneq (,$(filter $(MCU),atmega32u4))
 | 
			
		||||
    # TODO: opt in rather than assume everything uses a pro micro
 | 
			
		||||
    PIN_COMPATIBLE ?= promicro
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Remove whitespace from any rule.mk provided vars
 | 
			
		||||
#   - env cannot be overwritten but cannot have whitespace anyway
 | 
			
		||||
CONVERT_TO:=$(strip $(CONVERT_TO))
 | 
			
		||||
ifneq ($(CONVERT_TO),)
 | 
			
		||||
 | 
			
		||||
    # stash so we can overwrite env provided vars if needed
 | 
			
		||||
    ACTIVE_CONVERTER=$(CONVERT_TO)
 | 
			
		||||
 | 
			
		||||
    ifeq ($(PIN_COMPATIBLE),)
 | 
			
		||||
        $(call CATASTROPHIC_ERROR,Converting to '$(CONVERT_TO)' not possible!)
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    # glob to search each platfrorm and/or check for valid converter
 | 
			
		||||
    CONVERTER := $(wildcard $(PLATFORM_PATH)/*/converters/$(PIN_COMPATIBLE)_to_$(CONVERT_TO)/)
 | 
			
		||||
    ifeq ($(CONVERTER),)
 | 
			
		||||
        $(call CATASTROPHIC_ERROR,Converting from '$(PIN_COMPATIBLE)' to '$(CONVERT_TO)' not possible!)
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    -include $(CONVERTER)/pre_converter.mk
 | 
			
		||||
 | 
			
		||||
    PLATFORM_KEY = $(shell echo $(CONVERTER) | cut -d "/" -f2)
 | 
			
		||||
 | 
			
		||||
    # Configure any defaults
 | 
			
		||||
    OPT_DEFS += -DCONVERT_TO_$(shell echo $(CONVERT_TO) | tr '[:lower:]' '[:upper:]')
 | 
			
		||||
    OPT_DEFS += -DCONVERTER_TARGET=\"$(CONVERT_TO)\"
 | 
			
		||||
    OPT_DEFS += -DCONVERTER_ENABLED
 | 
			
		||||
    VPATH += $(CONVERTER)
 | 
			
		||||
 | 
			
		||||
    # Configure for "alias" - worst case it produces an idential define
 | 
			
		||||
    OPT_DEFS += -DCONVERT_TO_$(shell echo $(ACTIVE_CONVERTER) | tr '[:lower:]' '[:upper:]')
 | 
			
		||||
 | 
			
		||||
    # Finally run any converter specific logic
 | 
			
		||||
    include $(CONVERTER)/converter.mk
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,27 +0,0 @@
 | 
			
		|||
# Unconditionally disable features that a keyboard advertises it doesn't support
 | 
			
		||||
 | 
			
		||||
FEATURE_NAMES :=
 | 
			
		||||
FEATURE_NAMES += AUDIO
 | 
			
		||||
FEATURE_NAMES += BACKLIGHT
 | 
			
		||||
FEATURE_NAMES += BLUETOOTH
 | 
			
		||||
FEATURE_NAMES += DIP_SWITCH
 | 
			
		||||
FEATURE_NAMES += DYNAMIC_KEYMAP
 | 
			
		||||
FEATURE_NAMES += ENCODER
 | 
			
		||||
FEATURE_NAMES += HAPTIC
 | 
			
		||||
FEATURE_NAMES += HD44780
 | 
			
		||||
FEATURE_NAMES += IOS_DEVICE
 | 
			
		||||
FEATURE_NAMES += LCD_BACKLIGHT
 | 
			
		||||
FEATURE_NAMES += LCD
 | 
			
		||||
FEATURE_NAMES += OLED
 | 
			
		||||
FEATURE_NAMES += POINTING_DEVICE
 | 
			
		||||
FEATURE_NAMES += PS2_MOUSE
 | 
			
		||||
FEATURE_NAMES += RGBLIGHT
 | 
			
		||||
FEATURE_NAMES += RGB_MATRIX
 | 
			
		||||
FEATURE_NAMES += SLEEP_LED
 | 
			
		||||
FEATURE_NAMES += STENO
 | 
			
		||||
FEATURE_NAMES += SWAP_HANDS
 | 
			
		||||
FEATURE_NAMES += WATCHDOG
 | 
			
		||||
FEATURE_NAMES += XT
 | 
			
		||||
 | 
			
		||||
$(foreach AFEATURE,$(FEATURE_NAMES),\
 | 
			
		||||
	 $(if $(filter $($(AFEATURE)_SUPPORTED),no),$(eval $(AFEATURE)_ENABLE=no)))
 | 
			
		||||
							
								
								
									
										5
									
								
								builddefs/docsgen/.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								builddefs/docsgen/.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,5 +0,0 @@
 | 
			
		|||
node_modules
 | 
			
		||||
.vitepress/cache
 | 
			
		||||
.vitepress/.temp
 | 
			
		||||
.vitepress/dist
 | 
			
		||||
docs
 | 
			
		||||
| 
						 | 
				
			
			@ -1,58 +0,0 @@
 | 
			
		|||
import { defineConfig } from "vitepress";
 | 
			
		||||
import { tabsMarkdownPlugin } from "vitepress-plugin-tabs";
 | 
			
		||||
import sidebar from "../../../docs/_sidebar.json";
 | 
			
		||||
 | 
			
		||||
// https://vitepress.dev/reference/site-config
 | 
			
		||||
export default defineConfig(({ mode }) => {
 | 
			
		||||
    const prod = mode === "production";
 | 
			
		||||
    return {
 | 
			
		||||
        title: "QMK Firmware",
 | 
			
		||||
        description: "Documentation for QMK Firmware",
 | 
			
		||||
 | 
			
		||||
        srcDir: prod ? "docs" : "../../docs",
 | 
			
		||||
        outDir: "../../.build/docs",
 | 
			
		||||
        cleanUrls: true,
 | 
			
		||||
 | 
			
		||||
        markdown: {
 | 
			
		||||
            config(md) {
 | 
			
		||||
                md.use(tabsMarkdownPlugin);
 | 
			
		||||
            },
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        vite: {
 | 
			
		||||
            resolve: {
 | 
			
		||||
                preserveSymlinks: true,
 | 
			
		||||
            },
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        themeConfig: {
 | 
			
		||||
            // https://vitepress.dev/reference/default-theme-config
 | 
			
		||||
            logo: {
 | 
			
		||||
                light: "/qmk-logo-light.svg",
 | 
			
		||||
                dark: "/qmk-logo-dark.svg",
 | 
			
		||||
            },
 | 
			
		||||
            title: 'QMK Firmware',
 | 
			
		||||
 | 
			
		||||
            nav: [{ text: "Home", link: "/" }],
 | 
			
		||||
 | 
			
		||||
            search: {
 | 
			
		||||
                provider: "local",
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            editLink: {
 | 
			
		||||
                pattern: 'https://github.com/qmk/qmk_firmware/edit/master/docs/:path'
 | 
			
		||||
            },
 | 
			
		||||
            lastUpdated: true,
 | 
			
		||||
 | 
			
		||||
            sidebar: sidebar,
 | 
			
		||||
 | 
			
		||||
            externalLinkIcon: true,
 | 
			
		||||
 | 
			
		||||
            socialLinks: [
 | 
			
		||||
                { icon: { svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="50px" height="50px"><path d="M 29 3 C 28.0625 3 27.164063 3.382813 26.5 4 C 25.835938 4.617188 25.363281 5.433594 25 6.40625 C 24.355469 8.140625 24.085938 10.394531 24.03125 13.03125 C 19.234375 13.179688 14.820313 14.421875 11.28125 16.46875 C 10.214844 15.46875 8.855469 14.96875 7.5 14.96875 C 6.089844 14.96875 4.675781 15.511719 3.59375 16.59375 C 1.425781 18.761719 1.425781 22.238281 3.59375 24.40625 L 3.84375 24.65625 C 3.3125 26.035156 3 27.488281 3 29 C 3 33.527344 5.566406 37.585938 9.5625 40.4375 C 13.558594 43.289063 19.007813 45 25 45 C 30.992188 45 36.441406 43.289063 40.4375 40.4375 C 44.433594 37.585938 47 33.527344 47 29 C 47 27.488281 46.6875 26.035156 46.15625 24.65625 L 46.40625 24.40625 C 48.574219 22.238281 48.574219 18.761719 46.40625 16.59375 C 45.324219 15.511719 43.910156 14.96875 42.5 14.96875 C 41.144531 14.96875 39.785156 15.46875 38.71875 16.46875 C 35.195313 14.433594 30.800781 13.191406 26.03125 13.03125 C 26.09375 10.546875 26.363281 8.46875 26.875 7.09375 C 27.164063 6.316406 27.527344 5.757813 27.875 5.4375 C 28.222656 5.117188 28.539063 5 29 5 C 29.460938 5 29.683594 5.125 30.03125 5.40625 C 30.378906 5.6875 30.785156 6.148438 31.3125 6.6875 C 32.253906 7.652344 33.695313 8.714844 36.09375 8.9375 C 36.539063 11.238281 38.574219 13 41 13 C 43.75 13 46 10.75 46 8 C 46 5.25 43.75 3 41 3 C 38.605469 3 36.574219 4.710938 36.09375 6.96875 C 34.3125 6.796875 33.527344 6.109375 32.75 5.3125 C 32.300781 4.851563 31.886719 4.3125 31.3125 3.84375 C 30.738281 3.375 29.9375 3 29 3 Z M 41 5 C 42.667969 5 44 6.332031 44 8 C 44 9.667969 42.667969 11 41 11 C 39.332031 11 38 9.667969 38 8 C 38 6.332031 39.332031 5 41 5 Z M 25 15 C 30.609375 15 35.675781 16.613281 39.28125 19.1875 C 42.886719 21.761719 45 25.226563 45 29 C 45 32.773438 42.886719 36.238281 39.28125 38.8125 C 35.675781 41.386719 30.609375 43 25 43 C 19.390625 43 14.324219 41.386719 10.71875 38.8125 C 7.113281 36.238281 5 32.773438 5 29 C 5 25.226563 7.113281 21.761719 10.71875 19.1875 C 14.324219 16.613281 19.390625 15 25 15 Z M 7.5 16.9375 C 8.203125 16.9375 8.914063 17.148438 9.53125 17.59375 C 7.527344 19.03125 5.886719 20.769531 4.75 22.71875 C 3.582031 21.296875 3.660156 19.339844 5 18 C 5.714844 17.285156 6.609375 16.9375 7.5 16.9375 Z M 42.5 16.9375 C 43.390625 16.9375 44.285156 17.285156 45 18 C 46.339844 19.339844 46.417969 21.296875 45.25 22.71875 C 44.113281 20.769531 42.472656 19.03125 40.46875 17.59375 C 41.085938 17.148438 41.796875 16.9375 42.5 16.9375 Z M 17 22 C 14.800781 22 13 23.800781 13 26 C 13 28.199219 14.800781 30 17 30 C 19.199219 30 21 28.199219 21 26 C 21 23.800781 19.199219 22 17 22 Z M 33 22 C 30.800781 22 29 23.800781 29 26 C 29 28.199219 30.800781 30 33 30 C 35.199219 30 37 28.199219 37 26 C 37 23.800781 35.199219 22 33 22 Z M 17 24 C 18.117188 24 19 24.882813 19 26 C 19 27.117188 18.117188 28 17 28 C 15.882813 28 15 27.117188 15 26 C 15 24.882813 15.882813 24 17 24 Z M 33 24 C 34.117188 24 35 24.882813 35 26 C 35 27.117188 34.117188 28 33 28 C 31.882813 28 31 27.117188 31 26 C 31 24.882813 31.882813 24 33 24 Z M 34.15625 33.84375 C 34.101563 33.851563 34.050781 33.859375 34 33.875 C 33.683594 33.9375 33.417969 34.144531 33.28125 34.4375 C 33.28125 34.4375 32.757813 35.164063 31.4375 36 C 30.117188 36.835938 28.058594 37.6875 25 37.6875 C 21.941406 37.6875 19.882813 36.835938 18.5625 36 C 17.242188 35.164063 16.71875 34.4375 16.71875 34.4375 C 16.492188 34.082031 16.066406 33.90625 15.65625 34 C 15.332031 34.082031 15.070313 34.316406 14.957031 34.632813 C 14.84375 34.945313 14.894531 35.292969 15.09375 35.5625 C 15.09375 35.5625 15.863281 36.671875 17.46875 37.6875 C 19.074219 38.703125 21.558594 39.6875 25 39.6875 C 28.441406 39.6875 30.925781 38.703125 32.53125 37.6875 C 34.136719 36.671875 34.90625 35.5625 34.90625 35.5625 C 35.207031 35.273438 35.296875 34.824219 35.128906 34.441406 C 34.960938 34.058594 34.574219 33.820313 34.15625 33.84375 Z"/></svg>' }, link: "https://reddit.com/r/olkb" },
 | 
			
		||||
                { icon: "discord", link: "https://discord.gg/qmk" },
 | 
			
		||||
                { icon: "github", link: "https://github.com/qmk/qmk_firmware" },
 | 
			
		||||
            ],
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			@ -1,29 +0,0 @@
 | 
			
		|||
<script setup>
 | 
			
		||||
import DefaultTheme from 'vitepress/theme'
 | 
			
		||||
import { useRouter } from 'vitepress'
 | 
			
		||||
import { onBeforeMount } from 'vue';
 | 
			
		||||
import aliases from "../../../../docs/_aliases.json";
 | 
			
		||||
 | 
			
		||||
const router = useRouter()
 | 
			
		||||
onBeforeMount(async () => {
 | 
			
		||||
    // Convert from docsify-style to vitepress-style URLs
 | 
			
		||||
    let newUrl = window.location.href.replace(/\/#\//, '/').replace(/\?id=/, '#');
 | 
			
		||||
 | 
			
		||||
    // Convert any aliases
 | 
			
		||||
    let testUrl = new URL(newUrl);
 | 
			
		||||
    while (testUrl.pathname in aliases) {
 | 
			
		||||
        testUrl.pathname = aliases[testUrl.pathname];
 | 
			
		||||
    }
 | 
			
		||||
    newUrl = testUrl.toString();
 | 
			
		||||
 | 
			
		||||
    // Redirect if required
 | 
			
		||||
    if (newUrl != window.location.href) {
 | 
			
		||||
        window.history.replaceState({}, '', newUrl);
 | 
			
		||||
        await router.go(newUrl);
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
    <DefaultTheme.Layout/>
 | 
			
		||||
</template>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,19 +0,0 @@
 | 
			
		|||
/* Override <kbd> as vitepress doesn't put them with borders */
 | 
			
		||||
kbd {
 | 
			
		||||
    border: 1px solid var(--vp-c-text-1);
 | 
			
		||||
    border-radius: 5px;
 | 
			
		||||
    margin: 0.2em;
 | 
			
		||||
    padding: 0.2em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
:root {
 | 
			
		||||
    --vp-nav-logo-height: 32px;
 | 
			
		||||
 | 
			
		||||
    --vp-layout-max-width: calc(98% + 64px);
 | 
			
		||||
 | 
			
		||||
    --vp-sidebar-width: 300px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.VPDoc.has-aside .content-container {
 | 
			
		||||
    max-width: unset !important;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,13 +0,0 @@
 | 
			
		|||
import type { Theme } from 'vitepress'
 | 
			
		||||
import DefaultTheme from 'vitepress/theme'
 | 
			
		||||
import { enhanceAppWithTabs } from 'vitepress-plugin-tabs/client'
 | 
			
		||||
import QMKLayout from './QMKLayout.vue'
 | 
			
		||||
import './custom.css'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  extends: DefaultTheme,
 | 
			
		||||
  Layout: QMKLayout,
 | 
			
		||||
  enhanceApp({ app }) {
 | 
			
		||||
    enhanceAppWithTabs(app)
 | 
			
		||||
  }
 | 
			
		||||
} satisfies Theme
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +0,0 @@
 | 
			
		|||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
cd "$(dirname "$(realpath "${BASH_SOURCE[0]}")")"
 | 
			
		||||
yarn install
 | 
			
		||||
[[ -e docs ]] || ln -sf ../../docs docs
 | 
			
		||||
DEBUG='vitepress:*,vite:*' yarn run docs:build
 | 
			
		||||
| 
						 | 
				
			
			@ -1,14 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
  "license": "GPL-2.0-or-later",
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "vite": "^5.4.19",
 | 
			
		||||
    "vitepress": "^1.1.0",
 | 
			
		||||
    "vitepress-plugin-tabs": "^0.5.0",
 | 
			
		||||
    "vue": "^3.4.24"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "docs:dev": "vitepress dev --host 0.0.0.0",
 | 
			
		||||
    "docs:build": "vitepress build",
 | 
			
		||||
    "docs:preview": "vitepress preview --host 0.0.0.0"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +0,0 @@
 | 
			
		|||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
cd "$(dirname "$(realpath "${BASH_SOURCE[0]}")")"
 | 
			
		||||
yarn install
 | 
			
		||||
DEBUG='vitepress:*,vite:*' yarn run docs:dev
 | 
			
		||||
| 
						 | 
				
			
			@ -1,820 +0,0 @@
 | 
			
		|||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
 | 
			
		||||
# yarn lockfile v1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"@algolia/autocomplete-core@1.9.3":
 | 
			
		||||
  version "1.9.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz#1d56482a768c33aae0868c8533049e02e8961be7"
 | 
			
		||||
  integrity sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@algolia/autocomplete-plugin-algolia-insights" "1.9.3"
 | 
			
		||||
    "@algolia/autocomplete-shared" "1.9.3"
 | 
			
		||||
 | 
			
		||||
"@algolia/autocomplete-plugin-algolia-insights@1.9.3":
 | 
			
		||||
  version "1.9.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz#9b7f8641052c8ead6d66c1623d444cbe19dde587"
 | 
			
		||||
  integrity sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@algolia/autocomplete-shared" "1.9.3"
 | 
			
		||||
 | 
			
		||||
"@algolia/autocomplete-preset-algolia@1.9.3":
 | 
			
		||||
  version "1.9.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz#64cca4a4304cfcad2cf730e83067e0c1b2f485da"
 | 
			
		||||
  integrity sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@algolia/autocomplete-shared" "1.9.3"
 | 
			
		||||
 | 
			
		||||
"@algolia/autocomplete-shared@1.9.3":
 | 
			
		||||
  version "1.9.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz#2e22e830d36f0a9cf2c0ccd3c7f6d59435b77dfa"
 | 
			
		||||
  integrity sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==
 | 
			
		||||
 | 
			
		||||
"@algolia/cache-browser-local-storage@4.23.3":
 | 
			
		||||
  version "4.23.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.23.3.tgz#0cc26b96085e1115dac5fcb9d826651ba57faabc"
 | 
			
		||||
  integrity sha512-vRHXYCpPlTDE7i6UOy2xE03zHF2C8MEFjPN2v7fRbqVpcOvAUQK81x3Kc21xyb5aSIpYCjWCZbYZuz8Glyzyyg==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@algolia/cache-common" "4.23.3"
 | 
			
		||||
 | 
			
		||||
"@algolia/cache-common@4.23.3":
 | 
			
		||||
  version "4.23.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.23.3.tgz#3bec79092d512a96c9bfbdeec7cff4ad36367166"
 | 
			
		||||
  integrity sha512-h9XcNI6lxYStaw32pHpB1TMm0RuxphF+Ik4o7tcQiodEdpKK+wKufY6QXtba7t3k8eseirEMVB83uFFF3Nu54A==
 | 
			
		||||
 | 
			
		||||
"@algolia/cache-in-memory@4.23.3":
 | 
			
		||||
  version "4.23.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.23.3.tgz#3945f87cd21ffa2bec23890c85305b6b11192423"
 | 
			
		||||
  integrity sha512-yvpbuUXg/+0rbcagxNT7un0eo3czx2Uf0y4eiR4z4SD7SiptwYTpbuS0IHxcLHG3lq22ukx1T6Kjtk/rT+mqNg==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@algolia/cache-common" "4.23.3"
 | 
			
		||||
 | 
			
		||||
"@algolia/client-account@4.23.3":
 | 
			
		||||
  version "4.23.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.23.3.tgz#8751bbf636e6741c95e7c778488dee3ee430ac6f"
 | 
			
		||||
  integrity sha512-hpa6S5d7iQmretHHF40QGq6hz0anWEHGlULcTIT9tbUssWUriN9AUXIFQ8Ei4w9azD0hc1rUok9/DeQQobhQMA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@algolia/client-common" "4.23.3"
 | 
			
		||||
    "@algolia/client-search" "4.23.3"
 | 
			
		||||
    "@algolia/transporter" "4.23.3"
 | 
			
		||||
 | 
			
		||||
"@algolia/client-analytics@4.23.3":
 | 
			
		||||
  version "4.23.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.23.3.tgz#f88710885278fe6fb6964384af59004a5a6f161d"
 | 
			
		||||
  integrity sha512-LBsEARGS9cj8VkTAVEZphjxTjMVCci+zIIiRhpFun9jGDUlS1XmhCW7CTrnaWeIuCQS/2iPyRqSy1nXPjcBLRA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@algolia/client-common" "4.23.3"
 | 
			
		||||
    "@algolia/client-search" "4.23.3"
 | 
			
		||||
    "@algolia/requester-common" "4.23.3"
 | 
			
		||||
    "@algolia/transporter" "4.23.3"
 | 
			
		||||
 | 
			
		||||
"@algolia/client-common@4.23.3":
 | 
			
		||||
  version "4.23.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.23.3.tgz#891116aa0db75055a7ecc107649f7f0965774704"
 | 
			
		||||
  integrity sha512-l6EiPxdAlg8CYhroqS5ybfIczsGUIAC47slLPOMDeKSVXYG1n0qGiz4RjAHLw2aD0xzh2EXZ7aRguPfz7UKDKw==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@algolia/requester-common" "4.23.3"
 | 
			
		||||
    "@algolia/transporter" "4.23.3"
 | 
			
		||||
 | 
			
		||||
"@algolia/client-personalization@4.23.3":
 | 
			
		||||
  version "4.23.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.23.3.tgz#35fa8e5699b0295fbc400a8eb211dc711e5909db"
 | 
			
		||||
  integrity sha512-3E3yF3Ocr1tB/xOZiuC3doHQBQ2zu2MPTYZ0d4lpfWads2WTKG7ZzmGnsHmm63RflvDeLK/UVx7j2b3QuwKQ2g==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@algolia/client-common" "4.23.3"
 | 
			
		||||
    "@algolia/requester-common" "4.23.3"
 | 
			
		||||
    "@algolia/transporter" "4.23.3"
 | 
			
		||||
 | 
			
		||||
"@algolia/client-search@4.23.3":
 | 
			
		||||
  version "4.23.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.23.3.tgz#a3486e6af13a231ec4ab43a915a1f318787b937f"
 | 
			
		||||
  integrity sha512-P4VAKFHqU0wx9O+q29Q8YVuaowaZ5EM77rxfmGnkHUJggh28useXQdopokgwMeYw2XUht49WX5RcTQ40rZIabw==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@algolia/client-common" "4.23.3"
 | 
			
		||||
    "@algolia/requester-common" "4.23.3"
 | 
			
		||||
    "@algolia/transporter" "4.23.3"
 | 
			
		||||
 | 
			
		||||
"@algolia/logger-common@4.23.3":
 | 
			
		||||
  version "4.23.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.23.3.tgz#35c6d833cbf41e853a4f36ba37c6e5864920bfe9"
 | 
			
		||||
  integrity sha512-y9kBtmJwiZ9ZZ+1Ek66P0M68mHQzKRxkW5kAAXYN/rdzgDN0d2COsViEFufxJ0pb45K4FRcfC7+33YB4BLrZ+g==
 | 
			
		||||
 | 
			
		||||
"@algolia/logger-console@4.23.3":
 | 
			
		||||
  version "4.23.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.23.3.tgz#30f916781826c4db5f51fcd9a8a264a06e136985"
 | 
			
		||||
  integrity sha512-8xoiseoWDKuCVnWP8jHthgaeobDLolh00KJAdMe9XPrWPuf1by732jSpgy2BlsLTaT9m32pHI8CRfrOqQzHv3A==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@algolia/logger-common" "4.23.3"
 | 
			
		||||
 | 
			
		||||
"@algolia/recommend@4.23.3":
 | 
			
		||||
  version "4.23.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-4.23.3.tgz#53d4f194d22d9c72dc05f3f7514c5878f87c5890"
 | 
			
		||||
  integrity sha512-9fK4nXZF0bFkdcLBRDexsnGzVmu4TSYZqxdpgBW2tEyfuSSY54D4qSRkLmNkrrz4YFvdh2GM1gA8vSsnZPR73w==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@algolia/cache-browser-local-storage" "4.23.3"
 | 
			
		||||
    "@algolia/cache-common" "4.23.3"
 | 
			
		||||
    "@algolia/cache-in-memory" "4.23.3"
 | 
			
		||||
    "@algolia/client-common" "4.23.3"
 | 
			
		||||
    "@algolia/client-search" "4.23.3"
 | 
			
		||||
    "@algolia/logger-common" "4.23.3"
 | 
			
		||||
    "@algolia/logger-console" "4.23.3"
 | 
			
		||||
    "@algolia/requester-browser-xhr" "4.23.3"
 | 
			
		||||
    "@algolia/requester-common" "4.23.3"
 | 
			
		||||
    "@algolia/requester-node-http" "4.23.3"
 | 
			
		||||
    "@algolia/transporter" "4.23.3"
 | 
			
		||||
 | 
			
		||||
"@algolia/requester-browser-xhr@4.23.3":
 | 
			
		||||
  version "4.23.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.23.3.tgz#9e47e76f60d540acc8b27b4ebc7a80d1b41938b9"
 | 
			
		||||
  integrity sha512-jDWGIQ96BhXbmONAQsasIpTYWslyjkiGu0Quydjlowe+ciqySpiDUrJHERIRfELE5+wFc7hc1Q5hqjGoV7yghw==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@algolia/requester-common" "4.23.3"
 | 
			
		||||
 | 
			
		||||
"@algolia/requester-common@4.23.3":
 | 
			
		||||
  version "4.23.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.23.3.tgz#7dbae896e41adfaaf1d1fa5f317f83a99afb04b3"
 | 
			
		||||
  integrity sha512-xloIdr/bedtYEGcXCiF2muajyvRhwop4cMZo+K2qzNht0CMzlRkm8YsDdj5IaBhshqfgmBb3rTg4sL4/PpvLYw==
 | 
			
		||||
 | 
			
		||||
"@algolia/requester-node-http@4.23.3":
 | 
			
		||||
  version "4.23.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.23.3.tgz#c9f94a5cb96a15f48cea338ab6ef16bbd0ff989f"
 | 
			
		||||
  integrity sha512-zgu++8Uj03IWDEJM3fuNl34s746JnZOWn1Uz5taV1dFyJhVM/kTNw9Ik7YJWiUNHJQXcaD8IXD1eCb0nq/aByA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@algolia/requester-common" "4.23.3"
 | 
			
		||||
 | 
			
		||||
"@algolia/transporter@4.23.3":
 | 
			
		||||
  version "4.23.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.23.3.tgz#545b045b67db3850ddf0bbecbc6c84ff1f3398b7"
 | 
			
		||||
  integrity sha512-Wjl5gttqnf/gQKJA+dafnD0Y6Yw97yvfY8R9h0dQltX1GXTgNs1zWgvtWW0tHl1EgMdhAyw189uWiZMnL3QebQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@algolia/cache-common" "4.23.3"
 | 
			
		||||
    "@algolia/logger-common" "4.23.3"
 | 
			
		||||
    "@algolia/requester-common" "4.23.3"
 | 
			
		||||
 | 
			
		||||
"@babel/parser@^7.24.4":
 | 
			
		||||
  version "7.24.4"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88"
 | 
			
		||||
  integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==
 | 
			
		||||
 | 
			
		||||
"@docsearch/css@3.6.0", "@docsearch/css@^3.6.0":
 | 
			
		||||
  version "3.6.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.6.0.tgz#0e9f56f704b3a34d044d15fd9962ebc1536ba4fb"
 | 
			
		||||
  integrity sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==
 | 
			
		||||
 | 
			
		||||
"@docsearch/js@^3.6.0":
 | 
			
		||||
  version "3.6.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@docsearch/js/-/js-3.6.0.tgz#f9e46943449b9092d874944f7a80bcc071004cfb"
 | 
			
		||||
  integrity sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@docsearch/react" "3.6.0"
 | 
			
		||||
    preact "^10.0.0"
 | 
			
		||||
 | 
			
		||||
"@docsearch/react@3.6.0":
 | 
			
		||||
  version "3.6.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.6.0.tgz#b4f25228ecb7fc473741aefac592121e86dd2958"
 | 
			
		||||
  integrity sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@algolia/autocomplete-core" "1.9.3"
 | 
			
		||||
    "@algolia/autocomplete-preset-algolia" "1.9.3"
 | 
			
		||||
    "@docsearch/css" "3.6.0"
 | 
			
		||||
    algoliasearch "^4.19.1"
 | 
			
		||||
 | 
			
		||||
"@esbuild/aix-ppc64@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f"
 | 
			
		||||
  integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==
 | 
			
		||||
 | 
			
		||||
"@esbuild/android-arm64@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052"
 | 
			
		||||
  integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==
 | 
			
		||||
 | 
			
		||||
"@esbuild/android-arm@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28"
 | 
			
		||||
  integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==
 | 
			
		||||
 | 
			
		||||
"@esbuild/android-x64@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e"
 | 
			
		||||
  integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==
 | 
			
		||||
 | 
			
		||||
"@esbuild/darwin-arm64@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a"
 | 
			
		||||
  integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==
 | 
			
		||||
 | 
			
		||||
"@esbuild/darwin-x64@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22"
 | 
			
		||||
  integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==
 | 
			
		||||
 | 
			
		||||
"@esbuild/freebsd-arm64@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e"
 | 
			
		||||
  integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==
 | 
			
		||||
 | 
			
		||||
"@esbuild/freebsd-x64@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261"
 | 
			
		||||
  integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==
 | 
			
		||||
 | 
			
		||||
"@esbuild/linux-arm64@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b"
 | 
			
		||||
  integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==
 | 
			
		||||
 | 
			
		||||
"@esbuild/linux-arm@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9"
 | 
			
		||||
  integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==
 | 
			
		||||
 | 
			
		||||
"@esbuild/linux-ia32@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2"
 | 
			
		||||
  integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==
 | 
			
		||||
 | 
			
		||||
"@esbuild/linux-loong64@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df"
 | 
			
		||||
  integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==
 | 
			
		||||
 | 
			
		||||
"@esbuild/linux-mips64el@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe"
 | 
			
		||||
  integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==
 | 
			
		||||
 | 
			
		||||
"@esbuild/linux-ppc64@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4"
 | 
			
		||||
  integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==
 | 
			
		||||
 | 
			
		||||
"@esbuild/linux-riscv64@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc"
 | 
			
		||||
  integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==
 | 
			
		||||
 | 
			
		||||
"@esbuild/linux-s390x@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de"
 | 
			
		||||
  integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==
 | 
			
		||||
 | 
			
		||||
"@esbuild/linux-x64@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0"
 | 
			
		||||
  integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==
 | 
			
		||||
 | 
			
		||||
"@esbuild/netbsd-x64@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047"
 | 
			
		||||
  integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==
 | 
			
		||||
 | 
			
		||||
"@esbuild/openbsd-x64@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70"
 | 
			
		||||
  integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==
 | 
			
		||||
 | 
			
		||||
"@esbuild/sunos-x64@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b"
 | 
			
		||||
  integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==
 | 
			
		||||
 | 
			
		||||
"@esbuild/win32-arm64@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d"
 | 
			
		||||
  integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==
 | 
			
		||||
 | 
			
		||||
"@esbuild/win32-ia32@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b"
 | 
			
		||||
  integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==
 | 
			
		||||
 | 
			
		||||
"@esbuild/win32-x64@0.21.5":
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c"
 | 
			
		||||
  integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==
 | 
			
		||||
 | 
			
		||||
"@jridgewell/sourcemap-codec@^1.4.15":
 | 
			
		||||
  version "1.4.15"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
 | 
			
		||||
  integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-android-arm-eabi@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.31.0.tgz#d4dd60da0075a6ce9a6c76d71b8204f3e1822285"
 | 
			
		||||
  integrity sha512-9NrR4033uCbUBRgvLcBrJofa2KY9DzxL2UKZ1/4xA/mnTNyhZCWBuD8X3tPm1n4KxcgaraOYgrFKSgwjASfmlA==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-android-arm64@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.31.0.tgz#25c4d33259a7a2ccd2f52a5ffcc0bb3ab3f0729d"
 | 
			
		||||
  integrity sha512-iBbODqT86YBFHajxxF8ebj2hwKm1k8PTBQSojSt3d1FFt1gN+xf4CowE47iN0vOSdnd+5ierMHBbu/rHc7nq5g==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-darwin-arm64@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.31.0.tgz#d137dff254b19163a6b52ac083a71cd055dae844"
 | 
			
		||||
  integrity sha512-WHIZfXgVBX30SWuTMhlHPXTyN20AXrLH4TEeH/D0Bolvx9PjgZnn4H677PlSGvU6MKNsjCQJYczkpvBbrBnG6g==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-darwin-x64@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.31.0.tgz#58ff20b5dacb797d3adca19f02a21c532f9d55bf"
 | 
			
		||||
  integrity sha512-hrWL7uQacTEF8gdrQAqcDy9xllQ0w0zuL1wk1HV8wKGSGbKPVjVUv/DEwT2+Asabf8Dh/As+IvfdU+H8hhzrQQ==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-freebsd-arm64@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.31.0.tgz#96ce1a241c591ec3e068f4af765d94eddb24e60c"
 | 
			
		||||
  integrity sha512-S2oCsZ4hJviG1QjPY1h6sVJLBI6ekBeAEssYKad1soRFv3SocsQCzX6cwnk6fID6UQQACTjeIMB+hyYrFacRew==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-freebsd-x64@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.31.0.tgz#e59e7ede505be41f0b4311b0b943f8eb44938467"
 | 
			
		||||
  integrity sha512-pCANqpynRS4Jirn4IKZH4tnm2+2CqCNLKD7gAdEjzdLGbH1iO0zouHz4mxqg0uEMpO030ejJ0aA6e1PJo2xrPA==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-linux-arm-gnueabihf@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.31.0.tgz#e455ca6e4ff35bd46d62201c153352e717000a7b"
 | 
			
		||||
  integrity sha512-0O8ViX+QcBd3ZmGlcFTnYXZKGbFu09EhgD27tgTdGnkcYXLat4KIsBBQeKLR2xZDCXdIBAlWLkiXE1+rJpCxFw==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-linux-arm-musleabihf@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.31.0.tgz#bc1a93d807d19e70b1e343a5bfea43723bcd6327"
 | 
			
		||||
  integrity sha512-w5IzG0wTVv7B0/SwDnMYmbr2uERQp999q8FMkKG1I+j8hpPX2BYFjWe69xbhbP6J9h2gId/7ogesl9hwblFwwg==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-linux-arm64-gnu@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.31.0.tgz#f38bf843f1dc3d5de680caf31084008846e3efae"
 | 
			
		||||
  integrity sha512-JyFFshbN5xwy6fulZ8B/8qOqENRmDdEkcIMF0Zz+RsfamEW+Zabl5jAb0IozP/8UKnJ7g2FtZZPEUIAlUSX8cA==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-linux-arm64-musl@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.31.0.tgz#b3987a96c18b7287129cf735be2dbf83e94d9d05"
 | 
			
		||||
  integrity sha512-kpQXQ0UPFeMPmPYksiBL9WS/BDiQEjRGMfklVIsA0Sng347H8W2iexch+IEwaR7OVSKtr2ZFxggt11zVIlZ25g==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-linux-loongarch64-gnu@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.31.0.tgz#0f0324044e71c4f02e9f49e7ec4e347b655b34ee"
 | 
			
		||||
  integrity sha512-pMlxLjt60iQTzt9iBb3jZphFIl55a70wexvo8p+vVFK+7ifTRookdoXX3bOsRdmfD+OKnMozKO6XM4zR0sHRrQ==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-linux-powerpc64le-gnu@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.31.0.tgz#809479f27f1fd5b4eecd2aa732132ad952d454ba"
 | 
			
		||||
  integrity sha512-D7TXT7I/uKEuWiRkEFbed1UUYZwcJDU4vZQdPTcepK7ecPhzKOYk4Er2YR4uHKme4qDeIh6N3XrLfpuM7vzRWQ==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-linux-riscv64-gnu@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.31.0.tgz#7bc75c4f22db04d3c972f83431739cfa41c6a36e"
 | 
			
		||||
  integrity sha512-wal2Tc8O5lMBtoePLBYRKj2CImUCJ4UNGJlLwspx7QApYny7K1cUYlzQ/4IGQBLmm+y0RS7dwc3TDO/pmcneTw==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-linux-s390x-gnu@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.31.0.tgz#cfe8052345c55864d83ae343362cf1912480170e"
 | 
			
		||||
  integrity sha512-O1o5EUI0+RRMkK9wiTVpk2tyzXdXefHtRTIjBbmFREmNMy7pFeYXCFGbhKFwISA3UOExlo5GGUuuj3oMKdK6JQ==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-linux-x64-gnu@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.31.0.tgz#c6b048f1e25f3fea5b4bd246232f4d07a159c5a0"
 | 
			
		||||
  integrity sha512-zSoHl356vKnNxwOWnLd60ixHNPRBglxpv2g7q0Cd3Pmr561gf0HiAcUBRL3S1vPqRC17Zo2CX/9cPkqTIiai1g==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-linux-x64-musl@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.31.0.tgz#615273ac52d1a201f4de191cbd3389016a9d7d80"
 | 
			
		||||
  integrity sha512-ypB/HMtcSGhKUQNiFwqgdclWNRrAYDH8iMYH4etw/ZlGwiTVxBz2tDrGRrPlfZu6QjXwtd+C3Zib5pFqID97ZA==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-win32-arm64-msvc@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.31.0.tgz#32ed85810c1b831c648eca999d68f01255b30691"
 | 
			
		||||
  integrity sha512-JuhN2xdI/m8Hr+aVO3vspO7OQfUFO6bKLIRTAy0U15vmWjnZDLrEgCZ2s6+scAYaQVpYSh9tZtRijApw9IXyMw==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-win32-ia32-msvc@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.31.0.tgz#d47effada68bcbfdccd30c4a788d42e4542ff4d3"
 | 
			
		||||
  integrity sha512-U1xZZXYkvdf5MIWmftU8wrM5PPXzyaY1nGCI4KI4BFfoZxHamsIe+BtnPLIvvPykvQWlVbqUXdLa4aJUuilwLQ==
 | 
			
		||||
 | 
			
		||||
"@rollup/rollup-win32-x64-msvc@4.31.0":
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.31.0.tgz#7a2d89a82cf0388d60304964217dd7beac6de645"
 | 
			
		||||
  integrity sha512-ul8rnCsUumNln5YWwz0ted2ZHFhzhRRnkpBZ+YRuHoRAlUji9KChpOUOndY7uykrPEPXVbHLlsdo6v5yXo/TXw==
 | 
			
		||||
 | 
			
		||||
"@shikijs/core@1.3.0", "@shikijs/core@^1.3.0":
 | 
			
		||||
  version "1.3.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.3.0.tgz#5b93b51ddb8def1e3a1543107f9b5b0540f716f6"
 | 
			
		||||
  integrity sha512-7fedsBfuILDTBmrYZNFI8B6ATTxhQAasUHllHmjvSZPnoq4bULWoTpHwmuQvZ8Aq03/tAa2IGo6RXqWtHdWaCA==
 | 
			
		||||
 | 
			
		||||
"@shikijs/transformers@^1.3.0":
 | 
			
		||||
  version "1.3.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@shikijs/transformers/-/transformers-1.3.0.tgz#b03c5733ef61e25e4f53666bf11889f8876f34e9"
 | 
			
		||||
  integrity sha512-3mlpg2I9CjhjE96dEWQOGeCWoPcyTov3s4aAsHmgvnTHa8MBknEnCQy8/xivJPSpD+olqOqIEoHnLfbNJK29AA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    shiki "1.3.0"
 | 
			
		||||
 | 
			
		||||
"@types/estree@1.0.6":
 | 
			
		||||
  version "1.0.6"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50"
 | 
			
		||||
  integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==
 | 
			
		||||
 | 
			
		||||
"@types/linkify-it@*":
 | 
			
		||||
  version "3.0.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.5.tgz#1e78a3ac2428e6d7e6c05c1665c242023a4601d8"
 | 
			
		||||
  integrity sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==
 | 
			
		||||
 | 
			
		||||
"@types/markdown-it@^14.0.1":
 | 
			
		||||
  version "14.0.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-14.0.1.tgz#3d3fdf9dba83b69edececc070d39ec72b84270a7"
 | 
			
		||||
  integrity sha512-6WfOG3jXR78DW8L5cTYCVVGAsIFZskRHCDo5tbqa+qtKVt4oDRVH7hyIWu1SpDQJlmIoEivNQZ5h+AGAOrgOtQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@types/linkify-it" "*"
 | 
			
		||||
    "@types/mdurl" "*"
 | 
			
		||||
 | 
			
		||||
"@types/mdurl@*":
 | 
			
		||||
  version "1.0.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.5.tgz#3e0d2db570e9fb6ccb2dc8fde0be1d79ac810d39"
 | 
			
		||||
  integrity sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==
 | 
			
		||||
 | 
			
		||||
"@types/web-bluetooth@^0.0.20":
 | 
			
		||||
  version "0.0.20"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz#f066abfcd1cbe66267cdbbf0de010d8a41b41597"
 | 
			
		||||
  integrity sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==
 | 
			
		||||
 | 
			
		||||
"@vitejs/plugin-vue@^5.0.4":
 | 
			
		||||
  version "5.0.4"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz#508d6a0f2440f86945835d903fcc0d95d1bb8a37"
 | 
			
		||||
  integrity sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==
 | 
			
		||||
 | 
			
		||||
"@vue/compiler-core@3.4.24":
 | 
			
		||||
  version "3.4.24"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.24.tgz#6b4a5ffddcd874a692f2acfa68981201bcd7096b"
 | 
			
		||||
  integrity sha512-vbW/tgbwJYj62N/Ww99x0zhFTkZDTcGh3uwJEuadZ/nF9/xuFMC4693P9r+3sxGXISABpDKvffY5ApH9pmdd1A==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/parser" "^7.24.4"
 | 
			
		||||
    "@vue/shared" "3.4.24"
 | 
			
		||||
    entities "^4.5.0"
 | 
			
		||||
    estree-walker "^2.0.2"
 | 
			
		||||
    source-map-js "^1.2.0"
 | 
			
		||||
 | 
			
		||||
"@vue/compiler-dom@3.4.24":
 | 
			
		||||
  version "3.4.24"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.24.tgz#b7335a49f095b6d35e48b6f7be8da513c1fa52b8"
 | 
			
		||||
  integrity sha512-4XgABML/4cNndVsQndG6BbGN7+EoisDwi3oXNovqL/4jdNhwvP8/rfRMTb6FxkxIxUUtg6AI1/qZvwfSjxJiWA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@vue/compiler-core" "3.4.24"
 | 
			
		||||
    "@vue/shared" "3.4.24"
 | 
			
		||||
 | 
			
		||||
"@vue/compiler-sfc@3.4.24":
 | 
			
		||||
  version "3.4.24"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.24.tgz#2872e353147ce2a145169a33ddd4d68dc95c3a18"
 | 
			
		||||
  integrity sha512-nRAlJUK02FTWfA2nuvNBAqsDZuERGFgxZ8sGH62XgFSvMxO2URblzulExsmj4gFZ8e+VAyDooU9oAoXfEDNxTA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/parser" "^7.24.4"
 | 
			
		||||
    "@vue/compiler-core" "3.4.24"
 | 
			
		||||
    "@vue/compiler-dom" "3.4.24"
 | 
			
		||||
    "@vue/compiler-ssr" "3.4.24"
 | 
			
		||||
    "@vue/shared" "3.4.24"
 | 
			
		||||
    estree-walker "^2.0.2"
 | 
			
		||||
    magic-string "^0.30.10"
 | 
			
		||||
    postcss "^8.4.38"
 | 
			
		||||
    source-map-js "^1.2.0"
 | 
			
		||||
 | 
			
		||||
"@vue/compiler-ssr@3.4.24":
 | 
			
		||||
  version "3.4.24"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.24.tgz#0d11fe54dabd17cbd6393a16bf7f785da1cfab46"
 | 
			
		||||
  integrity sha512-ZsAtr4fhaUFnVcDqwW3bYCSDwq+9Gk69q2r/7dAHDrOMw41kylaMgOP4zRnn6GIEJkQznKgrMOGPMFnLB52RbQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@vue/compiler-dom" "3.4.24"
 | 
			
		||||
    "@vue/shared" "3.4.24"
 | 
			
		||||
 | 
			
		||||
"@vue/devtools-api@^7.0.27":
 | 
			
		||||
  version "7.1.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-7.1.2.tgz#8808b0f008842b756bf1e9c30788837abb62ab3a"
 | 
			
		||||
  integrity sha512-AKd49cN3BdRgttmX5Aw8op7sx6jmaPwaILcDjaa05UKc1yIHDYST7P8yGZs6zd2pKFETAQz40gmyG7+b57slsQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@vue/devtools-kit" "^7.1.2"
 | 
			
		||||
 | 
			
		||||
"@vue/devtools-kit@^7.1.2":
 | 
			
		||||
  version "7.1.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@vue/devtools-kit/-/devtools-kit-7.1.2.tgz#dfb7306edf895dadc556dd5f0c516809c2f94826"
 | 
			
		||||
  integrity sha512-UTrcUSOhlI9eXqbPMHUWwA6NQiiPT3onzXsVk2JHGR8ZFFSkzsWTTpHyVA1woG8zvgu2HNV/wigW2k87p858zw==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@vue/devtools-shared" "^7.1.2"
 | 
			
		||||
    hookable "^5.5.3"
 | 
			
		||||
    mitt "^3.0.1"
 | 
			
		||||
    perfect-debounce "^1.0.0"
 | 
			
		||||
    speakingurl "^14.0.1"
 | 
			
		||||
 | 
			
		||||
"@vue/devtools-shared@^7.1.2":
 | 
			
		||||
  version "7.1.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@vue/devtools-shared/-/devtools-shared-7.1.2.tgz#7b1c1de10bab4756f271c377370a62833b4ee94b"
 | 
			
		||||
  integrity sha512-r9cUf93VMhKSsxF2/cBbf6Lm1nRBx+r1pRuji5CiAf3JIPYPOjeEqJ13OuwP1fauYh1tyBFcCxt3eJPvHT59gg==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    rfdc "^1.3.1"
 | 
			
		||||
 | 
			
		||||
"@vue/reactivity@3.4.24":
 | 
			
		||||
  version "3.4.24"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.4.24.tgz#150584316ca2acc4ed19a24f9f29863c3a17a7b2"
 | 
			
		||||
  integrity sha512-nup3fSYg4i4LtNvu9slF/HF/0dkMQYfepUdORBcMSsankzRPzE7ypAFurpwyRBfU1i7Dn1kcwpYsE1wETSh91g==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@vue/shared" "3.4.24"
 | 
			
		||||
 | 
			
		||||
"@vue/runtime-core@3.4.24":
 | 
			
		||||
  version "3.4.24"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.4.24.tgz#066c544dc59a07a96c12874a57b750c239124874"
 | 
			
		||||
  integrity sha512-c7iMfj6cJMeAG3s5yOn9Rc5D9e2/wIuaozmGf/ICGCY3KV5H7mbTVdvEkd4ZshTq7RUZqj2k7LMJWVx+EBiY1g==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@vue/reactivity" "3.4.24"
 | 
			
		||||
    "@vue/shared" "3.4.24"
 | 
			
		||||
 | 
			
		||||
"@vue/runtime-dom@3.4.24":
 | 
			
		||||
  version "3.4.24"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.4.24.tgz#4f8e7acbe1e8ffa7c55af1366e4438729ebe9b20"
 | 
			
		||||
  integrity sha512-uXKzuh/Emfad2Y7Qm0ABsLZZV6H3mAJ5ZVqmAOlrNQRf+T5mxpPGZBfec1hkP41t6h6FwF6RSGCs/gd8WbuySQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@vue/runtime-core" "3.4.24"
 | 
			
		||||
    "@vue/shared" "3.4.24"
 | 
			
		||||
    csstype "^3.1.3"
 | 
			
		||||
 | 
			
		||||
"@vue/server-renderer@3.4.24":
 | 
			
		||||
  version "3.4.24"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.4.24.tgz#80dd546f8d6a9f5c4f8b68083fe9cc2d62299332"
 | 
			
		||||
  integrity sha512-H+DLK4sQF6sRgzKyofmlEVBIV/9KrQU6HIV7nt6yIwSGGKvSwlV8pqJlebUKLpbXaNHugdSfAbP6YmXF69lxow==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@vue/compiler-ssr" "3.4.24"
 | 
			
		||||
    "@vue/shared" "3.4.24"
 | 
			
		||||
 | 
			
		||||
"@vue/shared@3.4.24":
 | 
			
		||||
  version "3.4.24"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.24.tgz#278ac71f492b392b9b17fe8fc7d324db1a8842db"
 | 
			
		||||
  integrity sha512-BW4tajrJBM9AGAknnyEw5tO2xTmnqgup0VTnDAMcxYmqOX0RG0b9aSUGAbEKolD91tdwpA6oCwbltoJoNzpItw==
 | 
			
		||||
 | 
			
		||||
"@vueuse/core@10.9.0", "@vueuse/core@^10.9.0":
 | 
			
		||||
  version "10.9.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-10.9.0.tgz#7d779a95cf0189de176fee63cee4ba44b3c85d64"
 | 
			
		||||
  integrity sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@types/web-bluetooth" "^0.0.20"
 | 
			
		||||
    "@vueuse/metadata" "10.9.0"
 | 
			
		||||
    "@vueuse/shared" "10.9.0"
 | 
			
		||||
    vue-demi ">=0.14.7"
 | 
			
		||||
 | 
			
		||||
"@vueuse/integrations@^10.9.0":
 | 
			
		||||
  version "10.9.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@vueuse/integrations/-/integrations-10.9.0.tgz#2b1a9556215ad3c1f96d39cbfbef102cf6e0ec05"
 | 
			
		||||
  integrity sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@vueuse/core" "10.9.0"
 | 
			
		||||
    "@vueuse/shared" "10.9.0"
 | 
			
		||||
    vue-demi ">=0.14.7"
 | 
			
		||||
 | 
			
		||||
"@vueuse/metadata@10.9.0":
 | 
			
		||||
  version "10.9.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-10.9.0.tgz#769a1a9db65daac15cf98084cbf7819ed3758620"
 | 
			
		||||
  integrity sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==
 | 
			
		||||
 | 
			
		||||
"@vueuse/shared@10.9.0":
 | 
			
		||||
  version "10.9.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-10.9.0.tgz#13af2a348de15d07b7be2fd0c7fc9853a69d8fe0"
 | 
			
		||||
  integrity sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    vue-demi ">=0.14.7"
 | 
			
		||||
 | 
			
		||||
algoliasearch@^4.19.1:
 | 
			
		||||
  version "4.23.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.23.3.tgz#e09011d0a3b0651444916a3e6bbcba064ec44b60"
 | 
			
		||||
  integrity sha512-Le/3YgNvjW9zxIQMRhUHuhiUjAlKY/zsdZpfq4dlLqg6mEm0nL6yk+7f2hDOtLpxsgE4jSzDmvHL7nXdBp5feg==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@algolia/cache-browser-local-storage" "4.23.3"
 | 
			
		||||
    "@algolia/cache-common" "4.23.3"
 | 
			
		||||
    "@algolia/cache-in-memory" "4.23.3"
 | 
			
		||||
    "@algolia/client-account" "4.23.3"
 | 
			
		||||
    "@algolia/client-analytics" "4.23.3"
 | 
			
		||||
    "@algolia/client-common" "4.23.3"
 | 
			
		||||
    "@algolia/client-personalization" "4.23.3"
 | 
			
		||||
    "@algolia/client-search" "4.23.3"
 | 
			
		||||
    "@algolia/logger-common" "4.23.3"
 | 
			
		||||
    "@algolia/logger-console" "4.23.3"
 | 
			
		||||
    "@algolia/recommend" "4.23.3"
 | 
			
		||||
    "@algolia/requester-browser-xhr" "4.23.3"
 | 
			
		||||
    "@algolia/requester-common" "4.23.3"
 | 
			
		||||
    "@algolia/requester-node-http" "4.23.3"
 | 
			
		||||
    "@algolia/transporter" "4.23.3"
 | 
			
		||||
 | 
			
		||||
csstype@^3.1.3:
 | 
			
		||||
  version "3.1.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
 | 
			
		||||
  integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
 | 
			
		||||
 | 
			
		||||
entities@^4.5.0:
 | 
			
		||||
  version "4.5.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
 | 
			
		||||
  integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
 | 
			
		||||
 | 
			
		||||
esbuild@^0.21.3:
 | 
			
		||||
  version "0.21.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d"
 | 
			
		||||
  integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==
 | 
			
		||||
  optionalDependencies:
 | 
			
		||||
    "@esbuild/aix-ppc64" "0.21.5"
 | 
			
		||||
    "@esbuild/android-arm" "0.21.5"
 | 
			
		||||
    "@esbuild/android-arm64" "0.21.5"
 | 
			
		||||
    "@esbuild/android-x64" "0.21.5"
 | 
			
		||||
    "@esbuild/darwin-arm64" "0.21.5"
 | 
			
		||||
    "@esbuild/darwin-x64" "0.21.5"
 | 
			
		||||
    "@esbuild/freebsd-arm64" "0.21.5"
 | 
			
		||||
    "@esbuild/freebsd-x64" "0.21.5"
 | 
			
		||||
    "@esbuild/linux-arm" "0.21.5"
 | 
			
		||||
    "@esbuild/linux-arm64" "0.21.5"
 | 
			
		||||
    "@esbuild/linux-ia32" "0.21.5"
 | 
			
		||||
    "@esbuild/linux-loong64" "0.21.5"
 | 
			
		||||
    "@esbuild/linux-mips64el" "0.21.5"
 | 
			
		||||
    "@esbuild/linux-ppc64" "0.21.5"
 | 
			
		||||
    "@esbuild/linux-riscv64" "0.21.5"
 | 
			
		||||
    "@esbuild/linux-s390x" "0.21.5"
 | 
			
		||||
    "@esbuild/linux-x64" "0.21.5"
 | 
			
		||||
    "@esbuild/netbsd-x64" "0.21.5"
 | 
			
		||||
    "@esbuild/openbsd-x64" "0.21.5"
 | 
			
		||||
    "@esbuild/sunos-x64" "0.21.5"
 | 
			
		||||
    "@esbuild/win32-arm64" "0.21.5"
 | 
			
		||||
    "@esbuild/win32-ia32" "0.21.5"
 | 
			
		||||
    "@esbuild/win32-x64" "0.21.5"
 | 
			
		||||
 | 
			
		||||
estree-walker@^2.0.2:
 | 
			
		||||
  version "2.0.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
 | 
			
		||||
  integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
 | 
			
		||||
 | 
			
		||||
focus-trap@^7.5.4:
 | 
			
		||||
  version "7.5.4"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-7.5.4.tgz#6c4e342fe1dae6add9c2aa332a6e7a0bbd495ba2"
 | 
			
		||||
  integrity sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    tabbable "^6.2.0"
 | 
			
		||||
 | 
			
		||||
fsevents@~2.3.2, fsevents@~2.3.3:
 | 
			
		||||
  version "2.3.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
 | 
			
		||||
  integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
 | 
			
		||||
 | 
			
		||||
hookable@^5.5.3:
 | 
			
		||||
  version "5.5.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/hookable/-/hookable-5.5.3.tgz#6cfc358984a1ef991e2518cb9ed4a778bbd3215d"
 | 
			
		||||
  integrity sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==
 | 
			
		||||
 | 
			
		||||
magic-string@^0.30.10:
 | 
			
		||||
  version "0.30.10"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e"
 | 
			
		||||
  integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@jridgewell/sourcemap-codec" "^1.4.15"
 | 
			
		||||
 | 
			
		||||
mark.js@8.11.1:
 | 
			
		||||
  version "8.11.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/mark.js/-/mark.js-8.11.1.tgz#180f1f9ebef8b0e638e4166ad52db879beb2ffc5"
 | 
			
		||||
  integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==
 | 
			
		||||
 | 
			
		||||
minisearch@^6.3.0:
 | 
			
		||||
  version "6.3.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/minisearch/-/minisearch-6.3.0.tgz#985a2f1ca3c73c2d65af94f0616bfe57164b0b6b"
 | 
			
		||||
  integrity sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==
 | 
			
		||||
 | 
			
		||||
mitt@^3.0.1:
 | 
			
		||||
  version "3.0.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1"
 | 
			
		||||
  integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==
 | 
			
		||||
 | 
			
		||||
nanoid@^3.3.8:
 | 
			
		||||
  version "3.3.8"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf"
 | 
			
		||||
  integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==
 | 
			
		||||
 | 
			
		||||
perfect-debounce@^1.0.0:
 | 
			
		||||
  version "1.0.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a"
 | 
			
		||||
  integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==
 | 
			
		||||
 | 
			
		||||
picocolors@^1.1.1:
 | 
			
		||||
  version "1.1.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
 | 
			
		||||
  integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
 | 
			
		||||
 | 
			
		||||
postcss@^8.4.38, postcss@^8.4.43:
 | 
			
		||||
  version "8.5.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.1.tgz#e2272a1f8a807fafa413218245630b5db10a3214"
 | 
			
		||||
  integrity sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    nanoid "^3.3.8"
 | 
			
		||||
    picocolors "^1.1.1"
 | 
			
		||||
    source-map-js "^1.2.1"
 | 
			
		||||
 | 
			
		||||
preact@^10.0.0:
 | 
			
		||||
  version "10.20.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/preact/-/preact-10.20.2.tgz#0b343299a8c020562311cc25db93b3d832ec5e71"
 | 
			
		||||
  integrity sha512-S1d1ernz3KQ+Y2awUxKakpfOg2CEmJmwOP+6igPx6dgr6pgDvenqYviyokWso2rhHvGtTlWWnJDa7RaPbQerTg==
 | 
			
		||||
 | 
			
		||||
rfdc@^1.3.1:
 | 
			
		||||
  version "1.3.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f"
 | 
			
		||||
  integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==
 | 
			
		||||
 | 
			
		||||
rollup@^4.20.0:
 | 
			
		||||
  version "4.31.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.31.0.tgz#b84af969a0292cb047dce2c0ec5413a9457597a4"
 | 
			
		||||
  integrity sha512-9cCE8P4rZLx9+PjoyqHLs31V9a9Vpvfo4qNcs6JCiGWYhw2gijSetFbH6SSy1whnkgcefnUwr8sad7tgqsGvnw==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@types/estree" "1.0.6"
 | 
			
		||||
  optionalDependencies:
 | 
			
		||||
    "@rollup/rollup-android-arm-eabi" "4.31.0"
 | 
			
		||||
    "@rollup/rollup-android-arm64" "4.31.0"
 | 
			
		||||
    "@rollup/rollup-darwin-arm64" "4.31.0"
 | 
			
		||||
    "@rollup/rollup-darwin-x64" "4.31.0"
 | 
			
		||||
    "@rollup/rollup-freebsd-arm64" "4.31.0"
 | 
			
		||||
    "@rollup/rollup-freebsd-x64" "4.31.0"
 | 
			
		||||
    "@rollup/rollup-linux-arm-gnueabihf" "4.31.0"
 | 
			
		||||
    "@rollup/rollup-linux-arm-musleabihf" "4.31.0"
 | 
			
		||||
    "@rollup/rollup-linux-arm64-gnu" "4.31.0"
 | 
			
		||||
    "@rollup/rollup-linux-arm64-musl" "4.31.0"
 | 
			
		||||
    "@rollup/rollup-linux-loongarch64-gnu" "4.31.0"
 | 
			
		||||
    "@rollup/rollup-linux-powerpc64le-gnu" "4.31.0"
 | 
			
		||||
    "@rollup/rollup-linux-riscv64-gnu" "4.31.0"
 | 
			
		||||
    "@rollup/rollup-linux-s390x-gnu" "4.31.0"
 | 
			
		||||
    "@rollup/rollup-linux-x64-gnu" "4.31.0"
 | 
			
		||||
    "@rollup/rollup-linux-x64-musl" "4.31.0"
 | 
			
		||||
    "@rollup/rollup-win32-arm64-msvc" "4.31.0"
 | 
			
		||||
    "@rollup/rollup-win32-ia32-msvc" "4.31.0"
 | 
			
		||||
    "@rollup/rollup-win32-x64-msvc" "4.31.0"
 | 
			
		||||
    fsevents "~2.3.2"
 | 
			
		||||
 | 
			
		||||
shiki@1.3.0, shiki@^1.3.0:
 | 
			
		||||
  version "1.3.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.3.0.tgz#3eda35cb49f6f0a98525e9da48fc072e6c655a3f"
 | 
			
		||||
  integrity sha512-9aNdQy/etMXctnPzsje1h1XIGm9YfRcSksKOGqZWXA/qP9G18/8fpz5Bjpma8bOgz3tqIpjERAd6/lLjFyzoww==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@shikijs/core" "1.3.0"
 | 
			
		||||
 | 
			
		||||
source-map-js@^1.2.0:
 | 
			
		||||
  version "1.2.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
 | 
			
		||||
  integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
 | 
			
		||||
 | 
			
		||||
source-map-js@^1.2.1:
 | 
			
		||||
  version "1.2.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
 | 
			
		||||
  integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
 | 
			
		||||
 | 
			
		||||
speakingurl@^14.0.1:
 | 
			
		||||
  version "14.0.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53"
 | 
			
		||||
  integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==
 | 
			
		||||
 | 
			
		||||
tabbable@^6.2.0:
 | 
			
		||||
  version "6.2.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
 | 
			
		||||
  integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
 | 
			
		||||
 | 
			
		||||
vite@^5.2.9, vite@^5.4.19:
 | 
			
		||||
  version "5.4.19"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.19.tgz#20efd060410044b3ed555049418a5e7d1998f959"
 | 
			
		||||
  integrity sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    esbuild "^0.21.3"
 | 
			
		||||
    postcss "^8.4.43"
 | 
			
		||||
    rollup "^4.20.0"
 | 
			
		||||
  optionalDependencies:
 | 
			
		||||
    fsevents "~2.3.3"
 | 
			
		||||
 | 
			
		||||
vitepress-plugin-tabs@^0.5.0:
 | 
			
		||||
  version "0.5.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/vitepress-plugin-tabs/-/vitepress-plugin-tabs-0.5.0.tgz#2b193a72ed36b9fcd63e3907d3044fe7b6cf3e4e"
 | 
			
		||||
  integrity sha512-SIhFWwGsUkTByfc2b279ray/E0Jt8vDTsM1LiHxmCOBAEMmvzIBZSuYYT1DpdDTiS3SuJieBheJkYnwCq/yD9A==
 | 
			
		||||
 | 
			
		||||
vitepress@^1.1.0:
 | 
			
		||||
  version "1.1.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/vitepress/-/vitepress-1.1.3.tgz#ded22392f5274680aaba8bb81dd4fb1c4741c02e"
 | 
			
		||||
  integrity sha512-hGrIYN0w9IHWs0NQSnlMjKV/v/HLfD+Ywv5QdvCSkiT32mpNOOwUrZjnqZv/JL/WBPpUc94eghTUvmipxw0xrA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@docsearch/css" "^3.6.0"
 | 
			
		||||
    "@docsearch/js" "^3.6.0"
 | 
			
		||||
    "@shikijs/core" "^1.3.0"
 | 
			
		||||
    "@shikijs/transformers" "^1.3.0"
 | 
			
		||||
    "@types/markdown-it" "^14.0.1"
 | 
			
		||||
    "@vitejs/plugin-vue" "^5.0.4"
 | 
			
		||||
    "@vue/devtools-api" "^7.0.27"
 | 
			
		||||
    "@vueuse/core" "^10.9.0"
 | 
			
		||||
    "@vueuse/integrations" "^10.9.0"
 | 
			
		||||
    focus-trap "^7.5.4"
 | 
			
		||||
    mark.js "8.11.1"
 | 
			
		||||
    minisearch "^6.3.0"
 | 
			
		||||
    shiki "^1.3.0"
 | 
			
		||||
    vite "^5.2.9"
 | 
			
		||||
    vue "^3.4.23"
 | 
			
		||||
 | 
			
		||||
vue-demi@>=0.14.7:
 | 
			
		||||
  version "0.14.7"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.7.tgz#8317536b3ef74c5b09f268f7782e70194567d8f2"
 | 
			
		||||
  integrity sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==
 | 
			
		||||
 | 
			
		||||
vue@^3.4.23, vue@^3.4.24:
 | 
			
		||||
  version "3.4.24"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/vue/-/vue-3.4.24.tgz#f269549939a6c092480f018aa0bd886ba64f4c6f"
 | 
			
		||||
  integrity sha512-NPdx7dLGyHmKHGRRU5bMRYVE+rechR+KDU5R2tSTNG36PuMwbfAJ+amEvOAw7BPfZp5sQulNELSLm5YUkau+Sg==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@vue/compiler-dom" "3.4.24"
 | 
			
		||||
    "@vue/compiler-sfc" "3.4.24"
 | 
			
		||||
    "@vue/runtime-dom" "3.4.24"
 | 
			
		||||
    "@vue/server-renderer" "3.4.24"
 | 
			
		||||
    "@vue/shared" "3.4.24"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,74 +0,0 @@
 | 
			
		|||
# Copyright 2021 QMK
 | 
			
		||||
#
 | 
			
		||||
# This program is free software: you can redistribute it and/or modify
 | 
			
		||||
# it under the terms of the GNU General Public License as published by
 | 
			
		||||
# the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
# (at your option) any later version.
 | 
			
		||||
#
 | 
			
		||||
# This program is distributed in the hope that it will be useful,
 | 
			
		||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
# GNU General Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
# You should have received a copy of the GNU General Public License
 | 
			
		||||
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
GRAVE_ESC_ENABLE ?= yes
 | 
			
		||||
MAGIC_ENABLE ?= yes
 | 
			
		||||
SEND_STRING_ENABLE ?= yes
 | 
			
		||||
SPACE_CADET_ENABLE ?= yes
 | 
			
		||||
 | 
			
		||||
GENERIC_FEATURES = \
 | 
			
		||||
    AUTO_SHIFT \
 | 
			
		||||
    AUTOCORRECT \
 | 
			
		||||
    BOOTMAGIC \
 | 
			
		||||
    CAPS_WORD \
 | 
			
		||||
    COMBO \
 | 
			
		||||
    COMMAND \
 | 
			
		||||
    CONNECTION \
 | 
			
		||||
    CRC \
 | 
			
		||||
    DEFERRED_EXEC \
 | 
			
		||||
    DIGITIZER \
 | 
			
		||||
    DIP_SWITCH \
 | 
			
		||||
    DYNAMIC_KEYMAP \
 | 
			
		||||
    DYNAMIC_MACRO \
 | 
			
		||||
    DYNAMIC_TAPPING_TERM \
 | 
			
		||||
    GRAVE_ESC \
 | 
			
		||||
    HAPTIC \
 | 
			
		||||
    KEYCODE_STRING \
 | 
			
		||||
    KEY_LOCK \
 | 
			
		||||
    KEY_OVERRIDE \
 | 
			
		||||
    LAYER_LOCK \
 | 
			
		||||
    LEADER \
 | 
			
		||||
    MAGIC \
 | 
			
		||||
    MOUSEKEY \
 | 
			
		||||
    MUSIC \
 | 
			
		||||
    OS_DETECTION \
 | 
			
		||||
    PROGRAMMABLE_BUTTON \
 | 
			
		||||
    REPEAT_KEY \
 | 
			
		||||
    SECURE \
 | 
			
		||||
    SEND_STRING \
 | 
			
		||||
    SEQUENCER \
 | 
			
		||||
    SPACE_CADET \
 | 
			
		||||
    SWAP_HANDS \
 | 
			
		||||
    TAP_DANCE \
 | 
			
		||||
    TRI_LAYER \
 | 
			
		||||
    VIA \
 | 
			
		||||
    VIRTSER \
 | 
			
		||||
    WPM \
 | 
			
		||||
 | 
			
		||||
define HANDLE_GENERIC_FEATURE
 | 
			
		||||
    # $$(info "Processing: $1_ENABLE $2.c")
 | 
			
		||||
    SRC += $$(wildcard $$(QUANTUM_DIR)/process_keycode/process_$2.c)
 | 
			
		||||
    SRC += $$(wildcard $$(QUANTUM_DIR)/$2/$2.c)
 | 
			
		||||
    SRC += $$(wildcard $$(QUANTUM_DIR)/$2.c)
 | 
			
		||||
    SRC += $$(wildcard $$(QUANTUM_DIR)/nvm/$$(NVM_DRIVER_LOWER)/nvm_$2.c)
 | 
			
		||||
    VPATH += $$(wildcard $$(QUANTUM_DIR)/$2/)
 | 
			
		||||
    OPT_DEFS += -D$1_ENABLE
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
$(foreach F,$(GENERIC_FEATURES),\
 | 
			
		||||
    $(if $(filter yes, $(strip $($(F)_ENABLE))),\
 | 
			
		||||
        $(eval $(call HANDLE_GENERIC_FEATURE,$(F),$(shell echo $(F) | tr '[:upper:]' '[:lower:]'))) \
 | 
			
		||||
    ) \
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -1,113 +0,0 @@
 | 
			
		|||
COLOR ?= true
 | 
			
		||||
 | 
			
		||||
ifeq ($(COLOR),true)
 | 
			
		||||
	NO_COLOR=\033[0m
 | 
			
		||||
	OK_COLOR=\033[32;01m
 | 
			
		||||
	ERROR_COLOR=\033[31;01m
 | 
			
		||||
	WARN_COLOR=\033[33;01m
 | 
			
		||||
	SKIPPED_COLOR=\033[36;01m
 | 
			
		||||
	BLUE=\033[0;34m
 | 
			
		||||
	BOLD=\033[1m
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifneq ($(shell echo "1 2 3" | awk '{ printf "%2s", $$3; }' 2>/dev/null)," 3")
 | 
			
		||||
	AWK=awk
 | 
			
		||||
else
 | 
			
		||||
	AWK=cat && test
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ON_ERROR ?= exit 1
 | 
			
		||||
 | 
			
		||||
OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)\n
 | 
			
		||||
ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n
 | 
			
		||||
WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n
 | 
			
		||||
SKIPPED_STRING=$(SKIPPED_COLOR)[SKIPPED]$(NO_COLOR)\n
 | 
			
		||||
 | 
			
		||||
TAB_LOG = printf "\n%s\n\n" "$$LOG" | $(AWK) '{ sub(/^/," | "); print }'
 | 
			
		||||
TAB_LOG_PLAIN = printf "%s\n" "$$LOG"
 | 
			
		||||
AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }'
 | 
			
		||||
AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }'
 | 
			
		||||
PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && $(ON_ERROR)
 | 
			
		||||
PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG)
 | 
			
		||||
PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && $(ON_ERROR)
 | 
			
		||||
PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN)
 | 
			
		||||
PRINT_SKIPPED_PLAIN = ($(SILENT) || printf " $(SKIPPED_STRING)" | $(AWK_STATUS))
 | 
			
		||||
PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS)
 | 
			
		||||
BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi;
 | 
			
		||||
MAKE_MSG_FORMAT = $(AWK) '{ printf "%-118s", $$0;}'
 | 
			
		||||
 | 
			
		||||
# The UNSYNC_OUTPUT_CMD command disables the `--output-sync` for the current command, if the `--output-sync` granularity is `target` or lower.
 | 
			
		||||
# This is achieved by telling make to treat the current command as if it invokes a recursive make subcommand (as if by calling `$(MAKE)`).
 | 
			
		||||
UNSYNC_OUTPUT_CMD = +true
 | 
			
		||||
 | 
			
		||||
# Define Messages
 | 
			
		||||
# English
 | 
			
		||||
MSG_ERRORS_NONE = Errors: none
 | 
			
		||||
MSG_ERRORS = $(ERROR_COLOR)Make finished with errors\n$(NO_COLOR)
 | 
			
		||||
MSG_BEGIN = -------- begin --------
 | 
			
		||||
MSG_END = --------  end  --------
 | 
			
		||||
MSG_SIZE_BEFORE = Size before:
 | 
			
		||||
MSG_SIZE_AFTER = Size after:
 | 
			
		||||
MSG_COFF = Converting to AVR COFF:
 | 
			
		||||
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
 | 
			
		||||
MSG_FLASH = Creating load file for flashing:
 | 
			
		||||
MSG_UF2 = Creating UF2 file for deployment:
 | 
			
		||||
MSG_EEPROM = Creating load file for EEPROM:
 | 
			
		||||
MSG_BIN = Creating binary load file for flashing:
 | 
			
		||||
MSG_EXTENDED_LISTING = Creating Extended Listing:
 | 
			
		||||
MSG_SYMBOL_TABLE = Creating Symbol Table:
 | 
			
		||||
MSG_EXECUTING = Executing:
 | 
			
		||||
MSG_LINKING = Linking:
 | 
			
		||||
MSG_COMPILING = Compiling:
 | 
			
		||||
MSG_COMPILING_CXX = Compiling:
 | 
			
		||||
MSG_ASSEMBLING = Assembling:
 | 
			
		||||
MSG_CLEANING = Cleaning project:
 | 
			
		||||
MSG_CREATING_LIBRARY = Creating library:
 | 
			
		||||
MSG_GENERATING = Generating:
 | 
			
		||||
MSG_NOT_REPO = $(WARN_COLOR)WARNING:$(NO_COLOR) Target folder is not a git repo, you probably downloaded a zip file instead of cloning.\n\
 | 
			
		||||
Please consider following $(BOLD)https://docs.qmk.fm/\#/newbs_getting_started$(NO_COLOR).\n\n
 | 
			
		||||
MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR) Some git submodules are out of date or modified.\n\
 | 
			
		||||
Please consider running $(BOLD)qmk git-submodule$(NO_COLOR).\n\n
 | 
			
		||||
 | 
			
		||||
define GENERATE_MSG_MAKE_KB
 | 
			
		||||
    MSG_MAKE_KB_ACTUAL := Making $$(KB_SP) with keymap $(BOLD)$$(CURRENT_KM)$(NO_COLOR)
 | 
			
		||||
    ifneq ($$(MAKE_TARGET),)
 | 
			
		||||
        MSG_MAKE_KB_ACTUAL += and target $(BOLD)$$(MAKE_TARGET)$(NO_COLOR)
 | 
			
		||||
    endif
 | 
			
		||||
endef
 | 
			
		||||
MSG_MAKE_KB = $(eval $(call GENERATE_MSG_MAKE_KB))$(MSG_MAKE_KB_ACTUAL)
 | 
			
		||||
define GENERATE_MSG_MAKE_TEST
 | 
			
		||||
    MSG_MAKE_TEST_ACTUAL := Making test $(BOLD)$(TEST_NAME)$(NO_COLOR)
 | 
			
		||||
    ifneq ($$(MAKE_TARGET),)
 | 
			
		||||
        MSG_MAKE_TEST_ACTUAL += with target $(BOLD)$$(MAKE_TARGET)$(NO_COLOR)
 | 
			
		||||
    endif
 | 
			
		||||
endef
 | 
			
		||||
MSG_MAKE_TEST = $(eval $(call GENERATE_MSG_MAKE_TEST))$(MSG_MAKE_TEST_ACTUAL)
 | 
			
		||||
MSG_TEST = Testing $(BOLD)$(TEST_NAME)$(NO_COLOR)
 | 
			
		||||
define GENERATE_MSG_AVAILABLE_KEYMAPS
 | 
			
		||||
    MSG_AVAILABLE_KEYMAPS_ACTUAL := Available keymaps for $(BOLD)$$(CURRENT_KB)$(NO_COLOR):
 | 
			
		||||
endef
 | 
			
		||||
MSG_AVAILABLE_KEYMAPS = $(eval $(call GENERATE_MSG_AVAILABLE_KEYMAPS))$(MSG_AVAILABLE_KEYMAPS_ACTUAL)
 | 
			
		||||
 | 
			
		||||
MSG_BOOTLOADER_NOT_FOUND_BASE = Bootloader not found. Make sure the board is in bootloader mode. See https://docs.qmk.fm/\#/newbs_flashing\n
 | 
			
		||||
MSG_CHECK_FILESIZE = Checking file size of $(TARGET).$(FIRMWARE_FORMAT)
 | 
			
		||||
MSG_FILE_TOO_BIG = $(ERROR_COLOR)The firmware is too large!$(NO_COLOR) $(CURRENT_SIZE)/$(MAX_SIZE) ($(OVER_SIZE) bytes over)\n
 | 
			
		||||
MSG_FILE_TOO_SMALL = The firmware is too small! $(CURRENT_SIZE)/$(MAX_SIZE)\n
 | 
			
		||||
MSG_FILE_JUST_RIGHT = The firmware size is fine - $(CURRENT_SIZE)/$(MAX_SIZE) ($(PERCENT_SIZE)%%, $(FREE_SIZE) bytes free)\n
 | 
			
		||||
MSG_FILE_NEAR_LIMIT = The firmware size is approaching the maximum - $(CURRENT_SIZE)/$(MAX_SIZE) ($(PERCENT_SIZE)%%, $(FREE_SIZE) bytes free)\n
 | 
			
		||||
MSG_PYTHON_MISSING = $(ERROR_COLOR)ERROR:$(NO_COLOR) Cannot run \"qmk hello\"!\n\n\
 | 
			
		||||
	Please run $(BOLD)qmk setup$(NO_COLOR) to install all the dependencies QMK requires.\n\n
 | 
			
		||||
MSG_FLASH_BOOTLOADER = $(WARN_COLOR)WARNING:$(NO_COLOR) This board's bootloader is not specified or is not supported by the \":flash\" target at this time.\n\n
 | 
			
		||||
MSG_FLASH_ARCH = $(WARN_COLOR)WARNING:$(NO_COLOR) This board's architecture is not supported by the \":flash\" target at this time.\n\n
 | 
			
		||||
MSG_BOOTLOADER_NOT_FOUND = $(ERROR_COLOR)ERROR:$(NO_COLOR) $(MSG_BOOTLOADER_NOT_FOUND_BASE) Trying again in 5s (Ctrl+C to cancel)\n
 | 
			
		||||
BOOTLOADER_RETRY_TIME ?= 0.5
 | 
			
		||||
MSG_BOOTLOADER_NOT_FOUND_QUICK_RETRY = $(MSG_BOOTLOADER_NOT_FOUND_BASE) Trying again every $(BOOTLOADER_RETRY_TIME)s (Ctrl+C to cancel)
 | 
			
		||||
 | 
			
		||||
define WARNING_MESSAGE
 | 
			
		||||
    $(shell printf "\n %-99s $(WARN_STRING)\n" "$1" >&2)
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
define CATASTROPHIC_ERROR
 | 
			
		||||
    $(shell printf "\n * %-99s $(ERROR_STRING)\n" "$2" >&2)
 | 
			
		||||
    $(error $1)
 | 
			
		||||
endef
 | 
			
		||||
| 
						 | 
				
			
			@ -1,151 +0,0 @@
 | 
			
		|||
BUILD_OPTION_NAMES = \
 | 
			
		||||
  BOOTMAGIC_ENABLE \
 | 
			
		||||
  MOUSEKEY_ENABLE \
 | 
			
		||||
  EXTRAKEY_ENABLE \
 | 
			
		||||
  CONSOLE_ENABLE \
 | 
			
		||||
  COMMAND_ENABLE \
 | 
			
		||||
  NKRO_ENABLE \
 | 
			
		||||
  CUSTOM_MATRIX \
 | 
			
		||||
  DEBOUNCE_TYPE \
 | 
			
		||||
  SPLIT_KEYBOARD \
 | 
			
		||||
  DYNAMIC_KEYMAP_ENABLE \
 | 
			
		||||
  USB_HID_ENABLE \
 | 
			
		||||
  VIA_ENABLE
 | 
			
		||||
 | 
			
		||||
HARDWARE_OPTION_NAMES = \
 | 
			
		||||
  SLEEP_LED_ENABLE \
 | 
			
		||||
  BACKLIGHT_ENABLE \
 | 
			
		||||
  BACKLIGHT_DRIVER \
 | 
			
		||||
  RGBLIGHT_ENABLE \
 | 
			
		||||
  RGBLIGHT_DRIVER \
 | 
			
		||||
  RGB_MATRIX_ENABLE \
 | 
			
		||||
  RGB_MATRIX_DRIVER \
 | 
			
		||||
  CIE1931_CURVE \
 | 
			
		||||
  MIDI_ENABLE \
 | 
			
		||||
  BLUETOOTH_ENABLE \
 | 
			
		||||
  BLUETOOTH_DRIVER \
 | 
			
		||||
  AUDIO_ENABLE \
 | 
			
		||||
  HD44780_ENABLE \
 | 
			
		||||
  ENCODER_ENABLE \
 | 
			
		||||
  LED_TABLES \
 | 
			
		||||
  POINTING_DEVICE_ENABLE \
 | 
			
		||||
  DIP_SWITCH_ENABLE
 | 
			
		||||
 | 
			
		||||
OTHER_OPTION_NAMES = \
 | 
			
		||||
  UNICODE_ENABLE \
 | 
			
		||||
  UCIS_ENABLE \
 | 
			
		||||
  UNICODEMAP_ENABLE \
 | 
			
		||||
  UNICODE_COMMON \
 | 
			
		||||
  AUTO_SHIFT_ENABLE \
 | 
			
		||||
  DYNAMIC_TAPPING_TERM_ENABLE \
 | 
			
		||||
  COMBO_ENABLE \
 | 
			
		||||
  KEY_LOCK_ENABLE \
 | 
			
		||||
  KEY_OVERRIDE_ENABLE \
 | 
			
		||||
  LEADER_ENABLE \
 | 
			
		||||
  STENO_ENABLE \
 | 
			
		||||
  STENO_PROTOCOL \
 | 
			
		||||
  TAP_DANCE_ENABLE \
 | 
			
		||||
  VIRTSER_ENABLE \
 | 
			
		||||
  OLED_ENABLE \
 | 
			
		||||
  OLED_DRIVER \
 | 
			
		||||
  LED_BACK_ENABLE \
 | 
			
		||||
  LED_UNDERGLOW_ENABLE \
 | 
			
		||||
  LED_ANIMATIONS \
 | 
			
		||||
  IOS_DEVICE_ENABLE \
 | 
			
		||||
  HELIX ZINC \
 | 
			
		||||
  AUTOLOG_ENABLE \
 | 
			
		||||
  DEBUG_ENABLE \
 | 
			
		||||
  ENCODER_MAP_ENABLE \
 | 
			
		||||
  ENCODER_ENABLE_CUSTOM \
 | 
			
		||||
  GERMAN_ENABLE \
 | 
			
		||||
  HAPTIC_ENABLE \
 | 
			
		||||
  KEYLOGGER_ENABLE \
 | 
			
		||||
  LCD_BACKLIGHT_ENABLE \
 | 
			
		||||
  MACROS_ENABLED \
 | 
			
		||||
  PS2_ENABLE \
 | 
			
		||||
  PS2_MOUSE_ENABLE \
 | 
			
		||||
  PS2_DRIVER \
 | 
			
		||||
  RAW_ENABLE \
 | 
			
		||||
  SWAP_HANDS_ENABLE \
 | 
			
		||||
  WATCHDOG_ENABLE \
 | 
			
		||||
  ERGOINU \
 | 
			
		||||
  NO_USB_STARTUP_CHECK \
 | 
			
		||||
  DISABLE_PROMICRO_LEDs \
 | 
			
		||||
  MITOSIS_DATAGROK_BOTTOMSPACE \
 | 
			
		||||
  MITOSIS_DATAGROK_SLOWUART \
 | 
			
		||||
  RGB_MATRIX_KEYPRESSES \
 | 
			
		||||
  LED_MIRRORED \
 | 
			
		||||
  RGBLIGHT_FULL_POWER \
 | 
			
		||||
  LTO_ENABLE \
 | 
			
		||||
  PROGRAMMABLE_BUTTON_ENABLE \
 | 
			
		||||
  SECURE_ENABLE \
 | 
			
		||||
  CAPS_WORD_ENABLE \
 | 
			
		||||
  AUTOCORRECT_ENABLE \
 | 
			
		||||
  TRI_LAYER_ENABLE \
 | 
			
		||||
  REPEAT_KEY_ENABLE
 | 
			
		||||
 | 
			
		||||
define NAME_ECHO
 | 
			
		||||
       @printf "  %-30s = %-16s # %s\\n" "$1" "$($1)" "$(origin $1)"
 | 
			
		||||
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
define YAML_NAME_ECHO
 | 
			
		||||
	@echo '  $1 : "$(strip $($1))"'
 | 
			
		||||
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
.PHONY: show_build_options0 show_build_options
 | 
			
		||||
show_build_options0:
 | 
			
		||||
	@echo " KEYBOARD        = $(KEYBOARD)"
 | 
			
		||||
	@echo " KEYMAP          = $(KEYMAP)"
 | 
			
		||||
	@echo " MCU             = $(MCU)"
 | 
			
		||||
	@echo " MCU_SERIES      = $(MCU_SERIES)"
 | 
			
		||||
	@echo " PLATFORM        = $(PLATFORM)"
 | 
			
		||||
	@echo " BOOTLOADER      = $(BOOTLOADER)"
 | 
			
		||||
	@echo " FIRMWARE_FORMAT = $(FIRMWARE_FORMAT)"
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build Options:"
 | 
			
		||||
	$(foreach A_OPTION_NAME,$(sort $(BUILD_OPTION_NAMES)),\
 | 
			
		||||
		$(call NAME_ECHO,$(A_OPTION_NAME)))
 | 
			
		||||
 | 
			
		||||
show_build_options: show_build_options0
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "If you want to know more, please try 'show_all_features' or 'show_full_features'"
 | 
			
		||||
	@echo
 | 
			
		||||
 | 
			
		||||
.PHONY: show_all_features
 | 
			
		||||
show_all_features: show_build_options0
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Hardware Options:"
 | 
			
		||||
	$(foreach A_OPTION_NAME,$(sort $(HARDWARE_OPTION_NAMES)),\
 | 
			
		||||
		$(if $($(A_OPTION_NAME)),$(call NAME_ECHO,$(A_OPTION_NAME))))
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Other Options:"
 | 
			
		||||
	$(foreach A_OPTION_NAME,$(sort $(OTHER_OPTION_NAMES)),\
 | 
			
		||||
		$(if $($(A_OPTION_NAME)),$(call NAME_ECHO,$(A_OPTION_NAME))))
 | 
			
		||||
 | 
			
		||||
.PHONY: show_full_features
 | 
			
		||||
show_full_features: show_build_options0
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Hardware Options:"
 | 
			
		||||
	$(foreach A_OPTION_NAME,$(sort $(HARDWARE_OPTION_NAMES)),\
 | 
			
		||||
		$(call NAME_ECHO,$(A_OPTION_NAME)))
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Other Options:"
 | 
			
		||||
	$(foreach A_OPTION_NAME,$(sort $(OTHER_OPTION_NAMES)),\
 | 
			
		||||
		$(call NAME_ECHO,$(A_OPTION_NAME)))
 | 
			
		||||
 | 
			
		||||
.PHONY: yaml_build_options
 | 
			
		||||
yaml_build_options:
 | 
			
		||||
	@echo '- KEYBOARD : "$(KEYBOARD)"'
 | 
			
		||||
	@echo '  KEYMAP : "$(KEYMAP)"'
 | 
			
		||||
	@echo '  MCU : "$(MCU)"'
 | 
			
		||||
	@echo '  MCU_SERIES : "$(MCU_SERIES)"'
 | 
			
		||||
	@echo '  PLATFORM : "$(PLATFORM)"'
 | 
			
		||||
	@echo '  FIRMWARE_FORMAT : "$(FIRMWARE_FORMAT)"'
 | 
			
		||||
	$(foreach A_OPTION_NAME,$(sort $(BUILD_OPTION_NAMES)),\
 | 
			
		||||
		$(call YAML_NAME_ECHO,$(A_OPTION_NAME)))
 | 
			
		||||
	$(foreach A_OPTION_NAME,$(sort $(HARDWARE_OPTION_NAMES)),\
 | 
			
		||||
		$(if $($(A_OPTION_NAME)),$(call YAML_NAME_ECHO,$(A_OPTION_NAME))))
 | 
			
		||||
	$(foreach A_OPTION_NAME,$(sort $(OTHER_OPTION_NAMES)),\
 | 
			
		||||
		$(if $($(A_OPTION_NAME)),$(call YAML_NAME_ECHO,$(A_OPTION_NAME))))
 | 
			
		||||
| 
						 | 
				
			
			@ -1,11 +0,0 @@
 | 
			
		|||
# Helper to determine if a compiler option is supported
 | 
			
		||||
# Args:
 | 
			
		||||
#   $(1) = option to test, if successful will be output
 | 
			
		||||
#   $(2) = option to use if $(1) is not supported
 | 
			
		||||
#   $(3) = additional arguments to pass to the compiler during the test, but aren't contained in the output
 | 
			
		||||
cc-option = $(shell \
 | 
			
		||||
	if { echo 'int main(){return 0;}' | $(CC) $(1) $(3) -o /dev/null -x c /dev/null >/dev/null 2>&1; }; \
 | 
			
		||||
	then echo "$(1)"; else echo "$(2)"; fi)
 | 
			
		||||
 | 
			
		||||
# Helper to pass comma character to make functions (use with `$(,)` to pass in `$(call ...)` arguments)
 | 
			
		||||
, := ,
 | 
			
		||||
| 
						 | 
				
			
			@ -1,22 +0,0 @@
 | 
			
		|||
TEST_LIST = $(sort $(patsubst %/test.mk,%, $(shell find $(ROOT_DIR)tests -type f -name test.mk)))
 | 
			
		||||
FULL_TESTS := $(notdir $(TEST_LIST))
 | 
			
		||||
 | 
			
		||||
include $(QUANTUM_PATH)/debounce/tests/testlist.mk
 | 
			
		||||
include $(QUANTUM_PATH)/encoder/tests/testlist.mk
 | 
			
		||||
include $(QUANTUM_PATH)/os_detection/tests/testlist.mk
 | 
			
		||||
include $(QUANTUM_PATH)/sequencer/tests/testlist.mk
 | 
			
		||||
include $(QUANTUM_PATH)/wear_leveling/tests/testlist.mk
 | 
			
		||||
include $(PLATFORM_PATH)/test/testlist.mk
 | 
			
		||||
 | 
			
		||||
define VALIDATE_TEST_LIST
 | 
			
		||||
    ifneq ($1,)
 | 
			
		||||
        ifeq ($$(findstring -,$1),-)
 | 
			
		||||
            $$(call CATASTROPHIC_ERROR,Invalid test name,Test names can't contain '-', but '$1' does.)
 | 
			
		||||
        else
 | 
			
		||||
            $$(eval $$(call VALIDATE_TEST_LIST,$$(firstword $2),$$(wordlist 2,9999,$2)))
 | 
			
		||||
        endif
 | 
			
		||||
    endif
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$(eval $(call VALIDATE_TEST_LIST,$(firstword $(TEST_LIST)),$(wordlist 2,9999,$(TEST_LIST))))
 | 
			
		||||
							
								
								
									
										24
									
								
								common.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								common.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
include message.mk
 | 
			
		||||
 | 
			
		||||
# Directory common source files exist
 | 
			
		||||
TOP_DIR = .
 | 
			
		||||
TMK_DIR = tmk_core
 | 
			
		||||
TMK_PATH = $(TOP_DIR)/$(TMK_DIR)
 | 
			
		||||
LIB_PATH = $(TOP_DIR)/lib
 | 
			
		||||
 | 
			
		||||
QUANTUM_DIR = quantum
 | 
			
		||||
QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR)
 | 
			
		||||
 | 
			
		||||
DRIVER_DIR = drivers
 | 
			
		||||
DRIVER_PATH = $(TOP_DIR)/$(DRIVER_DIR)
 | 
			
		||||
 | 
			
		||||
BUILD_DIR := $(TOP_DIR)/.build
 | 
			
		||||
 | 
			
		||||
COMMON_VPATH := $(TOP_DIR)
 | 
			
		||||
COMMON_VPATH += $(TMK_PATH)
 | 
			
		||||
COMMON_VPATH += $(QUANTUM_PATH)
 | 
			
		||||
COMMON_VPATH += $(QUANTUM_PATH)/keymap_extras
 | 
			
		||||
COMMON_VPATH += $(QUANTUM_PATH)/audio
 | 
			
		||||
COMMON_VPATH += $(QUANTUM_PATH)/process_keycode
 | 
			
		||||
COMMON_VPATH += $(QUANTUM_PATH)/api
 | 
			
		||||
COMMON_VPATH += $(DRIVER_PATH)
 | 
			
		||||
							
								
								
									
										188
									
								
								common_features.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										188
									
								
								common_features.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,188 @@
 | 
			
		|||
# Copyright 2017 Fred Sundvik
 | 
			
		||||
#
 | 
			
		||||
# This program is free software: you can redistribute it and/or modify
 | 
			
		||||
# it under the terms of the GNU General Public License as published by
 | 
			
		||||
# the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
# (at your option) any later version.
 | 
			
		||||
#
 | 
			
		||||
# This program is distributed in the hope that it will be useful,
 | 
			
		||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
# GNU General Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
# You should have received a copy of the GNU General Public License
 | 
			
		||||
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
SERIAL_DIR := $(QUANTUM_DIR)/serial_link
 | 
			
		||||
SERIAL_PATH := $(QUANTUM_PATH)/serial_link
 | 
			
		||||
SERIAL_SRC := $(wildcard $(SERIAL_PATH)/protocol/*.c)
 | 
			
		||||
SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
 | 
			
		||||
SERIAL_DEFS += -DSERIAL_LINK_ENABLE
 | 
			
		||||
COMMON_VPATH += $(SERIAL_PATH)
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(API_SYSEX_ENABLE)), yes)
 | 
			
		||||
    OPT_DEFS += -DAPI_SYSEX_ENABLE
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/api/api_sysex.c
 | 
			
		||||
    OPT_DEFS += -DAPI_ENABLE
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/api.c
 | 
			
		||||
    MIDI_ENABLE=yes
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
MUSIC_ENABLE := 0
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(AUDIO_ENABLE)), yes)
 | 
			
		||||
    OPT_DEFS += -DAUDIO_ENABLE
 | 
			
		||||
    MUSIC_ENABLE := 1
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/audio/audio.c
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/audio/voices.c
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/audio/luts.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(MIDI_ENABLE)), yes)
 | 
			
		||||
    OPT_DEFS += -DMIDI_ENABLE
 | 
			
		||||
    MUSIC_ENABLE := 1
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(MUSIC_ENABLE), 1)
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(COMBO_ENABLE)), yes)
 | 
			
		||||
    OPT_DEFS += -DCOMBO_ENABLE
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/process_keycode/process_combo.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(STENO_ENABLE)), yes)
 | 
			
		||||
    OPT_DEFS += -DSTENO_ENABLE
 | 
			
		||||
	VIRTSER_ENABLE := yes
 | 
			
		||||
	SRC += $(QUANTUM_DIR)/process_keycode/process_steno.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(VIRTSER_ENABLE)), yes)
 | 
			
		||||
    OPT_DEFS += -DVIRTSER_ENABLE
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(FAUXCLICKY_ENABLE)), yes)
 | 
			
		||||
    OPT_DEFS += -DFAUXCLICKY_ENABLE
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/fauxclicky.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes)
 | 
			
		||||
	OPT_DEFS += -DPOINTING_DEVICE_ENABLE
 | 
			
		||||
	OPT_DEFS += -DMOUSE_ENABLE
 | 
			
		||||
	SRC += $(QUANTUM_DIR)/pointing_device.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(UCIS_ENABLE)), yes)
 | 
			
		||||
    OPT_DEFS += -DUCIS_ENABLE
 | 
			
		||||
    UNICODE_COMMON = yes
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/process_keycode/process_ucis.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
 | 
			
		||||
    OPT_DEFS += -DUNICODEMAP_ENABLE
 | 
			
		||||
    UNICODE_COMMON = yes
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/process_keycode/process_unicodemap.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(UNICODE_ENABLE)), yes)
 | 
			
		||||
    OPT_DEFS += -DUNICODE_ENABLE
 | 
			
		||||
    UNICODE_COMMON = yes
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(UNICODE_COMMON)), yes)
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/process_keycode/process_unicode_common.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
 | 
			
		||||
    OPT_DEFS += -DRGBLIGHT_ENABLE
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/rgblight.c
 | 
			
		||||
    CIE1931_CURVE = yes
 | 
			
		||||
    LED_BREATHING_TABLE = yes
 | 
			
		||||
    ifeq ($(strip $(RGBLIGHT_CUSTOM_DRIVER)), yes)
 | 
			
		||||
        OPT_DEFS += -DRGBLIGHT_CUSTOM_DRIVER
 | 
			
		||||
    else
 | 
			
		||||
	    SRC += ws2812.c
 | 
			
		||||
    endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
 | 
			
		||||
    OPT_DEFS += -DTAP_DANCE_ENABLE
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(KEY_LOCK_ENABLE)), yes)
 | 
			
		||||
    OPT_DEFS += -DKEY_LOCK_ENABLE
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/process_keycode/process_key_lock.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(PRINTING_ENABLE)), yes)
 | 
			
		||||
    OPT_DEFS += -DPRINTING_ENABLE
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/process_keycode/process_printer.c
 | 
			
		||||
    SRC += $(TMK_DIR)/protocol/serial_uart.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(AUTO_SHIFT_ENABLE)), yes)
 | 
			
		||||
    OPT_DEFS += -DAUTO_SHIFT_ENABLE
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/process_keycode/process_auto_shift.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
 | 
			
		||||
    SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
 | 
			
		||||
    OPT_DEFS += $(SERIAL_DEFS)
 | 
			
		||||
    VAPTH += $(SERIAL_PATH)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifneq ($(strip $(VARIABLE_TRACE)),)
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/variable_trace.c
 | 
			
		||||
    OPT_DEFS += -DNUM_TRACED_VARIABLES=$(strip $(VARIABLE_TRACE))
 | 
			
		||||
ifneq ($(strip $(MAX_VARIABLE_TRACE_SIZE)),)
 | 
			
		||||
    OPT_DEFS += -DMAX_VARIABLE_TRACE_SIZE=$(strip $(MAX_VARIABLE_TRACE_SIZE))
 | 
			
		||||
endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(LCD_ENABLE)), yes)
 | 
			
		||||
    CIE1931_CURVE = yes
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
 | 
			
		||||
    ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
 | 
			
		||||
        CIE1931_CURVE = yes
 | 
			
		||||
    endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(CIE1931_CURVE)), yes)
 | 
			
		||||
    OPT_DEFS += -DUSE_CIE1931_CURVE
 | 
			
		||||
    LED_TABLES = yes
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(LED_BREATHING_TABLE)), yes)
 | 
			
		||||
    OPT_DEFS += -DUSE_LED_BREATHING_TABLE
 | 
			
		||||
    LED_TABLES = yes
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(LED_TABLES)), yes)
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/led_tables.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(TERMINAL_ENABLE)), yes)
 | 
			
		||||
    SRC += $(QUANTUM_DIR)/process_keycode/process_terminal.c
 | 
			
		||||
    OPT_DEFS += -DTERMINAL_ENABLE
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(USB_HID_ENABLE)), yes)
 | 
			
		||||
    include $(TMK_DIR)/protocol/usb_hid.mk
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
QUANTUM_SRC:= \
 | 
			
		||||
    $(QUANTUM_DIR)/quantum.c \
 | 
			
		||||
    $(QUANTUM_DIR)/keymap_common.c \
 | 
			
		||||
    $(QUANTUM_DIR)/keycode_config.c \
 | 
			
		||||
    $(QUANTUM_DIR)/process_keycode/process_leader.c
 | 
			
		||||
 | 
			
		||||
ifndef CUSTOM_MATRIX
 | 
			
		||||
    QUANTUM_SRC += $(QUANTUM_DIR)/matrix.c
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,375 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ² │ & │ é │ " │ ' │ ( │ § │ è │ ! │ ç │ à │ ) │ - │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ A │ Z │ E │ R │ T │ Y │ U │ I │ O │ P │ ^ │ $ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ Q │ S │ D │ F │ G │ H │ J │ K │ L │ M │ ù │ µ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ < │ W │ X │ C │ V │ B │ N │ , │ ; │ : │ = │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "BE_SUP2",
 | 
			
		||||
            "label": "²",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "BE_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "BE_EACU",
 | 
			
		||||
            "label": "é",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "BE_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "BE_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "BE_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "BE_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "BE_EGRV",
 | 
			
		||||
            "label": "è",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "BE_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "BE_CCED",
 | 
			
		||||
            "label": "ç",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "BE_AGRV",
 | 
			
		||||
            "label": "à",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "BE_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "BE_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "BE_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "BE_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "BE_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "BE_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "BE_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "BE_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "BE_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "BE_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "BE_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "BE_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "BE_DCIR",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "BE_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "BE_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "BE_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "BE_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "BE_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "BE_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "BE_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "BE_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "BE_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "BE_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "BE_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "BE_UGRV",
 | 
			
		||||
            "label": "ù",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "BE_MICR",
 | 
			
		||||
            "label": "µ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "BE_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "BE_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "BE_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "BE_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "BE_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "BE_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "BE_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "BE_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "BE_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "BE_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "BE_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ³ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ° │ _ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │ ¨ │ * │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │ % │ £ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ > │   │   │   │   │   │   │ ? │ . │ / │ + │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(BE_SUP2)": {
 | 
			
		||||
            "key": "BE_SUP3",
 | 
			
		||||
            "label": "³",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_AMPR)": {
 | 
			
		||||
            "key": "BE_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_EACU)": {
 | 
			
		||||
            "key": "BE_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_DQUO)": {
 | 
			
		||||
            "key": "BE_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_QUOT)": {
 | 
			
		||||
            "key": "BE_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_LPRN)": {
 | 
			
		||||
            "key": "BE_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_SECT)": {
 | 
			
		||||
            "key": "BE_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_EGRV)": {
 | 
			
		||||
            "key": "BE_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_EXLM)": {
 | 
			
		||||
            "key": "BE_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_CCED)": {
 | 
			
		||||
            "key": "BE_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_AGRV)": {
 | 
			
		||||
            "key": "BE_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_RPRN)": {
 | 
			
		||||
            "key": "BE_DEG",
 | 
			
		||||
            "label": "°",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_MINS)": {
 | 
			
		||||
            "key": "BE_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_DCIR)": {
 | 
			
		||||
            "key": "BE_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_DLR)": {
 | 
			
		||||
            "key": "BE_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_UGRV)": {
 | 
			
		||||
            "key": "BE_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_MICR)": {
 | 
			
		||||
            "key": "BE_PND",
 | 
			
		||||
            "label": "£",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_LABK)": {
 | 
			
		||||
            "key": "BE_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_COMM)": {
 | 
			
		||||
            "key": "BE_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_SCLN)": {
 | 
			
		||||
            "key": "BE_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_COLN)": {
 | 
			
		||||
            "key": "BE_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BE_EQL)": {
 | 
			
		||||
            "key": "BE_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │   │ | │ @ │ # │   │   │ ^ │   │   │ { │ } │   │   │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │ € │   │   │   │   │   │   │   │ [ │ ] │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │ ´ │ ` │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ \ │   │   │   │   │   │   │   │   │   │ ~ │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(BE_AMPR)": {
 | 
			
		||||
            "key": "BE_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BE_EACU)": {
 | 
			
		||||
            "key": "BE_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BE_DQUO)": {
 | 
			
		||||
            "key": "BE_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BE_SECT)": {
 | 
			
		||||
            "key": "BE_CIRC",
 | 
			
		||||
            "label": "^",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BE_CCED)": {
 | 
			
		||||
            "key": "BE_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BE_AGRV)": {
 | 
			
		||||
            "key": "BE_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BE_E)": {
 | 
			
		||||
            "key": "BE_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BE_DCIR)": {
 | 
			
		||||
            "key": "BE_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BE_DLR)": {
 | 
			
		||||
            "key": "BE_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BE_UGRV)": {
 | 
			
		||||
            "key": "BE_ACUT",
 | 
			
		||||
            "label": "´ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BE_MICR)": {
 | 
			
		||||
            "key": "BE_GRV",
 | 
			
		||||
            "label": "` (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BE_LABK)": {
 | 
			
		||||
            "key": "BE_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BE_EQL)": {
 | 
			
		||||
            "key": "BE_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,632 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ $ │ " │ « │ » │ ( │ ) │ @ │ + │ - │ / │ * │ = │ % │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ B │ É │ P │ O │ È │ ^ │ V │ D │ L │ J │ Z │ W │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ A │ U │ I │ E │ , │ C │ T │ S │ R │ N │ M │ Ç │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ Ê │ À │ Y │ X │ . │ K │ ' │ Q │ G │ H │ F │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "BP_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "BP_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "BP_LDAQ",
 | 
			
		||||
            "label": "«",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "BP_RDAQ",
 | 
			
		||||
            "label": "»",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "BP_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "BP_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "BP_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "BP_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "BP_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "BP_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "BP_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "BP_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "BP_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "BP_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "BP_EACU",
 | 
			
		||||
            "label": "É",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "BP_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "BP_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "BP_EGRV",
 | 
			
		||||
            "label": "È",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "BP_DCIR",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "BP_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "BP_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "BP_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "BP_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "BP_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "BP_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "BP_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "BP_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "BP_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "BP_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "BP_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "BP_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "BP_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "BP_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "BP_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "BP_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "BP_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_BSLS": {
 | 
			
		||||
            "key": "BP_CCED",
 | 
			
		||||
            "label": "Ç",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "BP_ECIR",
 | 
			
		||||
            "label": "Ê",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "BP_AGRV",
 | 
			
		||||
            "label": "À",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "BP_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "BP_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "BP_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "BP_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "BP_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "BP_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "BP_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "BP_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "BP_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ # │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ° │ ` │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │ ! │   │   │   │   │   │   │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │ ; │   │   │   │   │   │   │   │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │   │   │   │ : │   │ ? │   │   │   │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(BP_DLR)": {
 | 
			
		||||
            "key": "BP_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BP_DQUO)": {
 | 
			
		||||
            "key": "BP_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BP_LDAQ)": {
 | 
			
		||||
            "key": "BP_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BP_RDAQ)": {
 | 
			
		||||
            "key": "BP_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BP_LPRN)": {
 | 
			
		||||
            "key": "BP_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BP_RPRN)": {
 | 
			
		||||
            "key": "BP_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BP_AT)": {
 | 
			
		||||
            "key": "BP_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BP_PLUS)": {
 | 
			
		||||
            "key": "BP_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BP_MINS)": {
 | 
			
		||||
            "key": "BP_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BP_SLSH)": {
 | 
			
		||||
            "key": "BP_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BP_ASTR)": {
 | 
			
		||||
            "key": "BP_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BP_EQL)": {
 | 
			
		||||
            "key": "BP_DEG",
 | 
			
		||||
            "label": "°",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BP_PERC)": {
 | 
			
		||||
            "key": "BP_GRV",
 | 
			
		||||
            "label": "`",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BP_DCIR)": {
 | 
			
		||||
            "key": "BP_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BP_COMM)": {
 | 
			
		||||
            "key": "BP_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BP_DOT)": {
 | 
			
		||||
            "key": "BP_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BP_QUOT)": {
 | 
			
		||||
            "key": "BP_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(KC_SPC)": {
 | 
			
		||||
            "key": "BP_NBSP",
 | 
			
		||||
            "label": "(non-breaking space)",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ – │ — │ < │ > │ [ │ ] │ ^ │ ± │ − │ ÷ │ × │ ≠ │ ‰ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ | │ ´ │ & │ Œ │ ` │ ¡ │ ˇ │ Ð │ / │ IJ │ Ə │ ˘ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ Æ │ Ù │ ¨ │ € │   │ © │ Þ │ ẞ │ ® │ ~ │ ¯ │ ¸ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │ \ │ { │ } │ … │ ~ │ ¿ │ ° │   │ † │ ˛ │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │           _            │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(BP_DLR)": {
 | 
			
		||||
            "key": "BP_NDSH",
 | 
			
		||||
            "label": "–",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_DQUO)": {
 | 
			
		||||
            "key": "BP_MDSH",
 | 
			
		||||
            "label": "—",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_LDAQ)": {
 | 
			
		||||
            "key": "BP_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_RDAQ)": {
 | 
			
		||||
            "key": "BP_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_LPRN)": {
 | 
			
		||||
            "key": "BP_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_RPRN)": {
 | 
			
		||||
            "key": "BP_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_AT)": {
 | 
			
		||||
            "key": "BP_CIRC",
 | 
			
		||||
            "label": "^",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_PLUS)": {
 | 
			
		||||
            "key": "BP_PLMN",
 | 
			
		||||
            "label": "±",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_MINS)": {
 | 
			
		||||
            "key": "BP_MMNS",
 | 
			
		||||
            "label": "−",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_SLSH)": {
 | 
			
		||||
            "key": "BP_DIV",
 | 
			
		||||
            "label": "÷",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_ASTR)": {
 | 
			
		||||
            "key": "BP_MUL",
 | 
			
		||||
            "label": "×",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_EQL)": {
 | 
			
		||||
            "key": "BP_NEQL",
 | 
			
		||||
            "label": "≠",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_PERC)": {
 | 
			
		||||
            "key": "BP_PERM",
 | 
			
		||||
            "label": "‰",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_B)": {
 | 
			
		||||
            "key": "BP_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_EACU)": {
 | 
			
		||||
            "key": "BP_ACUT",
 | 
			
		||||
            "label": "´ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_P)": {
 | 
			
		||||
            "key": "BP_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_O)": {
 | 
			
		||||
            "key": "BP_OE",
 | 
			
		||||
            "label": "Œ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_EGRV)": {
 | 
			
		||||
            "key": "BP_DGRV",
 | 
			
		||||
            "label": "` (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_DCIR)": {
 | 
			
		||||
            "key": "BP_IEXL",
 | 
			
		||||
            "label": "¡",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_V)": {
 | 
			
		||||
            "key": "BP_CARN",
 | 
			
		||||
            "label": "ˇ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_D)": {
 | 
			
		||||
            "key": "BP_ETH",
 | 
			
		||||
            "label": "Ð",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_L)": {
 | 
			
		||||
            "key": "BP_DSLS",
 | 
			
		||||
            "label": "/ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_J)": {
 | 
			
		||||
            "key": "BP_IJ",
 | 
			
		||||
            "label": "IJ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_Z)": {
 | 
			
		||||
            "key": "BP_SCHW",
 | 
			
		||||
            "label": "Ə",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_W)": {
 | 
			
		||||
            "key": "BP_BREV",
 | 
			
		||||
            "label": "˘ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_A)": {
 | 
			
		||||
            "key": "BP_AE",
 | 
			
		||||
            "label": "Æ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_U)": {
 | 
			
		||||
            "key": "BP_UGRV",
 | 
			
		||||
            "label": "Ù",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_I)": {
 | 
			
		||||
            "key": "BP_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_E)": {
 | 
			
		||||
            "key": "BP_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_C)": {
 | 
			
		||||
            "key": "BP_COPY",
 | 
			
		||||
            "label": "©",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_T)": {
 | 
			
		||||
            "key": "BP_THRN",
 | 
			
		||||
            "label": "Þ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_S)": {
 | 
			
		||||
            "key": "BP_SS",
 | 
			
		||||
            "label": "ẞ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_R)": {
 | 
			
		||||
            "key": "BP_REGD",
 | 
			
		||||
            "label": "®",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_N)": {
 | 
			
		||||
            "key": "BP_DTIL",
 | 
			
		||||
            "label": "~ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_M)": {
 | 
			
		||||
            "key": "BP_MACR",
 | 
			
		||||
            "label": "¯ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_CCED)": {
 | 
			
		||||
            "key": "BP_CEDL",
 | 
			
		||||
            "label": "¸ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_AGRV)": {
 | 
			
		||||
            "key": "BP_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_Y)": {
 | 
			
		||||
            "key": "BP_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_X)": {
 | 
			
		||||
            "key": "BP_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_DOT)": {
 | 
			
		||||
            "key": "BP_ELLP",
 | 
			
		||||
            "label": "…",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_K)": {
 | 
			
		||||
            "key": "BP_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_QUES)": {
 | 
			
		||||
            "key": "BP_IQUE",
 | 
			
		||||
            "label": "¿",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_Q)": {
 | 
			
		||||
            "key": "BP_RNGA",
 | 
			
		||||
            "label": "° (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_G)": {
 | 
			
		||||
            "key": "BP_DGRK",
 | 
			
		||||
            "label": "µ (dead Greek key)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_H)": {
 | 
			
		||||
            "key": "BP_DAGG",
 | 
			
		||||
            "label": "†",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BP_F)": {
 | 
			
		||||
            "key": "BP_OGON",
 | 
			
		||||
            "label": "˛ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(KC_SPC)": {
 | 
			
		||||
            "key": "BP_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
/* Shift+AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ¶ │ „ │ “ │ ” │ ≤ │ ≥ │   │ ¬ │ ¼ │ ½ │ ¾ │ ′ │ ″ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ ¦ │ ˝ │ § │   │   │   │   │   │   │   │   │   │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │ ˙ │ ¤ │ ̛  │ ſ │   │   │ ™ │   │ º │ , │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │   │ ‘ │ ’ │ · │ ⌨ │ ̉  │ ̣  │   │ ‡ │ ª │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(ALGR(BP_DLR))": {
 | 
			
		||||
            "key": "BP_PARA",
 | 
			
		||||
            "label": "¶",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_DQUO))": {
 | 
			
		||||
            "key": "BP_DLQU",
 | 
			
		||||
            "label": "„",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_LDAQ))": {
 | 
			
		||||
            "key": "BP_LDQU",
 | 
			
		||||
            "label": "“",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_RDAQ))": {
 | 
			
		||||
            "key": "BP_RDQU",
 | 
			
		||||
            "label": "”",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_LPRN))": {
 | 
			
		||||
            "key": "BP_LEQL",
 | 
			
		||||
            "label": "≤",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_RPRN))": {
 | 
			
		||||
            "key": "BP_GEQL",
 | 
			
		||||
            "label": "≥",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_PLUS))": {
 | 
			
		||||
            "key": "BP_NOT",
 | 
			
		||||
            "label": "¬",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_MINS))": {
 | 
			
		||||
            "key": "BP_QRTR",
 | 
			
		||||
            "label": "¼",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_SLSH))": {
 | 
			
		||||
            "key": "BP_HALF",
 | 
			
		||||
            "label": "½",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_ASTR))": {
 | 
			
		||||
            "key": "BP_TQTR",
 | 
			
		||||
            "label": "¾",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_EQL))": {
 | 
			
		||||
            "key": "BP_PRIM",
 | 
			
		||||
            "label": "′",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_PERC))": {
 | 
			
		||||
            "key": "BP_DPRM",
 | 
			
		||||
            "label": "″",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_B))": {
 | 
			
		||||
            "key": "BP_BRKP",
 | 
			
		||||
            "label": "¦",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_EACU))": {
 | 
			
		||||
            "key": "BP_DACU",
 | 
			
		||||
            "label": "˝ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_P))": {
 | 
			
		||||
            "key": "BP_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_I))": {
 | 
			
		||||
            "key": "BP_DOTA",
 | 
			
		||||
            "label": "˙ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_E))": {
 | 
			
		||||
            "key": "BP_CURR",
 | 
			
		||||
            "label": "¤ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_COMM))": {
 | 
			
		||||
            "key": "BP_HORN",
 | 
			
		||||
            "label": "̛ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_C))": {
 | 
			
		||||
            "key": "BP_LNGS",
 | 
			
		||||
            "label": "ſ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_R))": {
 | 
			
		||||
            "key": "BP_TM",
 | 
			
		||||
            "label": "™",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_M))": {
 | 
			
		||||
            "key": "BP_MORD",
 | 
			
		||||
            "label": "º",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_CCED))": {
 | 
			
		||||
            "key": "BP_DCMM",
 | 
			
		||||
            "label": ", (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_Y))": {
 | 
			
		||||
            "key": "BP_LSQU",
 | 
			
		||||
            "label": "‘",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_X))": {
 | 
			
		||||
            "key": "BP_RSQU",
 | 
			
		||||
            "label": "’",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_DOT))": {
 | 
			
		||||
            "key": "BP_MDDT",
 | 
			
		||||
            "label": "·",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_K))": {
 | 
			
		||||
            "key": "BP_KEYB",
 | 
			
		||||
            "label": "⌨",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_QUOT))": {
 | 
			
		||||
            "key": "BP_HOKA",
 | 
			
		||||
            "label": "̉ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_Q))": {
 | 
			
		||||
            "key": "BP_DOTB",
 | 
			
		||||
            "label": "̣ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_H))": {
 | 
			
		||||
            "key": "BP_DDAG",
 | 
			
		||||
            "label": "‡",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(BP_F))": {
 | 
			
		||||
            "key": "BP_FORD",
 | 
			
		||||
            "label": "ª",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(KC_SPC))": {
 | 
			
		||||
            "key": "BP_NNBS",
 | 
			
		||||
            "label": "(narrow non-breaking space)",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,379 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ' │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ ´ │ [ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ç │ ~ │ ] │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
 | 
			
		||||
 * │    │ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ ; │ / │      │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬──┴─┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "BR_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "BR_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "BR_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "BR_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "BR_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "BR_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "BR_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "BR_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "BR_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "BR_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "BR_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "BR_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "BR_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "BR_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "BR_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "BR_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "BR_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "BR_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "BR_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "BR_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "BR_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "BR_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "BR_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "BR_ACUT",
 | 
			
		||||
            "label": "´ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "BR_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "BR_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "BR_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "BR_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "BR_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "BR_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "BR_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "BR_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "BR_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "BR_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "BR_CCED",
 | 
			
		||||
            "label": "Ç",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "BR_TILD",
 | 
			
		||||
            "label": "~ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_BSLS": {
 | 
			
		||||
            "key": "BR_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "BR_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "BR_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "BR_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "BR_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "BR_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "BR_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "BR_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "BR_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "BR_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "BR_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "BR_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_INT1": {
 | 
			
		||||
            "key": "BR_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_PCMM": {
 | 
			
		||||
            "key": "BR_PDOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_PDOT": {
 | 
			
		||||
            "key": "BR_PCMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ " │ ! │ @ │ # │ $ │ % │ ¨ │ & │ * │ ( │ ) │ _ │ + │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │ ` │ { │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │ ^ │ } │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
 | 
			
		||||
 * │    │ | │   │   │   │   │   │   │   │ < │ > │ : │ ? │      │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬──┴─┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(BR_QUOT)": {
 | 
			
		||||
            "key": "BR_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_1)": {
 | 
			
		||||
            "key": "BR_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_2)": {
 | 
			
		||||
            "key": "BR_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_3)": {
 | 
			
		||||
            "key": "BR_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_4)": {
 | 
			
		||||
            "key": "BR_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_5)": {
 | 
			
		||||
            "key": "BR_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_6)": {
 | 
			
		||||
            "key": "BR_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_7)": {
 | 
			
		||||
            "key": "BR_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_8)": {
 | 
			
		||||
            "key": "BR_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_9)": {
 | 
			
		||||
            "key": "BR_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_0)": {
 | 
			
		||||
            "key": "BR_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_MINS)": {
 | 
			
		||||
            "key": "BR_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_EQL)": {
 | 
			
		||||
            "key": "BR_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_ACUT)": {
 | 
			
		||||
            "key": "BR_GRV",
 | 
			
		||||
            "label": "` (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_LBRC)": {
 | 
			
		||||
            "key": "BR_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_TILD)": {
 | 
			
		||||
            "key": "BR_CIRC",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_RBRC)": {
 | 
			
		||||
            "key": "BR_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_BSLS)": {
 | 
			
		||||
            "key": "BR_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_COMM)": {
 | 
			
		||||
            "key": "BR_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_DOT)": {
 | 
			
		||||
            "key": "BR_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_SCLN)": {
 | 
			
		||||
            "key": "BR_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(BR_SLSH)": {
 | 
			
		||||
            "key": "BR_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │   │ ¹ │ ² │ ³ │ £ │ ¢ │ ¬ │   │   │   │   │   │ § │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │ ° │   │   │   │   │   │   │   │   │ ª │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │   │ º │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
 | 
			
		||||
 * │    │   │   │   │ ₢ │   │   │   │   │   │   │   │   │      │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬──┴─┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(BR_1)": {
 | 
			
		||||
            "key": "BR_SUP1",
 | 
			
		||||
            "label": "¹",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BR_2)": {
 | 
			
		||||
            "key": "BR_SUP2",
 | 
			
		||||
            "label": "²",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BR_3)": {
 | 
			
		||||
            "key": "BR_SUP3",
 | 
			
		||||
            "label": "³",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BR_4)": {
 | 
			
		||||
            "key": "BR_PND",
 | 
			
		||||
            "label": "£",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BR_5)": {
 | 
			
		||||
            "key": "BR_CENT",
 | 
			
		||||
            "label": "¢",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BR_6)": {
 | 
			
		||||
            "key": "BR_NOT",
 | 
			
		||||
            "label": "¬",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BR_EQL)": {
 | 
			
		||||
            "key": "BR_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BR_E)": {
 | 
			
		||||
            "key": "BR_DEG",
 | 
			
		||||
            "label": "°",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BR_LBRC)": {
 | 
			
		||||
            "key": "BR_FORD",
 | 
			
		||||
            "label": "ª",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BR_RBRC)": {
 | 
			
		||||
            "key": "BR_MORD",
 | 
			
		||||
            "label": "º",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(BR_C)": {
 | 
			
		||||
            "key": "BR_CRUZ",
 | 
			
		||||
            "label": "₢",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,407 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ # │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ ^ │ ¸ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ` │ < │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ « │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ É │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "FR_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "FR_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "FR_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "FR_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "FR_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "FR_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "FR_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "FR_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "FR_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "FR_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "FR_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "FR_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "FR_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "FR_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "FR_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "FR_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "FR_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "FR_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "FR_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "FR_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "FR_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "FR_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "FR_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "FR_DCIR",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "FR_CEDL",
 | 
			
		||||
            "label": "¸ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "FR_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "FR_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "FR_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "FR_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "FR_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "FR_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "FR_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "FR_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "FR_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "FR_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "FR_DGRV",
 | 
			
		||||
            "label": "` (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "FR_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "FR_LDAQ",
 | 
			
		||||
            "label": "«",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "FR_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "FR_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "FR_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "FR_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "FR_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "FR_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "FR_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "FR_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "FR_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "FR_EACU",
 | 
			
		||||
            "label": "É",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ | │ ! │ " │ / │ $ │ % │ ? │ & │ * │ ( │ ) │ _ │ + │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │   │ ¨ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │ : │   │ > │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ » │   │   │   │   │   │   │   │ ' │   │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(FR_HASH)": {
 | 
			
		||||
            "key": "FR_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_1)": {
 | 
			
		||||
            "key": "FR_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_2)": {
 | 
			
		||||
            "key": "FR_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_3)": {
 | 
			
		||||
            "key": "FR_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_4)": {
 | 
			
		||||
            "key": "FR_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_5)": {
 | 
			
		||||
            "key": "FR_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_6)": {
 | 
			
		||||
            "key": "FR_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_7)": {
 | 
			
		||||
            "key": "FR_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_8)": {
 | 
			
		||||
            "key": "FR_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_9)": {
 | 
			
		||||
            "key": "FR_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_0)": {
 | 
			
		||||
            "key": "FR_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_MINS)": {
 | 
			
		||||
            "key": "FR_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_EQL)": {
 | 
			
		||||
            "key": "FR_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_CEDL)": {
 | 
			
		||||
            "key": "FR_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_SCLN)": {
 | 
			
		||||
            "key": "FR_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_LABK)": {
 | 
			
		||||
            "key": "FR_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_LDAQ)": {
 | 
			
		||||
            "key": "FR_RDAQ",
 | 
			
		||||
            "label": "»",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_COMM)": {
 | 
			
		||||
            "key": "FR_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ \ │ ± │ @ │ £ │ ¢ │ ¤ │ ¬ │ ¦ │ ² │ ³ │ ¼ │ ½ │ ¾ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │ § │ ¶ │ [ │ ] │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │ ~ │ { │ } │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ ° │   │   │   │   │   │   │ µ │ ¯ │ - │ ´ │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(FR_HASH)": {
 | 
			
		||||
            "key": "FR_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_1)": {
 | 
			
		||||
            "key": "FR_PLMN",
 | 
			
		||||
            "label": "±",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_2)": {
 | 
			
		||||
            "key": "FR_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_3)": {
 | 
			
		||||
            "key": "FR_PND",
 | 
			
		||||
            "label": "£",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_4)": {
 | 
			
		||||
            "key": "FR_CENT",
 | 
			
		||||
            "label": "¢",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_5)": {
 | 
			
		||||
            "key": "FR_CURR",
 | 
			
		||||
            "label": "¤",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_6)": {
 | 
			
		||||
            "key": "FR_NOT",
 | 
			
		||||
            "label": "¬",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_7)": {
 | 
			
		||||
            "key": "FR_BRKP",
 | 
			
		||||
            "label": "¦",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_8)": {
 | 
			
		||||
            "key": "FR_SUP2",
 | 
			
		||||
            "label": "²",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_9)": {
 | 
			
		||||
            "key": "FR_SUP3",
 | 
			
		||||
            "label": "³",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_0)": {
 | 
			
		||||
            "key": "FR_QRTR",
 | 
			
		||||
            "label": "¼",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_MINS)": {
 | 
			
		||||
            "key": "FR_HALF",
 | 
			
		||||
            "label": "½",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_EQL)": {
 | 
			
		||||
            "key": "FR_TQTR",
 | 
			
		||||
            "label": "¾",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_O)": {
 | 
			
		||||
            "key": "FR_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_P)": {
 | 
			
		||||
            "key": "FR_PARA",
 | 
			
		||||
            "label": "¶",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_DCIR)": {
 | 
			
		||||
            "key": "FR_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_CEDL)": {
 | 
			
		||||
            "key": "FR_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_SCLN)": {
 | 
			
		||||
            "key": "FR_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_DGRV)": {
 | 
			
		||||
            "key": "FR_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_LABK)": {
 | 
			
		||||
            "key": "FR_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_LDAQ)": {
 | 
			
		||||
            "key": "FR_DEG",
 | 
			
		||||
            "label": "°",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_M)": {
 | 
			
		||||
            "key": "FR_MICR",
 | 
			
		||||
            "label": "µ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_COMM)": {
 | 
			
		||||
            "key": "FR_MACR",
 | 
			
		||||
            "label": "¯",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_DOT)": {
 | 
			
		||||
            "key": "FR_SHYP",
 | 
			
		||||
            "label": " (soft hyphen)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_EACU)": {
 | 
			
		||||
            "key": "FR_ACUT",
 | 
			
		||||
            "label": "´ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,641 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ / │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ ^ │ Ç │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ È │ À │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ Ù │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ É │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "CA_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "CA_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "CA_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "CA_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "CA_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "CA_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "CA_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "CA_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "CA_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "CA_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "CA_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "CA_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "CA_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "CA_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "CA_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "CA_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "CA_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "CA_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "CA_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "CA_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "CA_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "CA_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "CA_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "CA_CIRC",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "CA_CCED",
 | 
			
		||||
            "label": "Ç",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "CA_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "CA_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "CA_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "CA_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "CA_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "CA_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "CA_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "CA_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "CA_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "CA_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "CA_EGRV",
 | 
			
		||||
            "label": "É",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "CA_AGRV",
 | 
			
		||||
            "label": "À",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "CA_UGRV",
 | 
			
		||||
            "label": "Ù",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "CA_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "CA_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "CA_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "CA_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "CA_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "CA_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "CA_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "CA_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "CA_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "CA_EACU",
 | 
			
		||||
            "label": "É",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ \ │ ! │ @ │ # │ $ │ % │ ? │ & │ * │ ( │ ) │ _ │ + │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │ ¨ │   │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │ : │   │   │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │   │   │   │   │   │   │   │ ' │ " │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(CA_SLSH)": {
 | 
			
		||||
            "key": "CA_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CA_1)": {
 | 
			
		||||
            "key": "CA_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CA_2)": {
 | 
			
		||||
            "key": "CA_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CA_3)": {
 | 
			
		||||
            "key": "CA_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CA_4)": {
 | 
			
		||||
            "key": "CA_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CA_5)": {
 | 
			
		||||
            "key": "CA_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CA_6)": {
 | 
			
		||||
            "key": "CA_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CA_7)": {
 | 
			
		||||
            "key": "CA_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CA_8)": {
 | 
			
		||||
            "key": "CA_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CA_9)": {
 | 
			
		||||
            "key": "CA_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CA_0)": {
 | 
			
		||||
            "key": "CA_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CA_MINS)": {
 | 
			
		||||
            "key": "CA_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CA_EQL)": {
 | 
			
		||||
            "key": "CA_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CA_CIRC)": {
 | 
			
		||||
            "key": "CA_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CA_SCLN)": {
 | 
			
		||||
            "key": "CA_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CA_COMM)": {
 | 
			
		||||
            "key": "CA_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CA_DOT)": {
 | 
			
		||||
            "key": "CA_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ | │   │   │   │ ¤ │   │   │ { │ } │ [ │ ] │   │ ¬ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │ € │   │   │   │   │   │   │   │ ` │ ~ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │ ° │   │   │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │ « │ » │   │   │   │   │   │ < │ > │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(CA_SLSH)": {
 | 
			
		||||
            "key": "CA_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CA_4)": {
 | 
			
		||||
            "key": "CA_CURR",
 | 
			
		||||
            "label": "¤",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CA_7)": {
 | 
			
		||||
            "key": "CA_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CA_8)": {
 | 
			
		||||
            "key": "CA_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CA_9)": {
 | 
			
		||||
            "key": "CA_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CA_0)": {
 | 
			
		||||
            "key": "CA_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CA_EQL)": {
 | 
			
		||||
            "key": "CA_NOT",
 | 
			
		||||
            "label": "¬",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CA_E)": {
 | 
			
		||||
            "key": "CA_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CA_CIRC)": {
 | 
			
		||||
            "key": "CA_GRV",
 | 
			
		||||
            "label": "` (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CA_CCED)": {
 | 
			
		||||
            "key": "CA_DTIL",
 | 
			
		||||
            "label": "~ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CA_SCLN)": {
 | 
			
		||||
            "key": "CA_DEG",
 | 
			
		||||
            "label": "°",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CA_Z)": {
 | 
			
		||||
            "key": "CA_LDAQ",
 | 
			
		||||
            "label": "«",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CA_X)": {
 | 
			
		||||
            "key": "CA_RDAQ",
 | 
			
		||||
            "label": "»",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CA_COMM)": {
 | 
			
		||||
            "key": "CA_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CA_DOT)": {
 | 
			
		||||
            "key": "CA_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
/* Right Ctrl symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │   │ ¹ │ ² │ ³ │ ¼ │ ½ │ ¾ │   │   │   │   │   │ ¸ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ Ω │ Ł │ Œ │ ¶ │ Ŧ │ ← │ ↓ │ → │ Ø │ Þ │   │ ~ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ Æ │ ß │ Ð │   │ Ŋ │ Ħ │ IJ │ ĸ │ Ŀ │ ´ │   │   │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │   │   │ ¢ │ “ │ ” │ ʼn │ μ │ ― │ ˙ │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "RCTL(CA_1)": {
 | 
			
		||||
            "key": "CA_SUP1",
 | 
			
		||||
            "label": "¹",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_2)": {
 | 
			
		||||
            "key": "CA_SUP2",
 | 
			
		||||
            "label": "²",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_3)": {
 | 
			
		||||
            "key": "CA_SUP3",
 | 
			
		||||
            "label": "³",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_4)": {
 | 
			
		||||
            "key": "CA_QRTR",
 | 
			
		||||
            "label": "¼",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_5)": {
 | 
			
		||||
            "key": "CA_HALF",
 | 
			
		||||
            "label": "½",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_6)": {
 | 
			
		||||
            "key": "CA_TQTR",
 | 
			
		||||
            "label": "¾",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_EQL)": {
 | 
			
		||||
            "key": "CA_CEDL",
 | 
			
		||||
            "label": "¸ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_Q)": {
 | 
			
		||||
            "key": "CA_OMEG",
 | 
			
		||||
            "label": "Ω",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_W)": {
 | 
			
		||||
            "key": "CA_LSTR",
 | 
			
		||||
            "label": "Ł",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_E)": {
 | 
			
		||||
            "key": "CA_OE",
 | 
			
		||||
            "label": "Œ",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_R)": {
 | 
			
		||||
            "key": "CA_PARA",
 | 
			
		||||
            "label": "¶",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_T)": {
 | 
			
		||||
            "key": "CA_TSTR",
 | 
			
		||||
            "label": "Ŧ",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_Y)": {
 | 
			
		||||
            "key": "CA_LARR",
 | 
			
		||||
            "label": "←",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_U)": {
 | 
			
		||||
            "key": "CA_DARR",
 | 
			
		||||
            "label": "↓",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_I)": {
 | 
			
		||||
            "key": "CA_RARR",
 | 
			
		||||
            "label": "→",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_O)": {
 | 
			
		||||
            "key": "CA_OSTR",
 | 
			
		||||
            "label": "Ø",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_P)": {
 | 
			
		||||
            "key": "CA_THRN",
 | 
			
		||||
            "label": "Þ",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_CCED)": {
 | 
			
		||||
            "key": "CA_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_A)": {
 | 
			
		||||
            "key": "CA_AE",
 | 
			
		||||
            "label": "Æ",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_S)": {
 | 
			
		||||
            "key": "CA_SS",
 | 
			
		||||
            "label": "ß",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_D)": {
 | 
			
		||||
            "key": "CA_ETH",
 | 
			
		||||
            "label": "Ð",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_G)": {
 | 
			
		||||
            "key": "CA_ENG",
 | 
			
		||||
            "label": "Ŋ",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_H)": {
 | 
			
		||||
            "key": "CA_HSTR",
 | 
			
		||||
            "label": "Ħ",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_J)": {
 | 
			
		||||
            "key": "CA_IJ",
 | 
			
		||||
            "label": "IJ",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_K)": {
 | 
			
		||||
            "key": "CA_KRA",
 | 
			
		||||
            "label": "ĸ",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_L)": {
 | 
			
		||||
            "key": "CA_LMDT",
 | 
			
		||||
            "label": "Ŀ",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_SCLN)": {
 | 
			
		||||
            "key": "CA_ACUT",
 | 
			
		||||
            "label": "´ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_C)": {
 | 
			
		||||
            "key": "CA_CENT",
 | 
			
		||||
            "label": "¢",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_V)": {
 | 
			
		||||
            "key": "CA_LDQU",
 | 
			
		||||
            "label": "“",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_B)": {
 | 
			
		||||
            "key": "CA_RDQU",
 | 
			
		||||
            "label": "”",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_N)": {
 | 
			
		||||
            "key": "CA_APSN",
 | 
			
		||||
            "label": "ʼn",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_M)": {
 | 
			
		||||
            "key": "CA_MICR",
 | 
			
		||||
            "label": "μ",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_COMM)": {
 | 
			
		||||
            "key": "CA_HRZB",
 | 
			
		||||
            "label": "―",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(CA_DOT)": {
 | 
			
		||||
            "key": "CA_DOTA",
 | 
			
		||||
            "label": "˙ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
/* Shift+Right Ctrl symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ - │ ¡ │   │ £ │   │ ⅜ │ ⅝ │ ⅞ │ ™ │ ± │   │ ¿ │ ˛ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │ ® │   │ ¥ │ ↑ │ ı │   │   │ ° │ ¯ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │ § │   │ ª │   │   │   │   │   │ ˝ │ ˇ │ ˘ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ ¦ │   │   │ © │ ‘ │ ’ │ ♪ │ º │ × │ ÷ │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "RCTL(S(CA_SLSH))": {
 | 
			
		||||
            "key": "CA_SHYP",
 | 
			
		||||
            "label": " (soft hyphen)",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_1))": {
 | 
			
		||||
            "key": "CA_IEXL",
 | 
			
		||||
            "label": "¡",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_3))": {
 | 
			
		||||
            "key": "CA_PND",
 | 
			
		||||
            "label": "£",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_5))": {
 | 
			
		||||
            "key": "CA_TEIG",
 | 
			
		||||
            "label": "⅜",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_6))": {
 | 
			
		||||
            "key": "CA_FEIG",
 | 
			
		||||
            "label": "⅝",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_7))": {
 | 
			
		||||
            "key": "CA_SEIG",
 | 
			
		||||
            "label": "⅞",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_8))": {
 | 
			
		||||
            "key": "CA_TM",
 | 
			
		||||
            "label": "™",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_9))": {
 | 
			
		||||
            "key": "CA_PLMN",
 | 
			
		||||
            "label": "±",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_MINS))": {
 | 
			
		||||
            "key": "CA_IQUE",
 | 
			
		||||
            "label": "¿",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_EQL))": {
 | 
			
		||||
            "key": "CA_OGON",
 | 
			
		||||
            "label": "˛ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_R))": {
 | 
			
		||||
            "key": "CA_REGD",
 | 
			
		||||
            "label": "®",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_Y))": {
 | 
			
		||||
            "key": "CA_YEN",
 | 
			
		||||
            "label": "¥",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_U))": {
 | 
			
		||||
            "key": "CA_UARR",
 | 
			
		||||
            "label": "↑",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_I))": {
 | 
			
		||||
            "key": "CA_DLSI",
 | 
			
		||||
            "label": "ı",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_CIRC))": {
 | 
			
		||||
            "key": "CA_RNGA",
 | 
			
		||||
            "label": "° (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_CCED))": {
 | 
			
		||||
            "key": "CA_MACR",
 | 
			
		||||
            "label": "¯ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_S))": {
 | 
			
		||||
            "key": "CA_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_F))": {
 | 
			
		||||
            "key": "CA_FORD",
 | 
			
		||||
            "label": "ª",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_SCLN))": {
 | 
			
		||||
            "key": "CA_DACU",
 | 
			
		||||
            "label": "˝ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_EGRV))": {
 | 
			
		||||
            "key": "CA_CARN",
 | 
			
		||||
            "label": "ˇ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_AGRV))": {
 | 
			
		||||
            "key": "CA_BREV",
 | 
			
		||||
            "label": "˘ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_UGRV))": {
 | 
			
		||||
            "key": "CA_BRKP",
 | 
			
		||||
            "label": "¦",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_C))": {
 | 
			
		||||
            "key": "CA_COPY",
 | 
			
		||||
            "label": "©",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_V))": {
 | 
			
		||||
            "key": "CA_LSQU",
 | 
			
		||||
            "label": "‘",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_B))": {
 | 
			
		||||
            "key": "CA_RSQU",
 | 
			
		||||
            "label": "’",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_N))": {
 | 
			
		||||
            "key": "CA_ENOT",
 | 
			
		||||
            "label": "♪",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_M))": {
 | 
			
		||||
            "key": "CA_MORD",
 | 
			
		||||
            "label": "º",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_COMM))": {
 | 
			
		||||
            "key": "CA_MUL",
 | 
			
		||||
            "label": "×",
 | 
			
		||||
        }
 | 
			
		||||
        "RCTL(S(CA_DOT))": {
 | 
			
		||||
            "key": "CA_DIV",
 | 
			
		||||
            "label": "÷",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,302 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ Q │ W │ F │ P │ G │ J │ L │ U │ Y │ ; │ [ │ ] │  \  │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
 | 
			
		||||
 * │      │ A │ R │ S │ T │ D │ H │ N │ E │ I │ O │ ' │        │
 | 
			
		||||
 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
 | 
			
		||||
 * │        │ Z │ X │ C │ V │ B │ K │ M │ , │ . │ / │          │
 | 
			
		||||
 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "CM_GRV",
 | 
			
		||||
            "label": "`",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "CM_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "CM_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "CM_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "CM_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "CM_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "CM_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "CM_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "CM_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "CM_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "CM_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "CM_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "CM_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "CM_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "CM_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "CM_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "CM_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "CM_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "CM_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "CM_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "CM_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "CM_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "CM_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "CM_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "CM_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_BSLS": {
 | 
			
		||||
            "key": "CM_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "CM_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "CM_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "CM_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "CM_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "CM_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "CM_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "CM_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "CM_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "CM_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "CM_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "CM_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "CM_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "CM_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "CM_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "CM_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "CM_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "CM_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "CM_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "CM_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "CM_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "CM_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │ : │ { │ } │  |  │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │ " │        │
 | 
			
		||||
 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
 | 
			
		||||
 * │        │   │   │   │   │   │   │   │ < │ > │ ? │          │
 | 
			
		||||
 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(CM_GRV)": {
 | 
			
		||||
            "key": "CM_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_1)": {
 | 
			
		||||
            "key": "CM_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_2)": {
 | 
			
		||||
            "key": "CM_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_3)": {
 | 
			
		||||
            "key": "CM_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_4)": {
 | 
			
		||||
            "key": "CM_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_5)": {
 | 
			
		||||
            "key": "CM_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_6)": {
 | 
			
		||||
            "key": "CM_CIRC",
 | 
			
		||||
            "label": "^",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_7)": {
 | 
			
		||||
            "key": "CM_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_8)": {
 | 
			
		||||
            "key": "CM_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_9)": {
 | 
			
		||||
            "key": "CM_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_0)": {
 | 
			
		||||
            "key": "CM_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_MINS)": {
 | 
			
		||||
            "key": "CM_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_EQL)": {
 | 
			
		||||
            "key": "CM_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_SCLN)": {
 | 
			
		||||
            "key": "CM_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_LBRC)": {
 | 
			
		||||
            "key": "CM_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_RBRC)": {
 | 
			
		||||
            "key": "CM_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_BSLS)": {
 | 
			
		||||
            "key": "CM_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_QUOT)": {
 | 
			
		||||
            "key": "CM_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_COMM)": {
 | 
			
		||||
            "key": "CM_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_DOT)": {
 | 
			
		||||
            "key": "CM_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CM_SLSH)": {
 | 
			
		||||
            "key": "CM_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,403 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ¸ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ + │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ Q │ W │ E │ R │ T │ Z │ U │ I │ O │ P │ Š │ Đ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Č │ Ć │ Ž │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ < │ Y │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "HR_CEDL",
 | 
			
		||||
            "label": "¸ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "HR_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "HR_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "HR_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "HR_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "HR_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "HR_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "HR_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "HR_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "HR_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "HR_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "HR_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "HR_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "HR_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "HR_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "HR_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "HR_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "HR_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "HR_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "HR_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "HR_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "HR_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "HR_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "HR_SCAR",
 | 
			
		||||
            "label": "Š",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "HR_DSTR",
 | 
			
		||||
            "label": "Đ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "HR_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "HR_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "HR_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "HR_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "HR_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "HR_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "HR_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "HR_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "HR_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "HR_CCAR",
 | 
			
		||||
            "label": "Č",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "HR_CACU",
 | 
			
		||||
            "label": "Ć",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "HR_ZCAR",
 | 
			
		||||
            "label": "Ž",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "HR_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "HR_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "HR_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "HR_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "HR_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "HR_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "HR_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "HR_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "HR_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "HR_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "HR_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ¨ │ ! │ " │ # │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ * │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │   │   │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(HR_CEDL)": {
 | 
			
		||||
            "key": "HR_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HR_1)": {
 | 
			
		||||
            "key": "HR_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HR_2)": {
 | 
			
		||||
            "key": "HR_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HR_3)": {
 | 
			
		||||
            "key": "HR_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HR_4)": {
 | 
			
		||||
            "key": "HR_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HR_5)": {
 | 
			
		||||
            "key": "HR_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HR_6)": {
 | 
			
		||||
            "key": "HR_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HR_7)": {
 | 
			
		||||
            "key": "HR_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HR_8)": {
 | 
			
		||||
            "key": "HR_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HR_9)": {
 | 
			
		||||
            "key": "HR_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HR_0)": {
 | 
			
		||||
            "key": "HR_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HR_QUOT)": {
 | 
			
		||||
            "key": "HR_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HR_PLUS)": {
 | 
			
		||||
            "key": "HR_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HR_LABK)": {
 | 
			
		||||
            "key": "HR_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HR_COMM)": {
 | 
			
		||||
            "key": "HR_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HR_DOT)": {
 | 
			
		||||
            "key": "HR_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HR_MINS)": {
 | 
			
		||||
            "key": "HR_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │   │ ~ │ ˇ │ ^ │ ˘ │ ° │ ˛ │ ` │ ˙ │ ´ │ ˝ │   │   │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ \ │ | │ € │   │   │   │   │   │   │   │ ÷ │ × │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │ [ │ ] │   │   │ ł │ Ł │   │ ß │ ¤ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │   │   │   │ @ │ { │ } │ § │   │   │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(HR_1)": {
 | 
			
		||||
            "key": "HR_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_2)": {
 | 
			
		||||
            "key": "HR_CARN",
 | 
			
		||||
            "label": "ˇ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_3)": {
 | 
			
		||||
            "key": "HR_CIRC",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_4)": {
 | 
			
		||||
            "key": "HR_BREV",
 | 
			
		||||
            "label": "˘ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_5)": {
 | 
			
		||||
            "key": "HR_RNGA",
 | 
			
		||||
            "label": "° (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_6)": {
 | 
			
		||||
            "key": "HR_OGON",
 | 
			
		||||
            "label": "˛ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_7)": {
 | 
			
		||||
            "key": "HR_GRV",
 | 
			
		||||
            "label": "`",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_8)": {
 | 
			
		||||
            "key": "HR_DOTA",
 | 
			
		||||
            "label": "˙ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_9)": {
 | 
			
		||||
            "key": "HR_ACUT",
 | 
			
		||||
            "label": "´ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_0)": {
 | 
			
		||||
            "key": "HR_DACU",
 | 
			
		||||
            "label": "˝ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_Q)": {
 | 
			
		||||
            "key": "HR_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_W)": {
 | 
			
		||||
            "key": "HR_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_E)": {
 | 
			
		||||
            "key": "HR_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_SCAR)": {
 | 
			
		||||
            "key": "HR_DIV",
 | 
			
		||||
            "label": "÷",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_DSTR)": {
 | 
			
		||||
            "key": "HR_MUL",
 | 
			
		||||
            "label": "×",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_F)": {
 | 
			
		||||
            "key": "HR_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_G)": {
 | 
			
		||||
            "key": "HR_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_K)": {
 | 
			
		||||
            "key": "HR_LLST",
 | 
			
		||||
            "label": "ł",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_L)": {
 | 
			
		||||
            "key": "HR_CLST",
 | 
			
		||||
            "label": "Ł",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_CACU)": {
 | 
			
		||||
            "key": "HR_SS",
 | 
			
		||||
            "label": "ß",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_ZCAR)": {
 | 
			
		||||
            "key": "HR_CURR",
 | 
			
		||||
            "label": "¤",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_V)": {
 | 
			
		||||
            "key": "HR_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_B)": {
 | 
			
		||||
            "key": "HR_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_N)": {
 | 
			
		||||
            "key": "HR_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HR_M)": {
 | 
			
		||||
            "key": "HR_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,435 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ; │ + │ ě │ š │ č │ ř │ ž │ ý │ á │ í │ é │ = │ ´ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ Q │ W │ E │ R │ T │ Z │ U │ I │ O │ P │ ú │ ) │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ů │ § │ ¨ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ \ │ Y │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "CZ_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "CZ_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "CZ_ECAR",
 | 
			
		||||
            "label": "ě",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "CZ_SCAR",
 | 
			
		||||
            "label": "š",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "CZ_CCAR",
 | 
			
		||||
            "label": "č",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "CZ_RCAR",
 | 
			
		||||
            "label": "ř",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "CZ_ZCAR",
 | 
			
		||||
            "label": "ž",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "CZ_YACU",
 | 
			
		||||
            "label": "ý",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "CZ_AACU",
 | 
			
		||||
            "label": "á",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "CZ_IACU",
 | 
			
		||||
            "label": "í",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "CZ_EACU",
 | 
			
		||||
            "label": "é",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "CZ_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "CZ_ACUT",
 | 
			
		||||
            "label": "´ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "CZ_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "CZ_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "CZ_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "CZ_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "CZ_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "CZ_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "CZ_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "CZ_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "CZ_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "CZ_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "CZ_UACU",
 | 
			
		||||
            "label": "ú",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "CZ_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "CZ_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "CZ_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "CZ_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "CZ_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "CZ_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "CZ_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "CZ_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "CZ_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "CZ_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "CZ_URNG",
 | 
			
		||||
            "label": "ů",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "CZ_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "CZ_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "CZ_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "CZ_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "CZ_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "CZ_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "CZ_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "CZ_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "CZ_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "CZ_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "CZ_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "CZ_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "CZ_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ° │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ % │ ˇ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │ / │ ( │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │ " │ ! │ ' │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ | │   │   │   │   │   │   │   │ ? │ : │ _ │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(CZ_SCLN)": {
 | 
			
		||||
            "key": "CZ_RNGA",
 | 
			
		||||
            "label": "° (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_PLUS)": {
 | 
			
		||||
            "key": "CZ_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_ECAR)": {
 | 
			
		||||
            "key": "CZ_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_SCAR)": {
 | 
			
		||||
            "key": "CZ_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_CCAR)": {
 | 
			
		||||
            "key": "CZ_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_RCAR)": {
 | 
			
		||||
            "key": "CZ_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_ZCAR)": {
 | 
			
		||||
            "key": "CZ_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_YACU)": {
 | 
			
		||||
            "key": "CZ_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_AACU)": {
 | 
			
		||||
            "key": "CZ_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_IACU)": {
 | 
			
		||||
            "key": "CZ_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_EACU)": {
 | 
			
		||||
            "key": "CZ_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_EQL)": {
 | 
			
		||||
            "key": "CZ_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_ACUT)": {
 | 
			
		||||
            "key": "CZ_CARN",
 | 
			
		||||
            "label": "ˇ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_UACU)": {
 | 
			
		||||
            "key": "CZ_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_RPRN)": {
 | 
			
		||||
            "key": "CZ_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_URNG)": {
 | 
			
		||||
            "key": "CZ_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_SECT)": {
 | 
			
		||||
            "key": "CZ_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_DIAE)": {
 | 
			
		||||
            "key": "CZ_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_BSLS)": {
 | 
			
		||||
            "key": "CZ_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_COMM)": {
 | 
			
		||||
            "key": "CZ_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_DOT)": {
 | 
			
		||||
            "key": "CZ_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_MINS)": {
 | 
			
		||||
            "key": "CZ_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │   │ ~ │   │ ^ │ ˘ │   │ ˛ │ ` │ ˙ │   │ ˝ │   │ ¸ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │ € │   │   │   │   │   │   │   │ ÷ │ × │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │ đ │ Đ │ [ │ ] │   │   │ ł │ Ł │ $ │ ß │ ¤ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │   │ # │ & │ @ │ { │ } │   │ < │ > │ * │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(CZ_PLUS)": {
 | 
			
		||||
            "key": "CZ_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_SCAR)": {
 | 
			
		||||
            "key": "CZ_CIRC",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_CCAR)": {
 | 
			
		||||
            "key": "CZ_BREV",
 | 
			
		||||
            "label": "˘ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_ZCAR)": {
 | 
			
		||||
            "key": "CZ_OGON",
 | 
			
		||||
            "label": "˛ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_YACU)": {
 | 
			
		||||
            "key": "CZ_GRV",
 | 
			
		||||
            "label": "` (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_AACU)": {
 | 
			
		||||
            "key": "CZ_DOTA",
 | 
			
		||||
            "label": "˙ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_EACU)": {
 | 
			
		||||
            "key": "CZ_DACU",
 | 
			
		||||
            "label": "˝ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_ACUT)": {
 | 
			
		||||
            "key": "CZ_CEDL",
 | 
			
		||||
            "label": "¸ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_E)": {
 | 
			
		||||
            "key": "CZ_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_UACU)": {
 | 
			
		||||
            "key": "CZ_DIV",
 | 
			
		||||
            "label": "÷",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_RPRN)": {
 | 
			
		||||
            "key": "CZ_MUL",
 | 
			
		||||
            "label": "×",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_S)": {
 | 
			
		||||
            "key": "CZ_LDST",
 | 
			
		||||
            "label": "đ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_D)": {
 | 
			
		||||
            "key": "CZ_CDST",
 | 
			
		||||
            "label": "Đ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_F)": {
 | 
			
		||||
            "key": "CZ_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_G)": {
 | 
			
		||||
            "key": "CZ_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_K)": {
 | 
			
		||||
            "key": "CZ_LLST",
 | 
			
		||||
            "label": "ł",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_L)": {
 | 
			
		||||
            "key": "CZ_CLST",
 | 
			
		||||
            "label": "Ł",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_URNG)": {
 | 
			
		||||
            "key": "CZ_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_SECT)": {
 | 
			
		||||
            "key": "CZ_SS",
 | 
			
		||||
            "label": "ß",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_DIAE)": {
 | 
			
		||||
            "key": "CZ_CURR",
 | 
			
		||||
            "label": "¤",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_X)": {
 | 
			
		||||
            "key": "CZ_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_C)": {
 | 
			
		||||
            "key": "CZ_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_V)": {
 | 
			
		||||
            "key": "CZ_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_B)": {
 | 
			
		||||
            "key": "CZ_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_N)": {
 | 
			
		||||
            "key": "CZ_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_COMM)": {
 | 
			
		||||
            "key": "CZ_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_DOT)": {
 | 
			
		||||
            "key": "CZ_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(CZ_MINS)": {
 | 
			
		||||
            "key": "CZ_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,580 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
 | 
			
		||||
 * │ \ │ + │ ě │ š │ č │ ř │ ž │ ý │ á │ í │ é │ = │ ' │     │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
 | 
			
		||||
 * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ ú │ ) │ ¨ │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤
 | 
			
		||||
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ů │ § │      │
 | 
			
		||||
 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──────┤
 | 
			
		||||
 * │        │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │        │
 | 
			
		||||
 * ├─────┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
 | 
			
		||||
 * │     │    │     │                       │     │    │     │
 | 
			
		||||
 * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
 | 
			
		||||
 */
 | 
			
		||||
       "KC_GRV": {
 | 
			
		||||
            "key": "CZ_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "CZ_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "CZ_ECAR",
 | 
			
		||||
            "label": "ě",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "CZ_SCAR",
 | 
			
		||||
            "label": "š",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "CZ_CCAR",
 | 
			
		||||
            "label": "č",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "CZ_RCAR",
 | 
			
		||||
            "label": "ř",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "CZ_ZCAR",
 | 
			
		||||
            "label": "ž",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "CZ_YACU",
 | 
			
		||||
            "label": "ý",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "CZ_AACU",
 | 
			
		||||
            "label": "á",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "CZ_IACU",
 | 
			
		||||
            "label": "í",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "CZ_EACU",
 | 
			
		||||
            "label": "é",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "CZ_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "CZ_ACUT",
 | 
			
		||||
            "label": "' (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "CZ_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "CZ_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "CZ_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "CZ_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "CZ_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "CZ_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "CZ_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "CZ_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "CZ_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "CZ_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "CZ_UACU",
 | 
			
		||||
            "label": "ú",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "CZ_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "CZ_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "CZ_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "CZ_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "CZ_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "CZ_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "CZ_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "CZ_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "CZ_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "CZ_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "CZ_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "CZ_URNG",
 | 
			
		||||
            "label": "ů",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "CZ_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "CZ_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "CZ_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "CZ_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "CZ_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "CZ_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "CZ_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "CZ_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "CZ_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "CZ_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "CZ_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
 | 
			
		||||
 * │ | │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ % │ ˇ │     │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │ / │ ( │ ` │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │ " │ ! │      │
 | 
			
		||||
 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──────┤
 | 
			
		||||
 * │        │   │   │   │   │   │   │   │ ? │ : │ _ │        │
 | 
			
		||||
 * ├─────┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
 | 
			
		||||
 * │     │    │     │                       │     │    │     │
 | 
			
		||||
 * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(CZ_BSLS)": {
 | 
			
		||||
            "key": "CZ_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_PLUS)": {
 | 
			
		||||
            "key": "CZ_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_ECAR)": {
 | 
			
		||||
            "key": "CZ_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_SCAR)": {
 | 
			
		||||
            "key": "CZ_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_CCAR)": {
 | 
			
		||||
            "key": "CZ_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_RCAR)": {
 | 
			
		||||
            "key": "CZ_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_ZCAR)": {
 | 
			
		||||
            "key": "CZ_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_YACU)": {
 | 
			
		||||
            "key": "CZ_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_AACU)": {
 | 
			
		||||
            "key": "CZ_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_IACU)": {
 | 
			
		||||
            "key": "CZ_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_EACU)": {
 | 
			
		||||
            "key": "CZ_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_EQL)": {
 | 
			
		||||
            "key": "CZ_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_ACUT)": {
 | 
			
		||||
            "key": "CZ_CARN",
 | 
			
		||||
            "label": "ˇ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_UACU)": {
 | 
			
		||||
            "key": "CZ_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_RPRN)": {
 | 
			
		||||
            "key": "CZ_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
         "S(CZ_DIAE)": {
 | 
			
		||||
            "key": "CZ_GRV",
 | 
			
		||||
            "label": "`",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_URNG)": {
 | 
			
		||||
            "key": "CZ_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_SECT)": {
 | 
			
		||||
            "key": "CZ_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_COMM)": {
 | 
			
		||||
            "key": "CZ_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_DOT)": {
 | 
			
		||||
            "key": "CZ_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_MINS)": {
 | 
			
		||||
            "key": "CZ_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
/* Alted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
 | 
			
		||||
 * │   │   │ @ │ # │ $ │ ~ │ ^ │ & │ * │ { │ } │ ° │ ^ │     │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
 | 
			
		||||
 * │     │   │ ė │ ę │ € │   │   │   │   │   │   │ [ │ ] │   │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤
 | 
			
		||||
 * │      │ ą │ ß │ ∂ │   │   │ ‘ │ ’ │   │ ł │ ; │ ' │      │
 | 
			
		||||
 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──────┤
 | 
			
		||||
 * │        │   │   │   │   │   │ ‚ │   │ < │ > │ – │        │
 | 
			
		||||
 * ├─────┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
 | 
			
		||||
 * │     │    │     │                       │     │    │     │
 | 
			
		||||
 * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
 | 
			
		||||
 */
 | 
			
		||||
        "A(CZ_ECAR)": {
 | 
			
		||||
            "key": "CZ_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_SCAR)": {
 | 
			
		||||
            "key": "CZ_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_CCAR)": {
 | 
			
		||||
            "key": "CZ_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_RCAR)": {
 | 
			
		||||
            "key": "CZ_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_ZCAR)": {
 | 
			
		||||
            "key": "CZ_CIRC",
 | 
			
		||||
            "label": "^",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_YACU)": {
 | 
			
		||||
            "key": "CZ_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_AACU)": {
 | 
			
		||||
            "key": "CZ_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_IACU)": {
 | 
			
		||||
            "key": "CZ_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_EACU)": {
 | 
			
		||||
            "key": "CZ_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_EQL)": {
 | 
			
		||||
            "key": "CZ_RNGA",
 | 
			
		||||
            "label": "° (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_ACUT)": {
 | 
			
		||||
            "key": "CZ_DCIR",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_W)": {
 | 
			
		||||
            "key": "CZ_LEDT",
 | 
			
		||||
            "label": "ė",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_E)": {
 | 
			
		||||
            "key": "CZ_LEOG",
 | 
			
		||||
            "label": "ę",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_R)": {
 | 
			
		||||
            "key": "CZ_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_Z)": {
 | 
			
		||||
            "key": "CZ_LZDT",
 | 
			
		||||
            "label": "ż",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_UACU)": {
 | 
			
		||||
            "key": "CZ_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_RPRN)": {
 | 
			
		||||
            "key": "CZ_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_A)": {
 | 
			
		||||
            "key": "CZ_LAOG",
 | 
			
		||||
            "label": "ą",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_S)": {
 | 
			
		||||
            "key": "CZ_SS",
 | 
			
		||||
            "label": "ß",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_D)": {
 | 
			
		||||
            "key": "CZ_PDIF",
 | 
			
		||||
            "label": "∂",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_H)": {
 | 
			
		||||
            "key": "CZ_LSQU",
 | 
			
		||||
            "label": "‘",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_J)": {
 | 
			
		||||
            "key": "CZ_RSQU",
 | 
			
		||||
            "label": "’",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_L)": {
 | 
			
		||||
            "key": "CZ_LLST",
 | 
			
		||||
            "label": "ł",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_URNG)": {
 | 
			
		||||
            "key": "CZ_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_SECT)": {
 | 
			
		||||
            "key": "CZ_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_N)": {
 | 
			
		||||
            "key": "CZ_SLQU",
 | 
			
		||||
            "label": "‚",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_COMM)": {
 | 
			
		||||
            "key": "CZ_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_DOT)": {
 | 
			
		||||
            "key": "CZ_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_MINS)": {
 | 
			
		||||
            "key": "CZ_NDSH",
 | 
			
		||||
            "label": "–",
 | 
			
		||||
        }
 | 
			
		||||
/* Shift+Alted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
 | 
			
		||||
 * │   │ ¬ │ • │ ≠ │ £ │ ◊ │ † │ ¶ │ ÷ │ « │ » │ , │ - │     │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
 | 
			
		||||
 * │     │   │ Ė │ Ę │ ® │ ™ │ Ż │   │   │   │   │ ‹ │ › │ " │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤
 | 
			
		||||
 * │      │ Ą │ ∑ │ ∆ │   │   │ “ │ ” │   │ Ł │ … │ ~ │      │
 | 
			
		||||
 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──────┤
 | 
			
		||||
 * │        │   │   │ © │ √ │   │ „ │   │ ≤ │ ≥ │ — │        │
 | 
			
		||||
 * ├─────┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
 | 
			
		||||
 * │     │    │     │                       │     │    │     │
 | 
			
		||||
 * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(A(CZ_1))": {
 | 
			
		||||
            "key": "CZ_NOT",
 | 
			
		||||
            "label": "¬",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_2))": {
 | 
			
		||||
            "key": "CZ_BULT",
 | 
			
		||||
            "label": "•",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_3))": {
 | 
			
		||||
            "key": "CZ_NEQL",
 | 
			
		||||
            "label": "≠",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_4))": {
 | 
			
		||||
            "key": "CZ_PND",
 | 
			
		||||
            "label": "£",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_5))": {
 | 
			
		||||
            "key": "CZ_LOZN",
 | 
			
		||||
            "label": "◊",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_6))": {
 | 
			
		||||
            "key": "CZ_DAGG",
 | 
			
		||||
            "label": "†",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_7))": {
 | 
			
		||||
            "key": "CZ_PARA",
 | 
			
		||||
            "label": "¶",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_8))": {
 | 
			
		||||
            "key": "CZ_DIV",
 | 
			
		||||
            "label": "÷",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_9))": {
 | 
			
		||||
            "key": "CZ_LDAQ",
 | 
			
		||||
            "label": "«",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_0))": {
 | 
			
		||||
            "key": "CZ_RDAQ",
 | 
			
		||||
            "label": "»",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_EQL))": {
 | 
			
		||||
            "key": "CZ_DCOM",
 | 
			
		||||
            "label": ", (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_ACUT))": {
 | 
			
		||||
            "key": "CZ_DHPN",
 | 
			
		||||
            "label": "- (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_W))": {
 | 
			
		||||
            "key": "CZ_CEDT",
 | 
			
		||||
            "label": "Ė",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_E))": {
 | 
			
		||||
            "key": "CZ_CEOG",
 | 
			
		||||
            "label": "Ę",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_R))": {
 | 
			
		||||
            "key": "CZ_REGD",
 | 
			
		||||
            "label": "®",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_T))": {
 | 
			
		||||
            "key": "CZ_TM",
 | 
			
		||||
            "label": "™",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_Z))": {
 | 
			
		||||
            "key": "CZ_CZDT",
 | 
			
		||||
            "label": "Ż",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_UACU))": {
 | 
			
		||||
            "key": "CZ_LSAQ",
 | 
			
		||||
            "label": "‹",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_RPRN))": {
 | 
			
		||||
            "key": "CZ_RSAQ",
 | 
			
		||||
            "label": "›",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_DIAE))": {
 | 
			
		||||
            "key": "CZ_DDQT",
 | 
			
		||||
            "label": "\" (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_A))": {
 | 
			
		||||
            "key": "CZ_CAOG",
 | 
			
		||||
            "label": "Ą",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_S))": {
 | 
			
		||||
            "key": "CZ_NARS",
 | 
			
		||||
            "label": "∑",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_D))": {
 | 
			
		||||
            "key": "CZ_INCR",
 | 
			
		||||
            "label": "∆",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_H))": {
 | 
			
		||||
            "key": "CZ_LDQU",
 | 
			
		||||
            "label": "“",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_J))": {
 | 
			
		||||
            "key": "CZ_RDQU",
 | 
			
		||||
            "label": "”",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_L))": {
 | 
			
		||||
            "key": "CZ_CLST",
 | 
			
		||||
            "label": "Ł",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_URNG))": {
 | 
			
		||||
            "key": "CZ_ELLP",
 | 
			
		||||
            "label": "…",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_SECT))": {
 | 
			
		||||
            "key": "CZ_DTIL",
 | 
			
		||||
            "label": "~ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_C))": {
 | 
			
		||||
            "key": "CZ_COPY",
 | 
			
		||||
            "label": "©",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_V))": {
 | 
			
		||||
            "key": "CZ_SQRT",
 | 
			
		||||
            "label": "√",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_N))": {
 | 
			
		||||
            "key": "CZ_DLQU",
 | 
			
		||||
            "label": "„",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_COMM))": {
 | 
			
		||||
            "key": "CZ_LEQL",
 | 
			
		||||
            "label": "≤",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_DOT))": {
 | 
			
		||||
            "key": "CZ_GEQL",
 | 
			
		||||
            "label": "≥",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_MINS))": {
 | 
			
		||||
            "key": "CZ_MDSH",
 | 
			
		||||
            "label": "—",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,580 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
 | 
			
		||||
 * │   │ + │ ě │ š │ č │ ř │ ž │ ý │ á │ í │ é │ = │ ' │     │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
 | 
			
		||||
 * │     │ Q │ W │ E │ R │ T │ Z │ U │ I │ O │ P │ ú │ ) │   │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
 | 
			
		||||
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ů │ § │ ¨ │  │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
 | 
			
		||||
 * │    │ \ │ Y │ X │ C │ V │ B │ N │ M │ , │ . │ - │        │
 | 
			
		||||
 * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
 | 
			
		||||
 * │     │    │     │                       │     │    │     │
 | 
			
		||||
 * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "CZ_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "CZ_ECAR",
 | 
			
		||||
            "label": "ě",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "CZ_SCAR",
 | 
			
		||||
            "label": "š",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "CZ_CCAR",
 | 
			
		||||
            "label": "č",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "CZ_RCAR",
 | 
			
		||||
            "label": "ř",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "CZ_ZCAR",
 | 
			
		||||
            "label": "ž",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "CZ_YACU",
 | 
			
		||||
            "label": "ý",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "CZ_AACU",
 | 
			
		||||
            "label": "á",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "CZ_IACU",
 | 
			
		||||
            "label": "í",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "CZ_EACU",
 | 
			
		||||
            "label": "é",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "CZ_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "CZ_ACUT",
 | 
			
		||||
            "label": "' (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "CZ_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "CZ_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "CZ_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "CZ_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "CZ_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "CZ_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "CZ_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "CZ_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "CZ_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "CZ_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "CZ_UACU",
 | 
			
		||||
            "label": "ú",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "CZ_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "CZ_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "CZ_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "CZ_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "CZ_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "CZ_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "CZ_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "CZ_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "CZ_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "CZ_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "CZ_URNG",
 | 
			
		||||
            "label": "ů",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "CZ_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "CZ_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "CZ_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "CZ_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "CZ_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "CZ_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "CZ_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "CZ_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "CZ_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "CZ_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "CZ_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "CZ_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "CZ_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
 | 
			
		||||
 * │   │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ % │ ˇ │     │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │ / │ ( │   │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │ " │ ! │ ` │  │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
 | 
			
		||||
 * │    │ | │   │   │   │   │   │   │   │ ? │ : │ _ │        │
 | 
			
		||||
 * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
 | 
			
		||||
 * │     │    │     │                       │     │    │     │
 | 
			
		||||
 * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(CZ_PLUS)": {
 | 
			
		||||
            "key": "CZ_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_ECAR)": {
 | 
			
		||||
            "key": "CZ_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_SCAR)": {
 | 
			
		||||
            "key": "CZ_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_CCAR)": {
 | 
			
		||||
            "key": "CZ_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_RCAR)": {
 | 
			
		||||
            "key": "CZ_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_ZCAR)": {
 | 
			
		||||
            "key": "CZ_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_YACU)": {
 | 
			
		||||
            "key": "CZ_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_AACU)": {
 | 
			
		||||
            "key": "CZ_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_IACU)": {
 | 
			
		||||
            "key": "CZ_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_EACU)": {
 | 
			
		||||
            "key": "CZ_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_EQL)": {
 | 
			
		||||
            "key": "CZ_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_ACUT)": {
 | 
			
		||||
            "key": "CZ_CARN",
 | 
			
		||||
            "label": "ˇ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_UACU)": {
 | 
			
		||||
            "key": "CZ_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_RPRN)": {
 | 
			
		||||
            "key": "CZ_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_URNG)": {
 | 
			
		||||
            "key": "CZ_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_SECT)": {
 | 
			
		||||
            "key": "CZ_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_DIAE)": {
 | 
			
		||||
            "key": "CZ_GRV",
 | 
			
		||||
            "label": "`",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_BSLS)": {
 | 
			
		||||
            "key": "CZ_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_COMM)": {
 | 
			
		||||
            "key": "CZ_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_DOT)": {
 | 
			
		||||
            "key": "CZ_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(CZ_MINS)": {
 | 
			
		||||
            "key": "CZ_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
/* Alted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
 | 
			
		||||
 * │   │   │ @ │ # │ $ │ ~ │ ^ │ & │ * │ { │ } │ ° │ ^ │     │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
 | 
			
		||||
 * │     │   │ ė │ ę │ € │   │ ż │   │   │   │   │ [ │ ] │   │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
 | 
			
		||||
 * │      │ ą │ ß │ ∂ │   │   │ ‘ │ ’ │   │ ł │ ; │ ' │   │  │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
 | 
			
		||||
 * │    │   │   │   │   │   │   │ ‚ │   │ < │ > │ – │        │
 | 
			
		||||
 * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
 | 
			
		||||
 * │     │    │     │                       │     │    │     │
 | 
			
		||||
 * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
 | 
			
		||||
 */
 | 
			
		||||
        "A(CZ_ECAR)": {
 | 
			
		||||
            "key": "CZ_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_SCAR)": {
 | 
			
		||||
            "key": "CZ_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_CCAR)": {
 | 
			
		||||
            "key": "CZ_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_RCAR)": {
 | 
			
		||||
            "key": "CZ_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_ZCAR)": {
 | 
			
		||||
            "key": "CZ_CIRC",
 | 
			
		||||
            "label": "^",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_YACU)": {
 | 
			
		||||
            "key": "CZ_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_AACU)": {
 | 
			
		||||
            "key": "CZ_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_IACU)": {
 | 
			
		||||
            "key": "CZ_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_EACU)": {
 | 
			
		||||
            "key": "CZ_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_EQL)": {
 | 
			
		||||
            "key": "CZ_RNGA",
 | 
			
		||||
            "label": "° (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_ACUT)": {
 | 
			
		||||
            "key": "CZ_DCIR",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_W)": {
 | 
			
		||||
            "key": "CZ_LEDT",
 | 
			
		||||
            "label": "ė",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_E)": {
 | 
			
		||||
            "key": "CZ_LEOG",
 | 
			
		||||
            "label": "ę",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_R)": {
 | 
			
		||||
            "key": "CZ_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_Z)": {
 | 
			
		||||
            "key": "CZ_LZDT",
 | 
			
		||||
            "label": "ż",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_UACU)": {
 | 
			
		||||
            "key": "CZ_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_RPRN)": {
 | 
			
		||||
            "key": "CZ_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_A)": {
 | 
			
		||||
            "key": "CZ_LAOG",
 | 
			
		||||
            "label": "ą",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_S)": {
 | 
			
		||||
            "key": "CZ_SS",
 | 
			
		||||
            "label": "ß",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_D)": {
 | 
			
		||||
            "key": "CZ_PDIF",
 | 
			
		||||
            "label": "∂",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_H)": {
 | 
			
		||||
            "key": "CZ_LSQU",
 | 
			
		||||
            "label": "‘",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_J)": {
 | 
			
		||||
            "key": "CZ_RSQU",
 | 
			
		||||
            "label": "’",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_L)": {
 | 
			
		||||
            "key": "CZ_LLST",
 | 
			
		||||
            "label": "ł",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_URNG)": {
 | 
			
		||||
            "key": "CZ_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_SECT)": {
 | 
			
		||||
            "key": "CZ_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_N)": {
 | 
			
		||||
            "key": "CZ_SLQU",
 | 
			
		||||
            "label": "‚",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_COMM)": {
 | 
			
		||||
            "key": "CZ_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_DOT)": {
 | 
			
		||||
            "key": "CZ_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "A(CZ_MINS)": {
 | 
			
		||||
            "key": "CZ_NDSH",
 | 
			
		||||
            "label": "–",
 | 
			
		||||
        }
 | 
			
		||||
/* Shift+Alted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
 | 
			
		||||
 * │   │ ¬ │ • │ ≠ │ £ │ ◊ │ † │ ¶ │ ÷ │ « │ » │ , │ - │     │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
 | 
			
		||||
 * │     │   │ Ė │ Ę │ ® │ ™ │ Ż │   │   │   │   │ ‹ │ › │   │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
 | 
			
		||||
 * │      │ Ą │ ∑ │ ∆ │   │   │ “ │ ” │   │ Ł │ … │ ~ │ " │  │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
 | 
			
		||||
 * │    │   │   │   │ © │ √ │   │ „ │   │ ≤ │ ≥ │ — │        │
 | 
			
		||||
 * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
 | 
			
		||||
 * │     │    │     │                       │     │    │     │
 | 
			
		||||
 * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(A(CZ_1))": {
 | 
			
		||||
            "key": "CZ_NOT",
 | 
			
		||||
            "label": "¬",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_2))": {
 | 
			
		||||
            "key": "CZ_BULT",
 | 
			
		||||
            "label": "•",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_3))": {
 | 
			
		||||
            "key": "CZ_NEQL",
 | 
			
		||||
            "label": "≠",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_4))": {
 | 
			
		||||
            "key": "CZ_PND",
 | 
			
		||||
            "label": "£",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_5))": {
 | 
			
		||||
            "key": "CZ_LOZN",
 | 
			
		||||
            "label": "◊",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_6))": {
 | 
			
		||||
            "key": "CZ_DAGG",
 | 
			
		||||
            "label": "†",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_7))": {
 | 
			
		||||
            "key": "CZ_PARA",
 | 
			
		||||
            "label": "¶",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_8))": {
 | 
			
		||||
            "key": "CZ_DIV",
 | 
			
		||||
            "label": "÷",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_9))": {
 | 
			
		||||
            "key": "CZ_LDAQ",
 | 
			
		||||
            "label": "«",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_0))": {
 | 
			
		||||
            "key": "CZ_RDAQ",
 | 
			
		||||
            "label": "»",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_EQL))": {
 | 
			
		||||
            "key": "CZ_DCOM",
 | 
			
		||||
            "label": ", (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_ACUT))": {
 | 
			
		||||
            "key": "CZ_DHPN",
 | 
			
		||||
            "label": "- (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_W))": {
 | 
			
		||||
            "key": "CZ_CEDT",
 | 
			
		||||
            "label": "Ė",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_E))": {
 | 
			
		||||
            "key": "CZ_CEOG",
 | 
			
		||||
            "label": "Ę",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_R))": {
 | 
			
		||||
            "key": "CZ_REGD",
 | 
			
		||||
            "label": "®",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_T))": {
 | 
			
		||||
            "key": "CZ_TM",
 | 
			
		||||
            "label": "™",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_Z))": {
 | 
			
		||||
            "key": "CZ_CZDT",
 | 
			
		||||
            "label": "Ż",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_UACU))": {
 | 
			
		||||
            "key": "CZ_LSAQ",
 | 
			
		||||
            "label": "‹",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_RPRN))": {
 | 
			
		||||
            "key": "CZ_RSAQ",
 | 
			
		||||
            "label": "›",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_A))": {
 | 
			
		||||
            "key": "CZ_CAOG",
 | 
			
		||||
            "label": "Ą",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_S))": {
 | 
			
		||||
            "key": "CZ_NARS",
 | 
			
		||||
            "label": "∑",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_D))": {
 | 
			
		||||
            "key": "CZ_INCR",
 | 
			
		||||
            "label": "∆",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_H))": {
 | 
			
		||||
            "key": "CZ_LDQU",
 | 
			
		||||
            "label": "“",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_J))": {
 | 
			
		||||
            "key": "CZ_RDQU",
 | 
			
		||||
            "label": "”",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_L))": {
 | 
			
		||||
            "key": "CZ_CLST",
 | 
			
		||||
            "label": "Ł",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_URNG))": {
 | 
			
		||||
            "key": "CZ_ELLP",
 | 
			
		||||
            "label": "…",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_SECT))": {
 | 
			
		||||
            "key": "CZ_DTIL",
 | 
			
		||||
            "label": "~ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_DIAE))": {
 | 
			
		||||
            "key": "CZ_DDQT",
 | 
			
		||||
            "label": "\" (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_C))": {
 | 
			
		||||
            "key": "CZ_COPY",
 | 
			
		||||
            "label": "©",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_V))": {
 | 
			
		||||
            "key": "CZ_SQRT",
 | 
			
		||||
            "label": "√",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_N))": {
 | 
			
		||||
            "key": "CZ_DLQU",
 | 
			
		||||
            "label": "„",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_COMM))": {
 | 
			
		||||
            "key": "CZ_LEQL",
 | 
			
		||||
            "label": "≤",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_DOT))": {
 | 
			
		||||
            "key": "CZ_GEQL",
 | 
			
		||||
            "label": "≥",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(CZ_MINS))": {
 | 
			
		||||
            "key": "CZ_MDSH",
 | 
			
		||||
            "label": "—",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,359 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ½ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ + │ ´ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ Å │ ¨ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Æ │ Ø │ ' │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "DK_HALF",
 | 
			
		||||
            "label": "½",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "DK_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "DK_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "DK_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "DK_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "DK_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "DK_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "DK_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "DK_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "DK_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "DK_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "DK_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "DK_ACUT",
 | 
			
		||||
            "label": "´ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "DK_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "DK_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "DK_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "DK_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "DK_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "DK_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "DK_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "DK_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "DK_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "DK_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "DK_ARNG",
 | 
			
		||||
            "label": "Å",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "DK_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "DK_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "DK_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "DK_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "DK_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "DK_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "DK_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "DK_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "DK_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "DK_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "DK_AE",
 | 
			
		||||
            "label": "Æ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "DK_OSTR",
 | 
			
		||||
            "label": "Ø",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "DK_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "DK_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "DK_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "DK_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "DK_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "DK_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "DK_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "DK_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "DK_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "DK_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "DK_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "DK_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ § │ ! │ " │ # │ ¤ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │   │ ^ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │   │ * │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(DK_HALF)": {
 | 
			
		||||
            "key": "DK_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DK_1)": {
 | 
			
		||||
            "key": "DK_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DK_2)": {
 | 
			
		||||
            "key": "DK_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DK_3)": {
 | 
			
		||||
            "key": "DK_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DK_4)": {
 | 
			
		||||
            "key": "DK_CURR",
 | 
			
		||||
            "label": "¤",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DK_5)": {
 | 
			
		||||
            "key": "DK_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DK_6)": {
 | 
			
		||||
            "key": "DK_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DK_7)": {
 | 
			
		||||
            "key": "DK_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DK_8)": {
 | 
			
		||||
            "key": "DK_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DK_9)": {
 | 
			
		||||
            "key": "DK_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DK_0)": {
 | 
			
		||||
            "key": "DK_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DK_PLUS)": {
 | 
			
		||||
            "key": "DK_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DK_ACUT)": {
 | 
			
		||||
            "key": "DK_GRV",
 | 
			
		||||
            "label": "` (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DK_DIAE)": {
 | 
			
		||||
            "key": "DK_CIRC",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DK_QUOT)": {
 | 
			
		||||
            "key": "DK_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DK_LABK)": {
 | 
			
		||||
            "key": "DK_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DK_COMM)": {
 | 
			
		||||
            "key": "DK_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DK_DOT)": {
 | 
			
		||||
            "key": "DK_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DK_MINS)": {
 | 
			
		||||
            "key": "DK_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │   │   │ @ │ £ │ $ │ € │   │ { │ [ │ ] │ } │   │ | │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │   │ ~ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ \ │   │   │   │   │   │   │ µ │   │   │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(DK_2)": {
 | 
			
		||||
            "key": "DK_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DK_3)": {
 | 
			
		||||
            "key": "DK_PND",
 | 
			
		||||
            "label": "£",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DK_4)": {
 | 
			
		||||
            "key": "DK_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DK_5)": {
 | 
			
		||||
            "key": "DK_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DK_7)": {
 | 
			
		||||
            "key": "DK_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DK_8)": {
 | 
			
		||||
            "key": "DK_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DK_9)": {
 | 
			
		||||
            "key": "DK_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DK_0)": {
 | 
			
		||||
            "key": "DK_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DK_ACUT)": {
 | 
			
		||||
            "key": "DK_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DK_DIAE)": {
 | 
			
		||||
            "key": "DK_TILD",
 | 
			
		||||
            "label": "~ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DK_LABK)": {
 | 
			
		||||
            "key": "DK_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DK_M)": {
 | 
			
		||||
            "key": "DK_MICR",
 | 
			
		||||
            "label": "µ",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,302 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ [ │ ] │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ ' │ , │ . │ P │ Y │ F │ G │ C │ R │ L │ / │ = │  \  │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
 | 
			
		||||
 * │      │ A │ O │ E │ U │ I │ D │ H │ T │ N │ S │ - │        │
 | 
			
		||||
 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
 | 
			
		||||
 * │        │ ; │ Q │ J │ K │ X │ B │ M │ W │ V │ Z │          │
 | 
			
		||||
 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "DV_GRV",
 | 
			
		||||
            "label": "`",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "DV_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "DV_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "DV_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "DV_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "DV_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "DV_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "DV_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "DV_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "DV_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "DV_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "DV_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "DV_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "DV_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "DV_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "DV_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "DV_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "DV_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "DV_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "DV_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "DV_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "DV_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "DV_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "DV_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "DV_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_BSLS": {
 | 
			
		||||
            "key": "DV_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "DV_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "DV_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "DV_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "DV_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "DV_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "DV_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "DV_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "DV_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "DV_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "DV_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "DV_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "DV_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "DV_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "DV_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "DV_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "DV_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "DV_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "DV_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "DV_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "DV_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "DV_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ { │ } │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ " │ < │ > │   │   │   │   │   │   │   │ ? │ + │  |  │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │ _ │        │
 | 
			
		||||
 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
 | 
			
		||||
 * │        │ : │   │   │   │   │   │   │   │   │   │          │
 | 
			
		||||
 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(DV_GRV)": {
 | 
			
		||||
            "key": "DV_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_1)": {
 | 
			
		||||
            "key": "DV_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_2)": {
 | 
			
		||||
            "key": "DV_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_3)": {
 | 
			
		||||
            "key": "DV_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_4)": {
 | 
			
		||||
            "key": "DV_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_5)": {
 | 
			
		||||
            "key": "DV_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_6)": {
 | 
			
		||||
            "key": "DV_CIRC",
 | 
			
		||||
            "label": "^",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_7)": {
 | 
			
		||||
            "key": "DV_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_8)": {
 | 
			
		||||
            "key": "DV_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_9)": {
 | 
			
		||||
            "key": "DV_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_0)": {
 | 
			
		||||
            "key": "DV_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_LBRC)": {
 | 
			
		||||
            "key": "DV_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_RBRC)": {
 | 
			
		||||
            "key": "DV_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_QUOT)": {
 | 
			
		||||
            "key": "DV_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_COMM)": {
 | 
			
		||||
            "key": "DV_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_DOT)": {
 | 
			
		||||
            "key": "DV_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_SLSH)": {
 | 
			
		||||
            "key": "DV_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_EQL)": {
 | 
			
		||||
            "key": "DV_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_BSLS)": {
 | 
			
		||||
            "key": "DV_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_MINS)": {
 | 
			
		||||
            "key": "DV_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_SCLN)": {
 | 
			
		||||
            "key": "DV_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,317 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/* Dvorak for the French language
 | 
			
		||||
 * Version: 2
 | 
			
		||||
 *
 | 
			
		||||
 * The layout is designed by Francis Leboutte <dvorak-fr@algo.be>
 | 
			
		||||
 *
 | 
			
		||||
 * Source: https://algo.be/ergo/dvorak-fr.html
 | 
			
		||||
 */
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ « │ » │ / │ - │ è │ \ │ ^ │ ( │ ` │ ) │ _ │ [ │ ] │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ : │ ' │ é │ G │ . │ H │ V │ C │ M │ K │ Z │ ¨ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ O │ A │ U │ E │ B │ F │ S │ T │ N │ D │ W │ ~ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ à │ ; │ Q │ , │ I │ Y │ X │ R │ L │ P │ J │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "DV_LDAQ",
 | 
			
		||||
            "label": "«",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "DV_RDAQ",
 | 
			
		||||
            "label": "»",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "DV_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "DV_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "DV_EGRV",
 | 
			
		||||
            "label": "è",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "DV_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "DV_CIRC",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "DV_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "DV_GRV",
 | 
			
		||||
            "label": "` (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "DV_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "DV_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "DV_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "DV_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "DV_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "DV_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "DV_EACU",
 | 
			
		||||
            "label": "é",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "DV_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "DV_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "DV_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "DV_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "DV_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "DV_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "DV_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "DV_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "DV_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "DV_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "DV_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "DV_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "DV_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "DV_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "DV_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "DV_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "DV_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "DV_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "DV_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "DV_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "DV_TILD",
 | 
			
		||||
            "label": "~ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "DV_AGRV",
 | 
			
		||||
            "label": "à",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "DV_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "DV_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "DV_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "DV_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "DV_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "DV_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "DV_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "DV_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "DV_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "DV_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ * │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 0 │ 0 │ + │ % │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ ? │ < │ > │   │ ! │   │   │   │   │   │   │ = │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │   │ # │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ ç │ | │   │ @ │   │   │   │   │   │   │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(DV_LDAQ)": {
 | 
			
		||||
            "key": "DV_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_RDAQ)": {
 | 
			
		||||
            "key": "DV_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_SLSH)": {
 | 
			
		||||
            "key": "DV_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_MINS)": {
 | 
			
		||||
            "key": "DV_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_EGRV)": {
 | 
			
		||||
            "key": "DV_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_BSLS)": {
 | 
			
		||||
            "key": "DV_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_CIRC)": {
 | 
			
		||||
            "key": "DV_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_LPRN)": {
 | 
			
		||||
            "key": "DV_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_GRV)": {
 | 
			
		||||
            "key": "DV_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_RPRN)": {
 | 
			
		||||
            "key": "DV_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_UNDS)": {
 | 
			
		||||
            "key": "DV_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_LBRC)": {
 | 
			
		||||
            "key": "DV_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_RBRC)": {
 | 
			
		||||
            "key": "DV_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_COLN)": {
 | 
			
		||||
            "key": "DV_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_QUOT)": {
 | 
			
		||||
            "key": "DV_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_EACU)": {
 | 
			
		||||
            "key": "DV_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_DOT)": {
 | 
			
		||||
            "key": "DV_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_DIAE)": {
 | 
			
		||||
            "key": "DV_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_TILD)": {
 | 
			
		||||
            "key": "DV_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_AGRV)": {
 | 
			
		||||
            "key": "DV_CCED",
 | 
			
		||||
            "label": "ç",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_SCLN)": {
 | 
			
		||||
            "key": "DV_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DV_COMM)": {
 | 
			
		||||
            "key": "DV_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,302 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ $ │ & │ [ │ { │ } │ ( │ = │ * │ ) │ + │ ] │ ! │ # │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ ; │ , │ . │ P │ Y │ F │ G │ C │ R │ L │ / │ @ │  \  │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
 | 
			
		||||
 * │      │ A │ O │ E │ U │ I │ D │ H │ T │ N │ S │ - │        │
 | 
			
		||||
 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
 | 
			
		||||
 * │        │ ' │ Q │ J │ K │ X │ B │ M │ W │ V │ Z │          │
 | 
			
		||||
 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "DP_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "DP_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "DP_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "DP_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "DP_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "DP_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "DP_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "DP_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "DP_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "DP_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "DP_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "DP_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "DP_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "DP_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "DP_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "DP_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "DP_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "DP_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "DP_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "DP_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "DP_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "DP_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "DP_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "DP_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "DP_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_BSLS": {
 | 
			
		||||
            "key": "DP_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "DP_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "DP_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "DP_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "DP_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "DP_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "DP_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "DP_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "DP_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "DP_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "DP_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "DP_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "DP_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "DP_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "DP_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "DP_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "DP_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "DP_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "DP_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "DP_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "DP_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "DP_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ~ │ % │ 7 │ 5 │ 3 │ 1 │ 9 │ 0 │ 2 │ 4 │ 6 │ 8 │ ` │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ : │ < │ > │   │   │   │   │   │   │   │ ? │ ^ │  |  │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │ _ │        │
 | 
			
		||||
 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
 | 
			
		||||
 * │        │ " │   │   │   │   │   │   │   │   │   │          │
 | 
			
		||||
 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(DP_DLR)": {
 | 
			
		||||
            "key": "DP_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_AMPR)": {
 | 
			
		||||
            "key": "DP_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_LBRC)": {
 | 
			
		||||
            "key": "DP_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_LCBR)": {
 | 
			
		||||
            "key": "DP_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_RCBR)": {
 | 
			
		||||
            "key": "DP_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_LPRN)": {
 | 
			
		||||
            "key": "DP_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_EQL)": {
 | 
			
		||||
            "key": "DP_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_ASTR)": {
 | 
			
		||||
            "key": "DP_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_RPRN)": {
 | 
			
		||||
            "key": "DP_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_PLUS)": {
 | 
			
		||||
            "key": "DP_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_RBRC)": {
 | 
			
		||||
            "key": "DP_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_EXLM)": {
 | 
			
		||||
            "key": "DP_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_HASH)": {
 | 
			
		||||
            "key": "DP_GRV",
 | 
			
		||||
            "label": "`",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_SCLN)": {
 | 
			
		||||
            "key": "DP_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_COMM)": {
 | 
			
		||||
            "key": "DP_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_DOT)": {
 | 
			
		||||
            "key": "DP_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_SLSH)": {
 | 
			
		||||
            "key": "DP_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_AT)": {
 | 
			
		||||
            "key": "DP_CIRC",
 | 
			
		||||
            "label": "^",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_BSLS)": {
 | 
			
		||||
            "key": "DP_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_MINS)": {
 | 
			
		||||
            "key": "DP_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DP_QUOT)": {
 | 
			
		||||
            "key": "DP_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,367 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ˇ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ + │ ´ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ Ü │ Õ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ö │ Ä │ ' │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "EE_CARN",
 | 
			
		||||
            "label": "ˇ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "EE_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "EE_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "EE_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "EE_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "EE_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "EE_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "EE_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "EE_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "EE_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "EE_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "EE_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "EE_ACUT",
 | 
			
		||||
            "label": "´ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "EE_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "EE_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "EE_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "EE_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "EE_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "EE_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "EE_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "EE_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "EE_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "EE_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "EE_UDIA",
 | 
			
		||||
            "label": "Ü",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "EE_OTIL",
 | 
			
		||||
            "label": "Õ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "EE_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "EE_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "EE_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "EE_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "EE_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "EE_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "EE_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "EE_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "EE_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "EE_ODIA",
 | 
			
		||||
            "label": "Ö",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "EE_ADIA",
 | 
			
		||||
            "label": "Ä",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "EE_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "EE_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "EE_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "EE_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "EE_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "EE_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "EE_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "EE_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "EE_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "EE_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "EE_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "EE_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ~ │ ! │ " │ # │ ¤ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │   │   │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │   │ * │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(EE_CARN)": {
 | 
			
		||||
            "key": "EE_TILD",
 | 
			
		||||
            "label": "~ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EE_1)": {
 | 
			
		||||
            "key": "EE_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EE_2)": {
 | 
			
		||||
            "key": "EE_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EE_3)": {
 | 
			
		||||
            "key": "EE_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EE_4)": {
 | 
			
		||||
            "key": "EE_CURR",
 | 
			
		||||
            "label": "¤",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EE_5)": {
 | 
			
		||||
            "key": "EE_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EE_6)": {
 | 
			
		||||
            "key": "EE_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EE_7)": {
 | 
			
		||||
            "key": "EE_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EE_8)": {
 | 
			
		||||
            "key": "EE_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EE_9)": {
 | 
			
		||||
            "key": "EE_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EE_0)": {
 | 
			
		||||
            "key": "EE_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EE_PLUS)": {
 | 
			
		||||
            "key": "EE_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EE_ACUT)": {
 | 
			
		||||
            "key": "EE_GRV",
 | 
			
		||||
            "label": "` (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EE_QUOT)": {
 | 
			
		||||
            "key": "EE_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EE_LABK)": {
 | 
			
		||||
            "key": "EE_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EE_COMM)": {
 | 
			
		||||
            "key": "EE_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EE_DOT)": {
 | 
			
		||||
            "key": "EE_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EE_MINS)": {
 | 
			
		||||
            "key": "EE_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │   │   │ @ │ £ │ $ │ € │   │ { │ [ │ ] │ } │ \ │   │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │   │ § │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │ š │   │   │   │   │   │   │   │   │ ^ │ ½ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ | │ ž │   │   │   │   │   │   │   │   │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(EE_2)": {
 | 
			
		||||
            "key": "EE_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EE_3)": {
 | 
			
		||||
            "key": "EE_PND",
 | 
			
		||||
            "label": "£",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EE_4)": {
 | 
			
		||||
            "key": "EE_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EE_5)": {
 | 
			
		||||
            "key": "EE_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EE_7)": {
 | 
			
		||||
            "key": "EE_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EE_8)": {
 | 
			
		||||
            "key": "EE_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EE_9)": {
 | 
			
		||||
            "key": "EE_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EE_0)": {
 | 
			
		||||
            "key": "EE_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EE_PLUS)": {
 | 
			
		||||
            "key": "EE_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EE_OTIL)": {
 | 
			
		||||
            "key": "EE_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EE_S)": {
 | 
			
		||||
            "key": "EE_SCAR",
 | 
			
		||||
            "label": "š",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EE_ADIA)": {
 | 
			
		||||
            "key": "EE_CIRC",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EE_QUOT)": {
 | 
			
		||||
            "key": "EE_HALF",
 | 
			
		||||
            "label": "½",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EE_LABK)": {
 | 
			
		||||
            "key": "EE_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EE_Z)": {
 | 
			
		||||
            "key": "EE_ZCAR",
 | 
			
		||||
            "label": "ž",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,596 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │  \  │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
 | 
			
		||||
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │        │
 | 
			
		||||
 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
 | 
			
		||||
 * │        │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │          │
 | 
			
		||||
 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "EU_GRV",
 | 
			
		||||
            "label": "`",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "EU_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "EU_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "EU_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "EU_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "EU_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "EU_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "EU_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "EU_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "EU_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "EU_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "EU_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "EU_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "EU_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "EU_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "EU_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "EU_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "EU_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "EU_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "EU_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "EU_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "EU_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "EU_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "EU_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "EU_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_BSLS": {
 | 
			
		||||
            "key": "EU_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "EU_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "EU_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "EU_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "EU_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "EU_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "EU_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "EU_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "EU_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "EU_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "EU_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "EU_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "EU_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "EU_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "EU_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "EU_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "EU_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "EU_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "EU_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "EU_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "EU_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "EU_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │ { │ } │  |  │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │ : │ " │        │
 | 
			
		||||
 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
 | 
			
		||||
 * │        │   │   │   │   │   │   │   │ < │ > │ ? │          │
 | 
			
		||||
 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(EU_GRV)": {
 | 
			
		||||
            "key": "EU_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_1)": {
 | 
			
		||||
            "key": "EU_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_2)": {
 | 
			
		||||
            "key": "EU_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_3)": {
 | 
			
		||||
            "key": "EU_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_4)": {
 | 
			
		||||
            "key": "EU_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_5)": {
 | 
			
		||||
            "key": "EU_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_6)": {
 | 
			
		||||
            "key": "EU_CIRC",
 | 
			
		||||
            "label": "^",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_7)": {
 | 
			
		||||
            "key": "EU_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_8)": {
 | 
			
		||||
            "key": "EU_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_9)": {
 | 
			
		||||
            "key": "EU_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_0)": {
 | 
			
		||||
            "key": "EU_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_MINS)": {
 | 
			
		||||
            "key": "EU_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_EQL)": {
 | 
			
		||||
            "key": "EU_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_LBRC)": {
 | 
			
		||||
            "key": "EU_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_RBRC)": {
 | 
			
		||||
            "key": "EU_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_BSLS)": {
 | 
			
		||||
            "key": "EU_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_SCLN)": {
 | 
			
		||||
            "key": "EU_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_QUOT)": {
 | 
			
		||||
            "key": "EU_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_COMM)": {
 | 
			
		||||
            "key": "EU_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_DOT)": {
 | 
			
		||||
            "key": "EU_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_SLSH)": {
 | 
			
		||||
            "key": "EU_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ` │ ¡ │ ª │ º │ £ │ € │ ^ │ ˚ │ „ │ “ │ ” │ – │ × │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ æ │ å │ ë │ ý │ þ │ ÿ │ ü │ ï │ ö │ œ │ « │ » │  ¬  │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
 | 
			
		||||
 * │      │ ä │ ß │ ð │ è │ é │ ù │ ú │ ij │ ø │ ° │ ´ │        │
 | 
			
		||||
 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
 | 
			
		||||
 * │        │ à │ á │ ç │ ì │ í │ ñ │ μ │ ò │ ó │ ¿ │          │
 | 
			
		||||
 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(EU_GRV)": {
 | 
			
		||||
            "key": "EU_DGRV",
 | 
			
		||||
            "label": "` (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_1)": {
 | 
			
		||||
            "key": "EU_IEXL",
 | 
			
		||||
            "label": "¡",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_2)": {
 | 
			
		||||
            "key": "EU_FORD",
 | 
			
		||||
            "label": "ª",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_3)": {
 | 
			
		||||
            "key": "EU_MORD",
 | 
			
		||||
            "label": "º",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_4)": {
 | 
			
		||||
            "key": "EU_PND",
 | 
			
		||||
            "label": "£",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_5)": {
 | 
			
		||||
            "key": "EU_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_6)": {
 | 
			
		||||
            "key": "EU_DCIR",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_7)": {
 | 
			
		||||
            "key": "EU_RNGA",
 | 
			
		||||
            "label": "˚ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_8)": {
 | 
			
		||||
            "key": "EU_DLQU",
 | 
			
		||||
            "label": "„",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_9)": {
 | 
			
		||||
            "key": "EU_LDQU",
 | 
			
		||||
            "label": "“",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_0)": {
 | 
			
		||||
            "key": "EU_RDQU",
 | 
			
		||||
            "label": "”",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_MINS)": {
 | 
			
		||||
            "key": "EU_NDSH",
 | 
			
		||||
            "label": "–",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_EQL)": {
 | 
			
		||||
            "key": "EU_MUL",
 | 
			
		||||
            "label": "×",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_Q)": {
 | 
			
		||||
            "key": "EU_AE",
 | 
			
		||||
            "label": "æ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_W)": {
 | 
			
		||||
            "key": "EU_ARNG",
 | 
			
		||||
            "label": "Å",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_E)": {
 | 
			
		||||
            "key": "EU_EDIA",
 | 
			
		||||
            "label": "Ë",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_R)": {
 | 
			
		||||
            "key": "EU_YACU",
 | 
			
		||||
            "label": "Ý",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_T)": {
 | 
			
		||||
            "key": "EU_THRN",
 | 
			
		||||
            "label": "Þ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_Y)": {
 | 
			
		||||
            "key": "EU_YDIA",
 | 
			
		||||
            "label": "Ÿ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_U)": {
 | 
			
		||||
            "key": "EU_UDIA",
 | 
			
		||||
            "label": "Ü",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_I)": {
 | 
			
		||||
            "key": "EU_IDIA",
 | 
			
		||||
            "label": "Ï",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_O)": {
 | 
			
		||||
            "key": "EU_ODIA",
 | 
			
		||||
            "label": "Ö",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_P)": {
 | 
			
		||||
            "key": "EU_OE",
 | 
			
		||||
            "label": "Œ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_LBRC)": {
 | 
			
		||||
            "key": "EU_LDAQ",
 | 
			
		||||
            "label": "«",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_RBRC)": {
 | 
			
		||||
            "key": "EU_RDAQ",
 | 
			
		||||
            "label": "»",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_BSLS)": {
 | 
			
		||||
            "key": "EU_NOT",
 | 
			
		||||
            "label": "¬",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_A)": {
 | 
			
		||||
            "key": "EU_ADIA",
 | 
			
		||||
            "label": "Ä",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_S)": {
 | 
			
		||||
            "key": "EU_SS",
 | 
			
		||||
            "label": "ß",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_D)": {
 | 
			
		||||
            "key": "EU_ETH",
 | 
			
		||||
            "label": "Ð",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_F)": {
 | 
			
		||||
            "key": "EU_EGRV",
 | 
			
		||||
            "label": "È",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_G)": {
 | 
			
		||||
            "key": "EU_EACU",
 | 
			
		||||
            "label": "É",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_H)": {
 | 
			
		||||
            "key": "EU_UGRV",
 | 
			
		||||
            "label": "Ù",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_J)": {
 | 
			
		||||
            "key": "EU_UACU",
 | 
			
		||||
            "label": "Ú",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_K)": {
 | 
			
		||||
            "key": "EU_IJ",
 | 
			
		||||
            "label": "IJ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_L)": {
 | 
			
		||||
            "key": "EU_OSTR",
 | 
			
		||||
            "label": "Ø",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_SCLN)": {
 | 
			
		||||
            "key": "EU_DEG",
 | 
			
		||||
            "label": "°",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_QUOT)": {
 | 
			
		||||
            "key": "EU_ACUT",
 | 
			
		||||
            "label": "´ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_Z)": {
 | 
			
		||||
            "key": "EU_AGRV",
 | 
			
		||||
            "label": "À",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_X)": {
 | 
			
		||||
            "key": "EU_AACU",
 | 
			
		||||
            "label": "Á",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_C)": {
 | 
			
		||||
            "key": "EU_CCED",
 | 
			
		||||
            "label": "Ç",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_V)": {
 | 
			
		||||
            "key": "EU_IGRV",
 | 
			
		||||
            "label": "Ì",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_B)": {
 | 
			
		||||
            "key": "EU_IACU",
 | 
			
		||||
            "label": "Í",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_N)": {
 | 
			
		||||
            "key": "EU_NTIL",
 | 
			
		||||
            "label": "Ñ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_M)": {
 | 
			
		||||
            "key": "EU_DGRK",
 | 
			
		||||
            "label": "μ (dead Greek key)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_COMM)": {
 | 
			
		||||
            "key": "EU_OGRV",
 | 
			
		||||
            "label": "Ò",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_DOT)": {
 | 
			
		||||
            "key": "EU_OACU",
 | 
			
		||||
            "label": "Ó",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_SLSH)": {
 | 
			
		||||
            "key": "EU_IQUE",
 | 
			
		||||
            "label": "¿",
 | 
			
		||||
        }
 | 
			
		||||
/* Shift+AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ~ │ ¹ │ ² │ ³ │ ¥ │ ¢ │ ˇ │ ¯ │ ‚ │ ‘ │ ’ │ — │ ÷ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │ ‹ │ › │  ¦  │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
 | 
			
		||||
 * │      │   │ § │   │   │   │   │   │   │   │ · │ ¨ │        │
 | 
			
		||||
 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
 | 
			
		||||
 * │        │   │   │   │   │   │   │   │   │   │ … │          │
 | 
			
		||||
 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(EU_TILD)": {
 | 
			
		||||
            "key": "EU_DTIL",
 | 
			
		||||
            "label": "~ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(EU_1))": {
 | 
			
		||||
            "key": "EU_SUP1",
 | 
			
		||||
            "label": "¹",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(EU_2))": {
 | 
			
		||||
            "key": "EU_SUP2",
 | 
			
		||||
            "label": "²",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(EU_3))": {
 | 
			
		||||
            "key": "EU_SUP3",
 | 
			
		||||
            "label": "³",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_DLR)": {
 | 
			
		||||
            "key": "EU_YEN",
 | 
			
		||||
            "label": "¥",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_EURO)": {
 | 
			
		||||
            "key": "EU_CENT",
 | 
			
		||||
            "label": "¢",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_DCIR)": {
 | 
			
		||||
            "key": "EU_CARN",
 | 
			
		||||
            "label": "ˇ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(EU_7))": {
 | 
			
		||||
            "key": "EU_MACR",
 | 
			
		||||
            "label": "¯ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_DLQU)": {
 | 
			
		||||
            "key": "EU_SLQU",
 | 
			
		||||
            "label": "‚",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_LDQU)": {
 | 
			
		||||
            "key": "EU_LSQU",
 | 
			
		||||
            "label": "‘",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_RDQU)": {
 | 
			
		||||
            "key": "EU_RSQU",
 | 
			
		||||
            "label": "’",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_NDSH)": {
 | 
			
		||||
            "key": "EU_MDSH",
 | 
			
		||||
            "label": "—",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_MUL)": {
 | 
			
		||||
            "key": "EU_DIV",
 | 
			
		||||
            "label": "÷",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_LDAQ)": {
 | 
			
		||||
            "key": "EU_LSAQ",
 | 
			
		||||
            "label": "‹",
 | 
			
		||||
        }
 | 
			
		||||
        "S(EU_RDAQ)": {
 | 
			
		||||
            "key": "EU_RSAQ",
 | 
			
		||||
            "label": "›",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(EU_BSLS))": {
 | 
			
		||||
            "key": "EU_BRKP",
 | 
			
		||||
            "label": "¦",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(EU_S))": {
 | 
			
		||||
            "key": "EU_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(EU_SCLN))": {
 | 
			
		||||
            "key": "EU_MDDT",
 | 
			
		||||
            "label": "·",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_DQUO)": {
 | 
			
		||||
            "key": "EU_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(EU_QUES)": {
 | 
			
		||||
            "key": "EU_ELLP",
 | 
			
		||||
            "label": "…",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,616 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │   │ ۱ │ ۲ │ ۳ │ ۴ │ ۵ │ ۶ │ ۷ │ ۸ │ ۹ │ ۰ │ - │ = │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ ض │ ص │ ث │ ق │ ف │ غ │ ع │ ه │ خ │ ح │ ج │ چ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ ش │ س │ ی │ ب │ ل │ ا │ ت │ ن │ م │ ک │ گ │ \ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ < │ ظ │ ط │ ز │ ر │ ذ │ د │ پ │ و │ . │ / │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "FA_ZWJ",
 | 
			
		||||
            "label": "(zero-width joiner)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "FA_1A",
 | 
			
		||||
            "label": "۱",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "FA_2A",
 | 
			
		||||
            "label": "۲",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "FA_3A",
 | 
			
		||||
            "label": "۳",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "FA_4A",
 | 
			
		||||
            "label": "۴",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "FA_5A",
 | 
			
		||||
            "label": "۵",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "FA_6A",
 | 
			
		||||
            "label": "۶",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "FA_7A",
 | 
			
		||||
            "label": "۷",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "FA_8A",
 | 
			
		||||
            "label": "۸",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "FA_9A",
 | 
			
		||||
            "label": "۹",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "FA_0A",
 | 
			
		||||
            "label": "۰",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "FA_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "FA_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "FA_ZAD",
 | 
			
		||||
            "label": "ض",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "FA_SAD",
 | 
			
		||||
            "label": "ص",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "FA_SE",
 | 
			
		||||
            "label": "ث",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "FA_QAF",
 | 
			
		||||
            "label": "ق",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "FA_FE",
 | 
			
		||||
            "label": "ف",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "FA_GHYN",
 | 
			
		||||
            "label": "غ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "FA_EYN",
 | 
			
		||||
            "label": "ع",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "FA_HE",
 | 
			
		||||
            "label": "ه",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "FA_KHE",
 | 
			
		||||
            "label": "خ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "FA_HEJ",
 | 
			
		||||
            "label": "ح",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "FA_JIM",
 | 
			
		||||
            "label": "ج",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "FA_CHE",
 | 
			
		||||
            "label": "چ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "FA_SHIN",
 | 
			
		||||
            "label": "ش",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "FA_SIN",
 | 
			
		||||
            "label": "س",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "FA_YE",
 | 
			
		||||
            "label": "ی",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "FA_BE",
 | 
			
		||||
            "label": "ب",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "FA_LAM",
 | 
			
		||||
            "label": "ل",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "FA_ALEF",
 | 
			
		||||
            "label": "ا",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "FA_TE",
 | 
			
		||||
            "label": "ت",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "FA_NOON",
 | 
			
		||||
            "label": "ن",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "FA_MIM",
 | 
			
		||||
            "label": "م",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "FA_KAF",
 | 
			
		||||
            "label": "ک",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "FA_GAF",
 | 
			
		||||
            "label": "گ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_BSLS": {
 | 
			
		||||
            "key": "FA_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LT": {
 | 
			
		||||
            "key": "FA_LT",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "FA_ZA",
 | 
			
		||||
            "label": "ظ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "FA_TA",
 | 
			
		||||
            "label": "ط",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "FA_ZE",
 | 
			
		||||
            "label": "ز",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "FA_RE",
 | 
			
		||||
            "label": "ر",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "FA_ZAL",
 | 
			
		||||
            "label": "ذ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "FA_DAL",
 | 
			
		||||
            "label": "د",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "FA_PE",
 | 
			
		||||
            "label": "پ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "FA_WAW",
 | 
			
		||||
            "label": "و",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "FA_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "FA_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SPC": {
 | 
			
		||||
            "key": "FA_SPC",
 | 
			
		||||
            "label": " ",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ÷ │ ! │ ٬ │ ٫ │ ﷼ │ ٪ │ × │ ، │ * │ ) │ ( │ ـ │ + │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │  ْ │  ٌ │  ٍ │  ً │  ُ │  ِ │  َ │  ّ │ ] │ [ │ } │ { │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ ؤ │ ئ │ ي │ إ │ أ │ آ │ ة │ » │ « │ : │ ؛ │ | │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ > │ ك │  ٓ │ ژ │ ٰ  │   │  ٔ │ ء │   │   │ ؟ │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(FA_ZWJ)": {
 | 
			
		||||
            "key": "FA_DIV",
 | 
			
		||||
            "label": "÷",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_1A)": {
 | 
			
		||||
            "key": "FA_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_2A)": {
 | 
			
		||||
            "key": "FA_THS",
 | 
			
		||||
            "label": "٬",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_3A)": {
 | 
			
		||||
            "key": "FA_DECS",
 | 
			
		||||
            "label": "٫",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_4A)": {
 | 
			
		||||
            "key": "FA_RIAL",
 | 
			
		||||
            "label": "﷼",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_5A)": {
 | 
			
		||||
            "key": "FA_PRCA",
 | 
			
		||||
            "label": "٪",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_6A)": {
 | 
			
		||||
            "key": "FA_MUL",
 | 
			
		||||
            "label": "×",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_7A)": {
 | 
			
		||||
            "key": "FA_COMA",
 | 
			
		||||
            "label": "،",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_8A)": {
 | 
			
		||||
            "key": "FA_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_9A)": {
 | 
			
		||||
            "key": "FA_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_0A)": {
 | 
			
		||||
            "key": "FA_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_MINS)": {
 | 
			
		||||
            "key": "FA_TATW",
 | 
			
		||||
            "label": "ـ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_EQL)": {
 | 
			
		||||
            "key": "FA_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_ZAD)": {
 | 
			
		||||
            "key": "FA_SUK",
 | 
			
		||||
            "label": "ْ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_SAD)": {
 | 
			
		||||
            "key": "FA_DMTN",
 | 
			
		||||
            "label": "ٌ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_SE)": {
 | 
			
		||||
            "key": "FA_KSTN",
 | 
			
		||||
            "label": "ٍ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_QAF)": {
 | 
			
		||||
            "key": "FA_FTHN",
 | 
			
		||||
            "label": "ً",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_FE)": {
 | 
			
		||||
            "key": "FA_DMM",
 | 
			
		||||
            "label": "ُ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_GHYN)": {
 | 
			
		||||
            "key": "FA_KAS",
 | 
			
		||||
            "label": "ِ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_EYN)": {
 | 
			
		||||
            "key": "FA_FAT",
 | 
			
		||||
            "label": "َ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_HE)": {
 | 
			
		||||
            "key": "FA_TSDD",
 | 
			
		||||
            "label": "",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_KHE)": {
 | 
			
		||||
            "key": "FA_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_HEJ)": {
 | 
			
		||||
            "key": "FA_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_JIM)": {
 | 
			
		||||
            "key": "FA_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_CHE)": {
 | 
			
		||||
            "key": "FA_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_SHIN)": {
 | 
			
		||||
            "key": "FA_HMZV",
 | 
			
		||||
            "label": "ؤ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_SIN)": {
 | 
			
		||||
            "key": "FA_HMZY",
 | 
			
		||||
            "label": "ئ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_YE)": {
 | 
			
		||||
            "key": "FA_YEA",
 | 
			
		||||
            "label": "ي",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_BE)": {
 | 
			
		||||
            "key": "FA_HMZU",
 | 
			
		||||
            "label": "إ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_LAM)": {
 | 
			
		||||
            "key": "FA_HMZO",
 | 
			
		||||
            "label": "أ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_ALEF)": {
 | 
			
		||||
            "key": "FA_MALF",
 | 
			
		||||
            "label": "آ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_TE)": {
 | 
			
		||||
            "key": "FA_TEHM",
 | 
			
		||||
            "label": "ة",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_NOON)": {
 | 
			
		||||
            "key": "FA_RQOT",
 | 
			
		||||
            "label": "»",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_MIM)": {
 | 
			
		||||
            "key": "FA_LQOT",
 | 
			
		||||
            "label": "«",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_KAF)": {
 | 
			
		||||
            "key": "FA_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_GAF)": {
 | 
			
		||||
            "key": "FA_SCLA",
 | 
			
		||||
            "label": "؛",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_LT)": {
 | 
			
		||||
            "key": "FA_GT",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_ZA)": {
 | 
			
		||||
            "key": "FA_KAFA",
 | 
			
		||||
            "label": "ك",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_TA)": {
 | 
			
		||||
            "key": "FA_MADO",
 | 
			
		||||
            "label": "ٓ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_ZE)": {
 | 
			
		||||
            "key": "FA_JEH",
 | 
			
		||||
            "label": "ژ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_RE)": {
 | 
			
		||||
            "key": "FA_SUPA",
 | 
			
		||||
            "label": "ٰ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_ZAL)": {
 | 
			
		||||
            "key": "FA_ZWNJ",
 | 
			
		||||
            "label": "(zero-width non-joiner)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_DAL)": {
 | 
			
		||||
            "key": "FA_HMZA",
 | 
			
		||||
            "label": "ٔ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_PE)": {
 | 
			
		||||
            "key": "FA_HMZ",
 | 
			
		||||
            "label": "ء",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FA_SLSH)": {
 | 
			
		||||
            "key": "FA_QSA",
 | 
			
		||||
            "label": "؟",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ~ │ ` │ @ │ # │ $ │ % │ ^ │ & │ • │   │   │ _ │ − │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ ° │   │ € │   │   │   │   │   │   │   │   │   │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │ ى │   │   │ ٱ │   │ ﴾ │ ﴿ │ ; │ " │ ‐ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ | │   │   │   │  ٖ │   │  ٕ │ … │ , │ ' │ ? │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(FA_ZWJ)": {
 | 
			
		||||
            "key": "FA_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_1A)": {
 | 
			
		||||
            "key": "FA_GRV",
 | 
			
		||||
            "label": "`",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_2A)": {
 | 
			
		||||
            "key": "FA_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_3A)": {
 | 
			
		||||
            "key": "FA_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_4A)": {
 | 
			
		||||
            "key": "FA_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_5A)": {
 | 
			
		||||
            "key": "FA_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_6A)": {
 | 
			
		||||
            "key": "FA_CIRC",
 | 
			
		||||
            "label": "^",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_7A)": {
 | 
			
		||||
            "key": "FA_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_8A)": {
 | 
			
		||||
            "key": "FA_BULT",
 | 
			
		||||
            "label": "•",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_9A)": {
 | 
			
		||||
            "key": "FA_LRM",
 | 
			
		||||
            "label": "(left-to-right mark)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_0A)": {
 | 
			
		||||
            "key": "FA_RLM",
 | 
			
		||||
            "label": "(right-to-left mark)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_MINS)": {
 | 
			
		||||
            "key": "FA_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_EQL)": {
 | 
			
		||||
            "key": "FA_DMNS",
 | 
			
		||||
            "label": "− (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_ZAD)": {
 | 
			
		||||
            "key": "FA_DEG",
 | 
			
		||||
            "label": "°",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_SE)": {
 | 
			
		||||
            "key": "FA_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_HE)": {
 | 
			
		||||
            "key": "FA_LRO",
 | 
			
		||||
            "label": "(left-to-right override)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_KHE)": {
 | 
			
		||||
            "key": "FA_RLO",
 | 
			
		||||
            "label": "(right-to-left override)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_HEJ)": {
 | 
			
		||||
            "key": "FA_PDF",
 | 
			
		||||
            "label": "(pop directional formatting)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_JIM)": {
 | 
			
		||||
            "key": "FA_LRE",
 | 
			
		||||
            "label": "(left-to-right embedding)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_CHE)": {
 | 
			
		||||
            "key": "FA_RLE",
 | 
			
		||||
            "label": "(right-to-left embedding)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_YE)": {
 | 
			
		||||
            "key": "FA_ALFM",
 | 
			
		||||
            "label": "ى",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_ALEF)": {
 | 
			
		||||
            "key": "FA_ALFW",
 | 
			
		||||
            "label": "ٱ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_NOON)": {
 | 
			
		||||
            "key": "FA_LORP",
 | 
			
		||||
            "label": "﴾",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_MIM)": {
 | 
			
		||||
            "key": "FA_RORP",
 | 
			
		||||
            "label": "﴿",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_KAF)": {
 | 
			
		||||
            "key": "FA_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_GAF)": {
 | 
			
		||||
            "key": "FA_DQT",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_BSLS)": {
 | 
			
		||||
            "key": "FA_MINA",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_ZA)": {
 | 
			
		||||
            "key": "FA_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_RE)": {
 | 
			
		||||
            "key": "FA_SUBA",
 | 
			
		||||
            "label": "ٖ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_DAL)": {
 | 
			
		||||
            "key": "FA_HMZB",
 | 
			
		||||
            "label": "ء",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_PE)": {
 | 
			
		||||
            "key": "FA_ELLP",
 | 
			
		||||
            "label": "…",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_WAW)": {
 | 
			
		||||
            "key": "FA_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_DOT)": {
 | 
			
		||||
            "key": "FA_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FA_SLSH)": {
 | 
			
		||||
            "key": "FA_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
/* Shift+AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │   │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │   │   │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │   │   │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ ¦ │   │   │   │   │   │   │   │   │   │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(ALGR(FA_1A))": {
 | 
			
		||||
            "key": "FA_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FA_2A))": {
 | 
			
		||||
            "key": "FA_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FA_3A))": {
 | 
			
		||||
            "key": "FA_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FA_4A))": {
 | 
			
		||||
            "key": "FA_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FA_5A))": {
 | 
			
		||||
            "key": "FA_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FA_6A))": {
 | 
			
		||||
            "key": "FA_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FA_7A))": {
 | 
			
		||||
            "key": "FA_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FA_8A))": {
 | 
			
		||||
            "key": "FA_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FA_9A))": {
 | 
			
		||||
            "key": "FA_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FA_0A))": {
 | 
			
		||||
            "key": "FA_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FA_LT))": {
 | 
			
		||||
            "key": "FA_BRKP",
 | 
			
		||||
            "label": "¦",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FA_SPC))": {
 | 
			
		||||
            "key": "FA_NNBS",
 | 
			
		||||
            "label": "(narrow non-breaking space)",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,359 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ § │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ + │ ´ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ Å │ ¨ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ö │ Ä │ ' │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "FI_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "FI_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "FI_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "FI_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "FI_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "FI_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "FI_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "FI_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "FI_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "FI_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "FI_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "FI_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "FI_ACUT",
 | 
			
		||||
            "label": "´ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "FI_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "FI_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "FI_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "FI_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "FI_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "FI_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "FI_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "FI_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "FI_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "FI_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "FI_ARNG",
 | 
			
		||||
            "label": "Å",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "FI_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "FI_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "FI_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "FI_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "FI_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "FI_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "FI_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "FI_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "FI_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "FI_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "FI_ODIA",
 | 
			
		||||
            "label": "Ö",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "FI_ADIA",
 | 
			
		||||
            "label": "Ä",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "FI_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "FI_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "FI_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "FI_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "FI_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "FI_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "FI_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "FI_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "FI_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "FI_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "FI_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "FI_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ½ │ ! │ " │ # │ ¤ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │   │ ^ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │   │ * │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(FI_SECT)": {
 | 
			
		||||
            "key": "FI_HALF",
 | 
			
		||||
            "label": "½",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FI_1)": {
 | 
			
		||||
            "key": "FI_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FI_2)": {
 | 
			
		||||
            "key": "FI_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FI_3)": {
 | 
			
		||||
            "key": "FI_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FI_4)": {
 | 
			
		||||
            "key": "FI_CURR",
 | 
			
		||||
            "label": "¤",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FI_5)": {
 | 
			
		||||
            "key": "FI_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FI_6)": {
 | 
			
		||||
            "key": "FI_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FI_7)": {
 | 
			
		||||
            "key": "FI_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FI_8)": {
 | 
			
		||||
            "key": "FI_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FI_9)": {
 | 
			
		||||
            "key": "FI_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FI_0)": {
 | 
			
		||||
            "key": "FI_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FI_PLUS)": {
 | 
			
		||||
            "key": "FI_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FI_ACUT)": {
 | 
			
		||||
            "key": "FI_GRV",
 | 
			
		||||
            "label": "` (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FI_DIAE)": {
 | 
			
		||||
            "key": "FI_CIRC",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FI_QUOT)": {
 | 
			
		||||
            "key": "FI_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FI_LABK)": {
 | 
			
		||||
            "key": "FI_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FI_COMM)": {
 | 
			
		||||
            "key": "FI_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FI_DOT)": {
 | 
			
		||||
            "key": "FI_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FI_MINS)": {
 | 
			
		||||
            "key": "FI_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │   │   │ @ │ £ │ $ │ € │   │ { │ [ │ ] │ } │ \ │   │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │   │ ~ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ | │   │   │   │   │   │   │ µ │   │   │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(FI_2)": {
 | 
			
		||||
            "key": "FI_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FI_3)": {
 | 
			
		||||
            "key": "FI_PND",
 | 
			
		||||
            "label": "£",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FI_4)": {
 | 
			
		||||
            "key": "FI_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FI_5)": {
 | 
			
		||||
            "key": "FI_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FI_7)": {
 | 
			
		||||
            "key": "FI_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FI_8)": {
 | 
			
		||||
            "key": "FI_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FI_9)": {
 | 
			
		||||
            "key": "FI_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FI_0)": {
 | 
			
		||||
            "key": "FI_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FI_PLUS)": {
 | 
			
		||||
            "key": "FI_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FI_DIAE)": {
 | 
			
		||||
            "key": "FI_TILD",
 | 
			
		||||
            "label": "~ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FI_LABK)": {
 | 
			
		||||
            "key": "FI_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FI_M)": {
 | 
			
		||||
            "key": "FI_MICR",
 | 
			
		||||
            "label": "µ",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,367 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ² │ & │ é │ " │ ' │ ( │ - │ è │ _ │ ç │ à │ ) │ = │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ A │ Z │ E │ R │ T │ Y │ U │ I │ O │ P │ ^ │ $ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ Q │ S │ D │ F │ G │ H │ J │ K │ L │ M │ ù │ * │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ < │ W │ X │ C │ V │ B │ N │ , │ ; │ : │ ! │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "FR_SUP2",
 | 
			
		||||
            "label": "²",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "FR_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "FR_EACU",
 | 
			
		||||
            "label": "é",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "FR_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "FR_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "FR_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "FR_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "FR_EGRV",
 | 
			
		||||
            "label": "è",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "FR_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "FR_CCED",
 | 
			
		||||
            "label": "ç",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "FR_AGRV",
 | 
			
		||||
            "label": "à",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "FR_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "FR_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "FR_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "FR_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "FR_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "FR_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "FR_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "FR_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "FR_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "FR_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "FR_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "FR_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "FR_CIRC",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "FR_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "FR_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "FR_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "FR_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "FR_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "FR_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "FR_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "FR_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "FR_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "FR_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "FR_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "FR_UGRV",
 | 
			
		||||
            "label": "ù",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "FR_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "FR_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "FR_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "FR_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "FR_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "FR_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "FR_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "FR_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "FR_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "FR_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "FR_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "FR_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │   │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ° │ + │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │ ¨ │ £ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │ % │ µ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ > │   │   │   │   │   │   │ ? │ . │ / │ § │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(FR_AMPR)": {
 | 
			
		||||
            "key": "FR_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_EACU)": {
 | 
			
		||||
            "key": "FR_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_DQUO)": {
 | 
			
		||||
            "key": "FR_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_QUOT)": {
 | 
			
		||||
            "key": "FR_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_LPRN)": {
 | 
			
		||||
            "key": "FR_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_MINS)": {
 | 
			
		||||
            "key": "FR_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_EGRV)": {
 | 
			
		||||
            "key": "FR_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_UNDS)": {
 | 
			
		||||
            "key": "FR_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_CCED)": {
 | 
			
		||||
            "key": "FR_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_AGRV)": {
 | 
			
		||||
            "key": "FR_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_RPRN)": {
 | 
			
		||||
            "key": "FR_DEG",
 | 
			
		||||
            "label": "°",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_EQL)": {
 | 
			
		||||
            "key": "FR_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_CIRC)": {
 | 
			
		||||
            "key": "FR_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_DLR)": {
 | 
			
		||||
            "key": "FR_PND",
 | 
			
		||||
            "label": "£",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_UGRV)": {
 | 
			
		||||
            "key": "FR_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_ASTR)": {
 | 
			
		||||
            "key": "FR_MICR",
 | 
			
		||||
            "label": "µ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_LABK)": {
 | 
			
		||||
            "key": "FR_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_COMM)": {
 | 
			
		||||
            "key": "FR_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_SCLN)": {
 | 
			
		||||
            "key": "FR_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_COLN)": {
 | 
			
		||||
            "key": "FR_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_EXLM)": {
 | 
			
		||||
            "key": "FR_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │   │   │ ~ │ # │ { │ [ │ | │ ` │ \ │   │ @ │ ] │ } │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │ € │   │   │   │   │   │   │   │   │ ¤ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │   │   │   │   │   │   │   │   │   │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(FR_EACU)": {
 | 
			
		||||
            "key": "FR_TILD",
 | 
			
		||||
            "label": "~ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_DQUO)": {
 | 
			
		||||
            "key": "FR_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_QUOT)": {
 | 
			
		||||
            "key": "FR_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_LPRN)": {
 | 
			
		||||
            "key": "FR_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_MINS)": {
 | 
			
		||||
            "key": "FR_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_EGRV)": {
 | 
			
		||||
            "key": "FR_GRV",
 | 
			
		||||
            "label": "` (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_UNDS)": {
 | 
			
		||||
            "key": "FR_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_AGRV)": {
 | 
			
		||||
            "key": "FR_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_RPRN)": {
 | 
			
		||||
            "key": "FR_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_EQL)": {
 | 
			
		||||
            "key": "FR_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(KC_E)": {
 | 
			
		||||
            "key": "FR_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_DLR)": {
 | 
			
		||||
            "key": "FR_CURR",
 | 
			
		||||
            "label": "¤",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,623 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/* French AZERTY - AFNOR NF Z71-300
 | 
			
		||||
 *
 | 
			
		||||
 * A standard for the French keyboard
 | 
			
		||||
 *
 | 
			
		||||
 * The project was launched at the end of 2015 on the proposal of the General
 | 
			
		||||
 * Delegation for the French language and the languages of France (Ministry
 | 
			
		||||
 * of Culture), starting from the observation that the current "azerty"
 | 
			
		||||
 * keyboards constrain the writing of French, languages regional and European
 | 
			
		||||
 * languages with Latin alphabet.
 | 
			
		||||
 *
 | 
			
		||||
 * For the first time, a standard (NF Z71-300) defines the placement of
 | 
			
		||||
 * characters on the French keyboard. It offers two layouts, one of which
 | 
			
		||||
 * closely follows the QWERTY keyboard used by most people who write in French.
 | 
			
		||||
 *
 | 
			
		||||
 * However, it is in many ways superior to the old keyboard:
 | 
			
		||||
 *
 | 
			
		||||
 * - it contains all the characters required to enter text in French (for example É, œ and ")
 | 
			
		||||
 * - it is designed to be more ergonomic and allow faster typing
 | 
			
		||||
 * - it includes almost 60 additional characters for entering foreign languages, technical content, etc
 | 
			
		||||
 * - however, the characters remain easy to locate thanks to intuitive groupings
 | 
			
		||||
 *
 | 
			
		||||
 * Source: https://norme-azerty.fr
 | 
			
		||||
 */
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ @ │ à │ é │ è │ ê │ ( │ ) │ ‘ │ ’ │ « │ » │ ' │ ^ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ A │ Z │ E │ R │ T │ Y │ U │ I │ O │ P │ - │ + │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ Q │ S │ D │ F │ G │ H │ J │ K │ L │ M │ / │ * │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ < │ W │ X │ C │ V │ B │ N │ . │ , │ : │ ; │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "FR_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "FR_AGRV",
 | 
			
		||||
            "label": "à",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "FR_EACU",
 | 
			
		||||
            "label": "é",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "FR_EGRV",
 | 
			
		||||
            "label": "è",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "FR_ECIR",
 | 
			
		||||
            "label": "ê",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "FR_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "FR_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "FR_LSQU",
 | 
			
		||||
            "label": "‘",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "FR_RSQU",
 | 
			
		||||
            "label": "’",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "FR_LDAQ",
 | 
			
		||||
            "label": "«",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "FR_RDAQ",
 | 
			
		||||
            "label": "»",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "FR_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "FR_DCIR",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "FR_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "FR_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "FR_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "FR_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "FR_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "FR_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "FR_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "FR_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "FR_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "FR_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "FR_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "FR_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "FR_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "FR_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "FR_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "FR_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "FR_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "FR_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "FR_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "FR_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "FR_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "FR_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "FR_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "FR_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "FR_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "FR_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "FR_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "FR_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "FR_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "FR_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "FR_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "FR_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "FR_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "FR_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "FR_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ # │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ " │ ¨ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │ – │ ± │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │ \ │ ½ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ > │   │   │   │   │   │   │ ? │ ! │ … │ = │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(FR_AT)": {
 | 
			
		||||
            "key": "FR_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_AGRV)": {
 | 
			
		||||
            "key": "FR_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_EACU)": {
 | 
			
		||||
            "key": "FR_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_EGRV)": {
 | 
			
		||||
            "key": "FR_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_ECIR)": {
 | 
			
		||||
            "key": "FR_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_LPRN)": {
 | 
			
		||||
            "key": "FR_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_RPRN)": {
 | 
			
		||||
            "key": "FR_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_LSQU)": {
 | 
			
		||||
            "key": "FR_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_RSQU)": {
 | 
			
		||||
            "key": "FR_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_LDAQ)": {
 | 
			
		||||
            "key": "FR_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_RDAQ)": {
 | 
			
		||||
            "key": "FR_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_QUOT)": {
 | 
			
		||||
            "key": "FR_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_DCIR)": {
 | 
			
		||||
            "key": "FR_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_MINS)": {
 | 
			
		||||
            "key": "FR_NDSH",
 | 
			
		||||
            "label": "–",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_PLUS)": {
 | 
			
		||||
            "key": "FR_PLMN",
 | 
			
		||||
            "label": "±",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_SLSH)": {
 | 
			
		||||
            "key": "FR_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_ASTR)": {
 | 
			
		||||
            "key": "FR_HALF",
 | 
			
		||||
            "label": "½",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_LABK)": {
 | 
			
		||||
            "key": "FR_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_DOT)": {
 | 
			
		||||
            "key": "FR_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_COMM)": {
 | 
			
		||||
            "key": "FR_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_COLN)": {
 | 
			
		||||
            "key": "FR_ELLP",
 | 
			
		||||
            "label": "…",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_SCLN)": {
 | 
			
		||||
            "key": "FR_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ˘ │ § │ ´ │ ` │ & │ [ │ ] │ ¯ │ _ │ “ │ ” │ ° │ ˇ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ æ │ £ │ € │ ® │ { │ } │ ù │ ˙ │ œ │ % │ − │ † │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ θ │ ß │ $ │ ¤ │ µ │ Eu│   │ ∕ │ | │ ∞ │ ÷ │ × │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ ≤ │ ʒ │ © │ ç │ ¸ │ − │ ~ │ ¿ │ ¡ │ · │ ≃ │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(FR_AT)": {
 | 
			
		||||
            "key": "FR_BREV",
 | 
			
		||||
            "label": "˘ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_AGRV)": {
 | 
			
		||||
            "key": "FR_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_EACU)": {
 | 
			
		||||
            "key": "FR_ACUT",
 | 
			
		||||
            "label": "´ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_EGRV)": {
 | 
			
		||||
            "key": "FR_GRV",
 | 
			
		||||
            "label": "` (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_ECIR)": {
 | 
			
		||||
            "key": "FR_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_LPRN)": {
 | 
			
		||||
            "key": "FR_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_RPRN)": {
 | 
			
		||||
            "key": "FR_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_LSQU)": {
 | 
			
		||||
            "key": "FR_MACR",
 | 
			
		||||
            "label": "¯ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_RSQU)": {
 | 
			
		||||
            "key": "FR_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_LDAQ)": {
 | 
			
		||||
            "key": "FR_LDQU",
 | 
			
		||||
            "label": "“",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_RDAQ)": {
 | 
			
		||||
            "key": "FR_RDQU",
 | 
			
		||||
            "label": "”",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_QUOT)": {
 | 
			
		||||
            "key": "FR_DEG",
 | 
			
		||||
            "label": "°",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_DCIR)": {
 | 
			
		||||
            "key": "FR_CARN",
 | 
			
		||||
            "label": "ˇ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_A)": {
 | 
			
		||||
            "key": "FR_AE",
 | 
			
		||||
            "label": "æ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_Z)": {
 | 
			
		||||
            "key": "FR_PND",
 | 
			
		||||
            "label": "£",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_E)": {
 | 
			
		||||
            "key": "FR_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_R)": {
 | 
			
		||||
            "key": "FR_REGD",
 | 
			
		||||
            "label": "®",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_T)": {
 | 
			
		||||
            "key": "FR_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_Y)": {
 | 
			
		||||
            "key": "FR_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_U)": {
 | 
			
		||||
            "key": "FR_UGRV",
 | 
			
		||||
            "label": "ù",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_I)": {
 | 
			
		||||
            "key": "FR_DOTA",
 | 
			
		||||
            "label": "˙ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_O)": {
 | 
			
		||||
            "key": "FR_OE",
 | 
			
		||||
            "label": "œ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_P)": {
 | 
			
		||||
            "key": "FR_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_MINS)": {
 | 
			
		||||
            "key": "FR_MMNS",
 | 
			
		||||
            "label": "−",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_PLUS)": {
 | 
			
		||||
            "key": "FR_DAGG",
 | 
			
		||||
            "label": "†",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_Q)": {
 | 
			
		||||
            "key": "FR_THET",
 | 
			
		||||
            "label": "θ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_S)": {
 | 
			
		||||
            "key": "FR_SS",
 | 
			
		||||
            "label": "ß",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_D)": {
 | 
			
		||||
            "key": "FR_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_F)": {
 | 
			
		||||
            "key": "FR_CURR",
 | 
			
		||||
            "label": "¤ (dead monetary key)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_G)": {
 | 
			
		||||
            "key": "FR_DGRK",
 | 
			
		||||
            "label": "µ (dead Greek key)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_H)": {
 | 
			
		||||
            "key": "FR_EU",
 | 
			
		||||
            "label": "Eu (dead European symbol key)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_K)": {
 | 
			
		||||
            "key": "FR_DSLS",
 | 
			
		||||
            "label": "∕ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_L)": {
 | 
			
		||||
            "key": "FR_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_M)": {
 | 
			
		||||
            "key": "FR_INFN",
 | 
			
		||||
            "label": "∞",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_SLSH)": {
 | 
			
		||||
            "key": "FR_DIV",
 | 
			
		||||
            "label": "÷",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_ASTR)": {
 | 
			
		||||
            "key": "FR_MUL",
 | 
			
		||||
            "label": "×",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_LABK)": {
 | 
			
		||||
            "key": "FR_LEQL",
 | 
			
		||||
            "label": "≤",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_W)": {
 | 
			
		||||
            "key": "FR_EZH",
 | 
			
		||||
            "label": "ʒ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_X)": {
 | 
			
		||||
            "key": "FR_COPY",
 | 
			
		||||
            "label": "©",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_C)": {
 | 
			
		||||
            "key": "FR_CCED",
 | 
			
		||||
            "label": "ç",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_V)": {
 | 
			
		||||
            "key": "FR_CEDL",
 | 
			
		||||
            "label": "¸ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_B)": {
 | 
			
		||||
            "key": "FR_DMNS",
 | 
			
		||||
            "label": "− (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_N)": {
 | 
			
		||||
            "key": "FR_DTIL",
 | 
			
		||||
            "label": "~ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_DOT)": {
 | 
			
		||||
            "key": "FR_IQUE",
 | 
			
		||||
            "label": "¿",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_COMM)": {
 | 
			
		||||
            "key": "FR_IEXL",
 | 
			
		||||
            "label": "¡",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_COLN)": {
 | 
			
		||||
            "key": "FR_MDDT",
 | 
			
		||||
            "label": "·",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(FR_SCLN)": {
 | 
			
		||||
            "key": "FR_AEQL",
 | 
			
		||||
            "label": "≃",
 | 
			
		||||
        }
 | 
			
		||||
/* Shift+AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ̑  │   │   │   │   │ ˝ │ ̏  │   │ — │ ‹ │ › │ ˚ │   │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │ ™ │   │   │ ̣  │   │ ‰ │ ‑ │ ‡ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │ ˍ │   │   │   │   │ √ │ ¼ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ ≥ │   │   │   │ ˛ │   │   │   │ ̦  │   │ ≠ │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(ALGR(FR_AT))": {
 | 
			
		||||
            "key": "FR_IBRV",
 | 
			
		||||
            "label": "̑ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FR_LPRN))": {
 | 
			
		||||
            "key": "FR_DACU",
 | 
			
		||||
            "label": "˝ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FR_RPRN))": {
 | 
			
		||||
            "key": "FR_DGRV",
 | 
			
		||||
            "label": "̏ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FR_RSQU))": {
 | 
			
		||||
            "key": "FR_MDSH",
 | 
			
		||||
            "label": "—",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FR_LDAQ))": {
 | 
			
		||||
            "key": "FR_LSAQ",
 | 
			
		||||
            "label": "‹",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FR_RDAQ))": {
 | 
			
		||||
            "key": "FR_RSAQ",
 | 
			
		||||
            "label": "›",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FR_QUOT))": {
 | 
			
		||||
            "key": "FR_RNGA",
 | 
			
		||||
            "label": "˚ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FR_T))": {
 | 
			
		||||
            "key": "FR_TM",
 | 
			
		||||
            "label": "™",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FR_I))": {
 | 
			
		||||
            "key": "FR_DOTB",
 | 
			
		||||
            "label": "̣ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FR_P))": {
 | 
			
		||||
            "key": "FR_PERM",
 | 
			
		||||
            "label": "‰",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FR_MINS))": {
 | 
			
		||||
            "key": "FR_NBHY",
 | 
			
		||||
            "label": "‑ (non-breaking hyphen)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FR_PLUS))": {
 | 
			
		||||
            "key": "FR_DDAG",
 | 
			
		||||
            "label": "‡",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FR_H))": {
 | 
			
		||||
            "key": "FR_MACB",
 | 
			
		||||
            "label": "ˍ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FR_SLSH))": {
 | 
			
		||||
            "key": "FR_SQRT",
 | 
			
		||||
            "label": "√",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FR_ASTR))": {
 | 
			
		||||
            "key": "FR_QRTR",
 | 
			
		||||
            "label": "¼",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FR_LABK))": {
 | 
			
		||||
            "key": "FR_GEQL",
 | 
			
		||||
            "label": "≥",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FR_V))": {
 | 
			
		||||
            "key": "FR_OGON",
 | 
			
		||||
            "label": "˛ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FR_COMM))": {
 | 
			
		||||
            "key": "FR_DCMM",
 | 
			
		||||
            "label": "̦ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(FR_SCLN))": {
 | 
			
		||||
            "key": "FR_NEQL",
 | 
			
		||||
            "label": "≠",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,676 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
 | 
			
		||||
 * │ @ │ & │ é │ " │ ' │ ( │ § │ è │ ! │ ç │ à │ ) │ - │     │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
 | 
			
		||||
 * │     │ A │ Z │ E │ R │ T │ Y │ U │ I │ O │ P │ ^ │ $ │   │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
 | 
			
		||||
 * │      │ Q │ S │ D │ F │ G │ H │ J │ K │ L │ M │ ù │ ` │  │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
 | 
			
		||||
 * │    │ < │ W │ X │ C │ V │ B │ N │ , │ ; │ : │ = │        │
 | 
			
		||||
 * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
 | 
			
		||||
 * │     │    │     │                       │     │    │     │
 | 
			
		||||
 * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "FR_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "FR_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "FR_LEAC",
 | 
			
		||||
            "label": "é",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "FR_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "FR_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "FR_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "FR_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "FR_LEGR",
 | 
			
		||||
            "label": "è",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "FR_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "FR_LCCE",
 | 
			
		||||
            "label": "ç",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "FR_LAGR",
 | 
			
		||||
            "label": "à",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "FR_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "FR_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "FR_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "FR_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "FR_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "FR_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "FR_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "FR_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "FR_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "FR_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "FR_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "FR_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "FR_CIRC",
 | 
			
		||||
            "label": "^",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "FR_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "FR_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "FR_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "FR_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "FR_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "FR_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "FR_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "FR_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "FR_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "FR_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "FR_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "FR_LUGR",
 | 
			
		||||
            "label": "ù",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "FR_GRV",
 | 
			
		||||
            "label": "`",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "FR_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "FR_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "FR_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "FR_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "FR_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "FR_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "FR_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "FR_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "FR_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "FR_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "FR_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
 | 
			
		||||
 * │ # │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ° │ _ │     │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │ ¨ │ * │   │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │ % │ £ │  │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
 | 
			
		||||
 * │    │ > │   │   │   │   │   │   │ ? │ . │ / │ + │        │
 | 
			
		||||
 * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
 | 
			
		||||
 * │     │    │     │                       │     │    │     │
 | 
			
		||||
 * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(FR_AT)": {
 | 
			
		||||
            "key": "FR_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_AMPR)": {
 | 
			
		||||
            "key": "FR_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_LEAC)": {
 | 
			
		||||
            "key": "FR_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_DQUO)": {
 | 
			
		||||
            "key": "FR_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_QUOT)": {
 | 
			
		||||
            "key": "FR_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_LPRN)": {
 | 
			
		||||
            "key": "FR_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_SECT)": {
 | 
			
		||||
            "key": "FR_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_LEGR)": {
 | 
			
		||||
            "key": "FR_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_EXLM)": {
 | 
			
		||||
            "key": "FR_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_LCCE)": {
 | 
			
		||||
            "key": "FR_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_LAGR)": {
 | 
			
		||||
            "key": "FR_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_RPRN)": {
 | 
			
		||||
            "key": "FR_DEG",
 | 
			
		||||
            "label": "°",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_MINS)": {
 | 
			
		||||
            "key": "FR_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_CIRC)": {
 | 
			
		||||
            "key": "FR_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_DLR)": {
 | 
			
		||||
            "key": "FR_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_LUGR)": {
 | 
			
		||||
            "key": "FR_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_GRV)": {
 | 
			
		||||
            "key": "FR_PND",
 | 
			
		||||
            "label": "£",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_LABK)": {
 | 
			
		||||
            "key": "FR_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_COMM)": {
 | 
			
		||||
            "key": "FR_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_SCLN)": {
 | 
			
		||||
            "key": "FR_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_COLN)": {
 | 
			
		||||
            "key": "FR_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "S(FR_EQL)": {
 | 
			
		||||
            "key": "FR_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
/* Alted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
 | 
			
		||||
 * │ • │  │ ë │ “ │ ‘ │ { │ ¶ │ « │ ¡ │ Ç │ Ø │ } │ — │     │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
 | 
			
		||||
 * │     │ Æ │  │ Ê │ ® │ † │ Ú │ º │ î │ Œ │ π │ Ô │ € │   │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
 | 
			
		||||
 * │      │ ‡ │ Ò │ ∂ │ ƒ │ fi │ Ì │ Ï │ È │ ¬ │ µ │ Ù │   │  │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
 | 
			
		||||
 * │    │ ≤ │ ‹ │ ≈ │ © │ ◊ │ ß │ ~ │ ∞ │ … │ ÷ │ ≠ │        │
 | 
			
		||||
 * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
 | 
			
		||||
 * │     │    │     │                       │     │    │     │
 | 
			
		||||
 * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
 | 
			
		||||
 */
 | 
			
		||||
        "A(FR_AT)": {
 | 
			
		||||
            "key": "FR_BULT",
 | 
			
		||||
            "label": "•",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_AMPR)": {
 | 
			
		||||
            "key": "FR_APPL",
 | 
			
		||||
            "label": " (Apple logo)",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_LEAC)": {
 | 
			
		||||
            "key": "FR_LEDI",
 | 
			
		||||
            "label": "ë",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_DQUO)": {
 | 
			
		||||
            "key": "FR_LDQU",
 | 
			
		||||
            "label": "“",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_QUOT)": {
 | 
			
		||||
            "key": "FR_LSQU",
 | 
			
		||||
            "label": "‘",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_LPRN)": {
 | 
			
		||||
            "key": "FR_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_SECT)": {
 | 
			
		||||
            "key": "FR_PILC",
 | 
			
		||||
            "label": "¶",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_LEGR)": {
 | 
			
		||||
            "key": "FR_LDAQ",
 | 
			
		||||
            "label": "«",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_EXLM)": {
 | 
			
		||||
            "key": "FR_IEXL",
 | 
			
		||||
            "label": "¡",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_LCCE)": {
 | 
			
		||||
            "key": "FR_CCCE",
 | 
			
		||||
            "label": "Ç",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_LAGR)": {
 | 
			
		||||
            "key": "FR_OSTR",
 | 
			
		||||
            "label": "Ø",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_RPRN)": {
 | 
			
		||||
            "key": "FR_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_MINS)": {
 | 
			
		||||
            "key": "FR_MDSH",
 | 
			
		||||
            "label": "—",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_A)": {
 | 
			
		||||
            "key": "FR_AE",
 | 
			
		||||
            "label": "Æ",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_Z)": {
 | 
			
		||||
            "key": "FR_CACI",
 | 
			
		||||
            "label": "Â",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_E)": {
 | 
			
		||||
            "key": "FR_ECIR",
 | 
			
		||||
            "label": "Ê",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_R)": {
 | 
			
		||||
            "key": "FR_REGD",
 | 
			
		||||
            "label": "®",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_T)": {
 | 
			
		||||
            "key": "FR_DAGG",
 | 
			
		||||
            "label": "†",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_Y)": {
 | 
			
		||||
            "key": "FR_CUAC",
 | 
			
		||||
            "label": "Ú",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_U)": {
 | 
			
		||||
            "key": "FR_MORD",
 | 
			
		||||
            "label": "º",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_I)": {
 | 
			
		||||
            "key": "FR_LICI",
 | 
			
		||||
            "label": "î",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_O)": {
 | 
			
		||||
            "key": "FR_OE",
 | 
			
		||||
            "label": "Œ",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_P)": {
 | 
			
		||||
            "key": "FR_PI",
 | 
			
		||||
            "label": "π",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_CIRC)": {
 | 
			
		||||
            "key": "FR_OCIR",
 | 
			
		||||
            "label": "Ô",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_DLR)": {
 | 
			
		||||
            "key": "FR_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_Q)": {
 | 
			
		||||
            "key": "FR_DDAG",
 | 
			
		||||
            "label": "‡",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_S)": {
 | 
			
		||||
            "key": "FR_COGR",
 | 
			
		||||
            "label": "Ò",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_D)": {
 | 
			
		||||
            "key": "FR_PDIF",
 | 
			
		||||
            "label": "∂",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_F)": {
 | 
			
		||||
            "key": "FR_FHK",
 | 
			
		||||
            "label": "ƒ",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_G)": {
 | 
			
		||||
            "key": "FR_FI",
 | 
			
		||||
            "label": "fi",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_H)": {
 | 
			
		||||
            "key": "FR_CIGR",
 | 
			
		||||
            "label": "Ì",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_J)": {
 | 
			
		||||
            "key": "FR_CIDI",
 | 
			
		||||
            "label": "Ï",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_K)": {
 | 
			
		||||
            "key": "FR_CEGR",
 | 
			
		||||
            "label": "È",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_L)": {
 | 
			
		||||
            "key": "FR_NOT",
 | 
			
		||||
            "label": "¬",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_M)": {
 | 
			
		||||
            "key": "FR_MICR",
 | 
			
		||||
            "label": "µ",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_LUGR)": {
 | 
			
		||||
            "key": "FR_CUGR",
 | 
			
		||||
            "label": "Ù",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_LABK)": {
 | 
			
		||||
            "key": "FR_LTEQ",
 | 
			
		||||
            "label": "≤",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_W)": {
 | 
			
		||||
            "key": "FR_LSAQ",
 | 
			
		||||
            "label": "‹",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_X)": {
 | 
			
		||||
            "key": "FR_AEQL",
 | 
			
		||||
            "label": "≈",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_C)": {
 | 
			
		||||
            "key": "FR_COPY",
 | 
			
		||||
            "label": "©",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_V)": {
 | 
			
		||||
            "key": "FR_LOZN",
 | 
			
		||||
            "label": "◊",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_B)": {
 | 
			
		||||
            "key": "FR_SS",
 | 
			
		||||
            "label": "ß",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_N)": {
 | 
			
		||||
            "key": "FR_TILD",
 | 
			
		||||
            "label": "~ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_COMM)": {
 | 
			
		||||
            "key": "FR_INFN",
 | 
			
		||||
            "label": "∞",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_SCLN)": {
 | 
			
		||||
            "key": "FR_ELLP",
 | 
			
		||||
            "label": "…",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_COLN)": {
 | 
			
		||||
            "key": "FR_DIV",
 | 
			
		||||
            "label": "÷",
 | 
			
		||||
        }
 | 
			
		||||
        "A(FR_EQL)": {
 | 
			
		||||
            "key": "FR_NEQL",
 | 
			
		||||
            "label": "≠",
 | 
			
		||||
        }
 | 
			
		||||
/* Shift+Alted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
 | 
			
		||||
 * │ Ÿ │ ´ │ „ │   │   │ [ │ å │ » │ Û │ Á │   │ ] │ – │     │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
 | 
			
		||||
 * │     │   │ Å │   │ ‚ │ ™ │   │ ª │ ï │   │ ∏ │   │ ¥ │   │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
 | 
			
		||||
 * │      │ Ω │ ∑ │ ∆ │ · │ fl │ Î │ Í │ Ë │ | │ Ó │ ‰ │   │  │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
 | 
			
		||||
 * │    │ ≥ │ › │ ⁄ │ ¢ │ √ │ ∫ │ ı │ ¿ │   │ \ │ ± │        │
 | 
			
		||||
 * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
 | 
			
		||||
 * │     │    │     │                       │     │    │     │
 | 
			
		||||
 * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(A(FR_AT))": {
 | 
			
		||||
            "key": "FR_CYDI",
 | 
			
		||||
            "label": "Ÿ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_AMPR))": {
 | 
			
		||||
            "key": "FR_ACUT",
 | 
			
		||||
            "label": "´ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_LEAC))": {
 | 
			
		||||
            "key": "FR_DLQU",
 | 
			
		||||
            "label": "„",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_LPRN))": {
 | 
			
		||||
            "key": "FR_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_SECT))": {
 | 
			
		||||
            "key": "FR_LARI",
 | 
			
		||||
            "label": "å",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_LEGR))": {
 | 
			
		||||
            "key": "FR_RDAQ",
 | 
			
		||||
            "label": "»",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_EXLM))": {
 | 
			
		||||
            "key": "FR_CUCI",
 | 
			
		||||
            "label": "Û",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_LCCE))": {
 | 
			
		||||
            "key": "FR_CAAC",
 | 
			
		||||
            "label": "Á",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_RPRN))": {
 | 
			
		||||
            "key": "FR_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_MINS))": {
 | 
			
		||||
            "key": "FR_NDSH",
 | 
			
		||||
            "label": "–",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_Z))": {
 | 
			
		||||
            "key": "FR_CARI",
 | 
			
		||||
            "label": "Å",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_R))": {
 | 
			
		||||
            "key": "FR_SLQU",
 | 
			
		||||
            "label": "‚",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_T))": {
 | 
			
		||||
            "key": "FR_TM",
 | 
			
		||||
            "label": "™",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_U))": {
 | 
			
		||||
            "key": "FR_FORD",
 | 
			
		||||
            "label": "ª",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_I))": {
 | 
			
		||||
            "key": "FR_LIDI",
 | 
			
		||||
            "label": "ï",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_P))": {
 | 
			
		||||
            "key": "FR_NARP",
 | 
			
		||||
            "label": "∏",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_DLR))": {
 | 
			
		||||
            "key": "FR_YEN",
 | 
			
		||||
            "label": "¥",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_Q))": {
 | 
			
		||||
            "key": "FR_OMEG",
 | 
			
		||||
            "label": "Ω",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_S))": {
 | 
			
		||||
            "key": "FR_NARS",
 | 
			
		||||
            "label": "∑",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_D))": {
 | 
			
		||||
            "key": "FR_INCR",
 | 
			
		||||
            "label": "∆",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_F))": {
 | 
			
		||||
            "key": "FR_MDDT",
 | 
			
		||||
            "label": "·",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_G))": {
 | 
			
		||||
            "key": "FR_FL",
 | 
			
		||||
            "label": "fl",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_H))": {
 | 
			
		||||
            "key": "FR_CICI",
 | 
			
		||||
            "label": "Î",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_J))": {
 | 
			
		||||
            "key": "FR_CIAC",
 | 
			
		||||
            "label": "Í",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_K))": {
 | 
			
		||||
            "key": "FR_CEDI",
 | 
			
		||||
            "label": "Ë",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_L))": {
 | 
			
		||||
            "key": "FR_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_M))": {
 | 
			
		||||
            "key": "FR_COAC",
 | 
			
		||||
            "label": "Ó",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_LUGR))": {
 | 
			
		||||
            "key": "FR_PERM",
 | 
			
		||||
            "label": "‰",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_LABK))": {
 | 
			
		||||
            "key": "FR_GTEQ",
 | 
			
		||||
            "label": "≥",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_W))": {
 | 
			
		||||
            "key": "FR_RSAQ",
 | 
			
		||||
            "label": "›",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_X))": {
 | 
			
		||||
            "key": "FR_FRSL",
 | 
			
		||||
            "label": "⁄",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_C))": {
 | 
			
		||||
            "key": "FR_CENT",
 | 
			
		||||
            "label": "¢",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_V))": {
 | 
			
		||||
            "key": "FR_SQRT",
 | 
			
		||||
            "label": "√",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_B))": {
 | 
			
		||||
            "key": "FR_INTG",
 | 
			
		||||
            "label": "∫",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_N))": {
 | 
			
		||||
            "key": "FR_DLSI",
 | 
			
		||||
            "label": "ı",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_COMM))": {
 | 
			
		||||
            "key": "FR_IQUE",
 | 
			
		||||
            "label": "¿",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_COLN))": {
 | 
			
		||||
            "key": "FR_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(FR_EQL))": {
 | 
			
		||||
            "key": "FR_PLMN",
 | 
			
		||||
            "label": "±",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,359 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ^ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ß │ ´ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ Q │ W │ E │ R │ T │ Z │ U │ I │ O │ P │ Ü │ + │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ö │ Ä │ # │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ < │ Y │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "DE_CIRC",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "DE_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "DE_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "DE_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "DE_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "DE_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "DE_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "DE_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "DE_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "DE_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "DE_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "DE_SS",
 | 
			
		||||
            "label": "ß",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "DE_ACUT",
 | 
			
		||||
            "label": "´ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "DE_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "DE_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "DE_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "DE_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "DE_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "DE_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "DE_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "DE_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "DE_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "DE_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "DE_UDIA",
 | 
			
		||||
            "label": "Ü",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "DE_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "DE_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "DE_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "DE_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "DE_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "DE_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "DE_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "DE_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "DE_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "DE_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "DE_ODIA",
 | 
			
		||||
            "label": "Ö",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "DE_ADIA",
 | 
			
		||||
            "label": "Ä",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "DE_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "DE_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "DE_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "DE_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "DE_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "DE_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "DE_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "DE_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "DE_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "DE_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "DE_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "DE_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ° │ ! │ " │ § │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │   │ * │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │   │ ' │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(DE_CIRC)": {
 | 
			
		||||
            "key": "DE_DEG",
 | 
			
		||||
            "label": "°",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_1)": {
 | 
			
		||||
            "key": "DE_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_2)": {
 | 
			
		||||
            "key": "DE_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_3)": {
 | 
			
		||||
            "key": "DE_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_4)": {
 | 
			
		||||
            "key": "DE_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_5)": {
 | 
			
		||||
            "key": "DE_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_6)": {
 | 
			
		||||
            "key": "DE_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_7)": {
 | 
			
		||||
            "key": "DE_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_8)": {
 | 
			
		||||
            "key": "DE_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_9)": {
 | 
			
		||||
            "key": "DE_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_0)": {
 | 
			
		||||
            "key": "DE_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_SS)": {
 | 
			
		||||
            "key": "DE_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_ACUT)": {
 | 
			
		||||
            "key": "DE_GRV",
 | 
			
		||||
            "label": "` (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_PLUS)": {
 | 
			
		||||
            "key": "DE_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_HASH)": {
 | 
			
		||||
            "key": "DE_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_LABK)": {
 | 
			
		||||
            "key": "DE_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_COMM)": {
 | 
			
		||||
            "key": "DE_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_DOT)": {
 | 
			
		||||
            "key": "DE_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_MINS)": {
 | 
			
		||||
            "key": "DE_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │   │   │ ² │ ³ │   │   │   │ { │ [ │ ] │ } │ \ │   │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ @ │   │ € │   │   │   │   │   │   │   │   │ ~ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ | │   │   │   │   │   │   │ µ │   │   │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(DE_2)": {
 | 
			
		||||
            "key": "DE_SUP2",
 | 
			
		||||
            "label": "²",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DE_3)": {
 | 
			
		||||
            "key": "DE_SUP3",
 | 
			
		||||
            "label": "³",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DE_7)": {
 | 
			
		||||
            "key": "DE_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DE_8)": {
 | 
			
		||||
            "key": "DE_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DE_9)": {
 | 
			
		||||
            "key": "DE_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DE_0)": {
 | 
			
		||||
            "key": "DE_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DE_SS)": {
 | 
			
		||||
            "key": "DE_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DE_Q)": {
 | 
			
		||||
            "key": "DE_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DE_E)": {
 | 
			
		||||
            "key": "DE_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DE_PLUS)": {
 | 
			
		||||
            "key": "DE_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DE_LABK)": {
 | 
			
		||||
            "key": "DE_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(DE_M)": {
 | 
			
		||||
            "key": "DE_MICR",
 | 
			
		||||
            "label": "µ",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,656 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
 | 
			
		||||
 * │ ^ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ß │ ´ │     │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
 | 
			
		||||
 * │     │ Q │ W │ E │ R │ T │ Z │ U │ I │ O │ P │ Ü │ + │   │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
 | 
			
		||||
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ö │ Ä │ # │  │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
 | 
			
		||||
 * │    │ < │ Y │ X │ C │ V │ B │ N │ M │ , │ . │ - │        │
 | 
			
		||||
 * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
 | 
			
		||||
 * │     │    │     │                       │     │    │     │
 | 
			
		||||
 * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "DE_CIRC",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "DE_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "DE_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "DE_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "DE_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "DE_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "DE_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "DE_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "DE_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "DE_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "DE_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "DE_SS",
 | 
			
		||||
            "label": "ß",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "DE_ACUT",
 | 
			
		||||
            "label": "´ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "DE_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "DE_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "DE_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "DE_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "DE_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "DE_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "DE_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "DE_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "DE_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "DE_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "DE_UDIA",
 | 
			
		||||
            "label": "Ü",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "DE_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "DE_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "DE_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "DE_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "DE_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "DE_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "DE_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "DE_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "DE_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "DE_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "DE_ODIA",
 | 
			
		||||
            "label": "Ö",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "DE_ADIA",
 | 
			
		||||
            "label": "Ä",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "DE_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "DE_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "DE_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "DE_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "DE_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "DE_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "DE_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "DE_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "DE_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "DE_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "DE_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "DE_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
 | 
			
		||||
 * │ ° │ ! │ " │ § │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │     │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │   │ * │   │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │   │ ' │  │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
 | 
			
		||||
 * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │        │
 | 
			
		||||
 * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
 | 
			
		||||
 * │     │    │     │                       │     │    │     │
 | 
			
		||||
 * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(DE_CIRC)": {
 | 
			
		||||
            "key": "DE_DEG",
 | 
			
		||||
            "label": "°",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_1)": {
 | 
			
		||||
            "key": "DE_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_2)": {
 | 
			
		||||
            "key": "DE_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_3)": {
 | 
			
		||||
            "key": "DE_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_4)": {
 | 
			
		||||
            "key": "DE_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_5)": {
 | 
			
		||||
            "key": "DE_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_6)": {
 | 
			
		||||
            "key": "DE_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_7)": {
 | 
			
		||||
            "key": "DE_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_8)": {
 | 
			
		||||
            "key": "DE_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_9)": {
 | 
			
		||||
            "key": "DE_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_0)": {
 | 
			
		||||
            "key": "DE_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_SS)": {
 | 
			
		||||
            "key": "DE_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_ACUT)": {
 | 
			
		||||
            "key": "DE_GRV",
 | 
			
		||||
            "label": "` (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_PLUS)": {
 | 
			
		||||
            "key": "DE_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_HASH)": {
 | 
			
		||||
            "key": "DE_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_LABK)": {
 | 
			
		||||
            "key": "DE_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_COMM)": {
 | 
			
		||||
            "key": "DE_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_DOT)": {
 | 
			
		||||
            "key": "DE_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(DE_MINS)": {
 | 
			
		||||
            "key": "DE_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
/* Alted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
 | 
			
		||||
 * │ „ │ ¡ │ “ │ ¶ │ ¢ │ [ │ ] │ | │ { │ } │ ≠ │ ¿ │   │     │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
 | 
			
		||||
 * │     │ « │ ∑ │ € │ ® │ † │ Ω │ ¨ │ ⁄ │ Ø │ π │ • │ ± │   │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
 | 
			
		||||
 * │      │ Å │ ‚ │ ∂ │ ƒ │ © │ ª │ º │ ∆ │ @ │ Œ │ Æ │ ‘ │  │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
 | 
			
		||||
 * │    │ ≤ │ ¥ │ ≈ │ Ç │ √ │ ∫ │ ~ │ µ │ ∞ │ … │ – │        │
 | 
			
		||||
 * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
 | 
			
		||||
 * │     │    │     │                       │     │    │     │
 | 
			
		||||
 * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
 | 
			
		||||
 */
 | 
			
		||||
        "A(DE_CIRC)": {
 | 
			
		||||
            "key": "DE_DLQU",
 | 
			
		||||
            "label": "„",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_1)": {
 | 
			
		||||
            "key": "DE_IEXL",
 | 
			
		||||
            "label": "¡",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_2)": {
 | 
			
		||||
            "key": "DE_LDQU",
 | 
			
		||||
            "label": "“",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_3)": {
 | 
			
		||||
            "key": "DE_PILC",
 | 
			
		||||
            "label": "¶",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_4)": {
 | 
			
		||||
            "key": "DE_CENT",
 | 
			
		||||
            "label": "¢",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_5)": {
 | 
			
		||||
            "key": "DE_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_6)": {
 | 
			
		||||
            "key": "DE_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_7)": {
 | 
			
		||||
            "key": "DE_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_8)": {
 | 
			
		||||
            "key": "DE_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_9)": {
 | 
			
		||||
            "key": "DE_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_0)": {
 | 
			
		||||
            "key": "DE_NEQL",
 | 
			
		||||
            "label": "≠",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_SS)": {
 | 
			
		||||
            "key": "DE_IQUE",
 | 
			
		||||
            "label": "¿",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_Q)": {
 | 
			
		||||
            "key": "DE_LDAQ",
 | 
			
		||||
            "label": "«",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_W)": {
 | 
			
		||||
            "key": "DE_NARS",
 | 
			
		||||
            "label": "∑",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_E)": {
 | 
			
		||||
            "key": "DE_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_R)": {
 | 
			
		||||
            "key": "DE_REGD",
 | 
			
		||||
            "label": "®",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_T)": {
 | 
			
		||||
            "key": "DE_DAGG",
 | 
			
		||||
            "label": "†",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_Z)": {
 | 
			
		||||
            "key": "DE_OMEG",
 | 
			
		||||
            "label": "Ω",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_U)": {
 | 
			
		||||
            "key": "DE_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_I)": {
 | 
			
		||||
            "key": "DE_FRSL",
 | 
			
		||||
            "label": "⁄",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_O)": {
 | 
			
		||||
            "key": "DE_OSTR",
 | 
			
		||||
            "label": "Ø",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_P)": {
 | 
			
		||||
            "key": "DE_PI",
 | 
			
		||||
            "label": "π",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_UDIA)": {
 | 
			
		||||
            "key": "DE_BULT",
 | 
			
		||||
            "label": "•",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_PLUS)": {
 | 
			
		||||
            "key": "DE_PLMN",
 | 
			
		||||
            "label": "±",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_A)": {
 | 
			
		||||
            "key": "DE_ARNG",
 | 
			
		||||
            "label": "Å",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_S)": {
 | 
			
		||||
            "key": "DE_SLQU",
 | 
			
		||||
            "label": "‚",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_D)": {
 | 
			
		||||
            "key": "DE_PDIF",
 | 
			
		||||
            "label": "∂",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_F)": {
 | 
			
		||||
            "key": "DE_FHK",
 | 
			
		||||
            "label": "ƒ",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_G)": {
 | 
			
		||||
            "key": "DE_COPY",
 | 
			
		||||
            "label": "©",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_H)": {
 | 
			
		||||
            "key": "DE_FORD",
 | 
			
		||||
            "label": "ª",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_J)": {
 | 
			
		||||
            "key": "DE_MORD",
 | 
			
		||||
            "label": "º",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_K)": {
 | 
			
		||||
            "key": "DE_INCR",
 | 
			
		||||
            "label": "∆",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_L)": {
 | 
			
		||||
            "key": "DE_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_ODIA)": {
 | 
			
		||||
            "key": "DE_OE",
 | 
			
		||||
            "label": "Œ",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_ADIA)": {
 | 
			
		||||
            "key": "DE_AE",
 | 
			
		||||
            "label": "Æ",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_HASH)": {
 | 
			
		||||
            "key": "DE_LSQU",
 | 
			
		||||
            "label": "‘",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_LABK)": {
 | 
			
		||||
            "key": "DE_LTEQ",
 | 
			
		||||
            "label": "≤",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_Y)": {
 | 
			
		||||
            "key": "DE_YEN",
 | 
			
		||||
            "label": "¥",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_X)": {
 | 
			
		||||
            "key": "DE_AEQL",
 | 
			
		||||
            "label": "≈",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_C)": {
 | 
			
		||||
            "key": "DE_CCCE",
 | 
			
		||||
            "label": "Ç",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_V)": {
 | 
			
		||||
            "key": "DE_SQRT",
 | 
			
		||||
            "label": "√",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_B)": {
 | 
			
		||||
            "key": "DE_INTG",
 | 
			
		||||
            "label": "∫",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_N)": {
 | 
			
		||||
            "key": "DE_TILD",
 | 
			
		||||
            "label": "~ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_M)": {
 | 
			
		||||
            "key": "DE_MICR",
 | 
			
		||||
            "label": "µ",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_COMM)": {
 | 
			
		||||
            "key": "DE_INFN",
 | 
			
		||||
            "label": "∞",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_DOT)": {
 | 
			
		||||
            "key": "DE_ELLP",
 | 
			
		||||
            "label": "…",
 | 
			
		||||
        }
 | 
			
		||||
        "A(DE_MINS)": {
 | 
			
		||||
            "key": "DE_NDSH",
 | 
			
		||||
            "label": "–",
 | 
			
		||||
        }
 | 
			
		||||
/* Shift+Alted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
 | 
			
		||||
 * │   │ ¬ │ ” │   │ £ │ fi │   │ \ │ ˜ │ · │ ¯ │ ˙ │ ˚ │     │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
 | 
			
		||||
 * │     │ » │   │ ‰ │ ¸ │ ˝ │ ˇ │ Á │ Û │   │ ∏ │   │  │   │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
 | 
			
		||||
 * │      │   │ Í │ ™ │ Ï │ Ì │ Ó │ ı │   │ fl │   │   │   │  │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
 | 
			
		||||
 * │    │ ≥ │ ‡ │ Ù │   │ ◊ │ ‹ │ › │ ˘ │ ˛ │ ÷ │ — │        │
 | 
			
		||||
 * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
 | 
			
		||||
 * │     │    │     │                       │     │    │     │
 | 
			
		||||
 * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(A(DE_1))": {
 | 
			
		||||
            "key": "DE_NOT",
 | 
			
		||||
            "label": "¬",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_2))": {
 | 
			
		||||
            "key": "DE_RDQU",
 | 
			
		||||
            "label": "”",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_4))": {
 | 
			
		||||
            "key": "DE_PND",
 | 
			
		||||
            "label": "£",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_5))": {
 | 
			
		||||
            "key": "DE_FI",
 | 
			
		||||
            "label": "fi",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_7))": {
 | 
			
		||||
            "key": "DE_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_8))": {
 | 
			
		||||
            "key": "DE_STIL",
 | 
			
		||||
            "label": "˜",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_9))": {
 | 
			
		||||
            "key": "DE_MDDT",
 | 
			
		||||
            "label": "·",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_0))": {
 | 
			
		||||
            "key": "DE_MACR",
 | 
			
		||||
            "label": "¯",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_SS))": {
 | 
			
		||||
            "key": "DE_DOTA",
 | 
			
		||||
            "label": "˙",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_ACUT))": {
 | 
			
		||||
            "key": "DE_RNGA",
 | 
			
		||||
            "label": "˚",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_Q))": {
 | 
			
		||||
            "key": "DE_RDAQ",
 | 
			
		||||
            "label": "»",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_E))": {
 | 
			
		||||
            "key": "DE_PERM",
 | 
			
		||||
            "label": "‰",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_R))": {
 | 
			
		||||
            "key": "DE_CEDL",
 | 
			
		||||
            "label": "¸",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_T))": {
 | 
			
		||||
            "key": "DE_DACU",
 | 
			
		||||
            "label": "˝",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_Z))": {
 | 
			
		||||
            "key": "DE_CARN",
 | 
			
		||||
            "label": "ˇ",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_U))": {
 | 
			
		||||
            "key": "DE_AACU",
 | 
			
		||||
            "label": "Á",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_I))": {
 | 
			
		||||
            "key": "DE_UCIR",
 | 
			
		||||
            "label": "Û",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_P))": {
 | 
			
		||||
            "key": "DE_NARP",
 | 
			
		||||
            "label": "∏",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_PLUS))": {
 | 
			
		||||
            "key": "DE_APPL",
 | 
			
		||||
            "label": " (Apple logo)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_S))": {
 | 
			
		||||
            "key": "DE_IACU",
 | 
			
		||||
            "label": "Í",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_D))": {
 | 
			
		||||
            "key": "DE_TM",
 | 
			
		||||
            "label": "™",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_F))": {
 | 
			
		||||
            "key": "DE_IDIA",
 | 
			
		||||
            "label": "Ï",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_G))": {
 | 
			
		||||
            "key": "DE_IGRV",
 | 
			
		||||
            "label": "Ì",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_H))": {
 | 
			
		||||
            "key": "DE_OACU",
 | 
			
		||||
            "label": "Ó",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_J))": {
 | 
			
		||||
            "key": "DE_DLSI",
 | 
			
		||||
            "label": "ı",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_L))": {
 | 
			
		||||
            "key": "DE_FL",
 | 
			
		||||
            "label": "fl",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_LABK))": {
 | 
			
		||||
            "key": "DE_GTEQ",
 | 
			
		||||
            "label": "≥",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_Y))": {
 | 
			
		||||
            "key": "DE_DDAG",
 | 
			
		||||
            "label": "‡",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_X))": {
 | 
			
		||||
            "key": "DE_UGRV",
 | 
			
		||||
            "label": "Ù",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_V))": {
 | 
			
		||||
            "key": "DE_LOZN",
 | 
			
		||||
            "label": "◊",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_B))": {
 | 
			
		||||
            "key": "DE_LSAQ",
 | 
			
		||||
            "label": "‹",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_N))": {
 | 
			
		||||
            "key": "DE_RSAQ",
 | 
			
		||||
            "label": "›",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_M))": {
 | 
			
		||||
            "key": "DE_BREV",
 | 
			
		||||
            "label": "˘",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_COMM))": {
 | 
			
		||||
            "key": "DE_OGON",
 | 
			
		||||
            "label": "˛",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_DOT))": {
 | 
			
		||||
            "key": "DE_DIV",
 | 
			
		||||
            "label": "÷",
 | 
			
		||||
        }
 | 
			
		||||
        "S(A(DE_MINS))": {
 | 
			
		||||
            "key": "DE_MDSH",
 | 
			
		||||
            "label": "—",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,391 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ ; │ ς │ Ε │ Ρ │ Τ │ Υ │ Θ │ Ι │ Ο │ Π │ [ │ ] │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ Α │ Σ │ Δ │ Φ │ Γ │ Η │ Ξ │ Κ │ Λ │ ΄ │ ' │ \ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │ Ζ │ Χ │ Ψ │ Ω │ Β │ Ν │ Μ │ , │ . │ / │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "GR_GRV",
 | 
			
		||||
            "label": "`",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "GR_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "GR_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "GR_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "GR_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "GR_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "GR_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "GR_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "GR_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "GR_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "GR_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "GR_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "GR_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "GR_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "GR_FSIG",
 | 
			
		||||
            "label": "ς",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "GR_EPSL",
 | 
			
		||||
            "label": "Ε",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "GR_RHO",
 | 
			
		||||
            "label": "Ρ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "GR_TAU",
 | 
			
		||||
            "label": "Τ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "GR_UPSL",
 | 
			
		||||
            "label": "Υ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "GR_THET",
 | 
			
		||||
            "label": "Θ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "GR_IOTA",
 | 
			
		||||
            "label": "Ι",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "GR_OMCR",
 | 
			
		||||
            "label": "Ο",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "GR_PI",
 | 
			
		||||
            "label": "Π",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "GR_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "GR_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "GR_ALPH",
 | 
			
		||||
            "label": "Α",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "GR_SIGM",
 | 
			
		||||
            "label": "Σ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "GR_DELT",
 | 
			
		||||
            "label": "Δ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "GR_PHI",
 | 
			
		||||
            "label": "Φ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "GR_GAMM",
 | 
			
		||||
            "label": "Γ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "GR_ETA",
 | 
			
		||||
            "label": "Η",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "GR_XI",
 | 
			
		||||
            "label": "Ξ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "GR_KAPP",
 | 
			
		||||
            "label": "Κ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "GR_LAMB",
 | 
			
		||||
            "label": "Λ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "GR_TONS",
 | 
			
		||||
            "label": "΄ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "GR_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "GR_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "GR_ZETA",
 | 
			
		||||
            "label": "Ζ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "GR_CHI",
 | 
			
		||||
            "label": "Χ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "GR_PSI",
 | 
			
		||||
            "label": "Ψ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "GR_OMEG",
 | 
			
		||||
            "label": "Ω",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "GR_BETA",
 | 
			
		||||
            "label": "Β",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "GR_NU",
 | 
			
		||||
            "label": "Ν",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "GR_MU",
 | 
			
		||||
            "label": "Μ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "GR_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "GR_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "GR_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ : │ ΅ │   │   │   │   │   │   │   │   │ { │ } │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │ ¨ │ " │ | │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │   │   │   │   │   │   │   │ < │ > │ ? │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(GR_GRV)": {
 | 
			
		||||
            "key": "GR_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_1)": {
 | 
			
		||||
            "key": "GR_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_2)": {
 | 
			
		||||
            "key": "GR_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_3)": {
 | 
			
		||||
            "key": "GR_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_4)": {
 | 
			
		||||
            "key": "GR_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_5)": {
 | 
			
		||||
            "key": "GR_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_6)": {
 | 
			
		||||
            "key": "GR_CIRC",
 | 
			
		||||
            "label": "^",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_7)": {
 | 
			
		||||
            "key": "GR_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_8)": {
 | 
			
		||||
            "key": "GR_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_9)": {
 | 
			
		||||
            "key": "GR_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_0)": {
 | 
			
		||||
            "key": "GR_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_MINS)": {
 | 
			
		||||
            "key": "GR_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_EQL)": {
 | 
			
		||||
            "key": "GR_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_SCLN)": {
 | 
			
		||||
            "key": "GR_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_FSIG)": {
 | 
			
		||||
            "key": "GR_DIAT",
 | 
			
		||||
            "label": "΅ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_LBRC)": {
 | 
			
		||||
            "key": "GR_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_RBRC)": {
 | 
			
		||||
            "key": "GR_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_TONS)": {
 | 
			
		||||
            "key": "GR_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_QUOT)": {
 | 
			
		||||
            "key": "GR_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_BSLS)": {
 | 
			
		||||
            "key": "GR_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_COMM)": {
 | 
			
		||||
            "key": "GR_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_DOT)": {
 | 
			
		||||
            "key": "GR_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(GR_SLSH)": {
 | 
			
		||||
            "key": "GR_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │   │   │ ² │ ³ │ £ │ § │ ¶ │   │ ¤ │ ¦ │ ° │ ± │ ½ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │ € │ ® │   │ ¥ │   │   │   │   │ « │ » │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │   │ ¬ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │   │   │ © │   │   │   │   │   │   │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(GR_2)": {
 | 
			
		||||
            "key": "GR_SUP2",
 | 
			
		||||
            "label": "²",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(GR_3)": {
 | 
			
		||||
            "key": "GR_SUP3",
 | 
			
		||||
            "label": "³",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(GR_4)": {
 | 
			
		||||
            "key": "GR_PND",
 | 
			
		||||
            "label": "£",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(GR_5)": {
 | 
			
		||||
            "key": "GR_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(GR_6)": {
 | 
			
		||||
            "key": "GR_PILC",
 | 
			
		||||
            "label": "¶",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(GR_8)": {
 | 
			
		||||
            "key": "GR_CURR",
 | 
			
		||||
            "label": "¤",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(GR_9)": {
 | 
			
		||||
            "key": "GR_BRKP",
 | 
			
		||||
            "label": "¦",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(GR_0)": {
 | 
			
		||||
            "key": "GR_DEG",
 | 
			
		||||
            "label": "°",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(GR_MINS)": {
 | 
			
		||||
            "key": "GR_PLMN",
 | 
			
		||||
            "label": "±",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(GR_EQL)": {
 | 
			
		||||
            "key": "GR_HALF",
 | 
			
		||||
            "label": "½",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(GR_EPSL)": {
 | 
			
		||||
            "key": "GR_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(GR_RHO)": {
 | 
			
		||||
            "key": "GR_REGD",
 | 
			
		||||
            "label": "®",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(GR_UPSL)": {
 | 
			
		||||
            "key": "GR_YEN",
 | 
			
		||||
            "label": "¥",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(GR_LBRC)": {
 | 
			
		||||
            "key": "GR_LDAQ",
 | 
			
		||||
            "label": "«",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(GR_RBRC)": {
 | 
			
		||||
            "key": "GR_RDAQ",
 | 
			
		||||
            "label": "»",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(GR_BSLS)": {
 | 
			
		||||
            "key": "GR_NOT",
 | 
			
		||||
            "label": "¬",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(GR_PSI)": {
 | 
			
		||||
            "key": "GR_COPY",
 | 
			
		||||
            "label": "©",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,347 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ; │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ / │ ' │ פ │ ם │ ן │ ו │ ט │ א │ ר │ ק │ ] │ [ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ ף │ ך │ ל │ ח │ י │ ע │ כ │ ג │ ד │ ש │ , │ \ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │ ץ │ ת │ צ │ מ │ נ │ ה │ ב │ ס │ ז │ . │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "IL_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "IL_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "IL_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "IL_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "IL_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "IL_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "IL_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "IL_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "IL_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "IL_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "IL_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "IL_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "IL_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "IL_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "IL_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "IL_QOF",
 | 
			
		||||
            "label": "ק",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "IL_RESH",
 | 
			
		||||
            "label": "ר",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "IL_ALEF",
 | 
			
		||||
            "label": "א",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "IL_TET",
 | 
			
		||||
            "label": "ט",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "IL_VAV",
 | 
			
		||||
            "label": "ו",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "IL_FNUN",
 | 
			
		||||
            "label": "ן",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "IL_FMEM",
 | 
			
		||||
            "label": "ם",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "IL_PE",
 | 
			
		||||
            "label": "פ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "IL_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "IL_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "IL_SHIN",
 | 
			
		||||
            "label": "ש",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "IL_DALT",
 | 
			
		||||
            "label": "ד",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "IL_GIML",
 | 
			
		||||
            "label": "ג",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "IL_KAF",
 | 
			
		||||
            "label": "כ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "IL_AYIN",
 | 
			
		||||
            "label": "ע",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "IL_YOD",
 | 
			
		||||
            "label": "י",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "IL_HET",
 | 
			
		||||
            "label": "ח",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "IL_LAMD",
 | 
			
		||||
            "label": "ל",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "IL_FKAF",
 | 
			
		||||
            "label": "ך",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "IL_FPE",
 | 
			
		||||
            "label": "ף",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "IL_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "IL_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "IL_ZAYN",
 | 
			
		||||
            "label": "ז",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "IL_SMKH",
 | 
			
		||||
            "label": "ס",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "IL_BET",
 | 
			
		||||
            "label": "ב",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "IL_HE",
 | 
			
		||||
            "label": "ה",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "IL_NUN",
 | 
			
		||||
            "label": "נ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "IL_MEM",
 | 
			
		||||
            "label": "מ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "IL_TSDI",
 | 
			
		||||
            "label": "צ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "IL_TAV",
 | 
			
		||||
            "label": "ת",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "IL_FTSD",
 | 
			
		||||
            "label": "ץ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "IL_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ) │ ( │ _ │ + │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │ } │ { │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │ : │ " │ | │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │   │   │   │   │   │   │   │ > │ < │ ? │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(IL_SCLN)": {
 | 
			
		||||
            "key": "IL_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_1)": {
 | 
			
		||||
            "key": "IL_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_2)": {
 | 
			
		||||
            "key": "IL_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_3)": {
 | 
			
		||||
            "key": "IL_PND",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_4)": {
 | 
			
		||||
            "key": "IL_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_5)": {
 | 
			
		||||
            "key": "IL_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_6)": {
 | 
			
		||||
            "key": "IL_CIRC",
 | 
			
		||||
            "label": "^",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_7)": {
 | 
			
		||||
            "key": "IL_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_8)": {
 | 
			
		||||
            "key": "IL_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_9)": {
 | 
			
		||||
            "key": "IL_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_0)": {
 | 
			
		||||
            "key": "IL_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_MINS)": {
 | 
			
		||||
            "key": "IL_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_EQL)": {
 | 
			
		||||
            "key": "IL_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_RBRC)": {
 | 
			
		||||
            "key": "IL_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_LBRC)": {
 | 
			
		||||
            "key": "IL_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_FPE)": {
 | 
			
		||||
            "key": "IL_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_COMM)": {
 | 
			
		||||
            "key": "IL_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_BSLS)": {
 | 
			
		||||
            "key": "IL_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_TAV)": {
 | 
			
		||||
            "key": "IL_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_FTSD)": {
 | 
			
		||||
            "key": "IL_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IL_DOT)": {
 | 
			
		||||
            "key": "IL_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │   │   │   │ € │ ₪ │ ° │   │   │ × │   │   │   │   │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │ װ │   │   │   │   │   │   │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │ ײ │ ױ │   │   │   │   │   │   │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │   │   │   │   │   │   │   │   │   │ ÷ │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(IL_3)": {
 | 
			
		||||
            "key": "IL_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IL_4)": {
 | 
			
		||||
            "key": "IL_SHKL",
 | 
			
		||||
            "label": "₪",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IL_5)": {
 | 
			
		||||
            "key": "IL_DEG",
 | 
			
		||||
            "label": "°",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IL_8)": {
 | 
			
		||||
            "key": "IL_MUL",
 | 
			
		||||
            "label": "×",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IL_TET)": {
 | 
			
		||||
            "key": "IL_DVAV",
 | 
			
		||||
            "label": "װ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IL_AYIN)": {
 | 
			
		||||
            "key": "IL_VYOD",
 | 
			
		||||
            "label": "ױ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IL_YOD)": {
 | 
			
		||||
            "key": "IL_DYOD",
 | 
			
		||||
            "label": "ײ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IL_DOT)": {
 | 
			
		||||
            "key": "IL_DIV",
 | 
			
		||||
            "label": "÷",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,435 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ Ö │ Ü │ Ó │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ Q │ W │ E │ R │ T │ Z │ U │ I │ O │ P │ Ő │ Ú │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ É │ Á │ Ű │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ Í │ Y │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "HU_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "HU_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "HU_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "HU_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "HU_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "HU_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "HU_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "HU_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "HU_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "HU_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "HU_ODIA",
 | 
			
		||||
            "label": "Ö",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "HU_UDIA",
 | 
			
		||||
            "label": "Ü",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "HU_OACU",
 | 
			
		||||
            "label": "Ó",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "HU_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "HU_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "HU_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "HU_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "HU_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "HU_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "HU_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "HU_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "HU_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "HU_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "HU_ODAC",
 | 
			
		||||
            "label": "Ő",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "HU_UACU",
 | 
			
		||||
            "label": "Ú",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "HU_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "HU_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "HU_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "HU_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "HU_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "HU_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "HU_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "HU_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "HU_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "HU_EACU",
 | 
			
		||||
            "label": "É",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "HU_AACU",
 | 
			
		||||
            "label": "Á",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "HU_UDAC",
 | 
			
		||||
            "label": "Ű",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "HU_IACU",
 | 
			
		||||
            "label": "Í",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "HU_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "HU_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "HU_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "HU_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "HU_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "HU_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "HU_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "HU_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "HU_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "HU_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ § │ ' │ " │ + │ ! │ % │ / │ = │ ( │ ) │   │   │   │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │   │   │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │   │   │   │   │   │   │   │ ? │ : │ _ │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(HU_0)": {
 | 
			
		||||
            "key": "HU_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HU_1)": {
 | 
			
		||||
            "key": "HU_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HU_2)": {
 | 
			
		||||
            "key": "HU_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HU_3)": {
 | 
			
		||||
            "key": "HU_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HU_4)": {
 | 
			
		||||
            "key": "HU_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HU_5)": {
 | 
			
		||||
            "key": "HU_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HU_6)": {
 | 
			
		||||
            "key": "HU_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HU_7)": {
 | 
			
		||||
            "key": "HU_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HU_8)": {
 | 
			
		||||
            "key": "HU_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HU_9)": {
 | 
			
		||||
            "key": "HU_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HU_COMM)": {
 | 
			
		||||
            "key": "HU_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HU_DOT)": {
 | 
			
		||||
            "key": "HU_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(HU_MINS)": {
 | 
			
		||||
            "key": "HU_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │   │ ~ │ ˇ │ ^ │ ˘ │ ° │ ˛ │ ` │ ˙ │ ´ │ ˝ │ ¨ │ ¸ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ \ │ | │ Ä │   │   │   │ € │   │   │   │ ÷ │ × │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ ä │ đ │ Đ │ [ │ ] │   │   │ ł │ Ł │ $ │ ß │ ¤ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ < │ > │ # │ & │ @ │ { │ } │   │ ; │   │ * │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(HU_1)": {
 | 
			
		||||
            "key": "HU_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_2)": {
 | 
			
		||||
            "key": "HU_CARN",
 | 
			
		||||
            "label": "ˇ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_3)": {
 | 
			
		||||
            "key": "HU_CIRC",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_4)": {
 | 
			
		||||
            "key": "HU_BREV",
 | 
			
		||||
            "label": "˘ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_5)": {
 | 
			
		||||
            "key": "HU_RNGA",
 | 
			
		||||
            "label": "° (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_6)": {
 | 
			
		||||
            "key": "HU_OGON",
 | 
			
		||||
            "label": "˛ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_7)": {
 | 
			
		||||
            "key": "HU_GRV",
 | 
			
		||||
            "label": "`",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_8)": {
 | 
			
		||||
            "key": "HU_DOTA",
 | 
			
		||||
            "label": "˙ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_9)": {
 | 
			
		||||
            "key": "HU_ACUT",
 | 
			
		||||
            "label": "´ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_ODIA)": {
 | 
			
		||||
            "key": "HU_DACU",
 | 
			
		||||
            "label": "˝ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_UDIA)": {
 | 
			
		||||
            "key": "HU_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_OACU)": {
 | 
			
		||||
            "key": "HU_CEDL",
 | 
			
		||||
            "label": "¸ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_Q)": {
 | 
			
		||||
            "key": "HU_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_W)": {
 | 
			
		||||
            "key": "HU_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_E)": {
 | 
			
		||||
            "key": "HU_CADI",
 | 
			
		||||
            "label": "Ä",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_U)": {
 | 
			
		||||
            "key": "HU_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_ODAC)": {
 | 
			
		||||
            "key": "HU_DIV",
 | 
			
		||||
            "label": "÷",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_UACU)": {
 | 
			
		||||
            "key": "HU_MUL",
 | 
			
		||||
            "label": "×",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_A)": {
 | 
			
		||||
            "key": "HU_LADI",
 | 
			
		||||
            "label": "ä",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_S)": {
 | 
			
		||||
            "key": "HU_LDST",
 | 
			
		||||
            "label": "đ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_D)": {
 | 
			
		||||
            "key": "HU_CDST",
 | 
			
		||||
            "label": "Đ",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_F)": {
 | 
			
		||||
            "key": "HU_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_G)": {
 | 
			
		||||
            "key": "HU_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_K)": {
 | 
			
		||||
            "key": "HU_LLST",
 | 
			
		||||
            "label": "ł",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_L)": {
 | 
			
		||||
            "key": "HU_CLST",
 | 
			
		||||
            "label": "Ł",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_EACU)": {
 | 
			
		||||
            "key": "HU_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_AACU)": {
 | 
			
		||||
            "key": "HU_SS",
 | 
			
		||||
            "label": "ß",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_UDAC)": {
 | 
			
		||||
            "key": "HU_CURR",
 | 
			
		||||
            "label": "¤",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_IACU)": {
 | 
			
		||||
            "key": "HU_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_Y)": {
 | 
			
		||||
            "key": "HU_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_X)": {
 | 
			
		||||
            "key": "HU_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_C)": {
 | 
			
		||||
            "key": "HU_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_V)": {
 | 
			
		||||
            "key": "HU_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_B)": {
 | 
			
		||||
            "key": "HU_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_N)": {
 | 
			
		||||
            "key": "HU_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_COMM)": {
 | 
			
		||||
            "key": "HU_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(HU_MINS)": {
 | 
			
		||||
            "key": "HU_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,355 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ° │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ Ö │ - │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ Ð │ ' │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Æ │ ´ │ + │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ Þ │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "IS_RNGA",
 | 
			
		||||
            "label": "° (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "IS_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "IS_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "IS_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "IS_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "IS_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "IS_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "IS_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "IS_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "IS_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "IS_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "IS_ODIA",
 | 
			
		||||
            "label": "Ö",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "IS_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "IS_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "IS_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "IS_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "IS_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "IS_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "IS_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "IS_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "IS_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "IS_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "IS_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "IS_ETH",
 | 
			
		||||
            "label": "Ð",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "IS_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "IS_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "IS_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "IS_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "IS_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "IS_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "IS_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "IS_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "IS_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "IS_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "IS_AE",
 | 
			
		||||
            "label": "Æ",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "IS_ACUT",
 | 
			
		||||
            "label": "´ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "IS_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "IS_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "IS_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "IS_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "IS_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "IS_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "IS_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "IS_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "IS_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "IS_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "IS_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "IS_THRN",
 | 
			
		||||
            "label": "Þ",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ¨ │ ! │ " │ # │ $ │ % │ & │ / │ ( │ ) │ = │   │ _ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │   │ ? │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │   │ * │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ > │   │   │   │   │   │   │   │ ; │ : │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(IS_RNGA)": {
 | 
			
		||||
            "key": "IS_DIAE",
 | 
			
		||||
            "label": "¨ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IS_1)": {
 | 
			
		||||
            "key": "IS_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IS_2)": {
 | 
			
		||||
            "key": "IS_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IS_3)": {
 | 
			
		||||
            "key": "IS_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IS_4)": {
 | 
			
		||||
            "key": "IS_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IS_5)": {
 | 
			
		||||
            "key": "IS_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IS_6)": {
 | 
			
		||||
            "key": "IS_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IS_7)": {
 | 
			
		||||
            "key": "IS_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IS_8)": {
 | 
			
		||||
            "key": "IS_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IS_9)": {
 | 
			
		||||
            "key": "IS_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IS_0)": {
 | 
			
		||||
            "key": "IS_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IS_MINS)": {
 | 
			
		||||
            "key": "IS_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IS_QUOT)": {
 | 
			
		||||
            "key": "IS_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IS_PLUS)": {
 | 
			
		||||
            "key": "IS_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IS_LABK)": {
 | 
			
		||||
            "key": "IS_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IS_COMM)": {
 | 
			
		||||
            "key": "IS_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IS_DOT)": {
 | 
			
		||||
            "key": "IS_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ° │   │   │   │   │   │   │ { │ [ │ ] │ } │ \ │   │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ @ │   │ € │   │   │   │   │   │   │   │   │ ~ │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │ ^ │ ` │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ | │   │   │   │   │   │   │ µ │   │   │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(IS_RNGA)": {
 | 
			
		||||
            "key": "IS_DEG",
 | 
			
		||||
            "label": "°",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IS_7)": {
 | 
			
		||||
            "key": "IS_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IS_8)": {
 | 
			
		||||
            "key": "IS_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IS_9)": {
 | 
			
		||||
            "key": "IS_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IS_0)": {
 | 
			
		||||
            "key": "IS_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IS_ODIA)": {
 | 
			
		||||
            "key": "IS_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IS_Q)": {
 | 
			
		||||
            "key": "IS_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IS_E)": {
 | 
			
		||||
            "key": "IS_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IS_QUOT)": {
 | 
			
		||||
            "key": "IS_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IS_ACUT)": {
 | 
			
		||||
            "key": "IS_CIRC",
 | 
			
		||||
            "label": "^ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IS_PLUS)": {
 | 
			
		||||
            "key": "IS_GRV",
 | 
			
		||||
            "label": "` (dead)",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IS_LABK)": {
 | 
			
		||||
            "key": "IS_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IS_M)": {
 | 
			
		||||
            "key": "IS_MICR",
 | 
			
		||||
            "label": "µ",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,355 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "IE_GRV",
 | 
			
		||||
            "label": "`",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "IE_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "IE_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "IE_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "IE_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "IE_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "IE_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "IE_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "IE_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "IE_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "IE_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "IE_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "IE_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "IE_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "IE_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "IE_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "IE_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "IE_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "IE_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "IE_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "IE_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "IE_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "IE_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "IE_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "IE_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "IE_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "IE_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "IE_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "IE_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "IE_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "IE_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "IE_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "IE_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "IE_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "IE_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "IE_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "IE_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "IE_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "IE_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "IE_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "IE_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "IE_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "IE_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "IE_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "IE_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "IE_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "IE_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "IE_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ¬ │ ! │ " │ £ │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │ { │ } │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │ : │ @ │ ~ │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ | │   │   │   │   │   │   │   │ < │ > │ ? │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(IE_GRV)": {
 | 
			
		||||
            "key": "IE_NOT",
 | 
			
		||||
            "label": "¬",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_1)": {
 | 
			
		||||
            "key": "IE_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_2)": {
 | 
			
		||||
            "key": "IE_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_3)": {
 | 
			
		||||
            "key": "IE_PND",
 | 
			
		||||
            "label": "£",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_4)": {
 | 
			
		||||
            "key": "IE_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_5)": {
 | 
			
		||||
            "key": "IE_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_6)": {
 | 
			
		||||
            "key": "IE_CIRC",
 | 
			
		||||
            "label": "^",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_7)": {
 | 
			
		||||
            "key": "IE_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_8)": {
 | 
			
		||||
            "key": "IE_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_9)": {
 | 
			
		||||
            "key": "IE_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_0)": {
 | 
			
		||||
            "key": "IE_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_MINS)": {
 | 
			
		||||
            "key": "IE_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_EQL)": {
 | 
			
		||||
            "key": "IE_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_LBRC)": {
 | 
			
		||||
            "key": "IE_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_RBRC)": {
 | 
			
		||||
            "key": "IE_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_SCLN)": {
 | 
			
		||||
            "key": "IE_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_QUOT)": {
 | 
			
		||||
            "key": "IE_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_HASH)": {
 | 
			
		||||
            "key": "IE_TILD",
 | 
			
		||||
            "label": "~",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_BSLS)": {
 | 
			
		||||
            "key": "IE_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_COMM)": {
 | 
			
		||||
            "key": "IE_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_DOT)": {
 | 
			
		||||
            "key": "IE_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IE_SLSH)": {
 | 
			
		||||
            "key": "IE_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ ¦ │   │   │   │ € │   │   │   │   │   │   │   │   │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │ É │   │   │   │ Ú │ Í │ Ó │   │   │   │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ Á │   │   │   │   │   │   │   │   │   │ ´ │   │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │   │   │   │   │   │   │   │   │   │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(IE_GRV)": {
 | 
			
		||||
            "key": "IE_BRKP",
 | 
			
		||||
            "label": "¦",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IE_4)": {
 | 
			
		||||
            "key": "IE_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IE_E)": {
 | 
			
		||||
            "key": "IE_EACU",
 | 
			
		||||
            "label": "É",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IE_U)": {
 | 
			
		||||
            "key": "IE_UACU",
 | 
			
		||||
            "label": "Ú",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IE_I)": {
 | 
			
		||||
            "key": "IE_IACU",
 | 
			
		||||
            "label": "Í",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IE_O)": {
 | 
			
		||||
            "key": "IE_OACU",
 | 
			
		||||
            "label": "Ó",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IE_A)": {
 | 
			
		||||
            "key": "IE_AACU",
 | 
			
		||||
            "label": "Á",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IE_QUOT)": {
 | 
			
		||||
            "key": "IE_ACUT",
 | 
			
		||||
            "label": "´ (dead)",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,364 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "aliases": {
 | 
			
		||||
/*
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ \ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ ì │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ è │ + │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ò │ à │ ù │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "KC_GRV": {
 | 
			
		||||
            "key": "IT_BSLS",
 | 
			
		||||
            "label": "\\",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_1": {
 | 
			
		||||
            "key": "IT_1",
 | 
			
		||||
            "label": "1",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_2": {
 | 
			
		||||
            "key": "IT_2",
 | 
			
		||||
            "label": "2",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_3": {
 | 
			
		||||
            "key": "IT_3",
 | 
			
		||||
            "label": "3",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_4": {
 | 
			
		||||
            "key": "IT_4",
 | 
			
		||||
            "label": "4",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_5": {
 | 
			
		||||
            "key": "IT_5",
 | 
			
		||||
            "label": "5",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_6": {
 | 
			
		||||
            "key": "IT_6",
 | 
			
		||||
            "label": "6",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_7": {
 | 
			
		||||
            "key": "IT_7",
 | 
			
		||||
            "label": "7",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_8": {
 | 
			
		||||
            "key": "IT_8",
 | 
			
		||||
            "label": "8",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_9": {
 | 
			
		||||
            "key": "IT_9",
 | 
			
		||||
            "label": "9",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_0": {
 | 
			
		||||
            "key": "IT_0",
 | 
			
		||||
            "label": "0",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_MINS": {
 | 
			
		||||
            "key": "IT_QUOT",
 | 
			
		||||
            "label": "'",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_EQL": {
 | 
			
		||||
            "key": "IT_IGRV",
 | 
			
		||||
            "label": "ì",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Q": {
 | 
			
		||||
            "key": "IT_Q",
 | 
			
		||||
            "label": "Q",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_W": {
 | 
			
		||||
            "key": "IT_W",
 | 
			
		||||
            "label": "W",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_E": {
 | 
			
		||||
            "key": "IT_E",
 | 
			
		||||
            "label": "E",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_R": {
 | 
			
		||||
            "key": "IT_R",
 | 
			
		||||
            "label": "R",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_T": {
 | 
			
		||||
            "key": "IT_T",
 | 
			
		||||
            "label": "T",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Y": {
 | 
			
		||||
            "key": "IT_Y",
 | 
			
		||||
            "label": "Y",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_U": {
 | 
			
		||||
            "key": "IT_U",
 | 
			
		||||
            "label": "U",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_I": {
 | 
			
		||||
            "key": "IT_I",
 | 
			
		||||
            "label": "I",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_O": {
 | 
			
		||||
            "key": "IT_O",
 | 
			
		||||
            "label": "O",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_P": {
 | 
			
		||||
            "key": "IT_P",
 | 
			
		||||
            "label": "P",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_LBRC": {
 | 
			
		||||
            "key": "IT_EGRV",
 | 
			
		||||
            "label": "è",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_RBRC": {
 | 
			
		||||
            "key": "IT_PLUS",
 | 
			
		||||
            "label": "+",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_A": {
 | 
			
		||||
            "key": "IT_A",
 | 
			
		||||
            "label": "A",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_S": {
 | 
			
		||||
            "key": "IT_S",
 | 
			
		||||
            "label": "S",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_D": {
 | 
			
		||||
            "key": "IT_D",
 | 
			
		||||
            "label": "D",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_F": {
 | 
			
		||||
            "key": "IT_F",
 | 
			
		||||
            "label": "F",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_G": {
 | 
			
		||||
            "key": "IT_G",
 | 
			
		||||
            "label": "G",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_H": {
 | 
			
		||||
            "key": "IT_H",
 | 
			
		||||
            "label": "H",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_J": {
 | 
			
		||||
            "key": "IT_J",
 | 
			
		||||
            "label": "J",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_K": {
 | 
			
		||||
            "key": "IT_K",
 | 
			
		||||
            "label": "K",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_L": {
 | 
			
		||||
            "key": "IT_L",
 | 
			
		||||
            "label": "L",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SCLN": {
 | 
			
		||||
            "key": "IT_OGRV",
 | 
			
		||||
            "label": "ò",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_QUOT": {
 | 
			
		||||
            "key": "IT_AGRV",
 | 
			
		||||
            "label": "à",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUHS": {
 | 
			
		||||
            "key": "IT_UGRV",
 | 
			
		||||
            "label": "ù",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_NUBS": {
 | 
			
		||||
            "key": "IT_LABK",
 | 
			
		||||
            "label": "<",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_Z": {
 | 
			
		||||
            "key": "IT_Z",
 | 
			
		||||
            "label": "Z",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_X": {
 | 
			
		||||
            "key": "IT_X",
 | 
			
		||||
            "label": "X",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_C": {
 | 
			
		||||
            "key": "IT_C",
 | 
			
		||||
            "label": "C",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_B": {
 | 
			
		||||
            "key": "IT_B",
 | 
			
		||||
            "label": "B",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_V": {
 | 
			
		||||
            "key": "IT_V",
 | 
			
		||||
            "label": "V",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_N": {
 | 
			
		||||
            "key": "IT_N",
 | 
			
		||||
            "label": "N",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_M": {
 | 
			
		||||
            "key": "IT_M",
 | 
			
		||||
            "label": "M",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_COMM": {
 | 
			
		||||
            "key": "IT_COMM",
 | 
			
		||||
            "label": ",",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_DOT": {
 | 
			
		||||
            "key": "IT_DOT",
 | 
			
		||||
            "label": ".",
 | 
			
		||||
        }
 | 
			
		||||
        "KC_SLSH": {
 | 
			
		||||
            "key": "IT_MINS",
 | 
			
		||||
            "label": "-",
 | 
			
		||||
        }
 | 
			
		||||
/* Shifted symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │ | │ ! │ " │ £ │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ^ │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │ é │ * │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │ ç │ ° │ § │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(IT_BSLS)": {
 | 
			
		||||
            "key": "IT_PIPE",
 | 
			
		||||
            "label": "|",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_1)": {
 | 
			
		||||
            "key": "IT_EXLM",
 | 
			
		||||
            "label": "!",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_2)": {
 | 
			
		||||
            "key": "IT_DQUO",
 | 
			
		||||
            "label": "\"",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_3)": {
 | 
			
		||||
            "key": "IT_PND",
 | 
			
		||||
            "label": "£",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_4)": {
 | 
			
		||||
            "key": "IT_DLR",
 | 
			
		||||
            "label": "$",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_5)": {
 | 
			
		||||
            "key": "IT_PERC",
 | 
			
		||||
            "label": "%",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_6)": {
 | 
			
		||||
            "key": "IT_AMPR",
 | 
			
		||||
            "label": "&",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_7)": {
 | 
			
		||||
            "key": "IT_SLSH",
 | 
			
		||||
            "label": "/",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_8)": {
 | 
			
		||||
            "key": "IT_LPRN",
 | 
			
		||||
            "label": "(",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_9)": {
 | 
			
		||||
            "key": "IT_RPRN",
 | 
			
		||||
            "label": ")",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_0)": {
 | 
			
		||||
            "key": "IT_EQL",
 | 
			
		||||
            "label": "=",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_QUOT)": {
 | 
			
		||||
            "key": "IT_QUES",
 | 
			
		||||
            "label": "?",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_IGRV)": {
 | 
			
		||||
            "key": "IT_CIRC",
 | 
			
		||||
            "label": "^",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_EGRV)": {
 | 
			
		||||
            "key": "IT_EACU",
 | 
			
		||||
            "label": "é",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_PLUS)": {
 | 
			
		||||
            "key": "IT_ASTR",
 | 
			
		||||
            "label": "*",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_OGRV)": {
 | 
			
		||||
            "key": "IT_CCED",
 | 
			
		||||
            "label": "ç",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_AGRV)": {
 | 
			
		||||
            "key": "IT_DEG",
 | 
			
		||||
            "label": "°",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_UGRV)": {
 | 
			
		||||
            "key": "IT_SECT",
 | 
			
		||||
            "label": "§",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_LABK)": {
 | 
			
		||||
            "key": "IT_RABK",
 | 
			
		||||
            "label": ">",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_DOT)": {
 | 
			
		||||
            "key": "IT_COLN",
 | 
			
		||||
            "label": ":",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_COMM)": {
 | 
			
		||||
            "key": "IT_SCLN",
 | 
			
		||||
            "label": ";",
 | 
			
		||||
        }
 | 
			
		||||
        "S(IT_MINS)": {
 | 
			
		||||
            "key": "IT_UNDS",
 | 
			
		||||
            "label": "_",
 | 
			
		||||
        }
 | 
			
		||||
/* AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │   │   │   │   │   │   │   │   │   │   │   │   │   │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │ € │   │   │   │   │   │   │   │ [ │ ] │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │ @ │ # │   │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │   │   │   │   │   │   │   │   │   │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "ALGR(IT_E)": {
 | 
			
		||||
            "key": "IT_EURO",
 | 
			
		||||
            "label": "€",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IT_EGRV)": {
 | 
			
		||||
            "key": "IT_LBRC",
 | 
			
		||||
            "label": "[",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IT_PLUS)": {
 | 
			
		||||
            "key": "IT_RBRC",
 | 
			
		||||
            "label": "]",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IT_OGRV)": {
 | 
			
		||||
            "key": "IT_AT",
 | 
			
		||||
            "label": "@",
 | 
			
		||||
        }
 | 
			
		||||
        "ALGR(IT_AGRV)": {
 | 
			
		||||
            "key": "IT_HASH",
 | 
			
		||||
            "label": "#",
 | 
			
		||||
        }
 | 
			
		||||
/* Shift+AltGr symbols
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 | 
			
		||||
 * │   │   │   │   │   │   │   │   │   │   │   │   │   │       │
 | 
			
		||||
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 | 
			
		||||
 * │     │   │   │   │   │   │   │   │   │   │   │ { │ } │     │
 | 
			
		||||
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 | 
			
		||||
 * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
 | 
			
		||||
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 | 
			
		||||
 * │    │   │   │   │   │   │   │   │   │   │   │   │          │
 | 
			
		||||
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 | 
			
		||||
 * │    │    │    │                        │    │    │    │    │
 | 
			
		||||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
        "S(ALGR(IT_EGRV))": {
 | 
			
		||||
            "key": "IT_LCBR",
 | 
			
		||||
            "label": "{",
 | 
			
		||||
        }
 | 
			
		||||
        "S(ALGR(IT_PLUS))": {
 | 
			
		||||
            "key": "IT_RCBR",
 | 
			
		||||
            "label": "}",
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue