:: TS_RustDeskInstall.cmd (TechDental Software RustDeskInstall.cmd) créé par Tlem33
:: Ce batch permet l'installation du logiciel RustDesk en mode client ou serveur avec
:: des paramètres spécifiques (Utilisé principalement dans un système tel que le Trios Share).
:: Il permet aussi l'installation d'un pilote d'écran virtuel et de plusieurs fonctions utiles.
::
:: Version 2.0 du 05/09/2025
:: Voir l'historique des modifications à la fin de ce fichier.
::
@Echo Off
Mode Con:Cols=91 Lines=31
:: On demande les droits admin.
Net.exe session 1>NUL 2>NUL || (Powershell start-process """%~dpnx0""" "%*" -verb RunAs & Exit /b 1)
:: Déclaration de variables
:: ================================================================================
:: Ajout des chemins vers System32, wbem et Powershell au path (au cas ou)
SET "PATH=%PATH%;%WINDIR%\System32;%WINDIR%\System32\wbem;%WINDIR%\System32\WindowsPowerShell\v1.0"
:: Version du script batch
Set BatchVersion=2.0
:: Paramétrage du mot de passe
Set FixedPasswd=
:: Variables diverses
Set InstallDir=%systemdrive%\Utilitaires\RustDesk\
Set VDDExeName=VirtualDisplayDriverInstaller.exe
Set RustdeskSetupFile=
Set RustdeskSetupPath=
Set RustDesk_URL=
Set VDDSetupFile=
Set RustDeskExe=
Set IsCDW=R
:: URL du fichier d'installation et du pilote d'écran virtuel
Set CMD_URL=https://www.techdental.fr/download/download/Telemaintenance/RustDeskInstall/TS_RustDeskInstall.cmd
Set VDD_URL=https://www.techdental.fr/download/download/Telemaintenance/RustDeskInstall/VirtualDisplayDriverInstaller.exe
:: ================================================================================
:: On se place dans le dossier du script
PushD "%~DP0"
:: On test si on peux écrire dans le dossier du script
:: Si oui alors IsCDW = W sino IsCDW = R
Call :CheckIfDirIsWritable "%~DP0"
If %Errorlevel% EQU 0 Set IsCDW=W
:: Nettoyage des fichiers temporaire
Call :CleanTemp
:: ==============
:: Menu principal
:: ==============
:Main_Menu
Set Menu=Principal
Call :GetRustDeskExe
Cls & Color 0F
Call :Main_Title
Echo Veuillez s‚lectionner l'action … r‚aliser :
Echo.
Echo 1 - D‚ployer Rustdesk sans installation
Echo.
Echo 2 - Installation en mode serveur\client
Echo.
Echo 3 - Installation du pilote d'‚cran Virtuel
Echo.
Echo 4 - Mise … jour d'une installation de Rustdesk
Echo.
Echo 5 - Menu des outils
Echo.
Echo 6 - Quitter
Echo.
Echo.
Echo.
Choice /C 123456 /M "Entrez votre choix :"
If %Errorlevel% EQU 6 Goto :End
If %Errorlevel% EQU 5 Goto :Tools_Menu
If %Errorlevel% EQU 4 Call :Server_Update
If %Errorlevel% EQU 3 Call :VDD_Install
If %Errorlevel% EQU 2 Call :Server_Install
If %Errorlevel% EQU 1 Call :Client_Install
Goto :Main_Menu
:: ===============
:: Menu des Outils
:: ===============
:Tools_Menu
Set Menu=des Outils
Call :GetRustDeskExe
Cls & Color 0F
Call :Main_Title
Echo Veuillez s‚lectionner l'action … r‚aliser :
Echo.
Echo 1 - Cr‚ation d'un raccourci vers un serveur RustDesk
Echo.
Echo 2 - T‚l‚chargement du dernier Rustdesk dans %InstallDir%
Echo.
Echo 3 - G‚n‚rer un nouvel ID Rustdesk (pour le cas des machines clon‚es)
Echo.
Echo 4 - D‚sinstallation et nettoyage
Echo.
Echo 5 - Menu principal
Echo.
Echo 6 - Quitter
Echo.
Echo.
Echo.
Choice /C 123456 /M "Entrez votre choix :"
If %Errorlevel% EQU 6 Goto :End
If %Errorlevel% EQU 5 Goto :Main_Menu
If %Errorlevel% EQU 4 Call :Uninstall
If %Errorlevel% EQU 3 Goto :Get_New_ID
If %Errorlevel% EQU 2 Call :DownloadLastRustdesk "C:\Utilitaires\Rustdesk" & Goto :Tools_Menu
If %Errorlevel% EQU 1 Call :Server_Link
Goto :Tools_Menu
:: ==================================
:: Installation en mode client simple
:: ==================================
:Client_Install
Cls
Echo Installation de RustDesk en mode client simple. Veuillez patienter.
:: Récupération de l'installateur
Call :GetRustdeskSetupFile
:: Copie de l'installateur Rustdesk sous la forme "rustdesk-x.x.x-x86_64.exe"
Copy "%RustdeskSetupPath%%RustdeskSetupFile%" "%InstallDir%" /Y >Nul 2>Nul
Call :CreateDesktopLink "Rustdesk" "%InstallDir%%RustdeskSetupFile%"
:: Ecriture du fichier de configuration et démarrage de RustDesk Client
Call :WriteClientConfig
Start "" "%RustdeskSetupPath%%RustdeskSetupFile%"
:: Message de fin
Echo. & Echo Installation en mode client termin‚e.
Timeout 3
Goto :Eof
:: ============================
:: Installation en mode serveur
:: ============================
:Server_Install
Cls
Set Passwd=
:: Désinstalle toute version précédente (Client/Serveur)
Call :Uninstall
:: Récupération de l'installateur
Call :GetRustdeskSetupFile
:: Si un mot de passe permanent est inscrit en dur dans le script, on passe à la suite de l'installation
If Defined FixedPasswd (
Set "Passwd=%FixedPasswd%"
Echo. & Echo Utilisation du mot de passe pr‚d‚finis
) Else (
:: Demande de la saisie du mot de passe
If "%Passwd%" EQU "" Call :SetPassword
)
:: Si pas de mot de passe, on retourne au menu principal
If "%Passwd%" EQU "" Goto :Main_Menu
:: Installation silentieuse de RustDesk et suppression du fichier temporaire
:: Notes :
:: --password can be used to set a permanent password.
:: --get-id can be used to retrieve the ID.
:: --set-id can be used to set an ID, please note IDs should start with a letter.
:: --silent-install can be used to install RustDesk silently
:: --option arg1 arg2 to configure options
:: --install-service to install service
Echo. & Echo Installation de Rustdesk en mode serveur cours. Veuillez patienter.
"%RustdeskSetupPath%%RustdeskSetupFile%" --silent-install
Ping -n 5 127.0.0.1>Nul
:: Vérifie si Rustdesk est installé.
Call :CheckRustdeskInstalled
Set RustDeskExe="%ProgramFiles%\RustDesk\RustDesk.exe"
:: Paramètrage personnalisés
Echo ParamŠtrage personnalis‚ de RustDesk...
%RustDeskExe% --option direct-server Y
%RustDeskExe% --option verification-method use-both-passwords
%RustDeskExe% --option temporary-password-length 10
%RustDeskExe% --option allow-auto-disconnect Y
%RustDeskExe% --option auto-disconnect-timeout 60
:: Paramètrage configuration client initiale
Call :WriteClientConfig
:: Message de fin
Echo.
Echo.
Echo.
Echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
Echo º Pour utiliser RustDesk en milieu professionnel interne, º
Echo º vous devez utiliser une connexion par IP ou nom NETBIOS. º
Echo º º
Echo º Utilisez l'option de Cr‚ation d'un raccourcis vers un serveur º
Echo º RustDesk pour ˆtre en conformit‚ avec la licence d'utilisation. º
Echo º https://rustdesk.com/terms/ º
Echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
Echo.
Echo.
:: Mise en place du mot de passe
Echo Mise en place du mot de passe "%Passwd%"
%RustDeskExe% --password %Passwd%
:: Récupération et affichage de l'ID
For /F "Delims=" %%i In ('"%RustDeskExe%" --get-id ^| more') Do Set ID=%%i
Echo ID Rustdesk = %ID%
Echo.&Echo.&Echo.
Echo Installation de RustDesk en mode serveur termin‚.
Echo Appuyez sur une touche pour revenir au menu. & Pause>Nul
Goto :Eof
:: ================================
:: Installation en mode mise à jour
:: ================================
:Server_Update
Cls
:: Vérifie si Rustdesk est installé.
Call :CheckRustdeskInstalled
:: Récupération de l'installateur
Call :GetRustdeskSetupFile
Echo.
Echo.
Echo Mise … jour de RustDesk. Veuillez patienter.
Echo.
:: Installation/Mise a jour
"%RustdeskSetupPath%%RustdeskSetupFile%" --silent-install
:: Message de fin
Echo.
Echo Mise … jour de RustDesk termin‚e.
Echo Appuyez sur une touche pour revenir au menu.
Pause>Nul
Goto :Eof
:: ======================================
:: Installation du pilote d'écran virtuel
:: ======================================
:VDD_Install
Set VDDSetupFile=%~DP0%VirtualDisplayDriverInstaller.exe
:: Si l'installateur n'est pas présent localement, on le télécharge dans le dossier Temp
If Not Exist "%VDDSetupFile%" (
Call :Download_File "%Temp%" "%VDDExeName%" %VDD_URL%
)
:: On essaie de déplacer le fichier localement
Move /Y "%Temp%\%VDDExeName%" "%VDDSetupFile%" >Nul 2>Nul
:: Lance l'installation de l'écran virtuel
If Exist "%VDDSetupFile%" (
Start "" "%VDDSetupFile%"
) Else (
Start "" "%Temp%\%VDDExeName%"
)
Goto :Eof
:: ================================
:: Vérifie si rustdesk est installé
:: ================================
:CheckRustdeskInstalled
:: Si le programme n'est pas trouvé => Erreur
If Not Exist "%ProgramFiles%\RustDesk\RustDesk.exe" (
Color 0C
Cls
Echo.
Echo ERREUR : "%ProgramFiles%\RustDesk\RustDesk.exe" n'existe pas.
Echo Le programme RustDesk ne s'est pas install‚ correctement.
Echo Impossible de continuer.
Echo.
Echo.
Echo Appuyez sur une touche pour revenir au menu & Pause>Nul
Goto :Main_Menu
)
Goto :Eof
:: ==========================================
:: Vérifie la connexion vers un site Internet
:: ==========================================
:CheckInternetConnexion
Set Site2Test=gitub.com
Set Ip2Test=172.233.219.78
Set RetIp=
:: Test de la connexion vers le site Internet "Site2Test"
:: Version Powershell => tnc gitub.com -port 443
For /F "Tokens=2 Delims=: " %%A In ('Nslookup %Site2Test% 2^>NUL^|Find "%Ip2Test%"') Do Set RetIp=%%A
If "%RetIp%" EQU "" (
Cls
Echo Pas de connexion vers %Site2Test%.
Echo Utilisation du programme d'installation local si existant.
Ping -n 2 127.0.0.1>Nul
Exit /B 1
)
Exit /B 0
:: ================================================
:: Vérifie si le dossier est accessible en écriture
:: ================================================
:: Vérifie si le dossier donné en paramètre est accessible en écriture.
:: Si le dossier n'existe pas, il sera créé.
:CheckIfDirIsWritable
:CheckIfDirIsWritableLoop
Set TmpDir="%~1\~TestDir%random%"
If /I Exist %TmpDir% Goto CheckIfDirIsWritableLoop
MD %TmpDir%>Nul 2>Nul
If %Errorlevel% EQU 1 Exit /B 1
RD %TmpDir%>NUL
:: =====================================================
:: Recherche d'un exécutable Rustdesk existant sur le PC
:: =====================================================
:GetRustDeskExe
Set RustDeskExe=
:: Recherche dans le dossier Program Files\RustDesk
If Exist "%ProgramFiles%\RustDesk\rustdesk.exe" (
Set RustDeskExe=%ProgramFiles%\RustDesk\rustdesk.exe
Goto :EoF
)
:: Recherche dans le dossier %UserProfile%\AppData\local\RustDesk
If Exist "%UserProfile%\AppData\local\RustDesk\RustDesk\rustdesk.exe" (
Set RustDeskExe=%UserProfile%\AppData\local\RustDesk\RustDesk\rustdesk.exe
Goto :EoF
)
:: Recherche dans le dossier %InstallDir%
If Exist "%InstallDir%\rustdesk-*x86_64.exe" (
For /F "Tokens=* Delims=" %%a In ('Dir /B "%InstallDir%rustdesk-*x86_64.exe"') Do (Set RustDeskExe=%InstallDir%%%a)
Exit /B 1
)
Exit /B 0
:: ======================================
:: Récupération du fichier d'installation
:: ======================================
:GetRustdeskSetupFile
Set RustDeskSetupPath=
Set RustdeskSetupFile=
Set LastExeName=
Set LastVersion=
Call :CheckIfDirIsWritable "%~DP0"
If %Errorlevel% EQU 0 (
Set RustDeskSetupPath=%~DP0
) Else (
Set RustDeskSetupPath=%InstallDir%
)
:: Télécharge la dernière version de Rustdesk. Sinon utilise la version locale si existante
Call :DownloadLastRustdesk "%RustDeskSetupPath%"
If %Errorlevel% EQU 1 (
For /F "Tokens=1 Delims=" %%a In ('Dir /B "%~DP0rustdesk-*x86_64.exe"') Do (Set RustdeskSetupFile=%%a&Set RustdeskSetupPath=%~DP0)
)
:: Si pas de fichier d'installation, alors ERREUR.
If "%RustdeskSetupFile%" EQU "" (
Color 0C
Echo.
Echo Erreur - Impossible de d‚terminer le programme d'installation de RustDesk
Echo.
Echo T‚l‚chargez manuellement le programme d'installation et placez le dans
Echo le mˆme dossier que ce batch. Le nom du programme doit avoir la forme :
Echo.
Echo rustdesk-x.x.x-x86_64.exe
Echo.
Echo Rendez-vous sur le site : https://rustdesk.com/download
Echo.
Echo.
Echo Appuyez sur une touche pour revenir au menu.
Pause>Nul
Goto :Main_Menu
)
Goto :Eof
:: ===================================================================
:: Recherche de la dernière version du fichier d'installation Rustdesk
:: ===================================================================
:GetRustDeskLastVersionInfos
Set TempFile="%temp%\RustDeskTmpFile.txt"
Set LastVersion=
:: Récupère les dernières informations api pour RustDesk depuis le site Github
Curl -ks https://api.github.com/repos/rustdesk/rustdesk/releases/latest>%TempFile%
:: Récupère le lien de téléchargement du dernier exécutable
:: %RustDesk_URL%
For /F "Tokens=1,* Delims=:" %%a In ('Type %TempFile% ^| Findstr "browser_download_url" ^| Findstr "x86_64.exe"') Do (Set RustDesk_URL=%%b)
If "%RustDesk_URL%" EQU "" Goto :Eof
:: Récupère le dernier numéro de version de RustDesk
:: %LastVersion%
For /F "Tokens=1,* Delims=:" %%a In ('Type %TempFile% ^| Findstr "tag_name"') Do (Set LastVersion=%%b)
Set LastVersion=%LastVersion:~2,-2%
:: Récupère le nom du dernier exécutale pour Windows
:: %LastExeName%
For /F "Tokens=1,* Delims=:" %%a In ('Type %TempFile% ^| Findstr /I /R /C:"name.*x86_64.exe"') Do (Set LastExeName=%%b)
Set LastExeName=%LastExeName:~2,-2%
:: Supression du fichier temporaire
Del /F %TempFile%
Goto :Eof
:: ===============
:: Changement d'ID
:: ===============
:Get_New_ID
Cls
:: Erreur : Pas d'exécutable Rustdesk trouvé
If "%RustDeskExe%" EQU "" (
Color 0C
Echo.
Echo Erreur - Pour utiliser cette fonction, Rustdesk doit ˆtre install‚ sur cette machine
Echo.
Echo.
Echo Appuyez sur une touche pour revenir au menu.
Pause>Nul
Goto :Eof
)
:: Affiche l'ID actuel
For /F "Delims=" %%i In ('"%RustDeskExe%" --get-id ^| more') Do Set ID=%%i
Echo Echo Votre ID actuel : %ID%
:: Arrêt du service et fermeture de l'executable
SC Stop Rustdesk >Nul 2>Nul
Taskkill /IM Rustdesk.exe /F >Nul 2>Nul
:: Modification de la première ligne du fichier RustDesk.toml
Set RustDesktoml="%UserProfile%\AppData\Roaming\RustDesk\config\RustDesk.toml"
If Exist %RustDesktoml% (
(
Echo enc_id = '0'
For /F "Skip=1 Tokens=* delims=" %%a In ('Type %RustDesktoml%') Do Echo %%a
)>%RustDesktoml%
)
:: Modification de la première ligne du fichier RustDesk.toml
Set RustDesktoml="%Windir%\ServiceProfiles\LocalService\AppData\Roaming\RustDesk\config\RustDesk.toml"
If Exist %RustDesktoml% (
(
Echo enc_id = '0'
For /F "Skip=1 Tokens=* delims=" %%a In ('Type %RustDesktoml%') Do Echo %%a
)>%RustDesktoml%
)
:: Démarrage du service
SC Start RustDesk >Nul 2>Nul
If Exist "%ProgramFiles%\RustDesk\rustdesk.exe" Start "" "%ProgramFiles%\RustDesk\rustdesk.exe" --tray >Nul 2>Nul
:: Affiche le nouvel ID
For /F "Delims=" %%i In ('"%RustDeskExe%" --get-id ^| more') Do Set ID=%%i
Echo Echo Votre nouvel ID : %ID%
Timeout /T 10
Goto :Eof
:: ==================================
:: Téléchargement du dernier Rustdesk
:: ==================================
:DownloadLastRustdesk
Set RustDeskSetupPath=%~1
Set RustdeskSetupFile=%~2
Set LastExeName=
Set LastVersion=
Set RustDesk_URL=
Call :CheckInternetConnexion
If %Errorlevel% EQU 1 Exit /B 1
Echo.
Echo R‚cup‚ration de la derniŠre version de Rustdesk
:: Récupère le nom de la dernière version de RustDesk
Call :GetRustDeskLastVersionInfos
If "%RustdeskSetupFile%" EQU "" Set RustdeskSetupFile=%LastExeName%
:: Suppression des anciennes version
For /F "Tokens=1 Delims=" %%a In ('Dir /B "%RustDeskSetupPath%\rustdesk-*x86_64.exe"') Do (
If "%%a" NEQ "%LastExeName%" Del /F /Q "%RustDeskSetupPath%\%%a"
)
:: Si la dernière version de Rustdesk n'existe pas dans le dossier, on le télécharge
If /I Not Exist "%RustDeskSetupPath%\%RustdeskSetupFile%" (
Call :Download_File "%RustDeskSetupPath%" "%RustdeskSetupFile%" %RustDesk_URL%
) Else (
Echo Vous avez d‚j… la derniŠre version.
Ping -n 2 127.0.0.1>Nul
)
Goto :Eof
:: =============================================
:: Téléchargement fichier dans
:: =============================================
:Download_File
Set DownloadDestination=%~1
Set FileName=%~2
Set FileURL=%~3
:: Crée le dossier de destination si nécessaire
If Not Exist "%DownloadDestination%" MD "%DownloadDestination%">Nul
:: Téléchargement du pilote d'écran virtuel
Echo T‚l‚chargement du fichier %FileName%
Curl -k -L -o "%DownloadDestination%\%FileName%" "%FileURL%"
Echo.
:: S'il y a eu problème de téléchargement
If Not Exist "%DownloadDestination%\%FileName%" (
Color 0C
Echo.
Echo Erreur - Impossible de r‚cup‚rer le fichier %FileName%
Echo.
Echo T‚l‚chargez le manuellement sur le lien :
Echo.
Echo %FileURL%
Echo.
Echo.
Echo.
Echo Appuyez sur une touche pour revenir au menu principal
Pause>Nul
Goto :Main_Menu
)
:: On indique le chemin et le nom du fichier téléchargé
Set DownloadedFile="%DownloadDestination%\%FileName%"
Goto :Eof
:: =================================
:: Demande du mot de passe permanent
:: =================================
:SetPassword
Set Count=0
:: Demande du mot de passe
Echo.
Echo Choix du mot de passe :
Echo Ne pas utiliser les caractŠres sp‚ciaux : ^< ^> ^^ ^& " ( )
Echo Longueur minimale 8 caractŠres
Echo.
Set /P Passwd=Entrez le mot de passe
If "%Passwd%" EQU "" Goto :SetPassword
Set TestPass=%Passwd%
:: Test la longueur du mot de passe
:SetPasswordLoop
If Defined TestPass (Set "TestPass=%TestPass:~1%" & Set /A Count+ = 1 & Goto SetPasswordLoop)
If %Count% LSS 8 (
Color 0C
Echo.
Echo 8 CaractŠre minimum !!!
Echo.
Echo Appuyez sur une touche pour recommencer
Pause>Nul
Color 0F
Cls
Set Passwd=
Goto :SetPassword
)
:: Vérification du mot de passe
:SetPasswordConfirm
Set /P ConfirmPasswd=Confirmez le mot de passe
If "%ConfirmPasswd%" EQU "" Goto :SetPasswordConfirm
If "%ConfirmPasswd%" NEQ "%Passwd%" (
Echo Erreur lors de la v‚rification du mot de passe
Echo Appuyez sur une touche pour recommencer.
Pause>Nul
CLS & Goto :SetPassword
)
Goto :Eof
:: ========================================
:: Désinstallation et nettoyage de Rustdesk
:: ========================================
:Uninstall
Echo.
Echo D‚sinstallation et nettoyage de RustDesk (si existant)
:: Désinstallation de RustDesk
If Exist "%ProgramFiles%\RustDesk\RustDesk.exe" Start " " /Wait "%ProgramFiles%\RustDesk\RustDesk.exe" --uninstall
:: Suppression de fichiers additionnels
If Exist "%Programfiles%\RustDesk" RMDIR /S /Q "%Programfiles%\RustDesk"
If Exist "%PUBLIC%\Desktop\RustDesk.lnk" Del /F "C:\Users\Public\Desktop\RustDesk.lnk"
If Exist "%UserProfile%\AppData\local\RustDesk" RMDIR /S /Q "%UserProfile%\AppData\local\RustDesk"
If Exist "%UserProfile%\AppData\Roaming\RustDesk" RMDIR /S /Q "%UserProfile%\AppData\Roaming\RustDesk"
If Exist "%Windir%\ServiceProfiles\LocalService\AppData\Roaming\RustDesk" RMDIR /S /Q "%Windir%\ServiceProfiles\LocalService\AppData\Roaming\RustDesk"
:: Récupération du véritable chemin vers le dossier Bureau de l'utilisateur
For /F "Usebackq Tokens=1,2,*" %%B In (`Reg Query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop`) Do Set UserDesktop=%%D
If Exist "%UserDesktop%\RustDesk.lnk" Del /F "%UserDesktop%\RustDesk.lnk"
Echo D‚sinstallation et nettoyage termin‚
Ping -n 2 127.0.0.1>Nul
Goto :Eof
:: ===========================================
:: Ecriture du fichier de configuration client
:: ===========================================
:WriteClientConfig
Echo.
Echo Ecriture du fichier de configuration client
:: Ecriture du fichier de configuration initiale personnalisée
If Not Exist "%UserProfile%\AppData\Roaming\RustDesk\config\" MD "%UserProfile%\AppData\Roaming\RustDesk\config\"
If Not Exist "%Temp%\ini.vbs" Call :Func_Write_IniVBS
:: Ecriture des paramètres dans RustDesk_default.toml
Set ConfigFile="%UserProfile%\AppData\Roaming\RustDesk\config\RustDesk_default.toml"
Cscript.exe /nologo "%Temp%\ini.vbs" %ConfigFile% "options" "i444" "'Y'"
Cscript.exe /nologo "%Temp%\ini.vbs" %ConfigFile% "options" "view_style" "'adaptive'"
Cscript.exe /nologo "%Temp%\ini.vbs" %ConfigFile% "options" "collapse_toolbar" "'Y'"
Cscript.exe /nologo "%Temp%\ini.vbs" %ConfigFile% "options" "enable_file_transfer" "'Y'"
Cscript.exe /nologo "%Temp%\ini.vbs" %ConfigFile% "options" "show_remote_cursor" "'Y'"
Cscript.exe /nologo "%Temp%\ini.vbs" %ConfigFile% "options" "zoom-cursor" "'Y'"
Cscript.exe /nologo "%Temp%\ini.vbs" %ConfigFile% "options" "image_quality" "'best'"
Cscript.exe /nologo "%Temp%\ini.vbs" %ConfigFile% "options" "follow_remote_window" "'Y'"
Cscript.exe /nologo "%Temp%\ini.vbs" %ConfigFile% "options" "follow_remote_cursor" "'Y'"
:: Ecriture des paramètres dans RustDesk_local.toml
Set ConfigFile="%UserProfile%\AppData\Roaming\RustDesk\config\RustDesk_local.toml"
Cscript.exe /nologo "%Temp%\ini.vbs" %ConfigFile% "options" "theme" "'dark'"
Cscript.exe /nologo "%Temp%\ini.vbs" %ConfigFile% "options" "lang" "'fr'"
Echo Ecriture du fichier de configuration client termin‚e
Ping -n 2 127.0.0.1>Nul
Goto :Eof
:: ==============
:: Titre du batch
:: ==============
:Main_Title
Color 0F
Echo R‚pertoire courant (%IsCDW%) : %~DP0
Echo.
Echo.
Echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
Echo º TechDental Software º
Echo º º
Echo º RustDeskInstall v%BatchVersion% º
Echo º º
Echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
Echo.
Echo Menu %Menu%
Echo.
Echo.
Goto :Eof
:: ==========================
:: Fonction CreateDesktopLink
:: ==========================
::
:: Examples
:: Call :CreateDesktopLink "MyApp" "D:\Dirs\MyApp.exe"
:: Call :CreateDesktopLink "MyApp" "D:\Dirs\MyApp.exe" "D:\Dirs\MyApp.ico" "Description of MyApp"
:: Call :CreateDesktopLink "MyApp" "D:\Dirs\MyApp.exe" "D:\Dirs\MyApp.exe" "Description of MyApp"
:: Call :CreateDesktopLink "MyApp" "D:\Dirs\MyApp.exe" "D:\Dirs\MyApp.exe,3" "Description of MyApp"
::
:CreateDesktopLink LinkName TargetPath IconFile Description
Set TmpFile="%temp%\CreateLink.vbs"
Set IconFile=%~3
If "%IconFile%" EQU "" Set IconFile=%~2
Set Desc=%~4
If "%Desc%" EQU "" Set Desc=%~1
:: LnkFolder can be : AllUsersDesktop, AllUsersStartMenu, AllUsersPrograms, AllUsersStartup, Desktop, Favorites, Fonts,
:: MyDocuments, NetHood, PrintHood, Programs, Recent, SendTo, StartMenu, Startup, Templates
:: Some special folders needs that the function ran in admin mode (AllUsersDesktop, AllUsersStartMenu, AllUsersPrograms, AllUsersStartup)
Set LnkFolder=Desktop
(
Echo: Set WshShell = WScript.CreateObject^("WScript.Shell"^)
Echo: linkFile = WshShell.SpecialFolders^("%LnkFolder%"^) + "\%~1.lnk"
Echo: Set link = WshShell.CreateShortcut^(linkFile^)
Echo: link.TargetPath = "%~2"
Echo: link.workingDirectory = "%~DP2"
Echo: link.IconLocation = "%IconFile%"
Echo: link.Description = "%Desc%"
Echo: link.Save
)>%TmpFile%
"%Windir%\System32\Cscript.exe" %TmpFile%>Nul 2>Nul
Del /Q /F %TmpFile%>Nul 2>Nul
Goto :Eof
:: =======================================================
:: Création d'un raccourci bureau vers serveur le Rustdesk
:: =======================================================
:Server_Link
Cls
Set TargetPC=
Set TargetIP=
Set LINK_Icon=
Set RustExe=
Set TestIP=
:: Recherche de l'executable Rustdesk
For /F "Tokens=* Delims=" %%a In ('Dir /B "%~DP0rustdesk-*x86_64.exe"') Do (Set RustExe=%~DP0%%a)
If Exist "%Localappdata%\rustdesk\rustdesk.exe" Set RustExe=%Localappdata%\rustdesk\rustdesk.exe
If Exist "C:\Program Files\RustDesk\rustdesk.exe" Set RustExe=C:\Program Files\RustDesk\rustdesk.exe
:: Si Rustdesk n'est pas présent sur le PC on télécharge la dernière version
If "%RustExe%" EQU "" (
Call :GetRustdeskSetupFile
Goto :Server_Link
)
:: Demande ¨de rentrer le nom d'hote (ou l'IP si elle est fixe)
Echo Veuillez indiquer le nom d'h“te de la machine … connecter.
Echo Laissez le champs vide pour revenir au menu des outils.
Set /P TargetPC=Vous pouvez aussi utiliser une adresse IP si elle est fixe :
If "%TargetPC%" EQU "" Goto :Eof
Echo.
Echo Recherche de la machine "%TargetPC%" ...
:: Test Ping et récupération de l'IP V4
For /F "Delims=[] Tokens=2" %%a In ('Ping -4 -n 1 %TargetPC% ^| Findstr [') Do Set TargetIP=%%a
:: Si la recherche par nom Netbios ne donne rien on test si c'est une IP
If "%TargetIP%" EQU "" (
For /F "Tokens=* Delims= " %%a In ('Ping -4 -n 1 %TargetPC% ^| Findstr /C:TTL') Do (
If "%%a" NEQ "" Set TargetIP=%TargetPc%
)
)
:: Message d'erreur
If "%TargetIP%" EQU "" (
Echo Impossible de trouver "%TargetPC%"
Echo.
Echo La machine doit ˆtre allum‚e et visible sur le r‚seau pour cr‚er le raccourci.
Echo V‚rifiez les branchements, le nom et les paramŠtres r‚seau puis essayez … nouveau.
Echo.
Echo Appuyez sur une touche pour revenir au menu des outils.
Pause>Nul
Goto :Eof
)
:: Message machine trouvée
Echo "%TargetPC%" trouv‚ sur l'adresse IP %TargetIP%
Echo.
Echo.
:: Choix de l'icône du raccourci
Echo Quelle ic“ne souhaitez vous pour le raccourci ?
Echo.
Echo 1 - Ic“ne RustDesk (ic“ne par d‚faut)
Echo.
Echo 2 - Ic“ne 3Shape
Echo.
Echo.
Choice /C 12 /T 10 /D 1 /M "Entrez votre choix (1 par d‚faut dans 10s) :"
If %Errorlevel% EQU 2 Set LINK_Icon=3Shape
If %Errorlevel% EQU 1 Set LINK_Icon=Rustdesk
:: Choix icône RustDesk - Vérification si exe présent sur la machine et définition du chemin de l'exe dans la variable
If "%LINK_Icon%" EQU "Rustdesk" Set LINK_Icon=%RustExe%
:: Si le dossier d'installation n'existe pas, on le crée
If Not Exist "%InstallDir%" MD "%InstallDir%"
:: Choix icône 3Shape - Extraction de l'icône dans C:\Utilitaires\Rustdesk
If "%LINK_Icon%" EQU "3Shape" (
Echo.
Call :Icon-3Shape "%InstallDir%"
Set LINK_Icon=%InstallDir%3Shape.ico
Echo.
)
:: Création du batch de connexion par nom NetBios/IP
(
Echo::: %TargetPC%.cmd créé par ts_RustdeskInstall.cmd Version %BatchVersion%
Echo::: Si le programme RustDesk n'est pas présent sur la machine, il sera téléchargé
Echo::: Ce batch doit impérativement porter le nom de la machine à joindre.
Echo::: Ce batch s'autoinstalle dans le dossier C:\Utilitaires\Rustdesk
Echo:::
Echo:::
Echo:@Echo Off
Echo:Cls
Echo:
Echo::: Vérifie si le batch est lancé depuis C:\Utilitaires\Rustdesk
Echo::: Si ce n'est pas le cas, demande de choisir entre le lancement ou l'installation puis le lancement.
Echo::: Si installation, lancement du menu de création du raccourci ^(1ere installation^).
Echo:Set InstDir=C:\Utilitaires\Rustdesk
Echo:If /I "%%~DP0" NEQ "%%InstDir%%\" ^(
Echo: Echo Ce programme n'est pas lanc‚ depuis le dossier d'installation standard : %%InstDir%%
Echo: Echo.
Echo: Echo Que souhaitez vous faire ?
Echo: Echo.
Echo: Echo 1 - Lancer la connexion sur %%~n0
Echo: Echo.
Echo: Echo 2 - Installer le programm puis lancer la connexion sur %%~n0
Echo: Echo.
Echo: Echo 3 - Quitter
Echo: Echo.
Echo: Echo.
Echo: Choice /C 123 /M "Entrez votre choix :"
Echo: If Errorlevel 3 Exit
Echo: If Errorlevel 2 XCopy /Y "%%~DPnx0" "%%InstDir%%\" ^& Start "" /B "%%InstDir%%\%%~nx0" Menu ^& Exit
Echo: Cls
Echo:^)
Echo:
Echo::: Recherche de l'executable Rustdesk
Echo:Set RustdeskExe=
Echo:For /F "Tokens=* Delims=" %%%%a In ^('Dir /B "%%~DP0rustdesk-*x86_64.exe"'^) Do ^(Set RustdeskExe=%%~DP0%%%%a^)
Echo:If Exist "%%Localappdata%%\rustdesk\rustdesk.exe" Set RustdeskExe=%%Localappdata%%\rustdesk\rustdesk.exe
Echo:If Exist "C:\Program Files\RustDesk\rustdesk.exe" Set RustdeskExe=C:\Program Files\RustDesk\rustdesk.exe
Echo:
Echo::: Si pas trouvé d'exécutable Rustdesk, on en télécharge un.
Echo:If "%%RustdeskExe%%" EQU "" Call :DownloadRustdesk
Echo:Cls
Echo:
Echo:If "%%~1" EQU "Menu" Call :Menu
Echo:Choice /T 2 /C Mn /N /D n /M "Appuyez sur M pour acceder au menu raccourci"
Echo:If %%errorlevel%% EQU 1 Cls ^& Call :Menu
Echo:Cls
Echo:
Echo::: Utilise le nom de ce batch pour récupérer l'adresse IP V4 de la machine cible
Echo:For /F "Delims=[] Tokens=2" %%%%a In ^('Ping -4 -n 1 %%~n0 ^^^| Findstr ['^) Do ^(Set NetworkIP=%%%%a^)
Echo:
Echo:
Echo:If "%%NetworkIP%%" EQU "" ^(
Echo: Color 0C
Echo: Echo ERREUR : Pas d'adresse IP trouv‚ pour la machine %%~n0
Echo: Echo Verifiez qu'elle est bien allum‚e et dans le mˆme r‚seau.
Echo: Echo.
Echo: Echo Appuyez sur une touche pour quitter
Echo: Pause^>Nul
Echo: Exit
Echo:^)
Echo:
Echo::: Message avec tempo
Echo:Echo Connexion … "%%~n0" avec l'adresse IP : %%NetworkIP%%
Echo:timeout 2
Echo:
Echo::: Ecriture de la configuration client
Echo:Call :CustomConfigFile
Echo:
Echo::: Lance RustDesk avec les paramètres de connexion au serveur
Echo:Start "" "%%RustdeskExe%%" --connect %%NetworkIP%%
Echo:Exit
Echo:
Echo:
Echo::DownloadRustdesk
Echo:Set TempFile="%%temp%%\RustDeskTmpFile.txt"
Echo:
Echo::: Récupère les dernières informations api pour RustDesk depuis le site Github
Echo:Curl -ks https://api.github.com/repos/rustdesk/rustdesk/releases/latest^>%%TempFile%%
Echo:
Echo::: Récupère le lien de téléchargement du dernier exécutable
Echo:For /F "Tokens=1,* Delims=:" %%%%a In ^('Type %%TempFile%% ^^^| Findstr "browser_download_url" ^^^| Findstr "x86_64.exe"'^) Do ^(Set RustDesk_URL=%%%%b^)
Echo:If "%%RustDesk_URL%%" EQU "" Goto :Eof
Echo:
Echo::: Récupère le nom de l'exécutale
Echo:For /F "Tokens=1,* Delims=:" %%%%a In ^('Type %%TempFile%% ^^^| Findstr /I /R /C:"name.*x86_64.exe"'^) Do ^(Set RustdeskExe=%%%%b^)
Echo:Set RustdeskExe=%%~DP0%%RustdeskExe:~2,-2%%
Echo:
Echo::: Téléchargement du dernier programme Rustdesk
Echo:Echo T‚l‚chargement du programme Rustdesk
Echo:Echo.
Echo:Curl -k -L -o "%%RustdeskExe%%" %%RustDesk_URL%%
Echo:Echo.
Echo:Echo.
Echo:Del /F /Q %%TempFile%%
Echo:Goto :Eof
Echo:
Echo:
Echo::CustomConfigFile
Echo::: Ecriture des paramètres dans RustDesk_default.toml et RustDesk_local.toml
Echo:Set ConfigFile="%%UserProfile%%\AppData\Roaming\RustDesk\config\RustDesk_default.toml"
Echo:^(
Echo:Echo:[options]
Echo:Echo:follow_remote_cursor='Y'
Echo:Echo:follow_remote_window='Y'
Echo:Echo:image_quality='best'
Echo:Echo:zoom-cursor='Y'
Echo:Echo:show_remote_cursor='Y'
Echo:Echo:enable_file_transfer='Y'
Echo:Echo:collapse_toolbar='Y'
Echo:Echo:view_style='adaptive'
Echo:Echo:i444='Y'
Echo:^)^>%%ConfigFile%%
Echo:
Echo:Set ConfigFile="%%UserProfile%%\AppData\Roaming\RustDesk\config\RustDesk_local.toml"
Echo:^(
Echo:Echo:[options]
Echo:Echo:remote-menubar-drag-right = '1.0'
Echo:Echo:lang = 'fr'
Echo:Echo:theme = 'light'
Echo:^)^>%%ConfigFile%%
Echo:Goto :Eof
Echo:
Echo:
Echo::Menu
Echo::: Choix de l'icône du raccourci
Echo:Echo Quelle ic“ne souhaitez vous pour le raccourci ?
Echo:Echo.
Echo:Echo 1 - Ic“ne RustDesk
Echo:Echo.
Echo:Echo 2 - Ic“ne 3Shape
Echo:Echo.
Echo:Echo.
Echo:Choice /C 12 /M "Entrez votre choix :"
Echo:If Errorlevel 2 Call :Icon-3Shape ^& Set LINK_Icon=%%~DP03Shape.ico
Echo:If Errorlevel 1 Set LINK_Icon=%%RustdeskExe%%
Echo:Echo.
Echo:
Echo:Set Linkname=%%~n0
Echo:Set /P LinkName=Quel nom voulez-vous donner au raccourci ^("%%LinkName%%" par d‚faut^) ?
Echo:If "%%LinkName%%" EQU "" Set LinkName=%%LinkName%%
Echo:
Echo:If Not Exist "%%~DP0rustdesk-*.exe" Call :DownloadRustdesk
Echo:
Echo::: Création du raccourci sur le bureau
Echo:Call :CreateDesktopLink "%%LinkName%%" "%%~DPnx0" "%%LINK_Icon%%"
Echo:
Echo:Echo.
Echo:Echo Cr‚ation du raccourci termin‚.
Echo:Timeout /T 2
Echo:Cls
Echo:Goto :Eof
Echo:
Echo:
Echo::CreateDesktopLink LinkName TargetPath IconFile
Echo:Set TmpFile="%%temp%%\CreateLink.vbs"
Echo:Set IconFile=%%~3
Echo:If "%%IconFile%%" EQU "" Set IconFile=%%~2
Echo:Set LnkFolder=Desktop
Echo: ^(
Echo: Echo: Set WshShell = WScript.CreateObject^^^("WScript.Shell"^^^)
Echo: Echo: linkFile = WshShell.SpecialFolders^^^("%%LnkFolder%%"^^^) + "\%%~1.lnk"
Echo: Echo: Set link = WshShell.CreateShortcut^^^(linkFile^^^)
Echo: Echo: link.TargetPath = "%%~2"
Echo: Echo: link.workingDirectory = "%%~DP2"
Echo: Echo: link.IconLocation = "%%IconFile%%"
Echo: Echo: link.Save
Echo: ^)^>%%TmpFile%%
Echo:"%%Windir%%\System32\Cscript.exe" %%TmpFile%%^>Nul 2^>Nul
Echo:Del /Q /F %%TmpFile%%^>Nul 2^>Nul
Echo:Goto :Eof
Echo:
Echo:
Echo::Icon-3Shape
Echo:Set "OutputFile=%%~DP0\3Shape.ico"
Echo:Set "TempFile=%%temp%%\3Shape64.ico.h64"
Echo:
Echo::: Icône 3Shape sous forme de fichier certificat
Echo:^(
Echo:Echo: -----BEGIN CERTIFICATE-----
Echo:Echo: AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAPBTIIjwUyF88FMhOPBTIFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAPBTIfzwUyPs8FMj/PBTI/zwUyPs8FMjSPBTIkTwU
Echo:Echo: yE88FMgSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTISDwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI+zwUyM08FMiLPBTISjwUyA8AAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwU
Echo:Echo: yJs8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj4PBTIxTwUyIM8FMhCPBTICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAA8FMijPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyPU8FMi9PBTIezwU
Echo:Echo: yDk8FMgHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIgzwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI8DwUyLU8FMhyPBTIMDwUyAUAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwU
Echo:Echo: yFs8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTIvjwUyKU8FMjdPBTI/TwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMjpPBTIrDwUyGk8FMgnPBTIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAA8FMgzPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI1zwU
Echo:Echo: yAMAAAAAPBTIATwUyDc8FMidPBTI8zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyOE8FMiiPBTIXzwU
Echo:Echo: yB48FMgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIDTwUyPs8FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyN48FMgDAAAAAAAAAAAAAAAAAAAAADwUyBI8FMhtPBTI0TwU
Echo:Echo: yP08FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj9PBTI2DwUyJg8FMhVPBTIFzwUyAEAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAA8FMjePBTI/zwUyP88FMj/PBTI/zwUyP88FMj+PBTIVgAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAA8FMg3PBTImTwUyO88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yPs8FMjPPBTIjjwUyEw8FMgRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAPBTItDwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yOE8FMgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMgNPBTIYTwU
Echo:Echo: yMQ8FMj8PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI+DwUyMY8FMiFPBTIRTwU
Echo:Echo: yAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyIo8FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTImgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAPBTIKzwUyIs8FMjnPBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj1PBTIwDwUyH48FMg9PBTICgAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAA8FMhgPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyPw8FMhFAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTICDwU
Echo:Echo: yFM8FMi3PBTI+TwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yPE8FMi5PBTIdjwUyDc8FMgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAPBTINzwUyP88FMj/PBTI/zwUyP88FMjcPBTI/zwU
Echo:Echo: yP88FMj/PBTI3TwUyA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyCA8FMh+PBTI3TwUyP48FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI7TwUyLU8FMhzPBTIMzwU
Echo:Echo: yAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyA48FMj7PBTI/zwU
Echo:Echo: yP88FMj/PBTIqjwUyOc8FMj/PBTI/zwUyP88FMiTAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwU
Echo:Echo: yAQ8FMhGPBTIqjwUyPU8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMjrPBTIsTwUyHI8FMg0PBTICQAAAAAAAAAAAAAAAAAA
Echo:Echo: AAA8FMgBPBTI3zwUyP88FMj/PBTI/zwUyNo8FMh2PBTI/zwUyP88FMj/PBTI+zwU
Echo:Echo: yD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMgWPBTIcTwUyNI8FMj9PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yO88FMiwPBTIKgAAAAAAAAAAAAAAADwUyLU8FMj/PBTI/zwUyP88FMj5PBTIJjwU
Echo:Echo: yOo8FMj/PBTI/zwUyP88FMjYPBTICwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAA8FMgBPBTIOjwUyJo8FMjvPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyOw8FMghAAAAAAAAAAA8FMiKPBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyEs8FMh6PBTI/zwUyP88FMj/PBTI/zwUyIsAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIDzwUyGI8FMjEPBTI+zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTIkQAA
Echo:Echo: AAAAAAAAPBTIXzwUyP88FMj/PBTI/zwUyP88FMiCPBTIEDwUyOs8FMj/PBTI/zwU
Echo:Echo: yP88FMj6PBTIOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAADwUyCw8FMiLPBTI5jwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyLkAAAAAAAAAADwUyDU8FMj/PBTI/zwUyP88FMj/PBTIugAA
Echo:Echo: AAA8FMh9PBTI/zwUyP88FMj/PBTI/zwUyNI8FMgJAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyAk8FMhTPBTItTwU
Echo:Echo: yPg8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMicAAAAAAAAAAA8FMgOPBTI+zwU
Echo:Echo: yP88FMj/PBTI/zwUyO08FMgFPBTIETwUyO08FMj/PBTI/zwUyP88FMj/PBTIhAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAA8FMgfPBTIgDwUyOg8FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj4PBTIMQAA
Echo:Echo: AAAAAAAAPBTIATwUyN08FMj/PBTI/zwUyP88FMj9PBTILQAAAAA8FMiBPBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyPg8FMgzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMgQPBTIpDwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMjmPBTIRwAAAAAAAAAAAAAAAAAAAAA8FMiyPBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yGUAAAAAPBTIEzwUyO88FMj/PBTI/zwUyP88FMj/PBTIzTwUyAcAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAADwUyAY8FMjhPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMiuPBTIFwAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIiDwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMieAAAAAAAAAAA8FMiEPBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMh9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMgOPBTI5zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyPA8FMhiPBTIAQAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAADwUyFw8FMj/PBTI/zwUyP88FMj/PBTI1wAAAAAAAAAAPBTIFjwU
Echo:Echo: yPA8FMj/PBTI/zwUyP88FMj/PBTI9jwUyC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMghPBTIxjwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyMA8FMgjAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMgyPBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yPk8FMgYAAAAAAAAAAA8FMiIPBTI/zwUyP88FMj/PBTI/zwUyP88FMjHPBTIBQAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwU
Echo:Echo: yAE8FMhfPBTI7zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI9zwU
Echo:Echo: yHg8FMgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIDDwU
Echo:Echo: yPk8FMj/PBTI/zwUyP88FMj/PBTITgAAAAAAAAAAPBTIGDwUyPI8FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyHYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAADwUyBY8FMirPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI0TwUyDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAADwUyAE8FMjaPBTI/zwUyP88FMj/PBTI/zwUyIkAAAAAAAAAAAAA
Echo:Echo: AAA8FMiNPBTI/zwUyP88FMj/PBTI/zwUyP88FMj0PBTIKQAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyE48FMjlPBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj6PBTIjDwUyAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIrzwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMjDAAAAAAAAAAAAAAAAPBTIHDwUyPQ8FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yMI8FMgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIDTwUyJk8FMj8PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMjePBTIQgAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwU
Echo:Echo: yIQ8FMj/PBTI/zwUyP88FMj/PBTI8jwUyAwAAAAAAAAAAAAAAAA8FMiRPBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTIbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIPDwU
Echo:Echo: yNo8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP08FMigPBTIEAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAA8FMhYPBTI/zwUyP88FMj/PBTI/zwUyP88FMg+AAAAAAAA
Echo:Echo: AAAAAAAAPBTIHjwUyPU8FMj/PBTI/zwUyP88FMj/PBTI/zwUyPI8FMglAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAA8FMgHPBTIhTwUyPo8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yOk8FMhUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTILTwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTIewAAAAAAAAAAAAAAAAAAAAA8FMiVPBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTIvjwUyAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAA8FMgsPBTIzDwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyLI8FMgaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwU
Echo:Echo: yAo8FMj3PBTI/zwUyP88FMj/PBTI/zwUyLcAAAAAAAAAAAAAAAAAAAAAPBTIITwU
Echo:Echo: yPY8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMhsAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyAM8FMhwPBTI9TwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI8jwUyGY8FMgCAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAA8FMgBPBTI1TwUyP88FMj/PBTI/zwUyP88FMjtPBTICAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAA8FMiZPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI8jwU
Echo:Echo: yCcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyB88FMi7PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTIxDwUyCYAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyKo8FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/jwUyDcAAAAAAAAAAAAAAAAAAAAAPBTIJDwUyPc8FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMjTPBTIFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwU
Echo:Echo: yFw8FMjtPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj4PBTIezwU
Echo:Echo: yAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAA8FMh/PBTI/zwUyP88FMj/PBTI/zwUyP88FMh2AAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAA8FMidPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyNs8FMhEPBTIAQAA
Echo:Echo: AAAAAAAAPBTIHjwUyKk8FMj9PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMjTPBTINAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAPBTIUzwUyP88FMj/PBTI/zwUyP88FMj/PBTItwAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAPBTIJzwUyPg8FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/TwUyNU8FMisPBTIwTwUyPc8FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyPw8FMiQPBTICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyCg8FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyO08FMgIAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMinPBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyOA8FMhFAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAA8FMgIPBTI8zwUyP88FMj/PBTI/zwUyP88FMj+PBTINQAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAPBTITDwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyKM8FMgSAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyNA8FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yG8AAAAAAAAAAAAAAAAAAAAAAAAAADwUyBc8FMj4PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI6zwU
Echo:Echo: yFc8FMgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMikPBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMiqAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMgDPBTI6zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTItzwUyBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAPBTIeTwUyP88FMj/PBTI/zwUyP88FMj/PBTI5TwUyAUAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAPBTIAjwUyOk8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj0PBTIazwUyAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyE48FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP48FMg5AAAAAAAAAAAAAAAAAAAAADwUyBY8FMj4PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMjKPBTIKAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMgiPBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTInwAAAAAAAAAAAAAAAAAAAAA8FMhaPBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyPk8FMiBPBTIBgAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAPBTIBzwUyO48FMj/PBTI/zwUyP88FMj/PBTI/zwUyPo8FMhHAAAAAAAA
Echo:Echo: AAA8FMgXPBTI3DwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yNg8FMg6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMjKPBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI+DwUyKE8FMiMPBTI5DwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/TwUyJY8FMgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTInjwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI5TwUyEoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAADwUyHM8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTIqzwUyBQAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMhIPBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMjuPBTIXTwU
Echo:Echo: yAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIHDwU
Echo:Echo: yP48FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMi9PBTIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAADwUyAU8FMjpPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyPY8FMhyPBTIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIvTwUyP88FMj/PBTI/zwU
Echo:Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyM48FMgsAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwU
Echo:Echo: yHc8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI+jwUyIY8FMgGAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAA8FMgZPBTI8jwUyP88FMj/PBTI/zwUyP88FMj/PBTI2zwU
Echo:Echo: yDsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyFQ8FMj1PBTI/zwU
Echo:Echo: yP88FMj9PBTImTwUyA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAPBTIHjwUyGw8FMh0PBTIMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo:Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////
Echo:Echo: /////////////////////////////8P/////////gD////////8AA////////wAA
Echo:Echo: P///////AAAD//////8AAAA//////wAAAAP/////AEAAAD////8AeAAAA////4B/
Echo:Echo: AAAAf///gD/AAAAH//+AP/gAAAB//4Af/gAAAAf/gA//wAAAAH+AD//wAAAAB4AH
Echo:Echo: //4AAAABwAP//4AAAADAA///8AAAAMAB///+AAAAwID///+AAADAAP////AAAMBA
Echo:Echo: f////AAB4EA////+AAPgYD////4AB+BgH////AAf4DAP///wAD/gMA///+AA/+A4
Echo:Echo: B///wAH/8DgD//8AB//wHAP//gAP//AcAf/4AD//8B4A//AAf//wHgD/wAD///AP
Echo:Echo: AH+AA///+A8APwAH///4D4AMAB////gPgAAAP///+AfAAAD////4B8AAAf////wH
Echo:Echo: wAAD/////AfAAA/////8A8AAH/////wDwAB//////APAAP/////8AYAD//////4A
Echo:Echo: AAf//////gAAH//////+AAA///////4AAH///////gAB///////+AAP///////8A
Echo:Echo: D////////wAf////////AH////////+A/////////8P/////////////////////
Echo:Echo: //////////////////8=
Echo:Echo: -----END CERTIFICATE-----
Echo:^)^>%%TempFile%%
Echo:
Echo::: Décodage du fichier ^(icône^)
Echo:Certutil.exe -f -decode "%%TempFile%%" "%%OutputFile%%" ^>Nul 2^>Nul
Echo:Echo Extraction de l'ic“ne 3Shape termin‚
Echo:Del /F "%%TempFile%%"
Echo:Goto :Eof
Echo:
Echo:
Echo::Eof
)>"%InstallDir%%TargetPC%.cmd"
:: Création du raccourci sur le bureau
Call :CreateDesktopLink "%TargetPC%" "%InstallDir%%TargetPC%.cmd" "%LINK_Icon%"
Echo.
Echo Cr‚ation du raccourci termin‚.
Timeout /T 2
Goto :Eof
:: =====================
:: Fonction Write_IniVBS
:: =====================
::
:: Examples
:: To write a value in Test.ini :
:: cscript.exe /nologo "%Temp%\ini.vbs" "%~DP0Test.ini" "Section1" "TEST1" "Val Test1"
::
:: To delete a value in Test.ini :
:: cscript.exe /nologo "%Temp%\ini.vbs" "%~DP0Test.ini" "Section2" "TEST1" ""
::
:: To read a value from Test.ini :
:: For /F "Tokens=*" %%a In ('cscript.exe /nologo "%Temp%\ini.vbs" "%~DP0Test.ini" "Section2" "TEST2"') Do Set Result=%%a
::
:Func_Write_IniVBS
Set OutputFile=%Temp%\Ini.vbs
(
Echo: ' This script help on reading/writing on ini file
Echo: '
Echo: ' For reading : Ini.vbs File Section Key
Echo: ' For writing : Ini.vbs File Section Key Val
Echo: '
Echo: ' Arguments:
Echo: ' arg0 [string] The ^(path and^) file name of the INI file
Echo: ' arg1 [string] The section in the INI file
Echo: ' arg2 [string] The key whose value is to be used
Echo: ' arg3 [string] The value of the key to be used
Echo: '
Echo: ' Source : https://www.robvanderwoude.com/vbstech_files_ini.php'
Echo: ' Script modified by Tlem to be used with cmdline batch
Echo: '
Echo: ' eg : Ini.vbs "test.ini" "My Section" "My Key" "My Value"
Echo:
Echo:If WScript.Arguments.Count ^< 3 then WScript.Quit^(0^)
Echo:
Echo:If WScript.Arguments.Count = 4 Then
Echo: strValue = WScript.Arguments^(3^)
Echo: If strValue = "" Then strValue = ""
Echo: Writeini WScript.Arguments^(0^), WScript.Arguments^(1^), WScript.Arguments^(2^), strValue
Echo:Else
Echo: WScript.Echo ReadIni ^(WScript.Arguments^(0^), WScript.Arguments^(1^), WScript.Arguments^(2^)^)
Echo:End If
Echo:
Echo:WScript.Quit^(1^)
Echo:
Echo:
Echo:Function ReadIni^(myFilePath, mySection, myKey^)
Echo: ' This function returns a value read from an INI file
Echo: '
Echo: ' Arguments:
Echo: ' myFilePath [string] the ^(path and^) file name of the INI file
Echo: ' mySection [string] the section in the INI file to be searched
Echo: ' myKey [string] the key whose value is to be returned
Echo: '
Echo: ' Returns:
Echo: ' the [string] value for the specified key in the specified section
Echo: '
Echo: ' CAVEAT: Will return a space if key exists but value is blank
Echo: '
Echo: ' Written by Keith Lacelle
Echo: ' Modified by Denis St-Pierre and Rob van der Woude
Echo:
Echo: Const ForReading = 1
Echo: Const ForWriting = 2
Echo: Const ForAppending = 8
Echo:
Echo: Dim intEqualPos
Echo: Dim objFSO, objIniFile
Echo: Dim strFilePath, strKey, strLeftString, strLine, strSection
Echo:
Echo: Set objFSO = CreateObject^("Scripting.FileSystemObject"^)
Echo:
Echo: ReadIni = ""
Echo: strFilePath = Trim^(myFilePath^)
Echo: strSection = Trim^(mySection^)
Echo: strKey = Trim^(myKey^)
Echo:
Echo: If objFSO.FileExists^(strFilePath^) Then
Echo: Set objIniFile = objFSO.OpenTextFile^(strFilePath, ForReading, False^)
Echo: Do While objIniFile.AtEndOfStream = False
Echo: If objIniFile.AtEndOfStream Then Exit Do
Echo: strLine = Trim^(objIniFile.ReadLine^)
Echo:
Echo: ' Check if section is found in the current line
Echo: If LCase^(strLine^) = "[" ^& LCase^(strSection^) ^& "]" Then
Echo: strLine = Trim^(objIniFile.ReadLine^)
Echo:
Echo: ' Parse lines until the next section is reached
Echo: Do While Left^(strLine, 1^) ^<^> "["
Echo: ' Find position of equal sign in the line
Echo: intEqualPos = InStr^(1, strLine, "=", 1^)
Echo: If intEqualPos ^> 0 Then
Echo: strLeftString = Trim^(Left^(strLine, intEqualPos - 1^)^)
Echo: ' Check if item is found in the current line
Echo: If LCase^(strLeftString^) = LCase^(strKey^) Then
Echo: ReadIni = Trim^(Mid^(strLine, intEqualPos + 1^)^)
Echo: ' In case the item exists but value is blank
Echo: If ReadIni = "" Then
Echo: ReadIni = " "
Echo: End If
Echo: ' Abort loop when item is found
Echo: Exit Do
Echo: End If
Echo: End If
Echo:
Echo: ' Abort if the end of the INI file is reached
Echo: If objIniFile.AtEndOfStream Then Exit Do
Echo:
Echo: ' Continue with next line
Echo: strLine = Trim^(objIniFile.ReadLine^)
Echo: Loop
Echo: Exit Do
Echo: End If
Echo: Loop
Echo: objIniFile.Close
Echo: Else
Echo: WScript.Echo strFilePath ^& " n'existe pas. Fin..."
Echo: Wscript.Quit 1
Echo: End If
Echo:End Function
Echo:
Echo:Sub WriteIni^(myFilePath, mySection, myKey, myValue^)
Echo: ' This subroutine writes a value to an INI file
Echo: '
Echo: ' Arguments:
Echo: ' myFilePath [string] the ^(path and^) file name of the INI file
Echo: ' mySection [string] the section in the INI file to be searched
Echo: ' myKey [string] the key whose value is to be written
Echo: ' myValue [string] the value to be written ^(myKey will be
Echo: ' deleted if myValue is ^^)
Echo: '
Echo: ' Returns:
Echo: ' N/A
Echo: '
Echo: ' CAVEAT: WriteIni function needs ReadIni function to run
Echo: '
Echo: ' Written by Keith Lacelle
Echo: ' Modified by Denis St-Pierre, Johan Pol and Rob van der Woude
Echo:
Echo: Const ForReading = 1
Echo: Const ForWriting = 2
Echo: Const ForAppending = 8
Echo:
Echo: Dim blnInSection, blnKeyExists, blnSectionExists, blnWritten
Echo: Dim intEqualPos
Echo: Dim objFSO, objNewIni, objOrgIni, wshShell
Echo: Dim strFilePath, strFolderPath, strKey, strLeftString
Echo: Dim strLine, strSection, strTempDir, strTempFile, strValue
Echo:
Echo: strFilePath = Trim^(myFilePath^)
Echo: strSection = Trim^(mySection^)
Echo: strKey = Trim^(myKey^)
Echo: strValue = Trim^(myValue^)
Echo:
Echo: Set objFSO = CreateObject^("Scripting.FileSystemObject"^)
Echo: Set wshShell = CreateObject^("WScript.Shell"^)
Echo:
Echo: strTempDir = wshShell.ExpandEnvironmentStrings^("%%TEMP%%"^)
Echo: strTempFile = objFSO.BuildPath^(strTempDir, objFSO.GetTempName^)
Echo:
Echo: Set objOrgIni = objFSO.OpenTextFile^(strFilePath, ForReading, True^)
Echo: Set objNewIni = objFSO.CreateTextFile^(strTempFile, False, False^)
Echo:
Echo: blnInSection = False
Echo: blnSectionExists = False
Echo: ' Check if the specified key already exists
Echo: blnKeyExists = ^(ReadIni^(strFilePath, strSection, strKey^) ^<^> ""^)
Echo: blnWritten = False
Echo:
Echo: ' Check if path to INI file exists, quit if not
Echo: strFolderPath = Mid^(strFilePath, 1, InStrRev^(strFilePath, "\"^)^)
Echo: If Not objFSO.FolderExists^(strFolderPath^) Then
Echo: WScript.Echo "Erreur: Echec de WriteIni, dossier (" _
Echo: ^& strFolderPath ^& ") fichier ini " _
Echo: ^& strFilePath ^& " non trouv‚ !"
Echo: Set objOrgIni = Nothing
Echo: Set objNewIni = Nothing
Echo: Set objFSO = Nothing
Echo: WScript.Quit 1
Echo: End If
Echo:
Echo: While objOrgIni.AtEndOfStream = False
Echo: strLine = Trim^(objOrgIni.ReadLine^)
Echo: If blnWritten = False Then
Echo: If LCase^(strLine^) = "[" ^& LCase^(strSection^) ^& "]" Then
Echo: blnSectionExists = True
Echo: blnInSection = True
Echo: ElseIf InStr^(strLine, "["^) = 1 Then
Echo: blnInSection = False
Echo: End If
Echo: End If
Echo:
Echo: If blnInSection Then
Echo: If blnKeyExists Then
Echo: intEqualPos = InStr^(1, strLine, "=", vbTextCompare^)
Echo: If intEqualPos ^> 0 Then
Echo: strLeftString = Trim^(Left^(strLine, intEqualPos - 1^)^)
Echo: If LCase^(strLeftString^) = LCase^(strKey^) Then
Echo: ' Only write the key if the value isn't empty
Echo: ' Modification by Johan Pol
Echo: If strValue ^<^> "" Then
Echo: objNewIni.WriteLine strKey ^& "=" ^& strValue
Echo: End If
Echo: blnWritten = True
Echo: blnInSection = False
Echo: End If
Echo: End If
Echo: If Not blnWritten Then
Echo: objNewIni.WriteLine strLine
Echo: End If
Echo: Else
Echo: objNewIni.WriteLine strLine
Echo: ' Only write the key if the value isn't empty
Echo: ' Modification by Johan Pol
Echo: If strValue ^<^> "" Then
Echo: objNewIni.WriteLine strKey ^& "=" ^& strValue
Echo: End If
Echo: blnWritten = True
Echo: blnInSection = False
Echo: End If
Echo: Else
Echo: objNewIni.WriteLine strLine
Echo: End If
Echo: Wend
Echo:
Echo: If blnSectionExists = False Then ' section doesn't exist
Echo: objNewIni.WriteLine
Echo: objNewIni.WriteLine "[" ^& strSection ^& "]"
Echo: ' Only write the key if the value isn't empty
Echo: ' Modification by Johan Pol
Echo: If strValue ^<^> "" Then
Echo: objNewIni.WriteLine strKey ^& "=" ^& strValue
Echo: End If
Echo: End If
Echo:
Echo: objOrgIni.Close
Echo: objNewIni.Close
Echo:
Echo: ' Delete old INI file
Echo: objFSO.DeleteFile strFilePath, True
Echo: ' Rename new INI file
Echo: objFSO.MoveFile strTempFile, strFilePath
Echo:
Echo: Set objOrgIni = Nothing
Echo: Set objNewIni = Nothing
Echo: Set objFSO = Nothing
Echo: Set wshShell = Nothing
Echo:End Sub)>"%OutputFile%"
Goto :Eof
:: =====================================
:: Icône 3Shape sous forme de code batch
:: =====================================
:Icon-3Shape
Set "OutputFile=%~1\3Shape.ico"
Set "TempFile=%temp%\3Shape64.ico.h64"
:: Si le dossier de destination n'existe pas, on le crée
If Not Exist "%~1" MD "%~1"
:: Icône 3Shape sous forme de fichier certificat
(
Echo: -----BEGIN CERTIFICATE-----
Echo: AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAPBTIIjwUyF88FMhOPBTIFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAPBTIfzwUyPs8FMj/PBTI/zwUyPs8FMjSPBTIkTwU
Echo: yE88FMgSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTISDwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI+zwUyM08FMiLPBTISjwUyA8AAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwU
Echo: yJs8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj4PBTIxTwUyIM8FMhCPBTICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAA8FMijPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyPU8FMi9PBTIezwU
Echo: yDk8FMgHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIgzwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI8DwUyLU8FMhyPBTIMDwUyAUAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwU
Echo: yFs8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTIvjwUyKU8FMjdPBTI/TwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMjpPBTIrDwUyGk8FMgnPBTIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAA8FMgzPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI1zwU
Echo: yAMAAAAAPBTIATwUyDc8FMidPBTI8zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyOE8FMiiPBTIXzwU
Echo: yB48FMgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIDTwUyPs8FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyN48FMgDAAAAAAAAAAAAAAAAAAAAADwUyBI8FMhtPBTI0TwU
Echo: yP08FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj9PBTI2DwUyJg8FMhVPBTIFzwUyAEAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAA8FMjePBTI/zwUyP88FMj/PBTI/zwUyP88FMj+PBTIVgAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAA8FMg3PBTImTwUyO88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yPs8FMjPPBTIjjwUyEw8FMgRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAPBTItDwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yOE8FMgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMgNPBTIYTwU
Echo: yMQ8FMj8PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI+DwUyMY8FMiFPBTIRTwU
Echo: yAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyIo8FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTImgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAPBTIKzwUyIs8FMjnPBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj1PBTIwDwUyH48FMg9PBTICgAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAA8FMhgPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyPw8FMhFAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTICDwU
Echo: yFM8FMi3PBTI+TwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yPE8FMi5PBTIdjwUyDc8FMgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAPBTINzwUyP88FMj/PBTI/zwUyP88FMjcPBTI/zwU
Echo: yP88FMj/PBTI3TwUyA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyCA8FMh+PBTI3TwUyP48FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI7TwUyLU8FMhzPBTIMzwU
Echo: yAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyA48FMj7PBTI/zwU
Echo: yP88FMj/PBTIqjwUyOc8FMj/PBTI/zwUyP88FMiTAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwU
Echo: yAQ8FMhGPBTIqjwUyPU8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMjrPBTIsTwUyHI8FMg0PBTICQAAAAAAAAAAAAAAAAAA
Echo: AAA8FMgBPBTI3zwUyP88FMj/PBTI/zwUyNo8FMh2PBTI/zwUyP88FMj/PBTI+zwU
Echo: yD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMgWPBTIcTwUyNI8FMj9PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yO88FMiwPBTIKgAAAAAAAAAAAAAAADwUyLU8FMj/PBTI/zwUyP88FMj5PBTIJjwU
Echo: yOo8FMj/PBTI/zwUyP88FMjYPBTICwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAA8FMgBPBTIOjwUyJo8FMjvPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyOw8FMghAAAAAAAAAAA8FMiKPBTI/zwU
Echo: yP88FMj/PBTI/zwUyEs8FMh6PBTI/zwUyP88FMj/PBTI/zwUyIsAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIDzwUyGI8FMjEPBTI+zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTIkQAA
Echo: AAAAAAAAPBTIXzwUyP88FMj/PBTI/zwUyP88FMiCPBTIEDwUyOs8FMj/PBTI/zwU
Echo: yP88FMj6PBTIOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAADwUyCw8FMiLPBTI5jwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyLkAAAAAAAAAADwUyDU8FMj/PBTI/zwUyP88FMj/PBTIugAA
Echo: AAA8FMh9PBTI/zwUyP88FMj/PBTI/zwUyNI8FMgJAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyAk8FMhTPBTItTwU
Echo: yPg8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMicAAAAAAAAAAA8FMgOPBTI+zwU
Echo: yP88FMj/PBTI/zwUyO08FMgFPBTIETwUyO08FMj/PBTI/zwUyP88FMj/PBTIhAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAA8FMgfPBTIgDwUyOg8FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj4PBTIMQAA
Echo: AAAAAAAAPBTIATwUyN08FMj/PBTI/zwUyP88FMj9PBTILQAAAAA8FMiBPBTI/zwU
Echo: yP88FMj/PBTI/zwUyPg8FMgzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMgQPBTIpDwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMjmPBTIRwAAAAAAAAAAAAAAAAAAAAA8FMiyPBTI/zwUyP88FMj/PBTI/zwU
Echo: yGUAAAAAPBTIEzwUyO88FMj/PBTI/zwUyP88FMj/PBTIzTwUyAcAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAADwUyAY8FMjhPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMiuPBTIFwAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIiDwU
Echo: yP88FMj/PBTI/zwUyP88FMieAAAAAAAAAAA8FMiEPBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMh9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMgOPBTI5zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyPA8FMhiPBTIAQAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAADwUyFw8FMj/PBTI/zwUyP88FMj/PBTI1wAAAAAAAAAAPBTIFjwU
Echo: yPA8FMj/PBTI/zwUyP88FMj/PBTI9jwUyC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMghPBTIxjwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyMA8FMgjAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMgyPBTI/zwUyP88FMj/PBTI/zwU
Echo: yPk8FMgYAAAAAAAAAAA8FMiIPBTI/zwUyP88FMj/PBTI/zwUyP88FMjHPBTIBQAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwU
Echo: yAE8FMhfPBTI7zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI9zwU
Echo: yHg8FMgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIDDwU
Echo: yPk8FMj/PBTI/zwUyP88FMj/PBTITgAAAAAAAAAAPBTIGDwUyPI8FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyHYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAADwUyBY8FMirPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI0TwUyDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAADwUyAE8FMjaPBTI/zwUyP88FMj/PBTI/zwUyIkAAAAAAAAAAAAA
Echo: AAA8FMiNPBTI/zwUyP88FMj/PBTI/zwUyP88FMj0PBTIKQAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyE48FMjlPBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj6PBTIjDwUyAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIrzwUyP88FMj/PBTI/zwU
Echo: yP88FMjDAAAAAAAAAAAAAAAAPBTIHDwUyPQ8FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yMI8FMgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIDTwUyJk8FMj8PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMjePBTIQgAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwU
Echo: yIQ8FMj/PBTI/zwUyP88FMj/PBTI8jwUyAwAAAAAAAAAAAAAAAA8FMiRPBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTIbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIPDwU
Echo: yNo8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP08FMigPBTIEAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAA8FMhYPBTI/zwUyP88FMj/PBTI/zwUyP88FMg+AAAAAAAA
Echo: AAAAAAAAPBTIHjwUyPU8FMj/PBTI/zwUyP88FMj/PBTI/zwUyPI8FMglAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAA8FMgHPBTIhTwUyPo8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yOk8FMhUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTILTwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTIewAAAAAAAAAAAAAAAAAAAAA8FMiVPBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTIvjwUyAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAA8FMgsPBTIzDwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyLI8FMgaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwU
Echo: yAo8FMj3PBTI/zwUyP88FMj/PBTI/zwUyLcAAAAAAAAAAAAAAAAAAAAAPBTIITwU
Echo: yPY8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMhsAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyAM8FMhwPBTI9TwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI8jwUyGY8FMgCAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAA8FMgBPBTI1TwUyP88FMj/PBTI/zwUyP88FMjtPBTICAAA
Echo: AAAAAAAAAAAAAAAAAAA8FMiZPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI8jwU
Echo: yCcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyB88FMi7PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTIxDwUyCYAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyKo8FMj/PBTI/zwU
Echo: yP88FMj/PBTI/jwUyDcAAAAAAAAAAAAAAAAAAAAAPBTIJDwUyPc8FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMjTPBTIFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwU
Echo: yFw8FMjtPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj4PBTIezwU
Echo: yAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAA8FMh/PBTI/zwUyP88FMj/PBTI/zwUyP88FMh2AAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAA8FMidPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyNs8FMhEPBTIAQAA
Echo: AAAAAAAAPBTIHjwUyKk8FMj9PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMjTPBTINAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAPBTIUzwUyP88FMj/PBTI/zwUyP88FMj/PBTItwAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAPBTIJzwUyPg8FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/TwUyNU8FMisPBTIwTwUyPc8FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyPw8FMiQPBTICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyCg8FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyO08FMgIAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMinPBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyOA8FMhFAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAA8FMgIPBTI8zwUyP88FMj/PBTI/zwUyP88FMj+PBTINQAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAPBTITDwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyKM8FMgSAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyNA8FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yG8AAAAAAAAAAAAAAAAAAAAAAAAAADwUyBc8FMj4PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI6zwU
Echo: yFc8FMgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMikPBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMiqAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMgDPBTI6zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTItzwUyBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAPBTIeTwUyP88FMj/PBTI/zwUyP88FMj/PBTI5TwUyAUAAAAAAAAAAAAA
Echo: AAAAAAAAPBTIAjwUyOk8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj0PBTIazwUyAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyE48FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP48FMg5AAAAAAAAAAAAAAAAAAAAADwUyBY8FMj4PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMjKPBTIKAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMgiPBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTInwAAAAAAAAAAAAAAAAAAAAA8FMhaPBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyPk8FMiBPBTIBgAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAPBTIBzwUyO48FMj/PBTI/zwUyP88FMj/PBTI/zwUyPo8FMhHAAAAAAAA
Echo: AAA8FMgXPBTI3DwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yNg8FMg6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMjKPBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI+DwUyKE8FMiMPBTI5DwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/TwUyJY8FMgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTInjwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI5TwUyEoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAADwUyHM8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTIqzwUyBQAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FMhIPBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMjuPBTIXTwU
Echo: yAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIHDwU
Echo: yP48FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMi9PBTIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAADwUyAU8FMjpPBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyPY8FMhyPBTIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBTIvTwUyP88FMj/PBTI/zwU
Echo: yP88FMj/PBTI/zwUyP88FMj/PBTI/zwUyM48FMgsAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwU
Echo: yHc8FMj/PBTI/zwUyP88FMj/PBTI/zwUyP88FMj/PBTI+jwUyIY8FMgGAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAA8FMgZPBTI8jwUyP88FMj/PBTI/zwUyP88FMj/PBTI2zwU
Echo: yDsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwUyFQ8FMj1PBTI/zwU
Echo: yP88FMj9PBTImTwUyA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAPBTIHjwUyGw8FMh0PBTIMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Echo: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////
Echo: /////////////////////////////8P/////////gD////////8AA////////wAA
Echo: P///////AAAD//////8AAAA//////wAAAAP/////AEAAAD////8AeAAAA////4B/
Echo: AAAAf///gD/AAAAH//+AP/gAAAB//4Af/gAAAAf/gA//wAAAAH+AD//wAAAAB4AH
Echo: //4AAAABwAP//4AAAADAA///8AAAAMAB///+AAAAwID///+AAADAAP////AAAMBA
Echo: f////AAB4EA////+AAPgYD////4AB+BgH////AAf4DAP///wAD/gMA///+AA/+A4
Echo: B///wAH/8DgD//8AB//wHAP//gAP//AcAf/4AD//8B4A//AAf//wHgD/wAD///AP
Echo: AH+AA///+A8APwAH///4D4AMAB////gPgAAAP///+AfAAAD////4B8AAAf////wH
Echo: wAAD/////AfAAA/////8A8AAH/////wDwAB//////APAAP/////8AYAD//////4A
Echo: AAf//////gAAH//////+AAA///////4AAH///////gAB///////+AAP///////8A
Echo: D////////wAf////////AH////////+A/////////8P/////////////////////
Echo: //////////////////8=
Echo: -----END CERTIFICATE-----
) >%TempFile%
:: Décodage du fichier (icône)
Certutil.exe -f -decode "%TempFile%" "%OutputFile%" >Nul 2>Nul
Echo Extraction de l'ic“ne 3Shape termin‚
Del /F "%TempFile%"
Goto :Eof
:: =====================================
:: Fonction de nettoyage du dossier temp
:: =====================================
:CleanTemp
Del "%temp%\ini.vbs">Nul 2>Nul
Del "%temp%\Rustdesk*.*">Nul 2>Nul
Del "%temp%\VirtualDisplay*.*">Nul 2>Nul
Goto :Eof
:: ==========================
:: Nettoyage et fin du script
:: ==========================
:End
Call :CleanTemp
:: ============
:: Fin du batch
:: ============
:Eof
::
:: =============================
:: HISTORIQUE DES MODIFICATIONS
:: =============================
::
:: Version 2.0 du 05/09/2025
:: - Grosses modifications sur la partie création du batch de connexion autonôme :
:: - Si lancement depuis un autre dossier que C:\Utilitaires\RustDesk => Demande si lancement ou installation
:: - Correction d'un bogue sur l'extraction de l'icône 3Shape et l'ajout des icônes sur les raccourcis.
:: - Ajout du téléchargement de RustDesk lors du processus de création du raccourci.
::
:: Version 1.9 du 01/07/2025
:: - Modification du fichier de connexion client, pour le rendre "autonôme" (Installation auto dans C:\Utilitaires\Rustdesk et création raccourci bureau)
:: Cette modification permet de lancer le batch de connexion client depuis n'importe ou. Il "s'installera" automatique dans le répertoire indiqué ci-dessus.
:: - Suppression de la fonctionnalité d'utilisation d'un serveur privé (Fonctionnalité non utilisée) => Le code sera sans doute mis dans un batch externe.
:: - Ajout dans le batch client de l'écriture de la configuration de base (Affichage adaptatif, affichage curseur distant, etc ...).
:: - Grosse modification sur la méthode de récupération du setup de Rustdesk (Gestion online/offline, fichier local/distant).
:: - Ajout dans les menus d'une indication sur les droits d'accès du dossier courant (R pour READ et W pour WRITE).
:: - Correction d'un bogue sur le batch client qui ne téléchargait pas l'Exe Rustdesk si nécéssaire.
:: - Modification de la validation du mot de passe. Une deuxième saisie est maintenant nécéssaire.
:: - Ajout d'un contrôle sur la connexion vers Github (site de téléchargement de Rustdesk).
:: - Déplacement de certaines fonctions et ré-écriture de certaines parties du code.
:: - Ajout d'un contrôle de saisie sur la fonction Server_Link.
:: - Légère modification sur l'affichage des menus.
::
:: Version 1.8 du 20/05/2025
:: - Corrections bogue intermittant auto-suppression
:: - Optimisation recherche nom du dernier exécutable
::
:: Version 1.7 du 25/02/2025
:: - Corrections mineures du code
:: - Modifications et Corrections sur certains textes
:: - Déplacement de l'étape de configuration du mot de passe
:: - Ajout du contrôle de l'installation de Rustdesk sur la mise à jour
:: - Suppression de l'utilisation de l'option --config (ne fonctionne pas)
:: - Ajout de la suppression de l'ancien installateur en cas de téléchargement
:: - Ajout de la configuration d'un serveur de rendez-vous (hbbs) privé ou publique
:: - Modification de la méthode d'écriture des fichiers de configuration (format .Ini)
:: - Ajout d'instructions concernant le mot de passe et test de la longueur (mini 8 caractères)
:: - Ajout de l'affichage de l'ID et du mot de passe à la fin de l'installation du mode serveur
:: - Correction d'un bogue à l'extraction de l'icône 3Shape si le dossier de destination n'existe pas
:: - Ajout d'une option dans le menu Outils, pour supprimer ou activer le serveur de rendez-vous privé
:: - Modification du contrôle du nom de la machine pour la création du lien vers un serveur (Prise en charge réélle de l'IP)
:: - Ajout du code de création du batch de connexion vers un serveur Rustdesk par l'adresse IP ou le nom netbios (Le code avait été oublié sur batch de test)
:: - Modification du batch de connexion vers un serveur Rustdesk. Prise en charge des 3 possibilités d'utilisation de Rustdesk ou téléchargement si nécessaire
::
:: Version 1.6 du 29/01/2025
:: - Modification de l'affichage du titre
:: - Correction d'un bogue sur la mise à jour
:: - Ajout de commentaires sur certaines partie du code
:: - Modification du code d'écriture de la configuration client
:: - Ajout du lien vers les conditions d'utilisation de Rustdesk
:: - Modification du code de l'installation du pilote d'écran virtuel
:: - Deuxième changement de nom (afin d'être en adéquation pour l'utilisation par le groupe)
:: - Suppression provisoire du paramétrage du thème Dark (non fonctionnel pour le moment)
:: - Ajout des options :
:: - allow-auto-disconnect sur 60 min
:: - i444 = 'Y'
:: - follow_remote_window = 'Y'
:: - follow_remote_cursor = 'Y'
::
:: Version 1.5 du 26/01/2025
:: - Corrections de bogues divers
:: - Ajout du nettoyage du dossier Temp
:: - Ajout d'un menu supplémantaire pour les outils
:: - Ajout de la possibilité de générer un nouvel ID
:: - Ajout du téléchargement du script depuit Techdental et de la mise à jour du
:: script en cours si lancé depuis le dossier d'installation (autoupdate)
:: - Ajout d'une fonction de recherche de l'exécutable Rustdesk dans différents dossiers
::
:: Version 1.4 du 20/01/2025
:: - Premier changement de nom
:: - Ajout de l'installation du pilote d'écran virtuel
:: - Ajout d'un icône 3Shape embarqué (extrait à la demande)
:: - Ajout de l'option de copie du batch et des outils dans C:\Utilitaires\RustDesk
:: - Ajout de l'option de création d'un raccourcis bureau vers un serveur RustDesk
::
:: Version 1.3 du 04/12/2024
:: - Modification de la numérotation de version 0.2 => 1.2
:: - Séparation de l'installation client et de la mise à jour
::
:: Version 1.2 du 27/09/2024
:: - Ajout du mode d'installation Client
:: - Supression du mot de passe inscrit dans le code
:: - Ajout de la configuration de plusieurs paramètes
:: - Gestion de la mise à jour de l'exécutable dans le dossier d'installation
:: - Gestion du téléchargement de la dernière version du programme d'installation
:: - Ajout de la désinstallation de RustDesk avec supression des fichiers de configuration.
::
:: Version 1 du 21/05/2021
:: - Première version
::
::