{
    "gpiiKey": "screenreader",
    "preferences": {
        "contexts": {
            "gpii-default": {
                "name": "Default preferences",
                "preferences": {
                    "http://registry.gpii.net/applications/org.nvda-project": {
                        "speech.synth": "espeak",
                        "speech.outputDevice": "Microsoft Sound Mapper",
                        "speech.symbolLevel": 300,
                        "speech.espeak.rate": 40,
                        "speech.espeak.voice": "en-us",
                        "speech.espeak.pitch": 60,
                        "speech.espeak.volume": 80,
                        "reviewCursor.followFocus": "False",
                        "reviewCursor.followCaret": "True",
                        "reviewCursor.followMouse": "True",
                        "keyboard.speakTypedWords": "True",
                        "speech.espeak.rateBoost": "True",
                        "keyboard.speakTypedCharacters": "False",
                        "presentation.reportHelpBalloons": "False",
                        "speech.espeak.sayCapForCapitals": "True",
                        "virtualBuffers.autoSayAllOnPageLoad": "False"
                    }
                }
            }
        }
    },
    "deviceContext": {
        "solutions": [
            {
                "id": "com.microsoft.windows.narrator"
            }, {
                "id": "org.nvda-project"
            }, {
                "id": "webinsight.webAnywhere.windows"
            }
        ],
        "OS": {
            "id": "win32",
            "version": "6.1.7601"
        }
    },
    "solutionsRegistryEntries": {
        "com.microsoft.windows.narrator": {
            "name": "Windows Built-in Narrator",
            "contexts": {
                "OS": [
                    {
                        "id": "win32",
                        "version": ">=5.0"
                    }
                ]
            },
            "capabilities": [
                "http://registry\\.gpii\\.net/common/screenReaderTTS/enabled"
            ],
            "settingsHandlers": {
                "configure": {
                    "type": "gpii.windows.registrySettingsHandler",
                    "liveness": "liveRestart",
                    "options": {
                        "hKey": "HKEY_CURRENT_USER",
                        "path": "Software\\Microsoft\\Narrator",
                        "dataTypes": {
                            "SpeechSpeed": "REG_DWORD",
                            "SpeechPitch": "REG_DWORD",
                            "InteractionMouse": "REG_DWORD",
                            "CoupleNarratorCursorKeyboard": "REG_DWORD",
                            "FollowInsertion": "REG_DWORD",
                            "EchoChars": "REG_DWORD",
                            "EchoWords": "REG_DWORD"
                        }
                    },
                    "supportedSettings": {
                        "SpeechSpeed": {},
                        "SpeechPitch": {},
                        "CoupleNarratorCursorKeyboard": {},
                        "FollowInsertion": {},
                        "InteractionMouse": {},
                        "EchoChars": {},
                        "EchoWords": {}
                    },
                    "capabilitiesTransformations": {
                        "SpeechSpeed": {
                            "transform": {
                                "type": "fluid.transforms.round",
                                "input": {
                                    "transform": {
                                        "type": "fluid.transforms.quantize",
                                        "inputPath": "http://registry\\.gpii\\.net/common/speechRate",
                                        "ranges": [
                                            {
                                                "upperBound": 50,
                                                "output": 0
                                            },
                                            {
                                                "upperBound": 150,
                                                "output": {
                                                    "transform": {
                                                        "type": "fluid.transforms.linearScale",
                                                        "inputPath": "http://registry\\.gpii\\.net/common/speechRate",
                                                        "factor": 0.1,
                                                        "offset": -5
                                                    }
                                                }
                                            },
                                            {
                                                "upperBound": 450,
                                                "output": {
                                                    "transform": {
                                                        "type": "fluid.transforms.linearScale",
                                                        "inputPath": "http://registry\\.gpii\\.net/common/speechRate",
                                                        "factor": 0.033333333333,
                                                        "offset": -5
                                                    }
                                                }
                                            },
                                            {
                                                "output": 20
                                            }
                                        ]
                                    }
                                }
                            }
                        },
                        "SpeechPitch": {
                            "transform": {
                                "type": "fluid.transforms.linearScale",
                                "inputPath": "http://registry\\.gpii\\.net/common/pitch",
                                "factor": 20,
                                "offset": 0
                            }
                        },
                        "transform": [
                            {
                                "type": "fluid.transforms.arrayToSetMembership",
                                "inputPath": "http://registry\\.gpii\\.net/common/trackingTTS",
                                "outputPath": "",
                                "presentValue": 1,
                                "missingValue": 0,
                                "options": {
                                    "focus": "CoupleNarratorCursorKeyboard",
                                    "caret": "FollowInsertion",
                                    "mouse": "InteractionMouse"
                                }
                            }
                        ],
                        "EchoChars": {
                            "transform": {
                                "type": "fluid.transforms.condition",
                                "false": 0,
                                "true": 1,
                                "conditionPath": "http://registry\\.gpii\\.net/common/keyEcho"
                            }
                        },
                        "EchoWords": {
                            "transform": {
                                "type": "fluid.transforms.condition",
                                "false": 0,
                                "true": 1,
                                "conditionPath": "http://registry\\.gpii\\.net/common/wordEcho"
                            }
                        }
                    },
                    "inverseCapabilitiesTransformations": {
                        "http://registry\\.gpii\\.net/common/speechRate": {
                            "transform": {
                                "type": "fluid.transforms.condition",
                                "condition": {
                                    "transform": {
                                        "type": "fluid.transforms.binaryOp",
                                        "leftPath": "SpeechSpeed",
                                        "right": 10,
                                        "operator": "<"
                                    }
                                },
                                "true": {
                                    "transform": {
                                        "type": "fluid.transforms.linearScale",
                                        "inputPath": "SpeechSpeed",
                                        "factor": 10,
                                        "offset": 50
                                    }
                                },
                                "false": {
                                    "transform": {
                                        "type": "fluid.transforms.linearScale",
                                        "inputPath": "SpeechSpeed",
                                        "factor": 30,
                                        "offset": -150
                                    }
                                }
                            }
                        },
                        "http://registry\\.gpii\\.net/common/pitch": {
                            "transform": {
                                "type": "fluid.transforms.linearScale",
                                "inputPath": "SpeechPitch",
                                "factor": 0.05,
                                "offset": 0
                            }
                        },
                        "transform": [
                            {
                                "type": "fluid.transforms.setMembershipToArray",
                                "inputPath": "",
                                "outputPath": "http://registry\\.gpii\\.net/common/trackingTTS",
                                "presentValue": 1,
                                "missingValue": 0,
                                "options": {
                                    "CoupleNarratorCursorKeyboard": "focus",
                                    "FollowInsertion": "caret",
                                    "InteractionMouse": "mouse"
                                }
                            }
                        ],
                        "http://registry\\.gpii\\.net/common/keyEcho": {
                            "transform": {
                                "type": "fluid.transforms.binaryOp",
                                "leftPath": "EchoChars",
                                "right": 0,
                                "operator": "!=="
                            }
                        },
                        "http://registry\\.gpii\\.net/common/wordEcho": {
                            "transform": {
                                "type": "fluid.transforms.binaryOp",
                                "leftPath": "EchoWords",
                                "right": 0,
                                "operator": "!=="
                            }
                        }
                    }
                },
                "configureNoRoam": {
                    "type": "gpii.windows.registrySettingsHandler",
                    "options": {
                        "hKey": "HKEY_CURRENT_USER",
                        "path": "Software\\Microsoft\\Narrator\\NoRoam",
                        "dataTypes": {
                            "SpeechVolume": "REG_DWORD",
                            "ShowKeyboardIntroduction": "REG_DWORD",
                            "ShowBrowserSelection": "REG_DWORD"
                        }
                    },
                    "supportedSettings": {
                        "SpeechVolume": {},
                        "ShowKeyboardIntroduction": {},
                        "ShowBrowserSelection": {}
                    },
                    "capabilitiesTransformations": {
                        "SpeechVolume": {
                            "transform": {
                                "type": "fluid.transforms.linearScale",
                                "inputPath": "http://registry\\.gpii\\.net/common/volumeTTS",
                                "factor": 100,
                                "offset": 0
                            }
                        },
                        "ShowKeyboardIntroduction": {
                            "transform": {
                                "type": "fluid.transforms.condition",
                                "false": 0,
                                "true": 1,
                                "conditionPath": "http://registry\\.gpii\\.net/common/speakTutorialMessages"
                            }
                        },
                        "ShowBrowserSelection": {
                            "transform": {
                                "type": "fluid.transforms.literalValue",
                                "input": 0
                            }
                        }
                    }
                }
            },
            "launchHandlers": {
                "launcher": {
                    "type": "gpii.windows.enableRegisteredAT",
                    "options": {
                        "registryName": "Narrator",
                        "getState": [
                            {
                                "type": "gpii.processReporter.find",
                                "command": "Narrator.exe"
                            }
                        ]
                    }
                }
            },
            "isInstalled": [
                {
                    "type": "gpii.deviceReporter.alwaysInstalled"
                }
            ]
        },

        "webinsight.webAnywhere.windows": {
            "name": "Web Anywhere",
            "contexts": {
                "OS": [
                    {
                        "id": "win32",
                        "version": ">=5.0"
                    }
                ]
            },
            "capabilities": [
                "http://registry\\.gpii\\.net/common/screenReaderTTS/enabled"
            ],
            "launchHandlers": {
                "launcher": {
                    "type": "gpii.launchHandlers.flexibleHandler",
                    "options": {
                        "setTrue": {
                            "type": "gpii.launch.exec",
                            "command": "\"${{registry}.HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\firefox.exe\\}\" \"http://webanywhere.cs.washington.edu/beta/?starting_url=http%3A%2F%2Fcloud4all.info\""
                        },
                        "setFalse": {
                            "type": "gpii.windows.closeProcessByName",
                            "filename": "firefox.exe"
                        },
                        "getState": [
                            {
                                "type": "gpii.processReporter.neverRunning"
                            }
                        ]
                    }
                }
            },
            "isInstalled": [
                {
                    "type": "gpii.deviceReporter.alwaysInstalled"
                }
            ]
        },

        "org.nvda-project": {
            "name": "NVDA Screen Reader",
            "contexts": {
                "OS": [
                    {
                        "id": "win32",
                        "version": ">=5.0"
                    }
                ]
            },
            "settingsHandlers": {
                "configs": {
                    "type": "gpii.settingsHandlers.INISettingsHandler",
                    "liveness": "manualRestart",
                    "options": {
                        "filename": "${{environment}.APPDATA}\\nvda\\nvda.ini"
                    },
                    "supportedSettings": {
                        "speech.espeak.pitch": {},
                        "speech.espeak.volume": {},
                        "presentation.reportHelpBalloons": {},
                        "keyboard.speakTypedCharacters": {},
                        "keyboard.speakTypedWords": {},
                        "speech.espeak.sayCapForCapitals": {},
                        "reviewCursor.followFocus": {},
                        "reviewCursor.followCaret": {},
                        "reviewCursor.followMouse": {},
                        "speech.synth": {},
                        "speech.outputDevice": {},
                        "speech.espeak.rate": {},
                        "speech.espeak.rateBoost": {},
                        "speech.symbolLevel": {},
                        "speech.espeak.voice": {}
                    },
                    "capabilitiesTransformations": {
                        "speech\\.espeak\\.pitch": {
                            "transform": {
                                "type": "fluid.transforms.linearScale",
                                "inputPath": "http://registry\\.gpii\\.net/common/pitch",
                                "factor": 100
                            }
                        },
                        "speech\\.espeak\\.volume": {
                            "transform": {
                                "type": "fluid.transforms.linearScale",
                                "inputPath": "http://registry\\.gpii\\.net/common/volumeTTS",
                                "factor": 100
                            }
                        },
                        "presentation\\.reportHelpBalloons": "http://registry\\.gpii\\.net/common/speakTutorialMessages",
                        "keyboard\\.speakTypedCharacters": "http://registry\\.gpii\\.net/common/keyEcho",
                        "keyboard\\.speakTypedWords": "http://registry\\.gpii\\.net/common/wordEcho",
                        "speech\\.espeak\\.sayCapForCapitals": "http://registry\\.gpii\\.net/common/announceCapitals",
                        "transform": [
                            {
                                "type": "fluid.transforms.arrayToSetMembership",
                                "inputPath": "http://registry\\.gpii\\.net/common/trackingTTS",
                                "outputPath": "",
                                "presentValue": true,
                                "missingValue": false,
                                "options": {
                                    "focus": "reviewCursor\\.followFocus",
                                    "caret": "reviewCursor\\.followCaret",
                                    "mouse": "reviewCursor\\.followMouse"
                                }
                            },
                            {
                                "type": "fluid.transforms.valueMapper",
                                "defaultInputPath": "http://registry\\.gpii\\.net/common/screenReaderTTS/enabled",
                                "match": {
                                    "false": {
                                        "outputValue": {
                                            "transform": [
                                                {
                                                    "type": "fluid.transforms.literalValue",
                                                    "input": "silence",
                                                    "outputPath": "speech\\.synth"
                                                },
                                                {
                                                    "type": "fluid.transforms.literalValue",
                                                    "input": "Microsoft Sound Mapper",
                                                    "outputPath": "speech\\.outputDevice"
                                                }
                                            ]
                                        }
                                    }
                                }
                            }
                        ],
                        "speech\\.espeak\\.rate": {
                            "transform": {
                                "type": "fluid.transforms.round",
                                "input": {
                                    "transform": {
                                        "type": "fluid.transforms.binaryOp",
                                        "right": 3.10,
                                        "operator": "/",
                                        "left": {
                                            "transform": {
                                                "type": "fluid.transforms.binaryOp",
                                                "right": 80,
                                                "operator": "-",
                                                "left": {
                                                    "transform": {
                                                        "type": "fluid.transforms.condition",
                                                        "truePath": "http://registry\\.gpii\\.net/common/speechRate",
                                                        "false": {
                                                            "transform": {
                                                                "type": "fluid.transforms.binaryOp",
                                                                "leftPath": "http://registry\\.gpii\\.net/common/speechRate",
                                                                "operator": "/",
                                                                "right": 3
                                                            }
                                                        },
                                                        "condition": {
                                                            "transform": {
                                                                "type": "fluid.transforms.binaryOp",
                                                                "leftPath": "http://registry\\.gpii\\.net/common/speechRate",
                                                                "operator": "<=",
                                                                "right": 390
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        "speech\\.espeak\\.rateBoost": {
                            "transform": {
                                "type": "fluid.transforms.binaryOp",
                                "leftPath": "http://registry\\.gpii\\.net/common/speechRate",
                                "operator": ">",
                                "right": 390
                            }
                        },
                        "speech\\.symbolLevel": {
                            "transform": {
                                "type": "fluid.transforms.valueMapper",
                                "defaultInputPath": "http://registry\\.gpii\\.net/common/punctuationVerbosity",
                                "match": {
                                    "none": 0,
                                    "some": 100,
                                    "most": 200,
                                    "all": 300
                                }
                            }
                        },
                        "speech\\.espeak\\.voice": {
                            "transform": {
                                "type": "fluid.transforms.valueMapper",
                                "defaultInputPath": "http://registry\\.gpii\\.net/common/auditoryOutLanguage",
                                "match": {
                                    "en": "en\\en",
                                    "en-GB": "en\\en",
                                    "en-US": "en\\en-us",
                                    "en-scotland": "en\\en-sc",
                                    "en-BZ": "en\\en-wi",
                                    "en-BS": "en\\en-wi",
                                    "en-AG": "en\\en-wi",
                                    "en-AI": "en\\en-wi",
                                    "af": "af",
                                    "bg": "bg",
                                    "bs": "bs",
                                    "ca": "ca",
                                    "cs": "cs",
                                    "cy": "cy",
                                    "da": "da",
                                    "de": "de",
                                    "el": "el",
                                    "grc": "test\\grc",
                                    "eo": "eo",
                                    "es": "es",
                                    "es-419": "es-la",
                                    "et": "et",
                                    "fi": "fi",
                                    "fr": "fr",
                                    "fr-BE": "fr-be",
                                    "hi": "hi",
                                    "hr": "hr",
                                    "hu": "hu",
                                    "hy": "hy",
                                    "hy-arevmda": "hy-west",
                                    "id": "id",
                                    "is": "is",
                                    "it": "it",
                                    "jbo": "test\\jbo",
                                    "ka": "ka",
                                    "kn": "kn",
                                    "ku": "ku",
                                    "la": "la",
                                    "lv": "lv",
                                    "mk": "mk",
                                    "ml": "ml",
                                    "nci": "test\\nci",
                                    "nl": "nl",
                                    "no": "no",
                                    "pap": "test\\pap",
                                    "pl": "pl",
                                    "pt-BR": "pt",
                                    "pt-PT": "pt-pt",
                                    "ro": "ro",
                                    "ru": "ru",
                                    "sk": "sk",
                                    "sq": "sq",
                                    "sr": "sr",
                                    "sv": "sv",
                                    "sw": "sw",
                                    "ta": "ta",
                                    "tr": "tr",
                                    "vi": "vi",
                                    "zh-cmn": "zh",
                                    "cmn": "zh",
                                    "zh-yue": "zh-yue"
                                }
                            }
                        }
                    },
                    "inverseCapabilitiesTransformations": {
                        "http://registry\\.gpii\\.net/common/speakTutorialMessages": "presentation\\.reportHelpBalloons",
                        "http://registry\\.gpii\\.net/common/keyEcho": "keyboard\\.speakTypedCharacters",
                        "http://registry\\.gpii\\.net/common/wordEcho": "keyboard\\.speakTypedWords",
                        "http://registry\\.gpii\\.net/common/announceCapitals": "speech\\.espeak\\.sayCapForCapitals",
                        "transform": [
                            {
                                "type": "fluid.transforms.valueMapper",
                                "defaultInputPath": "virtualBuffers\\.autoSayAllOnPageLoad.value",
                                "defaultOutputPath": "http://registry\\.gpii\\.net/common/readingUnit",
                                "match": {
                                    "true": "all",
                                    "false": "sentence"
                                }
                            },
                            {
                                "type": "fluid.transforms.setMembershipToArray",
                                "inputPath": "",
                                "outputPath": "http://registry\\.gpii\\.net/common/trackingTTS",
                                "presentValue": true,
                                "missingValue": false,
                                "options": {
                                    "reviewCursor\\.followFocus": "focus",
                                    "reviewCursor\\.followCaret": "caret",
                                    "reviewCursor\\.followMouse": "mouse"
                                }
                            },
                            {
                                "type": "fluid.transforms.valueMapper",
                                "defaultOutputPath": "http://registry\\.gpii\\.net/common/punctuationVerbosity",
                                "defaultInputPath": "speech\\.symbolLevel",
                                "match": {
                                    "0": "none",
                                    "100": "some",
                                    "200": "most",
                                    "300": "all"
                                }
                            },
                            {
                                "type": "fluid.transforms.condition",
                                "outputPath": "http://registry\\.gpii\\.net/common/screenReaderTTS/enabled",
                                "false": true,
                                "true": false,
                                "condition": {
                                    "transform": {
                                        "type": "fluid.transforms.binaryOp",
                                        "left": {
                                            "transform": {
                                                "type": "fluid.transforms.binaryOp",
                                                "leftPath": "speech\\.synth",
                                                "operator": "===",
                                                "right": "silence"
                                            }
                                        },
                                        "right": {
                                            "transform": {
                                                "type": "fluid.transforms.binaryOp",
                                                "leftPath": "speech\\.outputDevice",
                                                "operator": "===",
                                                "right": "Microsoft Sound Mapper"
                                            }
                                        },
                                        "operator": "&&"
                                    }
                                }
                            },
                            {
                                "type": "fluid.transforms.condition",
                                "outputPath": "http://registry\\.gpii\\.net/common/speechRate",
                                "condition": {
                                    "transform": {
                                        "type": "fluid.transforms.binaryOp",
                                        "right": true,
                                        "operator": "===",
                                        "leftPath": "speech\\.espeak\\.rateBoost"
                                    }
                                },
                                "false": {
                                    "transform": {
                                        "type": "fluid.transforms.linearScale",
                                        "inputPath": "speech\\.espeak\\.rate",
                                        "factor": 3.1,
                                        "offset": 80
                                    }
                                },
                                "true": {
                                    "transform": {
                                        "type": "fluid.transforms.binaryOp",
                                        "left": {
                                            "transform": {
                                                "type": "fluid.transforms.linearScale",
                                                "inputPath": "speech\\.espeak\\.rate",
                                                "factor": 3.1,
                                                "offset": 80
                                            }
                                        },
                                        "operator": "*",
                                        "right": 3
                                    }
                                }
                            },
                            {
                                "type": "fluid.transforms.valueMapper",
                                "defaultInputPath": "speech\\.espeak\\.voice",
                                "defaultOutputPath": "http://registry\\.gpii\\.net/common/auditoryOutLanguage",
                                "match": {
                                    "en\\en": "en",
                                    "en\\en-us": "en-US",
                                    "en\\en-sc": "en-scotland",
                                    "en\\en-wi": "en-BZ",
                                    "af": "af",
                                    "bg": "bg",
                                    "bs": "bs",
                                    "ca": "ca",
                                    "cs": "cs",
                                    "cy": "cy",
                                    "da": "da",
                                    "de": "de",
                                    "el": "el",
                                    "test\\grc": "grc",
                                    "eo": "eo",
                                    "es": "es",
                                    "es-la": "es-419",
                                    "et": "et",
                                    "fi": "fi",
                                    "fr": "fr",
                                    "fr-be": "fr-BE",
                                    "hi": "hi",
                                    "hr": "hr",
                                    "hu": "hu",
                                    "hy": "hy",
                                    "hy-west": "hy-arevmda",
                                    "id": "id",
                                    "is": "is",
                                    "it": "it",
                                    "test\\jbo": "jbo",
                                    "ka": "ka",
                                    "kn": "kn",
                                    "ku": "ku",
                                    "la": "la",
                                    "lv": "lv",
                                    "mk": "mk",
                                    "ml": "ml",
                                    "test\\nci": "nci",
                                    "nl": "nl",
                                    "no": "no",
                                    "test\\pap": "pap",
                                    "pl": "pl",
                                    "pt": "pt-BR",
                                    "pt-pt": "pt-PT",
                                    "ro": "ro",
                                    "ru": "ru",
                                    "sk": "sk",
                                    "sq": "sq",
                                    "sr": "sr",
                                    "sv": "sv",
                                    "sw": "sw",
                                    "ta": "ta",
                                    "tr": "tr",
                                    "vi": "vi",
                                    "zh": "zh-cmn",
                                    "zh-yue": "zh-yue"
                                }
                            }
                        ]
                    }
                }
            },
            "launchHandlers": {
                "launcher": {
                    "type": "gpii.launchHandlers.flexibleHandler",
                    "options": {
                        "verifySettings": true,
                        "retryOptions": {
                            "rewriteEvery": 0,
                            "numRetries": 20
                        },
                        "getState": [
                            {
                                "type": "gpii.processReporter.find",
                                "command": "nvda.exe"
                            }
                        ],
                        "setTrue": [
                            {
                                "type": "gpii.launch.exec",
                                "command": "\"${{registry}.HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\nvda.exe\\}\""
                            }
                        ],
                        "setFalse": [
                            {
                                "type": "gpii.windows.closeProcessByName",
                                "filename": "nvda_service.exe"
                            },
                            {
                                "type": "gpii.windows.closeProcessByName",
                                "filename": "nvda.exe"
                            }
                        ]
                    }
                }
            },
            "isInstalled": [
                {
                    "type": "gpii.deviceReporter.registryKeyExists",
                    "hKey": "HKEY_LOCAL_MACHINE",
                    "path": "Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\nvda.exe",
                    "subPath": "",
                    "dataType": "REG_SZ"
                }
            ]
        }
    }
}
