From 975fca2f74746d68a335625fb9d040bee4e99009 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uwe=20St=C3=B6hr?= Date: Tue, 15 May 2007 22:43:05 +0000 Subject: [PATCH] installer: - infrastructures: merge the InstallActions file as requested by Christian - updated documentation and structure graphic - some more changes due to update to MiKTeX 2.6 - updates git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18357 a592a061-630c-0410-9148-cb99ea01b6c8 --- .../installer/LyXWinInstaller/Aspell.nsh | 10 +- .../installer/LyXWinInstaller/ConfigLyX.nsh | 27 +++ .../InstallActions-complete-small.nsh | 124 ++++++++++++++ .../LyXWinInstaller/InstallActions-small.nsh | 157 ------------------ ...omplete.nsh => InstallThirdPartyProgs.nsh} | 122 ++------------ .../installer/LyXWinInstaller/LaTeX.nsh | 24 +++ .../LyXWinInstaller/LyXInstaller-complete.nsi | 13 +- .../LyXWinInstaller/LyXInstaller-small.nsi | 5 +- .../LyXWinInstaller/MissingPrograms.nsh | 13 +- .../installer/LyXWinInstaller/Updated.nsh | 5 +- .../informations/InstallerStructure.odg | Bin 15809 -> 15601 bytes .../informations/InstallerStructure.pdf | Bin 30833 -> 30664 bytes 12 files changed, 221 insertions(+), 279 deletions(-) create mode 100644 development/Win32/packaging/installer/LyXWinInstaller/InstallActions-complete-small.nsh delete mode 100644 development/Win32/packaging/installer/LyXWinInstaller/InstallActions-small.nsh rename development/Win32/packaging/installer/LyXWinInstaller/{InstallActions-complete.nsh => InstallThirdPartyProgs.nsh} (55%) diff --git a/development/Win32/packaging/installer/LyXWinInstaller/Aspell.nsh b/development/Win32/packaging/installer/LyXWinInstaller/Aspell.nsh index 20072a676a..752a43e843 100644 --- a/development/Win32/packaging/installer/LyXWinInstaller/Aspell.nsh +++ b/development/Win32/packaging/installer/LyXWinInstaller/Aspell.nsh @@ -30,7 +30,6 @@ FunctionEnd #-------------------------------- - !if ${INSTALLER_TYPE} == "NotUpdate" # only for Small and Complete installer Function DownloadDictionary @@ -106,11 +105,16 @@ FunctionEnd #-------------------------------- - !if ${INSTALLER_TYPE} == "NotUpdate" # only for Small and Complete installer Function InstallAspellDictionary - + # install Aspell dictionaries + + # we only have a norwegian dictionary available + ${if} $LangCode == "nb_NO" + StrCpy $LangCode "no_NO" + ${endif} + StrCpy $AspellInstallYes "" # install the english dictionary if not already installed diff --git a/development/Win32/packaging/installer/LyXWinInstaller/ConfigLyX.nsh b/development/Win32/packaging/installer/LyXWinInstaller/ConfigLyX.nsh index 70dcd0e0bf..535ff17ae7 100644 --- a/development/Win32/packaging/installer/LyXWinInstaller/ConfigLyX.nsh +++ b/development/Win32/packaging/installer/LyXWinInstaller/ConfigLyX.nsh @@ -109,6 +109,33 @@ Function ConfigureLyX # this folder is automatically created by LyX when it is first started but we want to start LyX with a specific session file, # so we create this folder before LyX starts and copy there the session file Call CreateAppPathSub # function from LyXUtils.nsh + + # delete unnecessary files + ${if} $DelPythonFiles == "True" + Delete $INSTDIR\bin\python.exe + Delete $INSTDIR\bin\python25.dll + Delete $INSTDIR\bin\Python-License.txt + RMDir /r $INSTDIR\bin\Lib + RMDir /r $INSTDIR\bin\DLLs + ${endif} + RMDir /r $INSTDIR\external + + # create a bat-file to start configure in a console window so that the user see the progress + # of the configuration and to have a signal when the configuration is ready to start LyX + # this is important when LyX is installed together with MiKTeX or when LyX is installed for the first + # time on a computer, because the installation of missing LaTeX-files required by LyX could last minutes + # a batch file is needed because simply calling + # ExecWait '"$PythonPath\python.exe" "$INSTDIR\Resources\configure.py"' + # creates the config files in $PythonPath + ${if} $PythonPath == "" + StrCpy $PythonPath "$INSTDIR\bin" + ${endif} + StrCpy $1 $INSTDIR 2 # get drive letter + FileOpen $R1 "$INSTDIR\Resources\configLyX.bat" w + FileWrite $R1 '$1$\r$\n\ + cd $INSTDIR\Resources\$\r$\n\ + "$PythonPath\python.exe" configure.py' + FileClose $R1 FunctionEnd diff --git a/development/Win32/packaging/installer/LyXWinInstaller/InstallActions-complete-small.nsh b/development/Win32/packaging/installer/LyXWinInstaller/InstallActions-complete-small.nsh new file mode 100644 index 0000000000..f60d744c60 --- /dev/null +++ b/development/Win32/packaging/installer/LyXWinInstaller/InstallActions-complete-small.nsh @@ -0,0 +1,124 @@ +# this file contains the main installer sections + +!if ${INSTALLER_VERSION} == "Complete" + + # The '-' makes the section invisible. + Section "-Installation actions" SecInstallation + + # dummy actions to avoid NSIS warnings + StrCpy $FileName "" + StrCpy $NewString "" + StrCpy $OldString "" + + # extract all files + SetOutPath "$INSTDIR" + File /r "${PRODUCT_SOURCEDIR}\bin" + File /r "${PRODUCT_SOURCEDIR}\etc" + File /r "${PRODUCT_SOURCEDIR}\Resources" + File /r "${PRODUCT_SOURCEDIR}\external" + + # install MiKTeX if not already installed + Call InstallMiKTeX # function from LaTeX.nsh + + # install Ghostscript if not already installed + Call Ghostscript # function from InstallThirdPartyProgs.nsh + + # install ImageMagick if not already installed + Call ImageMagick # function from InstallThirdPartyProgs.nsh + + # install Aspell if not already installed + Call InstallAspell # function from Aspell.nsh + + # install Aiksaurus if not already installed + Call Aiksaurus # function from InstallThirdPartyProgs.nsh + + # install GSview if not already installed and the user selected it + Call PostScript # function from InstallThirdPartyProgs.nsh + + # install JabRef if not already installed and the user selected it + Call BibTeX # function from InstallThirdPartyProgs.nsh + + # install the LaTeX class files that are delivered with LyX + # and enable MiKTeX's automatic package installation + Call ConfigureMiKTeX # Function from LaTeX.nsh + + # install Aspell dictionaries + Call InstallAspellDictionary # function from Aspell.nsh + + # configure LyX + Call ConfigureLyX # Function from ConfigLyX.nsh + + # refresh shell, update the environment variables otherwise the first + # configure run will fail when MiKTeX was just installed + System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) (${SHCNE_ASSOCCHANGED}, ${SHCNF_IDLIST}, 0, 0)' + + # create Uninstaller + WriteUninstaller "${PRODUCT_UNINSTALL_EXE}" + + # run LyX's configure script + MessageBox MB_OK|MB_ICONINFORMATION "$(LatexConfigInfo)" + ExecWait '"$INSTDIR\Resources\configLyX.bat"' + Delete "$INSTDIR\Resources\configLyX.bat" + + # ask to update MiKTeX + Call UpdateMiKTeX # function from latex.nsh + + SectionEnd + +!endif # endif ${INSTALLER_VERSION} == "Complete" + +# ---------------------------------------------------------------------------- + +!if ${INSTALLER_VERSION} == "Small" + + # The '-' makes the section invisible. + Section "-Installation actions" SecInstallation + + # dummy actions to avoid NSIS warnings + StrCpy $FileName "" + StrCpy $NewString "" + StrCpy $OldString "" + + # extract all files + SetOutPath "$INSTDIR" + File /r "${PRODUCT_SOURCEDIR}\bin" + File /r "${PRODUCT_SOURCEDIR}\etc" + File /r "${PRODUCT_SOURCEDIR}\Resources" + + # install GhostScript if not already installed + Call Ghostscript # function from InstallThirdPartyProgs.nsh + + # install ImageMagick if not already installed + Call ImageMagick # function from InstallThirdPartyProgs.nsh + + # install Aspell if not already installed + Call InstallAspell # function from Aspell.nsh + + # install Aiksaurus if not already installed + Call Aiksaurus # function from InstallThirdPartyProgs.nsh + + # install the LaTeX class files that are delivered with LyX + # and enable MiKTeX's automatic package installation + Call ConfigureMiKTeX # Function from LaTeX.nsh + + # install Aspell dictionaries + Call InstallAspellDictionary # function from Aspell.nsh + + # configure LyX + Call ConfigureLyX # Function from ConfigLyX.nsh + + # create Uninstaller + WriteUninstaller "${PRODUCT_UNINSTALL_EXE}" + + # run LyX's configure script + MessageBox MB_OK|MB_ICONINFORMATION "$(LatexConfigInfo)" + ExecWait '"$INSTDIR\Resources\configLyX.bat"' + Delete "$INSTDIR\Resources\configLyX.bat" + + # ask to update MiKTeX + Call UpdateMiKTeX # function from latex.nsh + + SectionEnd + +!endif # endif ${INSTALLER_VERSION} == "Small" + diff --git a/development/Win32/packaging/installer/LyXWinInstaller/InstallActions-small.nsh b/development/Win32/packaging/installer/LyXWinInstaller/InstallActions-small.nsh deleted file mode 100644 index 2205506181..0000000000 --- a/development/Win32/packaging/installer/LyXWinInstaller/InstallActions-small.nsh +++ /dev/null @@ -1,157 +0,0 @@ -# this file contains the main installer section - -# The '-' makes the section invisible. -Section "-Installation actions" SecInstallation - - # dummy actions to avoid NSIS warnings - StrCpy $FileName "" - StrCpy $NewString "" - StrCpy $OldString "" - - # extract all files - SetOutPath "$INSTDIR" - File /r "${PRODUCT_SOURCEDIR}\bin" - File /r "${PRODUCT_SOURCEDIR}\etc" - File /r "${PRODUCT_SOURCEDIR}\Resources" - - # install GhostScript if not already installed - Call Ghostscript - - # install ImageMagick if not already installed - Call ImageMagick - - # install Aspell if not already installed - Call InstallAspell # function from Aspell.nsh - - # install Aiksaurus if not already installed - Call Aiksaurus - - # install the LaTeX class files that are delivered with LyX - # and enable MiKTeX's automatic package installation - Call ConfigureMiKTeX # Function from LaTeX.nsh - - # install Aspell dictionaries - ${if} $LangCode == "nb_NO" - StrCpy $LangCode "no_NO" # we only have a norwegian dictionary available - ${endif} - Call InstallAspellDictionary # function from Aspell.nsh - - # configure LyX - Call ConfigureLyX # Function from ConfigLyX.nsh - - # delete unnecessary files - ${if} $DelPythonFiles == "True" - Delete $INSTDIR\bin\python.exe - Delete $INSTDIR\bin\python25.dll - Delete $INSTDIR\bin\Python-License.txt - RMDir /r $INSTDIR\bin\Lib - RMDir /r $INSTDIR\bin\DLLs - ${endif} - RMDir /r $INSTDIR\external - - # create Uninstaller - WriteUninstaller "${PRODUCT_UNINSTALL_EXE}" - - # run LyX's configure script - # create a bat-file to start configure in a console window so that the user see the progress - # of the configuration and to have a signal when the configuration is ready to start LyX - # this is important when LyX is installed together with MiKTeX or when LyX is installed for the first - # time on a computer, because the installation of missing LaTeX-files required by LyX could last minutes - # a batch file is needed because simply calling ExecWait '"$PythonPath\python.exe" "$INSTDIR\Resources\configure.py"' - # creates the config files in $PythonPath - ${if} $PythonPath == "" - StrCpy $PythonPath "$INSTDIR\bin" - ${endif} - StrCpy $1 $INSTDIR 2 # get drive letter - FileOpen $R1 "$INSTDIR\Resources\configLyX.bat" w - FileWrite $R1 '$1$\r$\n\ - cd $INSTDIR\Resources\$\r$\n\ - "$PythonPath\python.exe" configure.py' - FileClose $R1 - MessageBox MB_OK|MB_ICONINFORMATION "$(LatexConfigInfo)" - ExecWait '"$INSTDIR\Resources\configLyX.bat"' - Delete "$INSTDIR\Resources\configLyX.bat" - - # ask to update MiKTeX - ${if} $MiKTeXInstalled == "yes" - MessageBox MB_YESNO|MB_ICONINFORMATION "$(MiKTeXInfo)" IDYES UpdateNow IDNO UpdateLater - UpdateNow: - StrCpy $0 $LaTeXPath -4 # remove "\bin" - ExecWait '"$LaTeXPath\copystart.exe" "$0\config\update.dat"' # run MiKTeX's update wizard - UpdateLater: - ${endif} - - # save MiKTeX's install path to be able to remove LyX's LaTeX-files in the uninstaller - FileOpen $R1 "$INSTDIR\Resources\uninstallPaths.dat" w - FileWrite $R1 '$LaTeXPath' - FileClose $R1 - -SectionEnd - -# ------------------------------------------- - -Function Ghostscript - - # if GhostScript is not installed - ${if} $GhostscriptPath == "" - # register Ghostscript - WriteRegStr HKLM "SOFTWARE\GPL Ghostscript\${GhostscriptVersion}" "GS_DLL" "${GhostscriptDir}\bin\gsdll32.dll" - WriteRegStr HKLM "SOFTWARE\GPL Ghostscript\${GhostscriptVersion}" "GS_LIB" "${GhostscriptDir}\lib;${GhostscriptDir}\fonts;${GhostscriptDir}\Resource" - - WriteRegStr HKLM "SOFTWARE\GPL Ghostscript" "OnlyWithLyX" "Yes${PRODUCT_VERSION_SHORT}" # special entry to tell the uninstaller that it was installed with LyX - StrCpy $GhostscriptPath "${GhostscriptDir}\bin" - ${else} - # delete unnecessary files - RMDir /r ${GhostscriptDir} - ${endif} - -FunctionEnd - -# ------------------------------------------- - -Function ImageMagick - - # if ImageMagick is not installed - ${if} $ImageMagickPath == "" - # register ImageMagick - WriteRegStr HKLM "SOFTWARE\Classes\Applications" "AutoRun" "${ImageMagickDir}\convert.exe $$" - WriteRegStr HKLM "SOFTWARE\ImageMagick\${ImageMagickVersion}\Q:16" "BinPath" "${ImageMagickDir}" - WriteRegStr HKLM "SOFTWARE\ImageMagick\${ImageMagickVersion}\Q:16" "CoderModulesPath" "${ImageMagickDir}\modules\coders" - WriteRegStr HKLM "SOFTWARE\ImageMagick\${ImageMagickVersion}\Q:16" "ConfigurePath" "${ImageMagickDir}\config" - WriteRegStr HKLM "SOFTWARE\ImageMagick\${ImageMagickVersion}\Q:16" "FilterModulesPath" "${ImageMagickDir}\modules\filters" - WriteRegStr HKLM "SOFTWARE\ImageMagick\${ImageMagickVersion}\Q:16" "LibPath" "${ImageMagickDir}" - - WriteRegStr HKLM "SOFTWARE\ImageMagick\Current" "BinPath" "${ImageMagickDir}" - WriteRegStr HKLM "SOFTWARE\ImageMagick\Current" "CoderModulesPath" "${ImageMagickDir}\modules\coders" - WriteRegStr HKLM "SOFTWARE\ImageMagick\Current" "ConfigurePath" "${ImageMagickDir}\config" - WriteRegStr HKLM "SOFTWARE\ImageMagick\Current" "FilterModulesPath" "${ImageMagickDir}\modules\filters" - WriteRegStr HKLM "SOFTWARE\ImageMagick\Current" "LibPath" "${ImageMagickDir}" - WriteRegDWORD HKLM "SOFTWARE\ImageMagick\Current" "QuantumDepth" 0x00000010 - WriteRegStr HKLM "SOFTWARE\ImageMagick\Current" "Version" "${ImageMagickVersion}" - - WriteRegStr HKLM "Software\ImageMagick" "OnlyWithLyX" "Yes${PRODUCT_VERSION_SHORT}" # special entry to tell the uninstaller that it was installed with LyX - StrCpy $ImageMagickPath ${ImageMagickDir} - ${else} - # delete unnecessary files - RMDir /r ${ImageMagickDir} - ${endif} - -FunctionEnd - -# ------------------------------------------- - -Function Aiksaurus - - # if Aiksaurus is not installed - ${if} $AiksaurusPath == "" - # extract Aiksaurus' program files - SetOutPath "$INSTDIR\external" - File /r "${PRODUCT_SOURCEDIR}\${AiksaurusInstall}" - # copy the files and register Aiksaurus - CopyFiles "$INSTDIR\${AiksaurusInstall}" "$APPDATA" -# WriteRegStr HKLM "Software\Aiksaurus" "OnlyWithLyX" "Yes${PRODUCT_VERSION_SHORT}" # special entry to tell the uninstaller that it was installed with LyX -# WriteRegStr HKLM "Software\Aiksaurus" "Data Path" "${AiksaurusDir}" - ${endif} - -FunctionEnd - diff --git a/development/Win32/packaging/installer/LyXWinInstaller/InstallActions-complete.nsh b/development/Win32/packaging/installer/LyXWinInstaller/InstallThirdPartyProgs.nsh similarity index 55% rename from development/Win32/packaging/installer/LyXWinInstaller/InstallActions-complete.nsh rename to development/Win32/packaging/installer/LyXWinInstaller/InstallThirdPartyProgs.nsh index 24b3d373d6..f0507cdad8 100644 --- a/development/Win32/packaging/installer/LyXWinInstaller/InstallActions-complete.nsh +++ b/development/Win32/packaging/installer/LyXWinInstaller/InstallThirdPartyProgs.nsh @@ -1,104 +1,4 @@ -# this file contains the main installer section - -# The '-' makes the section invisible. -Section "-Installation actions" SecInstallation - - # dummy actions to avoid NSIS warnings - StrCpy $FileName "" - StrCpy $NewString "" - StrCpy $OldString "" - - # extract all files - SetOutPath "$INSTDIR" - File /r "${PRODUCT_SOURCEDIR}\bin" - File /r "${PRODUCT_SOURCEDIR}\etc" - File /r "${PRODUCT_SOURCEDIR}\Resources" - File /r "${PRODUCT_SOURCEDIR}\external" - - # install MiKTeX if not already installed - Call InstallMiKTeX # function from LaTeX.nsh - - # install Ghostscript if not already installed - Call Ghostscript - - # install ImageMagick if not already installed - Call ImageMagick - - # install Aspell if not already installed - Call InstallAspell # function from Aspell.nsh - - # install Aiksaurus if not already installed - Call Aiksaurus - - # install GSview if not already installed and the user selected it - Call PostScript - - # install JabRef if not already installed and the user selected it - Call BibTeX - - # install the LaTeX class files that are delivered with LyX - # and enable MiKTeX's automatic package installation - Call ConfigureMiKTeX # Function from LaTeX.nsh - - # install Aspell dictionaries - ${if} $LangCode == "nb_NO" - StrCpy $LangCode "no_NO" # we only have a norwegian dictionary available - ${endif} - Call InstallAspellDictionary # function from Aspell.nsh - - # configure LyX - Call ConfigureLyX # Function from ConfigLyX.nsh - - # delete unnecessary files - ${if} $DelPythonFiles == "True" - Delete $INSTDIR\bin\python.exe - Delete $INSTDIR\bin\python25.dll - Delete $INSTDIR\bin\Python-License.txt - RMDir /r $INSTDIR\bin\Lib - RMDir /r $INSTDIR\bin\DLLs - ${endif} - RMDir /r $INSTDIR\external - - # create Uninstaller - WriteUninstaller "${PRODUCT_UNINSTALL_EXE}" - - # run LyX's configure script - # create a bat-file to start configure in a console window so that the user see the progress - # of the configuration and to have a signal when the configuration is ready to start LyX - # this is important when LyX is installed together with MiKTeX or when LyX is installed for the first - # time on a computer, because the installation of missing LaTeX-files required by LyX could last minutes - # a batch file is needed because simply calling ExecWait '"$PythonPath\python.exe" "$INSTDIR\Resources\configure.py"' - # creates the config files in $PythonPath - ${if} $PythonPath == "" - StrCpy $PythonPath "$INSTDIR\bin" - ${endif} - StrCpy $1 $INSTDIR 2 # get drive letter - FileOpen $R1 "$INSTDIR\Resources\configLyX.bat" w - FileWrite $R1 '$1$\r$\n\ - cd $INSTDIR\Resources\$\r$\n\ - "$PythonPath\python.exe" configure.py' - FileClose $R1 - MessageBox MB_OK|MB_ICONINFORMATION "$(LatexConfigInfo)" - ExecWait '"$INSTDIR\Resources\configLyX.bat"' - Delete "$INSTDIR\Resources\configLyX.bat" - - # ask to update MiKTeX - ${if} $MiKTeXInstalled == "yes" - MessageBox MB_YESNO|MB_ICONINFORMATION "$(MiKTeXInfo)" IDYES UpdateNow IDNO UpdateLater - UpdateNow: - StrCpy $0 $LaTeXPath -4 # remove "\bin" - ExecWait '"$LaTeXPath\copystart.exe" "$0\config\update.dat"' # run MiKTeX's update wizard - UpdateLater: - ${endif} - - # save MiKTeX's install path to be able to remove LyX's LaTeX-files in the uninstaller - FileOpen $R1 "$INSTDIR\Resources\uninstallPaths.dat" w - FileWrite $R1 '$LaTeXPath' - FileClose $R1 - -SectionEnd - -# ------------------------------------------- +# this file contains the installation actions for the third-party programs Function Ghostscript @@ -167,9 +67,11 @@ FunctionEnd # ------------------------------------------- -Function PostScript +!if ${INSTALLER_VERSION} == "Complete" -# if no PostScript viewer is installed + Function PostScript + + # if no PostScript viewer is installed ${if} $PSVPath == "" ${if} $InstallGSview == "true" # launch installer @@ -184,13 +86,17 @@ Function PostScript ${endif} ${endif} -FunctionEnd + FunctionEnd + +!endif # endif ${INSTALLER_VERSION} == "Complete" # ------------------------------------------- -Function BibTeX +!if ${INSTALLER_VERSION} == "Complete" -# if no BibTeX editor is installed + Function BibTeX + + # if no BibTeX editor is installed ${if} $BibTeXEditorPath == "" ${if} $InstallJabRef == "true" # launch installer @@ -207,5 +113,7 @@ Function BibTeX ${endif} ${endif} -FunctionEnd + FunctionEnd + +!endif # endif ${INSTALLER_VERSION} == "Complete" diff --git a/development/Win32/packaging/installer/LyXWinInstaller/LaTeX.nsh b/development/Win32/packaging/installer/LyXWinInstaller/LaTeX.nsh index e602e37b6e..c2adbe10e2 100644 --- a/development/Win32/packaging/installer/LyXWinInstaller/LaTeX.nsh +++ b/development/Win32/packaging/installer/LyXWinInstaller/LaTeX.nsh @@ -103,6 +103,10 @@ Function LaTeXActions ${andif} $LaTeXName != "MiKTeX 2.6" StrCpy $LaTeXName "TeXLive" ${endif} + + ${if} $LatexPath == "" + StrCpy $MissedProg "True" + ${endif} FunctionEnd @@ -237,4 +241,24 @@ Function ConfigureMiKTeX # File /r "${LaTeXPackagesDir}" ${endif} # end ${if} $Pointer + # save MiKTeX's install path to be able to remove LyX's LaTeX-files in the uninstaller + FileOpen $R1 "$INSTDIR\Resources\uninstallPaths.dat" w + FileWrite $R1 '$LaTeXPath' + FileClose $R1 + FunctionEnd + +Function UpdateMiKTeX + # installs the LaTeX class files that are delivered with LyX + + # ask to update MiKTeX + ${if} $MiKTeXInstalled == "yes" + MessageBox MB_YESNO|MB_ICONINFORMATION "$(MiKTeXInfo)" IDYES UpdateNow IDNO UpdateLater + UpdateNow: + StrCpy $0 $LaTeXPath -4 # remove "\bin" + ExecWait '"$LaTeXPath\copystart.exe" "$0\config\update.dat"' # run MiKTeX's update wizard + UpdateLater: + ${endif} + +FunctionEnd + diff --git a/development/Win32/packaging/installer/LyXWinInstaller/LyXInstaller-complete.nsi b/development/Win32/packaging/installer/LyXWinInstaller/LyXInstaller-complete.nsi index 0c04d65b0c..f1622d1615 100644 --- a/development/Win32/packaging/installer/LyXWinInstaller/LyXInstaller-complete.nsi +++ b/development/Win32/packaging/installer/LyXWinInstaller/LyXInstaller-complete.nsi @@ -109,6 +109,9 @@ Var UserName # Function to configure LyX !include "ConfigLyX.nsh" +# Function to configure needed third-party programs +!include "InstallThirdPartyProgs.nsh" + # Function for page to install Aspell dictionaries !include "Aspell.nsh" @@ -246,7 +249,7 @@ SectionEnd !insertmacro MUI_FUNCTION_DESCRIPTION_END # the installation section -!include "InstallActions-complete.nsh" +!include "InstallActions-complete-small.nsh" #-------------------------------- # This hook function is called internally by NSIS on installer startup @@ -319,7 +322,13 @@ FunctionEnd #-------------------------------- Function LaunchProduct - Exec ${PRODUCT_BAT} + # call the lyx.exe and not the lyx.bat to show the console window. This is + # necessary because sometimes LyX's configure run that is started by the + # installer fails when MiKTeX was installed together with this installer. + # Showing the console gives the user feedback otherwise he would wonder why + # LyX won't start for minutes while it is downloading LaTeX-packages in the + # background + Exec ${PRODUCT_EXE} FunctionEnd #-------------------------------- diff --git a/development/Win32/packaging/installer/LyXWinInstaller/LyXInstaller-small.nsi b/development/Win32/packaging/installer/LyXWinInstaller/LyXInstaller-small.nsi index 8944077e71..14df4e00b1 100644 --- a/development/Win32/packaging/installer/LyXWinInstaller/LyXInstaller-small.nsi +++ b/development/Win32/packaging/installer/LyXWinInstaller/LyXInstaller-small.nsi @@ -110,6 +110,9 @@ Var UserName # Function to configure LyX !include "ConfigLyX.nsh" +# Function to configure needed third-party programs +!include "InstallThirdPartyProgs.nsh" + # Function for page to install Aspell dictionaries !include "Aspell.nsh" @@ -240,7 +243,7 @@ SectionEnd !insertmacro MUI_FUNCTION_DESCRIPTION_END # the installation section -!include "InstallActions-small.nsh" +!include "InstallActions-complete-small.nsh" #-------------------------------- # This hook function is called internally by NSIS on installer startup diff --git a/development/Win32/packaging/installer/LyXWinInstaller/MissingPrograms.nsh b/development/Win32/packaging/installer/LyXWinInstaller/MissingPrograms.nsh index ae5434765d..9fb0e98c50 100644 --- a/development/Win32/packaging/installer/LyXWinInstaller/MissingPrograms.nsh +++ b/development/Win32/packaging/installer/LyXWinInstaller/MissingPrograms.nsh @@ -1,7 +1,10 @@ Function MissingPrograms + # check if third-party programs are installed # initialize variable, is later set to True when a program was not found - StrCpy $MissedProg "False" + ${if} $MissedProg != "True" # is already True when LaTeX is missing + StrCpy $MissedProg "False" + ${endif} # test if Ghostscript is installed GSloop: @@ -120,9 +123,9 @@ FunctionEnd # --------------------------------------- Function MissingProgramsPage + # generate the page showing the missing programs that will be installed - # generate the installer page - re-read empty page first - StrCpy $0 "2" + StrCpy $0 "2" # start value for the dynamical item numbering !insertmacro MUI_INSTALLOPTIONS_EXTRACT "io_missing_progs.ini" !insertmacro MUI_HEADER_TEXT "$(MissProgHeader)" "" @@ -157,15 +160,15 @@ FunctionEnd Function MissingProgramsPage_LeaveFunction - # this function is needed for the installer page + # this empty function is needed for the installer page FunctionEnd # --------------------------------------- Function EditorCheck - # test if an editor with syntax-highlighting for LaTeX-files is installed + # (check for jEdit, PSPad, WinShell, ConTEXT, Crimson Editor, Vim, TeXnicCenter, LaTeXEditor, WinEdt, LEd, WinTeX) StrCpy $EditorPath "" StrCpy $0 "" diff --git a/development/Win32/packaging/installer/LyXWinInstaller/Updated.nsh b/development/Win32/packaging/installer/LyXWinInstaller/Updated.nsh index 787ae882bd..0f1578967d 100644 --- a/development/Win32/packaging/installer/LyXWinInstaller/Updated.nsh +++ b/development/Win32/packaging/installer/LyXWinInstaller/Updated.nsh @@ -14,6 +14,7 @@ Function UpdateModifiedFiles File "${PRODUCT_SOURCEDIR}\Resources\languages" File "${PRODUCT_SOURCEDIR}\Resources\unicodesymbols" File /r "${PRODUCT_SOURCEDIR}\Resources\images" + File /r "${PRODUCT_SOURCEDIR}\Resources\layouts" File /r "${PRODUCT_SOURCEDIR}\Resources\locale" # always here SetOutPath "$INSTDIR\Resources\doc" File "${PRODUCT_SOURCEDIR}\Resources\doc\EmbeddedObjects.lyx" @@ -33,10 +34,6 @@ Function UpdateModifiedFiles File "${PRODUCT_SOURCEDIR}\Resources\examples\fr\simplecv.lyx" SetOutPath "$INSTDIR\Resources\images" File /r "${PRODUCT_SOURCEDIR}\Resources\images\math" - SetOutPath "$INSTDIR\Resources\layouts" - File "${PRODUCT_SOURCEDIR}\Resources\layouts\beamer.layout" - File "${PRODUCT_SOURCEDIR}\Resources\layouts\simplecv.layout" - File "${PRODUCT_SOURCEDIR}\Resources\layouts\stdcounters.inc" SetOutPath "$INSTDIR\Resources\lyx2lyx" File "${PRODUCT_SOURCEDIR}\Resources\lyx2lyx\LyX.py" File "${PRODUCT_SOURCEDIR}\Resources\lyx2lyx\lyx_1_5.py" diff --git a/development/Win32/packaging/installer/LyXWinInstaller/informations/InstallerStructure.odg b/development/Win32/packaging/installer/LyXWinInstaller/informations/InstallerStructure.odg index 4a1fae02b6bb1a118acd0724c60eec53f94259be..2f675b2c1c314377ae56a2665bfaf8b8b6af9222 100644 GIT binary patch delta 11978 zcmZ8{V~{3W)^*ut7rSg%b=kIU+xAnoZQHihWwXn+?eE?@^L{fi`^Q-;cdp2cjM$NT z$2qIt>(&EaUJ4Wp4e0M!ZmNxkmj(SBbbtK=Da!xACG)?Mgo(nyXn)g0Env2P-62eD z0Y>>hdhsus2n@pckBS!rAFvry$cf^2{Y;5e=`B(TqqiXZ`g&-kcW)Fx(C%1WduI?QfrNy9rH%U|&?S9c0~qo_qp8O$bjMod zjYs%+jI<%O%3Hi2HW ze1yl>eC2s6f+t)2oRyU?M8C#|(N)`{lNcy2z(s(3&6{BVL)F(n6TC@_eSzk<%X^oW zbWSlF_+U~GVw`u-0N|Cr$iFOXSRw=W0>Bscn_mpsK3e|hPYXkGDK|jyl5dus>e*@u ztUk9{4_sSYo73kq8gNmX+uSWF=v?aP$-eM>bIbQ8XItaj?oD<@e-+vmF|jJkf(i~? zk}j@%WE>GuvIusrYdo^7u%tM35qYy${6NYF6GeA8E^0IK0>}#BzU$0};mU^vfo+$K zVFrc;gn3b!OL}%9#cXbgeZPHOuB{1d(*@6Y7(jzN7($Y!uZnH$=n^#Wh+09K*HOx^ zjn9s4INR8|kCO*9?Hd(S)ICF&G~M<{Mn z1V3R!NCK8@0E-nJ(HHiiSzYW+#GE|!u$0xp?H#TM5wA{-REj^4p%eo2X=Wkfo<&}g zm7(nUJN(%Ls)F(!85~RjYHP7+l6G;&hYcbEgdGNa1$F&WKf&h_3NB-!s8m>Grf$n) zBt^!Qu&vY<)22g;I%qHLgT6?VIxZzzLR*Sj@$Td~0XJukc1CAFAWc<-KHCq6b&7w5yD zZ=T%@N5LI#CsyYX74NPOFvQ_Ol+?FYXuE-{G^q%q#qsr2=S9D-Ab`uBnSm?^N<73i zYq8?80dqQTyP9s-W$(X)8ksvfV@kH2b^@(N9N1unrW|bXwV8c8!^iLAQE}Q#S5w*@ zh~yfn@DOq~PaSV#nHe`2VVXu~K8e15R$KU&Su(4@3`ZnXST34gnoCVC2jW;ZHGPi{ zP%s}>CAFvt`b#;B!-lfe9d_C+_dV=h$bPot0HkezKP56CCmFEvr6;iT>Pg=Tmx=(dQCQ@oM{$LJnz0cpFJy`7h3K^5KnvC^OL6mFBKgegl z-)qM71vOOZ3$&Y^$ollW_FzDs&uq%-5|E}}&_dZ1P!IopzXnXRGOQe>zg!&`_KxV* z0FHS>jH%$Xz2nl1Svg4N@FU55ZS}{vLR}C@ua&{OKHW-gtm;lGm$D7c za!JxfjR}g~)x+MeOD=cG2ye~W!gDptAE;Tb;b(;CyK%pZ&q&4Vx#t!^_f^T60UB!N zyYQ%~ojfpR?*`mBeP(3h^nRZ5H()qZn7|ud>+C;I8V^p^RlrlGPz`MaJoz+8d)?Wf zL0x3QoUV(n63km^KrTpnn1vq1j%X#L$SoH@aY|rPR;MP#Zwg#V3fDNK;M|gyY#o%0 zVV4&OjP#^^nzh$p?)ON zV|nU^w?T~p$1oxxw83PhTc2jFT?nnAO&Uxg@OpTr}5z7;sO;#91NpJOKSc|12`aRvT?Fbq^V2qeD4rUL3upN}q}Wk;QTQo-z#vj9P%-+E zK`Jt&suU*8W}p-SO`7lknn$Yoo$c7R)*iAChq5s2x_OcWqfTPP@MmUaHU+gS(Uybd zuqzS*X-+o7OzGM3CNg-zvv@H!euFJCv8m)_v#>L1SpKmFVc%!ndHcYShvclm4WwdgSBbFs~bjt7_fh(Seooj%>reh2-Ig|d@yc3SXf?#vp8wj#W} zH>UXR>xZxjXWm6-4E&NFi#y~qKa*p&F`c5Rs)U@pWt7dMXXiTU(#2+c20hcWgO?JW z&J4poimx$*1>J=QkjsJ2CetFEkb8e1Kd#Rr30I3?#+mWg%KUE5B6bs|(b>~)*fE4v z1hxa)b|u1vji_6LJf%v0Rzj{dnYh^MUsxA}p5 z(t^LvjyfN;QcQPfdVXE;TYLe-(g#^$S;Vqkette1(Ud#8a#W-G<$`Ly3QaY*A5tgf z*@0Lo`cq(Q{{q^BGgO%=N-6 z(5C+8`L+GNN3%vg$TsDQji0l|-93Evt_3#kBaQE%#N?WJ&q$wT%r=Q-!pl%04hfWp zCej8lqP86y7*r>E$vV<1$pWOepxA@h%KnG)=RE?IfVU9Y5@I)?XfYwqU~NXcTY_i% zk=37QDTxxKRA9s@gu`G=_5-I{q1q-r?R1?rex7h0@r1wZ9241!`h$FmP{k}*TBy=f z@;mh#Z*9r>%zd98UV|5?qvF#`#kA6z2T)aVrlvIAnQ~6j)167?d(s~a;y^UAV;&yR zxKK`u0Vg$go8Y&G$Gx4iRvxYd=N~h?b_PJinfP9^-Rp&o~-X219E1Ik08F=RmCFU>S<+_BQ{a6?mntIy7)kB;8NTr+w1 zy8k?H2~p%qQsk-}B2IfVise?re!iVg?g3a?0Jgd143de&jtV_+#xe%Nz&$UD*vDn* zP=O&409IJuafSoCvr3SZFSrO(J>l+a`J9!>*PWQCFBH21css+#_!ZSn<(^gQ zUV`1QtPL`apU=%Q{79F;(1eWlUCgzi{`;R=>%ss5oP1+savT&fg7iJXWs#5j2k^`N z_q#!b?3n=I!-z*(@kmWToytMc{4Al$Ps0xGwihQSx5K*CnYUI1- zuy6Hsg(&*eiK7IYq#6fDc3k_>7z#7gmB$WfG_xPrH+XQetkC!x*Y?$vGt;y#*ijRz ztZ*he(e0+XQk1{apBfB+`aLDZV?vMPS*y*LT_0!+D=xKXj!hW>3z8A8Hdr&$+Io7k zhNR=SpYH<6zZq(5VjGog<~#KSO)Z+FKdzcQflY61<^GWLdYy<2&Jm8? z5%-j{J0mHoE3^|^Ld~fmG2OAvstwaJo(v@3$GDs1I}3ed*yUUgKYZp1Uc z*_LW-FgF%xC0)n@f@ZDd?rnfdC1ps@dn)n|{CIs3+9_Guz^=L`u1(f|?>KzCZ%LcDOGJL4} zz1T+JIQowlD?>J}^ft(L;g~zaAbZcgVuyggi^C{@-4J~h7zk(*?0>2w@dkqukezO# zjHdm5Wj1O6geB?uL%1XP3X252sIyau-_tK29MT;KSU|Ev1gS^}EFPt(h%4mE@#Vhj zTI1N8(<3j9R! z!Dee;cwN6?Qd^nnThVtQSFe$-HEy#Mdmi*x-k%mQv95hILOK&7J?5YUKowJd!a)f> zj_mQ@?2X+TW;qy?H--6O(c*u8jgcDAXG6FlA3SHt{hP?ON`cz-$*p1M1F%K)hd!2St|3+GbM zjCYg<7{Zvqd%X$x8v_jbvow{(p=wG?pKT&QVo$e6n3+x7y%ut< zk4_lNn7a1Aj8!fDpQO&mTUgUg8Vc$>opZEN#KuZuleWM1cQx=!IJUInLK_>O{9uaE z0}wsHkX2iX4!k%qDext9N#_Q@ys7<-V1ne*Hs0JNF?=7jN7l3e=81cTV4(B^8fr`> zeIg!ETC$YhVVAHA)rCT+u`Nwx=J#*S7=(JCp!={o^w0^`4z*$va|T-tN9zU{BC#d8 zRtmsT$$!YuhOjFu=MK@)9ejw7DnsNa-B5*)-HM$d+?-_$efw+!j^tL4Uzb$<^4FzsM~>Xa=$%^?=2>K6M?<}CHbtNDyRNWKNbMl{<9oL$Y9Hmcy{ zb608yv)&uWTA;gIZMN)EjRP)>zzF&lF7AVw(u5D=x_%6#vj!xg&h#)JOQMCItbxzpUWLCbq!8Rp!qJ@f*-Q7P$wrs+lNtQ#k>oIPJlP2`KIxT$qDJF0onsRDT<6;+P zaRsDI`-NU|4pZCnB1lM_*;L45W_6Pikkl;_V7Tj+fRC8w)_g+wMUaPih`FjR#EaU!#M6p2FD+ zronO-WWCIZrTArMV!TsbcBTFB^%1%{-rB7# zPM5i&t zLBge)-X>;EojCY1WDfkA8O0t(bz!WW%4l1SdU;)i@gF&1Rd5>z;Wu^#@bFQt?*{n~ z*Cr{-N_#h4L(pNO@?6INV1`}+Kc9*q7mIt$I%=WpyZWQMw>YKA4oZ$^}pBcIv;*58E1#lvIm=o6RJ19fiaG7_lV)Y%!-9V%E< zw)zPTv%(c1sfiL)e>xWWiR#EAsdU*Q_*C>WcjVrre&+5TJf&a^yHqyqU3m1<}77j zh}3|0Ts>h2Vf|3hrhd%|_jr;-<%(?p{7H79 zgM~UcxQ&4h#M#ZD1YsFgq!Q&&J+yDw@xl;~N#b{a-D|t7dxR{;YtTWgA;J02?Iir- ztG9sFSS6>)&Um+WwWyU38XB8)PbxxkS7$Kmxge(S#DKwZH5>+^lWdPFx5qlyv~LI> zQHi?&EF=W3bc%ZMKK$-6b4JI2)pGhR$0WcCUFBX_Eys}IR4ey4t8XF~j2Bu95xs0M zn>HC@2s~~S`hf9(T^g6hS+gH>zfA1TeCgiiosStA=4lqsqZ`#t>GZilI&1Cl1 zj`(OKV_%ef{K)#9HQGj zZNEV@*Idz_A5QD?fg#18cUYaVsfI#_5FL?f%;6$b50)eQ-udQp9by+a&{Zn-Hgr>z zZrvW|Oh)F(tGQ$qsoZxM)ktPb6wv)aIiz*uY#d`Iu#BL$f-yK^@)rouNU|4Ce3Qyb zTRvx=`xTP<0y(m|(*P%ckK*P&W0~({r)p^98LMZ@vqN)m*Irwzm>Tw2&m5AACl(Pa z{5*OjzuscUR0Qk$PmNfgEjX|o2vaUOj`0hh_mCCW=6Lkb@EnICS5Q)pZ|NhjLU%Fd(kBm-f!#BdkZqHpg6e;$Ag=U|+Q^777=L_E+ zzTD)uK4|#l{AbY-jzwwYLYplq>kJ>bu;;h+<(Tdfdo?bsi8#MV;6Ju(wj;GOXKjrT zU^ea4mYLPTBcRcDp-{b!5!a4p_Y+k&x3~2Q>8-NnCA*hmBD>$^%@OSQZ2sdqwsP{{ zuZ8{1O&oeSZi=b^)fCPKf{V+queD&OUQ*zNzEEt(&)65sWwd~u(Td^{A_cyRdpv7X z&AYfyrF#sRQ1|&Hs28HsGhw9=wVaR0(o7RrV?2mbMAaIo*TtkOED+!W6ps!pS<>%d zChJdS>gi+}@=_KZW3x}nRLV6JQ|nt5)9JoDsUI9>H6qA>#nuAmQJ>fo{?iw&l3LKc zP{#)VBWUdeXBy-zW9D?s8AwqVE zc-L`;qXce=@8{ebwB78vUmh5ZMSTdtsBkQ(D*M!%tM=LW>>k)4ba2*sF8B@hjIL0!V828%^ah z9_~SVP3@9MHEJ`Bu5u@%s$62j8Aj5*pE<--*(`$g>iE znjI=nr=gF`Xcbs`eJie(fPaoU-UFS5z8i7^fUatOce)-lW!I!unJMH7ter8}P4r(Y z88#q2aG595{5dS(1QX4G*%8nnXKM(e{qa7Lu?3>=qLa1(#B44f4q|gIsq4??JpJ1J z-rDHzpnev1mwfQJW)X+P9az&L>@ZRXAag@!W{R?K-TTl{JeJH>a0%Tzmlp$&q+~_{ zDj?g5)bidg{e3SBO$G4cFBJn$T=9J#J_vJ82$YIy<|o~FJJz(@h}-V7X2ppMFD?9j zx3hM`a=?h97fYb4enS!7o=Ec{F^qY#=}qVZUsdrx$`LALsG~EzYDQc(l2O6$WHf6* z6Ca;3@}l-Pdf3Vhj;(<1t}Pm1!1dJvj!4TL{MC5Dj}nVdiD$l;L7wG!H=T%Rg-NGn zNPNXuSwLN(YljF$HTJ&U*xP`%(y4s;7HkwUE}v8R-6IWlx~yI8ks(dQ4fO6|r9O(f zbMm+*SJ4>AN^2Af^_9@fdBMzaufdA8A})WLvA3*s!g=;tE4n04H*TaWZ>c& zQ7%wl{^3c|*_87>kr2;)fsAS2i23(4U!Zu7=(6Gp>QSMiPoSO(WpuHZMS*p8XeBvU z52}OEjgrNn(Dv+KdmJMTg9;UO0HrJ)DJiM6vY?=fj*d6k^W&K$D0D3PNjA|YHZf9! zn4-3}@e9n>*jpBmKlu0{6Z7WwVE5{!=`k^aa9E8!cD=$x69P_+#vU%sBbpl0qf@&3 zr@j;Z-B`|D>hW60JKeKYXYr|zseSd-K$t`k?*xc)UE|>d@5au*%AUz(0DsM3WfJm= zcRUBp)^Ne(IU5bznt(f;OkQWZCoz~~YtwZ8-Ds^V?lg91>92(1-rO5;Vzrivb@AqV z{c`HP1xr1m-;6nuvFLAO{Ouzl_b1OVnC3o_?Um1tU!XhX?Oi3=aaqz>9lO;XO9Olo z2z6x9u#{Z4{B=eu5)QZ5fP*|pKeje+$H{|LUF=8&mc%5No!oGkBaXA*rXfgbu?oU; zbfbR|-%DM)rf_OMrF^v?_4)-_mWUAXTW&iQGnxw*{I5#bI8Rz;&N@tb2K%Tg+t*GV zF^@W1E72KP?gZDTV>FBAWY!~X(_X@OG9S|#5Lzp+IX1e@_dB+I0M0%>Q#>cHO@H`Z zZKHs(j!~Lo!W~Q~XqRklK$-ec)Y*FNbc*?Q{JGST1ydNzr^>g9F5(fnx}*+Z$li~5 z-TP#X_!NhCri(YiDbo)oi@9|tN=}^=J|}V69^U*5c5LN{5l%eE1#MGip7)Zx)_USc zSNTZMyadLY&$hh;0PV=X9>@?KN7w7k(KZzP1ChX1!Zjo-R3zGQq`JK*l1`O?<7C@A zSCIC%x3AXC0vNcsz{SMGX0X$(KiL21>1b<5h3=z7bSAn7YHc4Z#a&ES875=uTmXql z`KS%46EW{Fw;k>Th~6fqD@CSZK5wdCyHZ)kPz!n9qZ?Kk0lW@qPwAXY0=5ppE&;TY zaI{UR3*>&nkUK$H$Jj^*q*;>t+mF9TouILy_)g)w@#I7&Pp#6XStPS0b5DUCnbP+W zYarQhu(2VYdb)WMtjRUUgiVD!>=)+emE&{oMwg%tkoQ>yJJ&Qk)&p z{dC}wvxnE#09C%h@u}gbppk+5)$P2gnp%2)tXuqpbtHA7b0I`D%!tDjx}S}F%VdY? zOhS_$}ML;|MY4pG~Yl{1hG9u0(eg|ugUK!#dD=D%Y~r7>K{4P z2}sHuHCgjALqEH=No{-3zJC~_YNxKmNy;tD8VO!j=l)cq$sy=@hr5U;&(M|&!8Xv7 z)SF$Y?>>FKiSSJcAws=o$%1Vlgp5YK@oUvi*JG&bw~(jN|8Yy8oTCS?A5xX;DqH3e znZMgdb^AkT%1J%b7`cepZTE?|A1c0TB*M)R4iM;;pmp9`wp;Gsr~6r7fcd7Mrio2m zy2J&ctg<%-XMub`+y=$JOX}y%5r0wv5G<2;v<`vQZ%3jkhnhp&*otsmrW$iH3 zgWIf65zIIbm4?M}{OxAyiYnHgpl%7r=)4);q>{d4v?HpZ0R#v)u% z5kR-rlN$YM?!04KIgfsIxM-(i)5_DFZBv>Wtj0&X+PboUBgVxgwS-}2YM$x7yV}ok zgUNj=Uz#-*d6w!Dsz_M7{rw($zvUuEKaIx}f!lUsM_g}(aLAnT)6T30oM?*gA%4V_ zykqkg{?@Xby3$PwMpNCnE9G$5sSIT21rSVuIEvbVkV%C}qpy7Fss3Xb+8?sB#zRL( z5cPNE+9JEZd)%g%iU^`j?HL()-_z)lD`xy`d|S@|65F4gv+S2D>pr>_Mcp5$A1x_}*8uWD z?mWM5)%lH>q<0Oi^&XMcT2txd7a63u>U;Po%q6Pjls=p_ToYb=b)(t0mXUptgBGte z4*e#W>-&~cKdI-XRLC_-_Rk)6dP`#MOvK(A7V~qz{&`Q9%aFv~bIueRmlio?jyJ-) zW`hn&jWV5iT0?So<5NCL_Ij5>IY7LE<0OtA5n^IZ8xK+>oW%Vl+F5rI%96I%y}>q$ zvybIHz#mzQ40!_U?O<&(_KT+MeYJ>F7Xm$wDZe-mEF$M#ED{x_R|vJG0OMlS?}^lb z19(vACtnPr2+0Wc3FVjVNjxFgX4Elw^{ZZFSSvCHwAXz=4gQk&ZU`#26@c3sgMg*+ z4G&x(jz(--hGe}TI$e&^pmh+Ikeuz9%PFU-sz*9YliGp9BadpLn*F#F1}o zlbCs1fE^uDG|X0=1c?n0C$nGXNU!>U+y}@ne!gcvw=spR|6~n=oqvlpcri?;ike&p zOFl5rnlraLkAsw_j0hB6;;nM-PRPp`E-!}OR_jlUEv_4&nkO2y6$A`n{s9?EDWp_3 zua%K;M){T%npoL3?~UMK0pPw zyUVB~0pB7dCa`N_X&n_4b2O$dBltRj_kgoM_IgT)O0`qzkxn(7CY6?J!i!ec~! znASlX>Kl7ALS|c8S?$-*P!nsa!gcJCtpDzIclr=u6~231x&?UdCRRtjkW+K)R+4fA zZT_TN>7f(~E?P)Ut)7R9A^DNaR{RJV+kYOxCkvbbEZUSkRyDryonhBV>-(!VtyuRS z#d%B&c?5;}D{n@Y zc?Q)2WxE+{01H`9f;8!XtvR^n&wB=ZAh)jond)<7W(8z*S6Su6xHfM+?e9$q z=GG&Pkp}SfDE1@&tu78FHN4HRlrIA9XENFatO@y&M}c9A3v7WdhQ$x>!cNX6f4+o{ zTdTvZh%&>J+gP;QdLBRh+>mKTw*grBRL$39wQx&4r)MSr9b;?=N;!6?xC+bN zf7hMiGpwLh_VM1f`Glc)sbwbiqKDJF`}kv{^$ZBV)N*~nC)XU@vmPjl=Sb1Uo22ob z>klL`y3BjY{Mqw}3OFNhCVqE|lH|2M}OzUwjsTk#;M?aO#n3ZUmS5Sd{JIOF`(DgBH1DmJqAva}$c4 zy^9B9o$;qU&X(V!;rqx63KB<$5r${FNi)lvS+$B_;fFBWQu^;Cuc=o9*S1m+kLpBn z;GYdNps{h)U_0ZMrUXVQ`LEU4rP-&2vw=)ZDQh-nnQLH|BX0+z+@f5HL+ zlEePrv!p3TdVu75ABnTEb%fFuyv2gufNB(7%aFJu?%TN>6FsRu`Qpgs)RYGqMAg!L zRa51XWp*W^T#uT&aFmf`P2^IfWW8UQ44(AH`JVM3N*xToCg0A2=jT;Xnb1G}v0)Sr zBtdAq;A`18M;)&nKN#kV;*7RPX2rTFFUWL=8ZMVNQUSK2#^>a6_+*GH!@)=srtP>P zyCN?~0ZgshHZ0hOWiHem#$i$v6hy&t#2eR*a#l)?v71T?%k%G_l*L@dDxr^kM8j6e zlHFZj-N{G1PqK%K4WyZGQsws>UaV?y`rpbwNITiiriS>K-K?zEt0lD5GW~1#B-IJ@ z);jAvssJxFk&Y)*Vo?Lx%P z_#K$_JCB~OH#4iqk?ap_$7>%wPoOzMwJD-nRTjlM z5VW!j7-3|N`DN(RoP!Ld+C|30zeekf?xwtP`v5bPk4PlL%RCS4;{n?SNx0Lu9J4aE z$Zc7Q!wF#Y>T$?EU^O+McOYBA zL$^qfx=?By9kq@+uOeo%%?FD22~&w%pm2!qY5e}8i&`QJ%ZZ3!^3DzpzsOc&`N zX#i?ORGW*rKL-fT z%$CX`C>c1ycV@DuOPMcP5ZJ6f)qOIE$N>iI?f39=P0)}9ynw?a$(((PMh)0gLh**g z!eq>U*zJ3c-_VtcV6CFeqs8HQnxf4sb9sp*M z^A#*HXA=7DTyfp_3~=3EqXrKYIIGR!3L5%{_6<{Lg$s`3ngPX&KNHe6_JcNm9qsxq z5te%>jfP?Fh-c~6Yw|&CY|ZC~tQW=${DkJE$*q)RlgJ_1z2mC?aV6Yi=cOp-cE@zb+oltaDaGZrMq!mkW= zpe3xrUyKVhy}UwTbVD0BTyce6k0x|y&c~ct!#HHEkH#fVmu;{qzQB|>#nZF-Lv|H_ z?E*aq6jX%h$ST^BvHJ<8BR?BQ+E<<_PV}Ku{tRzAGj9hE$oAG?Sg=jVg#nQJil@YY z>qX*L(kBiSTto{W`h{K>L!Y5p%=r!+_&1N;>*ur6g|C8Nl{ttX5HRRXu-2eE6wp*~ z+tKEU5rTO~EBo*mrRziQvP&taMF8jmCIm8gvh(wbC(=mH6t@U$B~DQlu>^=eGU5x* z7RaJK6MGUU5V@U(4!*7jR{{41;|a6kCCGGv6T#>&zPkOt?us0McxVtxd8BM80z@X0 zxJo_WX`hGiwec{+Tec47>PS#^&cH3x(kYBoA5(_a9VKB>)IEUdn?k#Hi*BwO6d9^q zJ(SB#44dPi5S%8C?cgD<9%>yAS(~h)`!3+9PVSYKbS>VR?pQJm` z0|~hy#CD%&#_l*7dGJjLCm{Nve~4eyA<1S-^0*+(s~l#t$Bz5JMSn^QRU<}8F*qIC zeImdCLz$Q{U`ctbZ2@4L>)*OF3vYjz%R+hE7xvalg)p`Ovo)~+MM4&*;#;Cc$xybw zFZ%I*VJVgQd|Os%c~#ebEIhC0=%EhcY-z@OgTENbf1OQN69X9bI<_uu+%DH0o{WaR zd%t>pKOa>#qeh%fH!Sx%s!9ERXf05o;pN@hCa0k379ng0>hXxNN=)In7FON%n7p=ZQ{@qvd<)%fsA%K96 zDE_CfG>WnZ0{`Qsp5*w)gq;Y&De}*?B&Xs(n9C{j4<7zIPs=6t?>tUo0vE;q=d1tb zpxlxOf7@aHW130S;->yb7S4^s(Fz9yczd!n~xBge$GbC#AVE-cm hX$(RY_{+T^3kd{-{$COxAPcs{Bpz~zOZLCB{|_&MP(Aj8p8kR06I-Ccsa%fa0(xO3mB7ReSgJ`s>~2i>xFI1&syxCw5?~6Oa|4{s9Bde<4}zU$|iZZ;}io4uSO# z1?fU?|Mv|Us2Kv||D)&sr634MzJFChki3rX6c#eS6Kyj15?j-&1zpQ@!+W%WP$*_o5Cm7Y}&_oN{- zG<7Y2rbS1kQhgG6yk~3%eQ^hB6nD9%K}q@NkG|eD~K$YqH~^eiF!=4p^-xoW_A^ogvx3yOL>(5`-C*ohT~!lj!Jr?hdHL~Z*3 z%dlWX)qHJD%cRwr&l-}EM~edA>Qt%IyqcS1XW22aF1O3g#rIF9q^l?D_oLUA0{x=d z6;E_9EIl{!?^zq{IXnLlr42QeJlylfw)Ap*8Ry9#SBg{<|s>p&; zRQzNpgyi^b0@i0AG;}oZcNlp(hvh$M+)u}bTRmN^y12YjJKLSLSOeOZ15#|-SRnFUu)^DJg==};3c?f9f`_+Nm)+MLZ?!WD~H3lO=zfU3!en?RLS#(uVtjyNcNcfE< z_Tv^{0ci~gFpM&A4#gd8C8(vKm1S8)Gq!xtO!|ljZ6paXrqab($QOD?hasuTCrxf< zS+V%0{qz8rvvgeGQjAm!;(L$LOc;+8`>B3aW_!fl%nc{AEuPzGEjWlpY~r9!4+S~6H~`Ab%$yf3S5GhGe-w)EruA5w-cuf5Q%z!8LyYviz^2E(gA zXosTCpu|1yh(U9pvn)9Quj20K$7@ala%H1;U-#<)T9vZaN!vJSHkT>t1r@!v0*ZJ0 zPZL?;{x<^kOEp&-+JY?AFmLz*j4BXSY%~dif1)Tp3kY5GD!!D>ZK+j(2uaH{Y(R># z(3Jw(>_QcTjR!*~Kt`0BTQuFyPev4*TlA%5zhQg$2=oFxq2d-DqPd^vk`m3CR|JU* z(ug0L^4c7F;IT0LJmMN7u-zv*jlKySy2VM)Asyz3l9NC;0@;#kL{6Augl6B--b&#a z#LnCj9dxCb1{e9k2^v$(-2NDrd>+{_SIoZ(!Bfv#m-~H9>dn%RNJJ+}Ti zledQN<5dWps^O>?q(m0E3YiKb)a~z?VPd|iHP1<}ul{{U$H-r-W}mAbdS&)vpq1M$ z6dz>9JgP)bAi32cc~vw@U1VH`T$Vz=vc7xi-zn!Cn@Ng&>`b=aQnn4(x;%zLom4)h za7|LxLN6s?9<6eG=wH|Lyo zIC2a({H!LG)(!!VJ7Z@;N*HDC2S4kX;hrPvA7-cGHr za&8i9l0g^(gh+b0KYH_#>E>qL18tRK@(S7o})n>`E#*S?8V@L z2c3baQ(~2kc{NzdLn!qZNk1p>qb)NLPX}FtQ9UMm4}X>1OfA>rodurrehZKLv`#1! zoYCU=No?gTab7T9zOfgSEX(yUdjP{9>lBF8%Ac#RH!Rpmk$v!EZD-G&kG&)G{c&;V zw&4$ZpOGHc@DoCjztXt~t%h)z=u5m2x@QWoTYVVw4{4an1Hz+XzS{s`mC&hARO44c z$Wn4Ij1k#cC}%PH01OnVx_C^NouO8$quBG#vQ%XWGlfRPW zfNO)$U%IpHJyGrRm-|lSs%m~)*axA$#Bqz@G-Th4{LGje>!t?%Vbp{b5itoh+N;5p>l)_J8_lsb zb;QZ1;H!AtxTBoDsZ-i{51e+G_gi*8GK!-EpUcE}Std&gjG(dyQ6eyR1(j=)c6a%8eInP;*XmkRV}@E-EJ?P9-_nZ z5kTrYt9EoZhiU(?t(gu>^l>8)HA650`OdiFXkTia&7k)eJW}yku?rOHm^~SDg#7<9@Ep`O85IAhyj$rU${A^%Ym<+$DF5)CSUV@Y#MN|8_(Ot6Bq0_r7xA=%B}0pOF0?Xs0WTgl_vmXRx8eqal$9eOMltmZy2{ zBj0W(JI`MrPw9@S!xnNP^tkylZQNJ=!TMbVs84n$Ez{)IgbzDRE0tYqvv^&g7F!Yk zZx>%fG4F?z?t+IXzdDc$2b&;N@B5t`790AB64njNkDy9}xVy%NjEFlGw+27opIs}@ zj*fRj)G+bxA4glT z$M^)~&3CZTT$QVl#8o#jG5+XGxkwD?F+qS2)g`~h7;jMqU#qvu-r1fB~ zOWqCkWAJ~I%fMooMXgO5Is%XNevaR~0hMIo-~ptUg}w*?z=}Bl@ZaVa9svJO^V=|h zbOi_e58?W^9sb`p`2V22xtlSQm%ZJuMCIsA7PR55S32=a&Y{-J2d+}MBE}1`wmpL#nK{){OY?6+N(1d0&knc;ybe^JECIg@3ueK^0w zT<(RR>gP>a_652OhM^Qn5Ul|DT#DvqSk;GqCaWz<;?kd?AT`C56Yr~urf?wt8XB=> z*q6ooY;G>WHDpTJua`}9VBsZ><1wR2Y)CtU+klN?M`C7Dp8~YM6-q;f2ig*pL%Owg1kGz<2kcy* zaxtGaF<0Kl~cq7?wN zS;2z<{2=GoV&RfDtWIMVH|Z=$Bh+#;s2g z{H>Z~;qVqz_}seQH%2fUP6Rw6Lu6zmGMgfzt&I&6@A2vB$0(Mo+*!B(>qAT!e^800 z`f72H@f{Ol^pEvx0*nAD{$+f8 ze4lU&FUhAvsrx4ze5C)Qf}7UPH%l{*r6&2LYzq~_ipz7Nx4Kb#4VO0JhR#ILh;(gZ zt^vXz!$|8b z5<<`~gtqU2`8`?rw7@kBtzo(|{m|Z*oJgFegAS=5QoQA^H87y}hN>FUep-jFSeCwu zlrc^PLjc#E-I;4_GUFyy$16Wn5Dgu2mV@LGBO{yk^RxMb*a_opL8Hn&^^VZ)vyw%L z7*Fx3Yog1rRa&2z(dnLs7^;S}N+6MR8T`BS%BX3cu-ek=8c_E~&mQlWXIkeqS+$vt zfnijmvmDNv=?9kTY*f=Yf1I7~9idb4aEWKI9J;6F12BzbuR*TU0`wmb5G;|2hjt2- z1dwiy;Rcc28yY3xxwSO7vbtW$U_9OoIU$8$elk<#s_knWF@F@t_3r_5IyD~?>IbkFdxkk*TrUzd%V+UbWciPh%d4M zvzt)K<*<=+IeB7BH0@s?RdmZT&x`(r6@=cO4-a%kEScw7D*c}A@}HjN_A7t8AYa6Z zb>L)%QD^0r`smJl?#Oif%NUQ&n`uDm8W0C}XX(_X4_VK#+9!bpCd#+*BNM}4BgGUM zTuGzme*kxq914XUI88C>nv9GmXxt7(5ev)IM&k^q)OBO>1N6`^#n_(57l?{skmkwj z&g5Nbwyl@tD;RCiH`FjT4UH6CuaJ(MUR?U_im<5|Fi=U>WsOdxVilZuH|D2zrqj>1 z#H@W+M8Bi$2BhJL{YYhHw}8NL^ur!JWJB*fy93(Am8>6-D!uD|aFx6t<-%IIqx|yP zoNfZ0Po@mQ24N}d>|by7Y-C4%*LKBh5dVtR$eJ3fo?aY`L(6*c+031DX1hL$aO0ppNo#L0Zv(V0CzBz!sH|0v=Pu#5>gLA` z+-YD2l;7O)Qn}@FMfqi{yc|yp1Y;%t0YmcMpT6cWq23$K95<>pi-F~4IMC<_lLyVV zsp&<2$m(id-(kkqkv&LfmR)voJ@SjchQeTZ+@B9Pe>w9EU;73EOm()0=qkGM#Ngyg zd3fosy(PmLkKCI6$2t(R;o^phuN~i%s=0t)nYGOHg9+C%KnYcrODZ+oAzDVf#t0v0 zph((-z!uF=smUpAQ=}xolXsp1gBE^RAkrxe-S7ro=hw@CNSx!xMw385Dw<3elI?*R+mg+)yf2+HrMfhd86C0$`7Q+dZgUdH=U=K8Y zQgFzSY-C^Ko15xwdMy{0wqL#)bT8x267_u>T70jG6jT2rNhxd=giR}K zT+L5X<1Q#`pD*osSJnJy;=_216y0nTeipsq+$tqCk1L)vqrz7Z_6%y9f}*Z_B=GvGx1`6LEB+9psPy) zrJfzzF5W*?L!ea#J5bDHH(Dsz`$u!mR}TFct@Qp{3_5wOdM$SUT)KK83kOksl2wdJ z%8gPKtDtsY=V}?hlvkq!TkXR!oBqN;G8gZA`&eIp?pxObJUU7g&KI7i*82Uxs3SjY%p_&~HD31EFJzD($WN|8Q+^z*@t}(r9Kzb2b^8dl3Qd$CQic z7#TOp8@O!&Rs0s0r@43qJGsH5Yhz6Nai`7@ZSVa?dXKmm%Nv>cMz|fB=ixG`({JX zo0ZfXKoj}4N} z5Hhz#_Zm-TdyuCMR73l>k-Y4y_ibrK+Oar819eemgcBdhBJn}4)ST;94_^u|$A@rb-S<94~Q?efAcC!`Qk4a*s2S*%d5rlf_l&1c-`&DAxWPiM9dj4`tAG_ zUf^;dH&~YYJW2&SRcHJO3!RL28n{{o#rPf#meiTGw3IQ+crzy+Jr^_6SSw|YmDS$k&!oe6 z<*P-JFpK2v!gK}O+zQ+>s%$I9OX8>kfnOTGlthN0Cnh*VjfUjimh6g3L^G z7Xv6Vi&?ip4!q?QZbYd%H_TM)pW+>*6mQ|b!fr4;m|FalCLJE<96Bd&T&J~MwD?OA z12GEc+}~PBjpE*B&K_TFKrHwiHG$2Ok*$#+&3g~;KV&GLs{i|@+wc&yrq0_cahJ8< zIe$6ulDi`z+D#&el<5RnX}(Eotjb>M@=AoN$>fUd3N#!^l%%D5x476}{;578fZ^W$ z>Y2DIP~~vWY2IgRX7crn*#V;3phlS=&n@OZHU|)j9hr8c0L5m$ACd^yeE-;w z?;<{(bbATD2LSE&%9JtFQc|C+YXFn^Bw;6(#rm0i_4y0joR#CK!5jl3K36#eW$f)nNHGn-jX7=6X2=O*=Cuj4!E4~;63Kv0@0`xnFgHGlAD#_kSZM|Dq;Q%4mFdc{dN3o9=;_m1J15 zjB=D3em7E#YarBX&djz^sveO1hW0=S^T(it@M3Sh6y{rQ*fJMCSBa?bkdE$r)kc|6ZsgR|h?|LA|^-x$MW5CAz6snXx_pWmZw8s?5LwzjEIY6eNK ztaQSq$z4T>Vloa_5LZWaF+=m|5X1sfH%{fuR+;odgG9g~V(IvK$w?<&$X3b%^Gec@ zTGX%snZn%EUQ4m?1WxLPtH>Erd>9*sx72{O%@RnWd-=}vO79Okdpv!IN)U4 zoC~$o>B9dEzl3o=zCT3UNLj6|q!AlNW=*6iG_7&k1>6Pf9~zXx-7`3DA$Vn6hDP|* zoqD7HoFV=N^s-TMLk){}I4+T1j=bm}S{%kD>GsW+^hH{qlt{_aJarJNY) zYRtMLyr!V__HkmnTGnohZ}JIWophWct-3QJD1I_j90n0~_JWYK(%p1Thz6O(F$13v z_<8-9{rSj;k-uHwSbw~x?A}+7)YiVvEqeE=U=Bu&?oGWZoz@Pj$JzxKJktgx4Z2%*f^?!4Ab3R~2ogkmztlJLKQ1meKCk$kd z3Vf5Dea3O25f$PMj6!Rfn8d@wmP5~;)*Pr@Gsp{S>RSbat$$ch%cvX$I zlNQ!&E-cYNylfWUniWPQT7>T6_VJD3(^HBJ@poYcf33jRRhiJg1>Qm6JR#_ z1@q}Q-RMka9$DhT$o0mIHAB+4mG{NoC8d`OwFr^$Oo2SqZO+2WdlZ<>v}!Au5R91g zn%ycB<{`iwVQvbv{Ol4THLooXkXS_vdU6o|oaJQU;veX*<7|XH`)d#kkQI3U>49|%P`v>hfp!^G|FaQth^(Y=nvA5H-6BkN=bYnHwqovO$FH1viz=w!0njv z(x$u#Y6`6^u|sjNMUr~9>>iRJop3Z2hPzOy+}H1Xrw%W87S;Ro^F^PidW9n)rw)IH zl;_4eSobnPl5sFFR7@?(6aExfL3nulbZKX|UoLX!huM}x@|KWq<2J7dzcDerMAkmt zqC87ZNCg9vgM0RRQ(R~nGcmu$S0nbmds_h-qbEznsjTTkJ**mdaX3zsebUe7EV)cL z>na8>O9K${JP2%hH$|6&G1%!&(B2R_c%$AkY_5A1lm)J7!ga1IkXK2h$5w(Yjfe6G zE(w&4Z~hpe-_a%qGnSg+!V)EU-kjhX`<5I&hUo$iO59qph#~Vns!D36t-uQ_S|=0_ zT?8JfP@{N7QBlQ_4c-3F)?%-=L&fh=OOzL8o+*#TdV>SrHv7L`pcy1X;jW}{Es&}% zBTVbGrk9$vz49WEWt&p->owMl)dcE(N9*Jz)U8BnZ@O(w2aMRebwp^$LU#)2Ph4I( zPtX99zfi~^9U%h^v2?_&iRHIEYfW*NBv8$f;6ddd3ofstF{v|CYB6Or)Ssh-*%NZw z%f7-%64zw3D(}3s&l?~3UzTffhPXnFhCn94o9e5emO{4y0cKkAmS)4k1k2K20x{sc zUB{2HA6Tm66%h1H;5jdpU|PP&*w)h!ffnHNgC36*tFt4v6Z68oP9};l5Huy`)_-tt zX+xBeSC_Iaga8{ue$_o2*v+rY^!4<2GR1Q`d0qfLVr3#!j+y`wMrL-QaVTGdfS_eZv9O1azg?ZJEV2w7&b}Y~Yrz0?h zQM_v4!F-9yckRg;hoX{TpycIExIdP-9Sbcj4%$TKt?BK&YDvd{wH8RH>Kd z1iGUo zO@FjTiweZ7cpY^O0fM`gtqV|A&c^1omv9k!Hbl!o#L6UY=p44p?JI`0{CWgS_0F9M z`%0~P&rj>sfBhbEa#|%m2Y`WPi?hmG%`08=+_Xp*%c94dCfI$;j6Yi_$Q(9Gx2W=* z;MQMa=J>NF2Wx&hdo>Y_i9wmgR6-PpI8V#9o$g1FpJEyM&)#lFSN~!PGJNYMAluO)too^LRj6J#3MJ*HVD~FD=rAXC)HZx zErAqiz<9LOVa+mGJ_O|N&01udIY6-?mqO#{mK?(Vq8R25`wKM|Az-6N2*t*zAa6px zlmDr6aP`gB1Qap`5yaCWV07VuY`F$?s^xAk^hYAh0%Ay%9zu` zt7B*7JFHv5v#IGAA{grrKI2^Sk_#Vwezy{x5)2gnRfgl2mVj{Bb-yrpTtEMzk{J{&```gkS6`Hq%OJ_f+{*s@(xbE#1_q+96#R)B z-g9iP)XcGaZ@LUR%)C|x!!e|bb&xN#AHK>ls0=GH!2uT_BmG$Cge!`Os7Vi0I_PO>KCtGT!TG0{V}$1_v52c zOP`&=H(*JOpP44twrZssQw=yl`&Pyz`Bg$9vHr4k@%B0|Fsp18n${O4Ry5j1xC{f~ z`w?NnP8_Ck`QhjpMO1f2uE9~DK2dDuE)to)>9Xt*;&BH>!v0(O`}oqgw!d2AwJy(s z>o6ui8f?aToWzUYs_l;t1)FJ2nly4{l?1-oNxl`&N*#$PxvAh2RkiN@Rz7H8I<0 zIRz>=ysmo*oQzzbzkUh^iUufw5Mx|>IHIHP*W0LP;_hn7+lq$;82r;8jEp}Yi%d3I zAcyf%S`hot+12`RYfDZ_b|-$QJCv9-Bz_NLfz zdmOpFQ_*)TVZxJmubFHRe!e4N)}yNuhy%GKq>)^TRqaW2#p~Bmdv2og4R0X{Z1Gew zyj>A?$(YUA4u|dM=8g0A4p$wn9RX%x0_kmEO&nFg{W>$>qL?oZqA6`)bCE z#E5tbDbr{bUy?s zjLO{ezIGjT?g8Z6?Z_R8Ua}SnsW%?rgOtw?if;{OklLJH*OeL*@k7_)D->upRDasN zdq3Jcdk@-)&O_HhSI&HN>Y3xnO>MD;)hW`cc1CRF3g1+0;wdoDJ>Z}o9UrmpXpl7+ zL^?%AfAeANDLS=CKJ6X^+BZsL?^`E?d44#Sgi@zx9|Z?^FGKV7$rc1<0y4k4ILpN;(PVinl_laP{pX6ZU!TmNnU!sf=hAhAt-M z1u>zPPQ5i&7j2rR7GG($7zD_NSgDo=PqmA*z7G_mP+z(`^I4}bMO|e8^=4mv?Fz!g zE_$WJ6L~O1qppL`6}(Ir{q&J=t(8Vt9np>{HqktOGNFOpY|mwY+~oC(AR1Iq_}Q*r zghYWJO8@mY0pWrPMongB=5ggSNw+?<6eT5b1QMy%HOrKx;(g+d;rz-%&sSBM7MTi^ ziXe%oW%?u^?|Wa0N&j=A@gg%>u6rDnqqIl6YSO-sIu;oZ%Z0N@pvC3kP%{CDt7ZvG z-#@YTdw0F3@w*oAuRhMf3_%=jsIDUI(7o^G5w}Z)Td|iitjLhabMhFU7Bw)_6CUX8+tZ zk7ZLsndF4e&O2s^mLp4$v(0D@Jxcxnn~vrMsy}vg`L+%SCtR=~7LS$jII~BK7?7b{ zFFaiGox4q9+eGxMEJml1h~yoan=&dJ4rVq=lBn-ZaBc8mjrV!fq*}=i0 z(+ruhTFV=tShav$W3v9Y~hupuH}hh63LO z>q$CDp14gkj*nL^bd>YFde4k0Pq`$h(RjT7p&uG3_@%!u($_CpSsc2Gmy!v8eldYO zd`FAe1C4~7tJt{n*BM=ZM<%wpk?arE@6A_f%0CoOgb0p>zQR!p!Bo2t;}1{|gKu9x zkAf)q-^Ss7BUuMTiw-I0KP<|uHtzC!)n9^V*4S7T)CAo58buVA_%IvC!YGP_AE8KC zX=%rS31U(ql4be=vamg1m-Y7$=k)`26p++OV?Jxd7%XO7w01LEWVYDSN2m($yNOF2 zg~xJgc!zp;;h{Sjg+U;Nv)`c2J*m-b^E*WmL#>wAIGvPSIApd^)l6+XR2HpfYHY_B z_axy@ghEJQ&6hF1uAe#1e6qvz4Y;u8)T27U1x+dyb*#)EV<74z<u$q8o1; z1sW=v_V6GY$||Z|P^8Vp+b!!-Vp!B#=;Pbw`N9MAblKR5*b_xALXjc>w0 za!Ei67YXbDwupfx6G&VYcBCe=*td;Bnjd&=IRjHd-g8_uEXLCnmWR%fEQ z8O^b{vYPY0%8xi6EFa+-NY4S5KH@RYY-%2ycXjBbAP#pPX<6AkcFCE%fwiqv1=e!n zU;!g58I*FxGmcXMe=22SFN=uL_pNYX-BEucRbHMPg&r)9E5r4BXRz(QbOFFe>s-+{ zc~uEII+e~-;r>DQGE%=);2Va0=V*bkG%&6$#t@~(wD=>uyZ&tNXs zOb~zf#n}eElP}ZL!SYkXgS$pW$NcTz4DF+b3hTRY%)L3b`wpL)qNb9h&AmpLWR*Ki z0BkElV%vec%};@@p94iQ8v`x%H{lqRX`JQTTH`R|s{Ge7on*^{P&5Mzi_ zLv&Daag0vKwqA&E0cc}WMgqTqH}zcvHWc^1{89zzGnr^l+mb-d6eJ2KCt!JeTo?$##qXM}61+_%9jZMYAk0rxKO zuHzc_-uYm}XLo>M&&Nx?!_a}5&ALrNM;v3@YTqglb9totlLql*mVZTK@o`f_E$(_! z5PX*CXv0Y0Lz`n_2K{cr$VqkWwle}1ED-#JxzF6`79KkA+wggNYiUgSvvB1N_MggP z!`hfA3=04p(*8e{rNM*yC&a(b@Hd`+E#)9KUWtF7eRx&=#c5u#fAK5dfAji$QvW+o z0Q$p6`+qn*|9?3bLaGyE%S<0s%fKmq_<-MsD0UH@_KD9J)VVga!J zWA^#i?!)z8!^eO99{;#}{%ktvZj)(Z84o5~a%E|7 z!|P)eBI8nV@z;3bf_?_^KNP7B5()izpr%@7VX(Z?OrIHQb8B=^OfJ^mL{hh5c`C&< zV0-!5)X%L~<#O1ShVPTI0d+q;JjTQ)G(KW}m|-I24t}I8Yqxy-6;%GES9{88ve_Kt z7iq?@P=K}i)p&P2Lp$_+HYE@mOX}$3rR(JMry9cu$T;W$(RvRyH4g&$YCCE)MY7(rUt|oGn-i zjc`!ZPb$)$oy#5xBhD+ijieyMRBP8q8FXFF<;$MF{pr}+`)^!dY2(7SyV7D`Ze0Bg z`#tR&(?zvMco!>8I7xiOB>hY#4(^|J94b}pzfddu0clj9Ec`27>3D3zXAKMyZESov zL9g%|@;w`IXS1R+R;&xn%tY56(nuHO%*qdFw>Q^zJ-A?C(OJEab7`F3LX1g2rN2}e zm4aiof02x?KnIF6!-8V=gj~j_F{br?cmt@OUV8;wyFtqbTT6w8f-v7&4a*Z3W?xif zYzqw&yG^j71cl9t@5mnoeL$`!-p&s@3dcB;oSq4ce)Ce9^>fB+RCCWRZW-r2l9|#e z>DU{f&pC6)>dguv$RT6feC)WI$_HA zI!AgQex`)CzWME^x#aq%eO_RX3DfUgx(HPU2L{Oka{{VOOZ-IEaz`$YgNazN*N*eu zHzjf9Z4O;-`oyOvm~=6Cyx17qD)WtxS#@qy6>{76HhcwodI`UOS;-xsk=B03P~&`Ob;KBu8ArZ=cT|pZb{dqh2fKC|esyn+F{em+LGF zI*>uxR1n&7Iv!eyo9GMb#|iL1?^AepPIPU<+-5s3hIoplwdtf3PGXrBv>F?ql}3wMALh{c{8cvWV?EWN-)Q>L3+*R@6j19 zS;w-GtX3vchW*(M{qZ?KLkkJI<=jH4D(jPN`-6o0)N$`WnIV#tYpIikKSpMy7}$qh zkp5br)Oc|dANRG{HD=09t3dF#uPQJ+Mp?v&<7)JHQLg*DK$uj_-d2l)> z@#9yUki2j6IS;4B*G8$B)Ned0587lJ$gs0H>)Bp~<1>i7hdI?(m5y)`x4 zCKpWt6D{T$RY>1DR!^a&)WK(z*?DfAp1J(OHlVfTN7CtHxLvoioo5#2LKXJD=E4Ru zO-NlN1IO+cfeMEM+mE(awoH0BWQ{Vfv<76D&Jz$*Ev|2}q5;Iu0yJ;X%7nDo99 z+U6?%-E&8fS7fGiTDdvuY_p;ZG&c^DbP( z|86HFZ%W6kU;L3JGeviRh9*IrIj8u&g&uOzoLN|23aVnli#|qd8E)d6Q~DDP5?FDw zG;uoKzp$1KiZTOSysHd)T{Hv8R!(Ub&tC0Up?00)EfdV&>2w~UhOgh~^tp*m#JyVk z>3C`{P|VGz--&66uKqaWF0Pzy={dLT@2k;-^!lB7o(CoKdtV>c#ABR@=c-x_ zm<3|E&4xB4I{Z%!RezPDbLO}?r%o$$z?Yrh%T^W~JU^)!J7etmJcb6blF#c?8|s@b zZK_oEY)09XI;NSg$T&2HWY693pgVO-(%d;VrWFX?Wos_>zhR$#&aQiIadN_Z8LZGr z(CLZb$4vXy?*EA4PUS!sHiDGn?VbLnh_B?xI&io!OT49X^09kEtfD8{xctLf z;*GmI0oPU*qPpd(&dO$fq>t9K`>@(Uhn{6kWiyhekH?*82ym#rHA$~VQ)z#ZA>%yw zCE~hpM)r6{zb%Tb!vB-C7)r@U;08e^n`hug(TJbArf3(}P}}^P_Ztg)rpprkp}rhx zgUk;%*)Cr4@sGQvRcl`w<2a$FNOj4;nQgjvWHLBWiZ58T{}WA348Ows8NDwX$4QmJ z`V5OezRG5%+uWD?CoiaXn+D{LIVmfrq}woh2DM*HNo;xds689$emQT7&B0-w0C1Q} z1nXtotv${5)mAfeI^%x4ZibZ6y|*6=f#+F^3Q6mTfxLv=ehnv~tz-Nrv}*D~d+JhX z>aGqwzH}u_&3|a_)VltIiQ(X;n#)`I&M7Y*saGajYZt6kIM95!5qdmfPAlbtS}pi} zp(z_vw)m0*hv|*dl^S!}0chX0)Dj`Ys7k4lNnP&3R^N#CPpu`|2MzO)R|FtR~=i54O}u(kI$5@g-P-S4Y;O3A9Vr(Zv1F$}U# ztxY$KUh;c1Y?H)qml*s|$-j&+?0zHGSnJwW_Vd?3-%4fUlS_A0o}kCJ&B}8f)TEar z`~}l_x2n#%zN2AkTE94TB41Y;xfh*bKs9T*mg$(h-LbpR)1QqpJ)~N}G%f1on^pv1eOl zUu{|B6GFno!wVYGi|PuT?<@kFE?Yk^*t%Vu2@!WFF3ul6XAuP&ZJwKn9rxQ)o_)M~ zHYuIox+6Zl=J7Z`H*5GfKQHUO@qFF)+RtHQwH;cex+!K?^)Oxmni!R|^Z^Vgl6u2p zG|?2VcT34F9 zy%eHaJQ^k>p$j%T{aiT8j|-jOE|g9`$KN?+A<0i20z|+pb>81CAdJT658S?DU;-QA z)qc(!QsiXI|K_c(*G(;)Uxh9GF`etJLQ?L(VmV@&lppXs2)O^aG|2+iX^{{kzdrxW z@->PD^k8)I>|$1Y{t)oO%b^d*&U>(oShx3=oF8`>ab77cPdzB>y5^O7>Wgo%uBnQy zzHFR*fu)8_oUp1u99tnlGFFDYqurHXQwFS^Y`ol#Do#kb{j|`wO?u~1!EEO1gytmO z8fkEY<+$gt_*sy~Gp0`{2GnsbKuvenm!<1H=_~RwSkzAPy5`xF^om%csgdXtH>?E> zK%24yk0o|qjT(ak^fU%GeqahB7&wh99=$g*8}>NB(D-u%j&@oSc(aph&oUJaF5^$$ z$}IizLgbmo&`THRS~@Si+aoXAuM87ZlkFh|JT_&T|te73Ij2IMA642}bwf zY^#%ksx)U{Nlme8!E|21CGO!3j}Y?P#zk%Lz#Q2VP5zDe7Z;ykQbh`_0eD(oeVM2$ zq1m7<v zTKU54qJoCs*jF)c_OZAp%hOe(WhFQj$7S>K)d#6hyMlk>&lS|QLTZ8HPT8hFcL%*@ zT6Rm*Y+H6qLjN_4!T{fu*2geQs`#!bV2NXo2&UZjq&M%Ai&6(cmFgMnmMrh#rK<`g z($rfSQV{6;`ix+v)zlh3M!BJ*yhv$C*}=PEw0fSjrI}GQzoNwBZlXVYa4Hc=?Vzlw zkXIbiyy$s$JvWk;C$gfYxWUTDKy*7($;V&$*;Vlnf|kwMRCg#?{n2a7dnW=(b*D)t z`ih-0*UVD!$-i^gLQb=V4`QYt-W*Je-6P(YR;7QpX`*nmv|mz#+tVOOU$0{HTArF- z)Cehnd8W=!$}+Aqy66af!nz5p9+fn%rDIY*vwQNhoA=TX3Ap#Zdc7&Udj}sd6eNzkgkJp);Q@Hs0^v z#M!yA<~7f;?=IPMF#A{>Gfq*O~m^HLiNLH|x94a64YW)Wa)jLikNalB2G_n?dB8*7tkqEgKgq(9aEGbBl57 zWlz+;VOJ)4`OAPtD)`P{s`({WKXv2VrOSr;L(^bre}##*$Y(v3Ozr1$^lq)^Yn%EF z-9_$SzrX7+`i;fF>gUIAlVbsi+xnd{{>?;!tSEg2Rlsh|kRZ2cb;CB-$WOh?-Ub;F zR5@Z1ySEwHSSJii@WKZ2>Qc*uaT2DDSF4}Bh-Hbu?*lOe61ogea)a9hUtg^`;B-(4xWxYFhq6K>8Gjy1X13EoeG8|8k>}`kll1;W&ise zs+!%j9Y8cPVI!`ZZ5hLmWCx(QzN-P&$zRnF@HP*2mMz|1;hiFpl|^H;oyq( zu1dC(TpfA&N%$XvirxX_{Tc<$5MCv zk6+5)7C9n00?0{>NU);*dlhiFV!lOxxTJrq^h8&eGXQ9HxQhb-U_s=zI9JW)>I67$0kj}C zIdc-9xUm4h#3na+qKOML@sv9g07ks%E_oQu#QiFf&Xt}R=iW{Ymym!UVMKEr=i$)# z;<%{bP+}@hfN0~%ssjaq58F?^c(6RcBLfTtp(r^poRWh;C^@1Io|OQFA}H^`pp+aO zbU69{QimfE6dZzl0RH8N1RoxOe{m=Yay-Hz`$sw`B;?}tT%4)$O5=SjL%>R#o5F|w=a44LjC2$y&A`>_qL@^6+ zIEpe61me#`&XZFD!;ydXgiIZB#8wYh0^-p6cispI1VvZ`2=-^#qX-Bvn4&%ihy+D_ z5D)~#))7z`S>u1l69EHL)CU1WQHsD36!k$Mpp=OqK@^D~;ix|}{u)mSC=5)oLokXm z6EKQ0V+e?{F%TGnqNxxh zadJlE$X{GNCqFa~93igj>U#LGJ8Tj86M7x%e#?~yeprvAl@gB`k2FYGNf8QHlu$&e zAdxDt!yf_(QAELDO3HAMA`B!8{Qq5eEP#g}V-HUooTm>CeG3Rif#3+BfPk{L3h@5` DcmBPT delta 6627 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