Fixing remaining gofmt/misspell issues for goreportcard

This commit is contained in:
Kenneth Shaw 2017-03-02 10:24:35 +07:00
parent 22e287750a
commit 8e8dabbe6c
15 changed files with 308 additions and 251 deletions

View File

@ -243,7 +243,7 @@ func (p *RemoveBreakpointParams) Do(ctxt context.Context, h cdp.Handler) (err er
// scriptId in start and end range locations should be the same. // scriptId in start and end range locations should be the same.
type GetPossibleBreakpointsParams struct { type GetPossibleBreakpointsParams struct {
Start *Location `json:"start"` // Start of range to search possible breakpoint locations in. Start *Location `json:"start"` // Start of range to search possible breakpoint locations in.
End *Location `json:"end,omitempty"` // End of range to search possible breakpoint locations in (excluding). When not specifed, end of scripts is used as end of range. End *Location `json:"end,omitempty"` // End of range to search possible breakpoint locations in (excluding). When not specified, end of scripts is used as end of range.
RestrictToFunction bool `json:"restrictToFunction,omitempty"` // Only consider locations which are in the same (non-nested) function as start. RestrictToFunction bool `json:"restrictToFunction,omitempty"` // Only consider locations which are in the same (non-nested) function as start.
} }
@ -259,7 +259,7 @@ func GetPossibleBreakpoints(start *Location) *GetPossibleBreakpointsParams {
} }
// WithEnd end of range to search possible breakpoint locations in // WithEnd end of range to search possible breakpoint locations in
// (excluding). When not specifed, end of scripts is used as end of range. // (excluding). When not specified, end of scripts is used as end of range.
func (p GetPossibleBreakpointsParams) WithEnd(end *Location) *GetPossibleBreakpointsParams { func (p GetPossibleBreakpointsParams) WithEnd(end *Location) *GetPossibleBreakpointsParams {
p.End = end p.End = end
return &p return &p

View File

@ -95,9 +95,9 @@ type EventPseudoElementRemoved struct {
PseudoElementID cdp.NodeID `json:"pseudoElementId,omitempty"` // The removed pseudo element id. PseudoElementID cdp.NodeID `json:"pseudoElementId,omitempty"` // The removed pseudo element id.
} }
// EventDistributedNodesUpdated called when distrubution is changed. // EventDistributedNodesUpdated called when distribution is changed.
type EventDistributedNodesUpdated struct { type EventDistributedNodesUpdated struct {
InsertionPointID cdp.NodeID `json:"insertionPointId,omitempty"` // Insertion point where distrubuted nodes were updated. InsertionPointID cdp.NodeID `json:"insertionPointId,omitempty"` // Insertion point where distributed nodes were updated.
DistributedNodes []*cdp.BackendNode `json:"distributedNodes,omitempty"` // Distributed nodes for given insertion point. DistributedNodes []*cdp.BackendNode `json:"distributedNodes,omitempty"` // Distributed nodes for given insertion point.
} }

View File

@ -100,10 +100,10 @@ func (p *SetDeviceMetricsOverrideParams) Do(ctxt context.Context, h cdp.Handler)
return h.Execute(ctxt, cdp.CommandEmulationSetDeviceMetricsOverride, p, nil) return h.Execute(ctxt, cdp.CommandEmulationSetDeviceMetricsOverride, p, nil)
} }
// ClearDeviceMetricsOverrideParams clears the overriden device metrics. // ClearDeviceMetricsOverrideParams clears the overridden device metrics.
type ClearDeviceMetricsOverrideParams struct{} type ClearDeviceMetricsOverrideParams struct{}
// ClearDeviceMetricsOverride clears the overriden device metrics. // ClearDeviceMetricsOverride clears the overridden device metrics.
func ClearDeviceMetricsOverride() *ClearDeviceMetricsOverrideParams { func ClearDeviceMetricsOverride() *ClearDeviceMetricsOverrideParams {
return &ClearDeviceMetricsOverrideParams{} return &ClearDeviceMetricsOverrideParams{}
} }
@ -289,11 +289,11 @@ func (p *SetGeolocationOverrideParams) Do(ctxt context.Context, h cdp.Handler) (
return h.Execute(ctxt, cdp.CommandEmulationSetGeolocationOverride, p, nil) return h.Execute(ctxt, cdp.CommandEmulationSetGeolocationOverride, p, nil)
} }
// ClearGeolocationOverrideParams clears the overriden Geolocation Position // ClearGeolocationOverrideParams clears the overridden Geolocation Position
// and Error. // and Error.
type ClearGeolocationOverrideParams struct{} type ClearGeolocationOverrideParams struct{}
// ClearGeolocationOverride clears the overriden Geolocation Position and // ClearGeolocationOverride clears the overridden Geolocation Position and
// Error. // Error.
func ClearGeolocationOverride() *ClearGeolocationOverrideParams { func ClearGeolocationOverride() *ClearGeolocationOverrideParams {
return &ClearGeolocationOverrideParams{} return &ClearGeolocationOverrideParams{}

View File

@ -22,7 +22,7 @@ type EventReportHeapSnapshotProgress struct {
} }
// EventLastSeenObjectID if heap objects tracking has been started then // EventLastSeenObjectID if heap objects tracking has been started then
// backend regulary sends a current value for last seen object id and // backend regularly sends a current value for last seen object id and
// corresponding timestamp. If the were changes in the heap since last event // corresponding timestamp. If the were changes in the heap since last event
// then one or more heapStatsUpdate events will be sent before a new // then one or more heapStatsUpdate events will be sent before a new
// lastSeenObjectId event. // lastSeenObjectId event.

View File

@ -48,7 +48,7 @@ func (p ReadParams) WithSize(size int64) *ReadParams {
// ReadReturns return values. // ReadReturns return values.
type ReadReturns struct { type ReadReturns struct {
Data string `json:"data,omitempty"` // Data that were read. Data string `json:"data,omitempty"` // Data that were read.
EOF bool `json:"eof,omitempty"` // Set if the end-of-file condition occured while reading. EOF bool `json:"eof,omitempty"` // Set if the end-of-file condition occurred while reading.
} }
// Do executes IO.read against the provided context and // Do executes IO.read against the provided context and
@ -56,7 +56,7 @@ type ReadReturns struct {
// //
// returns: // returns:
// data - Data that were read. // data - Data that were read.
// eof - Set if the end-of-file condition occured while reading. // eof - Set if the end-of-file condition occurred while reading.
func (p *ReadParams) Do(ctxt context.Context, h cdp.Handler) (data string, eof bool, err error) { func (p *ReadParams) Do(ctxt context.Context, h cdp.Handler) (data string, eof bool, err error) {
// execute // execute
var res ReadReturns var res ReadReturns

View File

@ -3,6 +3,8 @@
set -ve set -ve
go generate go generate
gofmt -w -s templates/*.go
go build go build
time ./chromedp-gen $@ time ./chromedp-gen $@

View File

@ -103,12 +103,12 @@ func FixDomains(domains []*internal.Domain) {
Type: internal.TypeObject, Type: internal.TypeObject,
Description: "Message error type.", Description: "Message error type.",
Properties: []*internal.Type{ Properties: []*internal.Type{
&internal.Type{ {
Name: "code", Name: "code",
Type: internal.TypeInteger, Type: internal.TypeInteger,
Description: "Error code.", Description: "Error code.",
}, },
&internal.Type{ {
Name: "message", Name: "message",
Type: internal.TypeString, Type: internal.TypeString,
Description: "Error message.", Description: "Error message.",
@ -123,27 +123,27 @@ func FixDomains(domains []*internal.Domain) {
Type: internal.TypeObject, Type: internal.TypeObject,
Description: "Chrome Debugging Protocol message sent to/read over websocket connection.", Description: "Chrome Debugging Protocol message sent to/read over websocket connection.",
Properties: []*internal.Type{ Properties: []*internal.Type{
&internal.Type{ {
Name: "id", Name: "id",
Type: internal.TypeInteger, Type: internal.TypeInteger,
Description: "Unique message identifier.", Description: "Unique message identifier.",
}, },
&internal.Type{ {
Name: "method", Name: "method",
Ref: "Inspector.MethodType", Ref: "Inspector.MethodType",
Description: "Event or command type.", Description: "Event or command type.",
}, },
&internal.Type{ {
Name: "params", Name: "params",
Type: internal.TypeAny, Type: internal.TypeAny,
Description: "Event or command parameters.", Description: "Event or command parameters.",
}, },
&internal.Type{ {
Name: "result", Name: "result",
Type: internal.TypeAny, Type: internal.TypeAny,
Description: "Command return values.", Description: "Command return values.",
}, },
&internal.Type{ {
Name: "error", Name: "error",
Ref: "MessageError", Ref: "MessageError",
Description: "Error message.", Description: "Error message.",

View File

@ -213,6 +213,7 @@ func (t Type) IDorName() string {
func (t Type) String() string { func (t Type) String() string {
desc := t.GetDescription() desc := t.GetDescription()
if desc != "" { if desc != "" {
desc, _ = MisspellReplacer.Replace(desc)
desc = " - " + desc desc = " - " + desc
} }

View File

@ -5,6 +5,7 @@ import (
"regexp" "regexp"
"strings" "strings"
"github.com/client9/misspell"
"github.com/knq/snaker" "github.com/knq/snaker"
) )
@ -18,6 +19,14 @@ const (
Base64EncodedDescriptionPrefix = "Base64-encoded" Base64EncodedDescriptionPrefix = "Base64-encoded"
) )
// MisspellReplacer is the misspelling replacer
var MisspellReplacer *misspell.Replacer
func init() {
MisspellReplacer = misspell.New()
MisspellReplacer.Compile()
}
// ForceCamel forces camel case specific to go. // ForceCamel forces camel case specific to go.
func ForceCamel(s string) string { func ForceCamel(s string) string {
if s == "" { if s == "" {
@ -114,7 +123,9 @@ func structDef(types []*Type, d *Domain, domains []*Domain, noExposeOverride, om
// add comment // add comment
if v.Type != TypeObject && v.Description != "" { if v.Type != TypeObject && v.Description != "" {
s += " // " + CodeRE.ReplaceAllString(v.Description, "") comment := CodeRE.ReplaceAllString(v.Description, "")
comment, _ = MisspellReplacer.Replace(comment)
s += " // " + comment
} }
} }
if len(types) > 0 { if len(types) > 0 {

View File

@ -111,6 +111,13 @@ func main() {
os.Exit(1) os.Exit(1)
} }
// gofmt
err = gofmt(files)
if err != nil {
fmt.Fprintf(os.Stderr, "error: %v\n", err)
os.Exit(1)
}
log.Printf("done.") log.Printf("done.")
} }
@ -249,6 +256,32 @@ func easyjson(pkgs []string) error {
return nil return nil
} }
// gofmt formats all the output file buffers on disk using gofmt.
func gofmt(fileBuffers map[string]*bytes.Buffer) error {
log.Printf("running gofmt")
var keys []string
for k := range fileBuffers {
keys = append(keys, k)
}
sort.Strings(keys)
var wg sync.WaitGroup
for _, n := range keys {
wg.Add(1)
go func(wg *sync.WaitGroup, n string) {
defer wg.Done()
buf, err := exec.Command("gofmt", "-w", "-s", out()+"/"+n).CombinedOutput()
if err != nil {
log.Fatalf("error: could not format %s, got:\n%s", n, string(buf))
}
}(&wg, n)
}
wg.Wait()
return nil
}
// out returns the output path of the passed package flag. // out returns the output path of the passed package flag.
func out() string { func out() string {
return os.Getenv("GOPATH") + "/src/" + *internal.FlagPkg return os.Getenv("GOPATH") + "/src/" + *internal.FlagPkg

View File

@ -107,7 +107,7 @@ func FileHeader(pkgName string, d *internal.Domain) string {
func StreamFileImportTemplate(qw422016 *qt422016.Writer, m map[string]string) { func StreamFileImportTemplate(qw422016 *qt422016.Writer, m map[string]string) {
//line templates/file.qtpl:22 //line templates/file.qtpl:22
var keys []string var keys []string
for k, _ := range m { for k := range m {
keys = append(keys, k) keys = append(keys, k)
} }
sort.Strings(keys) sort.Strings(keys)

View File

@ -28,6 +28,8 @@ func formatComment(s, chop, newstr string) string {
} }
s += "." s += "."
s, _ = internal.MisspellReplacer.Replace(s)
return wrap(s, commentWidth-len(commentPrefix), commentPrefix) return wrap(s, commentWidth-len(commentPrefix), commentPrefix)
} }

View File

@ -6,6 +6,8 @@ pushd $SRC &> /dev/null
gometalinter \ gometalinter \
--disable=aligncheck \ --disable=aligncheck \
--enable=misspell \
--enable=gofmt \
--deadline=100s \ --deadline=100s \
--cyclo-over=25 \ --cyclo-over=25 \
--sort=path \ --sort=path \

View File

@ -68,9 +68,9 @@ func main() {
// special characters // special characters
keys := map[rune]kb.Key{ keys := map[rune]kb.Key{
'\b': kb.Key{"Backspace", "Backspace", "", "", int64('\b'), int64('\b'), false, false}, '\b': {"Backspace", "Backspace", "", "", int64('\b'), int64('\b'), false, false},
'\t': kb.Key{"Tab", "Tab", "", "", int64('\t'), int64('\t'), false, false}, '\t': {"Tab", "Tab", "", "", int64('\t'), int64('\t'), false, false},
'\r': kb.Key{"Enter", "Enter", "\r", "\r", int64('\r'), int64('\r'), false, true}, '\r': {"Enter", "Enter", "\r", "\r", int64('\r'), int64('\r'), false, true},
} }
// load keys // load keys
@ -100,6 +100,12 @@ func main() {
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
// format
err = exec.Command("gofmt", "-s", "-w", *flagOut).Run()
if err != nil {
log.Fatal(err)
}
} }
// loadKeys loads the dom key definitions from the chromium source tree. // loadKeys loads the dom key definitions from the chromium source tree.

View File

@ -100,12 +100,12 @@ const (
AudioVolumeDown = "\u0a0f" AudioVolumeDown = "\u0a0f"
AudioVolumeUp = "\u0a10" AudioVolumeUp = "\u0a10"
AudioVolumeMute = "\u0a11" AudioVolumeMute = "\u0a11"
LaunchCalculator = "\u0b01" LaunchApplication2 = "\u0b01"
LaunchCalendar = "\u0b02" LaunchCalendar = "\u0b02"
LaunchMail = "\u0b03" LaunchMail = "\u0b03"
LaunchMediaPlayer = "\u0b04" LaunchMediaPlayer = "\u0b04"
LaunchMusicPlayer = "\u0b05" LaunchMusicPlayer = "\u0b05"
LaunchMyComputer = "\u0b06" LaunchApplication1 = "\u0b06"
LaunchScreenSaver = "\u0b07" LaunchScreenSaver = "\u0b07"
LaunchSpreadsheet = "\u0b08" LaunchSpreadsheet = "\u0b08"
LaunchWebBrowser = "\u0b09" LaunchWebBrowser = "\u0b09"
@ -138,230 +138,230 @@ const (
// Keys is the map of unicode characters to their DOM key data. // Keys is the map of unicode characters to their DOM key data.
var Keys = map[rune]*Key{ var Keys = map[rune]*Key{
'\b': &Key{"Backspace", "Backspace", "", "", 8, 8, false, false}, '\b': {"Backspace", "Backspace", "", "", 8, 8, false, false},
'\t': &Key{"Tab", "Tab", "", "", 9, 9, false, false}, '\t': {"Tab", "Tab", "", "", 9, 9, false, false},
'\r': &Key{"Enter", "Enter", "\r", "\r", 13, 13, false, true}, '\r': {"Enter", "Enter", "\r", "\r", 13, 13, false, true},
'\u001b': &Key{"Escape", "Escape", "", "", 27, 27, false, false}, '\u001b': {"Escape", "Escape", "", "", 27, 27, false, false},
' ': &Key{"Space", " ", " ", " ", 32, 32, false, true}, ' ': {"Space", " ", " ", " ", 32, 32, false, true},
'!': &Key{"Digit1", "!", "!", "1", 49, 49, true, true}, '!': {"Digit1", "!", "!", "1", 49, 49, true, true},
'"': &Key{"Quote", "\"", "\"", "'", 222, 222, true, true}, '"': {"Quote", "\"", "\"", "'", 222, 222, true, true},
'#': &Key{"Digit3", "#", "#", "3", 51, 51, true, true}, '#': {"Digit3", "#", "#", "3", 51, 51, true, true},
'$': &Key{"Digit4", "$", "$", "4", 52, 52, true, true}, '$': {"Digit4", "$", "$", "4", 52, 52, true, true},
'%': &Key{"Digit5", "%", "%", "5", 53, 53, true, true}, '%': {"Digit5", "%", "%", "5", 53, 53, true, true},
'&': &Key{"Digit7", "&", "&", "7", 55, 55, true, true}, '&': {"Digit7", "&", "&", "7", 55, 55, true, true},
'\'': &Key{"Quote", "'", "'", "'", 222, 222, false, true}, '\'': {"Quote", "'", "'", "'", 222, 222, false, true},
'(': &Key{"Digit9", "(", "(", "9", 57, 57, true, true}, '(': {"Digit9", "(", "(", "9", 57, 57, true, true},
')': &Key{"Digit0", ")", ")", "0", 48, 48, true, true}, ')': {"Digit0", ")", ")", "0", 48, 48, true, true},
'*': &Key{"Digit8", "*", "*", "8", 56, 56, true, true}, '*': {"Digit8", "*", "*", "8", 56, 56, true, true},
'+': &Key{"Equal", "+", "+", "=", 187, 187, true, true}, '+': {"Equal", "+", "+", "=", 187, 187, true, true},
',': &Key{"Comma", ",", ",", ",", 188, 188, false, true}, ',': {"Comma", ",", ",", ",", 188, 188, false, true},
'-': &Key{"Minus", "-", "-", "-", 189, 189, false, true}, '-': {"Minus", "-", "-", "-", 189, 189, false, true},
'.': &Key{"Period", ".", ".", ".", 190, 190, false, true}, '.': {"Period", ".", ".", ".", 190, 190, false, true},
'/': &Key{"Slash", "/", "/", "/", 191, 191, false, true}, '/': {"Slash", "/", "/", "/", 191, 191, false, true},
'0': &Key{"Digit0", "0", "0", "0", 48, 48, false, true}, '0': {"Digit0", "0", "0", "0", 48, 48, false, true},
'1': &Key{"Digit1", "1", "1", "1", 49, 49, false, true}, '1': {"Digit1", "1", "1", "1", 49, 49, false, true},
'2': &Key{"Digit2", "2", "2", "2", 50, 50, false, true}, '2': {"Digit2", "2", "2", "2", 50, 50, false, true},
'3': &Key{"Digit3", "3", "3", "3", 51, 51, false, true}, '3': {"Digit3", "3", "3", "3", 51, 51, false, true},
'4': &Key{"Digit4", "4", "4", "4", 52, 52, false, true}, '4': {"Digit4", "4", "4", "4", 52, 52, false, true},
'5': &Key{"Digit5", "5", "5", "5", 53, 53, false, true}, '5': {"Digit5", "5", "5", "5", 53, 53, false, true},
'6': &Key{"Digit6", "6", "6", "6", 54, 54, false, true}, '6': {"Digit6", "6", "6", "6", 54, 54, false, true},
'7': &Key{"Digit7", "7", "7", "7", 55, 55, false, true}, '7': {"Digit7", "7", "7", "7", 55, 55, false, true},
'8': &Key{"Digit8", "8", "8", "8", 56, 56, false, true}, '8': {"Digit8", "8", "8", "8", 56, 56, false, true},
'9': &Key{"Digit9", "9", "9", "9", 57, 57, false, true}, '9': {"Digit9", "9", "9", "9", 57, 57, false, true},
':': &Key{"Semicolon", ":", ":", ";", 186, 186, true, true}, ':': {"Semicolon", ":", ":", ";", 186, 186, true, true},
';': &Key{"Semicolon", ";", ";", ";", 186, 186, false, true}, ';': {"Semicolon", ";", ";", ";", 186, 186, false, true},
'<': &Key{"Comma", "<", "<", ",", 188, 188, true, true}, '<': {"Comma", "<", "<", ",", 188, 188, true, true},
'=': &Key{"Equal", "=", "=", "=", 187, 187, false, true}, '=': {"Equal", "=", "=", "=", 187, 187, false, true},
'>': &Key{"Period", ">", ">", ".", 190, 190, true, true}, '>': {"Period", ">", ">", ".", 190, 190, true, true},
'?': &Key{"Slash", "?", "?", "/", 191, 191, true, true}, '?': {"Slash", "?", "?", "/", 191, 191, true, true},
'@': &Key{"Digit2", "@", "@", "2", 50, 50, true, true}, '@': {"Digit2", "@", "@", "2", 50, 50, true, true},
'A': &Key{"KeyA", "A", "A", "a", 65, 65, true, true}, 'A': {"KeyA", "A", "A", "a", 65, 65, true, true},
'B': &Key{"KeyB", "B", "B", "b", 66, 66, true, true}, 'B': {"KeyB", "B", "B", "b", 66, 66, true, true},
'C': &Key{"KeyC", "C", "C", "c", 67, 67, true, true}, 'C': {"KeyC", "C", "C", "c", 67, 67, true, true},
'D': &Key{"KeyD", "D", "D", "d", 68, 68, true, true}, 'D': {"KeyD", "D", "D", "d", 68, 68, true, true},
'E': &Key{"KeyE", "E", "E", "e", 69, 69, true, true}, 'E': {"KeyE", "E", "E", "e", 69, 69, true, true},
'F': &Key{"KeyF", "F", "F", "f", 70, 70, true, true}, 'F': {"KeyF", "F", "F", "f", 70, 70, true, true},
'G': &Key{"KeyG", "G", "G", "g", 71, 71, true, true}, 'G': {"KeyG", "G", "G", "g", 71, 71, true, true},
'H': &Key{"KeyH", "H", "H", "h", 72, 72, true, true}, 'H': {"KeyH", "H", "H", "h", 72, 72, true, true},
'I': &Key{"KeyI", "I", "I", "i", 73, 73, true, true}, 'I': {"KeyI", "I", "I", "i", 73, 73, true, true},
'J': &Key{"KeyJ", "J", "J", "j", 74, 74, true, true}, 'J': {"KeyJ", "J", "J", "j", 74, 74, true, true},
'K': &Key{"KeyK", "K", "K", "k", 75, 75, true, true}, 'K': {"KeyK", "K", "K", "k", 75, 75, true, true},
'L': &Key{"KeyL", "L", "L", "l", 76, 76, true, true}, 'L': {"KeyL", "L", "L", "l", 76, 76, true, true},
'M': &Key{"KeyM", "M", "M", "m", 77, 77, true, true}, 'M': {"KeyM", "M", "M", "m", 77, 77, true, true},
'N': &Key{"KeyN", "N", "N", "n", 78, 78, true, true}, 'N': {"KeyN", "N", "N", "n", 78, 78, true, true},
'O': &Key{"KeyO", "O", "O", "o", 79, 79, true, true}, 'O': {"KeyO", "O", "O", "o", 79, 79, true, true},
'P': &Key{"KeyP", "P", "P", "p", 80, 80, true, true}, 'P': {"KeyP", "P", "P", "p", 80, 80, true, true},
'Q': &Key{"KeyQ", "Q", "Q", "q", 81, 81, true, true}, 'Q': {"KeyQ", "Q", "Q", "q", 81, 81, true, true},
'R': &Key{"KeyR", "R", "R", "r", 82, 82, true, true}, 'R': {"KeyR", "R", "R", "r", 82, 82, true, true},
'S': &Key{"KeyS", "S", "S", "s", 83, 83, true, true}, 'S': {"KeyS", "S", "S", "s", 83, 83, true, true},
'T': &Key{"KeyT", "T", "T", "t", 84, 84, true, true}, 'T': {"KeyT", "T", "T", "t", 84, 84, true, true},
'U': &Key{"KeyU", "U", "U", "u", 85, 85, true, true}, 'U': {"KeyU", "U", "U", "u", 85, 85, true, true},
'V': &Key{"KeyV", "V", "V", "v", 86, 86, true, true}, 'V': {"KeyV", "V", "V", "v", 86, 86, true, true},
'W': &Key{"KeyW", "W", "W", "w", 87, 87, true, true}, 'W': {"KeyW", "W", "W", "w", 87, 87, true, true},
'X': &Key{"KeyX", "X", "X", "x", 88, 88, true, true}, 'X': {"KeyX", "X", "X", "x", 88, 88, true, true},
'Y': &Key{"KeyY", "Y", "Y", "y", 89, 89, true, true}, 'Y': {"KeyY", "Y", "Y", "y", 89, 89, true, true},
'Z': &Key{"KeyZ", "Z", "Z", "z", 90, 90, true, true}, 'Z': {"KeyZ", "Z", "Z", "z", 90, 90, true, true},
'[': &Key{"BracketLeft", "[", "[", "[", 219, 219, false, true}, '[': {"BracketLeft", "[", "[", "[", 219, 219, false, true},
'\\': &Key{"Backslash", "\\", "\\", "\\", 220, 220, false, true}, '\\': {"Backslash", "\\", "\\", "\\", 220, 220, false, true},
']': &Key{"BracketRight", "]", "]", "]", 221, 221, false, true}, ']': {"BracketRight", "]", "]", "]", 221, 221, false, true},
'^': &Key{"Digit6", "^", "^", "6", 54, 54, true, true}, '^': {"Digit6", "^", "^", "6", 54, 54, true, true},
'_': &Key{"Minus", "_", "_", "-", 189, 189, true, true}, '_': {"Minus", "_", "_", "-", 189, 189, true, true},
'`': &Key{"Backquote", "`", "`", "`", 192, 192, false, true}, '`': {"Backquote", "`", "`", "`", 192, 192, false, true},
'a': &Key{"KeyA", "a", "a", "a", 65, 65, false, true}, 'a': {"KeyA", "a", "a", "a", 65, 65, false, true},
'b': &Key{"KeyB", "b", "b", "b", 66, 66, false, true}, 'b': {"KeyB", "b", "b", "b", 66, 66, false, true},
'c': &Key{"KeyC", "c", "c", "c", 67, 67, false, true}, 'c': {"KeyC", "c", "c", "c", 67, 67, false, true},
'd': &Key{"KeyD", "d", "d", "d", 68, 68, false, true}, 'd': {"KeyD", "d", "d", "d", 68, 68, false, true},
'e': &Key{"KeyE", "e", "e", "e", 69, 69, false, true}, 'e': {"KeyE", "e", "e", "e", 69, 69, false, true},
'f': &Key{"KeyF", "f", "f", "f", 70, 70, false, true}, 'f': {"KeyF", "f", "f", "f", 70, 70, false, true},
'g': &Key{"KeyG", "g", "g", "g", 71, 71, false, true}, 'g': {"KeyG", "g", "g", "g", 71, 71, false, true},
'h': &Key{"KeyH", "h", "h", "h", 72, 72, false, true}, 'h': {"KeyH", "h", "h", "h", 72, 72, false, true},
'i': &Key{"KeyI", "i", "i", "i", 73, 73, false, true}, 'i': {"KeyI", "i", "i", "i", 73, 73, false, true},
'j': &Key{"KeyJ", "j", "j", "j", 74, 74, false, true}, 'j': {"KeyJ", "j", "j", "j", 74, 74, false, true},
'k': &Key{"KeyK", "k", "k", "k", 75, 75, false, true}, 'k': {"KeyK", "k", "k", "k", 75, 75, false, true},
'l': &Key{"KeyL", "l", "l", "l", 76, 76, false, true}, 'l': {"KeyL", "l", "l", "l", 76, 76, false, true},
'm': &Key{"KeyM", "m", "m", "m", 77, 77, false, true}, 'm': {"KeyM", "m", "m", "m", 77, 77, false, true},
'n': &Key{"KeyN", "n", "n", "n", 78, 78, false, true}, 'n': {"KeyN", "n", "n", "n", 78, 78, false, true},
'o': &Key{"KeyO", "o", "o", "o", 79, 79, false, true}, 'o': {"KeyO", "o", "o", "o", 79, 79, false, true},
'p': &Key{"KeyP", "p", "p", "p", 80, 80, false, true}, 'p': {"KeyP", "p", "p", "p", 80, 80, false, true},
'q': &Key{"KeyQ", "q", "q", "q", 81, 81, false, true}, 'q': {"KeyQ", "q", "q", "q", 81, 81, false, true},
'r': &Key{"KeyR", "r", "r", "r", 82, 82, false, true}, 'r': {"KeyR", "r", "r", "r", 82, 82, false, true},
's': &Key{"KeyS", "s", "s", "s", 83, 83, false, true}, 's': {"KeyS", "s", "s", "s", 83, 83, false, true},
't': &Key{"KeyT", "t", "t", "t", 84, 84, false, true}, 't': {"KeyT", "t", "t", "t", 84, 84, false, true},
'u': &Key{"KeyU", "u", "u", "u", 85, 85, false, true}, 'u': {"KeyU", "u", "u", "u", 85, 85, false, true},
'v': &Key{"KeyV", "v", "v", "v", 86, 86, false, true}, 'v': {"KeyV", "v", "v", "v", 86, 86, false, true},
'w': &Key{"KeyW", "w", "w", "w", 87, 87, false, true}, 'w': {"KeyW", "w", "w", "w", 87, 87, false, true},
'x': &Key{"KeyX", "x", "x", "x", 88, 88, false, true}, 'x': {"KeyX", "x", "x", "x", 88, 88, false, true},
'y': &Key{"KeyY", "y", "y", "y", 89, 89, false, true}, 'y': {"KeyY", "y", "y", "y", 89, 89, false, true},
'z': &Key{"KeyZ", "z", "z", "z", 90, 90, false, true}, 'z': {"KeyZ", "z", "z", "z", 90, 90, false, true},
'{': &Key{"BracketLeft", "{", "{", "[", 219, 219, true, true}, '{': {"BracketLeft", "{", "{", "[", 219, 219, true, true},
'|': &Key{"Backslash", "|", "|", "\\", 220, 220, true, true}, '|': {"Backslash", "|", "|", "\\", 220, 220, true, true},
'}': &Key{"BracketRight", "}", "}", "]", 221, 221, true, true}, '}': {"BracketRight", "}", "}", "]", 221, 221, true, true},
'~': &Key{"Backquote", "~", "~", "`", 192, 192, true, true}, '~': {"Backquote", "~", "~", "`", 192, 192, true, true},
'\u007f': &Key{"Delete", "Delete", "", "", 46, 46, false, false}, '\u007f': {"Delete", "Delete", "", "", 46, 46, false, false},
'¥': &Key{"IntlYen", "¥", "¥", "¥", 220, 220, false, true}, '¥': {"IntlYen", "¥", "¥", "¥", 220, 220, false, true},
'\u0102': &Key{"AltLeft", "Alt", "", "", 164, 164, false, false}, '\u0102': {"AltLeft", "Alt", "", "", 164, 164, false, false},
'\u0104': &Key{"CapsLock", "CapsLock", "", "", 20, 20, false, false}, '\u0104': {"CapsLock", "CapsLock", "", "", 20, 20, false, false},
'\u0105': &Key{"ControlLeft", "Control", "", "", 162, 162, false, false}, '\u0105': {"ControlLeft", "Control", "", "", 162, 162, false, false},
'\u0106': &Key{"Fn", "Fn", "", "", 0, 0, false, false}, '\u0106': {"Fn", "Fn", "", "", 0, 0, false, false},
'\u0107': &Key{"FnLock", "FnLock", "", "", 0, 0, false, false}, '\u0107': {"FnLock", "FnLock", "", "", 0, 0, false, false},
'\u0108': &Key{"Hyper", "Hyper", "", "", 0, 0, false, false}, '\u0108': {"Hyper", "Hyper", "", "", 0, 0, false, false},
'\u0109': &Key{"MetaLeft", "Meta", "", "", 91, 91, false, false}, '\u0109': {"MetaLeft", "Meta", "", "", 91, 91, false, false},
'\u010a': &Key{"NumLock", "NumLock", "", "", 144, 144, false, false}, '\u010a': {"NumLock", "NumLock", "", "", 144, 144, false, false},
'\u010c': &Key{"ScrollLock", "ScrollLock", "", "", 145, 145, false, false}, '\u010c': {"ScrollLock", "ScrollLock", "", "", 145, 145, false, false},
'\u010d': &Key{"ShiftLeft", "Shift", "", "", 160, 160, false, false}, '\u010d': {"ShiftLeft", "Shift", "", "", 160, 160, false, false},
'\u010e': &Key{"Super", "Super", "", "", 0, 0, false, false}, '\u010e': {"Super", "Super", "", "", 0, 0, false, false},
'\u0301': &Key{"ArrowDown", "ArrowDown", "", "", 40, 40, false, false}, '\u0301': {"ArrowDown", "ArrowDown", "", "", 40, 40, false, false},
'\u0302': &Key{"ArrowLeft", "ArrowLeft", "", "", 37, 37, false, false}, '\u0302': {"ArrowLeft", "ArrowLeft", "", "", 37, 37, false, false},
'\u0303': &Key{"ArrowRight", "ArrowRight", "", "", 39, 39, false, false}, '\u0303': {"ArrowRight", "ArrowRight", "", "", 39, 39, false, false},
'\u0304': &Key{"ArrowUp", "ArrowUp", "", "", 38, 38, false, false}, '\u0304': {"ArrowUp", "ArrowUp", "", "", 38, 38, false, false},
'\u0305': &Key{"End", "End", "", "", 35, 35, false, false}, '\u0305': {"End", "End", "", "", 35, 35, false, false},
'\u0306': &Key{"Home", "Home", "", "", 36, 36, false, false}, '\u0306': {"Home", "Home", "", "", 36, 36, false, false},
'\u0307': &Key{"PageDown", "PageDown", "", "", 34, 34, false, false}, '\u0307': {"PageDown", "PageDown", "", "", 34, 34, false, false},
'\u0308': &Key{"PageUp", "PageUp", "", "", 33, 33, false, false}, '\u0308': {"PageUp", "PageUp", "", "", 33, 33, false, false},
'\u0401': &Key{"NumpadClear", "Clear", "", "", 12, 12, false, false}, '\u0401': {"NumpadClear", "Clear", "", "", 12, 12, false, false},
'\u0402': &Key{"Copy", "Copy", "", "", 0, 0, false, false}, '\u0402': {"Copy", "Copy", "", "", 0, 0, false, false},
'\u0404': &Key{"Cut", "Cut", "", "", 0, 0, false, false}, '\u0404': {"Cut", "Cut", "", "", 0, 0, false, false},
'\u0407': &Key{"Insert", "Insert", "", "", 45, 45, false, false}, '\u0407': {"Insert", "Insert", "", "", 45, 45, false, false},
'\u0408': &Key{"Paste", "Paste", "", "", 0, 0, false, false}, '\u0408': {"Paste", "Paste", "", "", 0, 0, false, false},
'\u0409': &Key{"Redo", "Redo", "", "", 0, 0, false, false}, '\u0409': {"Redo", "Redo", "", "", 0, 0, false, false},
'\u040a': &Key{"Undo", "Undo", "", "", 0, 0, false, false}, '\u040a': {"Undo", "Undo", "", "", 0, 0, false, false},
'\u0502': &Key{"Again", "Again", "", "", 0, 0, false, false}, '\u0502': {"Again", "Again", "", "", 0, 0, false, false},
'\u0504': &Key{"Abort", "Cancel", "", "", 0, 0, false, false}, '\u0504': {"Abort", "Cancel", "", "", 0, 0, false, false},
'\u0505': &Key{"ContextMenu", "ContextMenu", "", "", 93, 93, false, false}, '\u0505': {"ContextMenu", "ContextMenu", "", "", 93, 93, false, false},
'\u0507': &Key{"Find", "Find", "", "", 0, 0, false, false}, '\u0507': {"Find", "Find", "", "", 0, 0, false, false},
'\u0508': &Key{"Help", "Help", "", "", 47, 47, false, false}, '\u0508': {"Help", "Help", "", "", 47, 47, false, false},
'\u0509': &Key{"Pause", "Pause", "", "", 19, 19, false, false}, '\u0509': {"Pause", "Pause", "", "", 19, 19, false, false},
'\u050b': &Key{"Props", "Props", "", "", 0, 0, false, false}, '\u050b': {"Props", "Props", "", "", 0, 0, false, false},
'\u050c': &Key{"Select", "Select", "", "", 41, 41, false, false}, '\u050c': {"Select", "Select", "", "", 41, 41, false, false},
'\u050d': &Key{"ZoomIn", "ZoomIn", "", "", 0, 0, false, false}, '\u050d': {"ZoomIn", "ZoomIn", "", "", 0, 0, false, false},
'\u050e': &Key{"ZoomOut", "ZoomOut", "", "", 0, 0, false, false}, '\u050e': {"ZoomOut", "ZoomOut", "", "", 0, 0, false, false},
'\u0601': &Key{"BrightnessDown", "BrightnessDown", "", "", 216, 0, false, false}, '\u0601': {"BrightnessDown", "BrightnessDown", "", "", 216, 0, false, false},
'\u0602': &Key{"BrightnessUp", "BrightnessUp", "", "", 217, 0, false, false}, '\u0602': {"BrightnessUp", "BrightnessUp", "", "", 217, 0, false, false},
'\u0604': &Key{"Eject", "Eject", "", "", 0, 0, false, false}, '\u0604': {"Eject", "Eject", "", "", 0, 0, false, false},
'\u0605': &Key{"LogOff", "LogOff", "", "", 0, 0, false, false}, '\u0605': {"LogOff", "LogOff", "", "", 0, 0, false, false},
'\u0606': &Key{"Power", "Power", "", "", 152, 0, false, false}, '\u0606': {"Power", "Power", "", "", 152, 0, false, false},
'\u0608': &Key{"PrintScreen", "PrintScreen", "", "", 44, 44, false, false}, '\u0608': {"PrintScreen", "PrintScreen", "", "", 44, 44, false, false},
'\u060b': &Key{"WakeUp", "WakeUp", "", "", 0, 0, false, false}, '\u060b': {"WakeUp", "WakeUp", "", "", 0, 0, false, false},
'\u0705': &Key{"Convert", "Convert", "", "", 28, 28, false, false}, '\u0705': {"Convert", "Convert", "", "", 28, 28, false, false},
'\u070d': &Key{"NonConvert", "NonConvert", "", "", 29, 29, false, false}, '\u070d': {"NonConvert", "NonConvert", "", "", 29, 29, false, false},
'\u0711': &Key{"Lang1", "HangulMode", "", "", 21, 21, false, false}, '\u0711': {"Lang1", "HangulMode", "", "", 21, 21, false, false},
'\u0712': &Key{"Lang2", "HanjaMode", "", "", 25, 25, false, false}, '\u0712': {"Lang2", "HanjaMode", "", "", 25, 25, false, false},
'\u0716': &Key{"Lang4", "Hiragana", "", "", 0, 0, false, false}, '\u0716': {"Lang4", "Hiragana", "", "", 0, 0, false, false},
'\u0718': &Key{"KanaMode", "KanaMode", "", "", 21, 21, false, false}, '\u0718': {"KanaMode", "KanaMode", "", "", 21, 21, false, false},
'\u071a': &Key{"Lang3", "Katakana", "", "", 0, 0, false, false}, '\u071a': {"Lang3", "Katakana", "", "", 0, 0, false, false},
'\u071d': &Key{"Lang5", "ZenkakuHankaku", "", "", 0, 0, false, false}, '\u071d': {"Lang5", "ZenkakuHankaku", "", "", 0, 0, false, false},
'\u0801': &Key{"F1", "F1", "", "", 112, 112, false, false}, '\u0801': {"F1", "F1", "", "", 112, 112, false, false},
'\u0802': &Key{"F2", "F2", "", "", 113, 113, false, false}, '\u0802': {"F2", "F2", "", "", 113, 113, false, false},
'\u0803': &Key{"F3", "F3", "", "", 114, 114, false, false}, '\u0803': {"F3", "F3", "", "", 114, 114, false, false},
'\u0804': &Key{"F4", "F4", "", "", 115, 115, false, false}, '\u0804': {"F4", "F4", "", "", 115, 115, false, false},
'\u0805': &Key{"F5", "F5", "", "", 116, 116, false, false}, '\u0805': {"F5", "F5", "", "", 116, 116, false, false},
'\u0806': &Key{"F6", "F6", "", "", 117, 117, false, false}, '\u0806': {"F6", "F6", "", "", 117, 117, false, false},
'\u0807': &Key{"F7", "F7", "", "", 118, 118, false, false}, '\u0807': {"F7", "F7", "", "", 118, 118, false, false},
'\u0808': &Key{"F8", "F8", "", "", 119, 119, false, false}, '\u0808': {"F8", "F8", "", "", 119, 119, false, false},
'\u0809': &Key{"F9", "F9", "", "", 120, 120, false, false}, '\u0809': {"F9", "F9", "", "", 120, 120, false, false},
'\u080a': &Key{"F10", "F10", "", "", 121, 121, false, false}, '\u080a': {"F10", "F10", "", "", 121, 121, false, false},
'\u080b': &Key{"F11", "F11", "", "", 122, 122, false, false}, '\u080b': {"F11", "F11", "", "", 122, 122, false, false},
'\u080c': &Key{"F12", "F12", "", "", 123, 123, false, false}, '\u080c': {"F12", "F12", "", "", 123, 123, false, false},
'\u080d': &Key{"F13", "F13", "", "", 124, 124, false, false}, '\u080d': {"F13", "F13", "", "", 124, 124, false, false},
'\u080e': &Key{"F14", "F14", "", "", 125, 125, false, false}, '\u080e': {"F14", "F14", "", "", 125, 125, false, false},
'\u080f': &Key{"F15", "F15", "", "", 126, 126, false, false}, '\u080f': {"F15", "F15", "", "", 126, 126, false, false},
'\u0810': &Key{"F16", "F16", "", "", 127, 127, false, false}, '\u0810': {"F16", "F16", "", "", 127, 127, false, false},
'\u0811': &Key{"F17", "F17", "", "", 128, 128, false, false}, '\u0811': {"F17", "F17", "", "", 128, 128, false, false},
'\u0812': &Key{"F18", "F18", "", "", 129, 129, false, false}, '\u0812': {"F18", "F18", "", "", 129, 129, false, false},
'\u0813': &Key{"F19", "F19", "", "", 130, 130, false, false}, '\u0813': {"F19", "F19", "", "", 130, 130, false, false},
'\u0814': &Key{"F20", "F20", "", "", 131, 131, false, false}, '\u0814': {"F20", "F20", "", "", 131, 131, false, false},
'\u0815': &Key{"F21", "F21", "", "", 132, 132, false, false}, '\u0815': {"F21", "F21", "", "", 132, 132, false, false},
'\u0816': &Key{"F22", "F22", "", "", 133, 133, false, false}, '\u0816': {"F22", "F22", "", "", 133, 133, false, false},
'\u0817': &Key{"F23", "F23", "", "", 134, 134, false, false}, '\u0817': {"F23", "F23", "", "", 134, 134, false, false},
'\u0818': &Key{"F24", "F24", "", "", 135, 135, false, false}, '\u0818': {"F24", "F24", "", "", 135, 135, false, false},
'\u0a01': &Key{"Close", "Close", "", "", 0, 0, false, false}, '\u0a01': {"Close", "Close", "", "", 0, 0, false, false},
'\u0a02': &Key{"MailForward", "MailForward", "", "", 0, 0, false, false}, '\u0a02': {"MailForward", "MailForward", "", "", 0, 0, false, false},
'\u0a03': &Key{"MailReply", "MailReply", "", "", 0, 0, false, false}, '\u0a03': {"MailReply", "MailReply", "", "", 0, 0, false, false},
'\u0a04': &Key{"MailSend", "MailSend", "", "", 0, 0, false, false}, '\u0a04': {"MailSend", "MailSend", "", "", 0, 0, false, false},
'\u0a05': &Key{"MediaPlayPause", "MediaPlayPause", "", "", 179, 179, false, false}, '\u0a05': {"MediaPlayPause", "MediaPlayPause", "", "", 179, 179, false, false},
'\u0a07': &Key{"MediaStop", "MediaStop", "", "", 178, 178, false, false}, '\u0a07': {"MediaStop", "MediaStop", "", "", 178, 178, false, false},
'\u0a08': &Key{"MediaTrackNext", "MediaTrackNext", "", "", 176, 176, false, false}, '\u0a08': {"MediaTrackNext", "MediaTrackNext", "", "", 176, 176, false, false},
'\u0a09': &Key{"MediaTrackPrevious", "MediaTrackPrevious", "", "", 177, 177, false, false}, '\u0a09': {"MediaTrackPrevious", "MediaTrackPrevious", "", "", 177, 177, false, false},
'\u0a0a': &Key{"New", "New", "", "", 0, 0, false, false}, '\u0a0a': {"New", "New", "", "", 0, 0, false, false},
'\u0a0b': &Key{"Open", "Open", "", "", 43, 43, false, false}, '\u0a0b': {"Open", "Open", "", "", 43, 43, false, false},
'\u0a0c': &Key{"Print", "Print", "", "", 0, 0, false, false}, '\u0a0c': {"Print", "Print", "", "", 0, 0, false, false},
'\u0a0d': &Key{"Save", "Save", "", "", 0, 0, false, false}, '\u0a0d': {"Save", "Save", "", "", 0, 0, false, false},
'\u0a0e': &Key{"SpellCheck", "SpellCheck", "", "", 0, 0, false, false}, '\u0a0e': {"SpellCheck", "SpellCheck", "", "", 0, 0, false, false},
'\u0a0f': &Key{"AudioVolumeDown", "AudioVolumeDown", "", "", 174, 174, false, false}, '\u0a0f': {"AudioVolumeDown", "AudioVolumeDown", "", "", 174, 174, false, false},
'\u0a10': &Key{"AudioVolumeUp", "AudioVolumeUp", "", "", 175, 175, false, false}, '\u0a10': {"AudioVolumeUp", "AudioVolumeUp", "", "", 175, 175, false, false},
'\u0a11': &Key{"AudioVolumeMute", "AudioVolumeMute", "", "", 173, 173, false, false}, '\u0a11': {"AudioVolumeMute", "AudioVolumeMute", "", "", 173, 173, false, false},
'\u0b01': &Key{"LaunchApp2", "LaunchCalculator", "", "", 183, 183, false, false}, '\u0b01': {"LaunchApp2", "LaunchApplication2", "", "", 183, 183, false, false},
'\u0b02': &Key{"LaunchCalendar", "LaunchCalendar", "", "", 0, 0, false, false}, '\u0b02': {"LaunchCalendar", "LaunchCalendar", "", "", 0, 0, false, false},
'\u0b03': &Key{"LaunchMail", "LaunchMail", "", "", 180, 180, false, false}, '\u0b03': {"LaunchMail", "LaunchMail", "", "", 180, 180, false, false},
'\u0b04': &Key{"MediaSelect", "LaunchMediaPlayer", "", "", 181, 181, false, false}, '\u0b04': {"MediaSelect", "LaunchMediaPlayer", "", "", 181, 181, false, false},
'\u0b05': &Key{"LaunchMusicPlayer", "LaunchMusicPlayer", "", "", 0, 0, false, false}, '\u0b05': {"LaunchMusicPlayer", "LaunchMusicPlayer", "", "", 0, 0, false, false},
'\u0b06': &Key{"LaunchApp1", "LaunchMyComputer", "", "", 182, 182, false, false}, '\u0b06': {"LaunchApp1", "LaunchApplication1", "", "", 182, 182, false, false},
'\u0b07': &Key{"LaunchScreenSaver", "LaunchScreenSaver", "", "", 0, 0, false, false}, '\u0b07': {"LaunchScreenSaver", "LaunchScreenSaver", "", "", 0, 0, false, false},
'\u0b08': &Key{"LaunchSpreadsheet", "LaunchSpreadsheet", "", "", 0, 0, false, false}, '\u0b08': {"LaunchSpreadsheet", "LaunchSpreadsheet", "", "", 0, 0, false, false},
'\u0b09': &Key{"LaunchWebBrowser", "LaunchWebBrowser", "", "", 0, 0, false, false}, '\u0b09': {"LaunchWebBrowser", "LaunchWebBrowser", "", "", 0, 0, false, false},
'\u0b0c': &Key{"LaunchContacts", "LaunchContacts", "", "", 0, 0, false, false}, '\u0b0c': {"LaunchContacts", "LaunchContacts", "", "", 0, 0, false, false},
'\u0b0d': &Key{"LaunchPhone", "LaunchPhone", "", "", 0, 0, false, false}, '\u0b0d': {"LaunchPhone", "LaunchPhone", "", "", 0, 0, false, false},
'\u0c01': &Key{"BrowserBack", "BrowserBack", "", "", 166, 166, false, false}, '\u0c01': {"BrowserBack", "BrowserBack", "", "", 166, 166, false, false},
'\u0c02': &Key{"BrowserFavorites", "BrowserFavorites", "", "", 171, 171, false, false}, '\u0c02': {"BrowserFavorites", "BrowserFavorites", "", "", 171, 171, false, false},
'\u0c03': &Key{"BrowserForward", "BrowserForward", "", "", 167, 167, false, false}, '\u0c03': {"BrowserForward", "BrowserForward", "", "", 167, 167, false, false},
'\u0c04': &Key{"BrowserHome", "BrowserHome", "", "", 172, 172, false, false}, '\u0c04': {"BrowserHome", "BrowserHome", "", "", 172, 172, false, false},
'\u0c05': &Key{"BrowserRefresh", "BrowserRefresh", "", "", 168, 168, false, false}, '\u0c05': {"BrowserRefresh", "BrowserRefresh", "", "", 168, 168, false, false},
'\u0c06': &Key{"BrowserSearch", "BrowserSearch", "", "", 170, 170, false, false}, '\u0c06': {"BrowserSearch", "BrowserSearch", "", "", 170, 170, false, false},
'\u0c07': &Key{"BrowserStop", "BrowserStop", "", "", 169, 169, false, false}, '\u0c07': {"BrowserStop", "BrowserStop", "", "", 169, 169, false, false},
'\u0d0a': &Key{"ChannelDown", "ChannelDown", "", "", 0, 0, false, false}, '\u0d0a': {"ChannelDown", "ChannelDown", "", "", 0, 0, false, false},
'\u0d0b': &Key{"ChannelUp", "ChannelUp", "", "", 0, 0, false, false}, '\u0d0b': {"ChannelUp", "ChannelUp", "", "", 0, 0, false, false},
'\u0d12': &Key{"ClosedCaptionToggle", "ClosedCaptionToggle", "", "", 0, 0, false, false}, '\u0d12': {"ClosedCaptionToggle", "ClosedCaptionToggle", "", "", 0, 0, false, false},
'\u0d15': &Key{"Exit", "Exit", "", "", 0, 0, false, false}, '\u0d15': {"Exit", "Exit", "", "", 0, 0, false, false},
'\u0d22': &Key{"Guide", "Guide", "", "", 0, 0, false, false}, '\u0d22': {"Guide", "Guide", "", "", 0, 0, false, false},
'\u0d25': &Key{"Info", "Info", "", "", 0, 0, false, false}, '\u0d25': {"Info", "Info", "", "", 0, 0, false, false},
'\u0d2c': &Key{"MediaFastForward", "MediaFastForward", "", "", 0, 0, false, false}, '\u0d2c': {"MediaFastForward", "MediaFastForward", "", "", 0, 0, false, false},
'\u0d2d': &Key{"MediaLast", "MediaLast", "", "", 0, 0, false, false}, '\u0d2d': {"MediaLast", "MediaLast", "", "", 0, 0, false, false},
'\u0d2f': &Key{"MediaPlay", "MediaPlay", "", "", 0, 0, false, false}, '\u0d2f': {"MediaPlay", "MediaPlay", "", "", 0, 0, false, false},
'\u0d30': &Key{"MediaRecord", "MediaRecord", "", "", 0, 0, false, false}, '\u0d30': {"MediaRecord", "MediaRecord", "", "", 0, 0, false, false},
'\u0d31': &Key{"MediaRewind", "MediaRewind", "", "", 0, 0, false, false}, '\u0d31': {"MediaRewind", "MediaRewind", "", "", 0, 0, false, false},
'\u0d43': &Key{"Settings", "Settings", "", "", 0, 0, false, false}, '\u0d43': {"Settings", "Settings", "", "", 0, 0, false, false},
'\u0d4e': &Key{"ZoomToggle", "ZoomToggle", "", "", 251, 251, false, false}, '\u0d4e': {"ZoomToggle", "ZoomToggle", "", "", 251, 251, false, false},
'\u0e02': &Key{"AudioBassBoostToggle", "AudioBassBoostToggle", "", "", 0, 0, false, false}, '\u0e02': {"AudioBassBoostToggle", "AudioBassBoostToggle", "", "", 0, 0, false, false},
'\u0f02': &Key{"SpeechInputToggle", "SpeechInputToggle", "", "", 0, 0, false, false}, '\u0f02': {"SpeechInputToggle", "SpeechInputToggle", "", "", 0, 0, false, false},
'\u1001': &Key{"SelectTask", "AppSwitch", "", "", 0, 0, false, false}, '\u1001': {"SelectTask", "AppSwitch", "", "", 0, 0, false, false},
} }