SEBWIN-491: Implemented basic display configuration monitoring.

This commit is contained in:
Damian Büchel 2021-05-30 20:04:44 +02:00
parent b456f0821f
commit d3bfe958aa
28 changed files with 708 additions and 154 deletions

View file

@ -514,6 +514,21 @@ namespace SafeExamBrowser.Client
actionCenter.InitializeBounds();
taskbar.InitializeBounds();
logger.Info("Desktop successfully restored.");
if (!displayMonitor.IsAllowedConfiguration(Settings.Display))
{
var continueOption = new LockScreenOption { Text = text.Get(TextKey.LockScreen_DisplayConfigurationContinueOption) };
var terminateOption = new LockScreenOption { Text = text.Get(TextKey.LockScreen_DisplayConfigurationTerminateOption) };
var message = text.Get(TextKey.LockScreen_DisplayConfigurationMessage);
var title = text.Get(TextKey.LockScreen_Title);
var result = ShowLockScreen(message, title, new[] { continueOption, terminateOption });
if (result.OptionId == terminateOption.Id)
{
logger.Info("Attempting to shutdown as requested by the user...");
TryRequestShutdown();
}
}
}
private void Operations_ActionRequired(ActionRequiredEventArgs args)

View file

@ -20,6 +20,7 @@ namespace SafeExamBrowser.Configuration.ConfigurationData
new AudioDataMapper(),
new BrowserDataMapper(),
new ConfigurationFileDataMapper(),
new DisplayDataMapper(),
new GeneralDataMapper(),
new InputDataMapper(),
new ProctoringDataMapper(),

View file

@ -0,0 +1,55 @@
/*
* Copyright (c) 2021 ETH Zürich, Educational Development and Technology (LET)
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
using SafeExamBrowser.Settings;
namespace SafeExamBrowser.Configuration.ConfigurationData.DataMapping
{
internal class DisplayDataMapper : BaseDataMapper
{
internal override void Map(string key, object value, AppSettings settings)
{
switch (key)
{
case Keys.Display.AllowedDisplays:
MapAllowedDisplays(settings, value);
break;
case Keys.Display.IgnoreError:
MapIgnoreError(settings, value);
break;
case Keys.Display.InternalDisplayOnly:
MapInternalDisplayOnly(settings, value);
break;
}
}
private void MapAllowedDisplays(AppSettings settings, object value)
{
if (value is int count)
{
settings.Display.AllowedDisplays = count;
}
}
private void MapIgnoreError(AppSettings settings, object value)
{
if (value is bool ignore)
{
settings.Display.IgnoreError = ignore;
}
}
private void MapInternalDisplayOnly(AppSettings settings, object value)
{
if (value is bool internalOnly)
{
settings.Display.InternalDisplayOnly = internalOnly;
}
}
}
}

View file

@ -150,6 +150,10 @@ namespace SafeExamBrowser.Configuration.ConfigurationData
settings.ConfigurationMode = ConfigurationMode.Exam;
settings.Display.AllowedDisplays = 1;
settings.Display.IgnoreError = false;
settings.Display.InternalDisplayOnly = false;
settings.Keyboard.AllowAltEsc = false;
settings.Keyboard.AllowAltF4 = false;
settings.Keyboard.AllowAltTab = true;

View file

@ -170,6 +170,13 @@ namespace SafeExamBrowser.Configuration.ConfigurationData
internal const string SessionMode = "sebMode";
}
internal static class Display
{
internal const string AllowedDisplays = "allowedDisplaysMaxNumber";
internal const string IgnoreError = "allowedDisplaysIgnoreFailure";
internal const string InternalDisplayOnly = "allowedDisplayBuiltinEnforce";
}
internal static class General
{
internal const string LogLevel = "logLevel";

View file

@ -60,6 +60,7 @@
<Compile Include="ConfigurationData\DataMapping\AudioDataMapper.cs" />
<Compile Include="ConfigurationData\DataMapping\BrowserDataMapper.cs" />
<Compile Include="ConfigurationData\DataMapping\ConfigurationFileDataMapper.cs" />
<Compile Include="ConfigurationData\DataMapping\DisplayDataMapper.cs" />
<Compile Include="ConfigurationData\DataMapping\GeneralDataMapper.cs" />
<Compile Include="ConfigurationData\DataMapping\BaseDataMapper.cs" />
<Compile Include="ConfigurationData\DataMapping\InputDataMapper.cs" />

View file

@ -52,6 +52,9 @@ namespace SafeExamBrowser.I18n.Contracts
LockScreen_ApplicationsAllowOption,
LockScreen_ApplicationsMessage,
LockScreen_ApplicationsTerminateOption,
LockScreen_DisplayConfigurationContinueOption,
LockScreen_DisplayConfigurationTerminateOption,
LockScreen_DisplayConfigurationMessage,
LockScreen_UserSessionContinueOption,
LockScreen_UserSessionMessage,
LockScreen_UserSessionTerminateOption,
@ -95,6 +98,8 @@ namespace SafeExamBrowser.I18n.Contracts
MessageBox_InvalidUnlockPassword,
MessageBox_InvalidUnlockPasswordTitle,
MessageBox_NoButton,
MessageBox_DisplayConfigurationError,
MessageBox_DisplayConfigurationErrorTitle,
MessageBox_NotSupportedConfigurationResource,
MessageBox_NotSupportedConfigurationResourceTitle,
MessageBox_OkButton,
@ -163,6 +168,7 @@ namespace SafeExamBrowser.I18n.Contracts
OperationStatus_TerminateBrowser,
OperationStatus_TerminateProctoring,
OperationStatus_TerminateShell,
OperationStatus_ValidateDisplayConfiguration,
OperationStatus_ValidateRemoteSessionPolicy,
OperationStatus_ValidateVirtualMachinePolicy,
OperationStatus_WaitDisclaimerConfirmation,

View file

@ -114,6 +114,15 @@
<Entry key="LockScreen_ApplicationsTerminateOption">
Safe Exam Browser beenden. WARNUNG: Sie werden keine Möglichkeit haben, Daten zu speichern oder weitere Aktionen auszuführen, SEB wird sofort beendet!
</Entry>
<Entry key="LockScreen_DisplayConfigurationContinueOption">
Bildschirm-Konfiguration temporär erlauben. Dies gilt nur für die momentan laufende Sitzung!
</Entry>
<Entry key="LockScreen_DisplayConfigurationTerminateOption">
Safe Exam Browser beenden. WARNUNG: Sie werden keine Möglichkeit haben, Daten zu speichern oder weitere Aktionen auszuführen, SEB wird sofort beendet!
</Entry>
<Entry key="LockScreen_DisplayConfigurationMessage">
Eine verbotene Bildschirm-Konfiguration wurde detektiert. Bitte wählen Sie eine der verfügbaren Optionen aus und geben Sie das korrekte Passwort ein, um SEB zu entsperren.
</Entry>
<Entry key="LockScreen_Title">
SEB GESPERRT
</Entry>
@ -210,6 +219,12 @@
<Entry key="MessageBox_ConfigurationDownloadErrorTitle">
Fehler beim Herunterladen
</Entry>
<Entry key="MessageBox_DisplayConfigurationError">
Die aktive Bildschirm-Konfiguration ist nicht erlaubt! Bitte konsultieren Sie das Applikations-Protokoll für mehr Informationen. SEB wird sich nun beenden...
</Entry>
<Entry key="MessageBox_DisplayConfigurationErrorTitle">
Verbotene Bildschirm-Konfiguration
</Entry>
<Entry key="MessageBox_InvalidConfigurationData">
Die Konfigurations-Ressource "%%URI%%" enthält ungültige Daten!
</Entry>
@ -447,6 +462,9 @@
<Entry key="OperationStatus_TerminateShell">
Beende Benutzeroberfläche
</Entry>
<Entry key="OperationStatus_ValidateDisplayConfiguration">
Validiere Richtlinie für Bildschirm-Konfiguration
</Entry>
<Entry key="OperationStatus_ValidateRemoteSessionPolicy">
Validiere Richtlinie für Remote-Sitzungen
</Entry>

View file

@ -114,6 +114,15 @@
<Entry key="LockScreen_ApplicationsTerminateOption">
Terminate Safe Exam Browser. WARNING: There will be no possibility to save data or perform any further actions, the shutdown will be initiated immediately!
</Entry>
<Entry key="LockScreen_DisplayConfigurationContinueOption">
Temporarily allow the display configuration. This applies only to the currently running session!
</Entry>
<Entry key="LockScreen_DisplayConfigurationTerminateOption">
Terminate Safe Exam Browser. WARNING: There will be no possibility to save data or perform any further actions, the shutdown will be initiated immediately!
</Entry>
<Entry key="LockScreen_DisplayConfigurationMessage">
A prohibited display configuration has been detected. In order to unlock SEB, please select one of the available options and enter the correct unlock password.
</Entry>
<Entry key="LockScreen_Title">
SEB LOCKED
</Entry>
@ -210,6 +219,12 @@
<Entry key="MessageBox_ConfigurationDownloadErrorTitle">
Download Error
</Entry>
<Entry key="MessageBox_DisplayConfigurationError">
The active display configuration is not permitted. Please consult the log files for more information. SEB will now shut down...
</Entry>
<Entry key="MessageBox_DisplayConfigurationErrorTitle">
Prohibited Display Configuration
</Entry>
<Entry key="MessageBox_InvalidConfigurationData">
The configuration resource "%%URI%%" contains invalid data!
</Entry>
@ -447,6 +462,9 @@
<Entry key="OperationStatus_TerminateShell">
Terminating user interface
</Entry>
<Entry key="OperationStatus_ValidateDisplayConfiguration">
Validating display configuration policy
</Entry>
<Entry key="OperationStatus_ValidateRemoteSessionPolicy">
Validating remote session policy
</Entry>

View file

@ -58,7 +58,7 @@
Annuler
</Entry>
<Entry key="ExamSelectionDialog_Message">
Veuillez sélectionner l'un des examens disponibles sur le serveur SEB :
Veuillez sélectionner l'un des examens disponibles sur le serveur SEB:
</Entry>
<Entry key="ExamSelectionDialog_Select">
Selection
@ -70,10 +70,10 @@
Annuler
</Entry>
<Entry key="FileSystemDialog_LoadError">
Echec du chargement des données !
Echec du chargement des données!
</Entry>
<Entry key="FileSystemDialog_Loading">
Chargement
Chargement...
</Entry>
<Entry key="FileSystemDialog_OpenFileMessage">
Veuillez sélectionner un fichier à ouvrir.
@ -82,13 +82,13 @@
Veuillez sélectionner un dossier.
</Entry>
<Entry key="FileSystemDialog_OverwriteWarning">
Le fichier sélectionné existe déjà ! Voulez-vous vraiment le remplacer ?
Le fichier sélectionné existe déjà ! Voulez-vous vraiment le remplacer?
</Entry>
<Entry key="FileSystemDialog_OverwriteWarningTitle">
Remplacer ?
Remplacer?
</Entry>
<Entry key="FileSystemDialog_SaveAs">
Enregistrer sous :
Enregistrer sous:
</Entry>
<Entry key="FileSystemDialog_SaveFileMessage">
Veuillez sélectionner un emplacement pour enregistrer le fichier.
@ -103,16 +103,25 @@
Accès au système de fichiers
</Entry>
<Entry key="FolderDialog_ApplicationLocation">
L'application "%%NAME%%" n'a pas pu être trouvée sur le système ! Veuillez localiser le dossier contenant l'exécutable principal "%%EXECUTABLE%%".
L'application "%%NAME%%" n'a pas pu être trouvée sur le système! Veuillez localiser le dossier contenant l'exécutable principal "%%EXECUTABLE%%".
</Entry>
<Entry key="LockScreen_ApplicationsAllowOption">
Autoriser temporairement les applications figurant sur la liste noire. Cela ne s'applique qu'aux instances et à la session en cours !
Autoriser temporairement les applications figurant sur la liste noire. Cela ne s'applique qu'aux instances et à la session en cours!
</Entry>
<Entry key="LockScreen_ApplicationsMessage">
Les applications sur liste noire énumérées ci-dessous ont été lancées et nont pas pu être automatiquement supprimées ! Afin de débloquer SEB, veuillez sélectionner l'une des options disponibles et entrer le mot de passe de déblocage.
Les applications sur liste noire énumérées ci-dessous ont été lancées et nont pas pu être automatiquement supprimées! Afin de débloquer SEB, veuillez sélectionner l'une des options disponibles et entrer le mot de passe de déblocage.
</Entry>
<Entry key="LockScreen_ApplicationsTerminateOption">
Terminer Safe Exam Browser. AVERTISSEMENT : Il n'y aura pas de possibilité de sauvegarder les données ou d'effectuer d'autres actions, l'arrêt sera déclenché immédiatement !
Terminer Safe Exam Browser. AVERTISSEMENT: Il n'y aura pas de possibilité de sauvegarder les données ou d'effectuer d'autres actions, l'arrêt sera déclenché immédiatement!
</Entry>
<Entry key="LockScreen_DisplayConfigurationContinueOption">
Autoriser temporairement la configuration de l'affichage. Ceci s'applique uniquement à la session en cours!
</Entry>
<Entry key="LockScreen_DisplayConfigurationTerminateOption">
Terminez le navigateur Safe Exam. AVERTISSEMENT: Il n'y aura aucune possibilité de sauvegarder des données ou d'effectuer d'autres actions, l'arrêt sera déclenché immédiatement!
</Entry>
<Entry key="LockScreen_DisplayConfigurationMessage">
Une configuration d'affichage interdite a été détectée. Pour déverrouiller SEB, veuillez sélectionner l'une des options disponibles et saisir le mot de passe de déverrouillage correct.
</Entry>
<Entry key="LockScreen_Title">
SEB VEROUILLE
@ -124,10 +133,10 @@
Dévérouiller Safe Exam Browser.
</Entry>
<Entry key="LockScreen_UserSessionMessage">
L'utilisateur actif a changé ou l'ordinateur a été verrouillé ! Afin de déverrouiller SEB, veuillez sélectionner une des options disponibles et entrer le mot de passe de déverrouillage.
L'utilisateur actif a changé ou l'ordinateur a été verrouillé! Afin de déverrouiller SEB, veuillez sélectionner une des options disponibles et entrer le mot de passe de déverrouillage.
</Entry>
<Entry key="LockScreen_UserSessionTerminateOption">
Terminer Safe Exam Browser. AVERTISSEMENT : Il n'y aura pas de possibilité de sauvegarder les données ou d'effectuer d'autres actions, l'arrêt sera déclenché immédiatement !
Terminer Safe Exam Browser. AVERTISSEMENT: Il n'y aura pas de possibilité de sauvegarder les données ou d'effectuer d'autres actions, l'arrêt sera déclenché immédiatement!
</Entry>
<Entry key="LogWindow_AlwaysOnTop">
Toujours au premier plan
@ -139,40 +148,40 @@
Journal de lapplication
</Entry>
<Entry key="MessageBox_ApplicationAutoTerminationQuestion">
Les applications énumérées ci-dessous doivent être terminées avant qu'une nouvelle session puisse être lancée. Souhaitez-vous les clôturer automatiquement maintenant ?
Les applications énumérées ci-dessous doivent être terminées avant qu'une nouvelle session puisse être lancée. Souhaitez-vous les clôturer automatiquement maintenant?
</Entry>
<Entry key="MessageBox_ApplicationAutoTerminationQuestionTitle">
Applications en cours d'exécution détectées
</Entry>
<Entry key="MessageBox_ApplicationAutoTerminationDataLossWarning">
AVERTISSEMENT : les données des applications non sauvegardées peuvent être perdues !
AVERTISSEMENT : les données des applications non sauvegardées peuvent être perdues!
</Entry>
<Entry key="MessageBox_ApplicationError">
Une erreur irrémédiable s'est produite ! Veuillez consulter les fichiers journaux pour plus d'informations. SEB va maintenant fermer...
Une erreur irrémédiable s'est produite! Veuillez consulter les fichiers journaux pour plus d'informations. SEB va maintenant fermer...
</Entry>
<Entry key="MessageBox_ApplicationErrorTitle">
Erreur de lapplication
</Entry>
<Entry key="MessageBox_ApplicationInitializationFailure">
L'application %%NAME%% n'a pas pu être initialisée et ne sera donc pas disponible pour la nouvelle session ! Veuillez consulter les fichiers journaux pour plus d'informations.
L'application %%NAME%% n'a pas pu être initialisée et ne sera donc pas disponible pour la nouvelle session! Veuillez consulter les fichiers journaux pour plus d'informations.
</Entry>
<Entry key="MessageBox_ApplicationInitializationFailureTitle">
Échec de l'initialisation de lapplication
</Entry>
<Entry key="MessageBox_ApplicationNotFound">
Lapplication %%NAME%% n'a pas pu être trouvée sur le système et ne sera donc pas disponible pour la nouvelle session ! Veuillez consulter les fichiers journaux pour plus d'informations.
Lapplication %%NAME%% n'a pas pu être trouvée sur le système et ne sera donc pas disponible pour la nouvelle session! Veuillez consulter les fichiers journaux pour plus d'informations.
</Entry>
<Entry key="MessageBox_ApplicationNotFoundTitle">
Application non-trouvée
</Entry>
<Entry key="MessageBox_ApplicationTerminationFailure">
Les applications énumérées ci-dessous n'ont pas pu être terminées ! Veuillez les terminer manuellement et réessayer...
Les applications énumérées ci-dessous n'ont pas pu être terminées! Veuillez les terminer manuellement et réessayer...
</Entry>
<Entry key="MessageBox_ApplicationTerminationFailureTitle">
Échec de la clôture automatique
</Entry>
<Entry key="MessageBox_BrowserHomeQuestion">
Etes-vous sûr ? (Cette fonction ne vous déconnecte pas si vous êtes connecté sur un site web)
Etes-vous sûr? (Cette fonction ne vous déconnecte pas si vous êtes connecté sur un site web)
</Entry>
<Entry key="MessageBox_BrowserHomeQuestionTitle">
Retour au début
@ -184,7 +193,7 @@
Page bloquée
</Entry>
<Entry key="MessageBox_BrowserQuitUrlConfirmation">
L'application du navigateur a détecté une URL de fin ! Vous souhaitez mettre fin à SEB maintenant ?
L'application du navigateur a détecté une URL de fin! Vous souhaitez mettre fin à SEB maintenant?
</Entry>
<Entry key="MessageBox_BrowserQuitUrlConfirmationTitle">
URL de fin détectée
@ -193,13 +202,13 @@
Annuler
</Entry>
<Entry key="MessageBox_ClientConfigurationError">
La configuration du client local a échoué ! Veuillez consulter les fichiers journaux pour plus d'informations. SEB va maintenant se fermer....
La configuration du client local a échoué! Veuillez consulter les fichiers journaux pour plus d'informations. SEB va maintenant se fermer....
</Entry>
<Entry key="MessageBox_ClientConfigurationErrorTitle">
Erreur de configuration
</Entry>
<Entry key="MessageBox_ClientConfigurationQuestion">
La configuration du client a été enregistrée et sera utilisée lors du prochain démarrage de SEB. Vous voulez quitter maintenant ?
La configuration du client a été enregistrée et sera utilisée lors du prochain démarrage de SEB. Vous voulez quitter maintenant?
</Entry>
<Entry key="MessageBox_ClientConfigurationQuestionTitle">
Configuration réussie
@ -210,8 +219,14 @@
<Entry key="MessageBox_ConfigurationDownloadErrorTitle">
Erreur de téléchargement
</Entry>
<Entry key="MessageBox_DisplayConfigurationError">
La configuration d'affichage active n'est pas autorisée. Veuillez consulter les fichiers journaux pour plus d'informations. SEB va maintenant s'arrêter...
</Entry>
<Entry key="MessageBox_DisplayConfigurationErrorTitle">
Configuration d'affichage interdite
</Entry>
<Entry key="MessageBox_InvalidConfigurationData">
La ressource de configuration "%%URI%%" contient des données non valides !
La ressource de configuration "%%URI%%" contient des données non valides!
</Entry>
<Entry key="MessageBox_InvalidConfigurationDataTitle">
Erreur de configuration
@ -244,7 +259,7 @@
Non
</Entry>
<Entry key="MessageBox_NotSupportedConfigurationResource">
La ressource de configuration "%%URI%%" n'est pas supportée !
La ressource de configuration "%%URI%%" n'est pas supportée!
</Entry>
<Entry key="MessageBox_NotSupportedConfigurationResourceTitle">
Erreur de configuration
@ -259,13 +274,13 @@
Session avec surveillance à distance
</Entry>
<Entry key="MessageBox_Quit">
Voulez-vous quitter SEB ?
Voulez-vous quitter SEB?
</Entry>
<Entry key="MessageBox_QuitTitle">
Quitter ?
</Entry>
<Entry key="MessageBox_QuitError">
Le client n'a pas réussi à communiquer la demande d'arrêt au serveur d'exécution !
Le client n'a pas réussi à communiquer la demande d'arrêt au serveur d'exécution!
</Entry>
<Entry key="MessageBox_QuitErrorTitle">
Erreur de sortie
@ -277,13 +292,13 @@
Reconfiguration refusée
</Entry>
<Entry key="MessageBox_ReconfigurationError">
Le client n'a pas réussi à communiquer la demande de reconfiguration au serveur !
Le client n'a pas réussi à communiquer la demande de reconfiguration au serveur!
</Entry>
<Entry key="MessageBox_ReconfigurationErrorTitle">
Erreur de reconfiguration
</Entry>
<Entry key="MessageBox_ReloadConfirmation">
Souhaitez-vous recharger la page actuelle ?
Souhaitez-vous recharger la page actuelle?
</Entry>
<Entry key="MessageBox_ReloadConfirmationTitle">
Recharger ?
@ -295,7 +310,7 @@
Session distante détectée
</Entry>
<Entry key="MessageBox_ServiceUnavailableError">
Le service SEB n'a pas été initialisé ! Le service SEB va maintenant se terminer puisque le service obligatoire.
Le service SEB n'a pas été initialisé! Le service SEB va maintenant se terminer puisque le service obligatoire.
</Entry>
<Entry key="MessageBox_ServiceUnavailableErrorTitle">
Service indisponible
@ -307,25 +322,25 @@
Service indisponible
</Entry>
<Entry key="MessageBox_SessionStartError">
Le SEB n'a pas réussi à démarrer une nouvelle session ! Veuillez consulter les fichiers journaux pour plus d'informations.
Le SEB n'a pas réussi à démarrer une nouvelle session! Veuillez consulter les fichiers journaux pour plus d'informations.
</Entry>
<Entry key="MessageBox_SessionStartErrorTitle">
Erreur de démarrage de session
</Entry>
<Entry key="MessageBox_ShutdownError">
Une erreur inattendue s'est produite lors de la procédure d'arrêt ! Veuillez consulter les fichiers journaux pour plus d'informations.
Une erreur inattendue s'est produite lors de la procédure d'arrêt! Veuillez consulter les fichiers journaux pour plus d'informations.
</Entry>
<Entry key="MessageBox_ShutdownErrorTitle">
Erreur de fermeture
</Entry>
<Entry key="MessageBox_StartupError">
Une erreur inattendue s'est produite lors de la procédure de démarrage ! Veuillez consulter les fichiers journaux pour plus d'informations.
Une erreur inattendue s'est produite lors de la procédure de démarrage! Veuillez consulter les fichiers journaux pour plus d'informations.
</Entry>
<Entry key="MessageBox_StartupErrorTitle">
Erreur de démarrage
</Entry>
<Entry key="MessageBox_UnexpectedConfigurationError">
Une erreur inattendue s'est produite en essayant de charger la ressource de configuration "%%URI%%" ! Veuillez consulter les fichiers journaux pour plus d'informations.
Une erreur inattendue s'est produite en essayant de charger la ressource de configuration "%%URI%%"! Veuillez consulter les fichiers journaux pour plus d'informations.
</Entry>
<Entry key="MessageBox_UnexpectedConfigurationErrorTitle">
Erreur de configuration
@ -447,6 +462,9 @@
<Entry key="OperationStatus_TerminateShell">
Arrêt de linterface utilisateur
</Entry>
<Entry key="OperationStatus_ValidateDisplayConfiguration">
Validation de la politique de configuration d'affichage
</Entry>
<Entry key="OperationStatus_ValidateRemoteSessionPolicy">
Validation de la directive sur la session à distance
</Entry>
@ -466,7 +484,7 @@
Attente de la déconnexion du runtime
</Entry>
<Entry key="PasswordDialog_BrowserHomePasswordRequired">
Saisissez le mot de passe pour quitter/redémarrer : (Cette fonction ne vous déconnecte pas si vous êtes connecté sur un site web)
Saisissez le mot de passe pour quitter/redémarrer: (Cette fonction ne vous déconnecte pas si vous êtes connecté sur un site web)
</Entry>
<Entry key="PasswordDialog_BrowserHomePasswordRequiredTitle">
Retour au début
@ -478,7 +496,7 @@
Confirmer
</Entry>
<Entry key="PasswordDialog_LocalAdminPasswordRequired">
Veuillez saisir le mot de passe de l'administrateur pour la configuration du client local :
Veuillez saisir le mot de passe de l'administrateur pour la configuration du client local:
</Entry>
<Entry key="PasswordDialog_LocalAdminPasswordRequiredTitle">
Mot de passe administrateur requis
@ -490,7 +508,7 @@
Mot de passe des paramètres requis
</Entry>
<Entry key="PasswordDialog_QuitPasswordRequired">
Veuillez saisir le mot de passe pour quitter SEB :
Veuillez saisir le mot de passe pour quitter SEB:
</Entry>
<Entry key="PasswordDialog_QuitPasswordRequiredTitle">
Mot de passe de sortie requis
@ -544,7 +562,7 @@
Entièrement chargé (%%CHARGE%%%)
</Entry>
<Entry key="SystemControl_BatteryChargeCriticalWarning">
La charge de la batterie est dangereusement faible. Veuillez brancher votre ordinateur à une source d'alimentation électrique !
La charge de la batterie est dangereusement faible. Veuillez brancher votre ordinateur à une source d'alimentation électrique!
</Entry>
<Entry key="SystemControl_BatteryChargeLowInfo">
La charge de la batterie devient faible. Pensez à brancher votre ordinateur sur une alimentation électrique...

View file

@ -114,6 +114,15 @@
<Entry key="LockScreen_ApplicationsTerminateOption">
Chiudi Safe Exam Browser. ATTENZIONE: non ci sarà la possibilità di salvare dati o eseguire ulteriori azioni, lo spegnimento verrà avviato immediatamente!
</Entry>
<Entry key="LockScreen_DisplayConfigurationContinueOption">
Consenti temporaneamente la configurazione del display. Questo vale solo per la sessione attualmente in esecuzione!
</Entry>
<Entry key="LockScreen_DisplayConfigurationTerminateOption">
Termina Browser esame sicuro. ATTENZIONE: non sarà possibile salvare i dati o eseguire ulteriori azioni, lo spegnimento verrà avviato immediatamente!
</Entry>
<Entry key="LockScreen_DisplayConfigurationMessage">
È stata rilevata una configurazione di visualizzazione vietata. Per sbloccare SEB, seleziona una delle opzioni disponibili e inserisci la password di sblocco corretta.
</Entry>
<Entry key="LockScreen_Title">
SEB BLOCCATO
</Entry>
@ -210,6 +219,12 @@
<Entry key="MessageBox_ConfigurationDownloadErrorTitle">
Errore di download
</Entry>
<Entry key="MessageBox_DisplayConfigurationError">
La configurazione del display attiva non è consentita. Si prega di consultare i file di registro per ulteriori informazioni. SEB ora si spegnerà...
</Entry>
<Entry key="MessageBox_DisplayConfigurationErrorTitle">
Configurazione del display vietata
</Entry>
<Entry key="MessageBox_InvalidConfigurationData">
La risorsa di configurazione "%%URI%%" contiene dati non validi!
</Entry>
@ -447,6 +462,9 @@
<Entry key="OperationStatus_TerminateShell">
Chiusura dell'interfaccia utente
</Entry>
<Entry key="OperationStatus_ValidateDisplayConfiguration">
Convalida dei criteri di configurazione del display
</Entry>
<Entry key="OperationStatus_ValidateRemoteSessionPolicy">
Convalida dei criteri della sessione remota
</Entry>

View file

@ -99,6 +99,15 @@
<Entry key="LockScreen_TerminateOption">
强制关闭防作弊考试专用浏览器。警告:将无法保存数据或执行任何进一步的操作,关闭操作将立即启动。
</Entry>
<Entry key="LockScreen_DisplayConfigurationContinueOption">
暂时允许显示配置。 这仅适用于当前正在运行的会话!
</Entry>
<Entry key="LockScreen_DisplayConfigurationTerminateOption">
终止安全考试浏览器。 警告:将无法保存数据或执行任何进一步操作,将立即启动关机!
</Entry>
<Entry key="LockScreen_DisplayConfigurationMessage">
检测到禁止的显示配置。 要解锁 SEB请选择可用选项之一并输入正确的解锁密码。
</Entry>
<Entry key="LockScreen_Title">
防作弊考试专用浏览器已锁定
</Entry>
@ -180,6 +189,12 @@
<Entry key="MessageBox_ConfigurationDownloadErrorTitle">
下载错误
</Entry>
<Entry key="MessageBox_DisplayConfigurationError">
不允许使用活动的显示配置。 请查阅日志文件以获取更多信息。 SEB现在将关闭...
</Entry>
<Entry key="MessageBox_DisplayConfigurationErrorTitle">
禁止的显示配置
</Entry>
<Entry key="MessageBox_InvalidConfigurationData">
配置"%%URI%%" 中包含无效数据。
</Entry>
@ -399,6 +414,9 @@
<Entry key="OperationStatus_TerminateShell">
终止用户界面
</Entry>
<Entry key="OperationStatus_ValidateDisplayConfiguration">
验证显示配置策略
</Entry>
<Entry key="OperationStatus_ValidateRemoteSessionPolicy">
验证远程会话策略
</Entry>

View file

@ -7,11 +7,12 @@
*/
using SafeExamBrowser.Monitoring.Contracts.Display.Events;
using SafeExamBrowser.Settings.Monitoring;
namespace SafeExamBrowser.Monitoring.Contracts.Display
{
/// <summary>
/// Monitors the displays of the computer for (setup) changes and provides access to display-related functionality.
/// Monitors the displays of the computer for changes and provides access to display-related functionality.
/// </summary>
public interface IDisplayMonitor
{
@ -25,6 +26,11 @@ namespace SafeExamBrowser.Monitoring.Contracts.Display
/// </summary>
void InitializePrimaryDisplay(int taskbarHeight);
/// <summary>
/// Indicates whether the currently active display configuration is allowed according to the given settings.
/// </summary>
bool IsAllowedConfiguration(DisplaySettings settings);
/// <summary>
/// Prevents the computer from entering sleep mode and turning its display(s) off.
/// </summary>

View file

@ -0,0 +1,18 @@
/*
* Copyright (c) 2021 ETH Zürich, Educational Development and Technology (LET)
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
namespace SafeExamBrowser.Monitoring.Display
{
internal class Display
{
public string Identifier { get; set; }
public bool IsActive { get; set; }
public bool IsInternal { get; set; }
public VideoOutputTechnology Technology { get; set; }
}
}

View file

@ -7,12 +7,16 @@
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Management;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Win32;
using SafeExamBrowser.Logging.Contracts;
using SafeExamBrowser.Monitoring.Contracts.Display;
using SafeExamBrowser.Monitoring.Contracts.Display.Events;
using SafeExamBrowser.Settings.Monitoring;
using SafeExamBrowser.SystemComponents.Contracts;
using SafeExamBrowser.WindowsApi.Contracts;
using OperatingSystem = SafeExamBrowser.SystemComponents.Contracts.OperatingSystem;
@ -42,6 +46,41 @@ namespace SafeExamBrowser.Monitoring.Display
InitializeWallpaper();
}
public bool IsAllowedConfiguration(DisplaySettings settings)
{
var allowed = false;
if (TryLoadDisplays(out var displays))
{
var active = displays.Where(d => d.IsActive);
var count = active.Count();
allowed = count <= settings.AllowedDisplays;
if (allowed)
{
logger.Info($"Detected {count} active displays, {settings.AllowedDisplays} are allowed.");
}
else
{
logger.Warn($"Detected {count} active displays but only {settings.AllowedDisplays} are allowed!");
}
if (settings.InternalDisplayOnly && active.Any(d => !d.IsInternal))
{
allowed = false;
logger.Warn("Detected external display but only internal displays are allowed!");
}
}
else
{
allowed = settings.IgnoreError;
logger.Info("Ignoring display setup validation error and allowing active setup.");
}
return allowed;
}
public void PreventSleepMode()
{
nativeMethods.PreventSleepMode();
@ -101,7 +140,7 @@ namespace SafeExamBrowser.Monitoring.Display
{
var path = nativeMethods.GetWallpaperPath();
if (!String.IsNullOrEmpty(path))
if (!string.IsNullOrEmpty(path))
{
wallpaper = path;
logger.Info($"Saved wallpaper image: {wallpaper}.");
@ -112,6 +151,70 @@ namespace SafeExamBrowser.Monitoring.Display
}
}
private bool TryLoadDisplays(out IList<Display> displays)
{
var success = true;
displays = new List<Display>();
try
{
using (var searcher = new ManagementObjectSearcher(@"Root\WMI", "SELECT * FROM WmiMonitorBasicDisplayParams"))
using (var results = searcher.Get())
{
var displayParameters = results.Cast<ManagementObject>();
foreach (var display in displayParameters)
{
displays.Add(new Display
{
Identifier = Convert.ToString(display["InstanceName"]),
IsActive = Convert.ToBoolean(display["Active"])
});
}
}
using (var searcher = new ManagementObjectSearcher(@"Root\WMI", "SELECT * FROM WmiMonitorConnectionParams"))
using (var results = searcher.Get())
{
var connectionParameters = results.Cast<ManagementObject>();
foreach (var connection in connectionParameters)
{
var identifier = Convert.ToString(connection["InstanceName"]);
var isActive = Convert.ToBoolean(connection["Active"]);
var technologyValue = Convert.ToInt64(connection["VideoOutputTechnology"]);
var technology = (VideoOutputTechnology) technologyValue;
var display = displays.FirstOrDefault(d => d.Identifier?.Equals(identifier, StringComparison.OrdinalIgnoreCase) == true);
if (!Enum.IsDefined(typeof(VideoOutputTechnology), technology))
{
logger.Warn($"Detected undefined video output technology '{technologyValue}' for display '{identifier}'!");
}
if (display != default(Display))
{
display.IsActive &= isActive;
display.IsInternal = technology == VideoOutputTechnology.Internal;
display.Technology = technology;
}
}
}
}
catch (Exception e)
{
success = false;
logger.Error("Failed to query displays!", e);
}
foreach (var display in displays)
{
logger.Info($"Detected {(display.IsActive ? "active" : "inactive")}, {(display.IsInternal ? "internal" : "external")} display '{display.Identifier}' connected via '{display.Technology}'.");
}
return success;
}
private void ResetWorkingArea()
{
var identifier = GetIdentifierForPrimaryDisplay();
@ -138,9 +241,11 @@ namespace SafeExamBrowser.Monitoring.Display
private string GetIdentifierForPrimaryDisplay()
{
var display = Screen.PrimaryScreen.DeviceName?.Replace(@"\\.\", string.Empty);
var name = Screen.PrimaryScreen.DeviceName?.Replace(@"\\.\", string.Empty);
var resolution = $"{Screen.PrimaryScreen.Bounds.Width}x{Screen.PrimaryScreen.Bounds.Height}";
var identifier = $"{name} ({resolution})";
return $"{display} ({Screen.PrimaryScreen.Bounds.Width}x{Screen.PrimaryScreen.Bounds.Height})";
return identifier;
}
private void LogWorkingArea(string message, IBounds area)

View file

@ -0,0 +1,40 @@
/*
* Copyright (c) 2021 ETH Zürich, Educational Development and Technology (LET)
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
namespace SafeExamBrowser.Monitoring.Display
{
/// <remarks>
/// See https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/d3dkmdt/ne-d3dkmdt-_d3dkmdt_video_output_technology
/// </remarks>
internal enum VideoOutputTechnology : long
{
Uninitialized = -2,
Other = -1,
HD15 = 0,
SVideo = 1,
CompositeVideo = 2,
ComponentVideo = 3,
DVI = 4,
HDMI = 5,
LVDS = 6,
DJPN = 8,
SDI = 9,
DisplayPortExternal = 10,
DisplayPortEmbedded = 11,
UDIExternal = 12,
UDIEmbedded = 13,
SDTVDongle = 14,
MiraCast = 15,
Internal = 0x80000000,
SVideo4Pin = SVideo,
SVideo7Pin = SVideo,
RF = ComponentVideo,
RCA3Component = ComponentVideo,
BNC = ComponentVideo
}
}

View file

@ -51,6 +51,7 @@
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Drawing" />
<Reference Include="System.Management" />
<Reference Include="System.Windows.Forms" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="WindowsBase" />
@ -58,7 +59,9 @@
<ItemGroup>
<Compile Include="Applications\Window.cs" />
<Compile Include="Display\Bounds.cs" />
<Compile Include="Display\Display.cs" />
<Compile Include="Display\DisplayMonitor.cs" />
<Compile Include="Display\VideoOutputTechnology.cs" />
<Compile Include="Keyboard\KeyboardInterceptor.cs" />
<Compile Include="Mouse\MouseInterceptor.cs" />
<Compile Include="Applications\ApplicationMonitor.cs" />

View file

@ -24,6 +24,7 @@ using SafeExamBrowser.I18n;
using SafeExamBrowser.I18n.Contracts;
using SafeExamBrowser.Logging;
using SafeExamBrowser.Logging.Contracts;
using SafeExamBrowser.Monitoring.Display;
using SafeExamBrowser.Runtime.Communication;
using SafeExamBrowser.Runtime.Operations;
using SafeExamBrowser.Server;
@ -63,6 +64,7 @@ namespace SafeExamBrowser.Runtime
var uiFactory = new UserInterfaceFactory(text);
var desktopFactory = new DesktopFactory(ModuleLogger(nameof(DesktopFactory)));
var desktopMonitor = new DesktopMonitor(ModuleLogger(nameof(DesktopMonitor)));
var displayMonitor = new DisplayMonitor(ModuleLogger(nameof(DisplayMonitor)), nativeMethods, systemInfo);
var explorerShell = new ExplorerShell(ModuleLogger(nameof(ExplorerShell)), nativeMethods);
var fileSystem = new FileSystem();
var processFactory = new ProcessFactory(ModuleLogger(nameof(ProcessFactory)));
@ -89,6 +91,7 @@ namespace SafeExamBrowser.Runtime
sessionOperations.Enqueue(new ServerOperation(args, configuration, fileSystem, logger, sessionContext, server));
sessionOperations.Enqueue(new RemoteSessionOperation(remoteSessionDetector, logger, sessionContext));
sessionOperations.Enqueue(new VirtualMachineOperation(vmDetector, logger, sessionContext));
sessionOperations.Enqueue(new DisplayMonitorOperation(displayMonitor, logger, sessionContext));
sessionOperations.Enqueue(new ServiceOperation(logger, runtimeHost, serviceProxy, sessionContext, THIRTY_SECONDS, userInfo));
sessionOperations.Enqueue(new ClientTerminationOperation(logger, processFactory, proxyFactory, runtimeHost, sessionContext, THIRTY_SECONDS));
sessionOperations.Enqueue(new ProctoringWorkaroundOperation(logger, sessionContext));

View file

@ -0,0 +1,76 @@
/*
* Copyright (c) 2021 ETH Zürich, Educational Development and Technology (LET)
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
using SafeExamBrowser.Core.Contracts.OperationModel;
using SafeExamBrowser.Core.Contracts.OperationModel.Events;
using SafeExamBrowser.I18n.Contracts;
using SafeExamBrowser.Logging.Contracts;
using SafeExamBrowser.Monitoring.Contracts.Display;
using SafeExamBrowser.Runtime.Operations.Events;
using SafeExamBrowser.UserInterface.Contracts.MessageBox;
namespace SafeExamBrowser.Runtime.Operations
{
internal class DisplayMonitorOperation : SessionOperation
{
private readonly IDisplayMonitor displayMonitor;
private readonly ILogger logger;
public override event ActionRequiredEventHandler ActionRequired;
public override event StatusChangedEventHandler StatusChanged;
public DisplayMonitorOperation(IDisplayMonitor displayMonitor, ILogger logger, SessionContext context) : base(context)
{
this.displayMonitor = displayMonitor;
this.logger = logger;
}
public override OperationResult Perform()
{
return CheckDisplayConfiguration();
}
public override OperationResult Repeat()
{
return CheckDisplayConfiguration();
}
public override OperationResult Revert()
{
return OperationResult.Success;
}
private OperationResult CheckDisplayConfiguration()
{
var args = new MessageEventArgs
{
Action = MessageBoxAction.Ok,
Icon = MessageBoxIcon.Error,
Message = TextKey.MessageBox_DisplayConfigurationError,
Title = TextKey.MessageBox_DisplayConfigurationErrorTitle
};
var result = OperationResult.Aborted;
logger.Info("Validating display configuration...");
StatusChanged?.Invoke(TextKey.OperationStatus_ValidateDisplayConfiguration);
if (displayMonitor.IsAllowedConfiguration(Context.Next.Settings.Display))
{
logger.Info("Display configuration is allowed.");
result = OperationResult.Success;
}
else
{
logger.Error("Display configuration is not allowed!");
ActionRequired?.Invoke(args);
}
return result;
}
}
}

View file

@ -95,6 +95,7 @@
<Compile Include="Operations\ConfigurationBaseOperation.cs" />
<Compile Include="Operations\ConfigurationOperation.cs" />
<Compile Include="Operations\DisclaimerOperation.cs" />
<Compile Include="Operations\DisplayMonitorOperation.cs" />
<Compile Include="Operations\Events\ClientConfigurationErrorMessageArgs.cs" />
<Compile Include="Operations\Events\ConfigurationCompletedEventArgs.cs" />
<Compile Include="Operations\Events\ExamSelectionEventArgs.cs" />
@ -188,6 +189,14 @@
<Project>{e107026c-2011-4552-a7d8-3a0d37881df6}</Project>
<Name>SafeExamBrowser.Logging</Name>
</ProjectReference>
<ProjectReference Include="..\SafeExamBrowser.Monitoring.Contracts\SafeExamBrowser.Monitoring.Contracts.csproj">
<Project>{6d563a30-366d-4c35-815b-2c9e6872278b}</Project>
<Name>SafeExamBrowser.Monitoring.Contracts</Name>
</ProjectReference>
<ProjectReference Include="..\SafeExamBrowser.Monitoring\SafeExamBrowser.Monitoring.csproj">
<Project>{ef563531-4eb5-44b9-a5ec-d6d6f204469b}</Project>
<Name>SafeExamBrowser.Monitoring</Name>
</ProjectReference>
<ProjectReference Include="..\SafeExamBrowser.Server.Contracts\SafeExamBrowser.Server.Contracts.csproj">
<Project>{db701e6f-bddc-4cec-b662-335a9dc11809}</Project>
<Name>SafeExamBrowser.Server.Contracts</Name>

View file

@ -51,6 +51,11 @@ namespace SafeExamBrowser.Settings
/// </summary>
public ConfigurationMode ConfigurationMode { get; set; }
/// <summary>
/// All display-related settings.
/// </summary>
public DisplaySettings Display { get; set; }
/// <summary>
/// All keyboard-related settings.
/// </summary>
@ -107,6 +112,7 @@ namespace SafeExamBrowser.Settings
Applications = new ApplicationSettings();
Audio = new AudioSettings();
Browser = new BrowserSettings();
Display = new DisplaySettings();
Keyboard = new KeyboardSettings();
Mouse = new MouseSettings();
Proctoring = new ProctoringSettings();

View file

@ -0,0 +1,34 @@
/*
* Copyright (c) 2021 ETH Zürich, Educational Development and Technology (LET)
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
using System;
namespace SafeExamBrowser.Settings.Monitoring
{
/// <summary>
/// Defines all settings related to the display configuration monitoring.
/// </summary>
[Serializable]
public class DisplaySettings
{
/// <summary>
/// Defines the number of allowed displays.
/// </summary>
public int AllowedDisplays { get; set; }
/// <summary>
/// Determines whether any display configuration may be allowed when the configuration can't be verified due to an error.
/// </summary>
public bool IgnoreError { get; set; }
/// <summary>
/// Determines whether only an internal display may be used.
/// </summary>
public bool InternalDisplayOnly { get; set; }
}
}

View file

@ -71,6 +71,7 @@
<Compile Include="Browser\Proxy\ProxyProtocol.cs" />
<Compile Include="Browser\Proxy\ProxyConfiguration.cs" />
<Compile Include="ConfigurationMode.cs" />
<Compile Include="Monitoring\DisplaySettings.cs" />
<Compile Include="Proctoring\JitsiMeetSettings.cs" />
<Compile Include="Proctoring\ProctoringSettings.cs" />
<Compile Include="Proctoring\WindowVisibility.cs" />

View file

@ -55,7 +55,7 @@ namespace SafeExamBrowser.SystemComponents
try
{
using (var searcher = new ManagementObjectSearcher("Select * from Win32_ComputerSystem"))
using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem"))
using (var results = searcher.Get())
using (var system = results.Cast<ManagementObject>().First())
{

View file

@ -381,7 +381,7 @@ namespace SebWindowsConfig
public const String KeyAllowDisplayMirroring = "allowDisplayMirroring";
public const String KeyAllowedDisplaysMaxNumber = "allowedDisplaysMaxNumber";
public const String KeyAllowedDisplayBuiltin = "allowedDisplayBuiltin";
public const String KeyAllowedDisplayBuiltinEnforce = "allowedDisplayBuiltinEnforce";
// Group "Registry"
@ -974,6 +974,7 @@ namespace SebWindowsConfig
SEBSettings.settingsDefault.Add(SEBSettings.KeyAllowDisplayMirroring, false);
SEBSettings.settingsDefault.Add(SEBSettings.KeyAllowedDisplaysMaxNumber, 1);
SEBSettings.settingsDefault.Add(SEBSettings.KeyAllowedDisplayBuiltin, true);
SEBSettings.settingsDefault.Add(SEBSettings.KeyAllowedDisplayBuiltinEnforce, false);
SEBSettings.settingsDefault.Add(SEBSettings.KeyAllowChromeNotifications, false);
SEBSettings.settingsDefault.Add(SEBSettings.KeyAllowWindowsUpdate, false);

View file

@ -30,8 +30,8 @@ namespace SebWindowsConfig
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SebWindowsConfigForm));
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();
this.openFileDialogSebConfigFile = new System.Windows.Forms.OpenFileDialog();
this.saveFileDialogSebConfigFile = new System.Windows.Forms.SaveFileDialog();
this.imageListTabIcons = new System.Windows.Forms.ImageList(this.components);
@ -83,13 +83,13 @@ namespace SebWindowsConfig
this.labelSebServicePolicy = new System.Windows.Forms.Label();
this.checkBoxAllowScreenSharing = new System.Windows.Forms.CheckBox();
this.checkBoxShowLogButton = new System.Windows.Forms.CheckBox();
this.comboBoxAllowedDisplaysMaxNumber = new System.Windows.Forms.ComboBox();
this.checkBoxAllowLogAccess = new System.Windows.Forms.CheckBox();
this.label13 = new System.Windows.Forms.Label();
this.checkBoxEnablePrivateClipboard = new System.Windows.Forms.CheckBox();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.label14 = new System.Windows.Forms.Label();
this.comboBoxMinMacOSVersion = new System.Windows.Forms.ComboBox();
this.comboBoxAllowedDisplaysMaxNumber = new System.Windows.Forms.ComboBox();
this.label13 = new System.Windows.Forms.Label();
this.checkBoxAllowedDisplayBuiltin = new System.Windows.Forms.CheckBox();
this.checkBoxAllowDisplayMirroring = new System.Windows.Forms.CheckBox();
this.checkBoxDetectStoppedProcess = new System.Windows.Forms.CheckBox();
@ -456,6 +456,7 @@ namespace SebWindowsConfig
this.editDuplicateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.configureClientToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.applyAndStartSEBToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.checkBoxEnforceBuiltinDisplay = new System.Windows.Forms.CheckBox();
this.tabPageHookedKeys.SuspendLayout();
this.groupBoxFunctionKeys.SuspendLayout();
this.groupBoxSpecialKeys.SuspendLayout();
@ -1080,9 +1081,12 @@ namespace SebWindowsConfig
//
// tabPageSecurity
//
this.tabPageSecurity.Controls.Add(this.checkBoxEnforceBuiltinDisplay);
this.tabPageSecurity.Controls.Add(this.groupBoxSebService);
this.tabPageSecurity.Controls.Add(this.checkBoxShowLogButton);
this.tabPageSecurity.Controls.Add(this.comboBoxAllowedDisplaysMaxNumber);
this.tabPageSecurity.Controls.Add(this.checkBoxAllowLogAccess);
this.tabPageSecurity.Controls.Add(this.label13);
this.tabPageSecurity.Controls.Add(this.checkBoxEnablePrivateClipboard);
this.tabPageSecurity.Controls.Add(this.groupBox1);
this.tabPageSecurity.Controls.Add(this.groupBox10);
@ -1196,7 +1200,7 @@ namespace SebWindowsConfig
// checkBoxShowLogButton
//
this.checkBoxShowLogButton.AutoSize = true;
this.checkBoxShowLogButton.Location = new System.Drawing.Point(358, 337);
this.checkBoxShowLogButton.Location = new System.Drawing.Point(617, 323);
this.checkBoxShowLogButton.Margin = new System.Windows.Forms.Padding(2);
this.checkBoxShowLogButton.Name = "checkBoxShowLogButton";
this.checkBoxShowLogButton.Size = new System.Drawing.Size(180, 17);
@ -1205,10 +1209,24 @@ namespace SebWindowsConfig
this.checkBoxShowLogButton.UseVisualStyleBackColor = true;
this.checkBoxShowLogButton.CheckedChanged += new System.EventHandler(this.checkBoxShowLogButton_CheckedChanged);
//
// comboBoxAllowedDisplaysMaxNumber
//
this.comboBoxAllowedDisplaysMaxNumber.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.comboBoxAllowedDisplaysMaxNumber.FormattingEnabled = true;
this.comboBoxAllowedDisplaysMaxNumber.Location = new System.Drawing.Point(833, 267);
this.comboBoxAllowedDisplaysMaxNumber.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.comboBoxAllowedDisplaysMaxNumber.Name = "comboBoxAllowedDisplaysMaxNumber";
this.comboBoxAllowedDisplaysMaxNumber.Size = new System.Drawing.Size(57, 21);
this.comboBoxAllowedDisplaysMaxNumber.TabIndex = 100;
this.toolTip1.SetToolTip(this.comboBoxAllowedDisplaysMaxNumber, "If more displays are connected, these are blanked with an orange full screen wind" +
"ow");
this.comboBoxAllowedDisplaysMaxNumber.SelectedIndexChanged += new System.EventHandler(this.comboBoxAllowedDisplaysMaxNumber_SelectedIndexChanged);
this.comboBoxAllowedDisplaysMaxNumber.TextChanged += new System.EventHandler(this.comboBoxAllowedDisplaysMaxNumber_TextChanged);
//
// checkBoxAllowLogAccess
//
this.checkBoxAllowLogAccess.AutoSize = true;
this.checkBoxAllowLogAccess.Location = new System.Drawing.Point(328, 317);
this.checkBoxAllowLogAccess.Location = new System.Drawing.Point(598, 304);
this.checkBoxAllowLogAccess.Margin = new System.Windows.Forms.Padding(2);
this.checkBoxAllowLogAccess.Name = "checkBoxAllowLogAccess";
this.checkBoxAllowLogAccess.Size = new System.Drawing.Size(199, 17);
@ -1217,11 +1235,24 @@ namespace SebWindowsConfig
this.checkBoxAllowLogAccess.UseVisualStyleBackColor = true;
this.checkBoxAllowLogAccess.CheckedChanged += new System.EventHandler(this.checkBoxAllowLogAccess_CheckedChanged);
//
// label13
//
this.label13.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.label13.AutoSize = true;
this.label13.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label13.Location = new System.Drawing.Point(595, 270);
this.label13.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label13.Name = "label13";
this.label13.Size = new System.Drawing.Size(234, 13);
this.label13.TabIndex = 101;
this.label13.Text = "Maximum allowed number of connected displays";
this.label13.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// checkBoxEnablePrivateClipboard
//
this.checkBoxEnablePrivateClipboard.AutoSize = true;
this.checkBoxEnablePrivateClipboard.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxEnablePrivateClipboard.Location = new System.Drawing.Point(328, 278);
this.checkBoxEnablePrivateClipboard.Location = new System.Drawing.Point(328, 297);
this.checkBoxEnablePrivateClipboard.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxEnablePrivateClipboard.Name = "checkBoxEnablePrivateClipboard";
this.checkBoxEnablePrivateClipboard.Size = new System.Drawing.Size(156, 17);
@ -1236,8 +1267,6 @@ namespace SebWindowsConfig
//
this.groupBox1.Controls.Add(this.label14);
this.groupBox1.Controls.Add(this.comboBoxMinMacOSVersion);
this.groupBox1.Controls.Add(this.comboBoxAllowedDisplaysMaxNumber);
this.groupBox1.Controls.Add(this.label13);
this.groupBox1.Controls.Add(this.checkBoxAllowedDisplayBuiltin);
this.groupBox1.Controls.Add(this.checkBoxAllowDisplayMirroring);
this.groupBox1.Controls.Add(this.checkBoxDetectStoppedProcess);
@ -1280,39 +1309,12 @@ namespace SebWindowsConfig
this.comboBoxMinMacOSVersion.SelectedIndexChanged += new System.EventHandler(this.comboBoxMinMacOSVersion_SelectedIndexChanged);
this.comboBoxMinMacOSVersion.TextChanged += new System.EventHandler(this.comboBoxMinMacOSVersion_TextChanged);
//
// comboBoxAllowedDisplaysMaxNumber
//
this.comboBoxAllowedDisplaysMaxNumber.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.comboBoxAllowedDisplaysMaxNumber.FormattingEnabled = true;
this.comboBoxAllowedDisplaysMaxNumber.Location = new System.Drawing.Point(527, 159);
this.comboBoxAllowedDisplaysMaxNumber.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.comboBoxAllowedDisplaysMaxNumber.Name = "comboBoxAllowedDisplaysMaxNumber";
this.comboBoxAllowedDisplaysMaxNumber.Size = new System.Drawing.Size(93, 21);
this.comboBoxAllowedDisplaysMaxNumber.TabIndex = 100;
this.toolTip1.SetToolTip(this.comboBoxAllowedDisplaysMaxNumber, "If more displays are connected, these are blanked with an orange full screen wind" +
"ow");
this.comboBoxAllowedDisplaysMaxNumber.SelectedIndexChanged += new System.EventHandler(this.comboBoxAllowedDisplaysMaxNumber_SelectedIndexChanged);
this.comboBoxAllowedDisplaysMaxNumber.TextChanged += new System.EventHandler(this.comboBoxAllowedDisplaysMaxNumber_TextChanged);
//
// label13
//
this.label13.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.label13.AutoSize = true;
this.label13.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label13.Location = new System.Drawing.Point(289, 162);
this.label13.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label13.Name = "label13";
this.label13.Size = new System.Drawing.Size(234, 13);
this.label13.TabIndex = 101;
this.label13.Text = "Maximum allowed number of connected displays";
this.label13.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// checkBoxAllowedDisplayBuiltin
//
this.checkBoxAllowedDisplayBuiltin.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.checkBoxAllowedDisplayBuiltin.AutoSize = true;
this.checkBoxAllowedDisplayBuiltin.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxAllowedDisplayBuiltin.Location = new System.Drawing.Point(514, 184);
this.checkBoxAllowedDisplayBuiltin.Location = new System.Drawing.Point(15, 181);
this.checkBoxAllowedDisplayBuiltin.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxAllowedDisplayBuiltin.Name = "checkBoxAllowedDisplayBuiltin";
this.checkBoxAllowedDisplayBuiltin.Size = new System.Drawing.Size(113, 17);
@ -1327,7 +1329,7 @@ namespace SebWindowsConfig
//
this.checkBoxAllowDisplayMirroring.AutoSize = true;
this.checkBoxAllowDisplayMirroring.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxAllowDisplayMirroring.Location = new System.Drawing.Point(15, 140);
this.checkBoxAllowDisplayMirroring.Location = new System.Drawing.Point(15, 143);
this.checkBoxAllowDisplayMirroring.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxAllowDisplayMirroring.Name = "checkBoxAllowDisplayMirroring";
this.checkBoxAllowDisplayMirroring.Size = new System.Drawing.Size(263, 17);
@ -1342,7 +1344,7 @@ namespace SebWindowsConfig
//
this.checkBoxDetectStoppedProcess.AutoSize = true;
this.checkBoxDetectStoppedProcess.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxDetectStoppedProcess.Location = new System.Drawing.Point(15, 121);
this.checkBoxDetectStoppedProcess.Location = new System.Drawing.Point(15, 124);
this.checkBoxDetectStoppedProcess.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxDetectStoppedProcess.Name = "checkBoxDetectStoppedProcess";
this.checkBoxDetectStoppedProcess.Size = new System.Drawing.Size(214, 17);
@ -1357,7 +1359,7 @@ namespace SebWindowsConfig
//
this.checkBoxAllowDictation.AutoSize = true;
this.checkBoxAllowDictation.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxAllowDictation.Location = new System.Drawing.Point(15, 102);
this.checkBoxAllowDictation.Location = new System.Drawing.Point(15, 105);
this.checkBoxAllowDictation.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxAllowDictation.Name = "checkBoxAllowDictation";
this.checkBoxAllowDictation.Size = new System.Drawing.Size(126, 17);
@ -1373,7 +1375,7 @@ namespace SebWindowsConfig
this.checkBoxAllowUserAppFolderInstall.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.checkBoxAllowUserAppFolderInstall.AutoSize = true;
this.checkBoxAllowUserAppFolderInstall.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxAllowUserAppFolderInstall.Location = new System.Drawing.Point(421, 64);
this.checkBoxAllowUserAppFolderInstall.Location = new System.Drawing.Point(15, 162);
this.checkBoxAllowUserAppFolderInstall.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxAllowUserAppFolderInstall.Name = "checkBoxAllowUserAppFolderInstall";
this.checkBoxAllowUserAppFolderInstall.Size = new System.Drawing.Size(204, 17);
@ -1388,7 +1390,7 @@ namespace SebWindowsConfig
//
this.checkBoxAllowSiri.AutoSize = true;
this.checkBoxAllowSiri.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxAllowSiri.Location = new System.Drawing.Point(15, 83);
this.checkBoxAllowSiri.Location = new System.Drawing.Point(15, 86);
this.checkBoxAllowSiri.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxAllowSiri.Name = "checkBoxAllowSiri";
this.checkBoxAllowSiri.Size = new System.Drawing.Size(100, 17);
@ -1404,7 +1406,7 @@ namespace SebWindowsConfig
//
this.checkBoxForceAppFolderInstall.AutoSize = true;
this.checkBoxForceAppFolderInstall.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxForceAppFolderInstall.Location = new System.Drawing.Point(15, 64);
this.checkBoxForceAppFolderInstall.Location = new System.Drawing.Point(15, 67);
this.checkBoxForceAppFolderInstall.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxForceAppFolderInstall.Name = "checkBoxForceAppFolderInstall";
this.checkBoxForceAppFolderInstall.Size = new System.Drawing.Size(205, 17);
@ -1418,7 +1420,7 @@ namespace SebWindowsConfig
//
this.checkBoxEnableAppSwitcherCheck.AutoSize = true;
this.checkBoxEnableAppSwitcherCheck.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxEnableAppSwitcherCheck.Location = new System.Drawing.Point(15, 43);
this.checkBoxEnableAppSwitcherCheck.Location = new System.Drawing.Point(15, 46);
this.checkBoxEnableAppSwitcherCheck.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxEnableAppSwitcherCheck.Name = "checkBoxEnableAppSwitcherCheck";
this.checkBoxEnableAppSwitcherCheck.Size = new System.Drawing.Size(220, 17);
@ -1437,7 +1439,7 @@ namespace SebWindowsConfig
this.groupBox10.Controls.Add(this.textBoxLogDirectoryWin);
this.groupBox10.Controls.Add(this.label4);
this.groupBox10.Controls.Add(this.checkBoxUseStandardDirectory);
this.groupBox10.Location = new System.Drawing.Point(583, 259);
this.groupBox10.Location = new System.Drawing.Point(23, 381);
this.groupBox10.Name = "groupBox10";
this.groupBox10.Size = new System.Drawing.Size(555, 142);
this.groupBox10.TabIndex = 95;
@ -1517,7 +1519,7 @@ namespace SebWindowsConfig
//
this.checkBoxEnableScreenCapture.AutoSize = true;
this.checkBoxEnableScreenCapture.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxEnableScreenCapture.Location = new System.Drawing.Point(328, 259);
this.checkBoxEnableScreenCapture.Location = new System.Drawing.Point(328, 278);
this.checkBoxEnableScreenCapture.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxEnableScreenCapture.Name = "checkBoxEnableScreenCapture";
this.checkBoxEnableScreenCapture.Size = new System.Drawing.Size(191, 17);
@ -1592,7 +1594,7 @@ namespace SebWindowsConfig
//
this.checkBoxAllowVirtualMachine.AutoSize = true;
this.checkBoxAllowVirtualMachine.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxAllowVirtualMachine.Location = new System.Drawing.Point(328, 297);
this.checkBoxAllowVirtualMachine.Location = new System.Drawing.Point(328, 316);
this.checkBoxAllowVirtualMachine.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxAllowVirtualMachine.Name = "checkBoxAllowVirtualMachine";
this.checkBoxAllowVirtualMachine.Size = new System.Drawing.Size(185, 17);
@ -1828,8 +1830,8 @@ namespace SebWindowsConfig
//
// Type
//
dataGridViewCellStyle1.BackColor = System.Drawing.Color.Silver;
this.Type.DefaultCellStyle = dataGridViewCellStyle1;
dataGridViewCellStyle3.BackColor = System.Drawing.Color.Silver;
this.Type.DefaultCellStyle = dataGridViewCellStyle3;
this.Type.HeaderText = "Type";
this.Type.Name = "Type";
this.Type.ReadOnly = true;
@ -4530,8 +4532,8 @@ namespace SebWindowsConfig
// spellCheckerDictionaryFilesColumn
//
this.spellCheckerDictionaryFilesColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.spellCheckerDictionaryFilesColumn.DefaultCellStyle = dataGridViewCellStyle2;
dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.spellCheckerDictionaryFilesColumn.DefaultCellStyle = dataGridViewCellStyle4;
this.spellCheckerDictionaryFilesColumn.HeaderText = "Files";
this.spellCheckerDictionaryFilesColumn.Name = "spellCheckerDictionaryFilesColumn";
this.spellCheckerDictionaryFilesColumn.ReadOnly = true;
@ -5928,6 +5930,17 @@ namespace SebWindowsConfig
this.applyAndStartSEBToolStripMenuItem.Visible = false;
this.applyAndStartSEBToolStripMenuItem.Click += new System.EventHandler(this.applyAndStartSEBToolStripMenuItem_Click);
//
// checkBoxEnforceBuiltinDisplay
//
this.checkBoxEnforceBuiltinDisplay.AutoSize = true;
this.checkBoxEnforceBuiltinDisplay.Location = new System.Drawing.Point(617, 286);
this.checkBoxEnforceBuiltinDisplay.Name = "checkBoxEnforceBuiltinDisplay";
this.checkBoxEnforceBuiltinDisplay.Size = new System.Drawing.Size(193, 17);
this.checkBoxEnforceBuiltinDisplay.TabIndex = 107;
this.checkBoxEnforceBuiltinDisplay.Text = "Allow only internal displays (laptops)";
this.checkBoxEnforceBuiltinDisplay.UseVisualStyleBackColor = true;
this.checkBoxEnforceBuiltinDisplay.CheckedChanged += new System.EventHandler(this.checkBoxEnforceBuiltinDisplay_CheckedChanged);
//
// SebWindowsConfigForm
//
this.AllowDrop = true;
@ -6485,6 +6498,7 @@ namespace SebWindowsConfig
private System.Windows.Forms.DataGridViewComboBoxColumn dataGridViewComboBoxColumn1;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2;
private System.Windows.Forms.CheckBox checkBoxEnforceBuiltinDisplay;
}
}

View file

@ -812,7 +812,7 @@ namespace SebWindowsConfig
checkBoxAllowDisplayMirroring.Checked = (Boolean)SEBSettings.settingsCurrent[SEBSettings.KeyAllowDisplayMirroring];
comboBoxAllowedDisplaysMaxNumber.Text = (String)SEBSettings.settingsCurrent[SEBSettings.KeyAllowedDisplaysMaxNumber].ToString();
checkBoxAllowedDisplayBuiltin.Checked = (Boolean)SEBSettings.settingsCurrent[SEBSettings.KeyAllowedDisplayBuiltin];
checkBoxEnforceBuiltinDisplay.Checked = (Boolean)SEBSettings.settingsCurrent[SEBSettings.KeyAllowedDisplayBuiltinEnforce];
// Group "Registry"
checkBoxInsideSebEnableSwitchUser.Checked = (Boolean)SEBSettings.settingsCurrent[SEBSettings.KeyInsideSebEnableSwitchUser];
@ -4625,5 +4625,10 @@ namespace SebWindowsConfig
{
SEBSettings.settingsCurrent[SEBSettings.KeyNewBrowserWindowUrlPolicy] = comboBoxUrlPolicyNewWindow.SelectedIndex;
}
private void checkBoxEnforceBuiltinDisplay_CheckedChanged(object sender, EventArgs e)
{
SEBSettings.settingsCurrent[SEBSettings.KeyAllowedDisplayBuiltinEnforce] = checkBoxEnforceBuiltinDisplay.Checked;
}
}
}

View file

@ -131,7 +131,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAi
1gAAAk1TRnQBSQFMAgEBDAEAAagBCwGoAQsBIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA
1gAAAk1TRnQBSQFMAgEBDAEAAcABCwHAAQsBIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA
AwABgAMAAQEBAAEgBwABAf8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A
/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A
/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A0QABjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGO
@ -159,8 +159,8 @@
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wNUAe4QAAMyAVEDTQH6A00B+gNNAfoDTQH6A00B+gNNAfoDTQH6A00B+gNNAfoDTQH6
A00B+gNNAfoDTQH6A00B+gNNAfoDTQH6A00B+gNNAfoDTQH6A00B+gNNAfoDTQH6AzYBWTQAAzIBUANc
Ad8BsQGvAa0B/wGlAaIBoQH/AZIBjwGOAf8BhgGDAYIB/wGAATgBNwH/AYABOAE3Af8BgAE4ATcB/wGA
ATgBNwH/AYABOAE3Af8BigGHAYYB/wGWAZMBkgH/AaUBogGgAf8BpgGjAaEB/wNUAa8DFwEgGAABjgGL
Ad8BsQGvAa0B/wGlAaIBoQH/AZIBjwGOAf8BhgGDAYIB/wGAATUBNAH/AYABNQE0Af8BgAE1ATQB/wGA
ATUBNAH/AYABNQE0Af8BigGHAYYB/wGWAZMBkgH/AaUBogGgAf8BpgGjAaEB/wNUAa8DFwEgGAABjgGL
AQAB/wGOAYsBAAH/AbsBuQEAAf8C/gH9Af8C/gH9Af8C/gH9Af8C9AHmAf8BwgHAAQAB/wL+Af0B/wL+
Af0B/wL+Af0B/wLwAd0B/wHGAcQBAAH/Av4B/QH/Av4B/QH/Av4B/QH/AekB6AHOAf8BqwGoAQAB/wGP
AYwBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEA
@ -168,16 +168,16 @@
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/xAA
AzQBVFj/AzgBXCwAAwwBEANRAZ8BtQGyAbAB/wGpAaYBpAH/AZIBjwGNAf8BhAGBAYAB/wGRAY4BjAH/
AZkBlgGUAf8BjwGMAYoB/wGEAYEBgAH/AYABOAE3Af8BgAE4ATcB/wGAATgBNwH/AYABOAE3Af8BgAE4
ATcB/wGAATgBNwH/AZEBjgGNAf8BpAGhAZ8B/wNiAe8DMgFQFAABjgGLAQAB/wGOAYsBAAH/AbsBuQEA
AZkBlgGUAf8BjwGMAYoB/wGEAYEBgAH/AYABNQE0Af8BgAE1ATQB/wGAATUBNAH/AYABNQE0Af8BgAE1
ATQB/wGAATUBNAH/AZEBjgGNAf8BpAGhAZ8B/wNiAe8DMgFQFAABjgGLAQAB/wGOAYsBAAH/AbsBuQEA
Af8MAAL1AegB/wHCAcABAAH/DAAC8QHfAf8BxgHEAQAB/wwAAeoB6QHPAf8B0gHRAZoB/wG+AbwBAAH/
AY8BjAEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGL
AQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8DAAH/AwAB/wMAAf8DmgH/
A6IB/wOiAf8DogH/A6IB/wOiAf8DogH/A6IB/wOiAf8DogH/A6IB/wOiAf8DogH/A6IB/wOiAf8DogH/
A6IB/wOiAf8DogH/A6IB/wOiAf8DogH/A6IB/wOiAf8DogH/A5oB/wMAAf8DAAH/AwAB/xAAAzMBU1j/
AzcBWygAAwwBEANcAc8BtwG0AbIB/wGfAZwBmwH/AYsBiAGHAf8BiQGGAYQB/wGYAZUBkwH/AakBpgGk
Af8BpwGkAaIB/wGkAaEBnwH/AaIBnwGdAf8BlgGTAZEB/wGFAYIBgQH/AYABOAE3Af8BgAE4ATcB/wGA
ATgBNwH/AYABOAE3Af8BgAE4ATcB/wGCAToBOQH/AZ0BmgGYAf8BpQGiAaAB/wM6AWAQAAGOAYsBAAH/
Af8BpwGkAaIB/wGkAaEBnwH/AaIBnwGdAf8BlgGTAZEB/wGFAYIBgQH/AYABNQE0Af8BgAE1ATQB/wGA
ATUBNAH/AYABNQE0Af8BgAE1ATQB/wGCATcBNgH/AZ0BmgGYAf8BpQGiAaAB/wM6AWAQAAGOAYsBAAH/
AY4BiwEAAf8BuwG5AQAB/wwAAvUB6AH/AcIBwAEAAf8MAALxAd8B/wHGAcQBAAH/DAAB6gHpAc8B/wHS
AdEBmgH/Ad0B3AGyAf8BxQHDAQAB/wGPAYwBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEA
Af8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wMA
@ -185,7 +185,7 @@
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DkwH/A6IB/wMA
Af8DAAH/EAADMwFTWP8DNwFbKAADXAHPAbcBtAGyAf8BmwGYAZYB/wGQAY0BiwH/AY0BigGJAf8BiwGI
AYcB/wGoAaUBowH/AaoBpwGlAf8BpwGkAaIB/wGmAaMBoQH/AaMBoAGeAf8BogGfAZ0B/wGdAZoBmAH/
AY0BigGJAf8BgQE5ATgB/wGAATgBNwH/AYABOAE3Af8BgAE4ATcB/wGAATgBNwH/AYABOAE3Af8BmAGV
AY0BigGJAf8BgQE2ATUB/wGAATUBNAH/AYABNQE0Af8BgAE1ATQB/wGAATUBNAH/AYABNQE0Af8BmAGV
AZMB/wGlAaIBoAH/AzoBYAwAAY4BiwEAAf8BjgGLAQAB/wG7AbkBAAH/DAAC9QHoAf8BwgHAAQAB/wwA
AvEB3wH/AcYBxAEAAf8MAAHqAekBzwH/AdIB0QGaAf8B3QHcAbIB/wHdAdwBsgH/Ac8BzgGSAf8BjgGL
AQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/
@ -194,7 +194,7 @@
AwAB/wMAAf8DAAH/AwAB/wMAAf8DkwH/A5oB/wMAAf8QAAMzAVNY/wM3AVskAANMAY8BuwG4AbcB/wGh
AZ4BnAH/AZQBkQGPAf8BkgGPAY0B/wGQAY0BiwH/AY0BigGJAf8BqgGnAaUB/wGqAacBpQH/AagBpQGj
Af8BpwGkAaIB/wGkAaEBnwH/AaMBoAGeAf8BoQGeAZwB/wGhAZ4BnAH/AZ4BmwGZAf8BkQGOAYwB/wGC
AToBOQH/AYABOAE3Af8BgAE4ATcB/wGAATgBNwH/AYABOAE3Af8BmAGVAZMB/wGlAaIBoAH/AyEBMAgA
ATcBNgH/AYABNQE0Af8BgAE1ATQB/wGAATUBNAH/AYABNQE0Af8BmAGVAZMB/wGlAaIBoAH/AyEBMAgA
AY4BiwEAAf8BjgGLAQAB/wGfAZwBAAH/AbgBtgEAAf8BuAG2AQAB/wG4AbYBAAH/AbQBsgEAAf8BoQGf
AQAB/wG4AbYBAAH/AbgBtgEAAf8BuAG2AQAB/wGyAbABAAH/AacBpAEAAf8BvgG9AQAB/wG+Ab0BAAH/
Ab4BvQEAAf8BuAG2AQAB/wHQAc8BlQH/Ad0B3AGyAf8B3QHcAbIB/wLqAdAB/wGOAYsBAAH/AY4BiwEA
@ -204,7 +204,7 @@
Af8DAAH/AwAB/wMAAf8DogH/AwAB/xAAAzMBU1j/AzcBWyAAAyoBQAG8AboBuAH/AasBqAGnAf8BmAGV
AZMB/wGWAZMBkQH/AZQBkQGPAf8BkgGPAY0B/wGQAY0BiwH/AasBqAGmAf8BqwGoAaYB/wGpAaYBpAH/
AacBpAGiAf8BpQGiAaAB/wGjAaABngH/AaEBngGcAf8BoQGeAZwB/wGhAZ4BnAH/AaEBngGcAf8BmwGY
AZYB/wGBATkBOAH/AYABOAE3Af8BgAE4ATcB/wGAATgBNwH/AYIBOgE5Af8BoQGeAZ0B/wNcAc8IAAGO
AZYB/wGBATYBNQH/AYABNQE0Af8BgAE1ATQB/wGAATUBNAH/AYIBNwE2Af8BoQGeAZ0B/wNcAc8IAAGO
AYsBAAH/AY4BiwEAAf8BuwG5AQAB/wwAAvUB6AH/AcIBwAEAAf8MAALxAd8B/wGzAbEBAAH/AuYBxwH/
Ae0B7AHWAf8B7QHsAdYB/wHtAewB1gH/AcQBwgEAAf8BzAHLAYwB/wHdAdwBsgH/AuoB0AH/AY4BiwEA
Af8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGO
@ -213,16 +213,16 @@
AwAB/wMAAf8DogH/AwAB/xAAAzMBU1j/AzcBWyAAA1kBvwG6AbcBtQH/AZ0BmgGYAf8BmwGYAZYB/wGY
AZUBkwH/AZYBkwGRAf8BlAGRAY8B/wGSAY8BjQH/AagBpQGjAf8BnQGaAZkB/wGqAacBpQH/AagBpQGj
Af8BpgGjAaEB/wGkAaEBnwH/AaIBnwGdAf8BoQGeAZwB/wGhAZ4BnAH/AaEBngGcAf8BoQGeAZwB/wGF
AYIBgAH/AYABOAE3Af8BgAE4ATcB/wGAATgBNwH/AYABOAE3Af8BigGHAYYB/wGmAaMBoQH/AzoBYAQA
AYIBgAH/AYABNQE0Af8BgAE1ATQB/wGAATUBNAH/AYABNQE0Af8BigGHAYYB/wGmAaMBoQH/AzoBYAQA
AY4BiwEAAf8BjgGLAQAB/wG7AbkBAAH/DAAC9QHoAf8BwgHAAQAB/wwAAvEB3wH/AcwBywGNAf8B0wHS
AZwB/wHuAe0B2AH/Ae4B7QHYAf8B7gHtAdgB/wHuAe0B2AH/AacBpAEAAf8ByQHIAYUB/wLqAdAB/wGO
AYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEA
Af8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8DAAH/A6IB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DyAH/CAAD4wH/A6AB/wOtAf8IAAPIAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DogH/AwAB/xAAAzMBU1j/AzcBWxwAAyoBQAHAAb0BvAH/AawBqQGoAf8BnwGc
AZoB/wGdAZoBmAH/AZsBmAGWAf8BmAGVAZMB/wExAS8BLQH/AwAB/wMAAf8DAAH/ATQBMQEwAf8BqQGm
AZoB/wGdAZoBmAH/AZsBmAGWAf8BmAGVAZMB/wEuASwBKgH/AwAB/wMAAf8DAAH/ATEBLgEtAf8BqQGm
AaQB/wGnAaQBogH/AaUBogGgAf8BowGgAZ4B/wGhAZ4BnAH/AaEBngGcAf8BoQGeAZwB/wGhAZ4BnAH/
AYUBggGBAf8BgAE4ATcB/wGAATgBNwH/AYABOAE3Af8BgAE4ATcB/wGAATgBNwH/AZ0BmgGZAf8DXAHf
AYUBggGBAf8BgAE1ATQB/wGAATUBNAH/AYABNQE0Af8BgAE1ATQB/wGAATUBNAH/AZ0BmgGZAf8DXAHf
BAABjgGLAQAB/wGOAYsBAAH/AbsBuQEAAf8MAAL1AegB/wHCAcABAAH/DAAC8QHfAf8BzAHLAY0B/wHb
AdoBrgH/EAABugG4AQAB/wHMAcsBjAH/AdYB1QGkAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGL
AQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/
@ -230,9 +230,9 @@
Af8DAAH/AwAB/wgAA5EB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/A6IB/wMAAf8QAAMz
AVMI/wP+Af8D/gH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D/gH/
A/4B/wP+Af8D/gH/A/4B/wP+Bf8DNwFbHAADUQGfAb0BuwG5Af8BpAGhAZ8B/wGiAZ8BnQH/AZ8BnAGa
Af8BnQGaAZgB/wGbAZgBlgH/AwAB/wMAAf8DAAH/AwAB/wEUAR0BIgH/AaoBpwGlAf8BqAGlAaMB/wGm
AaMBoQH/AaQBoQGfAf8BogGfAZ0B/wGhAZ4BnAH/AaEBngGcAf8BngGbAZkB/wGAATgBNwH/AYABOAE3
Af8BgAE4ATcB/wGAATgBNwH/AYABOAE3Af8BgAE4ATcB/wGMAYkBiAH/AacBpAGiAf8DIQEwAY4BiwEA
Af8BnQGaAZgB/wGbAZgBlgH/AwAB/wMAAf8DAAH/AwAB/wERARoBHwH/AaoBpwGlAf8BqAGlAaMB/wGm
AaMBoQH/AaQBoQGfAf8BogGfAZ0B/wGhAZ4BnAH/AaEBngGcAf8BngGbAZkB/wGAATUBNAH/AYABNQE0
Af8BgAE1ATQB/wGAATUBNAH/AYABNQE0Af8BgAE1ATQB/wGMAYkBiAH/AacBpAGiAf8DIQEwAY4BiwEA
Af8BjgGLAQAB/wG7AbkBAAH/DAAC9QHoAf8BwgHAAQAB/wwAAvEB3wH/AcwBywGNAf8B2wHaAa4B/xAA
AboBuAEAAf8C3QGzAf8B1AHTAZ4B/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEA
Af8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8DAAH/A6IB/wMA
@ -240,9 +240,9 @@
Af8DugH/BAADwAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DogH/AwAB/xAAAzMBUwT/
A/4B/wP9Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wP9Af8D/QH/
A/0B/wP9Af8D/QH/A/0B/wP9Bf8DNwFbHAADXAHfAbYBtAGyAf8BpgGjAaEB/wGkAaEBnwH/AaIBnwGd
Af8BnwGcAZoB/wGdAZoBmAH/ARUBEwESAf8DAAH/AQABjwG4Af8BAAGPAb0B/wEdAY0BpAH/AasBqAGm
Af8BnwGcAZoB/wGdAZoBmAH/ARIBEAEPAf8DAAH/AQABjwG4Af8BAAGPAb0B/wEaAY0BpAH/AasBqAGm
Af8BqQGmAaQB/wGnAaQBogH/AaUBogGgAf8BowGgAZ4B/wGhAZ4BnAH/AaEBngGcAf8BjwGMAYoB/wGE
AYEBgAH/AYQBgQGAAf8BgAE4ATcB/wGAATgBNwH/AYABOAE3Af8BgAE4ATcB/wGAATgBNwH/AagBpQGj
AYEBgAH/AYQBgQGAAf8BgAE1ATQB/wGAATUBNAH/AYABNQE0Af8BgAE1ATQB/wGAATUBNAH/AagBpQGj
Af8DRwGAAY4BiwEAAf8BjgGLAQAB/wGfAZwBAAH/AbgBtgEAAf8BuAG2AQAB/wG4AbYBAAH/AbQBsgEA
Af8BpAGhAQAB/wHLAcoBiwH/AcsBygGLAf8BywHKAYsB/wHIAccBgwH/Ab8BvgEAAf8B2wHaAa0B/xAA
AboBuAEAAf8C3QGzAf8C6gHQAf8BjgGLAQAB/wGRAY4BAAH/AcwBywGMAf8BlwGUAQAB/wGOAYsBAAH/
@ -251,10 +251,10 @@
Af8DnAH/BAADzgH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DogH/AwAB/xAAAzMBUwP+
Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wP9
Af8D/QH/A/0B/wP9Af8D/QH/A/0F/wM3AVsYAAMMARABxAHBAcAB/wGyAa8BrQH/AakBpgGkAf8BpgGj
AaEB/wGkAaEBnwH/AaIBnwGdAf8BnwGcAZoB/wGDAYABOQH/AwAB/wEEAaQBygH/AQABkAG9Af8BHQGN
AaEB/wGkAaEBnwH/AaIBnwGdAf8BnwGcAZoB/wGDAYABNgH/AwAB/wEBAaQBygH/AQABkAG9Af8BGgGN
AaQB/wGsAakBpwH/AaoBpwGlAf8BqAGlAaMB/wGmAaMBoQH/AaQBoQGfAf8BngGbAZkB/wGRAY4BjQH/
AZQBkQGPAf8BoQGeAZwB/wGgAZ0BmwH/AY8BjAGKAf8BgAE4ATcB/wGAATgBNwH/AYABOAE3Af8BgAE4
ATcB/wGfAZwBmgH/A1QBrwGOAYsBAAH/AY4BiwEAAf8BuwG5AQAB/wwAAvUB6AH/AbkBtgEAAf8B1AHT
AZQBkQGPAf8BoQGeAZwB/wGgAZ0BmwH/AY8BjAGKAf8BgAE1ATQB/wGAATUBNAH/AYABNQE0Af8BgAE1
ATQB/wGfAZwBmgH/A1QBrwGOAYsBAAH/AY4BiwEAAf8BuwG5AQAB/wwAAvUB6AH/AbkBtgEAAf8B1AHT
AZ4B/wHZAdgBqAH/AdkB2AGoAf8B2QHYAagB/wHFAcQBAAH/AaQBoQEAAf8BxQHDAQAB/wHFAcMBAAH/
AcUBwwEAAf8BxQHDAQAB/wG4AbYBAAH/At0BswH/AuoB0AH/AZEBjgEAAf8C3AGxAf8EAAHrAeoB0QH/
AZcBlAEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8DAAH/
@ -262,10 +262,10 @@
AwAB/wMAAf8DAAH/A9wB/wQAA7MB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/A6IB/wMA
Af8QAAMzAVMD/QH/A/0B/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/
A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Bf8DNwFbGAADKgFAAcQBwgHBAf8BvgG7AboB/wG2
AbMBsQH/AasBqAGmAf8BpgGjAaEB/wGkAaEBnwH/AaIBnwGdAf8BnwGcAZoB/wEKAQgBBwH/AQABgwGZ
Af8BAAGmAcoB/wEeAZIBpwH/Aa0BqgGoAf8BqwGoAaYB/wGlAaIBoAH/AZgBlQGTAf8BjwGMAYsB/wGJ
AYYBhAH/AZEBjgGNAf8BoQGeAZwB/wGhAZ4BnAH/AaEBngGcAf8BnwGcAZoB/wGBATkBOAH/AYABOAE3
Af8BgAE4ATcB/wGAATgBNwH/AZUBkgGQAf8DWQG/AY4BiwEAAf8BjgGLAQAB/wG7AbkBAAH/DAAC9QHo
AbMBsQH/AasBqAGmAf8BpgGjAaEB/wGkAaEBnwH/AaIBnwGdAf8BnwGcAZoB/wEHAQUBBAH/AQABgwGZ
Af8BAAGmAcoB/wEbAZIBpwH/Aa0BqgGoAf8BqwGoAaYB/wGlAaIBoAH/AZgBlQGTAf8BjwGMAYsB/wGJ
AYYBhAH/AZEBjgGNAf8BoQGeAZwB/wGhAZ4BnAH/AaEBngGcAf8BnwGcAZoB/wGBATYBNQH/AYABNQE0
Af8BgAE1ATQB/wGAATUBNAH/AZUBkgGQAf8DWQG/AY4BiwEAAf8BjgGLAQAB/wG7AbkBAAH/DAAC9QHo
Af8ByAHGAYMB/wHWAdUBowH/AvIB4gH/AvIB4QH/AvIB4QH/AvIB4QH/Aa4BrAEAAf8B2wHaAa0B/wL4
Ae8B/wL4Ae8B/wL4Ae8B/wHWAdUBowH/AcUBxAEAAf8B4AHfAbkB/wHcAdsBsQH/DAAB6wHqAdEB/wGX
AZQBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wMAAf8DoQH/AwAB/wMA
@ -273,10 +273,10 @@
Af8LAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DoQH/AwAB/xAAAzMBUwP8Af8D+wH/
A/oB/wP6Af8D+gH/A/oB/wP6Af8D+gH/A/oB/wP6Af8D+gH/A/oB/wP6Af8D+gH/A/oB/wP6Af8D+gH/
A/oB/wP6Af8D+gH/A/oB/wP+Af8DNwFbGAADKgFAAcUBwwHCAf8BxAHBAcAB/wHCAcABvgH/Ab4BuwG6
Af8BqgGnAaUB/wGmAaMBoQH/AaQBoQGfAf8BpAGhAZ8B/wGfAZwBmwH/AQABGAEjAf8BAwG9AdoB/wEg
Af8BqgGnAaUB/wGmAaMBoQH/AaQBoQGfAf8BpAGhAZ8B/wGfAZwBmwH/AQABFQEgAf8BAAG9AdoB/wEd
AZ4BrwH/Aa4BqwGpAf8BogGfAZ0B/wGSAY8BjQH/AZQBkQGPAf8BlAGRAZAB/wGLAYgBhwH/AZ4BmwGZ
Af8BoQGeAZwB/wGhAZ4BnAH/AaEBngGcAf8BoQGeAZwB/wGGAYMBggH/AYABOAE3Af8BgAE4ATcB/wGA
ATgBNwH/AZUBkgGRAf8DYgHvAY4BiwEAAf8BjgGLAQAB/wG7AbkBAAH/DAAC9QHoAf8ByAHGAYMB/wHZ
Af8BoQGeAZwB/wGhAZ4BnAH/AaEBngGcAf8BoQGeAZwB/wGGAYMBggH/AYABNQE0Af8BgAE1ATQB/wGA
ATUBNAH/AZUBkgGRAf8DYgHvAY4BiwEAAf8BjgGLAQAB/wG7AbkBAAH/DAAC9QHoAf8ByAHGAYMB/wHZ
AdgBqQH/EAABvgG8AQAB/wHTAdIBnAH/AcwBygGLAf8B2wHaAa4B/wHbAdoBrgH/AdsB2gGuAf8BvwG+
AQAB/wG7AboBAAH/Av4B/AH/EAABugG4AQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/
AY4BiwEAAf8DAAH/A50B/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
@ -284,19 +284,19 @@
Af8DnQH/AwAB/xAAAzMBUwP6Af8D+QH/A/kB/wP5Af8D+QH/A/kB/wP5Af8D+QH/A/kB/wP5Af8D+QH/
A/kB/wP5Af8D+QH/A/kB/wP5Af8D+QH/A/kB/wP5Af8D+QH/A/kB/wP9Af8DNwFbGAADKgFAAccBxQHD
Af8BxQHDAcIB/wHDAcABvwH/Ab0CuwH/Aa8BrgGwAf8BrAGqAagB/wGmAaMBoQH/AagBpQGjAf8BtwG0
AbIB/wEUARwBHQH/AQABxAHfAf8BCQGpAb4B/wGOAaEBpgH/AZYBkwGRAf8BlAGRAY8B/wGZAZYBlAH/
AbIB/wERARkBGgH/AQABxAHfAf8BBgGpAb4B/wGOAaEBpgH/AZYBkwGRAf8BlAGRAY8B/wGZAZYBlAH/
AacBpAGiAf8BmwGYAZYB/wGjAaABngH/AaEBngGcAf8BoQGeAZwB/wGhAZ4BnAH/AaEBngGcAf8BhgGD
AYIB/wGAATgBNwH/AYABOAE3Af8BgAE4ATcB/wGWAZMBkQH/AasBqAGmAf8BjgGLAQAB/wGOAYsBAAH/
AYIB/wGAATUBNAH/AYABNQE0Af8BgAE1ATQB/wGWAZMBkQH/AasBqAGmAf8BjgGLAQAB/wGOAYsBAAH/
AbsBuQEAAf8MAAL1AegB/wHIAcYBgwH/AdkB2AGoAf8QAAG+AbwBAAH/AdYB1QGiAf8B6AHnAcoB/wwA
AdsB2gGuAf8B1wHWAaUB/wG2AbQBAAH/Av4B/AH/CAABwwHBAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGL
AQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wMAAf8DmAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wOwAf8D6wH/CAADngH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wOYAf8DAAH/EAADMwFTA/kB/wP5Af8D+AH/A/gB/wP4Af8D+AH/
A/gB/wP4Af8D+AH/A/gB/wP4Af8D+AH/A/gB/wP4Af8D+AH/A/gB/wP4Af8D+AH/A/gB/wP4Af8D+AH/
A/wB/wM3AVsYAAMqAUABqAHAAcUB/wE6AbIBwAH/AQgBogG8Af8BAAGaAbwB/wEAAZcBugH/ASsBqQG5
Af8BrgGrAakB/wGrAagBpgH/AbgBtQGzAf8BOgE3ATYB/wEAAY8BoQH/AQABvwHbAf8BAAGiAcEB/wEu
A/wB/wM3AVsYAAMqAUABqAHAAcUB/wE3AbIBwAH/AQUBogG8Af8BAAGaAbwB/wEAAZcBugH/ASgBqQG5
Af8BrgGrAakB/wGrAagBpgH/AbgBtQGzAf8BNwE0ATMB/wEAAY8BoQH/AQABvwHbAf8BAAGiAcEB/wEr
AZEBnQH/AaABnQGbAf8BnwGcAZoB/wGmAaMBoQH/AaYBowGhAf8BpAGhAZ8B/wGiAZ8BnQH/AaEBngGc
Af8BoQGeAZwB/wGhAZ4BnAH/AYgBhQGEAf8BgAE4ATcB/wGAATgBNwH/AYABOAE3Af8BlgGTAZIB/wNZ
Af8BoQGeAZwB/wGhAZ4BnAH/AYgBhQGEAf8BgAE1ATQB/wGAATUBNAH/AYABNQE0Af8BlgGTAZIB/wNZ
Ab8BjgGLAQAB/wGOAYsBAAH/AZcBlAEAAf8BugG4AQAB/wG9AbwBAAH/Ab0BvAEAAf8BuwG6AQAB/wHG
AcQBAAH/AdkB2AGoAf8QAAG+AbwBAAH/AdYB1QGiAf8C5wHKAf8MAAHbAdoBrgH/AuoB0AH/AY4BiwEA
Af8BtgG0AQAB/wH+Af0B/AH/AcMBwgEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGO
@ -304,10 +304,10 @@
Af8DAAH/AwAB/wMAAf8DAAH/A7AB/wgAA9UB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wOUAf8DAAH/EAADMwFTA/gB/wP3Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2
Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/oB/wM3
AVsQAAMyAVADVAGvAVgCYgHvAQABmgG8Af8BAAGmAcYB/wEAAbgB1AH/AREBxgHfAf8BEAHCAdwB/wEA
AZoBuAH/AboBuAG3Af8BuQG2AbUB/wG1AbMBsgH/ASoBhAGKAf8BAAGEAZwB/wEAAbsB1wH/AQABrgHP
Af8BAAGVAb4B/wE6AZQBngH/AaoBpwGlAf8BqQGmAaQB/wGnAaQBogH/AaUBogGgAf8BowGgAZ4B/wGh
AZ4BnAH/AaEBngGcAf8BoAGdAZsB/wGGAYMBggH/AYIBOgE5Af8BgAE4ATcB/wGAATgBNwH/AaIBnwGe
AVsQAAMyAVADVAGvAVgCYgHvAQABmgG8Af8BAAGmAcYB/wEAAbgB1AH/AQ4BxgHfAf8BDQHCAdwB/wEA
AZoBuAH/AboBuAG3Af8BuQG2AbUB/wG1AbMBsgH/AScBhAGKAf8BAAGEAZwB/wEAAbsB1wH/AQABrgHP
Af8BAAGVAb4B/wE3AZQBngH/AaoBpwGlAf8BqQGmAaQB/wGnAaQBogH/AaUBogGgAf8BowGgAZ4B/wGh
AZ4BnAH/AaEBngGcAf8BoAGdAZsB/wGGAYMBggH/AYIBNwE2Af8BgAE1ATQB/wGAATUBNAH/AaIBnwGe
Af8DWQG/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/Aa4BrAEAAf8B3gHdAbQB/wHeAd0BtAH/Ad4B3QG0
Af8BzwHOAZMB/wGpAacBAAH/Ab4BvAEAAf8BvgG8AQAB/wG+AbwBAAH/Ab4BvAEAAf8BtgG0AQAB/wHW
AdUBogH/AucBygH/DAAB2wHaAa4B/wLqAdAB/wGOAYsBAAH/AY4BiwEAAf8BoQGeAQAB/wGOAYsBAAH/
@ -316,10 +316,10 @@
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/A48B/wMAAf8QAAMz
AVMD9gH/A/UB/wP1Af8D9QH/A/UB/wP1Af8D9QH/A/UB/wP1Af8D9QH/A/UB/wP1Af8D9QH/A/UB/wP1
Af8D9QH/A/UB/wP1Af8D9QH/A/UB/wP1Af8D+QH/AzcBWxEAAZABvwH/AQABjAG3Af8BAAGyAdIB/wEA
AccB4QH/AREByQHhAf8BgQHHAdcB/wGaAcQBzAH/ASQBygHhAf8BAAGhAcIB/wElAZ0BsQH/AR4BmwGy
Af8BAAGWAbYB/wEAAaABwgH/AQABrgHMAf8BAAG4AdYB/wEAAbMB0wH/AQABmgHBAf8BCwGIAaUB/wGr
AccB4QH/AQ4ByQHhAf8BgQHHAdcB/wGaAcQBzAH/ASEBygHhAf8BAAGhAcIB/wEiAZ0BsQH/ARsBmwGy
Af8BAAGWAbYB/wEAAaABwgH/AQABrgHMAf8BAAG4AdYB/wEAAbMB0wH/AQABmgHBAf8BCAGIAaUB/wGr
AagBpgH/AaoBpwGlAf8BpwGkAaIB/wGmAaMBoQH/AaMBoAGeAf8BogGfAZ0B/wGhAZ4BnAH/AZ4BmwGZ
Af8BhwGEAYIB/wGEAYEBgAH/AYIBOgE5Af8BgAE4ATcB/wGsAakBpwH/A0cBgAGOAYsBAAH/AY4BiwEA
Af8BhwGEAYIB/wGEAYEBgAH/AYIBNwE2Af8BgAE1ATQB/wGsAakBpwH/A0cBgAGOAYsBAAH/AY4BiwEA
Af8BjgGLAQAB/wGOAYsBAAH/Aa0BqwEAAf8C9gHsAf8C+QHxAf8C+QHxAf8B6wHqAdEB/wHVAdQBoQH/
AvkB8QH/AvkB8QH/AvkB8QH/AecB5gHJAf8BtgG0AQAB/wHKAckBhgH/AdoB2QGrAf8B2gHZAasB/wHa
AdkBqwH/AcQBwwEAAf8B6gHpAc8B/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEA
@ -328,8 +328,8 @@
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DigH/AwAB/xAAAzMBUwP1Af8D9QH/A/QB/wP0
Af8D9AH/A/QB/wP0Af8D9AH/A/QB/wP0Af8D9AH/A/QB/wP0Af8D9AH/A/QB/wP0Af8D9AH/A/QB/wP0
Af8D9AH/A/QB/wP3Af8DNwFbEAABWAJiAe8BAAGeAcUB/wFXAlwB3wNZAb8ByQHHAcYB/wHHAcUBwwH/
AcQBwgHBAf8BgQHGAdYB/wEJAbwB1gH/AQABogHDAf8BAAGuAc0B/wEAAbgB1QH/AQABugHXAf8BAAG6
AdcB/wEAAboB1wH/AQABtQHVAf8BAAGhAccB/wEBAYsBrQH/AasBqAGmAf8BoQGeAZwB/wGpAaYBpAH/
AcQBwgHBAf8BgQHGAdYB/wEGAbwB1gH/AQABogHDAf8BAAGuAc0B/wEAAbgB1QH/AQABugHXAf8BAAG6
AdcB/wEAAboB1wH/AQABtQHVAf8BAAGhAccB/wEAAYsBrQH/AasBqAGmAf8BoQGeAZwB/wGpAaYBpAH/
AaMBoAGeAf8BnAGZAZcB/wGbAZgBlgH/AZwBmQGXAf8BjwGMAYsB/wGJAYYBhAH/AYcBhAGCAf8BhAGB
AYAB/wGRAY4BjQH/AbABrQGrAf8DIQEwAY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGL
AQAB/wGcAZoBAAH/Ad8B3gG2Af8B4wHiAb8B/wHjAeIBvwH/Ad8B3gG2Af8BvwG9AQAB/wHjAeIBvwH/
@ -339,9 +339,9 @@
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/A9UB/xwAA/MB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DhQH/AwAB/xAAAzMBUwP0Af8D8wH/A/IB/wPyAf8D8gH/A/IB/wPyAf8D8gH/
A/IB/wPyAf8D8gH/A/IB/wPyAf8D8gH/A/IB/wPxAf8D8QH/A/EB/wPxAf8D8QH/A/EB/wPzAf8DNwFb
EAADUQGgAQQBqQHOAf8BWgJdAdMDMgFQAcsByQHIAf8ByAHGAcQB/wHFAcMBwgH/AZgBwgHLAf8BIQHI
AeAB/wEAAbsB2QH/AQABuwHYAf8BAAG7AdgB/wEAAbwB2QH/AQABwAHbAf8BAgHFAd8B/wEGAcEB3QH/
AQABlQG2Af8BAgEvAYsB/wGeAZsBmQH/AZsBmAGWAf8BoAGdAZsB/wGWAZMBkQH/AZQBkQGPAf8BkgGP
EAADUQGgAQEBqQHOAf8BWgJdAdMDMgFQAcsByQHIAf8ByAHGAcQB/wHFAcMBwgH/AZgBwgHLAf8BHgHI
AeAB/wEAAbsB2QH/AQABuwHYAf8BAAG7AdgB/wEAAbwB2QH/AQABwAHbAf8BAAHFAd8B/wEDAcEB3QH/
AQABlQG2Af8BAAEsAYsB/wGeAZsBmQH/AZsBmAGWAf8BoAGdAZsB/wGWAZMBkQH/AZQBkQGPAf8BkgGP
AY0B/wGQAY0BiwH/AY0BigGJAf8BiwGIAYcB/wGJAYYBhAH/AYcBhAGCAf8BoQGeAZwB/wNcAd8EAAGO
AYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGdAZoBAAH/AaUBowEA
Af8BpQGjAQAB/wGlAaMBAAH/AZwBmQEAAf8BowGhAQAB/wGlAaMBAAH/AaUBowEAAf8BpQGjAQAB/wGb
@ -350,9 +350,9 @@
AY4BiwEAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/A5gB/yQAA74B/wMA
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/EAADMwFTA/IB/wPxAf8D8QH/
A/EB/wPxAf8D8QH/A/EB/wPxAf8D8QH/A/EB/wPxAf8D8QH/A/EB/wPxAf8D8AH/A+0B/wPqAf8D6AH/
A+gB/wPnAf8D5gH/A+cB/wM4AVwQAAM6AWABHQG0AdcB/wEAAZYBugH/AxwBJwNcAd8BygHIAccB/wHG
AcQBwwH/AbsBwgHDAf8BIAHKAeEB/wEAAb4B2gH/AQABwQHdAf8BDwHHAeAB/wERAcgB4QH/ARoBwgHX
Af8BFAGbAagB/wMAAf8DAAH/AYQBggGAAf8BpQGiAaAB/wGqAacBpQH/AaoBpwGlAf8BoAGdAZsB/wGW
A+gB/wPnAf8D5gH/A+cB/wM4AVwQAAM6AWABGgG0AdcB/wEAAZYBugH/AxwBJwNcAd8BygHIAccB/wHG
AcQBwwH/AbsBwgHDAf8BHQHKAeEB/wEAAb4B2gH/AQABwQHdAf8BDAHHAeAB/wEOAcgB4QH/ARcBwgHX
Af8BEQGbAagB/wMAAf8DAAH/AYQBggGAAf8BpQGiAaAB/wGqAacBpQH/AaoBpwGlAf8BoAGdAZsB/wGW
AZMBkQH/AZQBkQGPAf8BkgGPAY0B/wGQAY0BiwH/AY0BigGJAf8BiwGIAYcB/wGRAY4BjAH/AbMBsAGu
Af8DRwGABAABjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGL
AQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/
@ -361,8 +361,8 @@
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/A9oB/ysAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/EAADMwFTA/EB/wPxAf8D8AH/A/AB/wPwAf8D8AH/
A/AB/wPwAf8D8AH/A/AB/wPwAf8D8AH/A/AB/wPvAf8D7AH/A+QB/wPYAf8D0AH/A88B/wPQAf8DzAH/
A8gB/wM1AVcQAAMMARABJwG3AdoB/wEAAaEBxQH/A0MBdwMyAVABywHJAcgB/wHJAccBxQH/AcUBwwHC
Af8BNQHGAdcB/wEAAb8B2wH/AQoBsgHMAf8BjgG+AccB/wGpAbkBvAH/AbkBtwG1Af8BtwG0AbIB/wGk
A8gB/wM1AVcQAAMMARABJAG3AdoB/wEAAaEBxQH/A0MBdwMyAVABywHJAcgB/wHJAccBxQH/AcUBwwHC
Af8BMgHGAdcB/wEAAb8B2wH/AQcBsgHMAf8BjgG+AccB/wGpAbkBvAH/AbkBtwG1Af8BtwG0AbIB/wGk
AaIBoAH/AasBqAGmAf8BsQGvAa0B/wGvAawBqgH/Aa0BqgGoAf8BqwGoAaYB/wGiAZ8BnQH/AZgBlQGT
Af8BlgGTAZEB/wGUAZEBjwH/AZIBjwGNAf8BkAGNAYsB/wGNAYoBiQH/Aa0BqgGoAf8DXAHfAwwBEAQA
AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGL
@ -371,8 +371,8 @@
AfkB/wGdAZsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/LwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8QAAMzAVMD8AH/A+8B/wPuAf8D7gH/A+4B/wPuAf8D7gH/A+4B/wPuAf8D7gH/A+4B/wPu
Af8D7gH/A+0B/wPoAf8D1gH/A7gB/wOnAf8DogH/A54B/wOeAf8DYQHmAxQBGxQAA1QBrwEXAbAB0wH/
AVoCXQHTBAADVAGvAcsByQHIAf8BxwHFAcQB/wGTAcMBzAH/AQMBwwHeAf8BAAGaAboB/wG9AbsBugH/
Af8D7gH/A+0B/wPoAf8D1gH/A7gB/wOnAf8DogH/A54B/wOeAf8DYQHmAxQBGxQAA1QBrwEUAbAB0wH/
AVoCXQHTBAADVAGvAcsByQHIAf8BxwHFAcQB/wGTAcMBzAH/AQABwwHeAf8BAAGaAboB/wG9AbsBugH/
AbwBugG4Af8BugG3AbYB/wG4AbYBtAH/AbYBswGyAf8BtAGyAbAB/wGyAa8BrQH/AbABrQGrAf8BrgGr
AakB/wGrAagBpgH/AZ4BmwGZAf8BmwGYAZYB/wGYAZUBkwH/AZYBkwGRAf8BlAGRAY8B/wGSAY8BjQH/
AagBpQGjAf8BtQGzAbEB/wMqAUAIAAGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEA
@ -382,8 +382,8 @@
AY4BiwEAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/xAAAzMBUwPuAf8D7QH/A+0B/wPtAf8D7QH/A+0B/wPtAf8D7QH/A+0B/wPt
Af8D7QH/A+0B/wPtAf8D7AH/A+MB/wPKAf8DnQH/A4MB/wOGAf8DmAH/A2IB7wMnATsYAAM6AWABLQG6
Ad0B/wEAAZMBugH/AxoBJAMMARADXAHPAY0BuAHEAf8BAgGlAcAB/wEAAbkB1gH/AQABngG+Af8BmAG2
Af8D7QH/A+0B/wPtAf8D7AH/A+MB/wPKAf8DnQH/A4MB/wOGAf8DmAH/A2IB7wMnATsYAAM6AWABKgG6
Ad0B/wEAAZMBugH/AxoBJAMMARADXAHPAY0BuAHEAf8BAAGlAcAB/wEAAbkB1gH/AQABngG+Af8BmAG2
Ab0B/wG9AbsBuQH/Ab0BugG5Af8BuQG3AbUB/wG3AbQBsgH/AbUBsgGxAf8BswGwAa4B/wGxAa8BrQH/
Aa0BqgGoAf8BogGfAZ0B/wGfAZwBmgH/AZ0BmgGYAf8BmwGYAZYB/wGYAZUBkwH/AZYBkwGRAf8BpAGh
AZ8B/wG4AbUBswH/A0cBgAwAAY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGO
@ -393,7 +393,7 @@
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/LwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8QAAMzAVMD7QH/A+0B/wPsAf8D7AH/A+wB/wPsAf8D7AH/
A+wB/wPsAf8D7AH/A+wB/wPsAf8D7AH/A+sB/wPfAf8DyQH/A+0B/wPwAf8D8QH/A2cB8gMrAUIcAAMM
ARABOAHBAeIB/wEKAZ4BxwH/AVgCWgHAA1EBogEAAZgBuwH/AQABowHEAf8BAAG1AdMB/wEAAcIB3gH/
ARABNQHBAeIB/wEHAZ4BxwH/AVgCWgHAA1EBogEAAZgBuwH/AQABowHEAf8BAAG1AdMB/wEAAcIB3gH/
AQABsQHQAf8BoQG3Ab0B/wG+AbwBugH/Ab0BuwG5Af8BvQG6AbkB/wG6AbcBtQH/AbYBswGxAf8BsgGv
Aa0B/wGuAasBqQH/AaYBowGhAf8BpAGhAZ8B/wGiAZ8BnQH/AZ8BnAGaAf8BnQGaAZgB/wGdAZoBmAH/
Aa4BqwGpAf8BuQG3AbUB/wNRAZ8QAAGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEA
@ -403,8 +403,8 @@
AYsBAAH/AY4BiwEAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/xAAAzMBUwPsAf8D7AH/A+sB/wPrAf8D6wH/A+sB/wPrAf8D6wH/
A+sB/wPrAf8D6wH/A+sB/wPrAf8D6QH/A9wB/wPHAf8D/gX/A2cB8gMsAUQkAANcAc8BJQG2AdsB/wEE
AZcBwgH/AQIBngHGAf8BCwGxAdQB/wEXAb0B3AH/AR4BwAHbAf8BOQHCAdQB/wGjAcIByQH/AcIBwAG+
A+sB/wPrAf8D6wH/A+sB/wPrAf8D6QH/A9wB/wPHAf8D/gX/A2cB8gMsAUQkAANcAc8BIgG2AdsB/wEB
AZcBwgH/AQABngHGAf8BCAGxAdQB/wEUAb0B3AH/ARsBwAHbAf8BNgHCAdQB/wGjAcIByQH/AcIBwAG+
Af8BvwG8AbsB/wG9AbsBuQH/AbsBuAG3Af8BugG3AbUB/wG0AbEBrwH/Aa0BqgGoAf8BqwGoAaYB/wGp
AaYBpAH/AaYBowGhAf8BpAGhAZ8B/wGiAZ8BnQH/AacBpAGiAf8BuAG2AbQB/wG8AbkBuAH/A0ABcBQA
AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGL
@ -414,8 +414,8 @@
AY4BiwEAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/xAAAzMBUwPqAf8D6gH/A+kB/wPpAf8D6QH/A+kB/wPpAf8D6QH/A+kB/wPp
Af8D6QH/A+kB/wPpAf8D5gH/A9gB/wPGAf8D+AH/A2cB8gMtAUUoAANAAXABiwHKAegB/wE0Ab8B4QH/
ATABuwHeAf8DVAGvAzoBYAMMARADRwGAA2IB7wHLAckByAH/AcYBxAHDAf8BwQG/Ab0B/wG8AbkBuAH/
Af8D6QH/A+kB/wPpAf8D5gH/A9gB/wPGAf8D+AH/A2cB8gMtAUUoAANAAXABiwHKAegB/wExAb8B4QH/
AS0BuwHeAf8DVAGvAzoBYAMMARADRwGAA2IB7wHLAckByAH/AcYBxAHDAf8BwQG/Ab0B/wG8AbkBuAH/
AboBtwG2Af8BuQG2AbQB/wGvAawBqgH/Aa0BqgGoAf8BqwGoAaYB/wGsAakBpwH/AbABrQGsAf8BuwG4
AbYB/wG/AbwBuwH/A1wBzwMhATAYAAGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEA
Af8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGO
@ -1053,6 +1053,9 @@
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="labelSebServiceIgnore.Text" xml:space="preserve">
<value>IMPORTANT: The SEB Service changes aspects of the system configuration, e.g. to lock down the security screen (CTRL+ALT+DEL). Some anti-virus software providers might falsely identify its operations as malicious, thus it is not recommended to use the SEB Service in uncontrolled environments (e.g. BYOD).</value>
</data>
@ -1066,12 +1069,36 @@
<metadata name="dataGridViewTextBoxColumnName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Type.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewTextBoxColumnName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewCheckBoxColumnProtocolEnable.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewTextBoxColumnProtocolType.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewCheckBoxColumnProtocolEnable.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewTextBoxColumnProtocolType.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Active.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="OS.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Executable.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Title.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Active.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
@ -1093,6 +1120,12 @@
<metadata name="ArgumentParameter.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ArgumentActive.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ArgumentParameter.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="checkBoxPermittedProcessAllowUser.ToolTip" xml:space="preserve">
<value>Allow locating third party applications with a file dialog if it cannot be found at the paths specified. Only applications matching other criteria specified (like Original Name, executable) are accepted.</value>
</data>
@ -1108,6 +1141,18 @@
<metadata name="dataGridViewTextBoxColumn2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewCheckBoxColumn1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewComboBoxColumn1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewTextBoxColumn1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewTextBoxColumn2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="label23.Text" xml:space="preserve">
<value>The seb(s):// link to the config file can contain an additional query string, separated from the main URL by '?' or '??' (if the URL itself doesn't contain a query). SEB will then append this query string to the Start URL.</value>
</data>
@ -1140,6 +1185,15 @@ IMPORTANT: Always copy the key(s) as a last step, after the configuration file w
<metadata name="spellCheckerDictionaryFilesColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="spellCheckerDictionaryEnabledColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="spellCheckerDictionaryLocaleColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="spellCheckerDictionaryFilesColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="radioButtonTouchOptimized.ToolTip" xml:space="preserve">
<value>To be used on Windows tablets. In Window 10, Tablet Mode needs to be activated. Not working with the Create New Desktop kiosk mode, you have to reconfigure the SEB client settings to Disable Explorer Shell.</value>
</data>