From 857b9b5c4cc1e7e4f9a8a57a873b64592a30b210 Mon Sep 17 00:00:00 2001 From: Chris Kaczor Date: Mon, 2 Nov 2015 10:34:51 -0500 Subject: [PATCH] Update for WiX 3.10 --- BalExtensionExt.sln | 4 +- Examples/Bundle1.wxs | 2 +- Examples/Bundle10.wxs | 4 +- Examples/Bundle11.wxs | 6 +- Examples/Bundle2.wxs | 7 +- Examples/Bundle3.wxs | 2 +- Examples/Bundle4.wxs | 2 +- Examples/Bundle5.wxs | 2 +- Examples/Bundle6.wxs | 2 +- Examples/Bundle7.wxs | 2 +- Examples/Bundle8.wxs | 2 +- Examples/Bundle9.wxs | 2 +- Examples/Resource/1031/HyperlinkTheme.wxl | 13 + Examples/Resource/2057/HyperlinkTheme.wxl | 13 + Examples/Resource/Bundle2Theme.xml | 21 +- Examples/Resource/Bundle3Theme.xml | 21 +- Examples/Resource/Bundle4Theme.xml | 21 +- Examples/Resource/HyperlinkLocaleTheme.wxl | 13 + Examples/Resource/HyperlinkTheme.wxl | 13 + Examples/bafunctions.dll | Bin 74240 -> 99840 bytes bafunctions/bafunctions.vcxproj | 8 +- bafunctions/bafunctionsver.h | 6 +- build.bat | 2 +- build/WixBalExtensionExt.dll | Bin 131072 -> 160768 bytes build/balExt.wixlib | Bin 124864 -> 131526 bytes inc/Version.proj | 2 +- inc/wixver.cs | 2 +- inc/wixver.h | 10 +- wixext/BalCompiler.cs | 86 +- wixext/Xsd/bal.xsd | 67 +- wixext/data/tables.xml | 4 + wixstdba/Resources/Hyperlink2Theme.xml | 21 +- wixstdba/Resources/HyperlinkTheme.wxl | 13 + wixstdba/Resources/HyperlinkTheme.xml | 27 +- wixstdba/Resources/RtfTheme.wxl | 14 + wixstdba/Resources/RtfTheme.xml | 23 +- .../WixStandardBootstrapperApplication.cpp | 6153 +++++++++-------- wixstdba/precomp.h | 2 + wixstdba/wixstdba.cpp | 27 +- wixstdba/wixstdba.vcxproj | 8 +- 40 files changed, 3877 insertions(+), 2750 deletions(-) diff --git a/BalExtensionExt.sln b/BalExtensionExt.sln index 0031fd9..e7bcfae 100644 --- a/BalExtensionExt.sln +++ b/BalExtensionExt.sln @@ -1,6 +1,8 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 +# Visual Studio 2013 +VisualStudioVersion = 12.0.30501.0 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wixextba", "wixstdba\wixstdba.vcxproj", "{41085A22-E6AA-4E8B-AB1B-DDEE0DC89DFA}" EndProject Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "BalExtension", "wixlib\BalExtension.wixproj", "{3444D952-F21C-496F-AB6B-56435BFD0787}" diff --git a/Examples/Bundle1.wxs b/Examples/Bundle1.wxs index 3e64582..c1bb7bc 100644 --- a/Examples/Bundle1.wxs +++ b/Examples/Bundle1.wxs @@ -2,7 +2,7 @@ - diff --git a/Examples/Bundle10.wxs b/Examples/Bundle10.wxs index 1eba28a..60e4cd9 100644 --- a/Examples/Bundle10.wxs +++ b/Examples/Bundle10.wxs @@ -4,14 +4,14 @@ It also shows how to use the custom action extension. --> - - + diff --git a/Examples/Bundle11.wxs b/Examples/Bundle11.wxs index ea8b67d..f5c4403 100644 --- a/Examples/Bundle11.wxs +++ b/Examples/Bundle11.wxs @@ -1,11 +1,11 @@ - @@ -13,7 +13,7 @@ Manufacturer="ACME" SplashScreenSourceFile="Resource\SplashScreen.bmp" AboutUrl="http://wixtoolset.org"> - + diff --git a/Examples/Bundle2.wxs b/Examples/Bundle2.wxs index d5ec53c..c3180a7 100644 --- a/Examples/Bundle2.wxs +++ b/Examples/Bundle2.wxs @@ -5,7 +5,7 @@ It also shows the use of two folder selections and radio buttons on the options page. --> - @@ -13,7 +13,10 @@ Manufacturer="ACME" AboutUrl="http://wixtoolset.org"> - + + + + diff --git a/Examples/Bundle3.wxs b/Examples/Bundle3.wxs index f3d862f..febf860 100644 --- a/Examples/Bundle3.wxs +++ b/Examples/Bundle3.wxs @@ -5,7 +5,7 @@ It also shows the use of radio buttons install page and a textbox on the options page. --> - diff --git a/Examples/Bundle4.wxs b/Examples/Bundle4.wxs index 2ccf287..5ea87ae 100644 --- a/Examples/Bundle4.wxs +++ b/Examples/Bundle4.wxs @@ -5,7 +5,7 @@ It also shows the use of checkboxes on the install and option pages. --> - diff --git a/Examples/Bundle5.wxs b/Examples/Bundle5.wxs index fb5c776..96b96a8 100644 --- a/Examples/Bundle5.wxs +++ b/Examples/Bundle5.wxs @@ -4,7 +4,7 @@ It also shows how to replace the standard logo with your own. --> - diff --git a/Examples/Bundle6.wxs b/Examples/Bundle6.wxs index a0b0582..04587bd 100644 --- a/Examples/Bundle6.wxs +++ b/Examples/Bundle6.wxs @@ -2,7 +2,7 @@ - diff --git a/Examples/Bundle7.wxs b/Examples/Bundle7.wxs index d9cf7f4..2318d96 100644 --- a/Examples/Bundle7.wxs +++ b/Examples/Bundle7.wxs @@ -4,7 +4,7 @@ It also shows how to disable the options page and license link. --> - diff --git a/Examples/Bundle8.wxs b/Examples/Bundle8.wxs index e262a3b..8924e77 100644 --- a/Examples/Bundle8.wxs +++ b/Examples/Bundle8.wxs @@ -4,7 +4,7 @@ It also shows how to override the default logo. --> - diff --git a/Examples/Bundle9.wxs b/Examples/Bundle9.wxs index e939f38..201fb56 100644 --- a/Examples/Bundle9.wxs +++ b/Examples/Bundle9.wxs @@ -4,7 +4,7 @@ It also shows how to use the custom action extension. --> - diff --git a/Examples/Resource/1031/HyperlinkTheme.wxl b/Examples/Resource/1031/HyperlinkTheme.wxl index fd66dfa..85d43dd 100644 --- a/Examples/Resource/1031/HyperlinkTheme.wxl +++ b/Examples/Resource/1031/HyperlinkTheme.wxl @@ -6,6 +6,7 @@ Setup will install [WixBundleName] on your computer. Click install to continue, options to set the install directory or Close to exit. Version [WixBundleVersion] Are you sure you want to cancel? + Previous version Setup Help /install | /repair | /uninstall | /layout [directory] - installs, repairs, uninstalls or creates a complete local copy of the bundle in directory. Install is the default. @@ -36,14 +37,26 @@ &Repair &Uninstall &Close + Repair Successfully Completed + Uninstall Successfully Completed + Installation Successfully Completed Setup Successful &Launch You must restart your computer before you can use the software. &Restart &Close Setup Failed + Setup Failed + Uninstall Failed + Repair Failed One or more issues caused the setup to fail. Please fix the issues and then retry setup. For more information see the <a href="#">log file</a>. You must restart your computer to complete the rollback of the software. &Restart &Close + Files In Use + The following applications are using files that need to be updated: + Close the &applications and attempt to restart them. + &Do not close applications. A reboot will be required. + &OK + &Cancel \ No newline at end of file diff --git a/Examples/Resource/2057/HyperlinkTheme.wxl b/Examples/Resource/2057/HyperlinkTheme.wxl index 704cad1..d25713e 100644 --- a/Examples/Resource/2057/HyperlinkTheme.wxl +++ b/Examples/Resource/2057/HyperlinkTheme.wxl @@ -6,6 +6,7 @@ Setup will install [WixBundleName] on your computer. Click install to continue, options to set the install directory or Close to exit. Version [WixBundleVersion] Are you sure you want to cancel? + Previous version Setup Help /install | /repair | /uninstall | /layout [directory] - installs, repairs, uninstalls or creates a complete local copy of the bundle in directory. Install is the default. @@ -36,14 +37,26 @@ &Repair &Uninstall &Close + Repair Successfully Completed + Uninstall Successfully Completed + Installation Successfully Completed Setup Successful &Launch You must restart your computer before you can use the software. &Restart &Close Setup Failed + Setup Failed + Uninstall Failed + Repair Failed One or more issues caused the setup to fail. Please fix the issues and then retry setup. For more information see the <a href="#">log file</a>. You must restart your computer to complete the rollback of the software. &Restart &Close + Files In Use + The following applications are using files that need to be updated: + Close the &applications and attempt to restart them. + &Do not close applications. A reboot will be required. + &OK + &Cancel \ No newline at end of file diff --git a/Examples/Resource/Bundle2Theme.xml b/Examples/Resource/Bundle2Theme.xml index 8788f2b..84bb71b 100644 --- a/Examples/Resource/Bundle2Theme.xml +++ b/Examples/Resource/Bundle2Theme.xml @@ -50,6 +50,17 @@ + + #(loc.Title) + + #(loc.FilesInUseHeader) + #(loc.FilesInUseLabel) + + + + + + #(loc.Title) @@ -70,7 +81,10 @@ #(loc.Title) - #(loc.SuccessHeader) + #(loc.SuccessHeader) + #(loc.SuccessInstallHeader) + #(loc.SuccessRepairHeader) + #(loc.SuccessUninstallHeader) #(loc.SuccessRestartText) @@ -79,7 +93,10 @@ #(loc.Title) - #(loc.FailureHeader) + #(loc.FailureHeader) + #(loc.FailureInstallHeader) + #(loc.FailureUninstallHeader) + #(loc.FailureRepairHeader) #(loc.FailureHyperlinkLogText) #(loc.FailureRestartText) diff --git a/Examples/Resource/Bundle3Theme.xml b/Examples/Resource/Bundle3Theme.xml index a0ba158..a32bcbe 100644 --- a/Examples/Resource/Bundle3Theme.xml +++ b/Examples/Resource/Bundle3Theme.xml @@ -48,6 +48,17 @@ + + #(loc.Title) + + #(loc.FilesInUseHeader) + #(loc.FilesInUseLabel) + + + + + + #(loc.Title) @@ -68,7 +79,10 @@ #(loc.Title) - #(loc.SuccessHeader) + #(loc.SuccessHeader) + #(loc.SuccessInstallHeader) + #(loc.SuccessRepairHeader) + #(loc.SuccessUninstallHeader) #(loc.SuccessRestartText) @@ -77,7 +91,10 @@ #(loc.Title) - #(loc.FailureHeader) + #(loc.FailureHeader) + #(loc.FailureInstallHeader) + #(loc.FailureUninstallHeader) + #(loc.FailureRepairHeader) #(loc.FailureHyperlinkLogText) #(loc.FailureRestartText) diff --git a/Examples/Resource/Bundle4Theme.xml b/Examples/Resource/Bundle4Theme.xml index 517d7ff..c4b5ed3 100644 --- a/Examples/Resource/Bundle4Theme.xml +++ b/Examples/Resource/Bundle4Theme.xml @@ -49,6 +49,17 @@ + + #(loc.Title) + + #(loc.FilesInUseHeader) + #(loc.FilesInUseLabel) + + + + + + #(loc.Title) @@ -69,7 +80,10 @@ #(loc.Title) - #(loc.SuccessHeader) + #(loc.SuccessHeader) + #(loc.SuccessInstallHeader) + #(loc.SuccessRepairHeader) + #(loc.SuccessUninstallHeader) #(loc.SuccessRestartText) @@ -78,7 +92,10 @@ #(loc.Title) - #(loc.FailureHeader) + #(loc.FailureHeader) + #(loc.FailureInstallHeader) + #(loc.FailureUninstallHeader) + #(loc.FailureRepairHeader) #(loc.FailureHyperlinkLogText) #(loc.FailureRestartText) diff --git a/Examples/Resource/HyperlinkLocaleTheme.wxl b/Examples/Resource/HyperlinkLocaleTheme.wxl index 5bfb902..14729c6 100644 --- a/Examples/Resource/HyperlinkLocaleTheme.wxl +++ b/Examples/Resource/HyperlinkLocaleTheme.wxl @@ -6,6 +6,7 @@ Setup will install [WixBundleName] on your computer. Click install to continue, options to set the install directory or Close to exit. Version [WixBundleVersion] Are you sure you want to cancel? + Previous version Setup Help /install | /repair | /uninstall | /layout [directory] - installs, repairs, uninstalls or creates a complete local copy of the bundle in directory. Install is the default. @@ -36,14 +37,26 @@ &Repair &Uninstall &Close + Repair Successfully Completed + Uninstall Successfully Completed + Installation Successfully Completed Setup Successful &Launch You must restart your computer before you can use the software. &Restart &Close Setup Failed + Setup Failed + Uninstall Failed + Repair Failed One or more issues caused the setup to fail. Please fix the issues and then retry setup. For more information see the <a href="#">log file</a>. You must restart your computer to complete the rollback of the software. &Restart &Close + Files In Use + The following applications are using files that need to be updated: + Close the &applications and attempt to restart them. + &Do not close applications. A reboot will be required. + &OK + &Cancel \ No newline at end of file diff --git a/Examples/Resource/HyperlinkTheme.wxl b/Examples/Resource/HyperlinkTheme.wxl index 955ba61..b59bdcb 100644 --- a/Examples/Resource/HyperlinkTheme.wxl +++ b/Examples/Resource/HyperlinkTheme.wxl @@ -6,6 +6,7 @@ Setup will install [WixBundleName] on your computer. Click install to continue, options to set the install directory or Close to exit. Version [WixBundleVersion] Are you sure you want to cancel? + Previous version Setup Help /install | /repair | /uninstall | /layout [directory] - installs, repairs, uninstalls or creates a complete local copy of the bundle in directory. Install is the default. @@ -36,14 +37,26 @@ &Repair &Uninstall &Close + Repair Successfully Completed + Uninstall Successfully Completed + Installation Successfully Completed Setup Successful &Launch You must restart your computer before you can use the software. &Restart &Close Setup Failed + Setup Failed + Uninstall Failed + Repair Failed One or more issues caused the setup to fail. Please fix the issues and then retry setup. For more information see the <a href="#">log file</a>. You must restart your computer to complete the rollback of the software. &Restart &Close + Files In Use + The following applications are using files that need to be updated: + Close the &applications and attempt to restart them. + &Do not close applications. A reboot will be required. + &OK + &Cancel \ No newline at end of file diff --git a/Examples/bafunctions.dll b/Examples/bafunctions.dll index ae079bb5d75cdad03b80873807f2e574d2aa5ecc..62cef6ebf8da505e2ab3967688721330022e167e 100644 GIT binary patch literal 99840 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

bxL7(DdOrW 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 WxWIu69Js)N3mmw>f&b?@@P7ar^lNMY diff --git a/bafunctions/bafunctions.vcxproj b/bafunctions/bafunctions.vcxproj index 83d9607..0a63e97 100644 --- a/bafunctions/bafunctions.vcxproj +++ b/bafunctions/bafunctions.vcxproj @@ -62,7 +62,7 @@ Disabled - $(WiX)SDK\VS2010\inc;%(AdditionalIncludeDirectories) + $(WiX)SDK\VS2013\inc;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_LIB;DEBUG;%(PreprocessorDefinitions);$(ExtraDefinitions) true EnableFastChecks @@ -80,7 +80,7 @@ dutil.lib;balutil.lib;comctl32.lib;gdiplus.lib;shlwapi.lib;wininet.lib;version.lib;%(AdditionalDependencies) - $(WiX)SDK\VS2010\lib\x86;%(AdditionalLibraryDirectories) + $(WiX)SDK\VS2013\lib\x86;%(AdditionalLibraryDirectories) bafunctions.def true Windows @@ -89,7 +89,7 @@ Disabled - $(WiX)SDK\VS2010\inc;%(AdditionalIncludeDirectories) + $(WiX)SDK\VS2013\inc;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);$(ExtraDefinitions) true EnableFastChecks @@ -107,7 +107,7 @@ dutil.lib;balutil.lib;comctl32.lib;gdiplus.lib;shlwapi.lib;wininet.lib;version.lib;%(AdditionalDependencies) - $(WiX)SDK\VS2010\lib\x86;%(AdditionalLibraryDirectories) + $(WiX)SDK\VS2013\lib\x86;%(AdditionalLibraryDirectories) bafunctions.def false Windows diff --git a/bafunctions/bafunctionsver.h b/bafunctions/bafunctionsver.h index 7b0d107..955173e 100644 --- a/bafunctions/bafunctionsver.h +++ b/bafunctions/bafunctionsver.h @@ -3,10 +3,10 @@ #define _VERSION_FILE_H_ #define szVerMajorMinor "1.0" -#define szVerMajorMinorBuildRev "1.0.5260.23891" +#define szVerMajorMinorBuildRev "1.0.5758.27001" #define rmj 1 #define rmm 0 -#define rbd 5260 -#define rev 23891 +#define rbd 5758 +#define rev 27001 #endif diff --git a/build.bat b/build.bat index 90d8beb..3492749 100644 --- a/build.bat +++ b/build.bat @@ -12,7 +12,7 @@ Call :DeleteDir "ipch" %MSBUILD% inc\Version.proj %MSBUILD% bafunctions\Version.proj -%MSBUILD% BalExtensionExt.sln /t:Rebuild /p:Configuration=Release /p:Platform="Mixed Platforms" /p:RunCodeAnalysis=false /p:DefineConstants="TRACE" /p:OutDir="%outdir%\\" /l:FileLogger,Microsoft.Build.Engine;logfile=build.log +%MSBUILD% BalExtensionExt.sln /t:Rebuild /p:VisualStudioVersion=12.0 /p:Configuration=Release /p:Platform="Mixed Platforms" /p:RunCodeAnalysis=false /p:DefineConstants="TRACE" /p:OutDir="%outdir%\\" /l:FileLogger,Microsoft.Build.Engine;logfile=build.log if %errorlevel% neq 0 ( echo Build failed pause diff --git a/build/WixBalExtensionExt.dll b/build/WixBalExtensionExt.dll index 5ab6898d81efae134e979c42a6d4d4706d729d26..6f192705ab575c88a933844b7e3a102740f22793 100644 GIT binary patch delta 115483 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

g`2p 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 My#w}vC=QhW1F4m-UjP6A delta 88185 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

H)``?UbxqqDxVm@MeCtLG5f2oj2B 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 *9~IH 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 z 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 CR(Y)e diff --git a/build/balExt.wixlib b/build/balExt.wixlib index f7c45ebd581c4777a155783edc0581e43ea628e4..6b0945fc2fcf2a9db047f395ffeaf0f1d19200dd 100644 GIT binary patch delta 108968 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 >DAdGWsNieJ7xdk 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

X(x`aP(VKOl{Xn{SC?AL;Ucf=}f7^(N zY)K&DFNipYnNz+j&%z&wbxMPk#q<>5g~{!>%OZgv%ha30R4YN<<+$#CCw|%3A?H$kL;AOQ-2?@XUl@T#Rks2pJ!%!-@)G$R9W(^Uv z;Iq#Jj&%m%{l;6hm0x{4CbG*a%%ViMVRfk)z@5IL zPgnT?5V4)(A@@~00Xr#WRq|*}Xa>(ncpa^+Vx|29jq4-q#Y51<0VewH7KlE9L@It} zdhCxs(IM@0m~9lmcl6ww{>ns4nI4r!L3ydz1ugd`op6a9?wWEOLm=4@jV<0XRzUtP z>uzX5rbD0?ESVlfrlZ{5wMLRR3IWktJ3C+LXe-JFRW08>z#2#*8NwM%K{EmI124Kj zv?8m@7JCpXvY!d`K3ZMsG$}AO$RkFLL&iUDtVr8hPtyjlP+m7orbX*|c3R1DjJyCs zz&z~80UCUXfxnuxgN(4W-@$so;(v(LRD|vca*QD>`x2Zf`7*Lx@@l%NaKq7dHa6(^ z#PR|uxg73BmM+}+lS(N5@2+An6Oa>J&qFQrsDR_m>{ zYGmB9#cau@Hw>31SCcm|so!7?R2S8PE^jD@8$1z+c$diNEh*~fBFWX&mR4Rmp!taK zN|cfn?kJOT-4$&p3mo+m%PoDg%GRCM-#Rm(?oF-G&Y?^|xgW!nDILX_@ zYz^XxsNU%iVwuLY0r$gT#HKHsGpwJkK&cL+ zK-#TUr-P|tsIQv%#z?B~_0Y}l$R)wVk(b0aOdTF76*w0hL^Hr{AtllgRZQ!Y0UJT% zlwhE!=rbOAJ3h$e4jO1Kywo~#-6)YkKY0KR7%4SYn%k@>QR)hyglP*^1LmM1I^&4p zStBgqRSW+LiH?Ot=A*YvuVKlo2AjCG&{((PC|QHKgg9=RqjJuLLn4HdlLC>@qb5mfuy^3K>1!ds1F@1BhABGRGme`Z)VS3aFz3~SD}++DVyDf_lAr=_gW zrODodu{5;$98}UP<<=8@-s5&P@yeDvM+-(b_S?)XM+uJXJe>`_vzJ15}^fK4JBL|hCs^eL74(VsXkzQkW=D`}=onx*_>x60e?IB# z;-hCY4WMra=&{A_5;Vg}Geh_YZG<%S+XwNyM@5_1b_*f0iXl?Y=abCFg!jbBCxACG|sofXpv3gpao38+g z%LRW;{CKI$RuSppBW*kwhQD<&!QbBjrX^EMYL*(auM@E77m<7#%ak_5<-!DdO zn7`k?x3(WKfrfm>99-Xq;JG$@)q^Ud@TI5KY zdgRt)?zWBgyDOp4oYsD2HYSF7;xZ3?x(6+i-u^!CLw1zaD|xxNecmVOe{SyUk+^1W|0bg5E5xHs*ehZn_7<^sQ*658D`xLzAh>Ta zSzE)FkcGhk!38~ajzzrvHji(k{Rc2++TcT|!=9QX%>`+d&@_eCSg|KZLm=Q;!(7N~ zWz~yjmL0 zpzd$S?r(}z-3PN4CnTp>`(^L0sCT>I4=tI-S|TD+Z|_G_t*1_G>{7f3(VGh8`v-q|I&}#>h)d`P{vfpmK+2w`+8;9f13>^tn|XhhDUcQyFX_g0ND+8*vHE`$1Cu+5B{$9a*k^FTMvI* z;O`Omdj@CYsf2Z@Sw_E`OaTVLznn+lE(#i5gnQ()+x_Z!G0NEmXBP6=?``I%BJ!J)miTiHZRn^8Iua1zeLOwomx;@liPuI3e=Xv|Wy{11mx(i;$3tHbORUD& z#d~1v3WMrTN8ov}5LEvNs(WlU@Y+|^8$N;8sX^t8DxnuQA5`|M2ZxbJ^`n!F zx_c^?OPR_RK5|AALoufSAZ{MT^9#|TY+8<~{B5I7%a%gu{3s~><>=52-L{e+DQY?B zfb1mJe+&tzRRPC$4V1-l;6FblE{DW$8VDJfS>=>XsYm<z-yX)@5_MS0sGzqa%GEsZ{<4s-cn$O)dB&$ ziAjD}e&xa3jY$*zJujlKpDXon?#mDr=OL2we;AVIA(BpPoi)9d6-h$k$F4V>1q#G; zug%kAZ~ukf@xvo@uthhtpi?cLDu?)ecxgi-bie1wdKr4_zG;Cp&s{fP%yi$B-;(CO zX>RLu^fe8c^(9Q4*QLeE{A@JVF=~9MGmD<_)bN~cF{rU4NsS+N12rrzt%6QWYf~>Y zf6$RYc`+@36ek4rCfK-@*<}17_Js~K()pk=Ad}emZ!!}^tKuM}uxmX3X93DGjEQKk z0~|#{_k>jhzmUOKE%WqyQ_WHlur7D2P1KLDZEEn1q*)vI<`Zu)zS*+EF!=4i9Hm-- zDY`=xI|H<>Cab#dY4rCL(_|ly%Ue)Ae+8_KRuIJ>NjE6a(M9uNRH=%4UKP_76DWG1 z-;6NB?ff@2;(%#{d@9R}3>5`};dI(e4}QAG^%~jhHx)B;VND$LUAbmhu2JQh6LL)g z6n*vld_$=j)LoVM=$(s$W0u?3F!|aJ*l+jaTOZz*wg~Ej7jv9kR*Ft>x>axuf9MQ@ zzcMkyEHmCMGk|yOKy$wq^$rQ4hb}>MM%0HcGFrYJ0hg7cS#`+LC#V;^YnX&<=(5tV z5L#EvD&2m8QRx~&cNoyEIk9pK-HY^dg%kF>amNqfPJ*^I81!eM?x2j~b<$3|%0YHo zW~x*J0rh8J7)`&;F+jX@Wz>66e+cJNg-WOZ?E3_MzM)BnKqEpnb3>_I?zTc7++wj+ zTn;Y*ERL55bLNxCtBJLmmp9N+7hZtSk?){?RzN3Mq>oo~j2^cC6~uQ#+VJ##sqWVb zbdSyZ%3=}Tm|d4VkB0xGp&4lqX&s`^A>$li+?9-R*6QKZ4|V);L5i(9f2iB4+u33o zXRCg6wsBX`oSbuYYuRZ5`EbNIo$BndXjc(=Ulu3a}%Bz=odsj%{2OZ z^`AkMy_fv*99-=CN-gXeH+BErV(Agcc0wKyzclXGHX3&8d-8PGj&)KYI~cjN0k8L8 zgyu)zP0@0TRZzuadNq$yf8~HpyW#cY4U>G|)V%EaeRk3)ZCtHk3!`v0gKcmBE}aK_ z8M)8Ct7x3a1hnr7u2D7b-{|l!x)eTgDowOUPMM`k+?y7FzPc%2oQ>Y%>53LZ1k}nb(Xqjf5pe6yJRPn=VHBEbdn-^xIZVSPXcGm=R>9Kx|*z_%^%MyRqp!PU?n_2L0&K zoo>kBrHg`iAz8c{e=mrrM?OSv67e#vv_*lPuX1f8?`~c%PL`Wng24bI8M1p;eJx3I z`o=`tD z1QIQ1du&<|)2X7zHSh zqv+SPK719X+ZJF-MQjijHx4i#m-41*AktcT)DM9HRzzZ3J#FQUA3~B&-@S8?zWNY7 zI>%5maSG7KeE2Y?K=Q8jUC>%UZJEQOuCSX@x|?{V>wsL9@RSwVBQL|W>ppI^loiWW zHrdO&D|!3fe@{`=50tW$Qkzm^Q;K#n3lX5Cv^DQGiPqg#$-0{tE!8oX8$^{!yT`<4 zA;{!#av+?FBC%*Y=_|!U3DE+(Jq)BSJY%GYOQ}FE2<=vBs(r7|8bS^Vn##e?&>tI9 z;3EWbs^@yDTG0UUpTM|s#neVx8U9|C~J`ee>)e?9@V1ehIhaXu`PY>(F_@~BB% zgE#Nn1Q;8K2jq&ZunDC)bS>*o^_GYXwT#)<@M^|Dcx}{szw)_XP(GGh+vVCFa_xO` z?Y(mCc6H&)XujI1MXGjbblql$5E?1QyG8C?<8W|4*=}|yj_8dGKonZ39}NBhlPeaW z_=naVf6(6X+RF>)<1uWZrzg3`i+Idl4r-l0>b(y**^XZCGimBK4e%Z7pfdSrpw6z} zhQCi;cfN6$I+N0eidlMPGTp44L^LiV?An#m1s?Bq``xR^9pYXA%Vx}&Q1%R({iJ)N z-si&kg6ewE=;1#}WVqk(=D1INe|Adi_Z!|EfA^^`&z=DBF{=555IUygw>!1w6UO22 zed^AMH5;ksQ$lFJUekwr$MCi@P=tVcQ3ku$IPtw#@!kh3WD?u=U{V`1OtntehqnE}Jtme!z?y&N7>uxw^0g((vDHqM-Y52iLIQ`4w5toVy`-Nou5s(52+MMxE> zqWc^bYtwZHukBQEdTPa7ww41bcaDm4sbU`U_6VqdJ1?bT9$U%*weP&ME5_2W;sPO{ z3x-=iHl)qNl#?%zdr?6BQL^$(e@fj-sbVtK8o42#sP;>$H&-C{qJX+GwH~B~D0Oja zy}4BH7OJDn=7EFxycl8+Eaf==j0=imhqM|#f=(o=*`c!IBbF^%} zKyFOaH{$oxG(mVpeK#85(r{TT7vUNoDja2f9={nW3 znKEL-d|LmoA(Qd)Q(PHSKS56{GY)hXw1nhYOZ6*LTXGUv(t+|3f8K;Zeq`3kUP^^$ zr4*JjT-qSU6vI09_H`rwi>&;i?F99~X=e?RC6e`T1cXPMP@W2Jq{2a7FgqBPc^`hxcna>=57K)#1V z75tQlVF)9t-QM1UWLKxy+i#(lEPMMhdbvmpN7O}P@N&GVCte&;=Si1FI}#shnh@{@ zf9p^vBX*vDWl&uTI}lyy*Pg<*w4AM|zJgFgBF+0c+Bnw`}+avLWm==kjk$#U>^({$bFv?}8$P)aj+V>8# z1P`Lkq&VH)f#>a^P8jV-uPxeP{WnFB96n5DRX@Wjf7&6!|KUtOIcfL>^|coO|J5tC zMd~|$!~2aLUG`sgE8T--(1UGlbdlQLfd|@=Hpe7;$1HdYJG2}Tu$jkg#Y4tLMt^tX z83|LbVi|#;TKE9~>?$3MpV2fVQ1lbJyU~6W4QBtWu3ibkDl=hR2I_%efGM4dJ{r#n zLG>e0e@s(zHX;eS26vy)rLa6QH4h0cEwpwqvtPBIkXwi3);O~{s~=>7YUFj`(fK7- zpC>85H8qO5bN9loFna8GERLIw4)k2&WJJnzGu@>V?Q) zp^N_bj5So@&{=I<%dp*lR>s9t;mNboGg*bl&dR{hUH(x1StuPL`zT3Y<1?P43iqFt zem|>#!q@nWA5w)K6Do+e13K*!6L0p1e>P1_yABG5CMI6)53QS+mIDQEnn?E6@Z{KK z;q2JOVO#9Na8~U6aAs^~cv5V7n2${jXT&Cl(_)!nYb-r%iJ5`_kyo5kzk-0G%Ke|{ zi>ajrmXGIEaW39@F0E`(CMh*18sz0>5KwZJ8WpWgRl^alYL#tf%{v_V&WWvOe+AY< zN94Yws@fV)T|R*fWBIhdp1^Y&N6Vy0tHUH&@JB=IbhadoU~CR4Axp!mKb_3#XY4z^;0!1H%|(GRv-&?N!~t^3V>Hg) z$E||;wha$*ic>7-&g4nK7Y_q7e|dsSWe_8(n667z9Z|@c<8>&Ti!FG&bhxxZPNzVB z?1(3>ekXIH4%xgx_Zg;P`N`+H_54O8wb$Xm1D6Rt^hl-NB(bG2-T?dD&8o41COnY{PPjg@G1D;1ObzO46DHSC za(%~Wa|6bx>d|4n^s;{aKtPv~*VR|_+cnLlSZPRasregYt^dggg?fINyjS()j8l4Y z1_trTbq$OUc{L!W`_(Cff8_3&yg6M>L1|gsD;95bL#BQqWv&qkYvWTo+^KZ`jhs|D zb>|s&5ygnLchl1ok3f1;E-l*k@_}Hu;pXr)_2Gqe4W7f2Cw%M84IaTPeIvXPU#!xl z;SKnbF6B3Pnt5qvgJ)BwqB9K8+-wISh!(LScJlFe@P1o#--s+YZ^Q^ zS*dC|RpqH_W@^<4PJqxFto9A6wt(8bm{m@fW>dQ}sM-{2H;XEx6H{!NUeiN0ucDd@ z!<$w&cq-EYgdbmc0+C4|Yy@Jm4g#e*ygq4*?C5GhH~F zbcXHGtBo+9;F)?uL8`b1{?&`=+Pr)K#X>tfxPVxxNEkY1DS4^nByi240%=4{`d+AW zF~y19^8kow)6sn;Js8k-;yx6_OAGAYh7o6LEV!1E?hoQEe{|PCfL%4xggm7rPL37L z>y&iN3ur=gBfR5%5q6ydASScsLsm9sO*OLcgHG9x z)~_KCdOgJPc@!Bz2wjeTThz0-diZ|mSuIjS%GR?{eu=$H!7rq=P7D_W%$N}eL)jTo zpRP=SqTFxLe+L9zZ70T12q?O4!XiN#w6-JWUvTHT(V0%g~4#&vt=mvp;Y50dXX5C~!fnJiDY zXqI`v4&x{$Pz1N32tJ>f&e}+;&4jM^iSZE*jZlHYe_ZnA>V=|LvO=?nco-@JOaJsC zE*bjSo4}f~#nt7u*mreJh~_u`s$4FHZVMHa;P$1;=zB24_Gusjg$(hWk%H$suLu3o z(>pFU&`wULk=pocx;I8nUgr*+n4lP2SKS9q_(O9`&{H0kw0K>}%HBgK7NfIRKfLY3 zH@w#Ie-Z(o$%Ir(qxR1G|Q;drOb~aA2SRX!Z zL@mFPyaUhz2AS2XSYjSU)Ui>R9TNp$0{Nh7e*~{}U@*90ZjHVD5NtB&&rqXcB-rF~WlF1m7ckhE8|4HU# zk`Mx__5~Rf$eN4;sMID<82cICAo9XYoT6C5nqS*VS0rH)wA`s!KpNWVFureN-?_&3 ze;W3kAa4i^n}e4u5>e^I!w)~~e^}c|b{f6G?~?iYj#*eRUJbSIb~%uFh642b14fb0 zW|Xqx{*JCVCty)pQB8*JU9tEzVZwy!OO5=JYeYF@m&e&^?k8^+q8T2G@+dq()pA-h zB{*wP#!%}|(|&)(Bwh;X^O(O!jhb}Ye`%hI(xX0#!#DvkC{yA~COT_VM;!e=$FBUH zjVl&L-_LWSxG|+GAk!Jw8~o>%5gUCDoIat?ag^EC)F`m4f0x|e>*)V`%$7G z>i8r39pfoP+xi+k49t)8=_79Nt1q2l98r@d>0!!Zo`Cu|{%%EF6Ni-jp1vlt@@lmo zxaTLkDNL90s?vjwLVD09zgj{LQceuS%N%+ZP=XN{PZuz6qwZt4!)5;q`u{EqZG;Zb zx_08y<}8`hX4P_Xr+iKKf81(h0||htj{bt;@_FMJ;3t9CQ^tNwW!uoIaragIhL?2+ zgTT55q8*RH0`Lp!Pj@pfRQg5-mHa8pFK{MMF%PLoIlCRwB_Tfo((5EujMQ@guJ4!ye766=ZS3zbm=1K5?x602MI{Af58O5`mPz?y^n2V z)ryR^zq%S~U$LuzyA@6$&Lo?@bQDsn^(0Z=bPvWP!>Lfbrhe?=A+YsG+_|M*o7>^M zlXJkNUfoI2P*>^^+h~Tw$~zy$M@c6IDO}WP!XgVht@xPViP7O>b0}nJY-VQ~eogDl z!iTN%8~9+c&~Rn!fBfV3Ime&i@6YhJ5B^?(zt`aJEj=Coj>F#v@b?k?eFlFC_{+R= z?9ZYlZ#SRyQiV%x4KZi*&K%Q7ye@;1buKrY-`<2zNh=s_; zGaOJ~d75T@K+7qeg4XvDjFktAa2mg74$K0v;oM zDu2~Lxj1(me}TEPbOHFKp&H+6fZB!8@mH~v61!SyI8_1yNDB}bb)@AiXXR` zD<2E!Z{DU*2zLuK4k)f+(dl{!T5D09K1R;c01_Q`t2xO@q`V7~R z`q|^UfAfApXz&aA=?=0ns!M*Sr-P21AgrKO>hXLQypE9n-;bb?H_m=T;>VA$K;M=PqAI@wwTUC9z2z@VgAswEYC|nZf{&v(K(!2;pFa*o){uOcE~p|l<2=(&M|x|{Z0;qqW6o^rOLR}HM-QqW@BYB5{15?AD35E|Nu2RZ zW_~|A9hvXyDs|V|#0!-dPC!x5X>od33sPVYLLZ+eGnT4#`GXIof^*{ zb{2rNy1{*cxQfMz4=TMXMvv|OC-%dse_e%Dw7XR@7VZGVVzsa}-Hqr9>YCrf6s&cK zc#z|W-hF}+eUK>s8Y=*!lXw86P;uy+O;CjgF&DoTD$i1{p;Y{?mw!EkEXZ(Z50t>{>({oDICs`J9-Uk!=k{v`ZWcKqCco^b?Z4y2E?d^+E^KNx^e`t33 zTjWf^D}U{N&#K6XvL_o!WsfYQUDY7~HEPbVgXcvij144RwN1M&9i0yF0B@V-;PT;p zCcUG8VQ-&I?;l)&?|AiL@I@9R%HA=;Va`&j{d;;Z!}pF~!utb=dC814Jjut%JSDmG ziubfiX2Pp@SII1VG?&cA$M;Ikf5%6-!hetulqxhIxvKJq-OP+x4>bEfCVone1>lphP3AD(#w>X;aQYvgpe|fsTWQw3T zOVEF*?jk+GsxPo<$pU#S!JJIUX9*wQZzRlR3CEKO^I5{H_v6)r-a=2kqj4MLu+-;1 z!D2cdk5L^Rhu_?f>v#{D#8W-o9hH^hg_Yv;N->k zyFd_>YaQ-7YtyAJ4R&@-e=90BR&est{Pmg_4JDDjLXXed_!jV!usK{<3d$4SzV!68 zTnI@@{5Gx7vIKA6l?FlFP!Io(@-W)0e51`!oA#nq`-yQolcKZpa;|F>e}TxYWFP{$ zEVkpgd;3|wNKc_>i?#6>UfXxvHd<)8S}vr!FK&~RX8hDq(tX{De>NEMW#vmLj0=gX z336y1LWkC04;n$IhRw+fT|+C!VphFH$wRkw6$a5Ky#Q~Q!j?J$f~;`}hheQkiEDw+ zFPA}LeZ& zWbV>4!{*hVZpkX!W5q_+j`8*Alxdcc*`AV_-j{(ZGg@I4LYs7C9!(;1Cpywq@Iq+4 zp7oPt);h|v387LwOH5{YDa#>*=IdEM9GXag3#o`x2s!j3f9uaGLSf)4a)l757g>5% zkz-UOPY4}b!it=KR*|RmU)u~F(uVk|uA-M_MLLW^p5D zQeQe!M*X z9!AxO3<}!_e_c6u*Xlyrs{3%e)Gv5m{}EX@Qr+2yQ$EJRo9RC|!LG#)vjwKsV0@ig zo{Taz{!o7@qs;#y%FrEP&q>h=^7!g#nRRTYcmIn?os_kN9Kk#Fs*j{*T?Bs@U;xh^ zn_taMunymm9oke%?#Q2M+UnKkIvg2`@<{`>b17kqe?OUJD6T*MhrtRGMhH8@rHUp0 zgSj=JYZ_il2kxS#rsn1FxM8<93g`mD5$*Dqzg z?9w?!%jRHcm7eyPkyekg%uI}(CpsJ4xuTtZdgq0xo?S|_f=|7`kVrOJrZ*|>Y{@ld zgV*?Vf0Qa4&ITLGZxlgz#SlvC;|D)Jaq!s1UdkKLrb(h4R}<= zwRblQEO9Z5BoZZ+h(UrNphQK8N) zIcLtCznQ7@!Qzw*+U5#cw=bo85S7QDqZ6TTVvaNrfVbM9c-n0wEl*daWwdERsie44 zf9oEm1*nt$uya@jF$wQo`% zl3mG3FXOf0OYq)SS8|DLFOd=<9Xf55=t-#6D!G!;mlUx`coK1H=wplIPX(BVS}l@m zF#02Q<*Dqphay%94_F?gB7@qsE$oU6fASncF2XTfG zOoM(dB?=nwh|ki|e$#+2WYp3%e^TyL+21cs=7XS3&{HXtQwAXQ`{W$^aMzNUvUVSn zOx&>|X%d!Pvo6$@4lr4^FAgSjO$(<>yl}-mr2K%wLx zNh|GY+Agic!?0zmjOg^r9^3HS(EYo6sRei>S2@N|Q^eyHizOf%fnc|3kvr^ZQTFV1L?A|6`QvPe+tXWii-rp{P&vK*OfGe zA;vN8Wlf&x9HTs~dS}e*gNYxid{FsKKb>ZPqubqJP)*jCAocOw&nYHYR8=8Tib?f{LM>Bvqqp>c8wSde?WmYiJjuUYN zu0f>lUc@jie?LPB0k|+Q?cuX9rdw&`1ECW{Sb-!&W&@_Z%Kuc;R1Te>3COed(+peJ z#Ip_&h?0gS?1=~KSFn>}wi$XmeC9i%FjCZ1)p=vkQd zDIf0PS$0E~owD9kv*sGI=2F&Co>dvZtKo0}0iW^>fAwJ*q6{CF5f3YqF9XcVxoic! z@+)i(Qnplqv?2?nYYM)d^F>o}O;x6DCUtOym+UUI`5|XRhSN+wK59 zb{N%jjbp*5w*LTm_`Km)ivYyOXTdL8@&Eeb8r`i8jkUXC0@uqLC^F9L009%P25FOA z9g+(~gf7W-E>2Krcb#Miq%-f^T^KJ_gNHvfe@pHo?JgqQg>Osy0(dRizDoM8!f$_# zTwtQ0hXBOuW= z!}~R|0kuj;lcf?3~=x=kS80 z1XqLPYLQ)g=eQaTnaMn}QF0waPBG|VsPmy!((vY}BWXWU;m0v3*a8~ENn?f+e|{() zMDs~DsE~w{YEY`}CayFXIza+VFyDZ$hb6>U5#g(d@by&L82I|3hOagNKy)H%Cw$Jt z*n(a84Op;$+JFo8!|Px=FMLax0qxhe;T(i%`j-YaP0^xP17+JdOpijknXld7hqMao z!;s$esIVolELgF%yh7N%K^VdRe~jxd9QsxcA!=4*2E%UQ!OL_24JNWgK*b9ciQv=|e<;MCdY=@k zMrSiE{IO^XJ$~#oj#S=jp~wChDrIP`i{R}QdPN5nnoNb95!@TnLbW@H6`xFOCV)&e zJe2F`Au8E-9;e4=F_I{B(#gvj9%`fN*G4tYI4W3B5EyiC(ttEMx@BQ&aA@Hh@Oc|P zap^DInKF833cal&*>W(*g%A~E))E1N%h-R`1gSZb!pO58;L*l4QK4@La^fw z2C8(Ag{@y>BB6J5B=phs(rSXzzX=XQe{hYx(ZFoKh4uJOjG3`-~)=`#0lXeX23CHx39CfAa2C{G`TlYHE5OsHv$2sfpVe ze^zH{#R|PG^X9(r{xQF@28JSvs{;5QoquLc2a-_$zDZt!t|XS6gf~!O6U0q#nO& z1a>wFe?V}-92Nh+Wf0sLEe2_O?Hp{Yk_iZ(KS@ZI$nruG1tx@Gwm}H{?UN*Op_HZA zH)s$?@oNypFR@_`2YiTi1b}k@;J)*uS;!b^uUIpL8DoO4$z7rWdH=YfBv_NL&>8;iFD(nIy$r~CLX|5-*fdh5kZy1BjjiRG#+-gP}dUu>7 z4+9^MDf4z2XGHRiyp4~$=>_$n2W})jOSY}xwOsnd9FJxP_+vGf9aTF3pE3x?8BZFf ze@xr=V9GpH&8G}<;O1(Ed1m|S{GL8%x*-iyBe$?bpBEVOblxs0AM(P zktpP#P+r=qEoW<+C^$x3-6}>U+?rce~UMHZCh1CSmQCgY0(0 z>PxXK8^pSMNc%*4n6%?!_ClbP_N5D$|H9s$vxq6b_V(OtW*W9Dcl1+me<5ydv8n-G zg3(-_vBO{rG}!yh;9?yy?&h@6PMH#HZU*-8yQtd7pxOt6EV^n*3#QjOQOSC82&4F$ z02&Q+FO6ZrvahF3wrNex5nF))3YE*Fw8~oD8X6#*VbY(-wkH14Re_JLlMu*kf@pK<| zEIJ<7dbB{qm>~0;ZKHVKxqTU%v@4cXbTkkT7;tiqXZI-uFpr^yXQ74B>R({J)4~$C z5esl`w**(9nKOoM%emRuwd`Gle3hIvc5>EuWbXoU)y&w2GnZZsWP$bM_Z{*mzwhGG zF+2v~^rLM*dNsa9e^gN+rdZj*2kw~UR+vX$cJ(t>cI-cam2D0h7MJ5e2A_1H35n$- z6o_&D)dA_vT<5x&zN#C%(XNeIB_wucc*X8?yjB8Z6P26Y@T+weXIQVwl5>c z&G3jR=I4QLAv?+_+6uEG1G+}q>ccBVA9M9xweaoZnEd-Ee*iyecR!zZ4gG8yB|MF5 znwR#=({oyhlo_}o9N^8$yX^_J1B`{*l}}e<#SB17I{Z!pRG~@K97Lg5K1UNRLep^+ zpqU5$&O(^FBtv7&hER!zSUal^luY#!{j z^>}MzX(EoUe|rU)Iwu5>9__-I{1=M8`{6|<lQl@=KLpdG8#9 zU+ri7>Z8X;=U27;gQ~yEj{d6K4gM;wvr*(Id8~}~l6F@&``5|-wX%Q51T`85=3WmM z#*brSe-bQj=v#wzj-ozW=wVX*9B#@yp2;+@X%^;$V~b-_-67R7PX3vsdb&+l5Kmts z2+Ccnfh@xAPOtK06_=kok)-^c(!K@A1ryur@&6VSa$==7m?S}&vY7bC7rcXP!8@@9 z`RtKU^$|RWN9@{WNB3q4dV}~LEr=4f0>_vJD*{sX{3aukbySe8qB2Ep-|XB z+M(oR+`HkX%i@|t)y)_k2GZ2QB=QUKHFzj~4W0!EW_B8eC3-qu zAz$|re_vAFj}o~h7j3bs85ncw@o;c8;^zR_pR0s`GweR#l~bCgSV2&J?F|ZVqKstO ze|_K*_d$e4rU4q6Dm3mNI9PZ-!Tfv|JZI1JVa;Ph$Y#&=p&ezK zFsyVw6dYDMAEHbt$<-vgo4gDHdXvL@e_>8(CT-nout2n#`}q1^>N}O_heB|$zcd3F z(o`^nF(tVhWq+fOHKV`U9%zOez7r6_CoQbM#o|Qsz^-Hc%^);TEKl%qm{oD5{s&4$ z_9O@bx0zdY@5>TbUoe+yC#$1PHHIR`|X4u~iB;V;#c6Q);(Crm3F%NtEE|?d<737owqU718+OBSx zK)^Dxu{Ja%PBM?J0~GJb*R9&vCd7@cgBV>M<99WhI8CRAM`e_&)DFp@0^y8xWY25=^;;G~p?HK|k2{;wkS*LlRN z&ChGp=QGUDMR*>0*}{3lsor?-A5g7gb=+)^RqN;`D=YfB+v}Z%!8tX`#FP}qfP?n> zO8%6&viY(QIzfv^Qus$I*qCEr7WJ@S>tSlCpgr*+At-CM0Xtv9ANOgGf1lc>^L>zq zI+I?WT>o}(3Xn3|-KarpTLdWYnNc+CxL0BvYDiM+=3*Bv9-_+ zI}G=0_?udnbM0L8+^szeElx#+Wvh+YTU-0VJe-7ha;cF?Zf(4J{ z+r7$LXo;#{O@P5~q3TMR3SF`fFDF5=cNoat!NCPINokMxiJ*=%>1D6Y2=ng(0jQ(1 zCe0?X@E;<*&eW z@$+Kv9@OF`^{e=Mf7lK0Vb|XyY$uAN_ZYR=ceks7HaH-0HBKV`F`qINpgAVhXVc)a ziL4s`OkBJb8aU=v4xhonoAUpgOeU>>(Kec2tu*VC#zWQIj?9&Q?v-K}1I-yFuj zZN#Ivt-)I~BJhZn^T?W!bBYF1ItCuf!vK~CsO?79w!hV9e`@=+64v%jhS%KB+Ww$b zZF^MMd?&2JCRFJV0v;ods}@lnkNT zCzAlE<$U@qJRB!;?0p)XA$2!?gM;^L3a+7CC>FmmOja zu=sH?2J2+ee-N`M8f;m-fK$~-ve6tAUF9$q^2W8*%;TR%v~{^0llNiL#}1>0LOI1q z5Zz<|e?Wl0f9>`t;SyByJIVeE3-&Jh*-8fTR-aN%KaWx2V;*IFiK^c<{2cVVZxyky zpxU-U77X-3k!n6{ng~ytey-bRA8OV8eqKm-^YjWxck=YjkbiFF>1!c0@pcbrrYnjdeNR~tPhY@33QAqPJp5vS+08&>kC))@ zc$!R082`Lsq<@KbL_8E%Ukp)ET@10}1}#$QA-y3QUpDBT)osU<%!=ozK6ct4K-z--)!p&TmI zi!5fcZ=Xkb_+kBNMwt2C4W4~vU>)kVP+F-d;3fNLD_Ec8YC}WdfaGo~6?AVwX(C7u zc-lP5SZ!Wqz20s0WO0iMg~w0ouK0;Gl8+uSc}cqIC(U8({f$S|X_UI&6mQ;IocCx& z@rFQo#SX(W@~!AU{S{@xX#VL^D{9a7ETAkKrv98pp~x`K7uK_JGJ3u5-zC^~7aow# z$cD@Qdrs;=o*}2;L!a0*pS#Y+y~4-_{U#B#lYcNg1F6@%67SYLsnS~430CQUk=8y% zHk^`$%__frg@nXXQh+99QU6Ki{;8nYul8Tho5C}zBQMh3ktjn0R)tqg&bMxln7n}Z z?_rgqyP{QcN&)q}p7jhWQJZ1nb~6`Xn~&2Ss&p6!qI|f{*fFfX@T;Goe$SFAw(C(~-Z%E;`&rpf&pnva9 z`tG9dbM)O!-#zr*`x)woCqGja-D5n3G256X$+C1Z#Z2?{FpW`Y!CH!tW~^7L$1cO+ zeyvN&Vj`52b>Ci(-Frze$EKxyI6&x#>UxG#Qdz^p4`O>bq|mE0us{_QqNYK##3wLK z9IWgwAEZ#_2hmnbr{&cW%p9mHU4P2bmtuN)bP;cX8(Icc>F=AM@I|MonUl!?+)O5W~0;l|Tt|9#kbapaqQOUIi7fOGIHE zq!9$^@O%fP5jaRATi(Fm<|p0Et`x@7if4e`{6QSyn; z+whn^1rsB9`6sb(j13s@9YTxR$k>29iVbL8qsIo=kcBg(>YBx0$QBxSfUc2_%j+*S z#=+!7@1WgCu-2dzj^vZvGJoDLU_L*OwtC%d>d_HREJb6KQahK{36xHH)riSI%~L6+ z=uM!QlLg#kiQHns8XnV!yrS$)omW)8NxVXhuQ1|gJmEV<#Y$U2JVr;^Z&!oN$Rdnx ztLMV*69t;EyT#OIT>tc<4asW%d877kD369nr68GY*Q?3r1L5)i1%G43|2yv+u|eJx zo5&q8)eg;5lMvM64}xU$V*BYXB?>#hWBhS5#!(Wi$)|%}s{u7+K?~JmzLpr5|f$@sM!%MBx4N zMB+H}EFXA+ozk^NwGp!okylU=n?<$Y0zDjIu9DJ8%JYlJp(eYJz{-m-N@^Ssv4S%C~K`|&;%bC+)h;Ig!$)?rmRi@shmzhBfZmEYH664HPk~TvWVul7N z8im-4A;C7K;Xla?t)06;W)63&S84ETMi3advcsUa;>ZYCeF!w)#VoV@_)B<>Advzv$~9X-C146opx52 zaVMPB?If`-CZ{pI3uU#<+`#e0wYBA{)Tf zwX}_Q6@T@5ua7MwBi3RMWoP+}k-uxzK@A+?3OGgMX#?t-rA6cYua|Q^fX~8KLl|3J zyun*-7l{Y?vDX|2hsWelAlZBhBwNk*a${T$1FhW%+FTpG#wIV1KDz|_yy7jK2@VPs z8;1{4XR%l~j0?Dof}--Q0Tu{XU<+PPHD{sZVt)r2#RI&*q=ttAnRUML(9Jp+^XDEt z5GFqU<;;lqiVS0X#Tkzpo}qN%=7k zGbv+OUVCj8U$=3vUK;FJ@gUcqxd?tPiyN>h9xv4x{xYtC_|S_-c>oQ)KyXT^I>Q3P z@_*aeArd@1Q#p2eWXBd`$Ismp2dPoVzv=Wv#_!|JqzR+H|LGCyXfcmHKK9D1@&Tp?{lH z-O13n)2CeVB0FlJC6C1seS<2c3ISlNspK}M>XyLLQaa)%?C$p}nFY+Rb5T9hPsHCG8tly`6x`x{~`pMD?KwVU`Ui*KB2 zo>a@%g4jtJSDNS4^;*U>b3kbFT6B$Zy+CWH_Hl}n#0jh%O=rQ;n9fKiyMMwjSH{Im z8udL+T*3U>YCISP)+Cll2;Pi)iITnAu;hFvj|sJFW*&~q$5&FoE&wFDoK?4D)MBcS zy_i1I)eqtQBj#CJZ3{FQbHzawp z5JEpbIYyv7$Ri|UJiB6)5Px~W<@=>gttN)!tsC@KuHdkJ8=CZU;?1c3d!L z5*Q22BN%H>HxPyozJN6DAV$y+bzdTltcQ)fpH9y>7pgutE|3l1;{zZcotqH2BDyRL zvrHUJw^Cp``gzXg3=c==(&PNA^~WdhaSA=&Z+QHC4#KMkL*wYUgnu5{Yx60V!%VIY zP*lFFE1C{t2<@P7R)0T8K9Z{wXTC#ncVaN2ze~o`JZR_`A_Qeq>4=dI6$Kqylz)e` zJCE;(Wb?uh|GEa3Z+Je<{QUAYbRiK+7kS#&u0c`)27St%D-d#qkkEHNQ;n`idw^F2 z?&QM%BEajPwtxGeAzO?>Bh zU*!BgB)}U^mpAWT}6itnOm8KaZ>Ms5Na;F|#OSR!U1IJZ20 z6TlezJDkLV&rcg8!uDng{~Iz0hHEY=5*93HBH?_Ti&Z1Hdw6;I(Fs~`Ce!42hBc__4|9#W&@MEsz<>q|` z17B>P!HG>{?te4*%9U6#j<{xPQR_v$0Huy)`o4l&@^I(~uEad^*<@wC`o4n7-jVwX zI*s~`L--f;X*y(Z3)$p|itubud%`XksoHc{Twt5;>H@z%K1q#T%Elo zm+h3R?bl9<0VQofJ@f^JmXbSS$49*U!r9T%i?X9Pau_=T72Vlxu`vUr-^orWiS8m^ z5fB1FwSOURV6;|3ypqD9^* z;Rjei`tA&vGSdzGHAkHvu_KaS_XxIC(R zY*Y^1(g(by><$A5e)$fA9DwiN+Nbm2&OV(7kKF(EFY;rji676Ns`KNk%zSr&hsiNw zn)&%gQI&7(%E}bXGRVwp^j$w6z&keFuJg~o->&k{U)-*~EZ_h0fzCf$KDZ$NH0}R+ z>3<^n&?C2-cd(Mbx{mzS;a98BU42Lwn{{|`omW$LCt0}Wii&PAD!TtbV|qcUfZI2e zZA-|Ntva~(HKMqutY5+pGKB>VjnCmQKKCm5DM+FR3Iqcil3WK_w&ZSUcb&A6VBXw+ zHSPgFW+9sH5>gE!D7vXZ(giv`0E%ojV}A#M+sM7V2EBkSMoq@7$x`@UC(vQ^?Wp2m9nsrwvSk>9|G%-kZ$BY=$?;|Mkp4cykxU5mVf`S zRA4T@nU{Sb+i_O*1#HJtvo#;1BU^QJaeMED&qLJrB8OV&=-GfLjezT*Ve> zSPUND$HapYsz)2h1F2%_bXqA^vwuuzSws})QhQlk3aMme7VrjU(pWONuL@V{K9bJ{ zS+R-x*rKD!*FRevzuR1muNl=}AII!tbT=Eb{B0SIv-~}{n5K@jyUT=!;O&MJMQ&M) z(~x#SD#c&Yn7($MF$g+7@hw3;A@4ggDd3k|fIi0f*INzV@yM-O>?;DG@qc5Tm+yyk z(RTle)nY|)VUZp?s_idy%*5!MAT!A?5P}n0NL3lvf-_>2_0|?APcEW(Ig>?T&De)9 z4S2*}I>y27Rel>%y=E3PR}SLY_1s01pUFkI_y2>rXx;-|HPVy7PTL`eqS!(040x5B z*hvv$6TGjInuePS27?ncPk$RV*rYc23~#Ur8C#LHh6BtwTUN73fp+C4XYoddi&5oz1`c zD(mSTEYM|T;eujdHjB_X+c7JK`?vff(^NPHA_VMLT$^^*Rpkt*rBCFuK(U={^&q?mV!+Z)d4-n`qUFWPfS=kL=&)b)WW&=XIa< z;q%A~bIZ%ige`ZM7Zs0s-^9Nk|4SHJpmMjrJ~_(VPC-)A2t6?}4u8`I;~0K9Y%!J2Aw;_9)9B)p8?``SjGeeG z%it$D@(GYh<&DPh-qSa#WFiwi9Q#D4lTSa<>E!$;dVlPL@`)b%(Dw=XPlOFfJX;wJ zZ8eb6zd}C>``63qZ zqa8A6ntzU`lU`1?g#LMb;3^Us=uFWLP(bD6rlgl`iJ`&yN%cQfcYO6`;I6FWR@w*1 z3nn<4yrmZP8g|_ObptarR6`e`Qx@pCD$^_<^s6Tao|YN6M4=_}6Ef29A(sl&%VTHp zk?d9yl52gm=$>C<4CS(`$Bb3-mNsKckK)(E>VL@v8SLZ&Je0NcHvV!jW~Ffo>Rfio z)fTF5g90gZQUGPU+vYf$&i=!zm&TK-l&z+|Gt|C^*fyNVUvN77iCxgbg0-+~kMfOc z3~cx2DU9t-$3kM>ObRcWO)WT7KC|p|ex6fe1aJ1DV;^bmTVd{_v#8AzcAtawb+PdT z$A6lc9I9n(JkjFl2Apu`JnDEx3Gm!B-)Q$cs5UX1H!&lc9=(ELKn4tmEi*|T-yyNB z2VX~x5QsN01v^rJun#gCxO_fNZ91w8`c@uUfaT87Oh4yS?p3jbMGyN;`j5ED^ zo;uUf$8q3q`aFN{Z~9qXXCZx#r(6FeCk;4*eKKkJiFCt}{r^fk)_>Tx zuJXN(A2*2;JGD~=ZCRQ}ahe2;rCU2vP-mLbm$y9Vdt>X`b#Ap)U3cB2Wl8Khp)*-n z_hVWMoz|%Z4KxOb5n5V}jCHBAGAW==%A~-Cu;98jutyl~uy*+#=h`=^Qz{YZT;Fr< zch3E8?sw1mzVCdGm?c$1*V33TEPw5uam{hYf*Haw{}WHu3QW~jB9m236l4m}S>9yG z6|>o|auR^(n2sp`*1$g$MWbFDZnI);DvtCdXilx70QP|l+L~qt$^|C)EDim**`M`!~xuK@nHnDOzzc9Dn;@V2a$U zm&#_3ObpSEk+buT)x3$dtVnIdoEmpnLcNs!W<~V9;%KHgw2!jlD3baRHM57bx)mxj z-AaE>Xr^E88-fO*f^N8x zPtZzT-2y=Dl8x5m>RJ;UDSxh*tx%6IM4eU0e%iG-fj zK4utuv`1kB7ORNmhZpaVX^8*~TNhuWaG0S#!g-;GVpa#7F;ZXTBY!I3z)Cr>eu`nL zJxPwfN>44B&!L-DFf2)C?@Y1T@Me8Zne>}_lgY-7*jG~UdUYf1W?;0r=09|_o87yz zMxK|fk>>?Srkv);5aAcjG&5x=#xpQe8?K`pMoRu^-l_MeR3-TCdIyzx2XgSgTO zQj?FU>DN9pVyMGeX@A6S-5)h0_Ox#rVkUhsI&t@j_*d=Pj-#|iOd6a8!B6qh26qP= zWe~uA21u3TJ3avaM3_l-#oRf~vCmg1B4Hu=oPOggPvvi1KeWNiJL9yD?2&Rx@>lro zhL~m`k;`W%!Xlpf!nOH|h@YLo&f;9(dR>9Y2s{)IPH_;z?|(#y8!$N7!|REydElU# z8*%#p+VgV~oR_AO^KW&a)LLb_dI$%s?VW60s zTX(F-tbM@=Mo0-?U&Q`lT~5y0kYH&ok(1V9b<_Oz-(G|%F?lNX>M#{o)R~#DZFQ!( z7$0)Jp69=I>G^s2emyT|b;5aE_|vb4^GCZncOPQs_9 znI%q{$P`oQjK>0(V}XfSU^0ej5EE#yKsj>U?6`KKHopfqFL+Be`EYb-oBNnXeuVUO znwNMZqs;0R?b?U_+^2}4+>LGvMYsLf?Gc(OGg|WtX4rkz!qDPhy$p*f){}P%*sfD( z6qM2Wo_{s>d9hk-4ZbG&%)vfo%vf}wt6N5U?kX|K(e9NLC-uV4Ft7d>9t<1)P3Q@p z^Ha?4P9LwyIY3E6fpJ(#9_I_;8e*!5iuS=#57kn#DJe{NRR-h6bJsIosh-rgQg;ru zjspdcx0}2NkKIbE<{}hp@dgtj|49w&LdJogy?@M2PH0N*)%jV@@M>62S#J`Q^CFAO za7KHVqkEO{Qe9zZ%RIQS=zF9)uS4HW5@j>dvp98O0^`>BZU9VqD4Pv7k|sKi!RPSv zh;ss+hv^+NKXN~ZYw#aVncMHuQ(cJ31u7ct}1IRf16Xv7+2b@3h*h9>}HX{9BK3i&tEUUtBf6O;&zx)eMr^%(Fv;8fq`YhtEjy3LUk6PZ?p}Ymz8g1llvWsC+BF4p9-{Iy+GBIXnz&&WFIl@&~K^jNo*?@ZM(RwTXb{0LDk)&8s|~A zit6rHsk%;7*N#$kxu~AwYLlow%)p=RD1-PB?z5T2foFKV7oMS|=hs6BvC^^}-3RscIvf)KW|879716Mt`SWG7c*b zEf0){mXwOsno*L zA8xRJqzZ}Lqw6?nG{U6u=LI>tx|fS&_X4Zzwn4cB=g-%UNw%5)EJe2edh&l|!x7B)9Vs+)aaO|j6)&}y2_7+?X-gA`lPyknm!?kH2 z!FcQ*^a0;aO90r%t%|HVHfqR|ZV?D18+>T+&Q>xZvp^4k`Vv45 zuCliHt!f`(;Pde3^7U&cR2vUF*`yh9f*+9;#UlW zltKs{|K9!6xF@o-C2?a7G}WB4>U-gL|etzMpu+D&q}szK!1L$!C*o}63-D<8ns5;iTEB# zkRdheytVYTzWSc+sh0NDR(tAepTwf)H4AMLY_&xD6s0~Bi7?AX5==-oVa>eH_ufs| z=uFagPEY^xk2`nny`TBs&;2pq`@J)B?=P_7xFLZ00Mq%W{2KSx{) z#Kq=_UMC}T2@sc96KbQ|za&rg<&6`{Gb8i^CV#A9A<`FGl%FFm1>#b3#AZ%t5fF>4 z2`vSxCckpYJHlC^Q+`KOtIr#TFd)3Co?j$BO8fE~1>f(^hlN_Z?vG)F`^;v^6!E!v+U0;hmDWzGFznrD>gvQJN^rJIXf$1{xq5i>_z#Sy20 zIDc)9aB*63AmY}vJ|Mfiq*wO!rqk**7x|)tW%>~iADJV*%@JpSIAe}@fFS~XK=fJD zTFYql%f9|}TK(oCFXfq@1>&qZf-D^%J_h1rbHuw05f}hsz?v3)aH^FI%DzEy?;ftn z1|fIQT;?};uIGR{XO7s)5ko)>nIn9h*MBe&!`8gm&-zLdvM-TdT?uoMeGJer0>p?p z;x&#K1!B}3@f<@0&I57Ynil;tPAf^uzGO(@l#&oP|I^}>JCWHZNd3e#)rZtEq>h=U z7J!CvhP%SQ=Kxe=9RSl>VXE`T2oxc5mRUi8$$%Rrm&>-?ikUE%f5Izt+=_!pO3Lj zd#yEv#t~C!imx$5fNKg%T3=X=;)=qORu-c*Ec=Eh)Dsj(!?3x`Q%RQV z6q@3995IEa*v}9Ft|=^e)hCJ9dD(Y9y}Hhui!9}tCR5tN1o0(~7}ppk2sfw2wT30F zljjYlIY@&n=@9q6b)Fu?q$6X8&lB?xWZwtr%s(*C^9M1PO9L2@fY z1h|T^WPUZHbyD`7Os8dGpBSSo(^J-J=DpGB)Xd8a5#VaZlGYQWMC-KdJDpC;!amu~ zGmTrTnUc}z)Jy@V#np@@tucDHP;y50ok^!>HX;B12@On9KYjlR1@| z+079NQZ?p?Dvp4f35;0tTE=*d%D&O`>aws;W;2lu=dIODYGVn-r+>=ziY3*dA*#U- zW#5PCHE1#KIWojDonqeelcDMKN)tl_xL&cORn2I{WM3?umW4HQEzfj{d5<(SonAR} zj?v*rsL)>+wicA|5gC6mTn zroeNZV&c<1IGtko4Sz!fxMH#7^>2g3>zwR6mtI{K=FGi3(<$aXYdC_>drT2uH!}ou3MM~GFs&=Y zEj}3)TQ4%iorXkA9$?|Gy6`RhoB0s>N%YT|8{>TyhxvVMT=L~W4 z_;cC0lS`yUWB;65uc^4j1GB^f8R^9y7o*gO2iAZ_iQP1H9a2G|#1a4gw3712C8b`p zqXJy?+rI<0*cO8dUoDmm@qI;foO7gz)2eb}1y1RQ z^jLP+TtI4n1&Fw34a8PxBkHJg$2G(6sNF)yy`-}_Q*F1aF}pIPbws;dLX%2|7#~Hr2z^V0WYh7w@zItOm z5esT%?p>?JmP0}D>#ZM)wXL?GSbNl_MK3o*o9)Ja93J}0fOx+>DE1u*ib@9@uyOcr zM^U%esZlB38I%u&W~)($*kTVNvftYpESe`i(SN#naWsAzMIt>nNdLS7DE>q7mDaF7 zDRji&Ms+*1sP^F&?Zjr<4cSmUH8w+$&;<0NW(I2lPimv&{IUw~@ko77O{TXsyrrvh z;JG5dq~z-Vy~t*3x6yvC`bwPAYx<}7Un$WS&;ddV&>yn&?_Pi{MyT8{*?@$#z ztbcUfh>m;{txKZMj~e4M1hDKel-!8F3%tOpRKH;{Tb-^YnubC}#`>O}b2Wcgb1n`m z!v3zf2xw`Ueuz4mzpJv65YFb@xSPlS4DpqfT6SO9L{L=brnEiP9a1BYYVz3g>Wc@hdh3%I+c)1YgV~Y z=P~NsygBM5YL0i=h9mh^DeCl=T3hY%u6OItbETlIaH?Iw&^#oxuPERztXI(AyMJr! zh%#z(+0ny}TrxXl!t1$kM5sFpY|3oJp%>_j9DMWb)VD_dWa;+B5UlTJT_cZPz;1DC zcjamKpC@J$_+Ia^XG;Af7bl@^Z~}U9vjhBxAoe>+j_$H z>Ep~gBK{6eVPZcDULFbM(X(iM+wR>AnP6M{`&~w%aa*FYQr(ucvG2Qcwts31SrG(n zOGjAP8eTZDh9^}ve{!Nt>7l6JaHZ-r00~r&qg8QpXHsw*Kp-{Ok1F zq`*CGo}!H|XMKje(dBBGLFt)VeR3_XYC8Tf%Ihf!7gDL0L9o2j{g6{0u5;-RaS6B@ zT~ml&xGT^LTIqfF1m|&zE`Mt7`;yvSNuz5se`C)0qNi`wma@815~!lxU$9Hm!=Oi! z)RnTHo<|?ixmg$egc_;XxmCN73Eh$i%c<(%w-6T!5Gj!GT>Sv83u~r-(S-v}{aJ*< zFHneH`4ZuB{X5sPSGY2ZR_5t@DI9Qy*+l^94^D_cjTbxR{*b73(0`6$%Gs(dvHP!M zFId4T{sz4y_Y-UTrC{c3uDO^UCQWJHQ*ma+vEGfVZgh#Wpvc}Z*Kiq!gta_y{s1b6rN ztL}x}hB5xCyT-Nsg@1hz_2Z39+o}n>@{ju0RugIVX%l^>sQ=fsJgjd+LOiB_X(Roy z{CjAP{jZ#$^&_{~Z2KjQMfy5+<-?i!FfNJzQTMH-@XmaF`+9bgQ)6R0P*pFw)7phh7W$M_-dJ@$T&QJqRBfg+qKa0VsGIp4jW+ep0 zh2mxs4h^n9T7PD<@eM+0i%Jw`>3Un*K$*#H75d_$#=ZS0HHuWmv@f(e3gIqVO7$V` zWjke3t&G`2xJ&6bXLAbC9q6yC5Jz8C7@ZjQXi?#RGBwEJ^m$|S;RlQUcXrE2Wi0;o z_n`O_;rbp3RK5sXsi3Ts;(drOtDv*DKQWAFSQf3JOn(+-9L4B~%mw8tE`)yBFnsKi z*2N?!lr@favsB|Klb>oGtv!APZTDy20QELe{A_L~9M-n!DV(=e--wntJYHdQ048wkOX=tIJUfsryqKm)c2c)%Pf)r-q6SQ~j{OTgsrYNHKL$euv=s9Z2^P|%%i zYVE1LUo5ZC{t1Sy*djuW2j!^Z(!T17ZNk9%4B3FVZN+r^e>P<-&1BPjm1756tpg=Pq2kbk>I>7j9;%%vSlvm3YK`dLA7`CZXD zbuRS~eMukxUs0u1`aCw`S);9WYol6wczrVMLjNT5^9G0!;pWjropTQnFT52Cv0v!fsiy~v{K?S#U{R)$A&d#H$NvS%JE$ieirq%< z`G1;p_R~?6tnWBXW0XGK6z-aA3SSK#GlSy&hhYZe3gr(lh2g*53KcMenZnGrO?2uJ zcQFWf-w4V_#l5Fl7CAUqc4(ccdgc;WO{%gY$j{-`#`1WTo7>9o(@buvN|ZkS635DnMiZgJ$P&Mu&@gNcEosN- zL8XQY_yXE8NI%njpWf=UxR*idk`BIDBr8bSZP-M}M&# zL_9LWzFpb#I=yRc_qP3%zT#KX=1lK8C$6%I>Q4Y0ZWq}0zVyx8a2r4WE;aPQQw~hS zGSrweQs)e3MjD-n5+0m4AU4cZW3EUY`uSU8q|r4@-yqpScZmm23ZnW;wp``@z+j|q z5Pp@U#tPw=lVrOl%XX#9cE!s{a57St)QoB6Iw#3>PL}ITm+MqVF#AUL zM14t-I-nX+Us7Bb4|adHZoAFuR&z#{U2B(&F5XN^7N)S6$f_f*9ajzf*ncQ^f>QTs z?FT6p;&!;zE!8sO?PpA10)ut|zbzWmnrAYP*9_|8ao>$Ea_Y{A9!#AwyK?7ZRz=G=mCV z3U>!wEyb)Xa933y-bW16&w1%nG2l30J_j-X9Ts6D2sc_q1-0RZl(+2o`icE?pe4O;9i3Jy_dC3 z9_l&|elGl6_#XHk_!4|dcf)tXcfohTcfxm0ZW~@lJvjElCE=v&(%Pm(0PD22VByK_ zkRCU=?S5218C7U)YJZnV&jV>w53N(}Zj7GJ3~fs#@561HL3cXcujO=eSK+p9%!Ipz zZq5osHCEG|9$Z0pekl%hcjC}ci-fyZ(7lbg#)lBs*jO7mK*~1q8#=C0_G3J_MeB^7 zrl(msk*D~wJ<6{!6Zbyu`!!0R+AW5z(xUVnYL1p2&cWS}dw>6CWdL)VZXqO62P|22 zvog%D-*lm9aRKAOLHas*$v_?!e&qP7yZ z4Z}^aLeHV~WQlNtORKmyoUPrm9kVn!D|FByh2}j|_%e*iRkfIae6$JkwhTj)!^?YZC(ROHe)FWaaW{#>1ZFf9ZJ0 z_L!<6hN;XMuaEZhrlFTu6Kb-*28{?{50c^wVnn1pl7b}3)}d_4RcjED5>t(Sgs zfq9)H?0>?bn4|wRW8%rfmow-|Q0xV^*#SLRnWZKiyWUe11&znb$}7Z{qR0ad@9}ts z*zy(J`ZcZ!y}pt^tx_P{6I6}A$LzMl5zoNs5+#LW`>;Tqa(#uqzml)0nc41_Xw%&I zIRz`S1RL|acwtmV!JU)AapY6mU*lHcEvt;~@B zuYa@ekB_Q2_ddJXO%AZ(ERsm72}B812;8D;gf#>caFc)pH$-+55YQ{8+Z9_1=O8Kx zi6`6U+Pkj(WnJ>2`1r(7|~iR+_zDv&UUHBN;eAx&ig#i>~0pd z_r0I{$DTd&%#Snk%*->-{P;ez^xOssQ-A8S01Xm)DQcDe^Mi~(aV|t2g5I{uS1-3bY=erJ(RvY=dp1mAc~-2D>-jqSZd`pkVnoO8Hv5I;()RAwZVU#g zo3&ZH&9ZsuB+Q|^lgshxOH;PXbWa?on?~q(%#!G7`bBMUQIVy%@7mB%|KvXX;C~ch z&@f8-){WM~4cl}tA{@y-haz}{V#$*-q40(vPC}@&2Sv5 zsP!X)T)=hsc)(D;>9;L+TI2noh<{~!7~0apX7I}>C~6>BwLJDQ{pr1{mPd0uY%T_1 z$1{+NHg2wmc%ZvP&#HcSaD^ls~kR0%bX>7pcxvuPmZG%R*BYEF>!19 zt^#mt7lunNe|o%rv0>lckbg$7Y2b?&aig$Fgo+&>%e2d5bqVy6THU0t%`@DES`+RR zfu}8&DWcKeb3*wuCbWiYD1(M_#!v=~+%52VS|j3BKqhNu7`WnXlwh+lav5b%$@8!Q z6kCJbZk?O`1zUlZ$*aEg?2XVIM(kumI))ec031BK9Qp9#0Gb{M27k`LpMMc<>Mt8G zj9>uCc&k(3#4tK%qCx4vsbPE$j9l-$ovwO*macv7q${BJ;@!-RTeipPk8V9~-12N6 z{n0(ljayy}(cgdIUB^4N1_tqTu*;$a7~b%VFX!koXZ)l|FbR73uogITiC=9)`NADN z$}mMc3ok})8}*qWWq;SrE;)Hu84sOE!ZPzBpI?R`L^NT&isgR<@&A&l%=~0!8YTJZ z^`EiA7~pH+BXVRM+IOejB)6M(esE#kKY{(Mmo}rUerv;9Q$2puz6ll~lRH?M>mgAR=xkSK~9*eIBg%n;IYYu+^VkzoI+Xif8rxV;f3A#7z!Ev=!aDRE?h^);d*YPbT9nwgWuYaP*%} zk}6Oss6eHl0)Lf)inT!v)qy*ee$WDD>3<4GEwU8Np!v#XQ*eR(P9>&(B+2>U^;fez zx>0Hds%0TiPiM%P?WT%5l?(ODyN6Dy-S*;lm+0?;qDl0H%7t)rBnG6jEV9y|@m-yQ z>-2(pHowksa{j0Soa^~VGg}WbO=??2Sa+=e135y{^M4+_1Vi96%0Jm&1OcL3%zt zg_^TkOkjDZM{<46WfiU(moRg|= zn>2a>Ie*CsP3N*UmH4w9hl0wPdiYkR-ovx6)myY`5pCGHA>-_qXnYL zLtz1iFS$lNX6dzJ>Cq||FAaJLqI@&`+vREMF_8z!NCnwlD34c<6>_pQMP9Yi5lW7` zFxuI?9#()VioV#U$7A8gLAR>GE-Z{f?SHYY5P#2`TnkkY3zy5;>?ZQVVLtj1)K)BP zlE-T+EwQj&Zqh47^~1|rrUpq>!ldCd@W3^OO4~2du(C3Z{m~0)h6+muWg9y}@8zX~ z$`~)(SI_%Aj2wsWhu5J>8``9nAJsjgKDPL)GqO|ll9!_ z|9^>Sm3pWUz8m$ah9O_88kgm(^oH3AW%pf}-?F zX!)w7yl%Io%WLor2KRu1RObOve368p7k>|hH05Z4H~|Cn6WZRvizt|1K>tDQ*|X&8 zrzfN5DSGavXNaEf!IQoFH+Vcx?j7)SK8s%f9&f#fHAI?mF1*fu_V@6VN9%zu_*d^; zdkHJ_AE3qR+c6K&&yPy4UIiU2cn-4=1~H9^29MJ7C46o_1J6b@_w?@&uQ%}IMSp%r zKyP3Rysf6Uc6j>^y*&+Y-^0d3Wkma}?dwP5{SCo+1FKM(m84e>Nc&puy%YM!fP^hw z--}<9_Wi!M1&DgDMsA&06OO|;flf7^CH-*BXar;i29}sW7N|kwkO54*f<65sY)h~c z85Zdug}YP-{DsSk56G1&%aENa6MyAzRaeUe;L<6(Qs6%!n0iFyQ6oFaWl6Y#MfYi&TC!zJEaWs&SuO z?O(I3^niSg8h1X$&F6ClB0&q;9{e}7^9 zm=lo?QW2zA1vP%FGFjhC(bdi7TNLPxYRCdfw4{>wDIElGq=&mX8Sb=!hM0M{br7zx zl$x5!Q@FG^53osCJwQjayB?)PrA~eXRa-AZTSEMIV z`u3)9WDCSpS-sSD3W@^kX~TcZrB#+Cwfzk$6Zz%Gh1^%MNsm-RvgZ(Z4M{@i~m0{_kL)YgFUkm2dEW58kD~DxC8X2XXnJ z?c^iNp_`;yNwg-FRekd?D_g;pA{PStsTm`utc_Y$6jY&+f=9Zs3XYWXM0oO}sqJ77 zRBZ5X$6Vr4Im~c+#ngW%Xdy+(@qe4dj)%8P;^o59aI>f<#7P+*SZkgY>{juxX^0jn3UPA{;O}8F!x} zPmJMl8zu35Nj=}_*DtCE^IJbbi7a2I?#1wel9x!xW0Y9-kA#11XuyIwi62USz(@}# zToJBi?hGj~5t=L11{AR}(E)LNf|mws%byj^SJ`^0?Xh8M*KI#Sp~f<#fQH7hZ{Uo_ zWv_ZZ#J8Q4w2de;XEvyz+D0wdhoVml9Hv^rF$XY_wQ{emMD&C>50hLJRm^!(EJ=Dbao(!TXq4Sg^^KJ;f^23`cH`X`}= z&3c?mjll6otd8UJqF1Y@hj@tA3)udet*_&s9v;)HWb*Me*m)7>at9V_JZ5NfCVIqqVprghY;Bo4Q=YT9!auXVJu^Cki?1`#_tLuPv49~ikQrel)Q6J&VvnAVA$uGRu=Un>$(c7mw>4XvWUOnVzuQ}eg4_?pp)!B`FU z{oonOyDcNQjY>iv-3iT-t1`S-m@Wzu=IP5&Z5luDF z{13xu*^9a_UT7U8<@dg|m-L!pm;t@DoPF>PUqWE322=X-Up`C4k=p)%D4$fkNDnx7 zFEoGIzgumxKM%hl_*E}3*_XoadHB7xkl-1h;>XHu&{fG$bO9X}{FxV5n_olwTKssL z%dUzB%;jBnLr6`;0U*sFaW0%iN#euNB<`cYC#hy5(-5+#)qPgDF zYKHN;41Z>=uYLSO<$N71dNs_$b%@hC8;R1kupUl3$SA$y`h;naD1O2I6ntS;+82M! zsV~r3^7rUC_zC*jDaa}sEdSqrGj}RKK1m0AEf3puTR;YpqUQwUd60rl&uyQF3X4!T^6>TBq zeDPs5JiYZiS|)s02|mkpl#bRH;G=)-ZP}!%K(J3eUj6SK=6M(+xEHC#@88u?WvT)~ zTt6I+n7?>YKm2+KVyPcyeDT8nATWhnwK8gbV^5{oUgtL(C6wz<%r31AL-CgLyW(Cx zmRe_PJv(RYm6O{X^~Ju=p;4nHFkCnH!YubF5Ex$Iq{kaT1ZR8LX)~^91~7jluDba_ z_+TKnFLDVFN)Oo0_A-?8>%Rq}@;&rP2Js7NVep(d_lJ4X=Uk=0|1Ou=?!#unmR;gn z2M8YY@EEr|y9L-%$9D0Z1Kd_a`>;2MqUJp&buZ;z5kci`!_%Q{@BzLOi2+XoocI25WgPs{zD-{nrxU|+9@hDugdiTC z7cb^wJC+;tB|Ob;I+_xPhmWRensdQ#+O?<;y5r+6fzB0wy9f$fh9rNGWs2xGF&~~) z_l>d$AyxvO4T)w_ga^eZu*JVktf!hA-kQ2=W{=sfWlzUv?v3~?D8gq+AwJ9U;n}z) zx0?R4=g?n49{pK!=x>Uh{$|+VZ^u?^c@Kgegk87Lzh&3#9yDhs?z#irw9?&cZNZZz zFv#yj&s}rC)oYyzPt1RCuk{x41;yK1o_OK_aVy)Abn7TUO5CnS-!$QlQCcmUkz z5^moK;4H&I5Bav!4V>xTc{e`&qHiWjvWJQYG=WFuFJrfAE}~tGBE~*}rm8kiC+Bqb z0e9X)&Rf`F?wmu;IqVJYEGK6{1fGSN%%7MJW5AmMlQ0GZF=(05Q64r8 zi{psF7dGKO4}K16ydG=(vFoYEdn>5|)J9Qo7*$$xj@Ey?);}MV%pY{&uDbSveP}+r z(ua&!f6;|&w!o8T%9Axz>C@lFt3Q%#oXhKCBL>i#5SOM^uEC?yJFyDj-Po{(t(uv} z_*_(HZid`+Lk2j@UqCcKHzf0K^updA4?#Q?v@s#F`)SLu+n3c~va=8K1z{Jl9BbpW zC&{r#3R8a^n~~($xPk=7u0@W00bjq8V~$Yy%5G-iJDT08Du$|k2CpX1Ch$o^r2lpy zao@0|t~Ldaf{}D7E|}KX^@oPpc@N$sYxJ*LssGmspe@y-Fo5E0)k;?#)v`ZAh!qXX z4^03c&Bcy>yN)7Uj;AM;mas^xgK7W1$uQpblG`&EuPJ|0dum%SewU|_JN$^`G`(&gl4;J z()NE4W{%-`_!z>8_3}I&FGtBlM2TBulM1=klQ1uO>O)8&b9Ysmc~NvkKKU?t5Rv<` z_dgtgNL~0<8boTQk0G}npM<5#(_Cj9C$$xQdK1n}5&Wl!#)iD0E97P!xFg&EN*t@g z-M^N0Li6=AC%Lwe>nJP6UCKS^#|nqZOsjv^PJSz3a$ByU{x@tWg)n#L8+%^%Sr6^u z;mtKGh9gfA%H%9V+tdxjiw{t@}1M{CL}yU0;7;<>qbuDjNpU@Tv6U*PxPUzoPtvu zydaSnF@ao1IU`!o1xLnYi&+8n&xDqY37aQ2EFNw+SDf~*MZC~fJ$I$A6Jm< z2zp{`P+e+((l?#y_FKBX7!9?UdpCaqc`g7yyS9;CcPs0}tz>9$EDyr7;04;`M5wCP zjzQS#1BOBUwy98nS&2=)iq{V9^Iw(8=d(@IQH4-4ywMCpna+xPK|RxzBIDL%9sZCT zU@iAyZ#I-0wJKmqzOmLu0qm66Q>4aCUx_#?ubaIL)xIjZ1FQ>)zT~97?(gEt6!2h#AIa>F52*hQA`bE%0F)yqv4Yf7)3S|HKg-Yv4|F7tM&9hF8Tc`nNZg?}opnxc!JTY-Q7o?DIJ?ObJ( ze(-m?YVw2|alnQWhxX=WHy*@>If%Cb*PM`4G(Zt_<5fG_(zC&3gW8JsU_R`eHz;lW zIbJd{@0_$1PrT^2X-((!M~4H3)-(V$ETww+16n-x zjrRsXk_=OEtiWJ^=NAdiMdzcHrQ!fnY|IG zw#vp(HiNFbURU0pDl$HOkQJZAq47tktsm@l9mKK4%{H9ErdGtpcSB5r^To#2TS$07 zY1lm%xsa)?#p8cTt$5RLi_~U@A_Di$qw$&*d1_Y+iL7e8WdMg=eUSZM@N({W*@ zZ?Cy){(wBS_4Xz6;r}{bw7S&U5HHIP)5Hj;e=lMoAG0B<_T?cw*fI>QE$*gKr?8H_ z9;PcUa2;#uaOvUoj|A7+Kwgzrp4)VPX=Qx#NmG}KkNF&g zZh1@;Ah*hF2%z>3X7oaVVnVrcBc63D3NAheAHaiT=^1+#rS8&UY$7#r_)dk|gLg-i z9$pt*xqMX$(q2c~`JkJ9*Ktz6=$zQR0tU1dHnLlgYR%eGvCjqM#6lsdp7LU0QJ%^kNX5Yg3QVOgMR_M- zKcG4<+8N6<$+c`&%C9pKdP<6dTQSCl9G~L>_IH0$FWg?nNIkPfZ)3ZYL8oEFpC(=TsGDrL zlOM2^Vwo0xVst)ePf;r?IhU$Dy*oNKS#_Rsgn@SFCKvHY1>ilqbvE_%ZzNQLY3z@< z;_=**bTMcFL}Wck=psV%7}fOV^@S@YolmzUmdw`azZtBqq`7ra_A!-+-%{Zqb*4 z_kiJ5zw)4kUHUsT;cV1ir(*NPg7SVa03VF*NVef`;0Olav$DJ|$SjGrR%Deqs7yk> z{yLamwo`-2vLTy5tzm};Fs^K|M&h&UuYo(0bc9u{Y-GCK_8x zd)JMQRTP?}z>o2K=R8ZJe4X?A7O4%dPIfB!%4WY&n~>T2`QhE@8t3;#cDNp}@VuY}xOd8|zdza_@|FxY=YCnZ(> zqBJj7gJamiLTD4K&^%M(_^ua38nmR^V71ud6yyc5%ofy3t+6b-GDr7XN)O06!Fkxx z%7jD{L}N-tu`DwL$`s|lLlwpZ6FN-tUt$80&GJe5&K2j6^}CBK`l2Fn=m6m=%60Q? zCgtX~ko?Wt?lUP<+s?=ZVP=27t-`Dn0CC)H_hl$KYS;o&we5^@T!$9iP3PjT4XJ&m zZrvC2Cx#B7fRvwW)WHM4aSW&j@EdQ!H(o=dLv0|(gdan@ zjgNz_K9((-nOsbO*#$9Vrk=eTq|)p6!b7V$1CzpWPLnbnL0|JMwd{ZHKR}biBer+q z3!N8Ev^U%~W*?8k_VrHmO-Os$O^F2?58L)Bo?5~cE*A|ef{$a% zEA3nNS@LbY1-!VuvNl|G(`!XMR)p7ps~4<_O}$S~R_9Ym0=DGn>Q?8ElLTC-jn=g~gGmBf#f#2sb#6@(Fv;jmtSf^Q=b&_+t`4!#s@<@O~K%epX!3Zq;h zb1`uUan$2AO7@&iu8immlux-Y=v&1=(n~gi17_6) zNW}G^3C@WWAv=E=;WHk_!!90&kCw>T>I#s;{z`rk?EHO-s&Oh3b|MgRPzujnyj;1K9Q$z5 zt+WTj-ACa{kh*FmvWVqPnPox5#86r#=nE-mj84dpLbW|I;@YL z|N1wiJhXq1_AXXNJ{%=*1c43pN6~SzxJM0Tgqhh1%H*}i&>ttqH`w(|zO)4uJHPbL z>ju;1Eyzyjj*49$3nImAyaQoM72CSAr0KDP#kA@uvMDp@CEr(wQff&ybYGGEqBtR? z)G}Wm0zBIe(V9G(v_VnW;j%x!1)D~bO^^aRumgWlgVjsul*aq|37FXhPRg=T^3rJ{ z#BtH3X+Uc_rG93CXX(Xt-XvF?S@K`OU1iLIfP+b@mSwzuWvZI%L@K?S6V945iq+{F zkbezQQ~v-yh)X~5=nh{CR^3{xx;LnM`r47uhJ=47LQ;Yj(!I5IL7CcX^(Bf1rN3%A zlpcR8a3xLv!Cw}EI!qj6iVXxVG^KI43Au}7QKap-k*Q8Wm(cBB?JGxKWtGw*UXtJKtr`4Pa98#|JU&aZu54SVe{qv~Bpm1FdL(48a8mpDPa2gK^ zizKISYV57B2&2_ehSngq+*j1nQBhR1xxIg)2R9PhRY%Gopi9aC+OPZ zHgeZMejC-MeV{#lizfUb)HaJqVFv!GA-rHL0~gJ@_?I?WF^6Xyu}V$pcV=TAnhO2p zUS>J^$t9y6c3#bfEOS6nqoCZw3uaUS9fz?ClVCg9f}?RK|aT zEfWkOmVLVG2spT6fL)O$hfdT0U5 zW>kt0U#~e+1)qg*Of32`6Tiy5=us>;BppGU`cNc? z0pC!K3@P|37HJ6cS(3=6I@ge|0zrQ}R@zr-v9&;E$xdcZrKL4sC{};0J~}#BMYe|2 z&_AFyWNhEAGq~Ws2#R0r=FEWCGWeu6b_$9(wD%-ZisjKUXqjmgIm9pVVxcw3i|92x zGz8El?i5b*ZAabGrPbT3B4}n18X?)40u}u~M&aK67&c`pHfxV}AC^U*3$uUXS-~F? zpW^GUhv8e@JS>2?H*(uxWYWi~z2&W8^bS^?D-Eyv5QdiD9)(`=O#w%j*2~WwGTS$G zaj{)ntCqcdnj69T-8Hx<;Pv6$X+H*Xob=YU7rby7N4YLcx&+N~X=N?gqhhjU_C&?3 z58><{$J9C);8u_UD41^N5V(Ks_Vq5D>z_B)mj!d4DSc<%txH%}R$_-+o|=pqwEW!d z^-x!*d%|+6wK5#ccCEpYG8D~#&X!mrA#s~ir?1E(eN~+-=uP%sfm^+U>9;Iuv#F!l z@VZv9W$yLLII>u}EmW!Z?YSOk(GnvAzHUXpWmQLJWxMNIRG-Jj8c9H{#iX$h7dI^Rv*X{TINERJ&ZCpGZ7-AGWrEkUnX0uw!m@7 z*lpDAZIFLMa2%iKI21KkRFwjAkRe&gsg7 z0%)$hcOua-3*hUPo~(a+svw_-l+QadA%hjpnmk2>kI$YnO1=fYHci?GMVdxMGUV~d z7+xSFgZ`sgi17iJkx?1>9vX6`L~yF0FheemNf+HP4e}AQys&Dnpzf3Gs-=6Zua)%&eK2|&rM-W0cA!TdHPpWgH?pIR1YOHrP1XbB4%a!{U!m>0oABjjJG}&5XCaUe z1Jw*dYj@O~b<_+y`bytcvR=Cj(vI2##}u0$&K_4K2;l+ym_Cg*&WGO7Xv3V)aMV|! zhu=$ZFKE$*ta$XHMi`gvYLB_mnW@AR|ATcB=j* zR~S=X8b?>~?JP?9f}do|O0WG;dp4h?i3#W{!M4I|WdqK>RJ& zP5CY7jDvr++W$M0S&vNFxea5+cw9{xma{#+hqS57*($7O!RuG8o zI5)_Bnj|1j5A?Y21t58i_jxkDJ?Pq1NNP`l)J3GCbkad0-Iz}5C(`tE(pe(SOeYN! z>6UboeF2hYr;~0Z(wuZsIg!fKNp}7*hetxhN1K_p)~sh&t{uE;%+)~1u%iL^1D^fZy=bkc4j zZMvdBL~2PV^%1Epopgps?dhaAk+xh>#ygSpWI8FINZZo+^)&Kp`km?gT126Cq=j0w z>p6dLtxU{BjodBvBxVy`ixB;4 zVf8q8P=I7gL#b4b5pX?~okV8-t&9``JoA4x&FQkqX&D;xPczibGXy$O-&V7IKR%*k z(xzIaL+d_Yg=bmz^`n3PKk*+~kMa$`#B#MkW@7a_itO5&B6|>i#RE`c8VW#`JKl6_ z4=_WC>vS(DPEfc}U2cN58zlT{EgN4OR&j-;wtM7$Q}t{f+0FI#xC}vmObo8KJIa4B z<>YPfS!(>UoUPww$vEb)&1CC-foJ)OGUlL#x~qanwP#b?sVH^JI#?i zdLMh3)3tgVFP0K*?5F|dHm-N87cWZz#ILp;lB=TEAr2hZd-BxBY?tL*6Db^dou+>? zZ~ZD?mc0mk@Fw|kGh2vm*SUm-mn&*<3& z&o+qh=_ow2kMYYnKR~r^{{V==c>{CmAC{zjUx6oLV(IWibnC=Hf+wPr;E4~9B6#9^ z9UPvBj3jtsIu}DD+)Z#D`5Kvn@Wg!wR95)4;6%))6evi76ER{$N`ikA$#qfuI&fmk zg=r~d;+fR<5p{M%Od%6TDnHUm_(6Ofjk)3YLGsxyas(X~D)Iz4FzF;L@x&z#OB^IS z0{9_GTT8G+;z49JC41t^WGSV&l+ps()pEfn&*mw#Tv#LLv|M;t3QQkCBxd1;%j`9Z zt(+qfBe4Vq@l*OQjGTWX1R}=o5a!&f=-tEooTAp9#sjO0>w}2w2gU?xB2?000qiVQ4VdCOcg2>qwd2<9-c!pRd zJ2VY1+nN0VqmmMZ(# zp$VTDK@;L995KWb{u)ncj%&H_Z3GjZxb$T(AyU2sCTxg77p4};1$YWfh>Z|W{$m^t zCZv*ZFkydtO7swzaLY&^G&*0nlmHW+;O>Lui81~^U_uN}U_wghD`3Kwy_m~yCy|87 zKwpC-yfGa~NWJ4~LK2?1^d%(WpA$&JpCpll4s6 zD<>g@IqK=5u94PO+TU!}`x5}dPRv(O`GU}ce7G1v4`SIkdQhB_L=RH+V@0LVgD<6I z2cZY4HSE!!<+f))22^q#AORh`6?ec8IyhsoLG+%?nbGS;z|VS5G;2Z2Y(ch`g9!OY zaSwlwt?tEEFYv2&krO2xD=3fRe4Y`#1~G97S8>!9>o&{dxT}zJpTyK&95jpfl2Src zjv$J!Eh-3}Jv@Es%%ZmVf~gIdEv>WP|~Jl{KFvK!6lXCs_cMn(Jo2 zcqIV^L{ie5Mt=L3w7ozcUIiC!*}DT-0{S(g0iV8c)nw0ZHQ6iRw+((D!S6HpIUhIKA5%HzZ>cRdk1&6aih}$tW1(f^Sl!%FBesi% zS$ZWLl|Un3LW`L{d>!|N)VT3KMgi{l-=Y8)kDvg{M^J#T2yV6@1@tpq;+H^xGtxnT zN4^9Cq_T>RLv@}CuO1$h!e)KlMi_tMGRcvt|3BgR&YnI^0DwbF?R|ZGRMnaAd?rI? z!W|$$kkkZ;mNj6}K}#H{32;M12PT9}h?rn^b($U9E{1#gs2NDS8O+UbTHBRfb+HA3 zU97ZaEApWTGYQQHPzZt5Xi^(7)f0y5Aec-5bKmDV_s%4tw!8nm`~H3}KQe#!-1Bvx z^PF>@^PF>@kKZEI9PwUNJuesO&3>?Ej4P|WO$q4 zrjPH3mL9A9$QHb`V)hktTHN%DH!$i&?XC9>tc=NGzW)ZB`eX~XZoVDyF*Wx^Y$bw{4BuA{ zU=rQ;27c9-v@-bf?Wz!Pa8pL@W)+3sAb1>}Ce77}oSO!)dI#OaN}zxHlg)tBNkHfE zascxryXki^5!0GXQj5J1suO?fp$}nf9JA2fxW_`#g<_9%S}7&XtlO7tU`hq}q9+Xu zv%~L8sz)Z)k4l7YUjp5}G2ZRDtdE;nA8%yczVXJ0s4(mH25fz8SnKz@m*OtDvAoG= zt9%SEK+T_{jC!w*es+Hn_p&6F**splMz~Gd^nIO>LEpvrHQ#4SLRoY|57S?u6QCIC z!%R!nE}@lsQJp4O@O?L(rc>RV$YR_x2ealCIYPu_CIN#Y?*Oh-)##YxA+wzW z!i-XRE^WVod`rJD)kF8=I{Y17naI@+FXAB79E+#4QjdQ&yOiMC^imIP{wXZvPXnm((-xHRcsm2uvBQ`n__Xcy*Iz$|5*azy z8%*D>Pbxs$p=1iAy@hLTgDIDp4jYJ%$J$F-=8;DoY~}|8^ct)eZe^WGnb?YF=3U3I zG;+341huKY&WxRy=WMCE+7S5c8ZJoq+Z@2?tVkwzph$nu9SB8Ioh@rqo7LP|dCtal zpTlC=psx#we<+6PgMk}R%3T^{<=l9`Q#c2vhMI(nRwAubIe_gfrYG;gH7pOJVMJig z;XG{P5zn`i<;x}~xr22s{LCJ`Ft+C5u~X~~b*Wf)#J&7CgBFXjJ zSRmhdrYe6NDf9gz_%HZMPOi*plmk6bm+`C-LcOTk5z3NcQ`V=jnuGaSkqOc}7(ZqG z*q~`_P2rTRV17@%A!4Y%g|MP(U0C&732o7BKT}ssn1MAo1EmNu`zRLqWGgz%(WcdH3`G&l&eGsK94GNTWKAWxeq}eb*-?z8 z^O=9RJ$mv%h2lW6Ud>flDV@Mpj1wn9SktsjDWaeLic#Jkd1a*vy%Ape^VS%+z~?Ar zX-4$vxxfWgGY}Sb6-f(CJNLr;BMU7%_u*5*p|dlD!P6*RF=+PNy=2itHm_`Q?T6_6 z2xTd?gE-&(sSS&!q}SKdH&_bbu676~iXVT5*sa*h^;@F*4fcY_pBR#Xi^FABoWS1Z ztG(c+cm9frS7Dq6{3z7lP5h{CcrSKrQ)IfNDB`WP*VV$s^v`=yzbW$TIHLvhPa!Sz zSwOR9jdSGWMm9;b(fh8)59r5w=)aj8&M>iDs946cN8Lx16q9R^$H+N`59xYbey$wF$Ry2hMT_ERiIfV5WTMiFN%_ z$N<|6@sGiRTMi?4P-C&=Jtz*Mu;qVkI3tgn!u$_+- zSFn2M&mk|fB9HgfzZ?zR-#^E=#3%XQ*)rb~teJ6$34Xw5Nvm*gLq3X;=5PnbA&r|{ zdks5%?SzJB?U2o~XwsAg+<|<(vwhv4fZEmM>crE8?_Df~EGRpon5qsHL&JYt3eX~- zj{ei&2#{ge2AA4kQGY%IrRcoG5L|BX%KG4ghGpVq4}I_&>#Ws4IT+#ihaV@@%!|CR z3MGtUpa|}~!#dT+(OTG>w(fWySUB#WsW6g(@)bTkTH^ERm5HaIf0#QhbjcGUE*p2S zZF=0d9#-m`jV6-0XP(8{q}YG`Ym*^gPPn}3Ej#;KBPUhh3iDW!`t}UI1(&4YmswWe zE#8X86Y~>^RUg0Q9izqO49EUHShSACO&*Rr9FH>&$L)^C;S|^6ej1PKO2l!`Y=pV= zme;0zDLf)&HKfE#yfz|!@rd}Jj)?yj*5n?`YN~oV9y=wGyXt%KI5U54GaB6(S1g6y zEbcN)>bLUjYU%m$oLv~(Gg*!OW<2(H$m2B5#<&TveUF$A-=g*`_slO>|SWMn8 zB{8&RqbI%1mi~ zEAm9*q{Sce1xG@pb4;ZF?s!0uc z6qhIzHR9?vqQVn=d4>iCSI6PekdaQ-KuOg=;p$L+x_0OWQzpa#T$x^Guvex516kP) zIp~^MsypB=)ONZXGoZj!rQxK(UhLhO@_RhKYPTEgN3R>0g804^)RTXqWwqn? z6?BKJQm|tDN1Ogb6}eFj76^7#Olk~q*nG9k|G|dZS(p*;G5vyvvrPkG)GZLQ8}zC&z*03r{2Uison~EMdl3Cw z%FxgzW4nJ8RUC~{*z}rCudfv-$-e<5@2Tq*vVm$SI$;754@EFUejm(N@GCjtreOY1 zBJ@=vbVCcpZKKcoGVg8Ns7&zCr*!J5v-rl*V<<|k%wdVj#A-m8da;e~WT=>A2D*gF z(q@xh7+0){_!ZL&yI=r(6Gn22rB-?Dh{0anxe9;f&c{ldOnT9x+^1%gnk}_MEcwD} zW@#aWyxh2tpzwSq2rH)3$It-wt@Hpq)Tw7X%l5r~i=!(y<12(heAJgtb!_VwW!^Er z_wUGqsHWB<3w$XQ$zqvYej{EWy_g9CH53;l= z)Tw{dBposLG2K~c0yb!pPbYszYDs66D)-TAUFyM3qIvJbI+<6YZT6Hozf*Bp!{j8S z+by_1Y}#RhhsT#zfwpqlNoyp@+3Zgy%{ws#CDhJ;h-c#;Gx4;Lc&pFkk?+Mc`u3;< zv+tIb6-|zg!}x94W{|>J!R4mf!JeZAyFY)KNp(gjnrxtVz|^Xlk7C%U>UlN?g|IQ1 zPTPqaN*xneZ#sna#D@v1)Ooq;w%VZ()VKZ?(wq~<3*eC5P5%=ne(h2l-W-%gQi26p z?!<^u+b+e@{F7MLE$ZcUS#2T9j)!G7*uZE7;`!CDg{v~>vyY|MK4!yvyx}jthSGo7 zfJ9cZCQ;IbF5acVH2(yxL@*yRSATtG=4yQ+y?a;Ui16S}ZCxXIi3+8`Au*NOcEt@S zN9G3FHe@@Q-16Ft5%=1}#O}4Zql+visVA?ziN3cpUWk_O#M4cti`IjKJ^Mpu!l1mD zc_$bWC)0J1Lr$kV6J`1iu+ufJ{$GDl&*onI9w#w_Qy+$}o5_&$X=eCS`06X#SLec4 z^HRR zS|T%0`N-evp${?Pe;Rs~LH*}f6Q$R_%5X@Z{e#N?ABx@rvDrUYlo3|7b}xVW6P{-C zD64_K!~=8T9aw)kIQvg%yFL$ob45Gz$(w4y(J5$ZD@Jx45*=)q-|w#*1>FeYj|{AwxO&2dd+o%V6M5Y7jp=2A86mB7c=PK4p#LY z!&UEvn7(?fm%-M*Xq+ia;81^I18vp>EUG5+o0vw=sTW#Yog44_0{CgdKB*0f{zZCI z4Oe%M5goZ7Mk@s*@B6v+Y=aU={}VI!hlRKo!g6rl&83w&z#*U4b}*j-eaL+i^9YtY z*uj2?#|;zPadq5^sB^SU3nEN%z>dGcIrzJECZf}2=eE=)A%OVm=#YQ6B9>bMX@630 z{-(Wy)k38KyxwboouCRv&9xMi@@0T(jZ*=W16UxpT0d9FXjr75Q_o)|EULcbOP^sH z#G@o?k!Rjqw{#)fV^|&xAi!>VI7QWFhyjmeHpXGj zQvwKb;!)M!xAp$>sW;fIRo%P7;YR*ZW%QEE2ivT-5Y=1X1amKo-#Fgn+=0u>^) zb`|-~5<6^Y@KThi5x#nDwI0AaI=y9IyNI(2ZtiV*k`S$G)hdvU0m zS2?e9ffw;;%lk@#41e<#B+PxyI2%qt=W>CIOt}|`KsA&1h);WIHx5i)@D+xiurD>I zk!;1N3MX%03*#vlMvoLWc%AQH5z#I&v>3dyLux|hRj=%XUkKM;8$xuns?8or$#Obj zLNTl&)kKQN#`&XhCnbr z1RC^T*Wy4S`xa)(Iia@Md2+3jJNRvAuGC_XS(4ZJCTsV2U+QWvYH=9UBCO@JvE?CX z`5qvwRbfYeFu3gtMe%qlOHy^ZqF@j|krRF?r}2Mm%uT{>&j`bQBilMmeRL>f(IyA; z*ci$Q2e)F2m&4u#D>jBTg7nwM6zsWKQDZQRO~rYP3}B2iy!khgTePXgVn|F&XCT17 z{wFW9t5-GxFKcN1LPfmu3ir%$Kx^N6w0N!4ph8CCP0Xguu?&yu`Do>db(%xzL+9nC zbnk!5utG-WsdfI96*5m4Q*-|5`WdjMY0jHht<}LB?vn%2@rB@i)N9$$T&Q zqx5lR_~Q{AT{`ks!kSY0{%vuN3bMsvPX~XdDt&}?kMC)B+)?sDWFkHLQesm6>?H;Z z`4C|&?~e0UD4I*oMRL$lQ+YQLJ4@-M>5RSlu3CTwhwGStSKIHBW_rhYmBA`1(#{o% zP!HvdQs!(C$I(@Z5~PK^7g+@01zoWs6+~cz(^PjwT-;4j%1hWo=SVXu(g8pFNxXmc zHIL6WeT7zRN^T@nJ`}UN12!#3QAEf?{kT&EPFc>!8?!OegEou&RC;6_1WdvFG>C4= zPe<_;l5df|YtqU3iug4az!G#t=?4u=gqS>tQ&#|Bz^-WZk34zCi#>n5R_6luF_EOfD~j^=^Kp}Sca>6l1r?oRL&9yP zv>WX(L`%a%uswpH)RS2j?nyGL%7A4N18Hi=%g)|B&!C=9m(thO!mOfSjHu|JhbyZ8 zTNUZKx?ix0{(eM7o)Hx-8LsF740gg8ErUU7%uuW9UudckRs&vuq41fRDJ6fJH7+jl zmV5}0Wg``i{#-G-=^ka7X~THJH7vUKYQ3H$a|bMWa&iPm`n^|6-Smx@*j}3n`!*Li z#c1_uJcW&9N{dZH5ZI7HIIpaik_{0XcQ6Dcc28rsCGp#&r5h55!q5xFsu+Zj4n#T7 zC5%G_sWkO|)$C~V$`;s^G9iEIQZ`DX^h7<5hp2Q2S!A6!k?FY!N!)=X_^Lx$+*ilW z_M>iyQFouJHWu+mrOkqV(>I-~h3eZKpE!hz;pVJjJ3T#BXEnBo>|#j(`zFYL;xMR%v}=D~m2vbt}M>i=k@ z`@7iC2sd{gvM4*v8WLxq6JB%`>F5}^tU2Dj31D4{`;tM zW;}+fF=s0C;xRpH%saurB_@Xmth1-m{Rr9$hJH}CYIUGe*b9G9dE|v4lOAeezZS^j zPRN7yGKr=eL3XPEPm`Izot_KiB0t6idHcigdMCV| z?UM!#+%uUFd=QxL+!tI|nP~S|)c<{Sr8l?Eg^Y|a#w*vcq7zVS^=PfI{vbz!q`Em_@?{2^*9(YX|#`9R8#S^zn42h&U zF%ypqBmAnRNtYHm+HeKpZMbOoGGOv84f03uOte#75wMSrFq?g~jrpA^muv~B7zw$|pld6=ZF+`*!xoM>^WqsxDRE{JaB4(6vxp=@K=IlF2M z`7kHlx#mWdWw8{R;k;HAab6RCxVUD1c?TZ%&5`D>WPw#R^B=_kv)^KCHsgz)K8>=W zD^+6qZh!IIwPm7R~E{S8QTXT+}%iL2Mqv3&V*q7Rl_U0z(OxU(=Rpjwp+ zmfV;o-dK($D(gam5AY6@>K`2a5hnzLB{3iLTS*Vm!>dpQkGqtN3-aBirEX<8!nY-- z{F3ul?isvFafI@6`Pe$EGo!gGDbLBrs=g$PnxT0BPa0YT(v_B$%6b3^SV9|sC3Y+B zH7I}RKA#!MWOi8l?pA3dti&aFic(qmTRm!n(P*hoR~}cB!SnHa6AGdqVwQ96L4rvN zZ#Y`%;8R$>(oWnnmJ@gOa+=2YEK50aYQ7@dE*qHP-6mY?f%28OeM6ONew)yrQpwkG zcW_a*N!5&kTrg<_{kmP?9vS+TF6`Zq<*xryI&bG;gHmUjzlTMt> zu4l=jH!So)ofcS)M}h|tY)!>VI-U+~X>x=fC+xj;qX}VvelD_+<+j`+i)dy|Ybq{! z+kOlcz_b8*WS1YZ$O}#KleUr~_sX*JvQ>>HozmV!t4vHP&ElIxpNC*szc~v^7=(Xm zzRC1}N3+YFT=x6F^XV%m>U4QNBMk=GX*7g(zO5N@<1NgPK##t>$*my;kYUStJR9v} z$}q5=_o7*4=*vm<~SrhMiau(N6=OPpNobXrbtt;xLl{c0h^0 zO@bFx28rx@{3qrSX#R`w;$VZJ&;sM7?Vs3qNk^ljYwXIJH0BQh&8plyU`o*B6Zt#k zsSM?*bmgfTbfT6KU7dPLi^)Yt2*_H8qu&A4o(WEpi?Brs`}FjIA)FtO+6L*0@`*Zs z!eQE17QCsq7t!%0I-Mr#^!;qh@*+jZPNQ!QY4uxlr$+r#d&$v(crKi0Y(*l<9V|_Fy6hU8a|lRkp~ZOGIarml07>e(DvFkdR*kY|#p;7ekOkW#Rg-WB;?6By zvJ9&a#-O_sx`HyZgN&g{bVEq1b#Xm^yA>#}hH-8+WjR9;@^JT)yzDT|9B7Au6*ufQ zLgP@I*m3s_(0ieq-8VQwe_3E8KH{s6DjmlV;|OW%j_oZg3I*gAp)CS5m}Bx~(N}-R z7})4YBSSmU{tGOdW?%ZsiYDm}X1&^HtIWf_;|tB2z~R)xs&!l>Ow(1bpCcrH2CYn6 zg}x5CnQ6BEL)sn;SX^dmCT@P|UDezSs@}f~>>Yo@*~vYF;wR*KPAs_0gihGkx#|08 zFfkfjY$|g`*DhA=r$pBpVErz?VQh9bSEag(>Epjs`CH(P3+xd09f)&lal+kU#o!KR z92(J3rVfd3!G}z;u}DinaFB<8X9lTOjj$j!2rV1vESnk{=qyb5U)|P$wgE z$_e*LG)b6VD2%7yYe*d5|5*lFu^;L{Aa~$TTqEy!5@tFhP8P zEPh<(+glbt&MYrN%q)_By0Q>@;H+G7YR97xg2lewpZ(+s8(I9Q^ti>MTL39)rpSj0 zt52?8IXi+|vi@<8Qqo-(xdm@y%6kZ4PKEAgAET8)mN*)|afClFFMbS*ClS6~ zUi`QtM0=am(Mw8fB-LGLU_L)`t4u=blVO|GXfyIQXM5FWPqx{Aj4qq=?AkGqCYnei zj-kZW-p>6U!(yo@-h~^uF;BBwz6MtscOXjmt91|0o+4&CI&w?w!uXMU{58{gJ8Xg* z(d>t#V*&1`Duy>yjq&}yiS78Ifm@YfU*hP5S+t^&!ijb4f=}IMqJ1?BE#1Pzlp?O; z$ZUwy7kEZ_YqlVNasg{%h33#Z&qIG4Q1z0&Ar1AcJL#dD@STpYAHGyxg`R))^=y-% zotq@p;}vsKARX)hdqiR@PcNotiOoH%4bl>t;N zfYy!=D8g8E=WT>-0DO0I{LP|xY8B@BeH^{@*|>jxn=IOjU=8-^gRZn958I5h<5NJ0V9yn8;>&88-LfUJBfcg2kytkp zoQWDZ{1z0)z=oZI&Se&6wB7m$f6~otaZXE^Lql7Lcz8|t0n8y0w$+Q?NGPCX#EQmTOw3r2%o=G7KqKXNf&w{&{I}sM#!|sb% z5S^LO3>HL5RXUCZ(K07ZV!`7Wyk3Jr^jk`!H5$mL@a+OiK;u&MJr+EV!BZ@VZck}{ zm<78rcz^|aF!(wP_F`~53sTm87HntjXTeLX{VW(|?PtNOtoZBh^i2D3Ja!Ta4ZX^W6;Qg85oRh#$Xl(|IC7D50748 z!5J8Qj|FF9@DvNq#$cEQ=V0&v3*x1JCw-j-=V5R=3+7>PD+?~dV8dn&b5}(XcGs!cNR+-Pn6Vw^FyNBgAjoTUuntsQB-0>D^ z=dP`?D+Yz|Fy<*p*i@>nh?k|9q3R)HTQJ`OE6D?dj|ELU>d?+--qa@0Ij}b%-9XZB zZ84rYg?igSs;V^^a$!u1@eh9h=BNq1uSd-Ah4 zeVS@iEzhLmtt#3u8Q|^sWnm_Nab=-p+qdzmXps8}dTuOI#EeAAb4-IXz3*jqr?hFA z+MWSy&%&VX0kuK7L6d)EYfuuHTm{;B$e4$sFYmHqW&*E_v;?1jxP;t4Q<8k` zv5|-L8t1m`DYV=_12%+lPXU@+7VYMUo?t?r* z!kmdK1NNVPIeaooar|VJs$&Pfc=PZP1< zQ^R=f+Zf05!4Y^S0}%0l??Ka4wD|Ywql{Z%g9m`X@spA8SqE51cYBakU}EctV!gsN zzk*Lh6S#G){uA2ZWA&X;l;N%ZWHuSA*i<;thn zUXO0mY4WqegpKB4g%U9aH|d?%H?`xHX)-Z=`RG$pO2Jx z?HFSE-CQ5C@|rE$9nTLNGn?vYD=I3w3F?Gtvzue-3s^OtSjJ`TfUGd!g|fJV?a(dl+(A7?+q_QRzCMY?horD! zsgU9gbO>gzvt0;(a|c_wgN>_m!mBin0zbfV4 zEoWne!xL@8G$1mYQqjEUWRiNSgPD?I&z<;#9&l*M(}^8%*N=u}_N7bNqihQmlW)Ah zu5-}aQ$Jn~$b1jp*~orMm;Wc4le(09Z#!PCs*>G!P~oY3p#gU%GubSFt@|B``v@-J zgK6uzIR{sNSBxU*dmHeaL_4zQ>K;IY`O3M;Q3$he(7 z>g7OMWo)=^jPFK7_-Wh=q%f86y?7gnh6T}luy{%MhR?K;Nd(}FUAebCapK`KM*g&e z)$k2`b+!o0a_8fhgvC&|axVq}F@Pu6C7Gu%Y`z75b>}E&;rEuHtGmdDm)k`?y;~`v zxHIeLV|vjFJF!|=VzP9R**mahP;WNWhZ|3&ogK+f+|jAV+thfo2NR&21|7zs`KKO5 z?1dy|&nSN1bN&%cD8gP@gC{a?zrn<#{JlOsO~H%$Y5p5NV}&gCIGGHwznBRI6VpBv z&g;*Avq=K%Udxl1K7t~c7DG{KD6RVM;@MOwS`_1EG0L2MG_nqr`0!22-lr>wygKT* ztc6y;fyZSGgv$uRFxM}R@z7UsWr}>uLuabe=YkpOR^~u~O_!%*Tis>nQOGY3U>fKw zE1Mb`K7Y{E#9?QaZJcKi7eFE8>V(`<@|~Q2O+W)S-Bk*E2@kcMM~X!K=NV;pwul^* zsS9o7q@J(j0$U_mT58LZPAaR(QVVH9Tlw->q?iD*feC;6(kizjKA-%phR8&JbJb_Rvcmni*;Rh#V|+wsc)Dj(5{P4ru}anTY$y6j<_q zCPD@S`b%!o(nRAJzMDDm!o7Y$BmiFr1QW3*-YM}fHO2b^i2!_ov`%d93TWHYvCV&5ohU&;W2g&~E1o@&VZn~Zk;Dl_zN-;Sk?+fhvB=jC3ptV_6Dup(k`zZM zGKtPymk_Y|vly2*iW^8!g}^7$b7~4z#Dp;TfU?f|;0qEI^E3 z(29o=#c6>!LXpa4AxyrVNia)cn^uQ0JW^`CXvg+rNMnb@6nYoBDpp?=QIqhP>eHd& zP&_TM6hXmWmGE6a`Hi@m9`h>Xp)o`=S!yG({_r#66gndT7fuFNT_3u(=?~`#sWgS9 z-iD3tDRy-AhxNh)xx&;RwhNnoVf!zAG$bdiHbCDq9UOv0lTSm3SxJcZTUH zJEMY)?qcCQXH>M7(tmANkFk-TNZpdB1(!POqG-&VG?N}XA-Eq+2EWhOGxt>ii=BsY2*8fGQAPa ztH5--2U-Dr;FT?r+i>NT(MawMpTS+)!rPDt&NwKI>|w(Eqd5PPf2}A-(X2o&GhZOw>9f(Lr?hit zPbJ3D<;QS#@5FF?p5Y~b7`6XeHGxq7dj#QBQSjkxOHQlw5oZifZL@~U`dgbvm)b`G>P1fwCH z{##YzPqpC9bcqi{S&P_ze8) z?!B6JyCx=Rr#V##@xX(cc;GKahzI`juy|n4Uy27BnRsATDSZo-V^OUea>Xft5h%cn zQu@Yql_#!O#Vjm;nj|LPE}>`?T?ZR4;1qX0m6(Jm$~ap8qB$}R>9W{cN>5^SO;ku^ zr`Oh~iWg&{ZB22qAlOiR4Edcsc!$IMbsOP7-r?m{K2LD)od?>o6Z0d}P>AT+^7_r% zDV=MWo`*T{xxQC5?G!1YowD}n|3)+ApVz3GDUW#QPY1Pso*Si^V)f7!Y@Zs7jHNHF zNnqk{YNCX%F-+X2Lii7fQWTGO5g}jwQoZJ2+k#Sh=QVA8bu%{ylA;&K^w;1y8!%^* zVh}U>^A_oaNidHU=A@BCX+QIP=WG@-O6kQxwIlba9hnmENZhQK(gI8+XAlL0X2gOm zh+k=5lxsqNQ#m#d-TqJb{Z?g!YZ#n%Y-(k}uSK{8k3awA2Z~bbwGCWX%_1eq1s0%w z@k9Oepo`*p0R6>xQP$ZKT&SOq2VLtqbYd94U0E6VA!&k~;h06{Ek(?py!5Vib2uLL zstxsgtiF7(nZJgbTaLE+@>nxJsLO|1VB5RKgnHV4MXEu3icZgFUe-M7iT1htRoJTX zQR%TYU%?uh#vSBuOy_Mi{;O;Y8^tZ`s>B|6=4fN4uJfvIJ7@y1(1b^4uk_qwC~I&Y zD{xTI4$o~3f{X5ylllLLF53Qls$SewueEps>a{Tpy`Q2)1*Q(c^I0J z5`=FL4PSauj(HxjpyJ-YeM6_~x=`M9=;u^_Z*MX89yQn-F6-?(QGBn(OyPIx7npDf zLLv)AA#@EwJFl`VXeI9$D|-V%4weNC-Tm8T453}TEfCi4oVVm2lG>a z3-{YdJCoU!{UMn@QhPz!j6%OjwHK8K5KU2%Z;<(`u>B49*yWNQnUB?8(}xsAyq#Qs zAx*iD27o2VgAHx<)xN_fycP@kqp!dIy3eqx@86Nv2?0bwF&gyu$|c>q3uXS4FHc{#1{ zWvKTYG^3S3dE#m{w#u$fXDj+JIq6eYSDBrB>)IrAO6xi=LzX2Q?t)$7H(BnJP&~Ln z@5Fm=(o$uH!8A{Vk z64$AG=uZSn?auR~y3?1rGA9gB;jXtG@UM2}&%UlRlUZj*))D_H(&Ec}iS;E^S^KG4 z-!kb;&tmM3oHGt(@wrc-SNz>Z=#n014AyY154+bIv13>V&VUY_rgorz)_Xni-b-ZK z*cI=(^YN|&I1(NAuQ?~;9hZ6>`YGPlM#f%rj%usy>LyL+J_UT2_YAy8%Dc;QPQtLq z=oJBg0g(>qn%)AKmsbELUEMe!dtkgm$DMLESHDNZPC!0s2J|EH9bIM4)72Ig@guN) zu@9{a z$}mZ;Kv%!NGN%dfh)@DD-_($aBe+GyBE%H{kkXJ5p!72&imkwZ1P%jw=4%1y`yPv_x~cA+x_)4 zx95LIbN_W=g8#06y;P&S$peGT*P!bN{zXTq*wK~ek@**pgv#a5mj?Yka`}F_e7jt} zOD^9gm+#Hxvtir(U*AofVyyZuZshtb$*PO&6S8YxLrTqHmcZ2vju9Y~BA9CiQ$^!~ z$fpe{3+i33OED|=?9&G3e&C0|r3drR%(JXd@)=hyiTr_o@YzI1*tV7E?zf0$pLu1Z zg*zISXpWFsSSXBTmZpDfV3tfGzw#Ll<0`RIc0C{2?lY_es3R{TiRQPnde`l_xkeLg zTK3iq<_I}8gR_J?Y6fQuZ`KSh z6dA`lxh-ygW_xy2y<8ni4nu8R-9IpoUi*wGrzA5TM7oXAP(wWa|4CDgZ4QlKFjV|0es!^i3T?+vcn*Z-cJ1v##u5 zxd|&2+s0^{wpt5!Rcsa)}g6;Q~KEQdgcrOgL|duL=4Og1h57Ih1|cozI$i|( z@E$ikI2P4$UchVcwvC2?4~@`C{5I%kqftyJ{4NaTh#4xN+)tJm(U{i02nn?%lf;*IV4djVYw$G-+`(%H?$`=Z5}A zw;w{rZF;+0-Z?!cmv;wElevRY7AcD_c%AK>gk~hX&KM` zTV@hXxl@GwJ~L?wmUOO``R8Q+i?V-LK-si1C>{^aDG25RIo!q_Okxvi8*u^ItLF~t zxZeOfw#&HWhI7dcSjJtu)|!$07ztl5FF{MiMz3O!ez46TH5--%l+EuD*FNHZf06Ld zNsWfQW$Kq8{%1sdfs}ODHXA~KZU1?>WS=+CzsVWs*l-WBdhdlVW|CH8DBPE6Z8Rbk zK_{dg>@Z&TpSPYhMxh9BtWaw63HOr zYZ}R3x#Yuwh|QY^HGUW|!JPX57RN|31l~n-mF#810=l~@(-D%(TfMn|K-kKUb1#Gn z*@|b@)j(JBry}=5-S1k(?Ow)WcFKIS>^k9<#nX{27y(e~FN#2IP!oKDi2G6XaRM{f zbc#FZg2-kfo(NNWR#^^xfeoTFHc&k(W4lOk4p`b_YCZWZy@So!C@ z^5PWIv^)a*5?$dpZ{E3-K#AGD29%D}ktECt(JR-%s;uI#;ls=sM0&@wQR^BAVzAM}+ z#qxzIBLtt~x%{wjM`nLb!mUVOCx1;syNStZ#ScJHD`@sg$V6IyTlkm)R7Q5)aC8M- z=jjIz;e~5jK-p*@*HvBVWL1)64EJC;IikH)nL6v%g4-1y& zBwgQ2xUxHEiKga%q*(>TpB_*E;`$^QB}1**J*Exy1^Qrt!S{rlrlo4`ZzcrLY|&6# z%||^o;WhP^<~*a$q4X_d^s@G2#(*^mtU`1mO3KqmS2@rHm69cEO@tc^r0EmT=EHIIj+ksx|tgR>l2K(5E9q>4RWJGJp%>{x2i z=QitgXruppoH=OF)$5@OR)NgZ^<$*_b=;Ol94Akt=?=r1fIePjmkmf8`fHbHl+-H)gX&F=p zoTE1o+V~oO{A?)wEA`@$u2+g#*4^iu9V}2*HNb-DMP{%-G}osWMm{IyQ73;@NW+9& zF}bGc{`&ODn4xgJC1M=PQvhT;4lTEb&bp6XiW&!i%S8jV1`W|rg!GJVpBUeaGOoe)~Yeh1^OI+pwf|42+V@O!21(A2fCV*W|JXj zXLbHt=>HCKo~WAaUS3>87r+W^nk|=5Kn4uC0nrM%rfxP%gO69GxqXjAmdvlqaw}#@ zfl7QSkmW||a2C0o0>>1dO=9(9VUUbI!fzQ?VnPxydj5O#BWE5OOD`^k2}-L9*<}f8 z8=(Jx@%3Zq91oja8NiYQQELozY&M|Zs4=;`4QARTPkg4mQUWvWk4)n~LnmYrSGpq< z=-_@4ayvp&?kvEqvB^y@m>F}A=K0e-z{0ExE;Z!((*$F45>HCf$pTx= z+}Xk`=*%S>lLkJ(j`BUe%6Sg9NR2NIT-U)|O&R%W)Ok$(=1ZtQT_L2^x>E}lznF( z5Yybn)RjC6{$eOsmKrGZ=D(w^O-N}lF02cQgY^rC*obULQ9u!93YFM^ zOpi<%5udImJ$PM}&5t+V=oob;XrU%%gE&sxN;MNY?C1ix0DrV01wK80kvtn8LHD-` z$qO)2{IbEYpe`iLiHw=|gkYV=W4r+XyzC)gEUCGFws1`=Woa#8$ve!CYXrjmyN#EOCK}Nil8^jj((H z-E9~vSmOEM++%5%Mv$pY^Z2|^58#Ox-3poGk}EJ z9UX_3=D`3hh0!ffkc&-nu_d>}#%)2>5OP8;u>*G_m&8cP)u6u@cJX9_WBI4i>T4myC@_eghK(sRG5s!o&=H1DM@Me4MZAj?n~0Ts z0Z6-Ghh2=dJ^Yy+d9{!1<|yvItmurqU+6--ueFe3%RnP@g*S&d$yyU>A*T`B{aQnA z7(1+I&1_4lKtVOH@V@NC#uZyuS9s-xDXT`R0I+EqeSj&)OB)6Krimy);4|SspYfq8 z%+?CqC;54QMu{xkL0i7`QQReqHZbEx@um5_%wWnm;zo)G>Z;l2*W8I2J90D^jyHG@hUp#E8ZA%=2)B=G#>CYcV zBY63$;%I&Ojb{EUtP0Jkpiqj>xV#9397~mbaVHP-+rMXODQMAmE`OD)dsnBy^{Sh&Jsz+f%s+)d10l#JadiaQqG_p^4xgUP;1-GV4$4%-wjItcl&%i2k zt|w>E(Q$?QC(g@#-r?nhv+#G)%e{AEdaIZY&$j8U+&f`oOQ4P8QLjU4u}9jAA>sY$ zoo7FCgmS{uTOXW$a#cLjqQ=#2P54=uB)N`%&_D}*N|?wU;G8G8MUX?tTC7Hj5df(X z>hp5<|HI;FUhrWq$}I?se})PU;UWL@7Jw-P@aQyn-$FIva~I&_vFX>uG%YpHE`{tE z2XyfgcjP@|W8@vQ)*S-g;EP{NVg11S(&zdH-u4x|wdm(2GaEm^ZQpoC3D0I9Q=4 zO_1Z3hRJmuLK1hhV{ydjoBc?=J@3Il+vYy_S~Hpz-Y~xAfqSb{BgSUk?82J4xx&DZ zuI4*;i)LkkDKfs8KKv?@_F@mcaxbHQ>yA*|ZCX(g5FK_8yCDg+!)l1zM9vUh?Wafy zU?bE`TaYY&A<@4a zG>w;y8>#HK!Qz0I7i&${m=|c|@b2j*o+=F&B9F{>!{S`(2HwO?IYvwHnANBAjgv0f zf?_+lv3s|7H${&vMC_Iq0yXC^$VToM-y<(H1^HfNXgqZP_V}!vq+YYgYi*9-SFED5 z?o_!N6i9@B)CD^;lrJjvlsFWB$DdUzY5s|ec{I~9&^hpd)TxspQdW)6WI$rtVn|CL zPRoF_bj`F{I#!S{t!7V{R!i4RtEDs3YMm_SitIGZb2f7JeP&v%OT3EtAy)=7t(KlJ zt(K;lRC%Ql?lauKB z#qlXJRKRvsw*Y^Nheu;*5c0@L5i_l0ndABrwU_Eg-D+_MVc**ZU7o>4q35W29{t?( zcU$;&><{jsXwRP>ZQ;*<<68^gdFs^l2jr3(ncr553Rp?a3k|a(Ciu+)mdFb;_kQ%2 z)PnjnehU{k%B&mIKVFO|x}<-4^vYJMbJ^Hf-q6 zr^YK=f#NzFMdUxmqKAV#F}czX+v3P#ujH@M3FGHOWJt6I+Qiv^mFbv}3fXUm*J+hm z@ETlb@=bEnnLpRI&|Kgh_)zmgqdAgUIb%43bvVN|H3RI-`xc|y;)Cy!GvU5;px@Nu z=#u@P9AlRSpFif6#fvTc9y8O-D{SGP$0PYCTV4OyXm_FglD&8+Z?^sU$R%Sq9D^0Q zm0coUV2AHL+_CU~K&R|FB=bk`b^~uAHgW@<$MD_(D%YaZaYrcjkdj_m42Atij8e-A z+5ZB&akw<{#^H?YdNFb1a6ITb4)5&7p&4%+SichfqU_&Q`ziMH-TbcG@i|T0CG-1? zEwX?6Qtlv-h<#pXGZ8~_d7WGymCLWnui+)(lD@plr6wgw&mkRQoXzY?X%$}1YzZ&B$_wwGpN-qm0h7g|K{I91Btkguy5nV z#L@&9fqw2Ms3J@J`++B`ZDIElVpQfsUf9Ju10lShxJuq7t>KHA@%xE>8KU@*F(ivo zYnUDO8wa6?%*UV<-cKl-pHlB9Fk<5qq&!4g209&o9YFVuz##7f6vt&Lt33KFC2 zo+5f!os;49V{1QQ_Y_0%dx|f#dy0O!{EPTK#kIH8dy0N9OtNIJ?7FsCyQjFu?kW0F z{TlCoDZT)_YL^tTwOH~CtACf5$w*v<82}?%c6|ba+AI4nMy9d5h+Q||MNqs%kRc}< z`^5hOVN)W|kLHD4hayQ(9;XIRkD;g&u=HMM3-`<~U}WXP2!N@Dk^mo&m}3xzvbrqe zfc76b#;)3008P`+$b221=f>2VHvfLFvsJx+U?Y5;*U4|=Bu8SL|J|r@eh(YxZGU^5 zkJBc@6v)&W&t#MQ=XGL|4|?Y;h&dU45%vO-@6oQfYJO8DcMJV z_&rkCu%Hkx#rQpe(B^-}0W4|*7{(m;V^kw1IOkskW@07|;&Xp7h>cz94O@BCdKt#0 z$cAq_6d@%q`gE&s3as)1|E!Vv*7f6&3xZ*F4TlvFUq;+oE_y?Ni#VK^8@EZV`C=(EB zy$l>u#M-_Lib4ed??+G;7DaV`ii+4Iz|!8}CKG&~z?uX@jr%cL3IV!JPQc0pAne8? z3*rX~hd?RTc9__~IXco}y^Kc|CyWY%)Y=ZrEPouBSle8f%+53HaA0b1fu5YiV~e=> zSD=lw13eJ*1%z+K>2VD*#@6Z!jN&QSFP9u5XP`csDVK!glAd7N1F-Xd@5>CD?gOZ; zVFJT~r(v27Xf2P_>+=b}w@}8&y)YTAKwV%Z?nA?Y*gXHXhI|E9i+T4}^N}$%xw)dH zSwH(h=b5!v;LnurRg#AEgn#bN)|x(JeW8&%+E)Ll9yU68iL+-%rpo!^>AM+A_QT&P z7!Ln!&nM6BGoYMDm+Gj0>X!MMRY&whhH7}`Lp98)Z|O1gBGezY2nK6Qf7m3LQ_&tm zf7pN_3x@OyTT;rdxF(@PMnacdkl6cwp7%| zjX=RH^yLZ@arN{Q6{~6oQFBH}XHNqZI3bQpRbBf?t$F25sd+4a%yt^Ke|z75118Q5 zN828~VD#C`_Lu~t)MnXZ!G~#&9Uq20S@_WJF$hVuZ3tVjhdUU38|_+=ch%Mbh<5-{ zK@%P6@PtMQHUM=z0+j&ucngsbXjH#r(xEi% z09wg>clzb&E!L=i^DmJ!yX%dmr$9CjgPfz`n*5vk~8uG<+jwRj?V(eR;QIudm8!5~j`yZN|(wO)N8j z&oaa4QM*BBAT87VmVx%^VQY&s%+g zlC>oQQ+#y=)@;&g1b``>R-(?|&rmT{9YNKrU=Hkm$rF}H^IIFy++03t>T$m=u|)1- zc05%po`SV@?liMr6Y%c(SLrb(>4Uingb?#gKPW*X)!Hxq2o8jj`lBMM=ga83X_bVOTq2u;W zCv1K+J3D(jXm(~aKX$Ig~LnCWc@`6ij{!gCi5-avYaYRd6b>;pz0kZBc__p^sf;zz(?;2(f*0AB(Q0QUfU0UMYBPDYuV9+u@^ z`dmr80UZDNk~jyr6xaex12+Laa67OcH~>5WJPjNM-U3d1up~|c&I2|BI{^>41GpDB z0DJ{_26!2G4fq*w>O&>57Pu6c1a<;{w*bq)H_)E_cs>F=2^<2R0}cbP0Rr2PGH?#C z0T=~lfxrC|v=6uwuz_h{6L2O_0)FtvCGi6AcfePHhk<*5MW6_pa0bv1 zy!{Adi8dVoUIL%*18)*f(4Po=5LgXt1hxP(Kn)0i+kppwN9p|`Df2r%C!fcE!h6wW zAUKqLs{~EwLY#`ab^vcfM_ce*`-r4%sxpl~Dv6H*R|8i7i$Fhgc{HB41NQ=t08au> z1J45g0=x#S1>OeU5Bl=~4>G$G*ogPjkp9L2=m>ZYcp5kW><4}qSOjXoEHDmi0@ebj z0Y?LGfX`vzS>O=x7;r!E!~xlV?k8cd&jGIhuLBPQZv$7OU+aLf>fZzC@1wxifMJ12M=4v33m1RaQO-yHn=9sTU>>KvuT-8yF4b>{rkKUMFBU)%a{i@-{2|VbL<8|o9U-f zzY8utcmzz*nKlh>^t2#LUG>%1PVpRdz#%Y`3E&E6Kih|7Tc+WG{Y4`{vj>dh0i9yDQlUqua%me@raRJhkTu8J8fDL@XUcBpaqcS}9C;sB zE|>NpPdCC(Lya?k>7$RdZ14UTb5^pKtgkKR<$c`@KSOR!nCtsWbSv}h-Lkx2o#g(E za|(TB{Xv#)O7ZQ~PoA!KUsj^)^eI`|UY;NR(ORyCx>MKv`mpPULFntAXZk~)XIq9I zTCP(uJWOG)e6mzN_?9Sdxlfb_|67!I{XpX2tD?N`IZ^h1p2zohL|Fs&AI9_BqI~F| zW!_=DYcEI~1f6&>&5IG|d;c!;Uw>3SpZyO2X}eyK?{S)U5YNZJ`*HcMJudl_pFsMT z(>iv&B-3}jEZazRl>b%cAAVInr@tt9QoG}J5#8%Q!S`oHdB+F-rg~^%_wW~wUG?Ce zy$in>*Dc$BtZSjG1*TKi%vQ~;*O6f8M$^$aVt6g_FpWz&d4 zGe^7euDmV|{SbXqy6}`P4rFw(tA{QQf$q?ADvxCRy-r;m`fgqqhhM?7po@b_7tekP zvi&~lR=Sv0x)?kt>o}}*G5v3#c~RDJ0JM1-R$zr@ zpaoD+Jt9Ht8l)NOepu0ntd`-W=_xa9$%3M4Ca7&!Cxz&Z5F{bW7;ejp=)($PW@erA zGZcTy9MtZkV6Dxi@(rp*A*V(G_|#2XZ-dhMbu_B0JeKgG1(9LEvKo8T_85y7zINX8OMC zZ`KBv2bPbp!^ADq={c{ib2}v2W^KR@;s#ZBTb^e*3!0}JyY&T=GuJ6)#U@fS4ISEt z(zPW$kX4ekm<<$()@g?A zLf*B=soN&2D)qf&RF-aAx0>3>_Nhv*JZPn5YAxM?QvFJI8dR&}yQe`_vb+t9kdQck zT4ZPrT1$1$Ip(rw8W_N^fiUtNZBe%)Q)~EcOKZWLQN89xEgAtMP1D#-wg$7&BJOmd zZ`6GaGfzO)Y!JD&b7~TjF`^cR6{s)73W)Z@5wvk(K_{XxN7-l>>RIq1Q;dl^)i%fb zp)B2k2_oOt^f2@-_&V99s@i8}^rJ6-qKsa%&2>c21LblpfE@8Uv1wz(<*s#A&r5_R20Cw!Ah(~8H`qo3#s|vkO+_&DLAV+fkTgSJFBoXSag^tLgp% z+a}wCfMqtZi?3iOyj-v|td8KC$@JlfwT5L&UrXbUbfwA{bPCZC$?$saZYI^mkqfd%F-=Qw;V!D{gh48U1 z{)D`rpb_t>=*AGg*&LhEJ9efQ3K^}d;;YVk!FU(wb7V|M8u{cMyhpK;Zyw9|YN_{0 z=5KO@!A!hJF+KM1@4meno~b~M{%ZF3Wee<<=A<>;4_nT?8(&0f4m;YE0gqU^{|T~J3I+4xs)elw=0TYk)? zit$S=D@F?oWt;BO4mIt6Ce`O+8^t(ozWk&fIYx6@hm9?!9mtly4sVuWA*QX8#W#`olYK`thH4tV1Sd^3*IKr|_qxr?QD4xSn7`n~~S5%KZV!n>9J`J8U^j%(D7xLMEhg%MPs^Q~Xw9mte zS`|tiqMW7D(aS=K{h;Ct7irUQuA3n(a)yVr2Bg?ApUdUDBqDO7iPam+cSv(g>^zdi zmfJud;3weK>yg1OBiVxR4zM1Zsn$?-+Qe3%W||H*F4FSM`sLgkC8G*eG@?7S8&SM4 z`^Ob5HBnM8v?5!7Yo((f9##iVX0H--=_{>8+65ZkcX8}hWBu=eMaZ}mS%C)2@Kjtd z_68cB0sanh(Y6N187oMqD85|Zm`u0CBc0ax4*Nn4wnw#@DAV9QM5soN#v>wRdW~mS zlj~`#_Oz0^siigLTdAFu%zkQ6T#BbA)&m3JB>km)tFnK84VBNSGq-eB8?^#n=fqY= zR@LO0P||O+>iJCd8{+n8Xs3%FNXg_=mRKSo_sYfJMrIvymFTwCODB?^Yk(DKXuQfP zj0R~3A%0S?PN8m_{S6V)*Vx?TP?z~n(!in?GONFM`Iyqm`g@RfS^s2s$Lq!*U6l6X zo08^Pcl1erHlSC%?t*kf#qKDZm2(T(naTU!YArQll=qrX;^MJ zlC*?O_EWcmZgQeEcPM=^IUhLVB)Eud6sQjjR92>kJD{x`%>fNH3#D^?h4<>6`#^TT zc+dD#ZFG{>IdU?{E;NRR#uZ7YtXHDeph>^I-g7a39kA2y(tkC_<=wjIJfF^=2*z_- zC*3%&9}T9+$K>-TGF{rxbEk*qn|?z#%p|sT%6ndXEBO5Lr~E}l9NPW|Cp@{~?&E%P z-8Y{<<@f$dh@YPIy|aJksf*TZy6w4Bo;Vr#_kU#94fNjw>l5O;#|hDQmJlcG6XF6< z5*LeqezCr!iEs7q6YI|vrTYMZKz_eIDf;i;P|_kKXynr@BaA}Jj-#k;6;tWHvd{08 z20*!n&r<8jxv_=5H`V#YJeLjmztVg?u#?a3T=r}}pMeUFaov#dyYN;?bE-^dC3|05 zRqpNJAlF6?pWerk7lN!W+pnN$+SzaVosD`gK!4VVf3@O6VjX6H3f9tt;=^KtxJYb- z>^6x@Fgsi(HjB&QcelWE52OB3thC3)R`hp5TrI9a{ZrWAY={1@gGE#^Kh9x|IFJ5b zFFqr5yIIdw5Mr(U?Wv@wUaS;x_d6=#HeS4G?vhI{+kE*ISAOKGEkna2qhsS+w@qAq&E(Xz+o!La zsm}h=>VMt8KDGfNE<00*|Ga6Hz);GmRIW=}f4TGe?D<^(rcyaQ1T+1+{>f2cupAK&xr3QY{0mf&!m(0qqNlf ze+%#qcxIrnd^7L0vM0Y6@%@D=ug)ej_d3%1A2Lt2DnH7zWoMZqMHy%hwA8_u#!xXY zRFW~2K3d9Cq#8-nI<=AJ?NxeJs|e?y?0QR`nBL#GvHn^(AUPg~`+rCeR7{IXUN zsCpyT_e_^kW1xy>ic#JJEb!A!?nD*kwpB^N|JmD}fOiWX7?K zjF?Kk^}@Iw&8_RFSw9V)_i5b7`(SCi;;%)nExrd9_c6ApYGxNQ#8PzGrdvE#f6b&H z+thwxp2w6^Xp7YK4o1Zo_mS|J`qKhj`NLUp@pmd{hPS$=|J zNvWTp??v@3N8q9wWjt@IyjUCAyzHF@Up>3s|MFCQy>6YPUOh}W+PU=fc9yAl74Kyk zD!tp?v0=6Itns}*pJlO@+mo&6jLgkJq6t)tcf$%)kZ~(r zlFYkHn>Nmv*u01QIv&iJb;~#7MKLFiIkea4ov${e-3TTEPM!8$Iu{jUx9K~kebI(W z-DV?hnd!VZtwxHR5o3#<;ZzyL-QKaw57_Rm=he>``g;Q;9P#>5_BZd(f91K;4TaPj zI6X)rYa00IT<1bE{(k(|Pl^Big%F>(vQ(Z1XcLuP1Ylc}TNHfau2Q*qny#dEnsZyMo2<=8>glPc zmE3<59kd{vA@P82zuG?`Zw}*;9W1PO2*!FEb+|86-%)^e%x6xIzsn<~^6Nl(tW+KZ zn!vq4T&AypY6v6Ie{|oC9FA~jB1hr^z6oNuz8`te5c6qiVAA1D*mR>% zC8hTesI)9gHwWB?HddWx_7pkxd>58zx3xfDq+3LW?*@UUr|}sIg;z9fmZI1AUlc?- zU7+F1Q;{7Kzc^Z+DOEQOTlZC?G}kc`BA5qV;gR=gke4aMe=!@r1eGnUYjvy9FnzlB z)5)ZA{7Ew2Zs-A@Q0rRIq5!uquU~|1PlnR@iVa=*vZ;e;H4ivVn^2K?5(rh#Ty=Y$ z)^;N;fI#iK*3yIBtf9b-e8ZH{d{b7*ZKN*@X2=rip{R}(QW>xxcYPR<-ts7_s2zXO zDx<0UnxS2(f33E(^R>a{@$og6AAizFQ+F1qXYvA9ojga}u6BAIN{1i}d0lJ|^k9YU zxGho}#DR|PTBLU7qvRuP4KupyxAUeI%a3EiseKU*3ryWYQg@RwR>cK#e3dEREC*Oe zHSw65i6G;asquXkZH%s8$wu%RFpl51IQpHg$+XP;e_0X73;O50bD7;m92c+WW(f@( zXTe1)c&|#XzV)E#R%8B*Q4{B4o~|e70s-I8k$oD6`=@&oB9k^HZ;D(?$>{U?*|gK~ zS>(9`b#1*i5GXk&($X9gRubQVh?PR;6W=VA_W^H?!_RCjm9GG1fqj7F5f388OT|w| z)aZ!Ee+CZ=8WLnN*%49HX@<>Y-a>NL5u1f_t9joR8${AQAECIdpmaq4R`Y1}{@Kj?U3l+T@1M%N-<^5ipLzdu=KY?``)4xmPnOd6zs$U!D0#8Z zUzNl)T(#>-BOW8JKelXz>6%)tnoJe3$i_y-f9+t11f$-^ebc1pRx{i|o|@jP@%uzF z?nZpPK@nBCj2~N8vGXx)?w@( z!PpEpZDbm9UzxrSx3}qZuEeH8eeRJzFIGE|ZLbkxHEdi)f!4(T4)a)AO#*U%i#e-O1;*mLoI4Sal@KFjgSYUGG1 zD0mj*Y97vLwi&^WEK$`%%B$;bLHYayO+YW8`@igWDq{aw*|sWog)r;j(BpJEb9jEQ zW4pDYx4YpY(g!Bb}t zO*3lwWV(4<|If*4RmPk5*7J;EL3v6{3I#u}H z0=;sk=y%<+rl})R&UuAUAAMrZ+Ww4`xTMAI?n{Z=`Cm#iV{$w_Q{%7p;&($t#gvoz z{E%p_VX488?Me*UDP{jTqXW=E}k24@?TLTD5`{s;5asJ-q#jEXVKxP%XyuC*WX=7QL zG4RKx>(#xI4|h~Cy}oYt)mQ2GdnCrx1>?EBD4wZf7I!C2$X5R{GWQvkQtO;LIWs-p zTbu=#z}HQZe+J7!uH0lRC~6A{k2QCt(!0$|FXfGjREDzh{)L^zNe;h>jn6glYQwSSp!<> zG+GOeSh{Ih-BT{btn3*Hkq}A9OAF6=I}Ji2BZa+;g}BZqcfSgLhftcVw^uSDCx^9v zi^-T)fAgO8?fT5vo0gK$?Q8RH$-=gJqkO8g`xsKTlEimu1>Qwnu%)Gcnf?|j@H1SJ zQ%Rd!&Y7N+mb|2kLe@#1nq*$5lw1|wr!h%gV~yFmZPLn@^t~@TW#v95I*_iBg=8Jr zKW|^?v32FI20Umk*=MYkCo4)mYXjfbz{lDWe@|UM=_&JPQQw+Vsrj|SoZ7XBVWw}L zH7q(FLoN30+XxF6-8DabtMy9D+=dViAq9Es2UYZ3`diyTot$T?lZc6*Iw&W-qm zrsc3vR=LwY-MUk_y-{ST1stuF-C0$#uG)y7>b!M`zXs1&+Pq8QS!;Cjnp8BoI-1w< ze=Y2H=A!Am%(SQz-DD~Po~&NhK+os+u?9J;m(-`0Xk$@{)=H14{nSRu;Tw_1jlT1B z^uKJ{8eE-s{-C9p z3j;ytUg+kaAZRvd4rneY1eyn`0L=$ge}fi-mV)X)4WLF)3#bj$4%!In07XDOpg1T6 z%7O+!TR}shVbCaOJ7^5F3$z=w2Q&`a3z`7!1MLSL08N69f{ueufzE=;??Zk;)u49J z0BASpAm}9MENJc~LU!J7@?r0Xhyke*>Bw zMp~c-5O`AHynP{Yf^|EPG7gsNUsc@z%99OqYHo}z)F>_L1 zEt@uVhcj8%+%Ho}=8f^h(_WZpxHCpfWz!260C^lZ9qY={EtiCRY)(caj_b;daN|GY z;eqmKHtO)Y@g-=Uix+c`qvQM@e;lp_-E*(wZ~-WcwCTTciSBQ>@kW>{K{SJ|muGLl z8`_c6$BRh_&lbM~IG&l@jRk4ZCqh;AIQnQTw3$Ox(lBtyv6Si9?L3!Z*ctSmwfC!*Q}S0 zrK3NV&gM}1NGy|zhr6QOydFw~Q!HP!Cv<@<`2Cd3hVS|Lvf*^dF@w^K>c~a1c4Aqo zqocmT>1b_hTUn?(ueOWrf2AX&JX2Opo@sPC`Vz^QED2^}tnrQlGt`$qKU1IGbFaTz zoen+89k~$mrusW)J^Jfm3YUuFo6hTV`tFG2li>u!y|4(EmIIjuzJwfS06-Cc# z(&=y>0nFMELyGCHp8S;P@Vt*pu#ky0om;qs%2{*w;cxz+XHET8c)!p^{2H9#d4Izt ze#Jf>@%_p!^5+l#sP7lJ$e$ZF^cw;Ab&!Cv!tY}LiX@<{@C#hzuOI=x>~F>e%73BX zMHku1U2MPD@)pWHf7PW-wkZug^5|p3+eRKAed5WtY=3IU&at?2Pc2{f1@9t`pHj!_S|3n_1~QS z+rRt!=l|g!|LM#>|I5!`_}72?_p|@;pa1pZfB(-foU)QfRnB`(Wx;I=3#U}VolwBL zH}}N0^u`m(zSRBcOg7j5z(9WRo{jh3x2faY&mY|S(8F*3zb^m(d;XU^CA5A+`(1Y{ z|IhvW*Mk3Se*^;qfgsnhhJf7fF$(0KlQAGanlui)0yqJ@61aar*Sii5=z7=WfUb8P z0dfz^F(CJkoB(p4(<$IfxGo0dm+8(7=(^b10bLh!^13cIBd_aXLEvo0wd%jxN z%~G&mM?L`Okqo(A$n^BLe$@&zcj01pO&oG+OHtRr85%gGPm3i4x+cL0MQ zz*Xc2e{ePV0pxywrNA}h2atOOT7c`xk3rr!41NIbCO?2&p-lnb416vW2$n$r24D{W zhk=&?$AINP?m@U5xCiztfD^zgfd_yyfRn(hfblhu2jEfIX8}(De+&2=@Fl=Az~2VG z2&BNxco6bXuKOKc2IPK+tAVrOJ{uSUz8p9ofA|VuHE<5F4){u73-B7?M&PS}J;1sA z>HzT7z#-u80=ENS1KbS^0rvv01?~sF7I+AF9qzO~`4ZyR&*E646 zArIsW@J8TV;Cx^OuoAcwcoVP@cnh!{xBwUd-Udto7nXDG0CEBx1y%!h0dEJ61MdLt ze*-Q89t17{9tQqC@EC9@@FcJXcpA72_yVvFIP0N6upT%ExEweSxB^%OTnStZTm@_Z zt_HRN8-X3bX4WHc4dnsYLU{nTQXYWoDF?s}lmp=1%pWjH{sDVg@4z_o1$>100+#Uw z@-XBH$h|Gx=rRlTtAKNWGlBDfvw&4Vf4*=Q1Fr@)0A~Z+fUf{{0IvbYfv*M*1Lp(B zfQx_=z$L%~z-7QmU@!0lunaG%)656(1>lu@alIM&0L}u=1kM4@0?q?o1FQlr0yY49 zfo(wUsEz>3fhpjXz^#l2ILdf{yBH5}obdqnF&^MShQ|x<2*U%9Gd%DV!vmjZe|X?o zh6k1pAv`b$Tm-BDmf^)%4ZI3i2b>9P0nP$$q<>%!{R4;SA1}%=`Umczf8YfD0T0k0 z@F@M^g?W)PY4zLII zdh7G4157-oea!*jP_py9HezK(v_%@ag$Zs6QfnQ*`fCpGE z;CI+(1COy>!`e4a0C{fW0PtI;vxp7@`!`t*;15|2;CERL;8$11>>1O^sH2^NogavP z9{3^Z9KeqO%SQtID5etxehN4jc*t}H>M9kmkDBg5oo2y^>I|n$=UY0Wy2mNgff`}Y znvO=@tsVA{vmK47f9`SGbi~w%>MGQwIG?|Dg!>#-N2BgG3VYaeN9vNhMpUOcYdYmP z?EEs_KH#0EQ?h{`9N}Ik)xD^j9fmz^y4KBfAJIKi)S2#JJB0mF(?wruIudoW({O)+ z=>gZ8j>dD<<&W!Lt1;6VgRpNlosqiaT-bR!xdOPubVBNke+ytwkYB*ZOgH12MI-DZ zrn@a7zhECW9kGghgZ(|^7my1cTY=n zE=e8rFzgSTu1($h*yE}zQs<@)e)4hE8BYUu^Zf+m7huar1Ht#P9RMdxH>a*X5B7G` z(SL^s`(37sf67`4?AvGuewghU$UTQ0z&)nRQ^$|Pevj$o)YS)I=RV9~Air6=Yg9kL zvlqCZ?HYKHF6d+ew~Q+Ln8{-o*T)b)p9e;+d4oI3v)?2p)(gkzOGuyg%r z0+_Th3db%7VBcgqKNmtLVc%+F6?VNxVehoD497SpVDGT8!UC2P_V@CA1$@xPDjdVi zelif`zSR(rCoShcsbjvyz@Jk7fZX@r4tzi54fqMB3;YP>?MWSji~>_~elu-r)OtTj zm)*7Cf9^|euydYWws$gO&)xf>qINdGy;sRSd)F9p!v_)y%D|U-fiUwTlhW;7xV6yf6(W>hIvc>0n68*<<~t=uJLTPbh2i5 z&))YM-xD4m!e&oexVXpHUc3JzZTEonTm4s}j%!Q?DxF$qg~>ssQ!lm8x~DAMZS`O2 z)H$n71}fzy8I^-dglx6CuXL8nncHrOf4R8#i2s$ctATP*3F%sAvOxE>CJ!{XnG94q zf6d}QiQHAn4K*qgl}?Mer^J7)#GjV^^R411E%CQX{5_I~2Ju5VVR=`ZtW=`pjV3R2 zuQ!?D-uniV8=6~9c9`yJyTgL{tTS2Se&QOFC+6oalc`GCA)|6de%9MP1C>a1y~!EP zZ6<4sv(@CS5IdtnQA^B;Nd}d{z&)t%@0V$W72gSdd zDYLG*SMsnz^4Tr?TrT|Vk^HQb{3ImLO_Jw~lvnE|A@$fKW$%?dtQMK+mHe+3xuTrY zTyL^YzD+GlR^r#X>y-R!x+&vNv$Y4;ob|b9O~#t7Z4~kx_nFh4IpYhP5dTeLf9{ez zuW)Lu4Y|D4cI1X|+f$|78{l~Dim|L0`~6nRTH%l*yR%$gCxoZX!lSU|=}xa*Efe|E zz3Q5esPVVmYge_xM{P6eU)zkjCnc=gX0jr?T4$Q$mMMJKHlXd+FK5f7jB)c5_1cNn zcdc;3UzdLWZu#qF=a5^@dXWX~e`6Ya?~)qHpO(2s>R-#Oyw@@>6W;mDFg<@-1~=^% z$*r4qqtuk9y;ky}X*XJWNiPjedxf>lw8!Hf*LoN3zM7{Mq8qWsrB(# zr9l0xlJHSGN!#Z6sgZhc<)qeE_6me~i@FN?$y!MY>y?)koUXO)6z4uA5d^v*=yk}1M(&gS(*L=UvJyT>ZgjFe3bKdeiDES|h zow)_s^Sj4=@~!=Hr^Kmxj%vKxzr^$|2;pI;$gV%E>O!j7sxH(efBextVzZQ2^`eOA zSlZV0T$!5nT$P$tb5?U)v_jXM^YtGI(_dAu+AKAwauybUYVMSLs9804*WBruH~Y*n zNn6cZqz=@a^u?2sysBBXP&MbI{AwQbr8OvZukshRd@3LNJad=Sj%)V27yL(j?s{&` zHD^5YX3G!FJyJVre@@8lM`}(APt}~Ve5yI>GpBv#yl2)?gPL0lB z*F9}A?V5GOr24mx##Fxyi#(`at2eZ%UaliG)iE@mYSxjPf1YLCBIgfPchtL9RR8N0 zx$5<`F;{`~V z%Yr!}b*%bqLekQ4hTdYNx|G(Lnsro~v^LY{>2um1QYHsUZ;Ya&SJk~brHpFU(X6YV zblMovwMXrae?Qlrvaz0yZ*&B#;~O0XXME|Z{-g4zX3eLXGZK@IfigB8jEgzu>$lxI zoLqax8zZak;eWnm%JZa`dZAA**zXrPi+j3*zH7URbcb}wcW}n~gj7lY>K>n_%es8% z_m%wtk+G;xcX#i^%=-A4wf2X={U4z6ZQ>hgzPp}A zw+Dh_+jU*+=(C0IC;tL}M9z;6Y%jQTz3C9_M||O)d$w?Ylt0`)UpTp+^WM ze}ayiJN=X@FT;&LqkhV#JUioyQ^M{D1ZV6}H#dxPo-q7741d)-iuu<7d;5;!{Lx=2 z{xR(K&zDYXY)5ha#$nIy2u%A%b_(GS?I`BYQP@xT{L@b<{v4VT-vs>4*jb$J9N0tV zHgS%;`or*#Wg43j_axjRJB#y~g?(see<7cf=g6lUZuh)0=gXi|50yEoPn0?12g;lW zX9k=J&sW> zTm(g=6@d$51;iH@6;Z2$7ez*$JBU2)w;xGPLsNC`y6djxovig`pZ)*)z4zIBpMB2% z|0)r-SrOK^q5H5W6k)@=3Co^gdU2g`<_10MEE6L@Rn&* z{?~;6lyIH?ZNqsyr~h3AKl2`yfB%$wI`j7__<@Bg|KWw+`HR6@?ZNlVf5=34*}^A! zFK5#OZr=I_x(?SdN#%cTlK1?!gSX3rf5Ic5Iuqw-z|A$e^V#kZE^;yt_t=9f|78z$ zU7pQTRsPRU^CA8U;GcO@OIe_7kRZ>QbIyRXOVC%P}kvbVdh$EuUw^Y4p!bY$-v=g&Rs ztn2`-eYwQOza;Q7{B6JyprI!?y;S5saQ%%^hS9rfrJFWsl|(xFNksc6H*FSZLqO}Jpf!PZv9Cl{e<;!`T`Q5t1O+V(v?S05DQFi!BcKgaq*t*4Eofa0X}x_5oXg6+r!Z9JKpdb2@_+{c8&D540L{Qo;2>}o_%EQ(YKa5` zLx2Qe0#F4k1e$ z071X{1A_rIpaTkl!<$e(U@>3@@_-m%5Fi2PHcI4u;0W+Cf6xLn0yRJ>uy-@!z|{ib zzyP2pa0Pw04P|NuP9vQ!fgfm^2;T>|9T)~g0a_p*Cb|qFy5ae^I}csPA*YUZ5RV2slI= z6cT+Up3A8PyvfcPs^YlWAe5$#s!jNW`Ek?9afj(!9sQz58>5;1uBzclJ=U~cU2^r(# zRo^8Us>-1HO+Cq^#V1=f)Z7r9_^EVE;MbG!yr0l#Szxl1n`M5QLh}6z%(7fX&UMmS zNyr+NLenHEr{(49U7d;$$!bZQy`cMTO!wzbe;=lrk#))zTpNr|O_fyVXeZ5(phWt) z^kH(1j^uYLp}b#Ed1R{M(oT9yH)yuh8%e3VT(oPcPRLY3KJ{Z-Gg)W%?qSA2Mt^|* z77fi6Rys9VqG)d_s9YAlNS`gt1`~2s^3X^Lj$Vi7p&N5Xoeqdrq@-eUvomjS-tsFp ze;MWU3WKfCnnM*Ar_IFRdE3WzU1)U%AS+c|9i})ZL+q!06nZY<&-2Yk1M$&Zgt3G1 zftzBQY}8xIY)tAKqg+YX$!@wzsj$`P*|TV;(LPzSLEL98lKX^>QgMGUZobUh*ZiKm>MOKp=5h7Bbk0bUgyu~ee;kAgRi?>eWcLNJv+GQg&Fvqg8MUcoxX7c(LK}^c z!NQ--d}A~6$7Q%?v-MKGT#m_3w()aEcVF36v_+j>jZdM?V6mGqCJU5rRxO4?L?CA~N+ zCFBJn=6OK~^`Vwqo!lf^6P>wSk6Qyz{M0uN8&gmU4W*3uu0(s;T2_s_KSxrY>qe^h z{c5+`P;f#HQ9n;O+sel9Ej|Svf0R2V+Cw~2F}aKR^kwv%H&4p3VuG~V=tRv%6d~2D zojI8v3Kx@WD!pBYNz_{IZnysKTnbTkP)@o_A}B+7PL({yUx?0Tn87NQPiM%Zw2r(` zE}A1ZH_sv#Q2$tYCOsvW$vX7@ zRGtRC!%_F5f{c9U2=61-5nVc-GJWXkhyj~sMyl_jo@OK`mJkvl#u%I79VXO>#xY=? zanKgdtwtk%MB659TDsLtf7d%-R#WhV|2C1AGsSo|Cp&Q8IVm6W_?W3=GMsWbqnKLd z5PFNPXrVM)wY`F#h>Lj`I~Ki#n}8`MV|02^xjyv00o666n7grC(PcZAYx1bnS!wyvQ9 z&a)4LM(rTy$dzm=f5+Ih>J@Q%ll1HYy^h`4HY;6RS2}x??Z|R1S$rBMR>T*U0viW%Cw5iTT!2`f$Tg}tSmD?D<{M0Q zRN1AXz1#=0i(Fb=UM}16u;HPLX(ebbUD}y4)rl-Sc{kJje~n^~H`Q~cW#glbk94Eh z7?Kp{8cB78ko}y?_P>0_8R^RgQ=V*Nuffp5OszFa{Jwi1L#K^YJ4*#uB#d%0EHx&Z z)k60Gd>cVmht+JC*A;8NUy-GPmC5L810+Z@BI&edUfEgR_p+%LV?mY4!b(hf-MFJ8 z2ERhtR%x=JfAd`$q^9TL z*^td089DU&-`H5mqYX@CT)sCvfXnyh1#tOZM*x@aZ3y71Q_t{`B?|Ukk%lrC=aCzUj5H9cQ2;uU+&xUY$ z-yh17 zQJU28Y&W45Pq12TC!U~Etv-qno#XT8(oSrWf0g1sV;uLT_SGFBtvcoTdZ6Nr(MP!S z-C;1dFF|hMXClm=!%gD+yr*z`3AeZ4-K^jRin!FhO{D8DXjDe3pMXTTt~E-J7XDP> zPZ$0?5hq{J3xr!N(!XEiZ5H%Orm2On?}G*jeSp10J!tqkQRaEVoiF$c1ixOSLuC@F zf1KnR;a?}pvq9vySCf*j#HdA?l@?A+??|=RsyXU)>im{S^)!44z z(fzugzt^A8i{th8n^OPd{R0kRpx)~TAir_FNdMo*$8Td`s3hN>7hl3&01LsC`7`I= zDd?L%;qJPP+?}`f>=pK{!kjwhZbA6hf7hR0@2xZEUE{7+xG(*}@TtPxjqt}?I$8#h zFIvvEJm5Y3IqTTfeOS2eJN@A4P%`=SL#Nd@hJWYOnX^CQ8FUVhsS<0=plq!5zz|>< zFaih%qJTI+3uFO#z$Bmor~+mKbwE9^2v`C%08PLO;8~y<*Z^z+wgS6=HsFW|e}4iv z1)K%W0Y3m&fSx(n-vGhDAYd4fl;i$xBn#Jhzyx3lPyti{wLl%v05k*JfrG#);2dxT z@EwP}7tkLV1PlR208u~^paZgjLSPbL2I_z%BK!(q1F#)v1KtHXfJ-#pT%-#O0>Xg_ z0M+eMyVqUz?tXn<@%VP@f8bYjf3fe1YjyL(%OwAo%hAUs>@{EUzFuDQSYMUjD5(BP zx;Or>4eyQrfBJhzv?W}XvS3}bu=F!!ckWUD_50WFm;NG;tNecnT-qHKc1lSXm{2mt_y7|+_)sx@b=XwCO&a$XvyP0epvq8@=M=` zwYD57`MA!KeRS0`p^K&bDF=r#0r|Ju-)iT-pET2xdw;OLivC^FOf)8blKbQ{mVOKV zu6g5~5pu|96N2`w)G#kH)-x&6v zbGO{Bd1ULlj(x`2nI}FjN-2A|NBdocGZtK5HZOVE<%Ez~Wkb^=+O{U$`S{y$^T#~% zGP(Le;zx@n^c=Y3+~*57`6M2$&q%vz_n)d`KOB`1IepN{yFOH3&^Jts-}Ko2w&K$p z=Wl9xN&Q*Hf6l&}^VjO`-{U`GsJ>%lOjK^cwqw(VK6StEhPE>Y9{K6q;oH~zbKbyOLVSS#vCIKNh$gB0n7 zaZ!2#(uwZn%O{U;wXejmN944(fK1zeEXu@X{h*F%nfvj$#dOEr{{fjU3?u( z=~Q1x^F@i&`?xv7evrr`icLVh57kOCo)nPDOky{m={2A-5|f!Me5Q~ae$DsWYc$=S z#D^4=e=OnoYeo{UA<=yF=-t|4Ja%bB+~tL}tZ_@2OQk<nCjMGBJxp%(m$bG^%5{j9I(+n zFf+nQn%YWpXpL;MV{SVJ1s?a#&Ge=E%4(syApHU=Ic%nE57VUF z(mTmux675K=9!^Lz+z7htF~DZ>}3^lf2F}bveHD&s9UExMwVGC6AbpsQ8f`^p_K-U zX{u~@j92D{q(VcJ9JXpZ6Xg=A4gQ(bA_ud0h-sJ0s%<96OyLK`CQq+MF0wJtW~won z<#O5XVk+7EEhY+*E!W8AP&55c4l~&GmKy6c*%lUBZAvYp@0^murW(w4IV^Ove>;=W z-g8MB-Kk7Tqg|Dw%{JQEZt(oC9^3IV^3sU45ql!OiTE*MhPqw-soE!UXjEg=si<>N z$mtanKG+|A` zCkbN{OA>vPMkOy!KAikX^2n4)e<@)at!Am_H4R-{==`}hyfr*iU80_+UagiR4N=pg zmPGA{3XXO}_mBB~?98~PIBmQs{`bk5DR*e-`rbz06@=dro*q6md{xB8h@%nFYOOj` zovj|Po}?~SSEy^%rz69o7Duf@Ic!f0dkg6L(@tD;+@e?N&H6f-~O z&oQsZT!`rr8yPz`wl=mQc6;n=u@_^n#s61&67bZWGyes*`Tl|5rC`qv}QE9})q=svIpR>=|d!N1c zIh2%?=+Hz)MTtg6BNdt@%~0YE4U-%!YN)KRi-k&sMTN#pnBS<-f5>p88FZM$!lJ^W zq{f=Np2z9V>)xN{hx>ZXKLBU%&-%RAT8|IM*X3*9bWh_``7d|@A1<;*9&U1r_)LtE(=e}<@*%lKJ}Mu_ z)Yi%Ma)W$9ZkDgge=YL&@}NA+o8V3JuJcxU4PLu9OxY?^%~RE?R{dSA*3alB-J%a` zW_&ZxRGOE}0b~1@_*s6j|ET|>|Bb&W*cpVwLHIptIbRa@Kx>j%3AL?^Vnwez^Fr&5R z52n+6YvO$3XZmyfUt>le`=bIK{1VgI6%2$!LjFmO5pn~mCC%i0GMrvYm(u+-+On)U zR)zJV^|=*me?MmT+Keq?E7(J93){m!VbRV;=QMYMtFR$O?sE4j_ceE~`-%H^cU(kc z1-z6$%3t8S_#u9rj}$3Fh?!!pxLb^r*J2XiOYW6=+r9G@S4I`$G*6oiW~*t%?sS;_ zP}e8sxcR}H=8y2l``o|6zt#VppAuvRIl-@jmBE|AfBxWD5MJW&2eIR^Av4HaQbrWb zrg^ygSLhbHlkTAh=x{5+8gEUtrdu~!9o8``%1*RexS$r&S;CuOgewdFJ=ZQ_?194D9VMFp{p{$dQvQr+F-^gSy&CBs_ z@*ePBfAkVmqDoT9Dn+HLG({9sLTQz*GN7p}m927AuF6ySszBYT-d0`eJ2hO7(KB?e zF4fOse&6YF<`Q$WS!oX8>}UF8{3*WgFZNgXTl{zZGlDCEJe<8Y_#ikMgac;y-G3uV zfRisF8_9NZl#HdC{)!gk2G-C!~;GD6Z{=-;_dts9xcul>Eb4_LTnIki9_OqXpr0G zVfmx{IX34Fuh$#$&c}>C@Uw!af^UOx$PK^mFqzCI4J4gDW4GH~b`C3KyV#%E*R0sR zf1f|jL*hyNv=78FF-5vEOWrT{;Xcp7Hg9If?Et)byM=(izg z44Q)Gpe1Mxb_8ufd(aVd23DBVdMc?Pn+mH_BwkQW2~MrzKF+*O8LH~=3U?mwEZ|`c!|UBJN%j~p|8>b`mFT^&XZ)P+RRS3v+OuFkxgNFtOS0ujy=!1 z;S}TG6LXyxoernl>2n61ko&TG!0mC5WBQtB@-lu3PE;XIm1AV4%#ryZ=?cvGa%}5j z)uTFen>lLY{ZL0J6n;nKXi`m@e@H87CtakM43OucJ#AfW57--=6V9pb0sb>_Gk#vR zs1*tFKjdZdQ+bc7QqQY3U~H>y*IoJ)f3H6#5J5(8dr%SPQ_o2q8B$0VlTSdW2WX1* zu+?Qvu(PqhE!f{5;h*<9^-hyB)%^nq^e}IQX1n+lQ7`t02{Kh)E^m|7fAU)y@>0C3 zy<5BrOyzuag}PlmsoqrmDpk+ccj5Pc1$Vmx{5fK@KMx!Cp-+POc#djpT=?UsP$Z|v z;Cv5Zw_4z1owSD*S>@KN)+GC4xK|Urcrj~br#LCjrOpzk#;J1}ofhY8?AB8EJ@+&B zR#_=)atqTjQ>EYu!P2$UOm)#qd}j$K!bd zPvl8FnWyknp2i7hTwv1aJOk6t;@LbG`Yjf3i1#p`aWYw+FVmzYe}(jAhRj7SSSvTm zCb?UF=!cS{B6ImGIRfToZmV<&XDtivjEh2KYk} zMMd6+aSyp431buaJ&C0$^g^6>HWkQ#_k-zQSm)WUJ>Qn#`Hk#WR>OW^r#d5?RA;)A z=gfDOIxC&WoLc8;cYi%{;8ZaU$?pXa_zLP$y-x{z6 zts(1#b;ynf56jt`AoyN(9R5EI3Hc?b**T0mxyHQ{x_irw<%VCu7xMdfHJJDw|A>zh z$>MyGCM@`WATC1&$ic166SseH+ z{HRFI|Bj9Y|0r9@E^uFW&)~boQn<=`b%$AE%HXz}kY~f$)&3)Xt-l^Q>T|F-786PgQUex9@M>025G+R?i3&AGg+h~wCYO_| z$<5f>Qt~9(Ox_^dK*lf0APHedQs`CmI$B5<(mLdnH|cSDiZu;+{&&{P)^Y0xE5^Ro zUSrqU-=L3Nik9#jR>huRwd^_8z~Y_J&U&{AEIIBfK7XBG#pm(c_#^y9_|V&YAO8y< zA; zzAHQAALSu9{84!fn|A_EcDgsx8{;K;=Xn=;7kQ3n(0ww!Y!LN&q@P0XcJFTQH{LSj z=QCDX0=8ALG4iO>V0)U{YCYvPt{lIxH_SR z=`(b^PSiisY1-2l>sk65q^dRg1-)0FY0fhew12(U+-R1Wr_GRAg;{R&+mNa53p1oF zD)J7d3kX4Cxq<8k$j`*ga*5Dik~*s(W~^Oro^QAi~I_I zn?DKUo*68`&s+|lt_xm4_j?B%?+yQss*}6L$*pKZgUF@RtXylpb%*tYHPODpE&zL$ z*ng|-dV9P5uKl5X$o||O&n{#4vRANkvq7KD@X=ZBe0NAplnhM1Up|R8vrV?iy|P<= zgk6dC61?%4knyH_cY!Piydx@F$Lh0ms#fR;*Xj9sp{~(y>%Z!eCINRc%j6(o++^-W zYkl1Omw6St^RDSOpJIQ0FlYD)*n$O6|9>**ejoD3)ZnV%L7eOzG=Hv=q@AtasCBJ|I_?j?BN}Fif8;+{cisUzchFz_zXEJDt{Dy zum3QTk6T?tmXZgNLe`RXq#nDroL16(^h26wZL{`Rm)di{_b2RQ*eS}iv&(tcIq3Y& z8R?D&xpuql?qN3#-9_27ZR$i9_y~E9w2427ui!*c@-#V0CLxzDkyWwz*red-NU zBUOSLrzWV$>O%OEqZHcSWom}HQq4xwo2zb7Mc~+y@XP7rqeBedkY*F4a$##E^9&@n zEIZrIv-7e4h5tw%Rd%!8f!v&cHjvBy*%=G*vxg}$m_kT4_S9W4XPo~GNfa`g*Xs10nAL&$vOp$NYey< zD$umjb%xH=S-MB}>OS4C2lSvG(kFDt#F$tUXW~JRM3ZEaO^QjyG>BnF7;Vx`hRHNp zCL3JI1zGY^LhP4L{XNL&ptgyT!;urB)eId4<*G zcB9esx_xfHJK)yxI$n=X|I=-h2IZi1b+8sZYe1W9L6d9;t-HbNezZq)$L#1(cO>)2 zL0d^Ag`|;x(tm#tZRiA?EJnquI2Et{_4fbom}Iuj(YZQL=j#Gp7+#qC=uj#2sJ#p? z%ggcdyaKPtTZ~j%?o~z{yv}QYf46u$;NG3^yf zaHdk6rxIsbi*q#K3@s72?!=S#;;9Gm#4&i<1UzX9o_~_z2{Z6?Ie4-HU8EPov&(g* zuGVXHooGk{3&`uzm#{~&N5}H~X(w|293x6t=hXhy@EDrt!RfYdxF_aqpzjeis z88b*0$su{9fE1zcmLexqM*OUfG@x6zkR8a7ounK6x*tjM1c{+>G=U}|Po`0ZHjqKH zBHbq+*|M0H&@ynaiq_CtT93xsOk2@eJJ5!D(0_ym=nxHAvDltOD;fJkus!Kkrj?CU zl8hh{Kjh3r^6-cGcW?Nm@rfM}VZSuSW+ zh#pmf4pjk~)!4O2HI1NJtK9~&b)ir7fp0^0h{dvamdKJ>DkDswVPvvwFfX4KvSL=k z%70h|l5Y)?Z#~*=Gn#c9>tJ21hxM@mHpD_stP}4fI>~4`#1T%qlj&qTxlX=Q=oC98 zPMK5TRH22}I`#0JW~bF@b2{KQJ@A?V^v#eP>&Cl@ZnB%|5?8qCZl;^<=DPWAph zxMgkydQA@bfhm39$$t>Kbu4;yB06;{`m{io&J6cxp3e(;F)!g| zynX@$bfi>4(2&warpOk#XqDk69*Vq?A^e^D z7;Hu{_M$>p>3ZFaooLl%teS{^N+MYJ3nwgczrv3u(>uv}##{Mpi59(8(HPqijMi+ku?lj(=X(DZ7yN zdywGz{_%Oj5c*lji}7N;I4>RzAQ3Gs*-P 3 - 8 + 10 .\wixver.h .\wixver.cs diff --git a/inc/wixver.cs b/inc/wixver.cs index e82ef78..d701ace 100644 --- a/inc/wixver.cs +++ b/inc/wixver.cs @@ -1,4 +1,4 @@ // using System.Reflection; [assembly:AssemblyVersion("3.0.0.0")] -[assembly:AssemblyFileVersion("3.8.5260.23891")] +[assembly:AssemblyFileVersion("3.10.5758.27000")] diff --git a/inc/wixver.h b/inc/wixver.h index ba6381f..1590067 100644 --- a/inc/wixver.h +++ b/inc/wixver.h @@ -2,12 +2,12 @@ #ifndef _VERSION_FILE_H_ #define _VERSION_FILE_H_ -#define szVerMajorMinor "3.8" -#define szVerMajorMinorBuildRev "3.8.5260.23891" +#define szVerMajorMinor "3.10" +#define szVerMajorMinorBuildRev "3.10.5758.27000" #define rmj 3 -#define rmm 8 -#define rbd 5260 -#define rev 23891 +#define rmm 10 +#define rbd 5758 +#define rev 27000 #define szVerName "BalExtensionExt Release" #endif diff --git a/wixext/BalCompiler.cs b/wixext/BalCompiler.cs index b2b77e5..087de90 100644 --- a/wixext/BalCompiler.cs +++ b/wixext/BalCompiler.cs @@ -100,6 +100,32 @@ namespace Microsoft.Tools.WindowsInstallerXml.Extensions { switch (parentElement.LocalName) { + case "ExePackage": + case "MsiPackage": + case "MspPackage": + case "MsuPackage": + string packageId; + if (!contextValues.TryGetValue("PackageId", out packageId) || String.IsNullOrEmpty(packageId)) + { + this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, parentElement.LocalName, "Id", attribute.LocalName)); + } + else + { + switch (attribute.LocalName) + { + case "PrereqSupportPackage": + if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attribute)) + { + Row row = this.Core.CreateRow(sourceLineNumbers, "MbaPrerequisiteSupportPackage"); + row[0] = packageId; + } + break; + default: + this.Core.UnexpectedAttribute(sourceLineNumbers, attribute); + break; + } + } + break; case "Variable": // at the time the extension attribute is parsed, the compiler might not yet have // parsed the Name attribute, so we need to get it directly from the parent element. @@ -208,6 +234,10 @@ namespace Microsoft.Tools.WindowsInstallerXml.Extensions { SourceLineNumberCollection sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); string launchTarget = null; + string launchTargetElevatedId = null; + string launchArguments = null; + YesNoType launchHidden = YesNoType.NotSet; + string launchWorkingDir = null; string licenseFile = null; string licenseUrl = null; string logoFile = null; @@ -218,6 +248,8 @@ namespace Microsoft.Tools.WindowsInstallerXml.Extensions YesNoType suppressDowngradeFailure = YesNoType.NotSet; YesNoType suppressRepair = YesNoType.NotSet; YesNoType showVersion = YesNoType.NotSet; + YesNoType supportCacheOnly = YesNoType.NotSet; + YesNoType showFilesInUse = YesNoType.NotSet; YesNoType launchPassive = YesNoType.NotSet; YesNoType launchQuiet = YesNoType.NotSet; @@ -230,6 +262,18 @@ namespace Microsoft.Tools.WindowsInstallerXml.Extensions case "LaunchTarget": launchTarget = this.Core.GetAttributeValue(sourceLineNumbers, attrib, false); break; + case "LaunchTargetElevatedId": + launchTargetElevatedId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); + break; + case "LaunchArguments": + launchArguments = this.Core.GetAttributeValue(sourceLineNumbers, attrib, false); + break; + case "LaunchHidden": + launchHidden = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); + break; + case "LaunchWorkingFolder": + launchWorkingDir = this.Core.GetAttributeValue(sourceLineNumbers, attrib, false); + break; case "LicenseFile": licenseFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib, false); break; @@ -266,6 +310,12 @@ namespace Microsoft.Tools.WindowsInstallerXml.Extensions case "ShowVersion": showVersion = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); break; + case "SupportCacheOnly": + supportCacheOnly = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); + break; + case "ShowFilesInUse": + showFilesInUse = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); + break; default: this.Core.UnexpectedAttribute(sourceLineNumbers, attrib); break; @@ -304,6 +354,26 @@ namespace Microsoft.Tools.WindowsInstallerXml.Extensions this.Core.CreateVariableRow(sourceLineNumbers, "LaunchTarget", launchTarget, "string", false, false); } + if (!String.IsNullOrEmpty(launchTargetElevatedId)) + { + this.Core.CreateVariableRow(sourceLineNumbers, "LaunchTargetElevatedId", launchTargetElevatedId, "string", false, false); + } + + if (!String.IsNullOrEmpty(launchArguments)) + { + this.Core.CreateVariableRow(sourceLineNumbers, "LaunchArguments", launchArguments, "string", false, false); + } + + if (YesNoType.Yes == launchHidden) + { + this.Core.CreateVariableRow(sourceLineNumbers, "LaunchHidden", "yes", "string", false, false); + } + + if (!String.IsNullOrEmpty(launchWorkingDir)) + { + this.Core.CreateVariableRow(sourceLineNumbers, "LaunchWorkingFolder", launchWorkingDir, "string", false, false); + } + if (!String.IsNullOrEmpty(licenseFile)) { this.Core.CreateWixVariableRow(sourceLineNumbers, "WixExtbaLicenseRtf", licenseFile, false); @@ -334,7 +404,7 @@ namespace Microsoft.Tools.WindowsInstallerXml.Extensions this.Core.CreateWixVariableRow(sourceLineNumbers, "WixExtbaThemeWxl", localizationFile, false); } - if (YesNoType.Yes == suppressOptionsUI || YesNoType.Yes == suppressDowngradeFailure || YesNoType.Yes == suppressRepair) + if (YesNoType.Yes == suppressOptionsUI || YesNoType.Yes == suppressDowngradeFailure || YesNoType.Yes == suppressRepair || YesNoType.Yes == showVersion || YesNoType.Yes == supportCacheOnly || YesNoType.Yes == showFilesInUse) { Row row = this.Core.CreateRow(sourceLineNumbers, "WixExtbaOptions"); if (YesNoType.Yes == suppressOptionsUI) @@ -357,15 +427,25 @@ namespace Microsoft.Tools.WindowsInstallerXml.Extensions row[3] = 1; } - if (YesNoType.Yes == launchPassive) + if (YesNoType.Yes == showFilesInUse) { row[4] = 1; } - if (YesNoType.Yes == launchQuiet) + if (YesNoType.Yes == supportCacheOnly) { row[5] = 1; } + + if (YesNoType.Yes == launchPassive) + { + row[6] = 1; + } + + if (YesNoType.Yes == launchQuiet) + { + row[7] = 1; + } } } } diff --git a/wixext/Xsd/bal.xsd b/wixext/Xsd/bal.xsd index 775bdf2..483f29b 100644 --- a/wixext/Xsd/bal.xsd +++ b/wixext/Xsd/bal.xsd @@ -62,7 +62,46 @@ - If set, the success page will show a Launch button the user can use to launch the application being installed. The string value can be formatted using Burn variables enclosed in brackets, to refer to installation directories and so forth. + + If set, the success page will show a Launch button the user can use to launch the application being installed. + The string value can be formatted using Burn variables enclosed in brackets, + to refer to installation directories and so forth. + + + + + + + Id of the target ApprovedExeForElevation element. + If set with LaunchTarget, WixStdBA will launch the application through the Engine's LaunchApprovedExe method instead of through ShellExecute. + + + + + + + If set, WixStdBA will supply these arguments when launching the application specified by the LaunchTarget attribute. + The string value can be formatted using Burn variables enclosed in brackets, + to refer to installation directories and so forth. + + + + + + + If set to "yes", WixStdBA will launch the application specified by the LaunchTarget attribute with the SW_HIDE flag. + This attribute is ignored when the LaunchTargetElevatedId attribute is specified. + + + + + + + WixStdBA will use this working folder when launching the specified application. + The string value can be formatted using Burn variables enclosed in brackets, + to refer to installation directories and so forth. + This attribute is ignored when the LaunchTargetElevatedId attribute is specified. + @@ -126,10 +165,34 @@ If set to "yes", the application version will be displayed on the UI. + + + If set to "yes", the bundle can be pre-cached using the /cache command line argument. + + + + + If set to "yes", WixStdBA will show a page allowing the user to restart applications when files are in use. + + - + + + + When set to "yes", the Prereq BA will plan the package to be installed if its InstallCondition is "true" or empty. + + + + + + + + + + + When set to "yes", lets the user override the variable's default value by specifying another value on the command line, diff --git a/wixext/data/tables.xml b/wixext/data/tables.xml index 7216e89..4d15f8c 100644 --- a/wixext/data/tables.xml +++ b/wixext/data/tables.xml @@ -27,6 +27,10 @@ maxValue="1" description="If 1, don't show Repair button during maintenance."/> + + #(loc.OptionsOkButton) + + #(loc.Title) + + #(loc.FilesInUseHeader) + #(loc.FilesInUseLabel) + + + + + + #(loc.Title) @@ -58,7 +69,10 @@ #(loc.Title) - #(loc.SuccessHeader) + #(loc.SuccessHeader) + #(loc.SuccessInstallHeader) + #(loc.SuccessRepairHeader) + #(loc.SuccessUninstallHeader) #(loc.SuccessRestartText) @@ -67,7 +81,10 @@ #(loc.Title) - #(loc.FailureHeader) + #(loc.FailureHeader) + #(loc.FailureInstallHeader) + #(loc.FailureUninstallHeader) + #(loc.FailureRepairHeader) #(loc.FailureHyperlinkLogText) #(loc.FailureRestartText) diff --git a/wixstdba/Resources/HyperlinkTheme.wxl b/wixstdba/Resources/HyperlinkTheme.wxl index 41910b6..6617b01 100644 --- a/wixstdba/Resources/HyperlinkTheme.wxl +++ b/wixstdba/Resources/HyperlinkTheme.wxl @@ -7,6 +7,7 @@ Version [WixBundleVersion] Version [WixBundleVersion] <a href="#">upgrade available</a> Are you sure you want to cancel? + Previous version Setup Help /install | /repair | /uninstall | /layout [directory] - installs, repairs, uninstalls or creates a complete local copy of the bundle in directory. Install is the default. @@ -35,14 +36,26 @@ &Repair &Uninstall &Close + Repair Successfully Completed + Uninstall Successfully Completed + Installation Successfully Completed Setup Successful &Launch You must restart your computer before you can use the software. &Restart &Close Setup Failed + Setup Failed + Uninstall Failed + Repair Failed One or more issues caused the setup to fail. Please fix the issues and then retry setup. For more information see the <a href="#">log file</a>. You must restart your computer to complete the rollback of the software. &Restart &Close + Files In Use + The following applications are using files that need to be updated: + Close the &applications and attempt to restart them. + &Do not close applications. A reboot will be required. + &OK + &Cancel \ No newline at end of file diff --git a/wixstdba/Resources/HyperlinkTheme.xml b/wixstdba/Resources/HyperlinkTheme.xml index 34aca2c..e41c164 100644 --- a/wixstdba/Resources/HyperlinkTheme.xml +++ b/wixstdba/Resources/HyperlinkTheme.xml @@ -29,12 +29,23 @@ #(loc.OptionsHeader) - #(loc.OptionsLocationLabel) + #(loc.OptionsLocationLabel) + + #(loc.FilesInUseHeader) + #(loc.FilesInUseLabel) + + + + + + + + #(loc.ProgressHeader) #(loc.ProgressLabel) @@ -49,17 +60,23 @@ - #(loc.SuccessHeader) + #(loc.SuccessHeader) + #(loc.SuccessInstallHeader) + #(loc.SuccessRepairHeader) + #(loc.SuccessUninstallHeader) - #(loc.SuccessRestartText) + #(loc.SuccessRestartText) - #(loc.FailureHeader) + #(loc.FailureHeader) + #(loc.FailureInstallHeader) + #(loc.FailureUninstallHeader) + #(loc.FailureRepairHeader) #(loc.FailureHyperlinkLogText) - #(loc.FailureRestartText) + #(loc.FailureRestartText) diff --git a/wixstdba/Resources/RtfTheme.wxl b/wixstdba/Resources/RtfTheme.wxl index 67b5ee0..706b8bf 100644 --- a/wixstdba/Resources/RtfTheme.wxl +++ b/wixstdba/Resources/RtfTheme.wxl @@ -2,7 +2,9 @@ [WixBundleName] Setup [WixBundleName] + Version [WixBundleVersion] Are you sure you want to cancel? + Previous version Setup Help /install | /repair | /uninstall | /layout [directory] - installs, repairs, uninstalls or creates a complete local copy of the bundle in directory. Install is the default. @@ -30,14 +32,26 @@ &Repair &Uninstall &Close + Repair Successfully Completed + Uninstall Successfully Completed + Installation Successfully Completed Setup Successful &Launch You must restart your computer before you can use the software. &Restart &Close Setup Failed + Setup Failed + Uninstall Failed + Repair Failed One or more issues caused the setup to fail. Please fix the issues and then retry setup. For more information see the <a href="#">log file</a>. You must restart your computer to complete the rollback of the software. &Restart &Close + Files In Use + The following applications are using files that need to be updated: + Close the &applications and attempt to restart them. + &Do not close applications. A reboot will be required. + &OK + &Cancel diff --git a/wixstdba/Resources/RtfTheme.xml b/wixstdba/Resources/RtfTheme.xml index af724a8..53489db 100644 --- a/wixstdba/Resources/RtfTheme.xml +++ b/wixstdba/Resources/RtfTheme.xml @@ -31,6 +31,15 @@ + + #(loc.FilesInUseHeader) + #(loc.FilesInUseLabel) + + + + + + #(loc.ProgressHeader) #(loc.ProgressLabel) @@ -45,17 +54,23 @@ - #(loc.SuccessHeader) + #(loc.SuccessHeader) + #(loc.SuccessInstallHeader) + #(loc.SuccessRepairHeader) + #(loc.SuccessUninstallHeader) - #(loc.SuccessRestartText) + #(loc.SuccessRestartText) - #(loc.FailureHeader) + #(loc.FailureHeader) + #(loc.FailureInstallHeader) + #(loc.FailureUninstallHeader) + #(loc.FailureRepairHeader) #(loc.FailureHyperlinkLogText) - #(loc.FailureRestartText) + #(loc.FailureRestartText) diff --git a/wixstdba/WixStandardBootstrapperApplication.cpp b/wixstdba/WixStandardBootstrapperApplication.cpp index d3a609e..4916e3a 100644 --- a/wixstdba/WixStandardBootstrapperApplication.cpp +++ b/wixstdba/WixStandardBootstrapperApplication.cpp @@ -16,1340 +16,1667 @@ static const LPCWSTR WIXSTDBA_WINDOW_CLASS = L"WixExtBA"; static const LPCWSTR WIXSTDBA_VARIABLE_INSTALL_FOLDER = L"InstallFolder"; static const LPCWSTR WIXSTDBA_VARIABLE_INSTALL_FOLDER2 = L"InstallFolder2"; static const LPCWSTR WIXSTDBA_VARIABLE_LAUNCH_TARGET_PATH = L"LaunchTarget"; +static const LPCWSTR WIXSTDBA_VARIABLE_LAUNCH_TARGET_ELEVATED_ID = L"LaunchTargetElevatedId"; static const LPCWSTR WIXSTDBA_VARIABLE_LAUNCH_ARGUMENTS = L"LaunchArguments"; static const LPCWSTR WIXSTDBA_VARIABLE_LAUNCH_HIDDEN = L"LaunchHidden"; +static const LPCWSTR WIXSTDBA_VARIABLE_LAUNCH_WORK_FOLDER = L"LaunchWorkingFolder"; + static const DWORD WIXSTDBA_ACQUIRE_PERCENTAGE = 30; +static const LPCWSTR WIXSTDBA_VARIABLE_BUNDLE_FILE_VERSION = L"WixBundleFileVersion"; +static const LPCWSTR WIXSTDBA_VARIABLE_LANGUAGE_ID = L"WixStdBALanguageId"; + enum WIXSTDBA_STATE { - WIXSTDBA_STATE_OPTIONS, - WIXSTDBA_STATE_INITIALIZING, - WIXSTDBA_STATE_INITIALIZED, - WIXSTDBA_STATE_HELP, - WIXSTDBA_STATE_DETECTING, - WIXSTDBA_STATE_DETECTED, - WIXSTDBA_STATE_PLANNING, - WIXSTDBA_STATE_PLANNED, - WIXSTDBA_STATE_APPLYING, - WIXSTDBA_STATE_CACHING, - WIXSTDBA_STATE_CACHED, - WIXSTDBA_STATE_EXECUTING, - WIXSTDBA_STATE_EXECUTED, - WIXSTDBA_STATE_APPLIED, - WIXSTDBA_STATE_FAILED, + WIXSTDBA_STATE_OPTIONS, + WIXSTDBA_STATE_FILESINUSE, + WIXSTDBA_STATE_INITIALIZING, + WIXSTDBA_STATE_INITIALIZED, + WIXSTDBA_STATE_HELP, + WIXSTDBA_STATE_DETECTING, + WIXSTDBA_STATE_DETECTED, + WIXSTDBA_STATE_PLANNING, + WIXSTDBA_STATE_PLANNED, + WIXSTDBA_STATE_APPLYING, + WIXSTDBA_STATE_CACHING, + WIXSTDBA_STATE_CACHED, + WIXSTDBA_STATE_EXECUTING, + WIXSTDBA_STATE_EXECUTED, + WIXSTDBA_STATE_APPLIED, + WIXSTDBA_STATE_FAILED, }; enum WM_WIXSTDBA { - WM_WIXSTDBA_SHOW_HELP = WM_APP + 100, - WM_WIXSTDBA_DETECT_PACKAGES, - WM_WIXSTDBA_PLAN_PACKAGES, - WM_WIXSTDBA_APPLY_PACKAGES, - WM_WIXSTDBA_CHANGE_STATE, + WM_WIXSTDBA_SHOW_HELP = WM_APP + 100, + WM_WIXSTDBA_DETECT_PACKAGES, + WM_WIXSTDBA_PLAN_PACKAGES, + WM_WIXSTDBA_APPLY_PACKAGES, + WM_WIXSTDBA_CHANGE_STATE, + WM_WIXSTDBA_SHOW_STATE_MODAL, + WM_WIXSTDBA_CLOSE_STATE_MODAL, + WM_WIXSTDBA_SHOW_FAILURE, }; // This enum must be kept in the same order as the vrgwzPageNames array. enum WIXSTDBA_PAGE { - WIXSTDBA_PAGE_LOADING, - WIXSTDBA_PAGE_HELP, - WIXSTDBA_PAGE_INSTALL, - WIXSTDBA_PAGE_OPTIONS, - WIXSTDBA_PAGE_MODIFY, - WIXSTDBA_PAGE_PROGRESS, - WIXSTDBA_PAGE_PROGRESS_PASSIVE, - WIXSTDBA_PAGE_SUCCESS, - WIXSTDBA_PAGE_FAILURE, - COUNT_WIXSTDBA_PAGE, + WIXSTDBA_PAGE_LOADING, + WIXSTDBA_PAGE_HELP, + WIXSTDBA_PAGE_INSTALL, + WIXSTDBA_PAGE_OPTIONS, + WIXSTDBA_PAGE_FILESINUSE, + WIXSTDBA_PAGE_MODIFY, + WIXSTDBA_PAGE_PROGRESS, + WIXSTDBA_PAGE_PROGRESS_PASSIVE, + WIXSTDBA_PAGE_SUCCESS, + WIXSTDBA_PAGE_FAILURE, + COUNT_WIXSTDBA_PAGE, }; // This array must be kept in the same order as the WIXSTDBA_PAGE enum. static LPCWSTR vrgwzPageNames[] = { - L"Loading", - L"Help", - L"Install", - L"Options", - L"Modify", - L"Progress", - L"ProgressPassive", - L"Success", - L"Failure", + L"Loading", + L"Help", + L"Install", + L"Options", + L"FilesInUse", + L"Modify", + L"Progress", + L"ProgressPassive", + L"Success", + L"Failure", }; enum WIXSTDBA_CONTROL { - // Non-paged controls - WIXSTDBA_CONTROL_CLOSE_BUTTON = THEME_FIRST_ASSIGN_CONTROL_ID, - WIXSTDBA_CONTROL_MINIMIZE_BUTTON, + // Non-paged controls + WIXSTDBA_CONTROL_CLOSE_BUTTON = THEME_FIRST_ASSIGN_CONTROL_ID, + WIXSTDBA_CONTROL_MINIMIZE_BUTTON, - // Help page - WIXSTDBA_CONTROL_HELP_CANCEL_BUTTON, + // Help page + WIXSTDBA_CONTROL_HELP_CANCEL_BUTTON, - // Welcome page - WIXSTDBA_CONTROL_INSTALL_BUTTON, - WIXSTDBA_CONTROL_OPTIONS_BUTTON, - WIXSTDBA_CONTROL_EULA_RICHEDIT, - WIXSTDBA_CONTROL_EULA_LINK, - WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX, - WIXSTDBA_CONTROL_WELCOME_CANCEL_BUTTON, - WIXSTDBA_CONTROL_VERSION_LABEL, - WIXSTDBA_CONTROL_UPGRADE_LINK, + // Welcome page + WIXSTDBA_CONTROL_INSTALL_BUTTON, + WIXSTDBA_CONTROL_OPTIONS_BUTTON, + WIXSTDBA_CONTROL_EULA_RICHEDIT, + WIXSTDBA_CONTROL_EULA_LINK, + WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX, + WIXSTDBA_CONTROL_WELCOME_CANCEL_BUTTON, + WIXSTDBA_CONTROL_VERSION_LABEL, + WIXSTDBA_CONTROL_UPGRADE_LINK, - // Options page - WIXSTDBA_CONTROL_FOLDER_EDITBOX, - WIXSTDBA_CONTROL_BROWSE_BUTTON, - WIXSTDBA_CONTROL_FOLDER_EDITBOX2, - WIXSTDBA_CONTROL_BROWSE_BUTTON2, - WIXSTDBA_CONTROL_OK_BUTTON, - WIXSTDBA_CONTROL_CANCEL_BUTTON, + // Options page + WIXSTDBA_CONTROL_FOLDER_EDITBOX, + WIXSTDBA_CONTROL_BROWSE_BUTTON, + WIXSTDBA_CONTROL_FOLDER_EDITBOX2, + WIXSTDBA_CONTROL_BROWSE_BUTTON2, + WIXSTDBA_CONTROL_OK_BUTTON, + WIXSTDBA_CONTROL_CANCEL_BUTTON, - // Modify page - WIXSTDBA_CONTROL_REPAIR_BUTTON, - WIXSTDBA_CONTROL_UNINSTALL_BUTTON, - WIXSTDBA_CONTROL_MODIFY_CANCEL_BUTTON, + // FilesInUse page + WIXSTDBA_CONTROL_FILESINUSE_TEXT, + WIXSTDBA_CONTROL_FILESINUSE_CLOSE_RADIOBUTTON, + WIXSTDBA_CONTROL_FILESINUSE_DONTCLOSE_RADIOBUTTON, + WIXSTDBA_CONTROL_FILESINUSE_OK_BUTTON, + WIXSTDBA_CONTROL_FILESINUSE_CANCEL_BUTTON, - // Progress page - WIXSTDBA_CONTROL_CACHE_PROGRESS_PACKAGE_TEXT, - WIXSTDBA_CONTROL_CACHE_PROGRESS_BAR, - WIXSTDBA_CONTROL_CACHE_PROGRESS_TEXT, + // Modify page + WIXSTDBA_CONTROL_REPAIR_BUTTON, + WIXSTDBA_CONTROL_UNINSTALL_BUTTON, + WIXSTDBA_CONTROL_MODIFY_CANCEL_BUTTON, - WIXSTDBA_CONTROL_EXECUTE_PROGRESS_PACKAGE_TEXT, - WIXSTDBA_CONTROL_EXECUTE_PROGRESS_BAR, - WIXSTDBA_CONTROL_EXECUTE_PROGRESS_TEXT, - WIXSTDBA_CONTROL_EXECUTE_PROGRESS_ACTIONDATA_TEXT, + // Progress page + WIXSTDBA_CONTROL_CACHE_PROGRESS_PACKAGE_TEXT, + WIXSTDBA_CONTROL_CACHE_PROGRESS_BAR, + WIXSTDBA_CONTROL_CACHE_PROGRESS_TEXT, - WIXSTDBA_CONTROL_OVERALL_PROGRESS_PACKAGE_TEXT, - WIXSTDBA_CONTROL_OVERALL_PROGRESS_BAR, - WIXSTDBA_CONTROL_OVERALL_CALCULATED_PROGRESS_BAR, - WIXSTDBA_CONTROL_OVERALL_PROGRESS_TEXT, + WIXSTDBA_CONTROL_EXECUTE_PROGRESS_PACKAGE_TEXT, + WIXSTDBA_CONTROL_EXECUTE_PROGRESS_BAR, + WIXSTDBA_CONTROL_EXECUTE_PROGRESS_TEXT, + WIXSTDBA_CONTROL_EXECUTE_PROGRESS_ACTIONDATA_TEXT, - WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON, + WIXSTDBA_CONTROL_OVERALL_PROGRESS_PACKAGE_TEXT, + WIXSTDBA_CONTROL_OVERALL_PROGRESS_BAR, + WIXSTDBA_CONTROL_OVERALL_CALCULATED_PROGRESS_BAR, + WIXSTDBA_CONTROL_OVERALL_PROGRESS_TEXT, - // Success page - WIXSTDBA_CONTROL_LAUNCH_BUTTON, - WIXSTDBA_CONTROL_SUCCESS_RESTART_TEXT, - WIXSTDBA_CONTROL_SUCCESS_RESTART_BUTTON, - WIXSTDBA_CONTROL_SUCCESS_CANCEL_BUTTON, + WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON, - // Failure page - WIXSTDBA_CONTROL_FAILURE_LOGFILE_LINK, - WIXSTDBA_CONTROL_FAILURE_MESSAGE_TEXT, - WIXSTDBA_CONTROL_FAILURE_RESTART_TEXT, - WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON, - WIXSTDBA_CONTROL_FAILURE_CANCEL_BUTTON, + // Success page + WIXSTDBA_CONTROL_LAUNCH_BUTTON, + WIXSTDBA_CONTROL_SUCCESS_RESTART_TEXT, + WIXSTDBA_CONTROL_SUCCESS_RESTART_BUTTON, + WIXSTDBA_CONTROL_SUCCESS_CANCEL_BUTTON, + + WIXSTDBA_CONTROL_SUCCESS_HEADER, + WIXSTDBA_CONTROL_SUCCESS_INSTALL_HEADER, + WIXSTDBA_CONTROL_SUCCESS_UNINSTALL_HEADER, + WIXSTDBA_CONTROL_SUCCESS_REPAIR_HEADER, + + // Failure page + WIXSTDBA_CONTROL_FAILURE_LOGFILE_LINK, + WIXSTDBA_CONTROL_FAILURE_MESSAGE_TEXT, + WIXSTDBA_CONTROL_FAILURE_RESTART_TEXT, + WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON, + WIXSTDBA_CONTROL_FAILURE_CANCEL_BUTTON, + + WIXSTDBA_CONTROL_FAILURE_HEADER, + WIXSTDBA_CONTROL_FAILURE_INSTALL_HEADER, + WIXSTDBA_CONTROL_FAILURE_UNINSTALL_HEADER, + WIXSTDBA_CONTROL_FAILURE_REPAIR_HEADER, }; static THEME_ASSIGN_CONTROL_ID vrgInitControls[] = { - { WIXSTDBA_CONTROL_CLOSE_BUTTON, L"CloseButton" }, - { WIXSTDBA_CONTROL_MINIMIZE_BUTTON, L"MinimizeButton" }, + { WIXSTDBA_CONTROL_CLOSE_BUTTON, L"CloseButton" }, + { WIXSTDBA_CONTROL_MINIMIZE_BUTTON, L"MinimizeButton" }, - { WIXSTDBA_CONTROL_HELP_CANCEL_BUTTON, L"HelpCancelButton" }, + { WIXSTDBA_CONTROL_HELP_CANCEL_BUTTON, L"HelpCancelButton" }, - { WIXSTDBA_CONTROL_INSTALL_BUTTON, L"InstallButton" }, - { WIXSTDBA_CONTROL_OPTIONS_BUTTON, L"OptionsButton" }, - { WIXSTDBA_CONTROL_EULA_RICHEDIT, L"EulaRichedit" }, - { WIXSTDBA_CONTROL_EULA_LINK, L"EulaHyperlink" }, - { WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX, L"EulaAcceptCheckbox" }, - { WIXSTDBA_CONTROL_WELCOME_CANCEL_BUTTON, L"WelcomeCancelButton" }, - { WIXSTDBA_CONTROL_VERSION_LABEL, L"InstallVersion" }, - { WIXSTDBA_CONTROL_UPGRADE_LINK, L"UpgradeHyperlink" }, + { WIXSTDBA_CONTROL_INSTALL_BUTTON, L"InstallButton" }, + { WIXSTDBA_CONTROL_OPTIONS_BUTTON, L"OptionsButton" }, + { WIXSTDBA_CONTROL_EULA_RICHEDIT, L"EulaRichedit" }, + { WIXSTDBA_CONTROL_EULA_LINK, L"EulaHyperlink" }, + { WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX, L"EulaAcceptCheckbox" }, + { WIXSTDBA_CONTROL_WELCOME_CANCEL_BUTTON, L"WelcomeCancelButton" }, + { WIXSTDBA_CONTROL_VERSION_LABEL, L"InstallVersion" }, + { WIXSTDBA_CONTROL_UPGRADE_LINK, L"UpgradeHyperlink" }, - { WIXSTDBA_CONTROL_FOLDER_EDITBOX, L"FolderEditbox" }, - { WIXSTDBA_CONTROL_BROWSE_BUTTON, L"BrowseButton" }, - { WIXSTDBA_CONTROL_FOLDER_EDITBOX2, L"FolderEditbox2" }, - { WIXSTDBA_CONTROL_BROWSE_BUTTON2, L"BrowseButton2" }, - { WIXSTDBA_CONTROL_OK_BUTTON, L"OptionsOkButton" }, - { WIXSTDBA_CONTROL_CANCEL_BUTTON, L"OptionsCancelButton" }, + { WIXSTDBA_CONTROL_FOLDER_EDITBOX, L"FolderEditbox" }, + { WIXSTDBA_CONTROL_BROWSE_BUTTON, L"BrowseButton" }, + { WIXSTDBA_CONTROL_FOLDER_EDITBOX2, L"FolderEditbox2" }, + { WIXSTDBA_CONTROL_BROWSE_BUTTON2, L"BrowseButton2" }, + { WIXSTDBA_CONTROL_OK_BUTTON, L"OptionsOkButton" }, + { WIXSTDBA_CONTROL_CANCEL_BUTTON, L"OptionsCancelButton" }, - { WIXSTDBA_CONTROL_REPAIR_BUTTON, L"RepairButton" }, - { WIXSTDBA_CONTROL_UNINSTALL_BUTTON, L"UninstallButton" }, - { WIXSTDBA_CONTROL_MODIFY_CANCEL_BUTTON, L"ModifyCancelButton" }, + { WIXSTDBA_CONTROL_FILESINUSE_TEXT, L"FilesInUseText" }, + { WIXSTDBA_CONTROL_FILESINUSE_CLOSE_RADIOBUTTON, L"FilesInUseCloseRadioButton" }, + { WIXSTDBA_CONTROL_FILESINUSE_DONTCLOSE_RADIOBUTTON, L"FilesInUseDontCloseRadioButton" }, + { WIXSTDBA_CONTROL_FILESINUSE_OK_BUTTON, L"FilesInUseOkButton" }, + { WIXSTDBA_CONTROL_FILESINUSE_CANCEL_BUTTON, L"FilesInUseCancelButton" }, - { WIXSTDBA_CONTROL_CACHE_PROGRESS_PACKAGE_TEXT, L"CacheProgressPackageText" }, - { WIXSTDBA_CONTROL_CACHE_PROGRESS_BAR, L"CacheProgressbar" }, - { WIXSTDBA_CONTROL_CACHE_PROGRESS_TEXT, L"CacheProgressText" }, - { WIXSTDBA_CONTROL_EXECUTE_PROGRESS_PACKAGE_TEXT, L"ExecuteProgressPackageText" }, - { WIXSTDBA_CONTROL_EXECUTE_PROGRESS_BAR, L"ExecuteProgressbar" }, - { WIXSTDBA_CONTROL_EXECUTE_PROGRESS_TEXT, L"ExecuteProgressText" }, - { WIXSTDBA_CONTROL_EXECUTE_PROGRESS_ACTIONDATA_TEXT, L"ExecuteProgressActionDataText" }, - { WIXSTDBA_CONTROL_OVERALL_PROGRESS_PACKAGE_TEXT, L"OverallProgressPackageText" }, - { WIXSTDBA_CONTROL_OVERALL_PROGRESS_BAR, L"OverallProgressbar" }, - { WIXSTDBA_CONTROL_OVERALL_CALCULATED_PROGRESS_BAR, L"OverallCalculatedProgressbar" }, - { WIXSTDBA_CONTROL_OVERALL_PROGRESS_TEXT, L"OverallProgressText" }, - { WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON, L"ProgressCancelButton" }, + { WIXSTDBA_CONTROL_REPAIR_BUTTON, L"RepairButton" }, + { WIXSTDBA_CONTROL_UNINSTALL_BUTTON, L"UninstallButton" }, + { WIXSTDBA_CONTROL_MODIFY_CANCEL_BUTTON, L"ModifyCancelButton" }, - { WIXSTDBA_CONTROL_LAUNCH_BUTTON, L"LaunchButton" }, - { WIXSTDBA_CONTROL_SUCCESS_RESTART_TEXT, L"SuccessRestartText" }, - { WIXSTDBA_CONTROL_SUCCESS_RESTART_BUTTON, L"SuccessRestartButton" }, - { WIXSTDBA_CONTROL_SUCCESS_CANCEL_BUTTON, L"SuccessCancelButton" }, + { WIXSTDBA_CONTROL_CACHE_PROGRESS_PACKAGE_TEXT, L"CacheProgressPackageText" }, + { WIXSTDBA_CONTROL_CACHE_PROGRESS_BAR, L"CacheProgressbar" }, + { WIXSTDBA_CONTROL_CACHE_PROGRESS_TEXT, L"CacheProgressText" }, + { WIXSTDBA_CONTROL_EXECUTE_PROGRESS_PACKAGE_TEXT, L"ExecuteProgressPackageText" }, + { WIXSTDBA_CONTROL_EXECUTE_PROGRESS_BAR, L"ExecuteProgressbar" }, + { WIXSTDBA_CONTROL_EXECUTE_PROGRESS_TEXT, L"ExecuteProgressText" }, + { WIXSTDBA_CONTROL_EXECUTE_PROGRESS_ACTIONDATA_TEXT, L"ExecuteProgressActionDataText"}, + { WIXSTDBA_CONTROL_OVERALL_PROGRESS_PACKAGE_TEXT, L"OverallProgressPackageText" }, + { WIXSTDBA_CONTROL_OVERALL_PROGRESS_BAR, L"OverallProgressbar" }, + { WIXSTDBA_CONTROL_OVERALL_CALCULATED_PROGRESS_BAR, L"OverallCalculatedProgressbar" }, + { WIXSTDBA_CONTROL_OVERALL_PROGRESS_TEXT, L"OverallProgressText" }, + { WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON, L"ProgressCancelButton" }, - { WIXSTDBA_CONTROL_FAILURE_LOGFILE_LINK, L"FailureLogFileLink" }, - { WIXSTDBA_CONTROL_FAILURE_MESSAGE_TEXT, L"FailureMessageText" }, - { WIXSTDBA_CONTROL_FAILURE_RESTART_TEXT, L"FailureRestartText" }, - { WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON, L"FailureRestartButton" }, - { WIXSTDBA_CONTROL_FAILURE_CANCEL_BUTTON, L"FailureCloseButton" }, + { WIXSTDBA_CONTROL_LAUNCH_BUTTON, L"LaunchButton" }, + { WIXSTDBA_CONTROL_SUCCESS_RESTART_TEXT, L"SuccessRestartText" }, + { WIXSTDBA_CONTROL_SUCCESS_RESTART_BUTTON, L"SuccessRestartButton" }, + { WIXSTDBA_CONTROL_SUCCESS_CANCEL_BUTTON, L"SuccessCancelButton" }, + + { WIXSTDBA_CONTROL_FAILURE_LOGFILE_LINK, L"FailureLogFileLink" }, + { WIXSTDBA_CONTROL_FAILURE_MESSAGE_TEXT, L"FailureMessageText" }, + { WIXSTDBA_CONTROL_FAILURE_RESTART_TEXT, L"FailureRestartText" }, + { WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON, L"FailureRestartButton" }, + { WIXSTDBA_CONTROL_FAILURE_CANCEL_BUTTON, L"FailureCloseButton" }, + + { WIXSTDBA_CONTROL_SUCCESS_HEADER, L"SuccessHeader" }, + { WIXSTDBA_CONTROL_SUCCESS_INSTALL_HEADER, L"SuccessInstallHeader" }, + { WIXSTDBA_CONTROL_SUCCESS_UNINSTALL_HEADER, L"SuccessUninstallHeader" }, + { WIXSTDBA_CONTROL_SUCCESS_REPAIR_HEADER, L"SuccessRepairHeader" }, + + { WIXSTDBA_CONTROL_FAILURE_HEADER, L"FailureHeader" }, + { WIXSTDBA_CONTROL_FAILURE_INSTALL_HEADER, L"FailureInstallHeader" }, + { WIXSTDBA_CONTROL_FAILURE_UNINSTALL_HEADER, L"FailureUninstallHeader" }, + { WIXSTDBA_CONTROL_FAILURE_REPAIR_HEADER, L"FailureRepairHeader" }, }; +typedef struct _WIXSTDBA_PREREQ_PACKAGE +{ + LPWSTR sczPackageId; + BOOL fAlwaysInstall; + BOOL fWasAlreadyInstalled; + BOOL fPlannedToBeInstalled; + BOOL fSuccessfullyInstalled; +} WIXSTDBA_PREREQ_PACKAGE; + class CWixStandardBootstrapperApplication : public CBalBaseBootstrapperApplication { public: // IBootstrapperApplication - virtual STDMETHODIMP OnStartup() - { - HRESULT hr = S_OK; - DWORD dwUIThreadId = 0; + virtual STDMETHODIMP OnStartup() + { + HRESULT hr = S_OK; + DWORD dwUIThreadId = 0; - // create UI thread - m_hUiThread = ::CreateThread(NULL, 0, UiThreadProc, this, 0, &dwUIThreadId); - if (!m_hUiThread) - { - ExitWithLastError(hr, "Failed to create UI thread."); - } + // create UI thread + m_hUiThread = ::CreateThread(NULL, 0, UiThreadProc, this, 0, &dwUIThreadId); + if (!m_hUiThread) + { + ExitWithLastError(hr, "Failed to create UI thread."); + } - LExit: - return hr; - } + LExit: + return hr; + } - virtual STDMETHODIMP_(int) OnShutdown() - { - int nResult = IDNOACTION; + virtual STDMETHODIMP_(int) OnShutdown() + { + int nResult = IDNOACTION; - // wait for UI thread to terminate - if (m_hUiThread) - { - ::WaitForSingleObject(m_hUiThread, INFINITE); - ReleaseHandle(m_hUiThread); - } + // wait for UI thread to terminate + if (m_hUiThread) + { + ::WaitForSingleObject(m_hUiThread, INFINITE); + ReleaseHandle(m_hUiThread); + } - // If a restart was required. - if (m_fRestartRequired) - { - if (m_fAllowRestart) - { - nResult = IDRESTART; - } + // If a restart was required. + if (m_fRestartRequired) + { + if (m_fAllowRestart) + { + nResult = IDRESTART; + } - if (m_sczPrereqPackage) - { - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, m_fAllowRestart ? "The prerequisites scheduled a restart. The bootstrapper application will be reloaded after the computer is restarted." - : "A restart is required by the prerequisites but the user delayed it. The bootstrapper application will be reloaded after the computer is restarted."); - } - } - else if (m_fPrereqInstalled) - { - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "The prerequisites were successfully installed. The bootstrapper application will be reloaded."); - nResult = IDRELOAD_BOOTSTRAPPER; - } - else if (m_fPrereqAlreadyInstalled) - { - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "The prerequisites were already installed. The bootstrapper application will not be reloaded to prevent an infinite loop."); - } - else if (m_fPrereq) - { - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "The prerequisites were not successfully installed, error: 0x%x. The bootstrapper application will be not reloaded.", m_hrFinal); - } + if (m_fPrereq) + { + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, m_fAllowRestart ? "The prerequisites scheduled a restart. The bootstrapper application will be reloaded after the computer is restarted." + : "A restart is required by the prerequisites but the user delayed it. The bootstrapper application will be reloaded after the computer is restarted."); + } + } + else if (m_fPrereqInstalled) + { + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "The prerequisites were successfully installed. The bootstrapper application will be reloaded."); + nResult = IDRELOAD_BOOTSTRAPPER; + } + else if (m_fPrereqAlreadyInstalled) + { + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "The prerequisites were already installed. The bootstrapper application will not be reloaded to prevent an infinite loop."); + } + else if (m_fPrereq) + { + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "The prerequisites were not successfully installed, error: 0x%x. The bootstrapper application will be not reloaded.", m_hrFinal); + } - return nResult; - } + return nResult; + } - virtual STDMETHODIMP_(int) OnDetectRelatedBundle( - __in LPCWSTR wzBundleId, - __in BOOTSTRAPPER_RELATION_TYPE relationType, - __in LPCWSTR /*wzBundleTag*/, - __in BOOL fPerMachine, - __in DWORD64 /*dw64Version*/, - __in BOOTSTRAPPER_RELATED_OPERATION operation - ) - { - BalInfoAddRelatedBundleAsPackage(&m_Bundle.packages, wzBundleId, relationType, fPerMachine); + virtual STDMETHODIMP_(int) OnDetectRelatedBundle( + __in LPCWSTR wzBundleId, + __in BOOTSTRAPPER_RELATION_TYPE relationType, + __in LPCWSTR /*wzBundleTag*/, + __in BOOL fPerMachine, + __in DWORD64 /*dw64Version*/, + __in BOOTSTRAPPER_RELATED_OPERATION operation + ) + { + BalInfoAddRelatedBundleAsPackage(&m_Bundle.packages, wzBundleId, relationType, fPerMachine); - // If we're not doing a pre-req install, remember when our bundle would cause a downgrade. - if (!m_sczPrereqPackage && BOOTSTRAPPER_RELATED_OPERATION_DOWNGRADE == operation) - { - m_fDowngrading = TRUE; - } + // If we're not doing a prerequisite install, remember when our bundle would cause a downgrade. + if (!m_fPrereq && BOOTSTRAPPER_RELATED_OPERATION_DOWNGRADE == operation) + { + m_fDowngrading = TRUE; + } - return CheckCanceled() ? IDCANCEL : IDOK; - } + return CheckCanceled() ? IDCANCEL : IDOK; + } - virtual STDMETHODIMP_(void) OnDetectPackageComplete( - __in LPCWSTR wzPackageId, - __in HRESULT /*hrStatus*/, - __in BOOTSTRAPPER_PACKAGE_STATE state - ) - { - // If the prereq package is already installed, remember that. - if (m_sczPrereqPackage && BOOTSTRAPPER_PACKAGE_STATE_PRESENT == state && - CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, wzPackageId, -1, m_sczPrereqPackage, -1)) - { - m_fPrereqAlreadyInstalled = TRUE; - } - } + virtual STDMETHODIMP_(void) OnDetectPackageComplete( + __in LPCWSTR wzPackageId, + __in HRESULT /*hrStatus*/, + __in BOOTSTRAPPER_PACKAGE_STATE state + ) + { + WIXSTDBA_PREREQ_PACKAGE* pPrereqPackage = NULL; + BAL_INFO_PACKAGE* pPackage = NULL; + HRESULT hr = GetPrereqPackage(wzPackageId, &pPrereqPackage, &pPackage); + if (SUCCEEDED(hr) && BOOTSTRAPPER_PACKAGE_STATE_PRESENT == state) + { + // If the prerequisite package is already installed, remember that. + pPrereqPackage->fWasAlreadyInstalled = TRUE; + } + } - // OnDetectUpdateBegin - called when the engine begins detection for bundle update. - virtual STDMETHODIMP_(int) OnDetectUpdateBegin( - __in_z LPCWSTR wzUpdateLocation, - __in int nRecommendation - ) - { - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Update location: %ls.", wzUpdateLocation); + virtual STDMETHODIMP_(void) OnDetectComplete( + __in HRESULT hrStatus + ) + { + if (SUCCEEDED(hrStatus) && m_pBAFunction) + { + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Running detect complete BA function"); + m_pBAFunction->OnDetectComplete(); + } - m_wzUpdateLocation = wzUpdateLocation; - // If there is an upgrade link, check for update on a background thread - if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_UPGRADE_LINK)) - { - ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_UPGRADE_LINK, FALSE); - ::CreateThread(NULL, 0, ThreadProc, this, 0, NULL); - } + if (SUCCEEDED(hrStatus)) + { + hrStatus = EvaluateConditions(); + + if (m_fPrereq) + { + m_fPrereqAlreadyInstalled = TRUE; - return nRecommendation; - } + // At this point we have to assume that all prerequisite packages need to be installed, so set to false if any of them aren't installed. + for (DWORD i = 0; i < m_cPrereqPackages; ++i) + { + if (m_rgPrereqPackages[i].sczPackageId && !m_rgPrereqPackages[i].fWasAlreadyInstalled) + { + m_fPrereqAlreadyInstalled = FALSE; + break; + } + } + } + } + + SetState(WIXSTDBA_STATE_DETECTED, hrStatus); + + if (BOOTSTRAPPER_ACTION_CACHE == m_plannedAction) + { + if (m_fSupportCacheOnly) + { + // Doesn't make sense to prompt the user if cache only is requested. + if (BOOTSTRAPPER_DISPLAY_PASSIVE < m_command.display) + { + m_command.display = BOOTSTRAPPER_DISPLAY_PASSIVE; + } + + m_command.action = BOOTSTRAPPER_ACTION_CACHE; + } + else + { + BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Ignoring attempt to only cache a bundle that does not explicitly support it."); + } + } + + // If we're not interacting with the user or we're doing a layout or we're just after a force restart + // then automatically start planning. + if (BOOTSTRAPPER_DISPLAY_FULL > m_command.display || BOOTSTRAPPER_ACTION_LAYOUT == m_command.action || BOOTSTRAPPER_RESUME_TYPE_REBOOT == m_command.resumeType) + { + if (SUCCEEDED(hrStatus)) + { + ::PostMessageW(m_hWnd, WM_WIXSTDBA_PLAN_PACKAGES, 0, m_command.action); + } + } + } - virtual STDMETHODIMP_(int) OnDetectBegin( - __in BOOL /*fInstalled*/, - __in DWORD /*cPackages*/ - ) - { - return IDNOACTION; - } + virtual STDMETHODIMP_(int) OnPlanRelatedBundle( + __in_z LPCWSTR /*wzBundleId*/, + __inout_z BOOTSTRAPPER_REQUEST_STATE* pRequestedState + ) + { + // If we're only installing prerequisites, do not touch related bundles. + if (m_fPrereq) + { + *pRequestedState = BOOTSTRAPPER_REQUEST_STATE_NONE; + } + + return CheckCanceled() ? IDCANCEL : IDOK; + } - virtual STDMETHODIMP_(void) OnDetectComplete( - __in HRESULT hrStatus - ) - { - if (SUCCEEDED(hrStatus) && m_pBAFunction) - { - m_pBAFunction->OnDetectComplete(); - } + virtual STDMETHODIMP_(int) OnPlanPackageBegin( + __in_z LPCWSTR wzPackageId, + __inout BOOTSTRAPPER_REQUEST_STATE *pRequestState + ) + { + HRESULT hr = S_OK; + WIXSTDBA_PREREQ_PACKAGE* pPrereqPackage = NULL; + BAL_INFO_PACKAGE* pPackage = NULL; - if (SUCCEEDED(hrStatus)) - { - hrStatus = EvaluateConditions(); - } + // If we're planning to install a prerequisite, install it. The prerequisite needs to be installed + // in all cases (even uninstall!) so the BA can load next. + if (m_fPrereq) + { + // Only install prerequisite packages, and check the InstallCondition on prerequisite support packages. + BOOL fInstall = FALSE; + hr = GetPrereqPackage(wzPackageId, &pPrereqPackage, &pPackage); + if (SUCCEEDED(hr) && pPackage) + { + if (pPrereqPackage->fAlwaysInstall) + { + fInstall = TRUE; + } + else if(pPackage->sczInstallCondition && *pPackage->sczInstallCondition) + { + hr = m_pEngine->EvaluateCondition(pPackage->sczInstallCondition, &fInstall); + if (FAILED(hr)) + { + fInstall = FALSE; + } + } + else + { + // If the InstallCondition is missing, then it should always be installed. + fInstall = TRUE; + } - SetState(WIXSTDBA_STATE_DETECTED, hrStatus); + pPrereqPackage->fPlannedToBeInstalled = fInstall; + } - // If we're not interacting with the user or we're doing a layout or we're just after a force restart - // then automatically start planning. - if (BOOTSTRAPPER_DISPLAY_FULL > m_command.display || BOOTSTRAPPER_ACTION_LAYOUT == m_command.action || BOOTSTRAPPER_RESUME_TYPE_REBOOT == m_command.resumeType) - { - if (SUCCEEDED(hrStatus)) - { - ::PostMessageW(m_hWnd, WM_WIXSTDBA_PLAN_PACKAGES, 0, m_command.action); - } - } - } + if (fInstall) + { + *pRequestState = BOOTSTRAPPER_REQUEST_STATE_PRESENT; + } + else + { + *pRequestState = BOOTSTRAPPER_REQUEST_STATE_NONE; + } + } + else if (m_sczAfterForcedRestartPackage) // after force restart, skip packages until after the package that caused the restart. + { + // After restart we need to finish the dependency registration for our package so allow the package + // to go present. + if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, wzPackageId, -1, m_sczAfterForcedRestartPackage, -1)) + { + // Do not allow a repair because that could put us in a perpetual restart loop. + if (BOOTSTRAPPER_REQUEST_STATE_REPAIR == *pRequestState) + { + *pRequestState = BOOTSTRAPPER_REQUEST_STATE_PRESENT; + } + + ReleaseNullStr(m_sczAfterForcedRestartPackage); // no more skipping now. + } + else // not the matching package, so skip it. + { + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Skipping package: %ls, after restart because it was applied before the restart.", wzPackageId); + + *pRequestState = BOOTSTRAPPER_REQUEST_STATE_NONE; + } + } + + return CheckCanceled() ? IDCANCEL : IDOK; + } - virtual STDMETHODIMP_(int) OnPlanRelatedBundle( - __in_z LPCWSTR /*wzBundleId*/, - __inout_z BOOTSTRAPPER_REQUEST_STATE* pRequestedState - ) - { - // If we're only installing prereq, do not touch related bundles. - if (m_sczPrereqPackage) - { - *pRequestedState = BOOTSTRAPPER_REQUEST_STATE_NONE; - } + virtual STDMETHODIMP_(void) OnPlanComplete( + __in HRESULT hrStatus + ) + { + if (SUCCEEDED(hrStatus) && m_pBAFunction) + { + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Running plan complete BA function"); + m_pBAFunction->OnPlanComplete(); + } - return CheckCanceled() ? IDCANCEL : IDOK; - } + if (m_fPrereq) + { + m_fPrereqAlreadyInstalled = TRUE; + + // Now that we've planned the packages, we can focus on the prerequisite packages that are supposed to be installed. + for (DWORD i = 0; i < m_cPrereqPackages; ++i) + { + if (m_rgPrereqPackages[i].sczPackageId && !m_rgPrereqPackages[i].fWasAlreadyInstalled && m_rgPrereqPackages[i].fPlannedToBeInstalled) + { + m_fPrereqAlreadyInstalled = FALSE; + break; + } + } + } + + SetState(WIXSTDBA_STATE_PLANNED, hrStatus); + + if (SUCCEEDED(hrStatus)) + { + ::PostMessageW(m_hWnd, WM_WIXSTDBA_APPLY_PACKAGES, 0, 0); + } + + m_fStartedExecution = FALSE; + m_dwCalculatedCacheProgress = 0; + m_dwCalculatedExecuteProgress = 0; + } - virtual STDMETHODIMP_(int) OnPlanPackageBegin( - __in_z LPCWSTR wzPackageId, - __inout BOOTSTRAPPER_REQUEST_STATE *pRequestState - ) - { - // If we're planning to install a pre-req, install it. The pre-req needs to be installed - // in all cases (even uninstall!) so the BA can load next. - if (m_sczPrereqPackage) - { - if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, wzPackageId, -1, m_sczPrereqPackage, -1)) - { - *pRequestState = BOOTSTRAPPER_REQUEST_STATE_PRESENT; - } - else // skip everything else. - { - *pRequestState = BOOTSTRAPPER_REQUEST_STATE_NONE; - } - } - else if (m_sczAfterForcedRestartPackage) // after force restart skip packages until after the package that caused the restart. - { - // After restart we need to finish the dependency registration for our package so allow the package - // to go present. - if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, wzPackageId, -1, m_sczAfterForcedRestartPackage, -1)) - { - // Do not allow a repair because that could put us in a perpetual restart loop. - if (BOOTSTRAPPER_REQUEST_STATE_REPAIR == *pRequestState) - { - *pRequestState = BOOTSTRAPPER_REQUEST_STATE_PRESENT; - } + virtual STDMETHODIMP_(int) OnCachePackageBegin( + __in_z LPCWSTR wzPackageId, + __in DWORD cCachePayloads, + __in DWORD64 dw64PackageCacheSize + ) + { + if (wzPackageId && *wzPackageId) + { + BAL_INFO_PACKAGE* pPackage = NULL; + HRESULT hr = BalInfoFindPackageById(&m_Bundle.packages, wzPackageId, &pPackage); + LPCWSTR wz = (SUCCEEDED(hr) && pPackage->sczDisplayName) ? pPackage->sczDisplayName : wzPackageId; - ReleaseNullStr(m_sczAfterForcedRestartPackage); // no more skipping now. - } - else // not the matching package, so skip it. - { - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Skipping package: %ls, after restart because it was applied before the restart.", wzPackageId); + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_CACHE_PROGRESS_PACKAGE_TEXT, wz); - *pRequestState = BOOTSTRAPPER_REQUEST_STATE_NONE; - } - } + // If something started executing, leave it in the overall progress text. + if (!m_fStartedExecution) + { + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_PROGRESS_PACKAGE_TEXT, wz); + } + } - return CheckCanceled() ? IDCANCEL : IDOK; - } + return __super::OnCachePackageBegin(wzPackageId, cCachePayloads, dw64PackageCacheSize); + } - virtual STDMETHODIMP_(void) OnPlanComplete( - __in HRESULT hrStatus - ) - { - if (SUCCEEDED(hrStatus) && m_pBAFunction) - { - m_pBAFunction->OnPlanComplete(); - } - - SetState(WIXSTDBA_STATE_PLANNED, hrStatus); - - if (SUCCEEDED(hrStatus)) - { - ::PostMessageW(m_hWnd, WM_WIXSTDBA_APPLY_PACKAGES, 0, 0); - } - - m_dwCalculatedCacheProgress = 0; - m_dwCalculatedExecuteProgress = 0; - } - - - virtual STDMETHODIMP_(int) OnCachePackageBegin( - __in_z LPCWSTR wzPackageId, - __in DWORD cCachePayloads, - __in DWORD64 dw64PackageCacheSize - ) - { - if (wzPackageId && *wzPackageId) - { - BAL_INFO_PACKAGE* pPackage = NULL; - HRESULT hr = BalInfoFindPackageById(&m_Bundle.packages, wzPackageId, &pPackage); - LPCWSTR wz = (SUCCEEDED(hr) && pPackage->sczDisplayName) ? pPackage->sczDisplayName : wzPackageId; - - ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_CACHE_PROGRESS_PACKAGE_TEXT, wz); - - // If something started executing, leave it in the overall progress text. - if (!m_fStartedExecution) - { - ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_PROGRESS_PACKAGE_TEXT, wz); - } - } - - return __super::OnCachePackageBegin(wzPackageId, cCachePayloads, dw64PackageCacheSize); - } - - - virtual STDMETHODIMP_(int) OnCacheAcquireProgress( - __in_z LPCWSTR wzPackageOrContainerId, - __in_z_opt LPCWSTR wzPayloadId, - __in DWORD64 dw64Progress, - __in DWORD64 dw64Total, - __in DWORD dwOverallPercentage - ) - { - WCHAR wzProgress[5] = {}; + virtual STDMETHODIMP_(int) OnCacheAcquireProgress( + __in_z LPCWSTR wzPackageOrContainerId, + __in_z_opt LPCWSTR wzPayloadId, + __in DWORD64 dw64Progress, + __in DWORD64 dw64Total, + __in DWORD dwOverallPercentage + ) + { + WCHAR wzProgress[5] = { }; #ifdef DEBUG - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "WIXSTDBA: OnCacheAcquireProgress() - container/package: %ls, payload: %ls, progress: %I64u, total: %I64u, overall progress: %u%%", wzPackageOrContainerId, wzPayloadId, dw64Progress, dw64Total, dwOverallPercentage); + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "WIXSTDBA: OnCacheAcquireProgress() - container/package: %ls, payload: %ls, progress: %I64u, total: %I64u, overall progress: %u%%", wzPackageOrContainerId, wzPayloadId, dw64Progress, dw64Total, dwOverallPercentage); #endif - ::StringCchPrintfW(wzProgress, countof(wzProgress), L"%u%%", dwOverallPercentage); - ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_CACHE_PROGRESS_TEXT, wzProgress); + ::StringCchPrintfW(wzProgress, countof(wzProgress), L"%u%%", dwOverallPercentage); + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_CACHE_PROGRESS_TEXT, wzProgress); - ThemeSetProgressControl(m_pTheme, WIXSTDBA_CONTROL_CACHE_PROGRESS_BAR, dwOverallPercentage); + ThemeSetProgressControl(m_pTheme, WIXSTDBA_CONTROL_CACHE_PROGRESS_BAR, dwOverallPercentage); - // Restrict progress to 100% to hide burn engine progress bug. - m_dwCalculatedCacheProgress = min(dwOverallPercentage, 100) * WIXSTDBA_ACQUIRE_PERCENTAGE / 100; + m_dwCalculatedCacheProgress = dwOverallPercentage * WIXSTDBA_ACQUIRE_PERCENTAGE / 100; + ThemeSetProgressControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_CALCULATED_PROGRESS_BAR, m_dwCalculatedCacheProgress + m_dwCalculatedExecuteProgress); + + SetTaskbarButtonProgress(m_dwCalculatedCacheProgress + m_dwCalculatedExecuteProgress); + + return __super::OnCacheAcquireProgress(wzPackageOrContainerId, wzPayloadId, dw64Progress, dw64Total, dwOverallPercentage); + } + + + virtual STDMETHODIMP_(int) OnCacheAcquireComplete( + __in_z LPCWSTR wzPackageOrContainerId, + __in_z_opt LPCWSTR wzPayloadId, + __in HRESULT hrStatus, + __in int nRecommendation + ) + { + SetProgressState(hrStatus); + return __super::OnCacheAcquireComplete(wzPackageOrContainerId, wzPayloadId, hrStatus, nRecommendation); + } + + + virtual STDMETHODIMP_(int) OnCacheVerifyComplete( + __in_z LPCWSTR wzPackageId, + __in_z LPCWSTR wzPayloadId, + __in HRESULT hrStatus, + __in int nRecommendation + ) + { + SetProgressState(hrStatus); + return __super::OnCacheVerifyComplete(wzPackageId, wzPayloadId, hrStatus, nRecommendation); + } + + + virtual STDMETHODIMP_(void) OnCacheComplete( + __in HRESULT /*hrStatus*/ + ) + { + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_CACHE_PROGRESS_PACKAGE_TEXT, L""); + SetState(WIXSTDBA_STATE_CACHED, S_OK); // we always return success here and let OnApplyComplete() deal with the error. + } + + + virtual STDMETHODIMP_(int) OnError( + __in BOOTSTRAPPER_ERROR_TYPE errorType, + __in LPCWSTR wzPackageId, + __in DWORD dwCode, + __in_z LPCWSTR wzError, + __in DWORD dwUIHint, + __in DWORD /*cData*/, + __in_ecount_z_opt(cData) LPCWSTR* /*rgwzData*/, + __in int nRecommendation + ) + { + int nResult = nRecommendation; + LPWSTR sczError = NULL; + + if (BOOTSTRAPPER_DISPLAY_EMBEDDED == m_command.display) + { + HRESULT hr = m_pEngine->SendEmbeddedError(dwCode, wzError, dwUIHint, &nResult); + if (FAILED(hr)) + { + nResult = IDERROR; + } + } + else if (BOOTSTRAPPER_DISPLAY_FULL == m_command.display) + { + // If this is an authentication failure, let the engine try to handle it for us. + if (BOOTSTRAPPER_ERROR_TYPE_HTTP_AUTH_SERVER == errorType || BOOTSTRAPPER_ERROR_TYPE_HTTP_AUTH_PROXY == errorType) + { + nResult = IDTRYAGAIN; + } + else // show a generic error message box. + { + BalRetryErrorOccurred(wzPackageId, dwCode); + + if (!m_fShowingInternalUiThisPackage) + { + // If no error message was provided, use the error code to try and get an error message. + if (!wzError || !*wzError || BOOTSTRAPPER_ERROR_TYPE_WINDOWS_INSTALLER != errorType) + { + HRESULT hr = StrAllocFromError(&sczError, dwCode, NULL); + if (FAILED(hr) || !sczError || !*sczError) + { + StrAllocFormatted(&sczError, L"0x%x", dwCode); + } + } + + nResult = ::MessageBoxW(m_hWnd, sczError ? sczError : wzError, m_pTheme->sczCaption, dwUIHint); + } + } + + SetProgressState(HRESULT_FROM_WIN32(dwCode)); + } + else // just take note of the error code and let things continue. + { + BalRetryErrorOccurred(wzPackageId, dwCode); + } + + ReleaseStr(sczError); + return nResult; + } + + + virtual STDMETHODIMP_(int) OnExecuteMsiMessage( + __in_z LPCWSTR wzPackageId, + __in INSTALLMESSAGE mt, + __in UINT uiFlags, + __in_z LPCWSTR wzMessage, + __in DWORD cData, + __in_ecount_z_opt(cData) LPCWSTR* rgwzData, + __in int nRecommendation + ) + { #ifdef DEBUG - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "WIXSTDBA: OnCacheAcquireProgress() - calculated progress: %u%%, displayed progress: %u%%", m_dwCalculatedCacheProgress, m_dwCalculatedCacheProgress + m_dwCalculatedExecuteProgress); + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "WIXSTDBA: OnExecuteMsiMessage() - package: %ls, message: %ls", wzPackageId, wzMessage); #endif - ThemeSetProgressControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_CALCULATED_PROGRESS_BAR, m_dwCalculatedCacheProgress + m_dwCalculatedExecuteProgress); + if (BOOTSTRAPPER_DISPLAY_FULL == m_command.display && (INSTALLMESSAGE_WARNING == mt || INSTALLMESSAGE_USER == mt)) + { + int nResult = ::MessageBoxW(m_hWnd, wzMessage, m_pTheme->sczCaption, uiFlags); + return nResult; + } - SetTaskbarButtonProgress(m_dwCalculatedCacheProgress + m_dwCalculatedExecuteProgress); + if (INSTALLMESSAGE_ACTIONSTART == mt) + { + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_ACTIONDATA_TEXT, wzMessage); + } - return __super::OnCacheAcquireProgress(wzPackageOrContainerId, wzPayloadId, dw64Progress, dw64Total, dwOverallPercentage); - } + return __super::OnExecuteMsiMessage(wzPackageId, mt, uiFlags, wzMessage, cData, rgwzData, nRecommendation); + } - virtual STDMETHODIMP_(int) OnCacheAcquireComplete( - __in_z LPCWSTR wzPackageOrContainerId, - __in_z_opt LPCWSTR wzPayloadId, - __in HRESULT hrStatus, - __in int nRecommendation - ) - { - SetProgressState(hrStatus); - return __super::OnCacheAcquireComplete(wzPackageOrContainerId, wzPayloadId, hrStatus, nRecommendation); - } - - - virtual STDMETHODIMP_(int) OnCacheVerifyComplete( - __in_z LPCWSTR wzPackageId, - __in_z LPCWSTR wzPayloadId, - __in HRESULT hrStatus, - __in int nRecommendation - ) - { - SetProgressState(hrStatus); - return __super::OnCacheVerifyComplete(wzPackageId, wzPayloadId, hrStatus, nRecommendation); - } - - - virtual STDMETHODIMP_(void) OnCacheComplete( - __in HRESULT /*hrStatus*/ - ) - { - ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_CACHE_PROGRESS_PACKAGE_TEXT, L""); - SetState(WIXSTDBA_STATE_CACHED, S_OK); // we always return success here and let OnApplyComplete() deal with the error. - } - - - virtual STDMETHODIMP_(int) OnError( - __in BOOTSTRAPPER_ERROR_TYPE errorType, - __in LPCWSTR wzPackageId, - __in DWORD dwCode, - __in_z LPCWSTR wzError, - __in DWORD dwUIHint, - __in DWORD /*cData*/, - __in_ecount_z_opt(cData) LPCWSTR* /*rgwzData*/, - __in int nRecommendation - ) - { - int nResult = nRecommendation; - LPWSTR sczError = NULL; - - if (BOOTSTRAPPER_DISPLAY_EMBEDDED == m_command.display) - { - HRESULT hr = m_pEngine->SendEmbeddedError(dwCode, wzError, dwUIHint, &nResult); - if (FAILED(hr)) - { - nResult = IDERROR; - } - } - else if (BOOTSTRAPPER_DISPLAY_FULL == m_command.display) - { - // If this is an authentication failure, let the engine try to handle it for us. - if (BOOTSTRAPPER_ERROR_TYPE_HTTP_AUTH_SERVER == errorType || BOOTSTRAPPER_ERROR_TYPE_HTTP_AUTH_PROXY == errorType) - { - nResult = IDTRYAGAIN; - } - else // show a generic error message box. - { - BalRetryErrorOccurred(wzPackageId, dwCode); - - if (!m_fShowingInternalUiThisPackage) - { - // If no error message was provided, use the error code to try and get an error message. - if (!wzError || !*wzError || BOOTSTRAPPER_ERROR_TYPE_WINDOWS_INSTALLER != errorType) - { - HRESULT hr = StrAllocFromError(&sczError, dwCode, NULL); - if (FAILED(hr) || !sczError || !*sczError) - { - StrAllocFormatted(&sczError, L"0x%x", dwCode); - } - } - - nResult = ::MessageBoxW(m_hWnd, sczError ? sczError : wzError, m_pTheme->sczCaption, dwUIHint); - } - } - - SetProgressState(HRESULT_FROM_WIN32(dwCode)); - } - else // just take note of the error code and let things continue. - { - BalRetryErrorOccurred(wzPackageId, dwCode); - } - - ReleaseStr(sczError); - return nResult; - } - - - virtual STDMETHODIMP_(int) OnExecuteMsiMessage( - __in_z LPCWSTR wzPackageId, - __in INSTALLMESSAGE mt, - __in UINT uiFlags, - __in_z LPCWSTR wzMessage, - __in DWORD cData, - __in_ecount_z_opt(cData) LPCWSTR* rgwzData, - __in int nRecommendation - ) - { -#ifdef DEBUG - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "WIXSTDBA: OnExecuteMsiMessage() - package: %ls, message: %ls", wzPackageId, wzMessage); -#endif - if (BOOTSTRAPPER_DISPLAY_FULL == m_command.display && (INSTALLMESSAGE_WARNING == mt || INSTALLMESSAGE_USER == mt)) - { - int nResult = ::MessageBoxW(m_hWnd, wzMessage, m_pTheme->sczCaption, uiFlags); - return nResult; - } - - if (INSTALLMESSAGE_ACTIONSTART == mt) - { - ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_ACTIONDATA_TEXT, wzMessage); - } - - return __super::OnExecuteMsiMessage(wzPackageId, mt, uiFlags, wzMessage, cData, rgwzData, nRecommendation); - } - - - virtual STDMETHODIMP_(int) OnProgress( - __in DWORD dwProgressPercentage, - __in DWORD dwOverallProgressPercentage - ) - { - WCHAR wzProgress[5] = {}; + virtual STDMETHODIMP_(int) OnProgress( + __in DWORD dwProgressPercentage, + __in DWORD dwOverallProgressPercentage + ) + { + WCHAR wzProgress[5] = { }; #ifdef DEBUG - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "WIXSTDBA: OnProgress() - progress: %u%%, overall progress: %u%%", dwProgressPercentage, dwOverallProgressPercentage); + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "WIXSTDBA: OnProgress() - progress: %u%%, overall progress: %u%%", dwProgressPercentage, dwOverallProgressPercentage); #endif - ::StringCchPrintfW(wzProgress, countof(wzProgress), L"%u%%", dwOverallProgressPercentage); - ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_PROGRESS_TEXT, wzProgress); + ::StringCchPrintfW(wzProgress, countof(wzProgress), L"%u%%", dwOverallProgressPercentage); + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_PROGRESS_TEXT, wzProgress); - ThemeSetProgressControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_PROGRESS_BAR, dwOverallProgressPercentage); - SetTaskbarButtonProgress(dwOverallProgressPercentage); + ThemeSetProgressControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_PROGRESS_BAR, dwOverallProgressPercentage); + SetTaskbarButtonProgress(dwOverallProgressPercentage); - return __super::OnProgress(dwProgressPercentage, dwOverallProgressPercentage); - } + return __super::OnProgress(dwProgressPercentage, dwOverallProgressPercentage); + } - virtual STDMETHODIMP_(int) OnExecutePackageBegin( - __in_z LPCWSTR wzPackageId, - __in BOOL fExecute - ) - { - LPWSTR sczFormattedString = NULL; + virtual STDMETHODIMP_(int) OnExecutePackageBegin( + __in_z LPCWSTR wzPackageId, + __in BOOL fExecute + ) + { + LPWSTR sczFormattedString = NULL; - m_fStartedExecution = TRUE; + m_fStartedExecution = TRUE; - if (wzPackageId && *wzPackageId) - { - BAL_INFO_PACKAGE* pPackage = NULL; - BalInfoFindPackageById(&m_Bundle.packages, wzPackageId, &pPackage); + if (wzPackageId && *wzPackageId) + { + BAL_INFO_PACKAGE* pPackage = NULL; + BalInfoFindPackageById(&m_Bundle.packages, wzPackageId, &pPackage); - LPCWSTR wz = wzPackageId; - if (pPackage) - { - LOC_STRING* pLocString = NULL; + LPCWSTR wz = wzPackageId; + if (pPackage) + { + LOC_STRING* pLocString = NULL; - switch (pPackage->type) - { - case BAL_INFO_PACKAGE_TYPE_BUNDLE_ADDON: - LocGetString(m_pWixLoc, L"#(loc.ExecuteAddonRelatedBundleMessage)", &pLocString); - break; + switch (pPackage->type) + { + case BAL_INFO_PACKAGE_TYPE_BUNDLE_ADDON: + LocGetString(m_pWixLoc, L"#(loc.ExecuteAddonRelatedBundleMessage)", &pLocString); + break; - case BAL_INFO_PACKAGE_TYPE_BUNDLE_PATCH: - LocGetString(m_pWixLoc, L"#(loc.ExecutePatchRelatedBundleMessage)", &pLocString); - break; + case BAL_INFO_PACKAGE_TYPE_BUNDLE_PATCH: + LocGetString(m_pWixLoc, L"#(loc.ExecutePatchRelatedBundleMessage)", &pLocString); + break; - case BAL_INFO_PACKAGE_TYPE_BUNDLE_UPGRADE: - LocGetString(m_pWixLoc, L"#(loc.ExecuteUpgradeRelatedBundleMessage)", &pLocString); - break; - } + case BAL_INFO_PACKAGE_TYPE_BUNDLE_UPGRADE: + LocGetString(m_pWixLoc, L"#(loc.ExecuteUpgradeRelatedBundleMessage)", &pLocString); + break; + } - if (pLocString) - { - BalFormatString(pLocString->wzText, &sczFormattedString); - } + if (pLocString) + { + // If the wix developer is showing a hidden variable in the UI, then obviously they don't care about keeping it safe + // so don't go down the rabbit hole of making sure that this is securely freed. + BalFormatString(pLocString->wzText, &sczFormattedString); + } - wz = sczFormattedString ? sczFormattedString : pPackage->sczDisplayName ? pPackage->sczDisplayName : wzPackageId; - } + wz = sczFormattedString ? sczFormattedString : pPackage->sczDisplayName ? pPackage->sczDisplayName : wzPackageId; + } - m_fShowingInternalUiThisPackage = pPackage && pPackage->fDisplayInternalUI; + m_fShowingInternalUiThisPackage = pPackage && pPackage->fDisplayInternalUI; - ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_PACKAGE_TEXT, wz); - ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_PROGRESS_PACKAGE_TEXT, wz); - } - else - { - m_fShowingInternalUiThisPackage = FALSE; - } + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_PACKAGE_TEXT, wz); + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_PROGRESS_PACKAGE_TEXT, wz); + } + else + { + m_fShowingInternalUiThisPackage = FALSE; + } - ReleaseStr(sczFormattedString); - return __super::OnExecutePackageBegin(wzPackageId, fExecute); - } + ReleaseStr(sczFormattedString); + return __super::OnExecutePackageBegin(wzPackageId, fExecute); + } - virtual int __stdcall OnExecuteProgress( - __in_z LPCWSTR wzPackageId, - __in DWORD dwProgressPercentage, - __in DWORD dwOverallProgressPercentage - ) - { - WCHAR wzProgress[5] = {}; + virtual int __stdcall OnExecuteProgress( + __in_z LPCWSTR wzPackageId, + __in DWORD dwProgressPercentage, + __in DWORD dwOverallProgressPercentage + ) + { + WCHAR wzProgress[5] = { }; #ifdef DEBUG - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "WIXSTDBA: OnExecuteProgress() - package: %ls, progress: %u%%, overall progress: %u%%", wzPackageId, dwProgressPercentage, dwOverallProgressPercentage); + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "WIXSTDBA: OnExecuteProgress() - package: %ls, progress: %u%%, overall progress: %u%%", wzPackageId, dwProgressPercentage, dwOverallProgressPercentage); #endif - ::StringCchPrintfW(wzProgress, countof(wzProgress), L"%u%%", dwOverallProgressPercentage); - ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_TEXT, wzProgress); + ::StringCchPrintfW(wzProgress, countof(wzProgress), L"%u%%", dwOverallProgressPercentage); + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_TEXT, wzProgress); - ThemeSetProgressControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_BAR, dwOverallProgressPercentage); + ThemeSetProgressControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_BAR, dwOverallProgressPercentage); - m_dwCalculatedExecuteProgress = dwOverallProgressPercentage * (100 - WIXSTDBA_ACQUIRE_PERCENTAGE) / 100; -#ifdef DEBUG - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "WIXSTDBA: OnExecuteProgress() - calculated progress: %u%%, displayed progress: %u%%", m_dwCalculatedExecuteProgress, m_dwCalculatedCacheProgress + m_dwCalculatedExecuteProgress); -#endif - ThemeSetProgressControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_CALCULATED_PROGRESS_BAR, m_dwCalculatedCacheProgress + m_dwCalculatedExecuteProgress); + m_dwCalculatedExecuteProgress = dwOverallProgressPercentage * (100 - WIXSTDBA_ACQUIRE_PERCENTAGE) / 100; + ThemeSetProgressControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_CALCULATED_PROGRESS_BAR, m_dwCalculatedCacheProgress + m_dwCalculatedExecuteProgress); - SetTaskbarButtonProgress(m_dwCalculatedCacheProgress + m_dwCalculatedExecuteProgress); + SetTaskbarButtonProgress(m_dwCalculatedCacheProgress + m_dwCalculatedExecuteProgress); - return __super::OnExecuteProgress(wzPackageId, dwProgressPercentage, dwOverallProgressPercentage); - } + return __super::OnExecuteProgress(wzPackageId, dwProgressPercentage, dwOverallProgressPercentage); + } - virtual STDMETHODIMP_(int) OnExecutePackageComplete( - __in_z LPCWSTR wzPackageId, - __in HRESULT hrExitCode, - __in BOOTSTRAPPER_APPLY_RESTART restart, - __in int nRecommendation - ) - { - SetProgressState(hrExitCode); + virtual STDMETHODIMP_(int) OnExecutePackageComplete( + __in_z LPCWSTR wzPackageId, + __in HRESULT hrExitCode, + __in BOOTSTRAPPER_APPLY_RESTART restart, + __in int nRecommendation + ) + { + SetProgressState(hrExitCode); - int nResult = __super::OnExecutePackageComplete(wzPackageId, hrExitCode, restart, nRecommendation); + int nResult = __super::OnExecutePackageComplete(wzPackageId, hrExitCode, restart, nRecommendation); - if (m_sczPrereqPackage && CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, wzPackageId, -1, m_sczPrereqPackage, -1)) - { - m_fPrereqInstalled = SUCCEEDED(hrExitCode); + WIXSTDBA_PREREQ_PACKAGE* pPrereqPackage = NULL; + BAL_INFO_PACKAGE* pPackage; + HRESULT hr = GetPrereqPackage(wzPackageId, &pPrereqPackage, &pPackage); + if (SUCCEEDED(hr)) + { + pPrereqPackage->fSuccessfullyInstalled = SUCCEEDED(hrExitCode); - // If the pre-req required a restart (any restart) then do an immediate - // restart to ensure that the bundle will get launched again post reboot. - if (BOOTSTRAPPER_APPLY_RESTART_NONE != restart) - { - nResult = IDRESTART; - } - } + // If the prerequisite required a restart (any restart) then do an immediate + // restart to ensure that the bundle will get launched again post reboot. + if (BOOTSTRAPPER_APPLY_RESTART_NONE != restart) + { + nResult = IDRESTART; + } + } - return nResult; - } + return nResult; + } - virtual STDMETHODIMP_(void) OnExecuteComplete( - __in HRESULT hrStatus - ) - { - ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_PACKAGE_TEXT, L""); - ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_ACTIONDATA_TEXT, L""); - ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_PROGRESS_PACKAGE_TEXT, L""); - ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON, FALSE); // no more cancel. + virtual STDMETHODIMP_(void) OnExecuteComplete( + __in HRESULT hrStatus + ) + { + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_PACKAGE_TEXT, L""); + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_ACTIONDATA_TEXT, L""); + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_OVERALL_PROGRESS_PACKAGE_TEXT, L""); + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON, FALSE); // no more cancel. - SetState(WIXSTDBA_STATE_EXECUTED, S_OK); // we always return success here and let OnApplyComplete() deal with the error. - SetProgressState(hrStatus); - } + SetState(WIXSTDBA_STATE_EXECUTED, S_OK); // we always return success here and let OnApplyComplete() deal with the error. + SetProgressState(hrStatus); + } - virtual STDMETHODIMP_(int) OnResolveSource( - __in_z LPCWSTR wzPackageOrContainerId, - __in_z_opt LPCWSTR wzPayloadId, - __in_z LPCWSTR wzLocalSource, - __in_z_opt LPCWSTR wzDownloadSource - ) - { - int nResult = IDERROR; // assume we won't resolve source and that is unexpected. + virtual STDMETHODIMP_(int) OnResolveSource( + __in_z LPCWSTR wzPackageOrContainerId, + __in_z_opt LPCWSTR wzPayloadId, + __in_z LPCWSTR wzLocalSource, + __in_z_opt LPCWSTR wzDownloadSource + ) + { + int nResult = IDERROR; // assume we won't resolve source and that is unexpected. - if (BOOTSTRAPPER_DISPLAY_FULL == m_command.display) - { - if (wzDownloadSource) - { - nResult = IDDOWNLOAD; - } - else // prompt to change the source location. - { - OPENFILENAMEW ofn = {}; - WCHAR wzFile[MAX_PATH] = {}; + if (BOOTSTRAPPER_DISPLAY_FULL == m_command.display) + { + if (wzDownloadSource) + { + nResult = IDDOWNLOAD; + } + else // prompt to change the source location. + { + OPENFILENAMEW ofn = { }; + WCHAR wzFile[MAX_PATH] = { }; - ::StringCchCopyW(wzFile, countof(wzFile), wzLocalSource); + ::StringCchCopyW(wzFile, countof(wzFile), wzLocalSource); - ofn.lStructSize = sizeof(ofn); - ofn.hwndOwner = m_hWnd; - ofn.lpstrFile = wzFile; - ofn.nMaxFile = countof(wzFile); - ofn.lpstrFilter = L"All Files\0*.*\0"; - ofn.nFilterIndex = 1; - ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; - ofn.lpstrTitle = m_pTheme->sczCaption; + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = m_hWnd; + ofn.lpstrFile = wzFile; + ofn.nMaxFile = countof(wzFile); + ofn.lpstrFilter = L"All Files\0*.*\0"; + ofn.nFilterIndex = 1; + ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; + ofn.lpstrTitle = m_pTheme->sczCaption; - if (::GetOpenFileNameW(&ofn)) - { - HRESULT hr = m_pEngine->SetLocalSource(wzPackageOrContainerId, wzPayloadId, ofn.lpstrFile); - nResult = SUCCEEDED(hr) ? IDRETRY : IDERROR; - } - else - { - nResult = IDCANCEL; - } - } - } - else if (wzDownloadSource) - { - // If doing a non-interactive install and download source is available, let's try downloading the package silently - nResult = IDDOWNLOAD; - } - // else there's nothing more we can do in non-interactive mode + if (::GetOpenFileNameW(&ofn)) + { + HRESULT hr = m_pEngine->SetLocalSource(wzPackageOrContainerId, wzPayloadId, ofn.lpstrFile); + nResult = SUCCEEDED(hr) ? IDRETRY : IDERROR; + } + else + { + nResult = IDCANCEL; + } + } + } + else if (wzDownloadSource) + { + // If doing a non-interactive install and download source is available, let's try downloading the package silently + nResult = IDDOWNLOAD; + } + // else there's nothing more we can do in non-interactive mode - return CheckCanceled() ? IDCANCEL : nResult; - } + return CheckCanceled() ? IDCANCEL : nResult; + } - virtual STDMETHODIMP_(int) OnApplyComplete( - __in HRESULT hrStatus, - __in BOOTSTRAPPER_APPLY_RESTART restart - ) - { - m_restartResult = restart; // remember the restart result so we return the correct error code no matter what the user chooses to do in the UI. + virtual STDMETHODIMP_(int) OnApplyComplete( + __in HRESULT hrStatus, + __in BOOTSTRAPPER_APPLY_RESTART restart + ) + { + m_restartResult = restart; // remember the restart result so we return the correct error code no matter what the user chooses to do in the UI. - // If a restart was encountered and we are not suppressing restarts, then restart is required. - m_fRestartRequired = (BOOTSTRAPPER_APPLY_RESTART_NONE != restart && BOOTSTRAPPER_RESTART_NEVER < m_command.restart); - // If a restart is required and we're not displaying a UI or we are not supposed to prompt for restart then allow the restart. - m_fAllowRestart = m_fRestartRequired && (BOOTSTRAPPER_DISPLAY_FULL > m_command.display || BOOTSTRAPPER_RESTART_PROMPT < m_command.restart); + // If a restart was encountered and we are not suppressing restarts, then restart is required. + m_fRestartRequired = (BOOTSTRAPPER_APPLY_RESTART_NONE != restart && BOOTSTRAPPER_RESTART_NEVER < m_command.restart); + // If a restart is required and we're not displaying a UI or we are not supposed to prompt for restart then allow the restart. + m_fAllowRestart = m_fRestartRequired && (BOOTSTRAPPER_DISPLAY_FULL > m_command.display || BOOTSTRAPPER_RESTART_PROMPT < m_command.restart); - // If we are showing UI, wait a beat before moving to the final screen. - if (BOOTSTRAPPER_DISPLAY_NONE < m_command.display) - { - ::Sleep(250); - } + if (m_fPrereq) + { + m_fPrereqInstalled = TRUE; + BOOL fInstalledAPackage = FALSE; - SetState(WIXSTDBA_STATE_APPLIED, hrStatus); - SetTaskbarButtonProgress(100); // show full progress bar, green, yellow, or red + for (DWORD i = 0; i < m_cPrereqPackages; ++i) + { + if (m_rgPrereqPackages[i].sczPackageId && m_rgPrereqPackages[i].fPlannedToBeInstalled && !m_rgPrereqPackages[i].fWasAlreadyInstalled) + { + if (m_rgPrereqPackages[i].fSuccessfullyInstalled) + { + fInstalledAPackage = TRUE; + } + else + { + m_fPrereqInstalled = FALSE; + break; + } + } + } - // If we successfully applied an update close the window since the new Bundle should be running now. - if (SUCCEEDED(hrStatus) && m_fUpdating) - { - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Update downloaded, close bundle."); - ::PostMessageW(m_hWnd, WM_CLOSE, 0, 0); - } + m_fPrereqInstalled = m_fPrereqInstalled && fInstalledAPackage; + } - return IDNOACTION; - } + // If we are showing UI, wait a beat before moving to the final screen. + if (BOOTSTRAPPER_DISPLAY_NONE < m_command.display) + { + ::Sleep(250); + } + + SetState(WIXSTDBA_STATE_APPLIED, hrStatus); + SetTaskbarButtonProgress(100); // show full progress bar, green, yellow, or red + + return IDNOACTION; + } + + virtual STDMETHODIMP_(void) OnLaunchApprovedExeComplete( + __in HRESULT hrStatus, + __in DWORD /*processId*/ + ) + { + if (HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) == hrStatus) + { + //try with ShelExec next time + OnClickLaunchButton(); + } + else + { + ::PostMessageW(m_hWnd, WM_CLOSE, 0, 0); + } + } + + virtual STDMETHODIMP_(int) OnExecuteFilesInUse( + __in_z LPCWSTR wzPackageId, + __in DWORD cFiles, + __in_ecount_z(cFiles) LPCWSTR* rgwzFiles + ) + { + if (m_fShowFilesInUse && !m_fPrereq && wzPackageId && *wzPackageId) + { + //If this is an MSI package, display the files in use page. + BAL_INFO_PACKAGE* pPackage = NULL; + BalInfoFindPackageById(&m_Bundle.packages, wzPackageId, &pPackage); + + if (pPackage && BAL_INFO_PACKAGE_TYPE_MSI == pPackage->type) + { + return ShowFilesInUseModal(cFiles, rgwzFiles); + } + } + + return __super::OnExecuteFilesInUse(wzPackageId, cFiles, rgwzFiles); + } private: // privates - // - // UiThreadProc - entrypoint for UI thread. - // - static DWORD WINAPI UiThreadProc( - __in LPVOID pvContext - ) - { - HRESULT hr = S_OK; - CWixStandardBootstrapperApplication* pThis = (CWixStandardBootstrapperApplication*)pvContext; - BOOL fComInitialized = FALSE; - BOOL fRet = FALSE; - MSG msg = {}; - - // Initialize COM and theme. - hr = ::CoInitialize(NULL); - BalExitOnFailure(hr, "Failed to initialize COM."); - fComInitialized = TRUE; - - hr = ThemeInitialize(pThis->m_hModule); - BalExitOnFailure(hr, "Failed to initialize theme manager."); - - hr = pThis->InitializeData(); - BalExitOnFailure(hr, "Failed to initialize data in bootstrapper application."); - - // Create main window. - pThis->InitializeTaskbarButton(); - hr = pThis->CreateMainWindow(); - BalExitOnFailure(hr, "Failed to create main window."); - - // Okay, we're ready for packages now. - pThis->SetState(WIXSTDBA_STATE_INITIALIZED, hr); - ::PostMessageW(pThis->m_hWnd, BOOTSTRAPPER_ACTION_HELP == pThis->m_command.action ? WM_WIXSTDBA_SHOW_HELP : WM_WIXSTDBA_DETECT_PACKAGES, 0, 0); - - // message pump - while (0 != (fRet = ::GetMessageW(&msg, NULL, 0, 0))) - { - if (-1 == fRet) - { - hr = E_UNEXPECTED; - BalExitOnFailure(hr, "Unexpected return value from message pump."); - } - else if (!ThemeHandleKeyboardMessage(pThis->m_pTheme, msg.hwnd, &msg)) - { - ::TranslateMessage(&msg); - ::DispatchMessageW(&msg); - } - } - - // Succeeded thus far, check to see if anything went wrong while actually - // executing changes. - if (FAILED(pThis->m_hrFinal)) - { - hr = pThis->m_hrFinal; - } - else if (pThis->CheckCanceled()) - { - hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT); - } - - LExit: - // destroy main window - pThis->DestroyMainWindow(); - - // initiate engine shutdown - DWORD dwQuit = HRESULT_CODE(hr); - if (BOOTSTRAPPER_APPLY_RESTART_INITIATED == pThis->m_restartResult) - { - dwQuit = ERROR_SUCCESS_REBOOT_INITIATED; - } - else if (BOOTSTRAPPER_APPLY_RESTART_REQUIRED == pThis->m_restartResult) - { - dwQuit = ERROR_SUCCESS_REBOOT_REQUIRED; - } - pThis->m_pEngine->Quit(dwQuit); - - ReleaseTheme(pThis->m_pTheme); - ThemeUninitialize(); - - // uninitialize COM - if (fComInitialized) - { - ::CoUninitialize(); - } - - return hr; - } - - - static DWORD WINAPI ThreadProc( - __in LPVOID pvContext - ) - { - CWixStandardBootstrapperApplication* pThis = static_cast(pvContext);; - - HRESULT hr = S_OK; - IXMLDOMDocument *pixd = NULL; - IXMLDOMNode* pNode = NULL; - LPWSTR sczUpdateUrl = NULL; - DWORD64 qwSize = 0; - - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Checking for update."); - - // Load the update XML from a location url and parse it for an update. - // - // - // - // - // - - hr = XmlLoadDocumentFromFile(pThis->m_wzUpdateLocation, &pixd); - BalExitOnFailure(hr, "Failed to load version check XML document."); - - hr = XmlSelectSingleNode(pixd, L"/Setup/Upgrade", &pNode); - BalExitOnFailure(hr, "Failed to select upgrade node."); - - if (S_OK == hr) - { - hr = XmlGetAttributeEx(pNode, L"Url", &sczUpdateUrl); - BalExitOnFailure(hr, "Failed to get url attribute."); - - hr = XmlGetAttributeLargeNumber(pNode, L"Size", &qwSize); - } - - if (sczUpdateUrl && *sczUpdateUrl) - { - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Update available, url: %ls; size: %I64u.", sczUpdateUrl, qwSize); - // Show upgrade on install and modify pages - if (pThis->m_rgdwPageIds[WIXSTDBA_PAGE_INSTALL] == pThis->m_dwCurrentPage || - pThis->m_rgdwPageIds[WIXSTDBA_PAGE_MODIFY] == pThis->m_dwCurrentPage) - { - pThis->m_pEngine->SetUpdate(NULL, sczUpdateUrl, qwSize, BOOTSTRAPPER_UPDATE_HASH_TYPE_NONE, NULL, 0); - ThemeControlEnable(pThis->m_pTheme, WIXSTDBA_CONTROL_UPGRADE_LINK, TRUE); - } - } - else - { - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "No update available."); - } - - LExit: - ReleaseObject(pixd); - ReleaseObject(pNode); - ReleaseStr(sczUpdateUrl); - - return 0; - } - - - // - // InitializeData - initializes all the package and prereq information. - // - HRESULT InitializeData() - { - HRESULT hr = S_OK; - LPWSTR sczModulePath = NULL; - IXMLDOMDocument *pixdManifest = NULL; - - hr = BalManifestLoad(m_hModule, &pixdManifest); - BalExitOnFailure(hr, "Failed to load bootstrapper application manifest."); - - hr = ParseOverridableVariablesFromXml(pixdManifest); - BalExitOnFailure(hr, "Failed to read overridable variables."); - - hr = ProcessCommandLine(&m_sczLanguage); - ExitOnFailure(hr, "Unknown commandline parameters."); - - hr = PathRelativeToModule(&sczModulePath, NULL, m_hModule); - BalExitOnFailure(hr, "Failed to get module path."); - - hr = LoadLocalization(sczModulePath, m_sczLanguage); - ExitOnFailure(hr, "Failed to load localization."); - - hr = LoadTheme(sczModulePath, m_sczLanguage); - ExitOnFailure(hr, "Failed to load theme."); - - hr = BalInfoParseFromXml(&m_Bundle, pixdManifest); - BalExitOnFailure(hr, "Failed to load bundle information."); - - hr = BalConditionsParseFromXml(&m_Conditions, pixdManifest, m_pWixLoc); - BalExitOnFailure(hr, "Failed to load conditions from XML."); - - LoadBootstrapperBAFunctions(); - - hr = ParseBootrapperApplicationDataFromXml(pixdManifest); - BalExitOnFailure(hr, "Failed to read bootstrapper application data."); - - LExit: - ReleaseObject(pixdManifest); - ReleaseStr(sczModulePath); - - return hr; - } - - - // - // ProcessCommandLine - process the provided command line arguments. - // - HRESULT ProcessCommandLine( - __inout LPWSTR* psczLanguage - ) - { - HRESULT hr = S_OK; - int argc = 0; - LPWSTR* argv = NULL; - LPWSTR sczVariableName = NULL; - LPWSTR sczVariableValue = NULL; - - if (m_command.wzCommandLine && *m_command.wzCommandLine) - { - argv = ::CommandLineToArgvW(m_command.wzCommandLine, &argc); - ExitOnNullWithLastError(argv, hr, "Failed to get command line."); - - for (int i = 0; i < argc; ++i) - { - if (argv[i][0] == L'-' || argv[i][0] == L'/') - { - if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, &argv[i][1], -1, L"lang", -1)) - { - if (i + 1 >= argc) - { - hr = E_INVALIDARG; - BalExitOnFailure(hr, "Must specify a language."); - } - - ++i; - - hr = StrAllocString(psczLanguage, &argv[i][0], 0); - BalExitOnFailure(hr, "Failed to copy language."); - } - } - else if (m_sdOverridableVariables) - { - const wchar_t* pwc = wcschr(argv[i], L'='); - if (pwc) - { - hr = StrAllocString(&sczVariableName, argv[i], pwc - argv[i]); - BalExitOnFailure(hr, "Failed to copy variable name."); - - hr = DictKeyExists(m_sdOverridableVariables, sczVariableName); - if (E_NOTFOUND == hr) - { - BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Ignoring attempt to set non-overridable variable: '%ls'.", sczVariableName); - hr = S_OK; - continue; - } - ExitOnFailure(hr, "Failed to check the dictionary of overridable variables."); - - hr = StrAllocString(&sczVariableValue, ++pwc, 0); - BalExitOnFailure(hr, "Failed to copy variable value."); - - hr = m_pEngine->SetVariableString(sczVariableName, sczVariableValue); - BalExitOnFailure(hr, "Failed to set variable."); - } - else - { - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Ignoring unknown argument: %ls", argv[i]); - } - } - } - } - - LExit: - if (argv) - { - ::LocalFree(argv); - } - - ReleaseStr(sczVariableName); - ReleaseStr(sczVariableValue); - - return hr; - } - - HRESULT LoadLocalization( - __in_z LPCWSTR wzModulePath, - __in_z_opt LPCWSTR wzLanguage - ) - { - HRESULT hr = S_OK; - LPWSTR sczLocPath = NULL; - LPCWSTR wzLocFileName = L"thm.wxl"; - - hr = LocProbeForFile(wzModulePath, wzLocFileName, wzLanguage, &sczLocPath); - BalExitOnFailure2(hr, "Failed to probe for loc file: %ls in path: %ls", wzLocFileName, wzModulePath); - - hr = LocLoadFromFile(sczLocPath, &m_pWixLoc); - BalExitOnFailure1(hr, "Failed to load loc file from path: %ls", sczLocPath); - - if (WIX_LOCALIZATION_LANGUAGE_NOT_SET != m_pWixLoc->dwLangId) - { - ::SetThreadLocale(m_pWixLoc->dwLangId); - } - - hr = StrAllocString(&m_sczConfirmCloseMessage, L"#(loc.ConfirmCancelMessage)", 0); - ExitOnFailure(hr, "Failed to initialize confirm message loc identifier."); - - hr = LocLocalizeString(m_pWixLoc, &m_sczConfirmCloseMessage); - BalExitOnFailure1(hr, "Failed to localize confirm close message: %ls", m_sczConfirmCloseMessage); - - LExit: - ReleaseStr(sczLocPath); - - return hr; - } - - - HRESULT LoadTheme( - __in_z LPCWSTR wzModulePath, - __in_z_opt LPCWSTR wzLanguage - ) - { - HRESULT hr = S_OK; - LPWSTR sczThemePath = NULL; - LPCWSTR wzThemeFileName = L"thm.xml"; - LPWSTR sczCaption = NULL; - - hr = LocProbeForFile(wzModulePath, wzThemeFileName, wzLanguage, &sczThemePath); - BalExitOnFailure2(hr, "Failed to probe for theme file: %ls in path: %ls", wzThemeFileName, wzModulePath); - - hr = ThemeLoadFromFile(sczThemePath, &m_pTheme); - BalExitOnFailure1(hr, "Failed to load theme from path: %ls", sczThemePath); - - hr = ThemeLocalize(m_pTheme, m_pWixLoc); - BalExitOnFailure1(hr, "Failed to localize theme: %ls", sczThemePath); - - // Update the caption if there are any formatted strings in it. - hr = BalFormatString(m_pTheme->sczCaption, &sczCaption); - if (SUCCEEDED(hr)) - { - ThemeUpdateCaption(m_pTheme, sczCaption); - } - - LExit: - ReleaseStr(sczCaption); - ReleaseStr(sczThemePath); - - return hr; - } - - - HRESULT ParseOverridableVariablesFromXml( - __in IXMLDOMDocument* pixdManifest - ) - { - HRESULT hr = S_OK; - IXMLDOMNode* pNode = NULL; - IXMLDOMNodeList* pNodes = NULL; - DWORD cNodes = 0; - LPWSTR scz = NULL; - - // get the list of variables users can override on the command line - hr = XmlSelectNodes(pixdManifest, L"/BootstrapperApplicationData/WixStdbaOverridableVariable", &pNodes); - if (S_FALSE == hr) - { - ExitFunction1(hr = S_OK); - } - ExitOnFailure(hr, "Failed to select overridable variable nodes."); - - hr = pNodes->get_length((long*)&cNodes); - ExitOnFailure(hr, "Failed to get overridable variable node count."); - - if (cNodes) - { - hr = DictCreateStringList(&m_sdOverridableVariables, 32, DICT_FLAG_NONE); - ExitOnFailure(hr, "Failed to create the string dictionary."); - - for (DWORD i = 0; i < cNodes; ++i) - { - hr = XmlNextElement(pNodes, &pNode, NULL); - ExitOnFailure(hr, "Failed to get next node."); - - // @Name - hr = XmlGetAttributeEx(pNode, L"Name", &scz); - ExitOnFailure(hr, "Failed to get @Name."); - - hr = DictAddKey(m_sdOverridableVariables, scz); - ExitOnFailure1(hr, "Failed to add \"%ls\" to the string dictionary.", scz); - - // prepare next iteration - ReleaseNullObject(pNode); - } - } - - LExit: - ReleaseObject(pNode); - ReleaseObject(pNodes); - ReleaseStr(scz); - return hr; - } - - - HRESULT ParsePrerequisiteInformationFromXml( - __in IXMLDOMDocument* pixdManifest - ) - { - HRESULT hr = S_OK; - IXMLDOMNode* pNode = NULL; - - hr = XmlSelectSingleNode(pixdManifest, L"/BootstrapperApplicationData/WixMbaPrereqInformation", &pNode); - if (S_FALSE == hr) - { - hr = E_INVALIDARG; - } - BalExitOnFailure(hr, "BootstrapperApplication.xml manifest is missing prerequisite information."); - - hr = XmlGetAttributeEx(pNode, L"PackageId", &m_sczPrereqPackage); - BalExitOnFailure(hr, "Failed to get prerequisite package identifier."); - - hr = XmlGetAttributeEx(pNode, L"LicenseUrl", &m_sczLicenseUrl); - if (E_NOTFOUND == hr) - { - hr = S_OK; - } - BalExitOnFailure(hr, "Failed to get prerequisite license URL."); - - hr = XmlGetAttributeEx(pNode, L"LicenseFile", &m_sczLicenseFile); - if (E_NOTFOUND == hr) - { - hr = S_OK; - } - BalExitOnFailure(hr, "Failed to get prerequisite license file."); - - LExit: - ReleaseObject(pNode); - return hr; - } - - - HRESULT ParseBootrapperApplicationDataFromXml( - __in IXMLDOMDocument* pixdManifest - ) - { - HRESULT hr = S_OK; - IXMLDOMNode* pNode = NULL; - DWORD dwBool = 0; - - hr = XmlSelectSingleNode(pixdManifest, L"/BootstrapperApplicationData/WixExtbaInformation", &pNode); - if (S_FALSE == hr) - { - hr = E_INVALIDARG; - } - BalExitOnFailure(hr, "BootstrapperApplication.xml manifest is missing wixextba information."); - - hr = XmlGetAttributeEx(pNode, L"LicenseFile", &m_sczLicenseFile); - if (E_NOTFOUND == hr) - { - hr = S_OK; - } - BalExitOnFailure(hr, "Failed to get license file."); - - hr = XmlGetAttributeEx(pNode, L"LicenseUrl", &m_sczLicenseUrl); - if (E_NOTFOUND == hr) - { - hr = S_OK; - } - BalExitOnFailure(hr, "Failed to get license URL."); - - ReleaseObject(pNode); - - hr = XmlSelectSingleNode(pixdManifest, L"/BootstrapperApplicationData/WixExtbaOptions", &pNode); - if (S_FALSE == hr) - { - ExitFunction1(hr = S_OK); - } - BalExitOnFailure(hr, "Failed to read wixextba options from BootstrapperApplication.xml manifest."); - - hr = XmlGetAttributeNumber(pNode, L"SuppressOptionsUI", &dwBool); - if (E_NOTFOUND == hr) - { - hr = S_OK; - } - else if (SUCCEEDED(hr)) - { - m_fSuppressOptionsUI = 0 < dwBool; - } - BalExitOnFailure(hr, "Failed to get SuppressOptionsUI value."); - - dwBool = 0; - hr = XmlGetAttributeNumber(pNode, L"SuppressDowngradeFailure", &dwBool); - if (E_NOTFOUND == hr) - { - hr = S_OK; - } - else if (SUCCEEDED(hr)) - { - m_fSuppressDowngradeFailure = 0 < dwBool; - } - BalExitOnFailure(hr, "Failed to get SuppressDowngradeFailure value."); - - dwBool = 0; - hr = XmlGetAttributeNumber(pNode, L"SuppressRepair", &dwBool); - if (E_NOTFOUND == hr) - { - hr = S_OK; - } - else if (SUCCEEDED(hr)) - { - m_fSuppressRepair = 0 < dwBool; - } - BalExitOnFailure(hr, "Failed to get SuppressRepair value."); - - hr = XmlGetAttributeNumber(pNode, L"ShowVersion", &dwBool); - if (E_NOTFOUND == hr) - { - hr = S_OK; - } - else if (SUCCEEDED(hr)) - { - m_fShowVersion = 0 < dwBool; - } - BalExitOnFailure(hr, "Failed to get ShowVersion value."); + // + // UiThreadProc - entrypoint for UI thread. + // + static DWORD WINAPI UiThreadProc( + __in LPVOID pvContext + ) + { + HRESULT hr = S_OK; + CWixStandardBootstrapperApplication* pThis = (CWixStandardBootstrapperApplication*)pvContext; + BOOL fComInitialized = FALSE; + BOOL fRet = FALSE; + MSG msg = { }; + + // Initialize COM and theme. + hr = ::CoInitialize(NULL); + BalExitOnFailure(hr, "Failed to initialize COM."); + fComInitialized = TRUE; + + hr = ThemeInitialize(pThis->m_hModule); + BalExitOnFailure(hr, "Failed to initialize theme manager."); + + hr = pThis->InitializeData(); + BalExitOnFailure(hr, "Failed to initialize data in bootstrapper application."); + + // Create main window. + pThis->InitializeTaskbarButton(); + hr = pThis->CreateMainWindow(); + BalExitOnFailure(hr, "Failed to create main window."); + + if (FAILED(pThis->m_hrFinal)) + { + pThis->SetState(WIXSTDBA_STATE_FAILED, hr); + ::PostMessageW(pThis->m_hWnd, WM_WIXSTDBA_SHOW_FAILURE, 0, 0); + } + else + { + // Okay, we're ready for packages now. + pThis->SetState(WIXSTDBA_STATE_INITIALIZED, hr); + ::PostMessageW(pThis->m_hWnd, BOOTSTRAPPER_ACTION_HELP == pThis->m_command.action ? WM_WIXSTDBA_SHOW_HELP : WM_WIXSTDBA_DETECT_PACKAGES, 0, 0); + } + + // message pump + while (0 != (fRet = ::GetMessageW(&msg, NULL, 0, 0))) + { + if (-1 == fRet) + { + hr = E_UNEXPECTED; + BalExitOnFailure(hr, "Unexpected return value from message pump."); + } + else if (!ThemeHandleKeyboardMessage(pThis->m_pTheme, msg.hwnd, &msg)) + { + ::TranslateMessage(&msg); + ::DispatchMessageW(&msg); + } + } + + // Succeeded thus far, check to see if anything went wrong while actually + // executing changes. + if (FAILED(pThis->m_hrFinal)) + { + hr = pThis->m_hrFinal; + } + else if (pThis->CheckCanceled()) + { + hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT); + } + + LExit: + // destroy main window + pThis->DestroyMainWindow(); + + // initiate engine shutdown + DWORD dwQuit = HRESULT_CODE(hr); + if (BOOTSTRAPPER_APPLY_RESTART_INITIATED == pThis->m_restartResult) + { + dwQuit = ERROR_SUCCESS_REBOOT_INITIATED; + } + else if (BOOTSTRAPPER_APPLY_RESTART_REQUIRED == pThis->m_restartResult) + { + dwQuit = ERROR_SUCCESS_REBOOT_REQUIRED; + } + pThis->m_pEngine->Quit(dwQuit); + + ReleaseTheme(pThis->m_pTheme); + ThemeUninitialize(); + + // uninitialize COM + if (fComInitialized) + { + ::CoUninitialize(); + } + + return hr; + } + + + static DWORD WINAPI ThreadProc( + __in LPVOID pvContext + ) + { + CWixStandardBootstrapperApplication* pThis = static_cast(pvContext);; + + HRESULT hr = S_OK; + IXMLDOMDocument *pixd = NULL; + IXMLDOMNode* pNode = NULL; + LPWSTR sczUpdateUrl = NULL; + DWORD64 qwSize = 0; + + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Checking for update."); + + // Load the update XML from a location url and parse it for an update. + // + // + // + // + // + + hr = XmlLoadDocumentFromFile(pThis->m_wzUpdateLocation, &pixd); + BalExitOnFailure(hr, "Failed to load version check XML document."); + + hr = XmlSelectSingleNode(pixd, L"/Setup/Upgrade", &pNode); + BalExitOnFailure(hr, "Failed to select upgrade node."); + + if (S_OK == hr) + { + hr = XmlGetAttributeEx(pNode, L"Url", &sczUpdateUrl); + BalExitOnFailure(hr, "Failed to get url attribute."); + + hr = XmlGetAttributeLargeNumber(pNode, L"Size", &qwSize); + } + + if (sczUpdateUrl && *sczUpdateUrl) + { + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Update available, url: %ls; size: %I64u.", sczUpdateUrl, qwSize); + // Show upgrade on install and modify pages + if (pThis->m_rgdwPageIds[WIXSTDBA_PAGE_INSTALL] == pThis->m_dwCurrentPage || + pThis->m_rgdwPageIds[WIXSTDBA_PAGE_MODIFY] == pThis->m_dwCurrentPage) + { + pThis->m_pEngine->SetUpdate(NULL, sczUpdateUrl, qwSize, BOOTSTRAPPER_UPDATE_HASH_TYPE_NONE, NULL, 0); + ThemeControlEnable(pThis->m_pTheme, WIXSTDBA_CONTROL_UPGRADE_LINK, TRUE); + } + } + else + { + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "No update available."); + } + +LExit: + ReleaseObject(pixd); + ReleaseObject(pNode); + ReleaseStr(sczUpdateUrl); + + return 0; + } + + + // + // InitializeData - initializes all the package and prerequisite information. + // + HRESULT InitializeData() + { + HRESULT hr = S_OK; + LPWSTR sczModulePath = NULL; + IXMLDOMDocument *pixdManifest = NULL; + + hr = BalManifestLoad(m_hModule, &pixdManifest); + BalExitOnFailure(hr, "Failed to load bootstrapper application manifest."); + + hr = ParseOverridableVariablesFromXml(pixdManifest); + BalExitOnFailure(hr, "Failed to read overridable variables."); + + hr = ProcessCommandLine(&m_sczLanguage); + ExitOnFailure(hr, "Unknown commandline parameters."); + + hr = PathRelativeToModule(&sczModulePath, NULL, m_hModule); + BalExitOnFailure(hr, "Failed to get module path."); + + hr = LoadLocalization(sczModulePath, m_sczLanguage); + ExitOnFailure(hr, "Failed to load localization."); + + hr = LoadTheme(sczModulePath, m_sczLanguage); + ExitOnFailure(hr, "Failed to load theme."); + + hr = BalInfoParseFromXml(&m_Bundle, pixdManifest); + BalExitOnFailure(hr, "Failed to load bundle information."); + + hr = BalConditionsParseFromXml(&m_Conditions, pixdManifest, m_pWixLoc); + BalExitOnFailure(hr, "Failed to load conditions from XML."); + + hr = LoadBootstrapperBAFunctions(); + BalExitOnFailure(hr, "Failed to load bootstrapper functions."); + + GetBundleFileVersion(); + // don't fail if we couldn't get the version info; best-effort only + + if (m_fPrereq) + { + hr = ParsePrerequisiteInformationFromXml(pixdManifest); + BalExitOnFailure(hr, "Failed to read prerequisite information."); + } + else + { + hr = ParseBootrapperApplicationDataFromXml(pixdManifest); + BalExitOnFailure(hr, "Failed to read bootstrapper application data."); + } + + LExit: + ReleaseObject(pixdManifest); + ReleaseStr(sczModulePath); + + return hr; + } + + + // + // ProcessCommandLine - process the provided command line arguments. + // + HRESULT ProcessCommandLine( + __inout LPWSTR* psczLanguage + ) + { + HRESULT hr = S_OK; + int argc = 0; + LPWSTR* argv = NULL; + LPWSTR sczVariableName = NULL; + LPWSTR sczVariableValue = NULL; + + if (m_command.wzCommandLine && *m_command.wzCommandLine) + { + argv = ::CommandLineToArgvW(m_command.wzCommandLine, &argc); + ExitOnNullWithLastError(argv, hr, "Failed to get command line."); + + for (int i = 0; i < argc; ++i) + { + if (argv[i][0] == L'-' || argv[i][0] == L'/') + { + if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, &argv[i][1], -1, L"lang", -1)) + { + if (i + 1 >= argc) + { + hr = E_INVALIDARG; + BalExitOnFailure(hr, "Must specify a language."); + } + + ++i; + + hr = StrAllocString(psczLanguage, &argv[i][0], 0); + BalExitOnFailure(hr, "Failed to copy language."); + } + else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, &argv[i][1], -1, L"cache", -1)) + { + m_plannedAction = BOOTSTRAPPER_ACTION_CACHE; + } + } + else if (m_sdOverridableVariables) + { + const wchar_t* pwc = wcschr(argv[i], L'='); + if (pwc) + { + hr = StrAllocString(&sczVariableName, argv[i], pwc - argv[i]); + BalExitOnFailure(hr, "Failed to copy variable name."); + + hr = DictKeyExists(m_sdOverridableVariables, sczVariableName); + if (E_NOTFOUND == hr) + { + BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Ignoring attempt to set non-overridable variable: '%ls'.", sczVariableName); + hr = S_OK; + continue; + } + ExitOnFailure(hr, "Failed to check the dictionary of overridable variables."); + + hr = StrAllocString(&sczVariableValue, ++pwc, 0); + BalExitOnFailure(hr, "Failed to copy variable value."); + + hr = m_pEngine->SetVariableString(sczVariableName, sczVariableValue); + BalExitOnFailure(hr, "Failed to set variable."); + } + else + { + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Ignoring unknown argument: %ls", argv[i]); + } + } + } + } + + LExit: + if (argv) + { + ::LocalFree(argv); + } + + ReleaseStr(sczVariableName); + ReleaseStr(sczVariableValue); + + return hr; + } + + HRESULT LoadLocalization( + __in_z LPCWSTR wzModulePath, + __in_z_opt LPCWSTR wzLanguage + ) + { + HRESULT hr = S_OK; + LPWSTR sczLocPath = NULL; + LPWSTR sczFormatted = NULL; + LPCWSTR wzLocFileName = L"thm.wxl"; + + // Find and load .wxl file. + hr = LocProbeForFile(wzModulePath, wzLocFileName, wzLanguage, &sczLocPath); + BalExitOnFailure2(hr, "Failed to probe for loc file: %ls in path: %ls", wzLocFileName, wzModulePath); + + hr = LocLoadFromFile(sczLocPath, &m_pWixLoc); + BalExitOnFailure1(hr, "Failed to load loc file from path: %ls", sczLocPath); + + // Set WixStdBALanguageId to .wxl language id. + if (WIX_LOCALIZATION_LANGUAGE_NOT_SET != m_pWixLoc->dwLangId) + { + ::SetThreadLocale(m_pWixLoc->dwLangId); + + hr = m_pEngine->SetVariableNumeric(WIXSTDBA_VARIABLE_LANGUAGE_ID, m_pWixLoc->dwLangId); + BalExitOnFailure(hr, "Failed to set WixStdBALanguageId variable."); + } + + // Load ConfirmCancelMessage. + hr = StrAllocString(&m_sczConfirmCloseMessage, L"#(loc.ConfirmCancelMessage)", 0); + ExitOnFailure(hr, "Failed to initialize confirm message loc identifier."); + + hr = LocLocalizeString(m_pWixLoc, &m_sczConfirmCloseMessage); + BalExitOnFailure1(hr, "Failed to localize confirm close message: %ls", m_sczConfirmCloseMessage); + + hr = BalFormatString(m_sczConfirmCloseMessage, &sczFormatted); + if (SUCCEEDED(hr)) + { + ReleaseStr(m_sczConfirmCloseMessage); + m_sczConfirmCloseMessage = sczFormatted; + sczFormatted = NULL; + } + + // For v3.9->v3.10 transition, duplicate new-to-v3.10 strings. + // Do not merge to WiX v4.0. + LOC_STRING* pLocString = NULL; + hr = LocGetString(m_pWixLoc, L"#(loc.SuccessInstallHeader)", &pLocString); + if (E_NOTFOUND == hr) + { + // Duplicate strings, best-effort only. + if (SUCCEEDED(LocGetString(m_pWixLoc, L"#(loc.SuccessHeader)", &pLocString))) + { + hr = LocAddString(m_pWixLoc, L"SuccessInstallHeader", pLocString->wzText, pLocString->bOverridable); + ExitOnFailure(hr, "Failed to duplicate localization string for SuccessInstallHeader."); + + hr = LocAddString(m_pWixLoc, L"SuccessRepairHeader", pLocString->wzText, pLocString->bOverridable); + ExitOnFailure(hr, "Failed to duplicate localization string for SuccessRepairHeader."); + + hr = LocAddString(m_pWixLoc, L"SuccessUninstallHeader", pLocString->wzText, pLocString->bOverridable); + ExitOnFailure(hr, "Failed to duplicate localization string for SuccessUninstallHeader."); + } + + if (SUCCEEDED(LocGetString(m_pWixLoc, L"#(loc.FailureHeader)", &pLocString))) + { + hr = LocAddString(m_pWixLoc, L"FailureInstallHeader", pLocString->wzText, pLocString->bOverridable); + ExitOnFailure(hr, "Failed to duplicate localization string for FailureInstallHeader."); + + hr = LocAddString(m_pWixLoc, L"FailureRepairHeader", pLocString->wzText, pLocString->bOverridable); + ExitOnFailure(hr, "Failed to duplicate localization string for FailureRepairHeader."); + + hr = LocAddString(m_pWixLoc, L"FailureUninstallHeader", pLocString->wzText, pLocString->bOverridable); + ExitOnFailure(hr, "Failed to duplicate localization string for FailureUninstallHeader."); + } + } + + LExit: + ReleaseStr(sczFormatted); + ReleaseStr(sczLocPath); + + return hr; + } + + + HRESULT LoadTheme( + __in_z LPCWSTR wzModulePath, + __in_z_opt LPCWSTR wzLanguage + ) + { + HRESULT hr = S_OK; + LPWSTR sczThemePath = NULL; + LPCWSTR wzThemeFileName = L"thm.xml"; + LPWSTR sczCaption = NULL; + + hr = LocProbeForFile(wzModulePath, wzThemeFileName, wzLanguage, &sczThemePath); + BalExitOnFailure2(hr, "Failed to probe for theme file: %ls in path: %ls", wzThemeFileName, wzModulePath); + + hr = ThemeLoadFromFile(sczThemePath, &m_pTheme); + BalExitOnFailure1(hr, "Failed to load theme from path: %ls", sczThemePath); + + hr = ThemeLocalize(m_pTheme, m_pWixLoc); + BalExitOnFailure1(hr, "Failed to localize theme: %ls", sczThemePath); + + // Update the caption if there are any formatted strings in it. + // If the wix developer is showing a hidden variable in the UI, then obviously they don't care about keeping it safe + // so don't go down the rabbit hole of making sure that this is securely freed. + hr = BalFormatString(m_pTheme->sczCaption, &sczCaption); + if (SUCCEEDED(hr)) + { + ThemeUpdateCaption(m_pTheme, sczCaption); + } + +LExit: + ReleaseStr(sczCaption); + ReleaseStr(sczThemePath); + + return hr; + } + + + HRESULT ParseOverridableVariablesFromXml( + __in IXMLDOMDocument* pixdManifest + ) + { + HRESULT hr = S_OK; + IXMLDOMNode* pNode = NULL; + IXMLDOMNodeList* pNodes = NULL; + DWORD cNodes = 0; + LPWSTR scz = NULL; + + // get the list of variables users can override on the command line + hr = XmlSelectNodes(pixdManifest, L"/BootstrapperApplicationData/WixStdbaOverridableVariable", &pNodes); + if (S_FALSE == hr) + { + ExitFunction1(hr = S_OK); + } + ExitOnFailure(hr, "Failed to select overridable variable nodes."); + + hr = pNodes->get_length((long*)&cNodes); + ExitOnFailure(hr, "Failed to get overridable variable node count."); + + if (cNodes) + { + hr = DictCreateStringList(&m_sdOverridableVariables, 32, DICT_FLAG_NONE); + ExitOnFailure(hr, "Failed to create the string dictionary."); + + for (DWORD i = 0; i < cNodes; ++i) + { + hr = XmlNextElement(pNodes, &pNode, NULL); + ExitOnFailure(hr, "Failed to get next node."); + + // @Name + hr = XmlGetAttributeEx(pNode, L"Name", &scz); + ExitOnFailure(hr, "Failed to get @Name."); + + hr = DictAddKey(m_sdOverridableVariables, scz); + ExitOnFailure1(hr, "Failed to add \"%ls\" to the string dictionary.", scz); + + // prepare next iteration + ReleaseNullObject(pNode); + } + } + + LExit: + ReleaseObject(pNode); + ReleaseObject(pNodes); + ReleaseStr(scz); + return hr; + } + + + HRESULT ParsePrerequisiteInformationFromXml( + __in IXMLDOMDocument* pixdManifest + ) + { + HRESULT hr = S_OK; + IXMLDOMNode* pNode = NULL; + IXMLDOMNodeList* pNodes = NULL; + DWORD cNodes = 0; + LPWSTR scz = NULL; + WIXSTDBA_PREREQ_PACKAGE* pPrereqPackage = NULL; + BAL_INFO_PACKAGE* pPackage = NULL; + + hr = XmlSelectSingleNode(pixdManifest, L"/BootstrapperApplicationData/WixMbaPrereqInformation", &pNode); + if (S_FALSE == hr) + { + hr = E_INVALIDARG; + } + BalExitOnFailure(hr, "BootstrapperApplication.xml manifest is missing prerequisite information."); + + hr = XmlGetAttributeEx(pNode, L"PackageId", &m_sczPrereqPackage); + BalExitOnFailure(hr, "Failed to get prerequisite package identifier."); + + hr = XmlGetAttributeEx(pNode, L"LicenseUrl", &m_sczLicenseUrl); + if (E_NOTFOUND == hr) + { + hr = S_OK; + } + BalExitOnFailure(hr, "Failed to get prerequisite license URL."); + + hr = XmlGetAttributeEx(pNode, L"LicenseFile", &m_sczLicenseFile); + if (E_NOTFOUND == hr) + { + hr = S_OK; + } + BalExitOnFailure(hr, "Failed to get prerequisite license file."); + + // get the list of prerequisite support packages + hr = XmlSelectNodes(pixdManifest, L"/BootstrapperApplicationData/MbaPrerequisiteSupportPackage", &pNodes); + if (S_FALSE == hr) + { + ExitFunction1(hr = S_OK); + } + ExitOnFailure(hr, "Failed to select prerequisite support package nodes."); + + hr = pNodes->get_length((long*)&cNodes); + ExitOnFailure(hr, "Failed to get prerequisite support package node count."); + + m_cPrereqPackages = cNodes + 1; + m_rgPrereqPackages = static_cast(MemAlloc(sizeof(WIXSTDBA_PREREQ_PACKAGE) * m_cPrereqPackages, TRUE)); + + hr = DictCreateWithEmbeddedKey(&m_shPrereqSupportPackages, m_cPrereqPackages, reinterpret_cast(&m_rgPrereqPackages), offsetof(WIXSTDBA_PREREQ_PACKAGE, sczPackageId), DICT_FLAG_NONE); + ExitOnFailure(hr, "Failed to create the prerequisite package dictionary."); + + pPrereqPackage = m_rgPrereqPackages; + pPrereqPackage->sczPackageId = m_sczPrereqPackage; + pPrereqPackage->fAlwaysInstall = TRUE; + hr = DictAddValue(m_shPrereqSupportPackages, pPrereqPackage); + ExitOnFailure1(hr, "Failed to add \"%ls\" to the prerequisite package dictionary.", pPrereqPackage->sczPackageId); + + for (DWORD i = 0; i < cNodes; ++i) + { + hr = XmlNextElement(pNodes, &pNode, NULL); + ExitOnFailure(hr, "Failed to get next node."); + + // @PackageId + hr = XmlGetAttributeEx(pNode, L"PackageId", &scz); + ExitOnFailure(hr, "Failed to get @PackageId."); + + hr = DictGetValue(m_shPrereqSupportPackages, scz, reinterpret_cast(&pPrereqPackage)); + if (SUCCEEDED(hr)) + { + if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, scz, -1, m_sczPrereqPackage, -1)) + { + pPrereqPackage->fAlwaysInstall = FALSE; + } + ReleaseNullObject(pNode); + continue; + } + else if (E_NOTFOUND != hr) + { + ExitOnFailure1(hr, "Failed to check if \"%ls\" was in the prerequisite package dictionary.", scz); + } + + hr = BalInfoFindPackageById(&m_Bundle.packages, scz, &pPackage); + if (SUCCEEDED(hr)) + { + pPrereqPackage = &m_rgPrereqPackages[i + 1]; + pPrereqPackage->sczPackageId = pPackage->sczId; + hr = DictAddValue(m_shPrereqSupportPackages, pPrereqPackage); + ExitOnFailure1(hr, "Failed to add \"%ls\" to the prerequisite package dictionary.", pPrereqPackage->sczPackageId); + } + else + { + BalLogError(hr, "Failed to get info about \"%ls\" from BootstrapperApplicationData.", scz); + } + + // prepare next iteration + ReleaseNullObject(pNode); + } + + LExit: + ReleaseObject(pNode); + ReleaseObject(pNodes); + ReleaseStr(scz); + return hr; + } + + + HRESULT ParseBootrapperApplicationDataFromXml( + __in IXMLDOMDocument* pixdManifest + ) + { + HRESULT hr = S_OK; + IXMLDOMNode* pNode = NULL; + DWORD dwBool = 0; + + hr = XmlSelectSingleNode(pixdManifest, L"/BootstrapperApplicationData/WixExtbaInformation", &pNode); + if (S_FALSE == hr) + { + hr = E_INVALIDARG; + } + BalExitOnFailure(hr, "BootstrapperApplication.xml manifest is missing wixextba information."); + + hr = XmlGetAttributeEx(pNode, L"LicenseFile", &m_sczLicenseFile); + if (E_NOTFOUND == hr) + { + hr = S_OK; + } + BalExitOnFailure(hr, "Failed to get license file."); + + hr = XmlGetAttributeEx(pNode, L"LicenseUrl", &m_sczLicenseUrl); + if (E_NOTFOUND == hr) + { + hr = S_OK; + } + BalExitOnFailure(hr, "Failed to get license URL."); + + ReleaseObject(pNode); + + hr = XmlSelectSingleNode(pixdManifest, L"/BootstrapperApplicationData/WixExtbaOptions", &pNode); + if (S_FALSE == hr) + { + ExitFunction1(hr = S_OK); + } + BalExitOnFailure(hr, "Failed to read wixextba options from BootstrapperApplication.xml manifest."); + + hr = XmlGetAttributeNumber(pNode, L"SuppressOptionsUI", &dwBool); + if (E_NOTFOUND == hr) + { + hr = S_OK; + } + else if (SUCCEEDED(hr)) + { + m_fSuppressOptionsUI = 0 < dwBool; + } + BalExitOnFailure(hr, "Failed to get SuppressOptionsUI value."); + + dwBool = 0; + hr = XmlGetAttributeNumber(pNode, L"SuppressDowngradeFailure", &dwBool); + if (E_NOTFOUND == hr) + { + hr = S_OK; + } + else if (SUCCEEDED(hr)) + { + m_fSuppressDowngradeFailure = 0 < dwBool; + } + BalExitOnFailure(hr, "Failed to get SuppressDowngradeFailure value."); + + dwBool = 0; + hr = XmlGetAttributeNumber(pNode, L"SuppressRepair", &dwBool); + if (E_NOTFOUND == hr) + { + hr = S_OK; + } + else if (SUCCEEDED(hr)) + { + m_fSuppressRepair = 0 < dwBool; + } + BalExitOnFailure(hr, "Failed to get SuppressRepair value."); + + hr = XmlGetAttributeNumber(pNode, L"ShowVersion", &dwBool); + if (E_NOTFOUND == hr) + { + hr = S_OK; + } + else if (SUCCEEDED(hr)) + { + m_fShowVersion = 0 < dwBool; + } + BalExitOnFailure(hr, "Failed to get ShowVersion value."); + + hr = XmlGetAttributeNumber(pNode, L"SupportCacheOnly", &dwBool); + if (E_NOTFOUND == hr) + { + hr = S_OK; + } + else if (SUCCEEDED(hr)) + { + m_fSupportCacheOnly = 0 < dwBool; + } + BalExitOnFailure(hr, "Failed to get SupportCacheOnly value."); + + hr = XmlGetAttributeNumber(pNode, L"ShowFilesInUse", &dwBool); + if (E_NOTFOUND == hr) + { + hr = S_OK; + } + else if (SUCCEEDED(hr)) + { + m_fShowFilesInUse = 0 < dwBool; + } + BalExitOnFailure(hr, "Failed to get ShowFilesInUse value."); dwBool = 0; hr = XmlGetAttributeNumber(pNode, L"LaunchPassive", &dwBool); @@ -1375,548 +1702,706 @@ private: // privates } BalExitOnFailure(hr, "Failed to get LaunchQuiet value."); - LExit: - ReleaseObject(pNode); - return hr; - } + LExit: + ReleaseObject(pNode); + return hr; + } + + HRESULT GetPrereqPackage( + __in_z LPCWSTR wzPackageId, + __out WIXSTDBA_PREREQ_PACKAGE** ppPrereqPackage, + __out BAL_INFO_PACKAGE** ppPackage + ) + { + HRESULT hr = E_NOTFOUND; + WIXSTDBA_PREREQ_PACKAGE* pPrereqPackage = NULL; + BAL_INFO_PACKAGE* pPackage = NULL; + + Assert(wzPackageId && *wzPackageId); + Assert(ppPackage); + Assert(ppPrereqPackage); + + if (m_shPrereqSupportPackages) + { + hr = DictGetValue(m_shPrereqSupportPackages, wzPackageId, reinterpret_cast(&pPrereqPackage)); + if (E_NOTFOUND != hr) + { + ExitOnFailure(hr, "Failed to check the dictionary of prerequisite packages."); + + // Ignore error. + BalInfoFindPackageById(&m_Bundle.packages, wzPackageId, &pPackage); + } + } + + if (pPrereqPackage) + { + *ppPrereqPackage = pPrereqPackage; + *ppPackage = pPackage; + } + LExit: + return hr; + } - // - // CreateMainWindow - creates the main install window. - // - HRESULT CreateMainWindow() - { - HRESULT hr = S_OK; - HICON hIcon = reinterpret_cast(m_pTheme->hIcon); - WNDCLASSW wc = {}; - DWORD dwWindowStyle = 0; - int x = CW_USEDEFAULT; - int y = CW_USEDEFAULT; - POINT ptCursor = {}; - HMONITOR hMonitor = NULL; - MONITORINFO mi = {}; + // + // Get the file version of the bootstrapper and record in bootstrapper log file + // + HRESULT GetBundleFileVersion() + { + HRESULT hr = S_OK; + ULARGE_INTEGER uliVersion = { }; + LPWSTR sczCurrentPath = NULL; - // If the theme did not provide an icon, try using the icon from the bundle engine. - if (!hIcon) - { - HMODULE hBootstrapperEngine = ::GetModuleHandleW(NULL); - if (hBootstrapperEngine) - { - hIcon = ::LoadIconW(hBootstrapperEngine, MAKEINTRESOURCEW(1)); - } - } + hr = PathForCurrentProcess(&sczCurrentPath, NULL); + BalExitOnFailure(hr, "Failed to get bundle path."); - // Register the window class and create the window. - wc.lpfnWndProc = CWixStandardBootstrapperApplication::WndProc; - wc.hInstance = m_hModule; - wc.hIcon = hIcon; - wc.hCursor = ::LoadCursorW(NULL, (LPCWSTR)IDC_ARROW); - wc.hbrBackground = m_pTheme->rgFonts[m_pTheme->dwFontId].hBackground; - wc.lpszMenuName = NULL; - wc.lpszClassName = WIXSTDBA_WINDOW_CLASS; - if (!::RegisterClassW(&wc)) - { - ExitWithLastError(hr, "Failed to register window."); - } + hr = FileVersion(sczCurrentPath, &uliVersion.HighPart, &uliVersion.LowPart); + BalExitOnFailure(hr, "Failed to get bundle file version."); - m_fRegistered = TRUE; + hr = m_pEngine->SetVariableVersion(WIXSTDBA_VARIABLE_BUNDLE_FILE_VERSION, uliVersion.QuadPart); + BalExitOnFailure(hr, "Failed to set WixBundleFileVersion variable."); - // Calculate the window style based on the theme style and command display value. - dwWindowStyle = m_pTheme->dwStyle; - if (BOOTSTRAPPER_DISPLAY_NONE >= m_command.display) - { - dwWindowStyle &= ~WS_VISIBLE; - } + LExit: + ReleaseStr(sczCurrentPath); - // Don't show the window if there is a splash screen (it will be made visible when the splash screen is hidden) - if (::IsWindow(m_command.hwndSplashScreen)) - { - dwWindowStyle &= ~WS_VISIBLE; - } - - // Center the window on the monitor with the mouse. - if (::GetCursorPos(&ptCursor)) - { - hMonitor = ::MonitorFromPoint(ptCursor, MONITOR_DEFAULTTONEAREST); - if (hMonitor) - { - mi.cbSize = sizeof(mi); - if (::GetMonitorInfoW(hMonitor, &mi)) - { - x = mi.rcWork.left + (mi.rcWork.right - mi.rcWork.left - m_pTheme->nWidth) / 2; - y = mi.rcWork.top + (mi.rcWork.bottom - mi.rcWork.top - m_pTheme->nHeight) / 2; - } - } - } - - m_hWnd = ::CreateWindowExW(0, wc.lpszClassName, m_pTheme->sczCaption, dwWindowStyle, x, y, m_pTheme->nWidth, m_pTheme->nHeight, HWND_DESKTOP, NULL, m_hModule, this); - ExitOnNullWithLastError(m_hWnd, hr, "Failed to create window."); - - hr = S_OK; - - LExit: - return hr; - } + return hr; + } - // - // InitializeTaskbarButton - initializes taskbar button for progress. - // - void InitializeTaskbarButton() - { - HRESULT hr = S_OK; + // + // CreateMainWindow - creates the main install window. + // + HRESULT CreateMainWindow() + { + HRESULT hr = S_OK; + HICON hIcon = reinterpret_cast(m_pTheme->hIcon); + WNDCLASSW wc = { }; + DWORD dwWindowStyle = 0; + int x = CW_USEDEFAULT; + int y = CW_USEDEFAULT; + POINT ptCursor = { }; + HMONITOR hMonitor = NULL; + MONITORINFO mi = { }; - hr = ::CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, __uuidof(ITaskbarList3), reinterpret_cast(&m_pTaskbarList)); - if (REGDB_E_CLASSNOTREG == hr) // not supported before Windows 7 - { - ExitFunction1(hr = S_OK); - } - BalExitOnFailure(hr, "Failed to create ITaskbarList3. Continuing."); + // If the theme did not provide an icon, try using the icon from the bundle engine. + if (!hIcon) + { + HMODULE hBootstrapperEngine = ::GetModuleHandleW(NULL); + if (hBootstrapperEngine) + { + hIcon = ::LoadIconW(hBootstrapperEngine, MAKEINTRESOURCEW(1)); + } + } - m_uTaskbarButtonCreatedMessage = ::RegisterWindowMessageW(L"TaskbarButtonCreated"); - BalExitOnNullWithLastError(m_uTaskbarButtonCreatedMessage, hr, "Failed to get TaskbarButtonCreated message. Continuing."); + // Register the window class and create the window. + wc.lpfnWndProc = CWixStandardBootstrapperApplication::WndProc; + wc.hInstance = m_hModule; + wc.hIcon = hIcon; + wc.hCursor = ::LoadCursorW(NULL, (LPCWSTR)IDC_ARROW); + wc.hbrBackground = m_pTheme->rgFonts[m_pTheme->dwFontId].hBackground; + wc.lpszMenuName = NULL; + wc.lpszClassName = WIXSTDBA_WINDOW_CLASS; + if (!::RegisterClassW(&wc)) + { + ExitWithLastError(hr, "Failed to register window."); + } - LExit: - return; - } + m_fRegistered = TRUE; - // - // DestroyMainWindow - clean up all the window registration. - // - void DestroyMainWindow() - { - if (::IsWindow(m_hWnd)) - { - ::DestroyWindow(m_hWnd); - m_hWnd = NULL; - m_fTaskbarButtonOK = FALSE; - } + // Calculate the window style based on the theme style and command display value. + dwWindowStyle = m_pTheme->dwStyle; + if (BOOTSTRAPPER_DISPLAY_NONE >= m_command.display) + { + dwWindowStyle &= ~WS_VISIBLE; + } - if (m_fRegistered) - { - ::UnregisterClassW(WIXSTDBA_WINDOW_CLASS, m_hModule); - m_fRegistered = FALSE; - } - } + // Don't show the window if there is a splash screen (it will be made visible when the splash screen is hidden) + if (::IsWindow(m_command.hwndSplashScreen)) + { + dwWindowStyle &= ~WS_VISIBLE; + } + + // Center the window on the monitor with the mouse. + if (::GetCursorPos(&ptCursor)) + { + hMonitor = ::MonitorFromPoint(ptCursor, MONITOR_DEFAULTTONEAREST); + if (hMonitor) + { + mi.cbSize = sizeof(mi); + if (::GetMonitorInfoW(hMonitor, &mi)) + { + x = mi.rcWork.left + (mi.rcWork.right - mi.rcWork.left - m_pTheme->nWidth) / 2; + y = mi.rcWork.top + (mi.rcWork.bottom - mi.rcWork.top - m_pTheme->nHeight) / 2; + } + } + } + + m_hWnd = ::CreateWindowExW(0, wc.lpszClassName, m_pTheme->sczCaption, dwWindowStyle, x, y, m_pTheme->nWidth, m_pTheme->nHeight, HWND_DESKTOP, NULL, m_hModule, this); + ExitOnNullWithLastError(m_hWnd, hr, "Failed to create window."); + + hr = S_OK; + + LExit: + return hr; + } - // - // WndProc - standard windows message handler. - // - static LRESULT CALLBACK WndProc( - __in HWND hWnd, - __in UINT uMsg, - __in WPARAM wParam, - __in LPARAM lParam - ) - { + // + // InitializeTaskbarButton - initializes taskbar button for progress. + // + void InitializeTaskbarButton() + { + HRESULT hr = S_OK; + + hr = ::CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, __uuidof(ITaskbarList3), reinterpret_cast(&m_pTaskbarList)); + if (REGDB_E_CLASSNOTREG == hr) // not supported before Windows 7 + { + ExitFunction1(hr = S_OK); + } + BalExitOnFailure(hr, "Failed to create ITaskbarList3. Continuing."); + + m_uTaskbarButtonCreatedMessage = ::RegisterWindowMessageW(L"TaskbarButtonCreated"); + BalExitOnNullWithLastError(m_uTaskbarButtonCreatedMessage, hr, "Failed to get TaskbarButtonCreated message. Continuing."); + + LExit: + return; + } + + // + // DestroyMainWindow - clean up all the window registration. + // + void DestroyMainWindow() + { + if (::IsWindow(m_hWnd)) + { + ::DestroyWindow(m_hWnd); + m_hWnd = NULL; + m_fTaskbarButtonOK = FALSE; + } + + if (m_fRegistered) + { + ::UnregisterClassW(WIXSTDBA_WINDOW_CLASS, m_hModule); + m_fRegistered = FALSE; + } + } + + + // + // WndProc - standard windows message handler. + // + static LRESULT CALLBACK WndProc( + __in HWND hWnd, + __in UINT uMsg, + __in WPARAM wParam, + __in LPARAM lParam + ) + { #pragma warning(suppress:4312) - CWixStandardBootstrapperApplication* pBA = reinterpret_cast(::GetWindowLongPtrW(hWnd, GWLP_USERDATA)); + CWixStandardBootstrapperApplication* pBA = reinterpret_cast(::GetWindowLongPtrW(hWnd, GWLP_USERDATA)); - switch (uMsg) - { - case WM_NCCREATE: - { - LPCREATESTRUCT lpcs = reinterpret_cast(lParam); - pBA = reinterpret_cast(lpcs->lpCreateParams); + switch (uMsg) + { + case WM_NCCREATE: + { + LPCREATESTRUCT lpcs = reinterpret_cast(lParam); + pBA = reinterpret_cast(lpcs->lpCreateParams); #pragma warning(suppress:4244) - ::SetWindowLongPtrW(hWnd, GWLP_USERDATA, reinterpret_cast(pBA)); - } - break; - - case WM_NCDESTROY: - { - LRESULT lres = ThemeDefWindowProc(pBA ? pBA->m_pTheme : NULL, hWnd, uMsg, wParam, lParam); - ::SetWindowLongPtrW(hWnd, GWLP_USERDATA, 0); - return lres; - } - - case WM_CREATE: - if (!pBA->OnCreate(hWnd)) - { - return -1; - } - break; - - case WM_QUERYENDSESSION: - return IDCANCEL != pBA->OnSystemShutdown(static_cast(lParam), IDCANCEL); - - case WM_CLOSE: - // If the user chose not to close, do *not* let the default window proc handle the message. - if (!pBA->OnClose()) - { - return 0; - } - break; - - case WM_DESTROY: - ::PostQuitMessage(0); - break; - - case WM_WIXSTDBA_SHOW_HELP: - pBA->OnShowHelp(); - return 0; - - case WM_WIXSTDBA_DETECT_PACKAGES: - pBA->OnDetect(); - return 0; - - case WM_WIXSTDBA_PLAN_PACKAGES: - pBA->OnPlan(static_cast(lParam)); - return 0; - - case WM_WIXSTDBA_APPLY_PACKAGES: - pBA->OnApply(); - return 0; - - case WM_WIXSTDBA_CHANGE_STATE: - pBA->OnChangeState(static_cast(lParam)); - return 0; - - case WM_COMMAND: - switch (LOWORD(wParam)) - { - case WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX: - pBA->OnClickAcceptCheckbox(); - return 0; - - case WIXSTDBA_CONTROL_OPTIONS_BUTTON: - pBA->OnClickOptionsButton(); - return 0; - - case WIXSTDBA_CONTROL_BROWSE_BUTTON: - pBA->OnClickOptionsBrowseButton(WIXSTDBA_CONTROL_BROWSE_BUTTON); - return 0; - - case WIXSTDBA_CONTROL_BROWSE_BUTTON2: - pBA->OnClickOptionsBrowseButton(WIXSTDBA_CONTROL_BROWSE_BUTTON2); - return 0; - - case WIXSTDBA_CONTROL_OK_BUTTON: - pBA->OnClickOptionsOkButton(); - return 0; - - case WIXSTDBA_CONTROL_CANCEL_BUTTON: - pBA->OnClickOptionsCancelButton(); - return 0; - - case WIXSTDBA_CONTROL_INSTALL_BUTTON: - pBA->OnClickInstallButton(); - return 0; - - case WIXSTDBA_CONTROL_REPAIR_BUTTON: - pBA->OnClickRepairButton(); - return 0; - - case WIXSTDBA_CONTROL_UNINSTALL_BUTTON: - pBA->OnClickUninstallButton(); - return 0; - - case WIXSTDBA_CONTROL_LAUNCH_BUTTON: - pBA->OnClickLaunchButton(); - return 0; - - case WIXSTDBA_CONTROL_SUCCESS_RESTART_BUTTON: __fallthrough; - case WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON: - pBA->OnClickRestartButton(); - return 0; - - case WIXSTDBA_CONTROL_HELP_CANCEL_BUTTON: __fallthrough; - - case WIXSTDBA_CONTROL_WELCOME_CANCEL_BUTTON: __fallthrough; - case WIXSTDBA_CONTROL_MODIFY_CANCEL_BUTTON: __fallthrough; - case WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON: __fallthrough; - case WIXSTDBA_CONTROL_SUCCESS_CANCEL_BUTTON: __fallthrough; - case WIXSTDBA_CONTROL_FAILURE_CANCEL_BUTTON: __fallthrough; - case WIXSTDBA_CONTROL_CLOSE_BUTTON: - pBA->OnClickCloseButton(); - return 0; - } - break; - - case WM_NOTIFY: - if (lParam) - { - LPNMHDR pnmhdr = reinterpret_cast(lParam); - switch (pnmhdr->code) - { - case NM_CLICK: __fallthrough; - case NM_RETURN: - switch (static_cast(pnmhdr->idFrom)) - { - case WIXSTDBA_CONTROL_EULA_LINK: - pBA->OnClickEulaLink(); - return 1; - case WIXSTDBA_CONTROL_FAILURE_LOGFILE_LINK: - pBA->OnClickLogFileLink(); - return 1; - case WIXSTDBA_CONTROL_UPGRADE_LINK: - pBA->OnClickUpgradeLink(); - return 1; - } - } - } - break; - } - - if (pBA && pBA->m_pTaskbarList && uMsg == pBA->m_uTaskbarButtonCreatedMessage) - { - pBA->m_fTaskbarButtonOK = TRUE; - return 0; - } - - return ThemeDefWindowProc(pBA ? pBA->m_pTheme : NULL, hWnd, uMsg, wParam, lParam); - } - - - // - // OnCreate - finishes loading the theme. - // - BOOL OnCreate( - __in HWND hWnd - ) - { - HRESULT hr = S_OK; - LPWSTR sczText = NULL; - LPWSTR sczLicenseFormatted = NULL; - LPWSTR sczLicensePath = NULL; - LPWSTR sczLicenseDirectory = NULL; - LPWSTR sczLicenseFilename = NULL; - - hr = ThemeLoadControls(m_pTheme, hWnd, vrgInitControls, countof(vrgInitControls)); - BalExitOnFailure(hr, "Failed to load theme controls."); - - C_ASSERT(COUNT_WIXSTDBA_PAGE == countof(vrgwzPageNames)); - C_ASSERT(countof(m_rgdwPageIds) == countof(vrgwzPageNames)); - - ThemeGetPageIds(m_pTheme, vrgwzPageNames, m_rgdwPageIds, countof(m_rgdwPageIds)); - - // Initialize the text on all "application" (non-page) controls. - for (DWORD i = 0; i < m_pTheme->cControls; ++i) - { - THEME_CONTROL* pControl = m_pTheme->rgControls + i; - if (!pControl->wPageId && pControl->sczText && *pControl->sczText) - { - HRESULT hrFormat = BalFormatString(pControl->sczText, &sczText); - if (SUCCEEDED(hrFormat)) - { - ThemeSetTextControl(m_pTheme, pControl->wId, sczText); - } - } - } - - // Load the RTF EULA control with text if the control exists. - if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_EULA_RICHEDIT)) - { - hr = (m_sczLicenseFile && *m_sczLicenseFile) ? S_OK : E_INVALIDDATA; - if (SUCCEEDED(hr)) - { - hr = StrAllocString(&sczLicenseFormatted, m_sczLicenseFile, 0); - if (SUCCEEDED(hr)) - { - hr = LocLocalizeString(m_pWixLoc, &sczLicenseFormatted); - if (SUCCEEDED(hr)) - { - hr = BalFormatString(sczLicenseFormatted, &sczLicenseFormatted); - if (SUCCEEDED(hr)) - { - hr = PathRelativeToModule(&sczLicensePath, sczLicenseFormatted, m_hModule); - if (SUCCEEDED(hr)) - { - hr = PathGetDirectory(sczLicensePath, &sczLicenseDirectory); - if (SUCCEEDED(hr)) - { - hr = StrAllocString(&sczLicenseFilename, PathFile(sczLicenseFormatted), 0); - if (SUCCEEDED(hr)) - { - hr = LocProbeForFile(sczLicenseDirectory, sczLicenseFilename, m_sczLanguage, &sczLicensePath); - if (SUCCEEDED(hr)) - { - hr = ThemeLoadRichEditFromFile(m_pTheme, WIXSTDBA_CONTROL_EULA_RICHEDIT, sczLicensePath, m_hModule); - } - } - } - } - } - } - } - } - - if (FAILED(hr)) - { - BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Failed to load file into license richedit control from path '%ls' manifest value: %ls", sczLicensePath, m_sczLicenseFile); - hr = S_OK; - } - } - - LExit: - ReleaseStr(sczLicenseFilename); - ReleaseStr(sczLicenseDirectory); - ReleaseStr(sczLicensePath); - ReleaseStr(sczLicenseFormatted); - ReleaseStr(sczText); - - return SUCCEEDED(hr); - } - - - // - // OnShowHelp - display the help page. - // - void OnShowHelp() - { - SetState(WIXSTDBA_STATE_HELP, S_OK); - - // If the UI should be visible, display it now and hide the splash screen - if (BOOTSTRAPPER_DISPLAY_NONE < m_command.display) - { - ::ShowWindow(m_pTheme->hwndParent, SW_SHOW); - } - - m_pEngine->CloseSplashScreen(); - - return; - } - - - // - // OnDetect - start the processing of packages. - // - void OnDetect() - { - HRESULT hr = S_OK; - - if (m_pBAFunction) - { - hr = m_pBAFunction->OnDetect(); - BalExitOnFailure(hr, "Failed calling detect BA function."); - } - - SetState(WIXSTDBA_STATE_DETECTING, hr); - - // If the UI should be visible, display it now and hide the splash screen - if (BOOTSTRAPPER_DISPLAY_NONE < m_command.display) - { - ::ShowWindow(m_pTheme->hwndParent, SW_SHOW); - } - - m_pEngine->CloseSplashScreen(); - - // Tell the core we're ready for the packages to be processed now. - hr = m_pEngine->Detect(); - BalExitOnFailure(hr, "Failed to start detecting chain."); - - LExit: - if (FAILED(hr)) - { - SetState(WIXSTDBA_STATE_DETECTING, hr); - } - - return; - } - - - // - // OnPlan - plan the detected changes. - // - void OnPlan( - __in BOOTSTRAPPER_ACTION action - ) - { - HRESULT hr = S_OK; - - m_plannedAction = action; - - // If we are going to apply a downgrade, bail. - if (m_fDowngrading && BOOTSTRAPPER_ACTION_UNINSTALL < action) - { - if (m_fSuppressDowngradeFailure) - { - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "A newer version of this product is installed but downgrade failure has been suppressed; continuing..."); - } - else - { - hr = HRESULT_FROM_WIN32(ERROR_PRODUCT_VERSION); - BalExitOnFailure(hr, "Cannot install a product when a newer version is installed."); - } - } - - SetState(WIXSTDBA_STATE_PLANNING, hr); - - if (m_pBAFunction) - { - m_pBAFunction->OnPlan(); - } - - hr = m_pEngine->Plan(action); - BalExitOnFailure(hr, "Failed to start planning packages."); - - LExit: - if (FAILED(hr)) - { - SetState(WIXSTDBA_STATE_PLANNING, hr); - } - - return; - } - - - // - // OnApply - apply the packages. - // - void OnApply() - { - HRESULT hr = S_OK; - - SetState(WIXSTDBA_STATE_APPLYING, hr); - SetProgressState(hr); - SetTaskbarButtonProgress(0); - - hr = m_pEngine->Apply(m_hWnd); - BalExitOnFailure(hr, "Failed to start applying packages."); - - ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON, TRUE); // ensure the cancel button is enabled before starting. - - LExit: - if (FAILED(hr)) - { - SetState(WIXSTDBA_STATE_APPLYING, hr); - } - - return; - } - - - // - // OnChangeState - change state. - // - void OnChangeState( - __in WIXSTDBA_STATE state - ) - { - WIXSTDBA_STATE stateOld = m_state; - DWORD dwOldPageId = 0; - DWORD dwNewPageId = 0; - LPWSTR sczText = NULL; - LPWSTR sczUnformattedText = NULL; - LPWSTR sczControlState = NULL; - LPWSTR sczControlName = NULL; - - m_state = state; - - // If our install is at the end (success or failure) and we're not showing full UI or - // we successfully installed the prerequisite then exit (prompt for restart if required). - if ((WIXSTDBA_STATE_APPLIED <= m_state && BOOTSTRAPPER_DISPLAY_FULL > m_command.display) || - (WIXSTDBA_STATE_APPLIED == m_state && m_fPrereq)) - { - // If a restart was required but we were not automatically allowed to - // accept the reboot then do the prompt. - if (m_fRestartRequired && !m_fAllowRestart) - { - StrAllocFromError(&sczUnformattedText, HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_REQUIRED), NULL); - - int nResult = ::MessageBoxW(m_hWnd, sczUnformattedText ? sczUnformattedText : L"The requested operation is successful. Changes will not be effective until the system is rebooted.", m_pTheme->sczCaption, MB_ICONEXCLAMATION | MB_OKCANCEL); - m_fAllowRestart = (IDOK == nResult); + ::SetWindowLongPtrW(hWnd, GWLP_USERDATA, reinterpret_cast(pBA)); + } + break; + + case WM_NCDESTROY: + { + LRESULT lres = ThemeDefWindowProc(pBA ? pBA->m_pTheme : NULL, hWnd, uMsg, wParam, lParam); + ::SetWindowLongPtrW(hWnd, GWLP_USERDATA, 0); + ::PostQuitMessage(0); + return lres; + } + + case WM_CREATE: + if (!pBA->OnCreate(hWnd)) + { + return -1; + } + break; + + case WM_QUERYENDSESSION: + return IDCANCEL != pBA->OnSystemShutdown(static_cast(lParam), IDCANCEL); + + case WM_CLOSE: + // If the user chose not to close, do *not* let the default window proc handle the message. + if (!pBA->OnClose()) + { + return 0; + } + break; + + case WM_WIXSTDBA_SHOW_HELP: + pBA->OnShowHelp(); + return 0; + + case WM_WIXSTDBA_DETECT_PACKAGES: + pBA->OnDetect(); + return 0; + + case WM_WIXSTDBA_PLAN_PACKAGES: + pBA->OnPlan(static_cast(lParam)); + return 0; + + case WM_WIXSTDBA_APPLY_PACKAGES: + pBA->OnApply(); + return 0; + + case WM_WIXSTDBA_CHANGE_STATE: + pBA->OnChangeState(static_cast(lParam)); + return 0; + + case WM_WIXSTDBA_SHOW_STATE_MODAL: + return pBA->OnShowStateModal(static_cast(lParam)); + + case WM_WIXSTDBA_SHOW_FAILURE: + pBA->OnShowFailure(); + return 0; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX: + pBA->OnClickAcceptCheckbox(); + return 0; + + case WIXSTDBA_CONTROL_OPTIONS_BUTTON: + pBA->OnClickOptionsButton(); + return 0; + + case WIXSTDBA_CONTROL_BROWSE_BUTTON: + pBA->OnClickOptionsBrowseButton(WIXSTDBA_CONTROL_BROWSE_BUTTON); + return 0; + + case WIXSTDBA_CONTROL_BROWSE_BUTTON2: + pBA->OnClickOptionsBrowseButton(WIXSTDBA_CONTROL_BROWSE_BUTTON2); + return 0; + + case WIXSTDBA_CONTROL_OK_BUTTON: + pBA->OnClickOptionsOkButton(); + return 0; + + case WIXSTDBA_CONTROL_CANCEL_BUTTON: + pBA->OnClickOptionsCancelButton(); + return 0; + + case WIXSTDBA_CONTROL_INSTALL_BUTTON: + pBA->OnClickInstallButton(); + return 0; + + case WIXSTDBA_CONTROL_REPAIR_BUTTON: + pBA->OnClickRepairButton(); + return 0; + + case WIXSTDBA_CONTROL_UNINSTALL_BUTTON: + pBA->OnClickUninstallButton(); + return 0; + + case WIXSTDBA_CONTROL_LAUNCH_BUTTON: + pBA->OnClickLaunchButton(); + return 0; + + case WIXSTDBA_CONTROL_SUCCESS_RESTART_BUTTON: __fallthrough; + case WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON: + pBA->OnClickRestartButton(); + return 0; + + //Files in use + case WIXSTDBA_CONTROL_FILESINUSE_OK_BUTTON: + pBA->OnClickFilesInUseOkButton(); + return 0; + + case WIXSTDBA_CONTROL_HELP_CANCEL_BUTTON: __fallthrough; + case WIXSTDBA_CONTROL_WELCOME_CANCEL_BUTTON: __fallthrough; + case WIXSTDBA_CONTROL_MODIFY_CANCEL_BUTTON: __fallthrough; + case WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON: __fallthrough; + case WIXSTDBA_CONTROL_SUCCESS_CANCEL_BUTTON: __fallthrough; + case WIXSTDBA_CONTROL_FAILURE_CANCEL_BUTTON: __fallthrough; + case WIXSTDBA_CONTROL_FILESINUSE_CANCEL_BUTTON: __fallthrough; + case WIXSTDBA_CONTROL_CLOSE_BUTTON: + pBA->OnClickCloseButton(); + return 0; + } + break; + + case WM_NOTIFY: + if (lParam) + { + LPNMHDR pnmhdr = reinterpret_cast(lParam); + switch (pnmhdr->code) + { + case NM_CLICK: __fallthrough; + case NM_RETURN: + switch (static_cast(pnmhdr->idFrom)) + { + case WIXSTDBA_CONTROL_EULA_LINK: + pBA->OnClickEulaLink(); + return 1; + case WIXSTDBA_CONTROL_FAILURE_LOGFILE_LINK: + pBA->OnClickLogFileLink(); + return 1; + case WIXSTDBA_CONTROL_UPGRADE_LINK: + pBA->OnClickUpgradeLink(); + return 1; + } + } + } + break; + } + + if (pBA && pBA->m_pTaskbarList && uMsg == pBA->m_uTaskbarButtonCreatedMessage) + { + pBA->m_fTaskbarButtonOK = TRUE; + return 0; + } + + return ThemeDefWindowProc(pBA ? pBA->m_pTheme : NULL, hWnd, uMsg, wParam, lParam); + } + + + // + // OnCreate - finishes loading the theme. + // + BOOL OnCreate( + __in HWND hWnd + ) + { + HRESULT hr = S_OK; + LPWSTR sczText = NULL; + LPWSTR sczLicenseFormatted = NULL; + LPWSTR sczLicensePath = NULL; + LPWSTR sczLicenseDirectory = NULL; + LPWSTR sczLicenseFilename = NULL; + + hr = ThemeLoadControls(m_pTheme, hWnd, vrgInitControls, countof(vrgInitControls)); + BalExitOnFailure(hr, "Failed to load theme controls."); + + C_ASSERT(COUNT_WIXSTDBA_PAGE == countof(vrgwzPageNames)); + C_ASSERT(countof(m_rgdwPageIds) == countof(vrgwzPageNames)); + + ThemeGetPageIds(m_pTheme, vrgwzPageNames, m_rgdwPageIds, countof(m_rgdwPageIds)); + + // Initialize the text on all "application" (non-page) controls. + for (DWORD i = 0; i < m_pTheme->cControls; ++i) + { + THEME_CONTROL* pControl = m_pTheme->rgControls + i; + if (!pControl->wPageId && pControl->sczText && *pControl->sczText) + { + // If the wix developer is showing a hidden variable in the UI, then obviously they don't care about keeping it safe + // so don't go down the rabbit hole of making sure that this is securely freed. + HRESULT hrFormat = BalFormatString(pControl->sczText, &sczText); + if (SUCCEEDED(hrFormat)) + { + ThemeSetTextControl(m_pTheme, pControl->wId, sczText); + } + } + } + + // Load the RTF EULA control with text if the control exists. + if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_EULA_RICHEDIT)) + { + hr = (m_sczLicenseFile && *m_sczLicenseFile) ? S_OK : E_INVALIDDATA; + if (SUCCEEDED(hr)) + { + hr = StrAllocString(&sczLicenseFormatted, m_sczLicenseFile, 0); + if (SUCCEEDED(hr)) + { + hr = LocLocalizeString(m_pWixLoc, &sczLicenseFormatted); + if (SUCCEEDED(hr)) + { + // Assume there is no hidden variables to be formatted + // so don't worry about securely freeing it. + hr = BalFormatString(sczLicenseFormatted, &sczLicenseFormatted); + if (SUCCEEDED(hr)) + { + hr = PathRelativeToModule(&sczLicensePath, sczLicenseFormatted, m_hModule); + if (SUCCEEDED(hr)) + { + hr = PathGetDirectory(sczLicensePath, &sczLicenseDirectory); + if (SUCCEEDED(hr)) + { + hr = StrAllocString(&sczLicenseFilename, PathFile(sczLicenseFormatted), 0); + if (SUCCEEDED(hr)) + { + hr = LocProbeForFile(sczLicenseDirectory, sczLicenseFilename, m_sczLanguage, &sczLicensePath); + if (SUCCEEDED(hr)) + { + hr = ThemeLoadRichEditFromFile(m_pTheme, WIXSTDBA_CONTROL_EULA_RICHEDIT, sczLicensePath, m_hModule); + } + } + } + } + } + } + } + } + + if (FAILED(hr)) + { + BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Failed to load file into license richedit control from path '%ls' manifest value: %ls", sczLicensePath, m_sczLicenseFile); + hr = S_OK; + } + } + + LExit: + ReleaseStr(sczLicenseFilename); + ReleaseStr(sczLicenseDirectory); + ReleaseStr(sczLicensePath); + ReleaseStr(sczLicenseFormatted); + ReleaseStr(sczText); + + return SUCCEEDED(hr); + } + + + // + // OnShowFailure - display the failure page. + // + void OnShowFailure() + { + SetState(WIXSTDBA_STATE_FAILED, S_OK); + + // If the UI should be visible, display it now and hide the splash screen + if (BOOTSTRAPPER_DISPLAY_NONE < m_command.display) + { + ::ShowWindow(m_pTheme->hwndParent, SW_SHOW); + } + + m_pEngine->CloseSplashScreen(); + + return; + } + + + // + // OnShowHelp - display the help page. + // + void OnShowHelp() + { + SetState(WIXSTDBA_STATE_HELP, S_OK); + + // If the UI should be visible, display it now and hide the splash screen + if (BOOTSTRAPPER_DISPLAY_NONE < m_command.display) + { + ::ShowWindow(m_pTheme->hwndParent, SW_SHOW); + } + + m_pEngine->CloseSplashScreen(); + + return; + } + + + // + // OnShowStateModal - display the given state modal. + // + int OnShowStateModal(WIXSTDBA_STATE state) + { + MSG msg = {}; + int nResult = IDERROR; + BOOL fDone = FALSE; + TBPFLAG flag = TBPF_PAUSED; + + // The state before showing our page. + WIXSTDBA_STATE stateBeforeModal = m_state; + + // Set taskbar to paused. + SetTaskbarButtonState(flag); + SetState(state, S_OK); + + ++m_cModalPages; + + // Inner message loop + while (!fDone && !IsCanceled()) + { + ::WaitMessage(); + + while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) + { + if (WM_WIXSTDBA_CLOSE_STATE_MODAL == msg.message) + { + fDone = TRUE; + nResult = static_cast(msg.lParam); + + break; + } + else if (WM_QUIT == msg.message) + { + // Exit during modal page. + fDone = TRUE; + + //Forward quit message to main message loop + ::PostQuitMessage(0); + + break; + } + else if (!ThemeHandleKeyboardMessage(m_pTheme, msg.hwnd, &msg)) + { + ::TranslateMessage(&msg); + ::DispatchMessageW(&msg); + } + } + } + + --m_cModalPages; + + //Restore taskbar state + flag = TBPF_NORMAL; + SetTaskbarButtonState(flag); + + //Restore previous state + SetState(stateBeforeModal, S_OK); + + return IsCanceled() ? IDCANCEL : nResult; + } + + + // + // OnDetect - start the processing of packages. + // + void OnDetect() + { + HRESULT hr = S_OK; + + if (m_pBAFunction) + { + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Running detect BA function"); + hr = m_pBAFunction->OnDetect(); + BalExitOnFailure(hr, "Failed calling detect BA function."); + } + + SetState(WIXSTDBA_STATE_DETECTING, hr); + + // If the UI should be visible, display it now and hide the splash screen + if (BOOTSTRAPPER_DISPLAY_NONE < m_command.display) + { + ::ShowWindow(m_pTheme->hwndParent, SW_SHOW); + } + + m_pEngine->CloseSplashScreen(); + + // Tell the core we're ready for the packages to be processed now. + hr = m_pEngine->Detect(); + BalExitOnFailure(hr, "Failed to start detecting chain."); + + LExit: + if (FAILED(hr)) + { + SetState(WIXSTDBA_STATE_DETECTING, hr); + } + + return; + } + + + // + // OnPlan - plan the detected changes. + // + void OnPlan( + __in BOOTSTRAPPER_ACTION action + ) + { + HRESULT hr = S_OK; + + m_plannedAction = action; + + // If we are going to apply a downgrade, bail. + if (m_fDowngrading && BOOTSTRAPPER_ACTION_UNINSTALL < action) + { + if (m_fSuppressDowngradeFailure) + { + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "A newer version of this product is installed but downgrade failure has been suppressed; continuing..."); + } + else + { + hr = HRESULT_FROM_WIN32(ERROR_PRODUCT_VERSION); + BalExitOnFailure(hr, "Cannot install a product when a newer version is installed."); + } + } + + SetState(WIXSTDBA_STATE_PLANNING, hr); + + if (m_pBAFunction) + { + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Running plan BA function"); + m_pBAFunction->OnPlan(); + } + + hr = m_pEngine->Plan(action); + BalExitOnFailure(hr, "Failed to start planning packages."); + + LExit: + if (FAILED(hr)) + { + SetState(WIXSTDBA_STATE_PLANNING, hr); + } + + return; + } + + + // + // OnApply - apply the packages. + // + void OnApply() + { + HRESULT hr = S_OK; + + SetState(WIXSTDBA_STATE_APPLYING, hr); + SetProgressState(hr); + SetTaskbarButtonProgress(0); + + hr = m_pEngine->Apply(m_hWnd); + BalExitOnFailure(hr, "Failed to start applying packages."); + + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON, TRUE); // ensure the cancel button is enabled before starting. + + LExit: + if (FAILED(hr)) + { + SetState(WIXSTDBA_STATE_APPLYING, hr); + } + + return; + } + + + // + // OnChangeState - change state. + // + void OnChangeState( + __in WIXSTDBA_STATE state + ) + { + WIXSTDBA_STATE stateOld = m_state; + DWORD dwOldPageId = 0; + DWORD dwNewPageId = 0; + LPWSTR sczText = NULL; + LPWSTR sczUnformattedText = NULL; + LPWSTR sczControlState = NULL; + LPWSTR sczControlName = NULL; + + m_state = state; + + // If our install is at the end (success or failure) and we're not showing full UI or + // we successfully installed the prerequisite then exit (prompt for restart if required). + if ((WIXSTDBA_STATE_APPLIED <= m_state && BOOTSTRAPPER_DISPLAY_FULL > m_command.display) || + (WIXSTDBA_STATE_APPLIED == m_state && m_fPrereq)) + { + // If a restart was required but we were not automatically allowed to + // accept the reboot then do the prompt. + if (m_fRestartRequired && !m_fAllowRestart) + { + StrAllocFromError(&sczUnformattedText, HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_REQUIRED), NULL); + + int nResult = ::MessageBoxW(m_hWnd, sczUnformattedText ? sczUnformattedText : L"The requested operation is successful. Changes will not be effective until the system is rebooted.", m_pTheme->sczCaption, MB_ICONEXCLAMATION | MB_OKCANCEL); + m_fAllowRestart = (IDOK == nResult); } if ((BOOTSTRAPPER_DISPLAY_PASSIVE == m_command.display && m_fLaunchPassive) || (m_command.display == BOOTSTRAPPER_DISPLAY_NONE && m_fLaunchQuiet)) @@ -1927,1049 +2412,1333 @@ private: // privates } // Quietly exit. - ::PostMessageW(m_hWnd, WM_CLOSE, 0, 0); - } - else // try to change the pages. - { - DeterminePageId(stateOld, &dwOldPageId); - DeterminePageId(m_state, &dwNewPageId); - - if (dwOldPageId != dwNewPageId) - { - // Enable disable controls per-page. - if (m_rgdwPageIds[WIXSTDBA_PAGE_INSTALL] == dwNewPageId) // on the "Install" page, ensure the install button is enabled/disabled correctly. - { - LONGLONG llElevated = 0; - if (m_Bundle.fPerMachine) - { - BalGetNumericVariable(WIXBUNDLE_VARIABLE_ELEVATED, &llElevated); - } - ThemeControlElevates(m_pTheme, WIXSTDBA_CONTROL_INSTALL_BUTTON, (m_Bundle.fPerMachine && !llElevated)); - - // If the EULA control exists, show it only if a license URL is provided as well. - if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_EULA_LINK)) - { - BOOL fEulaLink = (m_sczLicenseUrl && *m_sczLicenseUrl); - ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_EULA_LINK, fEulaLink); - ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX, fEulaLink); - } - - BOOL fAcceptedLicense = !ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX) || !ThemeControlEnabled(m_pTheme, WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX) || ThemeIsControlChecked(m_pTheme, WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX); - ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_INSTALL_BUTTON, fAcceptedLicense); - - // If there is an "Options" page, the "Options" button exists, and it hasn't been suppressed, then enable the button. - BOOL fOptionsEnabled = m_rgdwPageIds[WIXSTDBA_PAGE_OPTIONS] && ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_OPTIONS_BUTTON) && !m_fSuppressOptionsUI; - ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_OPTIONS_BUTTON, fOptionsEnabled); - - // Show/Hide the version label if it exists. - if (m_rgdwPageIds[WIXSTDBA_PAGE_OPTIONS] && ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_VERSION_LABEL) && !m_fShowVersion) - { - ThemeShowControl(m_pTheme, WIXSTDBA_CONTROL_VERSION_LABEL, SW_HIDE); - } - } - else if (m_rgdwPageIds[WIXSTDBA_PAGE_MODIFY] == dwNewPageId) - { - ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_REPAIR_BUTTON, !m_fSuppressRepair); - } - else if (m_rgdwPageIds[WIXSTDBA_PAGE_OPTIONS] == dwNewPageId) - { - HRESULT hr = BalGetStringVariable(WIXSTDBA_VARIABLE_INSTALL_FOLDER, &sczUnformattedText); - if (SUCCEEDED(hr)) - { - BalFormatString(sczUnformattedText, &sczText); - ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_FOLDER_EDITBOX, sczText); - } - - hr = BalGetStringVariable(WIXSTDBA_VARIABLE_INSTALL_FOLDER2, &sczUnformattedText); - if (SUCCEEDED(hr)) - { - BalFormatString(sczUnformattedText, &sczText); - ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_FOLDER_EDITBOX2, sczText); - } - } - else if (m_rgdwPageIds[WIXSTDBA_PAGE_SUCCESS] == dwNewPageId) // on the "Success" page, check if the restart or launch button should be enabled. - { - BOOL fShowRestartButton = FALSE; - BOOL fLaunchTargetExists = FALSE; - if (m_fRestartRequired) - { - if (BOOTSTRAPPER_RESTART_PROMPT == m_command.restart) - { - fShowRestartButton = TRUE; - } - } - else if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_LAUNCH_BUTTON)) - { - fLaunchTargetExists = BalStringVariableExists(WIXSTDBA_VARIABLE_LAUNCH_TARGET_PATH); - } - - ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_LAUNCH_BUTTON, fLaunchTargetExists && BOOTSTRAPPER_ACTION_UNINSTALL < m_plannedAction); - ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_SUCCESS_RESTART_TEXT, fShowRestartButton); - ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_SUCCESS_RESTART_BUTTON, fShowRestartButton); - } - else if (m_rgdwPageIds[WIXSTDBA_PAGE_FAILURE] == dwNewPageId) // on the "Failure" page, show error message and check if the restart button should be enabled. - { - BOOL fShowLogLink = (m_Bundle.sczLogVariable && *m_Bundle.sczLogVariable); // if there is a log file variable then we'll assume the log file exists. - BOOL fShowErrorMessage = FALSE; - BOOL fShowRestartButton = FALSE; - - if (FAILED(m_hrFinal)) - { - // If we know the failure message, use that. - if (m_sczFailedMessage && *m_sczFailedMessage) - { - StrAllocString(&sczUnformattedText, m_sczFailedMessage, 0); - } - else // try to get the error message from the error code. - { - StrAllocFromError(&sczUnformattedText, m_hrFinal, NULL); - if (!sczUnformattedText || !*sczUnformattedText) - { - StrAllocFromError(&sczUnformattedText, E_FAIL, NULL); - } - } - - StrAllocFormatted(&sczText, L"0x%08x - %ls", m_hrFinal, sczUnformattedText); - ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_FAILURE_MESSAGE_TEXT, sczText); - fShowErrorMessage = TRUE; - } - - if (m_fRestartRequired) - { - if (BOOTSTRAPPER_RESTART_PROMPT == m_command.restart) - { - fShowRestartButton = TRUE; - } - } - - ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_LOGFILE_LINK, fShowLogLink); - ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_MESSAGE_TEXT, fShowErrorMessage); - ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_RESTART_TEXT, fShowRestartButton); - ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON, fShowRestartButton); - } - - // Hide the upgrade link - if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_UPGRADE_LINK)) - { - ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_UPGRADE_LINK, FALSE); - } - - // Process each control for special handling in the new page. - THEME_PAGE* pPage = ThemeGetPage(m_pTheme, dwNewPageId); - if (pPage) - { - for (DWORD i = 0; i < pPage->cControlIndices; ++i) - { - THEME_CONTROL* pControl = m_pTheme->rgControls + pPage->rgdwControlIndices[i]; - - // If we are on the install, options or modify pages and this is a named control, try to set its default state. - if ((m_rgdwPageIds[WIXSTDBA_PAGE_INSTALL] == dwNewPageId || - m_rgdwPageIds[WIXSTDBA_PAGE_OPTIONS] == dwNewPageId || - m_rgdwPageIds[WIXSTDBA_PAGE_MODIFY] == dwNewPageId) && - pControl->sczName && *pControl->sczName) - { - // If this is a checkbox control, try to set its default state to the state of a matching named Burn variable. - if (THEME_CONTROL_TYPE_CHECKBOX == pControl->type && WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX != pControl->wId) - { - LONGLONG llValue = 0; - HRESULT hr = BalGetNumericVariable(pControl->sczName, &llValue); - - ThemeSendControlMessage(m_pTheme, pControl->wId, BM_SETCHECK, SUCCEEDED(hr) && llValue ? BST_CHECKED : BST_UNCHECKED, 0); - } - - // If this is a button control with the BS_AUTORADIOBUTTON style, try to set its default - // state to the state of a matching named Burn variable. - if (THEME_CONTROL_TYPE_BUTTON == pControl->type && (BS_AUTORADIOBUTTON == (BS_AUTORADIOBUTTON & pControl->dwStyle))) - { - LONGLONG llValue = 0; - HRESULT hr = BalGetNumericVariable(pControl->sczName, &llValue); - - // If the control value isn't set then disable it. - if (!SUCCEEDED(hr)) - { - ThemeControlEnable(m_pTheme, pControl->wId, FALSE); - } - else - { - ThemeSendControlMessage(m_pTheme, pControl->wId, BM_SETCHECK, SUCCEEDED(hr) && llValue ? BST_CHECKED : BST_UNCHECKED, 0); - } - } - - // Hide or disable controls based on the control name with 'State' appended - HRESULT hr = StrAllocFormatted(&sczControlName, L"%lsState", pControl->sczName); - if (SUCCEEDED(hr)) - { - hr = BalGetStringVariable(sczControlName, &sczControlState); - if (SUCCEEDED(hr) && sczControlState && *sczControlState) - { - if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, sczControlState, -1, L"disable", -1)) - { - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Disable control %ls", pControl->sczName); - ThemeControlEnable(m_pTheme, pControl->wId, FALSE); - } - else if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, sczControlState, -1, L"hide", -1)) - { - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Hide control %ls", pControl->sczName); - // TODO: This doesn't work - ThemeShowControl(m_pTheme, pControl->wId, SW_HIDE); - } - } - } - } - - // Format the text in each of the new page's controls (if they have any text). - if (pControl->sczText && *pControl->sczText) - { - HRESULT hr = BalFormatString(pControl->sczText, &sczText); - if (SUCCEEDED(hr)) - { - ThemeSetTextControl(m_pTheme, pControl->wId, sczText); - } - } - } - } - - ThemeShowPage(m_pTheme, dwOldPageId, SW_HIDE); - ThemeShowPage(m_pTheme, dwNewPageId, SW_SHOW); - - // Remember current page - m_dwCurrentPage = dwNewPageId; - - // On the install page set the focus to the install button or the next enabled control if install is disabled - if (m_rgdwPageIds[WIXSTDBA_PAGE_INSTALL] == dwNewPageId) - { - HWND hwndFocus = ::GetDlgItem(m_pTheme->hwndParent, WIXSTDBA_CONTROL_INSTALL_BUTTON); - if (hwndFocus && !ThemeControlEnabled(m_pTheme, WIXSTDBA_CONTROL_INSTALL_BUTTON)) - { - hwndFocus = ::GetNextDlgTabItem(m_pTheme->hwndParent, hwndFocus, FALSE); - } - - if (hwndFocus) - { - ::SetFocus(hwndFocus); - } - } - } - } - - ReleaseStr(sczText); - ReleaseStr(sczUnformattedText); - ReleaseStr(sczControlState); - ReleaseStr(sczControlName); - } - - - // - // OnClose - called when the window is trying to be closed. - // - BOOL OnClose() - { - BOOL fClose = FALSE; - - // If we've already succeeded or failed or showing the help page, just close (prompts are annoying if the bootstrapper is done). - if (WIXSTDBA_STATE_APPLIED <= m_state || WIXSTDBA_STATE_HELP == m_state) - { - fClose = TRUE; - } - else // prompt the user or force the cancel if there is no UI. - { - fClose = PromptCancel(m_hWnd, BOOTSTRAPPER_DISPLAY_FULL != m_command.display, m_sczConfirmCloseMessage ? m_sczConfirmCloseMessage : L"Are you sure you want to cancel?", m_pTheme->sczCaption); - } - - // If we're doing progress then we never close, we just cancel to let rollback occur. - if (WIXSTDBA_STATE_APPLYING <= m_state && WIXSTDBA_STATE_APPLIED > m_state) - { - // If we canceled disable cancel button since clicking it again is silly. - if (fClose) - { - ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON, FALSE); - } - - fClose = FALSE; - } - - return fClose; - } - - - // - // OnClickAcceptCheckbox - allow the install to continue. - // - void OnClickAcceptCheckbox() - { - BOOL fAcceptedLicense = ThemeIsControlChecked(m_pTheme, WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX); - ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_INSTALL_BUTTON, fAcceptedLicense); - } - - - // - // OnClickOptionsButton - show the options page. - // - void OnClickOptionsButton() - { - SavePageSettings(WIXSTDBA_PAGE_INSTALL); - m_stateBeforeOptions = m_state; - SetState(WIXSTDBA_STATE_OPTIONS, S_OK); - } - - - // - // OnClickOptionsBrowseButton - browse for install folder on the options page. - // - void OnClickOptionsBrowseButton(DWORD dwControl) - { - WCHAR wzPath[MAX_PATH] = {}; - BROWSEINFOW browseInfo = {}; - PIDLIST_ABSOLUTE pidl = NULL; - PIDLIST_ABSOLUTE pidlRoot = NULL; - - ::SHGetFolderLocation(m_hWnd, CSIDL_DRIVES, NULL, 0, &pidlRoot); - - browseInfo.hwndOwner = m_hWnd; - browseInfo.pszDisplayName = wzPath; - browseInfo.lpszTitle = m_pTheme->sczCaption; - browseInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_USENEWUI; - browseInfo.pidlRoot = pidlRoot; - pidl = ::SHBrowseForFolderW(&browseInfo); - if (pidl && ::SHGetPathFromIDListW(pidl, wzPath)) - { - switch (dwControl) - { - case WIXSTDBA_CONTROL_BROWSE_BUTTON: - ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_FOLDER_EDITBOX, wzPath); - break; - - case WIXSTDBA_CONTROL_BROWSE_BUTTON2: - ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_FOLDER_EDITBOX2, wzPath); - break; - } - } - - if (pidl) - { - ::CoTaskMemFree(pidl); - } - - return; - } - - // - // OnClickOptionsOkButton - accept the changes made by the options page. - // - void OnClickOptionsOkButton() - { - HRESULT hr = S_OK; - LPWSTR sczPath = NULL; - - if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_FOLDER_EDITBOX)) - { - hr = ThemeGetTextControl(m_pTheme, WIXSTDBA_CONTROL_FOLDER_EDITBOX, &sczPath); - ExitOnFailure(hr, "Failed to get text from folder edit box."); - - // TODO: verify the path is valid. - - hr = m_pEngine->SetVariableString(WIXSTDBA_VARIABLE_INSTALL_FOLDER, sczPath); - ExitOnFailure(hr, "Failed to set the install folder."); - } - - if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_FOLDER_EDITBOX2)) - { - hr = ThemeGetTextControl(m_pTheme, WIXSTDBA_CONTROL_FOLDER_EDITBOX2, &sczPath); - ExitOnFailure(hr, "Failed to get text from folder edit box2."); - - // TODO: verify the path is valid. - - hr = m_pEngine->SetVariableString(WIXSTDBA_VARIABLE_INSTALL_FOLDER2, sczPath); - ExitOnFailure(hr, "Failed to set the install folder2."); - } - - SavePageSettings(WIXSTDBA_PAGE_OPTIONS); - - LExit: - SetState(m_stateBeforeOptions, S_OK); - return; - } - - - // - // OnClickOptionsCancelButton - discard the changes made by the options page. - // - void OnClickOptionsCancelButton() - { - SetState(m_stateBeforeOptions, S_OK); - } - - - // - // OnClickInstallButton - start the install by planning the packages. - // - void OnClickInstallButton() - { - SavePageSettings(WIXSTDBA_PAGE_INSTALL); - - this->OnPlan(BOOTSTRAPPER_ACTION_INSTALL); - } - - - // - // OnClickRepairButton - start the repair. - // - void OnClickRepairButton() - { - this->OnPlan(BOOTSTRAPPER_ACTION_REPAIR); - } - - - // - // OnClickUninstallButton - start the uninstall. - // - void OnClickUninstallButton() - { - this->OnPlan(BOOTSTRAPPER_ACTION_UNINSTALL); - } - - - // - // OnClickCloseButton - close the application. - // - void OnClickCloseButton() - { - ::SendMessageW(m_hWnd, WM_CLOSE, 0, 0); - } - - - // - // OnClickEulaLink - show the end user license agreement. - // - void OnClickEulaLink() - { - HRESULT hr = S_OK; - LPWSTR sczLicenseUrl = NULL; - LPWSTR sczLicensePath = NULL; - LPWSTR sczLicenseDirectory = NULL; - URI_PROTOCOL protocol = URI_PROTOCOL_UNKNOWN; - - hr = StrAllocString(&sczLicenseUrl, m_sczLicenseUrl, 0); - BalExitOnFailure1(hr, "Failed to copy license URL: %ls", m_sczLicenseUrl); - - hr = LocLocalizeString(m_pWixLoc, &sczLicenseUrl); - BalExitOnFailure1(hr, "Failed to localize license URL: %ls", m_sczLicenseUrl); - - hr = BalFormatString(sczLicenseUrl, &sczLicenseUrl); - BalExitOnFailure1(hr, "Failed to get formatted license URL: %ls", m_sczLicenseUrl); - - hr = UriProtocol(sczLicenseUrl, &protocol); - if (FAILED(hr) || URI_PROTOCOL_UNKNOWN == protocol) - { - // Probe for localised license file - hr = PathRelativeToModule(&sczLicensePath, sczLicenseUrl, m_hModule); - if (SUCCEEDED(hr)) - { - hr = PathGetDirectory(sczLicensePath, &sczLicenseDirectory); - if (SUCCEEDED(hr)) - { - hr = LocProbeForFile(sczLicenseDirectory, PathFile(sczLicenseUrl), m_sczLanguage, &sczLicensePath); - } - } - } - - hr = ShelExec(sczLicensePath ? sczLicensePath : sczLicenseUrl, NULL, L"open", NULL, SW_SHOWDEFAULT, m_hWnd, NULL); - BalExitOnFailure(hr, "Failed to launch URL to EULA."); - - LExit: - ReleaseStr(sczLicensePath); - ReleaseStr(sczLicenseUrl); - ReleaseStr(sczLicenseDirectory); - - return; - } - - - // - // OnClickUpgradeLink - download the upgrade. - // - void OnClickUpgradeLink() - { - this->OnPlan(BOOTSTRAPPER_ACTION_UPDATE_REPLACE); - - m_fUpdating = TRUE; - - return; - } - - - // - // OnClickLaunchButton - launch the app from the success page. - // - void OnClickLaunchButton() - { - HRESULT hr = S_OK; - LPWSTR sczUnformattedLaunchTarget = NULL; - LPWSTR sczLaunchTarget = NULL; - LPWSTR sczUnformattedArguments = NULL; - LPWSTR sczArguments = NULL; - int nCmdShow = SW_SHOWNORMAL; - - hr = BalGetStringVariable(WIXSTDBA_VARIABLE_LAUNCH_TARGET_PATH, &sczUnformattedLaunchTarget); - BalExitOnFailure1(hr, "Failed to get launch target variable '%ls'.", WIXSTDBA_VARIABLE_LAUNCH_TARGET_PATH); - - hr = BalFormatString(sczUnformattedLaunchTarget, &sczLaunchTarget); - BalExitOnFailure1(hr, "Failed to format launch target variable: %ls", sczUnformattedLaunchTarget); - - if (BalStringVariableExists(WIXSTDBA_VARIABLE_LAUNCH_ARGUMENTS)) - { - hr = BalGetStringVariable(WIXSTDBA_VARIABLE_LAUNCH_ARGUMENTS, &sczUnformattedArguments); - BalExitOnFailure1(hr, "Failed to get launch arguments '%ls'.", WIXSTDBA_VARIABLE_LAUNCH_ARGUMENTS); - - hr = BalFormatString(sczUnformattedArguments, &sczArguments); - BalExitOnFailure1(hr, "Failed to format launch arguments variable: %ls", sczUnformattedArguments); - } - - if (BalStringVariableExists(WIXSTDBA_VARIABLE_LAUNCH_HIDDEN)) - { - nCmdShow = SW_HIDE; - } - - hr = ShelExec(sczLaunchTarget, sczArguments, L"open", NULL, nCmdShow, m_hWnd, NULL); - BalExitOnFailure1(hr, "Failed to launch target: %ls", sczLaunchTarget); - - ::PostMessageW(m_hWnd, WM_CLOSE, 0, 0); - - LExit: - ReleaseStr(sczArguments); - ReleaseStr(sczUnformattedArguments); - ReleaseStr(sczLaunchTarget); - ReleaseStr(sczUnformattedLaunchTarget); - - return; - } - - - // - // OnClickRestartButton - allows the restart and closes the app. - // - void OnClickRestartButton() - { - AssertSz(m_fRestartRequired, "Restart must be requested to be able to click on the restart button."); - - m_fAllowRestart = TRUE; - ::SendMessageW(m_hWnd, WM_CLOSE, 0, 0); - - return; - } - - - // - // OnClickLogFileLink - show the log file. - // - void OnClickLogFileLink() - { - HRESULT hr = S_OK; - LPWSTR sczLogFile = NULL; - - hr = BalGetStringVariable(m_Bundle.sczLogVariable, &sczLogFile); - BalExitOnFailure1(hr, "Failed to get log file variable '%ls'.", m_Bundle.sczLogVariable); - - hr = ShelExec(L"notepad.exe", sczLogFile, L"open", NULL, SW_SHOWDEFAULT, m_hWnd, NULL); - BalExitOnFailure1(hr, "Failed to open log file target: %ls", sczLogFile); - - LExit: - ReleaseStr(sczLogFile); - - return; - } - - - // - // SetState - // - void SetState( - __in WIXSTDBA_STATE state, - __in HRESULT hrStatus - ) - { - if (FAILED(hrStatus)) - { - m_hrFinal = hrStatus; - } - - if (FAILED(m_hrFinal)) - { - state = WIXSTDBA_STATE_FAILED; - } - - if (WIXSTDBA_STATE_OPTIONS == state || m_state < state) - { - ::PostMessageW(m_hWnd, WM_WIXSTDBA_CHANGE_STATE, 0, state); - } - } - - - void DeterminePageId( - __in WIXSTDBA_STATE state, - __out DWORD* pdwPageId - ) - { - if (BOOTSTRAPPER_DISPLAY_PASSIVE == m_command.display) - { - switch (state) - { - case WIXSTDBA_STATE_INITIALIZED: - *pdwPageId = BOOTSTRAPPER_ACTION_HELP == m_command.action ? m_rgdwPageIds[WIXSTDBA_PAGE_HELP] : m_rgdwPageIds[WIXSTDBA_PAGE_LOADING]; - break; - - case WIXSTDBA_STATE_HELP: - *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_HELP]; - break; - - case WIXSTDBA_STATE_DETECTING: - *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_LOADING] ? m_rgdwPageIds[WIXSTDBA_PAGE_LOADING] : m_rgdwPageIds[WIXSTDBA_PAGE_PROGRESS_PASSIVE] ? m_rgdwPageIds[WIXSTDBA_PAGE_PROGRESS_PASSIVE] : m_rgdwPageIds[WIXSTDBA_PAGE_PROGRESS]; - break; - - case WIXSTDBA_STATE_DETECTED: __fallthrough; - case WIXSTDBA_STATE_PLANNING: __fallthrough; - case WIXSTDBA_STATE_PLANNED: __fallthrough; - case WIXSTDBA_STATE_APPLYING: __fallthrough; - case WIXSTDBA_STATE_CACHING: __fallthrough; - case WIXSTDBA_STATE_CACHED: __fallthrough; - case WIXSTDBA_STATE_EXECUTING: __fallthrough; - case WIXSTDBA_STATE_EXECUTED: - *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_PROGRESS_PASSIVE] ? m_rgdwPageIds[WIXSTDBA_PAGE_PROGRESS_PASSIVE] : m_rgdwPageIds[WIXSTDBA_PAGE_PROGRESS]; - break; - - default: - *pdwPageId = 0; - break; - } - } - else if (BOOTSTRAPPER_DISPLAY_FULL == m_command.display) - { - switch (state) - { - case WIXSTDBA_STATE_INITIALIZING: - *pdwPageId = 0; - break; - - case WIXSTDBA_STATE_INITIALIZED: - *pdwPageId = BOOTSTRAPPER_ACTION_HELP == m_command.action ? m_rgdwPageIds[WIXSTDBA_PAGE_HELP] : m_rgdwPageIds[WIXSTDBA_PAGE_LOADING]; - break; - - case WIXSTDBA_STATE_HELP: - *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_HELP]; - break; - - case WIXSTDBA_STATE_DETECTING: - *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_LOADING]; - break; - - case WIXSTDBA_STATE_DETECTED: - switch (m_command.action) - { - case BOOTSTRAPPER_ACTION_INSTALL: - *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_INSTALL]; - break; - - case BOOTSTRAPPER_ACTION_MODIFY: __fallthrough; - case BOOTSTRAPPER_ACTION_REPAIR: __fallthrough; - case BOOTSTRAPPER_ACTION_UNINSTALL: - *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_MODIFY]; - break; - } - break; - - case WIXSTDBA_STATE_OPTIONS: - *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_OPTIONS]; - break; - - case WIXSTDBA_STATE_PLANNING: __fallthrough; - case WIXSTDBA_STATE_PLANNED: __fallthrough; - case WIXSTDBA_STATE_APPLYING: __fallthrough; - case WIXSTDBA_STATE_CACHING: __fallthrough; - case WIXSTDBA_STATE_CACHED: __fallthrough; - case WIXSTDBA_STATE_EXECUTING: __fallthrough; - case WIXSTDBA_STATE_EXECUTED: - *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_PROGRESS]; - break; - - case WIXSTDBA_STATE_APPLIED: - *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_SUCCESS]; - break; - - case WIXSTDBA_STATE_FAILED: - *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_FAILURE]; - break; - } - } - } - - - HRESULT EvaluateConditions() - { - HRESULT hr = S_OK; - BOOL fResult = FALSE; - - for (DWORD i = 0; i < m_Conditions.cConditions; ++i) - { - BAL_CONDITION* pCondition = m_Conditions.rgConditions + i; - - hr = BalConditionEvaluate(pCondition, m_pEngine, &fResult, &m_sczFailedMessage); - BalExitOnFailure(hr, "Failed to evaluate condition."); - - if (!fResult) - { - hr = E_WIXSTDBA_CONDITION_FAILED; - BalExitOnFailure1(hr, "Bundle condition evaluated to false: %ls", pCondition->sczCondition); - } - } - - ReleaseNullStr(m_sczFailedMessage); - - LExit: - return hr; - } - - - void SetTaskbarButtonProgress( - __in DWORD dwOverallPercentage - ) - { - HRESULT hr = S_OK; - - if (m_fTaskbarButtonOK) - { - hr = m_pTaskbarList->SetProgressValue(m_hWnd, dwOverallPercentage, 100UL); - BalExitOnFailure1(hr, "Failed to set taskbar button progress to: %d%%.", dwOverallPercentage); - } - - LExit: - return; - } - - - void SetTaskbarButtonState( - __in TBPFLAG tbpFlags - ) - { - HRESULT hr = S_OK; - - if (m_fTaskbarButtonOK) - { - hr = m_pTaskbarList->SetProgressState(m_hWnd, tbpFlags); - BalExitOnFailure1(hr, "Failed to set taskbar button state.", tbpFlags); - } - - LExit: - return; - } - - - void SetProgressState( - __in HRESULT hrStatus - ) - { - TBPFLAG flag = TBPF_NORMAL; - - if (IsCanceled() || HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT) == hrStatus) - { - flag = TBPF_PAUSED; - } - else if (IsRollingBack() || FAILED(hrStatus)) - { - flag = TBPF_ERROR; - } - - SetTaskbarButtonState(flag); - } - - - HRESULT LoadBootstrapperBAFunctions() - { - HRESULT hr = S_OK; - LPWSTR sczBafPath = NULL; - - hr = PathRelativeToModule(&sczBafPath, L"bafunctions.dll", m_hModule); - BalExitOnFailure(hr, "Failed to get path to BA function DLL."); + ::PostMessageW(m_hWnd, WM_CLOSE, 0, 0); + } + else // try to change the pages. + { + DeterminePageId(stateOld, &dwOldPageId); + DeterminePageId(m_state, &dwNewPageId); + + if (dwOldPageId != dwNewPageId) + { + // Enable disable controls per-page. + if (m_rgdwPageIds[WIXSTDBA_PAGE_INSTALL] == dwNewPageId) // on the "Install" page, ensure the install button is enabled/disabled correctly. + { + LONGLONG llElevated = 0; + if (m_Bundle.fPerMachine) + { + BalGetNumericVariable(WIXBUNDLE_VARIABLE_ELEVATED, &llElevated); + } + ThemeControlElevates(m_pTheme, WIXSTDBA_CONTROL_INSTALL_BUTTON, (m_Bundle.fPerMachine && !llElevated)); + + // If the EULA control exists, show it only if a license URL is provided as well. + if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_EULA_LINK)) + { + BOOL fEulaLink = (m_sczLicenseUrl && *m_sczLicenseUrl); + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_EULA_LINK, fEulaLink); + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX, fEulaLink); + } + + BOOL fAcceptedLicense = !ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX) || !ThemeControlEnabled(m_pTheme, WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX) || ThemeIsControlChecked(m_pTheme, WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX); + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_INSTALL_BUTTON, fAcceptedLicense); + + // If there is an "Options" page, the "Options" button exists, and it hasn't been suppressed, then enable the button. + BOOL fOptionsEnabled = m_rgdwPageIds[WIXSTDBA_PAGE_OPTIONS] && ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_OPTIONS_BUTTON) && !m_fSuppressOptionsUI; + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_OPTIONS_BUTTON, fOptionsEnabled); + + // Show/Hide the version label if it exists. + if (m_rgdwPageIds[WIXSTDBA_PAGE_OPTIONS] && ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_VERSION_LABEL) && !m_fShowVersion) + { + ThemeShowControl(m_pTheme, WIXSTDBA_CONTROL_VERSION_LABEL, SW_HIDE); + } + } + else if (m_rgdwPageIds[WIXSTDBA_PAGE_MODIFY] == dwNewPageId) + { + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_REPAIR_BUTTON, !m_fSuppressRepair); + } + else if (m_rgdwPageIds[WIXSTDBA_PAGE_OPTIONS] == dwNewPageId) + { + HRESULT hr = BalGetStringVariable(WIXSTDBA_VARIABLE_INSTALL_FOLDER, &sczUnformattedText); + if (SUCCEEDED(hr)) + { + // If the wix developer is showing a hidden variable in the UI, then obviously they don't care about keeping it safe + // so don't go down the rabbit hole of making sure that this is securely freed. + BalFormatString(sczUnformattedText, &sczText); + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_FOLDER_EDITBOX, sczText); + } + + hr = BalGetStringVariable(WIXSTDBA_VARIABLE_INSTALL_FOLDER2, &sczUnformattedText); + if (SUCCEEDED(hr)) + { + BalFormatString(sczUnformattedText, &sczText); + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_FOLDER_EDITBOX2, sczText); + } + } + else if (m_rgdwPageIds[WIXSTDBA_PAGE_SUCCESS] == dwNewPageId) // on the "Success" page, check if the restart or launch button should be enabled. + { + BOOL fShowRestartButton = FALSE; + BOOL fLaunchTargetExists = FALSE; + if (m_fRestartRequired) + { + if (BOOTSTRAPPER_RESTART_PROMPT == m_command.restart) + { + fShowRestartButton = TRUE; + } + } + else if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_LAUNCH_BUTTON)) + { + fLaunchTargetExists = BalStringVariableExists(WIXSTDBA_VARIABLE_LAUNCH_TARGET_PATH); + } + + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_LAUNCH_BUTTON, fLaunchTargetExists && BOOTSTRAPPER_ACTION_UNINSTALL < m_plannedAction); + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_SUCCESS_RESTART_TEXT, fShowRestartButton); + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_SUCCESS_RESTART_BUTTON, fShowRestartButton); + + if ((BOOTSTRAPPER_ACTION_INSTALL == m_plannedAction && ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_SUCCESS_INSTALL_HEADER)) || + (BOOTSTRAPPER_ACTION_UNINSTALL == m_plannedAction && ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_SUCCESS_UNINSTALL_HEADER)) || + (BOOTSTRAPPER_ACTION_REPAIR == m_plannedAction && ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_SUCCESS_REPAIR_HEADER))) + { + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_SUCCESS_HEADER, FALSE); + } + else + { + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_SUCCESS_HEADER, TRUE); + } + + if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_SUCCESS_INSTALL_HEADER)) + { + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_SUCCESS_INSTALL_HEADER, BOOTSTRAPPER_ACTION_INSTALL == m_plannedAction); + } + + if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_SUCCESS_UNINSTALL_HEADER)) + { + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_SUCCESS_UNINSTALL_HEADER, BOOTSTRAPPER_ACTION_UNINSTALL == m_plannedAction); + } + + if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_SUCCESS_REPAIR_HEADER)) + { + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_SUCCESS_REPAIR_HEADER, BOOTSTRAPPER_ACTION_REPAIR == m_plannedAction); + } + } + else if (m_rgdwPageIds[WIXSTDBA_PAGE_FAILURE] == dwNewPageId) // on the "Failure" page, show error message and check if the restart button should be enabled. + { + BOOL fShowLogLink = (m_Bundle.sczLogVariable && *m_Bundle.sczLogVariable); // if there is a log file variable then we'll assume the log file exists. + BOOL fShowErrorMessage = FALSE; + BOOL fShowRestartButton = FALSE; + + if (FAILED(m_hrFinal)) + { + // If we know the failure message, use that. + if (m_sczFailedMessage && *m_sczFailedMessage) + { + StrAllocString(&sczUnformattedText, m_sczFailedMessage, 0); + } + else if (E_MBAHOST_NET452_ON_WIN7RTM == m_hrFinal) + { + HRESULT hr = StrAllocString(&sczUnformattedText, L"#(loc.NET452WIN7RTMErrorMessage)", 0); + if (FAILED(hr)) + { + BalLogError(hr, "Failed to initialize NET452WIN7RTMErrorMessage loc identifier."); + } + else + { + hr = LocLocalizeString(m_pWixLoc, &sczUnformattedText); + if (FAILED(hr)) + { + BalLogError(hr, "Failed to localize NET452WIN7RTMErrorMessage: %ls", sczUnformattedText); + ReleaseNullStr(sczUnformattedText); + } + } + } + else // try to get the error message from the error code. + { + StrAllocFromError(&sczUnformattedText, m_hrFinal, NULL); + if (!sczUnformattedText || !*sczUnformattedText) + { + StrAllocFromError(&sczUnformattedText, E_FAIL, NULL); + } + } + + if (E_WIXSTDBA_CONDITION_FAILED == m_hrFinal) + { + if (sczUnformattedText) + { + StrAllocString(&sczText, sczUnformattedText, 0); + } + } + else if (E_MBAHOST_NET452_ON_WIN7RTM == m_hrFinal) + { + if (sczUnformattedText) + { + BalFormatString(sczUnformattedText, &sczText); + } + } + else + { + StrAllocFormatted(&sczText, L"0x%08x - %ls", m_hrFinal, sczUnformattedText); + } + + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_FAILURE_MESSAGE_TEXT, sczText); + fShowErrorMessage = TRUE; + } + + if (m_fRestartRequired) + { + if (BOOTSTRAPPER_RESTART_PROMPT == m_command.restart) + { + fShowRestartButton = TRUE; + } + } + + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_LOGFILE_LINK, fShowLogLink); + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_MESSAGE_TEXT, fShowErrorMessage); + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_RESTART_TEXT, fShowRestartButton); + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON, fShowRestartButton); + + if ((BOOTSTRAPPER_ACTION_INSTALL == m_plannedAction && ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_FAILURE_INSTALL_HEADER)) || + (BOOTSTRAPPER_ACTION_UNINSTALL == m_plannedAction && ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_FAILURE_UNINSTALL_HEADER)) || + (BOOTSTRAPPER_ACTION_REPAIR == m_plannedAction && ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_FAILURE_REPAIR_HEADER))) + { + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_HEADER, FALSE); + } + else + { + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_HEADER, TRUE); + } + + if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_FAILURE_INSTALL_HEADER)) + { + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_INSTALL_HEADER, BOOTSTRAPPER_ACTION_INSTALL == m_plannedAction); + } + + if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_FAILURE_UNINSTALL_HEADER)) + { + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_UNINSTALL_HEADER, BOOTSTRAPPER_ACTION_UNINSTALL == m_plannedAction); + } + + if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_FAILURE_REPAIR_HEADER)) + { + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_REPAIR_HEADER, BOOTSTRAPPER_ACTION_REPAIR == m_plannedAction); + } + } + + // Hide the upgrade link + if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_UPGRADE_LINK)) + { + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_UPGRADE_LINK, FALSE); + } + + // Process each control for special handling in the new page. + THEME_PAGE* pPage = ThemeGetPage(m_pTheme, dwNewPageId); + if (pPage) + { + for (DWORD i = 0; i < pPage->cControlIndices; ++i) + { + THEME_CONTROL* pControl = m_pTheme->rgControls + pPage->rgdwControlIndices[i]; + + // If we are on the install, options or modify pages and this is a named control, try to set its default state. + if ((m_rgdwPageIds[WIXSTDBA_PAGE_INSTALL] == dwNewPageId || + m_rgdwPageIds[WIXSTDBA_PAGE_OPTIONS] == dwNewPageId || + m_rgdwPageIds[WIXSTDBA_PAGE_MODIFY] == dwNewPageId) && + pControl->sczName && *pControl->sczName) + { + // If this is a checkbox control, try to set its default state to the state of a matching named Burn variable. + if (THEME_CONTROL_TYPE_CHECKBOX == pControl->type && WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX != pControl->wId) + { + LONGLONG llValue = 0; + HRESULT hr = BalGetNumericVariable(pControl->sczName, &llValue); + + ThemeSendControlMessage(m_pTheme, pControl->wId, BM_SETCHECK, SUCCEEDED(hr) && llValue ? BST_CHECKED : BST_UNCHECKED, 0); + } + + // If this is a button control with the BS_AUTORADIOBUTTON style, try to set its default + // state to the state of a matching named Burn variable. + if (THEME_CONTROL_TYPE_BUTTON == pControl->type && (BS_AUTORADIOBUTTON == (BS_AUTORADIOBUTTON & pControl->dwStyle))) + { + LONGLONG llValue = 0; + HRESULT hr = BalGetNumericVariable(pControl->sczName, &llValue); + + // If the control value isn't set then disable it. + if (!SUCCEEDED(hr)) + { + ThemeControlEnable(m_pTheme, pControl->wId, FALSE); + } + else + { + ThemeSendControlMessage(m_pTheme, pControl->wId, BM_SETCHECK, SUCCEEDED(hr) && llValue ? BST_CHECKED : BST_UNCHECKED, 0); + } + } + + // If this is an editbox control, try to set its default state to the state of a matching named Burn variable. + if (THEME_CONTROL_TYPE_EDITBOX == pControl->type && WIXSTDBA_CONTROL_FOLDER_EDITBOX != pControl->wId) + { + LPWSTR sczEditboxValue = NULL; + HRESULT hr = BalGetStringVariable(pControl->sczName, &sczEditboxValue); + + if (SUCCEEDED(hr)) + { + ThemeSetTextControl(m_pTheme, pControl->wId, sczEditboxValue); + } + + ReleaseStr(sczEditboxValue); + } + + // Hide or disable controls based on the control name with 'State' appended + HRESULT hr = StrAllocFormatted(&sczControlName, L"%lsState", pControl->sczName); + if (SUCCEEDED(hr)) + { + hr = BalGetStringVariable(sczControlName, &sczControlState); + if (SUCCEEDED(hr) && sczControlState && *sczControlState) + { + if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, sczControlState, -1, L"disable", -1)) + { + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Disable control %ls", pControl->sczName); + ThemeControlEnable(m_pTheme, pControl->wId, FALSE); + } + else if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, sczControlState, -1, L"hide", -1)) + { + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Hide control %ls", pControl->sczName); + // TODO: This doesn't work + ThemeShowControl(m_pTheme, pControl->wId, SW_HIDE); + } + } + } + } + + // Format the text in each of the new page's controls (if they have any text). + if (pControl->sczText && *pControl->sczText) + { + // If the wix developer is showing a hidden variable in the UI, then obviously they don't care about keeping it safe + // so don't go down the rabbit hole of making sure that this is securely freed. + HRESULT hr = BalFormatString(pControl->sczText, &sczText); + if (SUCCEEDED(hr)) + { + ThemeSetTextControl(m_pTheme, pControl->wId, sczText); + } + } + } + } + + // Exit "modal" pages if any is active. + if (m_rgdwPageIds[WIXSTDBA_PAGE_FILESINUSE] == dwOldPageId) + { + ExitModalState(IDERROR); + } + + ThemeShowPage(m_pTheme, dwOldPageId, SW_HIDE); + ThemeShowPage(m_pTheme, dwNewPageId, SW_SHOW); + + // Remember current page + m_dwCurrentPage = dwNewPageId; + + // On the install page set the focus to the install button or the next enabled control if install is disabled + if (m_rgdwPageIds[WIXSTDBA_PAGE_INSTALL] == dwNewPageId) + { + HWND hwndFocus = ::GetDlgItem(m_pTheme->hwndParent, WIXSTDBA_CONTROL_INSTALL_BUTTON); + if (hwndFocus && !ThemeControlEnabled(m_pTheme, WIXSTDBA_CONTROL_INSTALL_BUTTON)) + { + hwndFocus = ::GetNextDlgTabItem(m_pTheme->hwndParent, hwndFocus, FALSE); + } + + if (hwndFocus) + { + ::SetFocus(hwndFocus); + } + } + } + } + + ReleaseStr(sczText); + ReleaseStr(sczUnformattedText); + ReleaseStr(sczControlState); + ReleaseStr(sczControlName); + } + + + // + // OnClose - called when the window is trying to be closed. + // + BOOL OnClose() + { + BOOL fClose = FALSE; + + // If we've already succeeded or failed or showing the help page, just close (prompts are annoying if the bootstrapper is done). + if (WIXSTDBA_STATE_APPLIED <= m_state || WIXSTDBA_STATE_HELP == m_state) + { + fClose = TRUE; + } + else // prompt the user or force the cancel if there is no UI. + { + fClose = PromptCancel(m_hWnd, BOOTSTRAPPER_DISPLAY_FULL != m_command.display, m_sczConfirmCloseMessage ? m_sczConfirmCloseMessage : L"Are you sure you want to cancel?", m_pTheme->sczCaption); + } + + // If we're doing progress then we never close, we just cancel to let rollback occur. + if ((WIXSTDBA_STATE_APPLYING <= m_state && WIXSTDBA_STATE_APPLIED > m_state) || WIXSTDBA_STATE_FILESINUSE == m_state ) + { + // If we canceled disable cancel button since clicking it again is silly. + if (fClose) + { + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON, FALSE); + } + + fClose = FALSE; + } + + return fClose; + } + + + // + // OnClickAcceptCheckbox - allow the install to continue. + // + void OnClickAcceptCheckbox() + { + BOOL fAcceptedLicense = ThemeIsControlChecked(m_pTheme, WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX); + ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_INSTALL_BUTTON, fAcceptedLicense); + } + + + // + // OnClickOptionsButton - show the options page. + // + void OnClickOptionsButton() + { + SavePageSettings(WIXSTDBA_PAGE_INSTALL); + m_stateBeforeOptions = m_state; + SetState(WIXSTDBA_STATE_OPTIONS, S_OK); + } + + + // + // OnClickOptionsBrowseButton - browse for install folder on the options page. + // + void OnClickOptionsBrowseButton(DWORD dwControl) + { + WCHAR wzPath[MAX_PATH] = { }; + BROWSEINFOW browseInfo = { }; + PIDLIST_ABSOLUTE pidl = NULL; + PIDLIST_ABSOLUTE pidlRoot = NULL; + + ::SHGetFolderLocation(m_hWnd, CSIDL_DRIVES, NULL, 0, &pidlRoot); + + browseInfo.hwndOwner = m_hWnd; + browseInfo.pszDisplayName = wzPath; + browseInfo.lpszTitle = m_pTheme->sczCaption; + browseInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_USENEWUI; + browseInfo.pidlRoot = pidlRoot; + pidl = ::SHBrowseForFolderW(&browseInfo); + if (pidl && ::SHGetPathFromIDListW(pidl, wzPath)) + { + switch (dwControl) + { + case WIXSTDBA_CONTROL_BROWSE_BUTTON: + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_FOLDER_EDITBOX, wzPath); + break; + + case WIXSTDBA_CONTROL_BROWSE_BUTTON2: + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_FOLDER_EDITBOX2, wzPath); + break; + } + } + + if (pidl) + { + ::CoTaskMemFree(pidl); + } + + return; + } + + // + // OnClickOptionsOkButton - accept the changes made by the options page. + // + void OnClickOptionsOkButton() + { + HRESULT hr = S_OK; + LPWSTR sczPath = NULL; + + if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_FOLDER_EDITBOX)) + { + hr = ThemeGetTextControl(m_pTheme, WIXSTDBA_CONTROL_FOLDER_EDITBOX, &sczPath); + ExitOnFailure(hr, "Failed to get text from folder edit box."); + + // TODO: verify the path is valid. + + hr = m_pEngine->SetVariableString(WIXSTDBA_VARIABLE_INSTALL_FOLDER, sczPath); + ExitOnFailure(hr, "Failed to set the install folder."); + } + + if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_FOLDER_EDITBOX2)) + { + hr = ThemeGetTextControl(m_pTheme, WIXSTDBA_CONTROL_FOLDER_EDITBOX2, &sczPath); + ExitOnFailure(hr, "Failed to get text from folder edit box2."); + + // TODO: verify the path is valid. + + hr = m_pEngine->SetVariableString(WIXSTDBA_VARIABLE_INSTALL_FOLDER2, sczPath); + ExitOnFailure(hr, "Failed to set the install folder2."); + } + + SavePageSettings(WIXSTDBA_PAGE_OPTIONS); + + LExit: + SetState(m_stateBeforeOptions, S_OK); + return; + } + + + // + // OnClickOptionsCancelButton - discard the changes made by the options page. + // + void OnClickOptionsCancelButton() + { + SetState(m_stateBeforeOptions, S_OK); + } + + + // + // OnClickInstallButton - start the install by planning the packages. + // + void OnClickInstallButton() + { + SavePageSettings(WIXSTDBA_PAGE_INSTALL); + + this->OnPlan(BOOTSTRAPPER_ACTION_INSTALL); + } + + + // + // OnClickRepairButton - start the repair. + // + void OnClickRepairButton() + { + SavePageSettings(WIXSTDBA_PAGE_MODIFY); + + this->OnPlan(BOOTSTRAPPER_ACTION_REPAIR); + } + + + // + // OnClickUninstallButton - start the uninstall. + // + void OnClickUninstallButton() + { + SavePageSettings(WIXSTDBA_PAGE_MODIFY); + + this->OnPlan(BOOTSTRAPPER_ACTION_UNINSTALL); + } + + + // + // OnClickCloseButton - close the application. + // + void OnClickCloseButton() + { + ::SendMessageW(m_hWnd, WM_CLOSE, 0, 0); + } + + + // + // OnClickEulaLink - show the end user license agreement. + // + void OnClickEulaLink() + { + HRESULT hr = S_OK; + LPWSTR sczLicenseUrl = NULL; + LPWSTR sczLicensePath = NULL; + LPWSTR sczLicenseDirectory = NULL; + LPWSTR sczLicenseFilename = NULL; + URI_PROTOCOL protocol = URI_PROTOCOL_UNKNOWN; + + hr = StrAllocString(&sczLicenseUrl, m_sczLicenseUrl, 0); + BalExitOnFailure1(hr, "Failed to copy license URL: %ls", m_sczLicenseUrl); + + hr = LocLocalizeString(m_pWixLoc, &sczLicenseUrl); + BalExitOnFailure1(hr, "Failed to localize license URL: %ls", m_sczLicenseUrl); + + // Assume there is no hidden variables to be formatted + // so don't worry about securely freeing it. + hr = BalFormatString(sczLicenseUrl, &sczLicenseUrl); + BalExitOnFailure1(hr, "Failed to get formatted license URL: %ls", m_sczLicenseUrl); + + hr = UriProtocol(sczLicenseUrl, &protocol); + if (FAILED(hr) || URI_PROTOCOL_UNKNOWN == protocol) + { + // Probe for localized license file + hr = PathRelativeToModule(&sczLicensePath, sczLicenseUrl, m_hModule); + if (SUCCEEDED(hr)) + { + hr = PathGetDirectory(sczLicensePath, &sczLicenseDirectory); + if (SUCCEEDED(hr)) + { + hr = LocProbeForFile(sczLicenseDirectory, PathFile(sczLicenseUrl), m_sczLanguage, &sczLicensePath); + } + } + } + + hr = ShelExecUnelevated(sczLicensePath ? sczLicensePath : sczLicenseUrl, NULL, L"open", NULL, SW_SHOWDEFAULT); + BalExitOnFailure(hr, "Failed to launch URL to EULA."); + + LExit: + ReleaseStr(sczLicensePath); + ReleaseStr(sczLicenseUrl); + ReleaseStr(sczLicenseDirectory); + ReleaseStr(sczLicenseFilename); + + return; + } + + + // + // OnClickUpgradeLink - download the upgrade. + // + void OnClickUpgradeLink() + { + this->OnPlan(BOOTSTRAPPER_ACTION_UPDATE_REPLACE); + + m_fUpdating = TRUE; + + return; + } + + + // + // OnClickLaunchButton - launch the app from the success page. + // + void OnClickLaunchButton() + { + HRESULT hr = S_OK; + LPWSTR sczUnformattedLaunchTarget = NULL; + LPWSTR sczLaunchTarget = NULL; + LPWSTR sczLaunchTargetElevatedId = NULL; + LPWSTR sczUnformattedArguments = NULL; + LPWSTR sczArguments = NULL; + LPWSTR sczLaunchFolder = NULL; + int nCmdShow = SW_SHOWNORMAL; + + hr = BalGetStringVariable(WIXSTDBA_VARIABLE_LAUNCH_TARGET_PATH, &sczUnformattedLaunchTarget); + BalExitOnFailure1(hr, "Failed to get launch target variable '%ls'.", WIXSTDBA_VARIABLE_LAUNCH_TARGET_PATH); + + hr = BalFormatString(sczUnformattedLaunchTarget, &sczLaunchTarget); + BalExitOnFailure1(hr, "Failed to format launch target variable: %ls", sczUnformattedLaunchTarget); + + if (BalStringVariableExists(WIXSTDBA_VARIABLE_LAUNCH_TARGET_ELEVATED_ID)) + { + hr = BalGetStringVariable(WIXSTDBA_VARIABLE_LAUNCH_TARGET_ELEVATED_ID, &sczLaunchTargetElevatedId); + BalExitOnFailure1(hr, "Failed to get launch target elevated id '%ls'.", WIXSTDBA_VARIABLE_LAUNCH_TARGET_ELEVATED_ID); + } + + if (BalStringVariableExists(WIXSTDBA_VARIABLE_LAUNCH_ARGUMENTS)) + { + hr = BalGetStringVariable(WIXSTDBA_VARIABLE_LAUNCH_ARGUMENTS, &sczUnformattedArguments); + BalExitOnFailure1(hr, "Failed to get launch arguments '%ls'.", WIXSTDBA_VARIABLE_LAUNCH_ARGUMENTS); + } + + if (BalStringVariableExists(WIXSTDBA_VARIABLE_LAUNCH_HIDDEN)) + { + nCmdShow = SW_HIDE; + } + + if (BalStringVariableExists(WIXSTDBA_VARIABLE_LAUNCH_WORK_FOLDER)) + { + hr = BalGetStringVariable(WIXSTDBA_VARIABLE_LAUNCH_WORK_FOLDER, &sczLaunchFolder); + BalExitOnFailure1(hr, "Failed to get launch working directory variable '%ls'.", WIXSTDBA_VARIABLE_LAUNCH_WORK_FOLDER); + } + + if (sczLaunchTargetElevatedId && !m_fTriedToLaunchElevated) + { + m_fTriedToLaunchElevated = TRUE; + hr = m_pEngine->LaunchApprovedExe(m_hWnd, sczLaunchTargetElevatedId, sczUnformattedArguments, 0); + if (FAILED(hr)) + { + BalLogError(hr, "Failed to launch elevated target: %ls", sczLaunchTargetElevatedId); + + //try with ShelExec next time + OnClickLaunchButton(); + } + } + else + { + if (sczUnformattedArguments) + { + hr = BalFormatString(sczUnformattedArguments, &sczArguments); + BalExitOnFailure1(hr, "Failed to format launch arguments variable: %ls", sczUnformattedArguments); + } + + hr = ShelExec(sczLaunchTarget, sczArguments, L"open", sczLaunchFolder, nCmdShow, m_hWnd, NULL); + BalExitOnFailure1(hr, "Failed to launch target: %ls", sczLaunchTarget); + + ::PostMessageW(m_hWnd, WM_CLOSE, 0, 0); + } + + LExit: + ReleaseStr(sczLaunchFolder); + StrSecureZeroFreeString(sczArguments); + ReleaseStr(sczUnformattedArguments); + ReleaseStr(sczLaunchTargetElevatedId); + StrSecureZeroFreeString(sczLaunchTarget); + ReleaseStr(sczUnformattedLaunchTarget); + + return; + } + + + // + // OnClickRestartButton - allows the restart and closes the app. + // + void OnClickRestartButton() + { + AssertSz(m_fRestartRequired, "Restart must be requested to be able to click on the restart button."); + + m_fAllowRestart = TRUE; + ::SendMessageW(m_hWnd, WM_CLOSE, 0, 0); + + return; + } + + + // + // OnClickLogFileLink - show the log file. + // + void OnClickLogFileLink() + { + HRESULT hr = S_OK; + LPWSTR sczLogFile = NULL; + + hr = BalGetStringVariable(m_Bundle.sczLogVariable, &sczLogFile); + BalExitOnFailure1(hr, "Failed to get log file variable '%ls'.", m_Bundle.sczLogVariable); + + hr = ShelExecUnelevated(L"notepad.exe", sczLogFile, L"open", NULL, SW_SHOWDEFAULT); + BalExitOnFailure1(hr, "Failed to open log file target: %ls", sczLogFile); + + LExit: + ReleaseStr(sczLogFile); + + return; + } + + + // + // OnClickFilesInUseOkButton + // + void OnClickFilesInUseOkButton() + { + BOOL fCloseApps = ThemeIsControlChecked(m_pTheme, WIXSTDBA_CONTROL_FILESINUSE_CLOSE_RADIOBUTTON); + ExitModalState(fCloseApps ? IDOK : IDIGNORE); + } + + // + // SetState + // + void SetState( + __in WIXSTDBA_STATE state, + __in HRESULT hrStatus + ) + { + if (FAILED(hrStatus)) + { + m_hrFinal = hrStatus; + } + + if (FAILED(m_hrFinal)) + { + state = WIXSTDBA_STATE_FAILED; + } + + if (WIXSTDBA_STATE_OPTIONS == state || WIXSTDBA_STATE_FILESINUSE == state || m_state < state) + { + ::PostMessageW(m_hWnd, WM_WIXSTDBA_CHANGE_STATE, 0, state); + } + } + + + void DeterminePageId( + __in WIXSTDBA_STATE state, + __out DWORD* pdwPageId + ) + { + if (BOOTSTRAPPER_DISPLAY_PASSIVE == m_command.display) + { + switch (state) + { + case WIXSTDBA_STATE_INITIALIZED: + *pdwPageId = BOOTSTRAPPER_ACTION_HELP == m_command.action ? m_rgdwPageIds[WIXSTDBA_PAGE_HELP] : m_rgdwPageIds[WIXSTDBA_PAGE_LOADING]; + break; + + case WIXSTDBA_STATE_HELP: + *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_HELP]; + break; + + case WIXSTDBA_STATE_DETECTING: + *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_LOADING] ? m_rgdwPageIds[WIXSTDBA_PAGE_LOADING] : m_rgdwPageIds[WIXSTDBA_PAGE_PROGRESS_PASSIVE] ? m_rgdwPageIds[WIXSTDBA_PAGE_PROGRESS_PASSIVE] : m_rgdwPageIds[WIXSTDBA_PAGE_PROGRESS]; + break; + + case WIXSTDBA_STATE_DETECTED: __fallthrough; + case WIXSTDBA_STATE_PLANNING: __fallthrough; + case WIXSTDBA_STATE_PLANNED: __fallthrough; + case WIXSTDBA_STATE_APPLYING: __fallthrough; + case WIXSTDBA_STATE_CACHING: __fallthrough; + case WIXSTDBA_STATE_CACHED: __fallthrough; + case WIXSTDBA_STATE_EXECUTING: __fallthrough; + case WIXSTDBA_STATE_EXECUTED: + *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_PROGRESS_PASSIVE] ? m_rgdwPageIds[WIXSTDBA_PAGE_PROGRESS_PASSIVE] : m_rgdwPageIds[WIXSTDBA_PAGE_PROGRESS]; + break; + + default: + *pdwPageId = 0; + break; + } + } + else if (BOOTSTRAPPER_DISPLAY_FULL == m_command.display) + { + switch (state) + { + case WIXSTDBA_STATE_INITIALIZING: + *pdwPageId = 0; + break; + + case WIXSTDBA_STATE_INITIALIZED: + *pdwPageId = BOOTSTRAPPER_ACTION_HELP == m_command.action ? m_rgdwPageIds[WIXSTDBA_PAGE_HELP] : m_rgdwPageIds[WIXSTDBA_PAGE_LOADING]; + break; + + case WIXSTDBA_STATE_HELP: + *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_HELP]; + break; + + case WIXSTDBA_STATE_DETECTING: + *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_LOADING]; + break; + + case WIXSTDBA_STATE_DETECTED: + switch (m_command.action) + { + case BOOTSTRAPPER_ACTION_INSTALL: + *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_INSTALL]; + break; + + case BOOTSTRAPPER_ACTION_MODIFY: __fallthrough; + case BOOTSTRAPPER_ACTION_REPAIR: __fallthrough; + case BOOTSTRAPPER_ACTION_UNINSTALL: + *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_MODIFY]; + break; + } + break; + + case WIXSTDBA_STATE_OPTIONS: + *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_OPTIONS]; + break; + + case WIXSTDBA_STATE_FILESINUSE: + *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_FILESINUSE]; + break; + + case WIXSTDBA_STATE_PLANNING: __fallthrough; + case WIXSTDBA_STATE_PLANNED: __fallthrough; + case WIXSTDBA_STATE_APPLYING: __fallthrough; + case WIXSTDBA_STATE_CACHING: __fallthrough; + case WIXSTDBA_STATE_CACHED: __fallthrough; + case WIXSTDBA_STATE_EXECUTING: __fallthrough; + case WIXSTDBA_STATE_EXECUTED: + *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_PROGRESS]; + break; + + case WIXSTDBA_STATE_APPLIED: + *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_SUCCESS]; + break; + + case WIXSTDBA_STATE_FAILED: + *pdwPageId = m_rgdwPageIds[WIXSTDBA_PAGE_FAILURE]; + break; + } + } + } + + + HRESULT EvaluateConditions() + { + HRESULT hr = S_OK; + BOOL fResult = FALSE; + + for (DWORD i = 0; i < m_Conditions.cConditions; ++i) + { + BAL_CONDITION* pCondition = m_Conditions.rgConditions + i; + + hr = BalConditionEvaluate(pCondition, m_pEngine, &fResult, &m_sczFailedMessage); + BalExitOnFailure(hr, "Failed to evaluate condition."); + + if (!fResult) + { + // Hope they didn't have hidden variables in their message, because it's going in the log in plaintext. + BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "%ls", m_sczFailedMessage); + + hr = E_WIXSTDBA_CONDITION_FAILED; + // todo: remove in WiX v4, in case people are relying on v3.x logging behavior + BalExitOnFailure1(hr, "Bundle condition evaluated to false: %ls", pCondition->sczCondition); + } + } + + ReleaseNullStrSecure(m_sczFailedMessage); + + LExit: + return hr; + } + + + void SetTaskbarButtonProgress( + __in DWORD dwOverallPercentage + ) + { + HRESULT hr = S_OK; + + if (m_fTaskbarButtonOK) + { + hr = m_pTaskbarList->SetProgressValue(m_hWnd, dwOverallPercentage, 100UL); + BalExitOnFailure1(hr, "Failed to set taskbar button progress to: %d%%.", dwOverallPercentage); + } + + LExit: + return; + } + + + void SetTaskbarButtonState( + __in TBPFLAG tbpFlags + ) + { + HRESULT hr = S_OK; + + if (m_fTaskbarButtonOK) + { + hr = m_pTaskbarList->SetProgressState(m_hWnd, tbpFlags); + BalExitOnFailure1(hr, "Failed to set taskbar button state.", tbpFlags); + } + + LExit: + return; + } + + + void SetProgressState( + __in HRESULT hrStatus + ) + { + TBPFLAG flag = TBPF_NORMAL; + + if (IsCanceled() || HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT) == hrStatus) + { + flag = TBPF_PAUSED; + } + else if (IsRollingBack() || FAILED(hrStatus)) + { + flag = TBPF_ERROR; + } + + SetTaskbarButtonState(flag); + } + + + HRESULT LoadBootstrapperBAFunctions() + { + HRESULT hr = S_OK; + LPWSTR sczBafPath = NULL; + + hr = PathRelativeToModule(&sczBafPath, L"bafunctions.dll", m_hModule); + BalExitOnFailure(hr, "Failed to get path to BA function DLL."); #ifdef DEBUG - BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "WIXEXTBA: LoadBootstrapperBAFunctions() - BA function DLL '%ls'", sczBafPath); + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "WIXEXTBA: LoadBootstrapperBAFunctions() - BA function DLL '%ls'", sczBafPath); #endif + + m_hBAFModule = ::LoadLibraryW(sczBafPath); + if (m_hBAFModule) + { + PFN_BOOTSTRAPPER_BA_FUNCTION_CREATE pfnBAFunctionCreate = reinterpret_cast(::GetProcAddress(m_hBAFModule, "CreateBootstrapperBAFunction")); + BalExitOnNullWithLastError1(pfnBAFunctionCreate, hr, "Failed to get CreateBootstrapperBAFunction entry-point from: %ls", sczBafPath); - m_hBAFModule = ::LoadLibraryW(sczBafPath); - if (m_hBAFModule) - { - PFN_BOOTSTRAPPER_BA_FUNCTION_CREATE pfnBAFunctionCreate = reinterpret_cast(::GetProcAddress(m_hBAFModule, "CreateBootstrapperBAFunction")); - BalExitOnNullWithLastError1(pfnBAFunctionCreate, hr, "Failed to get CreateBootstrapperBAFunction entry-point from: %ls", sczBafPath); - - hr = pfnBAFunctionCreate(m_pEngine, m_hBAFModule, &m_pBAFunction); - BalExitOnFailure(hr, "Failed to create BA function."); - } + hr = pfnBAFunctionCreate(m_pEngine, m_hBAFModule, &m_pBAFunction); + BalExitOnFailure(hr, "Failed to create BA function."); + } #ifdef DEBUG - else - { - BalLogError(HRESULT_FROM_WIN32(::GetLastError()), "WIXEXTBA: LoadBootstrapperBAFunctions() - Failed to load DLL %ls", sczBafPath); - } + else + { + BalLogError(HRESULT_FROM_WIN32(::GetLastError()), "WIXEXTBA: LoadBootstrapperBAFunctions() - Failed to load DLL %ls", sczBafPath); + } #endif - LExit: - if (m_hBAFModule && !m_pBAFunction) - { - ::FreeLibrary(m_hBAFModule); - m_hBAFModule = NULL; - } - ReleaseStr(sczBafPath); - - return hr; - } + LExit: + if (m_hBAFModule && !m_pBAFunction) + { + ::FreeLibrary(m_hBAFModule); + m_hBAFModule = NULL; + } + ReleaseStr(sczBafPath); + + return hr; + } - void SavePageSettings( - __in WIXSTDBA_PAGE page - ) - { - THEME_PAGE* pPage = NULL; + void SavePageSettings( + __in WIXSTDBA_PAGE page + ) + { + THEME_PAGE* pPage = NULL; - pPage = ThemeGetPage(m_pTheme, m_rgdwPageIds[page]); - if (pPage) - { - for (DWORD i = 0; i < pPage->cControlIndices; ++i) - { - // Loop through all the checkbox controls (or buttons with BS_AUTORADIOBUTTON) with names and set a Burn variable with that name to true or false. - THEME_CONTROL* pControl = m_pTheme->rgControls + pPage->rgdwControlIndices[i]; - if ((THEME_CONTROL_TYPE_CHECKBOX == pControl->type) || - (THEME_CONTROL_TYPE_BUTTON == pControl->type && (BS_AUTORADIOBUTTON == (BS_AUTORADIOBUTTON & pControl->dwStyle)) && - pControl->sczName && *pControl->sczName)) - { - BOOL bChecked = ThemeIsControlChecked(m_pTheme, pControl->wId); - m_pEngine->SetVariableNumeric(pControl->sczName, bChecked ? 1 : 0); - } + pPage = ThemeGetPage(m_pTheme, m_rgdwPageIds[page]); + if (pPage) + { + for (DWORD i = 0; i < pPage->cControlIndices; ++i) + { + // Loop through all the checkbox controls (or buttons with BS_AUTORADIOBUTTON) with names and set a Burn variable with that name to true or false. + THEME_CONTROL* pControl = m_pTheme->rgControls + pPage->rgdwControlIndices[i]; + if ((THEME_CONTROL_TYPE_CHECKBOX == pControl->type) || + (THEME_CONTROL_TYPE_BUTTON == pControl->type && (BS_AUTORADIOBUTTON == (BS_AUTORADIOBUTTON & pControl->dwStyle)) && + pControl->sczName && *pControl->sczName)) + { + BOOL bChecked = ThemeIsControlChecked(m_pTheme, pControl->wId); + m_pEngine->SetVariableNumeric(pControl->sczName, bChecked ? 1 : 0); + } - // Loop through all the editbox controls with names and set a Burn variable with that name to the contents. - if (THEME_CONTROL_TYPE_EDITBOX == pControl->type && pControl->sczName && *pControl->sczName && - (WIXSTDBA_CONTROL_FOLDER_EDITBOX != pControl->wId && WIXSTDBA_CONTROL_FOLDER_EDITBOX2 != pControl->wId)) - { - LPWSTR sczValue = NULL; - ThemeGetTextControl(m_pTheme, pControl->wId, &sczValue); - m_pEngine->SetVariableString(pControl->sczName, sczValue); - } - } - } - } + // Loop through all the editbox controls with names and set a Burn variable with that name to the contents. + if (THEME_CONTROL_TYPE_EDITBOX == pControl->type && pControl->sczName && *pControl->sczName && + (WIXSTDBA_CONTROL_FOLDER_EDITBOX != pControl->wId && WIXSTDBA_CONTROL_FOLDER_EDITBOX2 != pControl->wId)) + { + LPWSTR sczValue = NULL; + ThemeGetTextControl(m_pTheme, pControl->wId, &sczValue); + m_pEngine->SetVariableString(pControl->sczName, sczValue); + } + } + } + } + int ShowFilesInUseModal( + __in DWORD cFiles, + __in_ecount_z(cFiles) LPCWSTR* rgwzFiles + ) + { + HRESULT hr = S_OK; + LPWSTR sczFilesInUse = NULL; + DWORD_PTR cchLen = 0; + int nResult = IDERROR; + + // If the user has choosen to ignore on a previously displayed "files in use" page, + // we will return the same result for other cases. No need to display the page again. + if (IDIGNORE == m_nLastFilesInUseResult) + { + nResult = m_nLastFilesInUseResult; + } + else if (BOOTSTRAPPER_DISPLAY_FULL == m_command.display) // Only show files in use when using full display mode. + { + // Show applications using the files. + if (cFiles > 0) + { + // See https://msdn.microsoft.com/en-us/library/aa371614%28v=vs.85%29.aspx for details. + for (DWORD i = 1; i < cFiles; i += 2) + { + hr = ::StringCchLengthW(rgwzFiles[i], STRSAFE_MAX_CCH, reinterpret_cast(&cchLen)); + BalExitOnFailure(hr, "Failed to calculate length of string"); + + if (cchLen > 0) + { + hr = StrAllocConcat(&sczFilesInUse, rgwzFiles[i], 0); + BalExitOnFailure(hr, "Failed to concat files in use"); + + hr = StrAllocConcat(&sczFilesInUse, L"\r\n", 2); + BalExitOnFailure(hr, "Failed to concat files in use"); + } + } + } + + if (sczFilesInUse) + { + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_FILESINUSE_TEXT, sczFilesInUse); + } + else + { + ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_FILESINUSE_TEXT, L""); + } + + // Select default option (restart applications). + if (IDNOACTION == m_nLastFilesInUseResult) + { + ThemeSendControlMessage(m_pTheme, WIXSTDBA_CONTROL_FILESINUSE_CLOSE_RADIOBUTTON, BM_SETCHECK, BST_CHECKED, 0); + } + + nResult = ShowModalState(WIXSTDBA_STATE_FILESINUSE); + } + else + { + // Silent UI level installations always shut down applications and services, + // and on Windows Vista and later, use Restart Manager unless disabled. + nResult = IDOK; + } + + LExit: + ReleaseStr(sczFilesInUse); + + // Remember the answer from the user. + m_nLastFilesInUseResult = FAILED(hr) ? IDERROR : nResult; + + return m_nLastFilesInUseResult; + } + + int ShowModalState( + __in WIXSTDBA_STATE state + ) + { + int nResult = IDERROR; + + //Show state and wait for result + nResult = ::SendMessageW(m_hWnd, WM_WIXSTDBA_SHOW_STATE_MODAL, 0, state); + + return nResult; + } + + void ExitModalState( + __in int result + ) + { + if (m_cModalPages > 0) + { + ::PostMessage(m_hWnd, WM_WIXSTDBA_CLOSE_STATE_MODAL, 0, result); + } + } public: - // - // Constructor - intitialize member variables. - // - CWixStandardBootstrapperApplication( - __in HMODULE hModule, - __in BOOL fPrereq, - __in IBootstrapperEngine* pEngine, - __in const BOOTSTRAPPER_COMMAND* pCommand - ) : CBalBaseBootstrapperApplication(pEngine, pCommand, 3, 3000) - { - m_hModule = hModule; - memcpy_s(&m_command, sizeof(m_command), pCommand, sizeof(BOOTSTRAPPER_COMMAND)); + // + // Constructor - initialize member variables. + // + CWixStandardBootstrapperApplication( + __in HMODULE hModule, + __in BOOL fPrereq, + __in HRESULT hrHostInitialization, + __in IBootstrapperEngine* pEngine, + __in const BOOTSTRAPPER_COMMAND* pCommand + ) : CBalBaseBootstrapperApplication(pEngine, pCommand, 3, 3000) + { + m_hModule = hModule; + memcpy_s(&m_command, sizeof(m_command), pCommand, sizeof(BOOTSTRAPPER_COMMAND)); - // Pre-req BA should only show help or do an install (to launch the Managed BA which can then do the right action). - if (fPrereq && BOOTSTRAPPER_ACTION_HELP != m_command.action && BOOTSTRAPPER_ACTION_INSTALL != m_command.action) - { - m_command.action = BOOTSTRAPPER_ACTION_INSTALL; - } - else // maybe modify the action state if the bundle is or is not already installed. - { - LONGLONG llInstalled = 0; - HRESULT hr = BalGetNumericVariable(L"WixBundleInstalled", &llInstalled); - if (SUCCEEDED(hr) && BOOTSTRAPPER_RESUME_TYPE_REBOOT != m_command.resumeType && 0 < llInstalled && BOOTSTRAPPER_ACTION_INSTALL == m_command.action) - { - m_command.action = BOOTSTRAPPER_ACTION_MODIFY; - } - else if (0 == llInstalled && (BOOTSTRAPPER_ACTION_MODIFY == m_command.action || BOOTSTRAPPER_ACTION_REPAIR == m_command.action)) - { - m_command.action = BOOTSTRAPPER_ACTION_INSTALL; - } - } + // Pre-req BA should only show help or do an install (to launch the Managed BA which can then do the right action). + if (fPrereq && BOOTSTRAPPER_ACTION_HELP != m_command.action && BOOTSTRAPPER_ACTION_INSTALL != m_command.action) + { + m_command.action = BOOTSTRAPPER_ACTION_INSTALL; + } + else // maybe modify the action state if the bundle is or is not already installed. + { + LONGLONG llInstalled = 0; + HRESULT hr = BalGetNumericVariable(L"WixBundleInstalled", &llInstalled); + if (SUCCEEDED(hr) && BOOTSTRAPPER_RESUME_TYPE_REBOOT != m_command.resumeType && 0 < llInstalled && BOOTSTRAPPER_ACTION_INSTALL == m_command.action) + { + m_command.action = BOOTSTRAPPER_ACTION_MODIFY; + } + else if (0 == llInstalled && (BOOTSTRAPPER_ACTION_MODIFY == m_command.action || BOOTSTRAPPER_ACTION_REPAIR == m_command.action)) + { + m_command.action = BOOTSTRAPPER_ACTION_INSTALL; + } + } - m_plannedAction = BOOTSTRAPPER_ACTION_UNKNOWN; + m_plannedAction = BOOTSTRAPPER_ACTION_UNKNOWN; - // When resuming from restart doing some install-like operation, try to find the package that forced the - // restart. We'll use this information during planning. - m_sczAfterForcedRestartPackage = NULL; + // When resuming from restart doing some install-like operation, try to find the package that forced the + // restart. We'll use this information during planning. + m_sczAfterForcedRestartPackage = NULL; - if (BOOTSTRAPPER_RESUME_TYPE_REBOOT == m_command.resumeType && BOOTSTRAPPER_ACTION_UNINSTALL < m_command.action) - { - // Ensure the forced restart package variable is null when it is an empty string. - HRESULT hr = BalGetStringVariable(L"WixBundleForcedRestartPackage", &m_sczAfterForcedRestartPackage); - if (FAILED(hr) || !m_sczAfterForcedRestartPackage || !*m_sczAfterForcedRestartPackage) - { - ReleaseNullStr(m_sczAfterForcedRestartPackage); - } - } + if (BOOTSTRAPPER_RESUME_TYPE_REBOOT == m_command.resumeType && BOOTSTRAPPER_ACTION_UNINSTALL < m_command.action) + { + // Ensure the forced restart package variable is null when it is an empty string. + HRESULT hr = BalGetStringVariable(L"WixBundleForcedRestartPackage", &m_sczAfterForcedRestartPackage); + if (FAILED(hr) || !m_sczAfterForcedRestartPackage || !*m_sczAfterForcedRestartPackage) + { + ReleaseNullStr(m_sczAfterForcedRestartPackage); + } + } - m_pWixLoc = NULL; - memset(&m_Bundle, 0, sizeof(m_Bundle)); - memset(&m_Conditions, 0, sizeof(m_Conditions)); - m_sczConfirmCloseMessage = NULL; - m_sczFailedMessage = NULL; + m_pWixLoc = NULL; + memset(&m_Bundle, 0, sizeof(m_Bundle)); + memset(&m_Conditions, 0, sizeof(m_Conditions)); + m_sczConfirmCloseMessage = NULL; + m_sczFailedMessage = NULL; - m_sczLanguage = NULL; - m_pTheme = NULL; - memset(m_rgdwPageIds, 0, sizeof(m_rgdwPageIds)); - m_dwCurrentPage = 0; - m_hUiThread = NULL; - m_fRegistered = FALSE; - m_hWnd = NULL; + m_sczLanguage = NULL; + m_pTheme = NULL; + memset(m_rgdwPageIds, 0, sizeof(m_rgdwPageIds)); + m_dwCurrentPage = 0; + m_hUiThread = NULL; + m_fRegistered = FALSE; + m_hWnd = NULL; - m_state = WIXSTDBA_STATE_INITIALIZING; - m_hrFinal = S_OK; + m_state = WIXSTDBA_STATE_INITIALIZING; + m_hrFinal = hrHostInitialization; - m_fDowngrading = FALSE; - m_restartResult = BOOTSTRAPPER_APPLY_RESTART_NONE; - m_fRestartRequired = FALSE; - m_fAllowRestart = FALSE; + m_fDowngrading = FALSE; + m_restartResult = BOOTSTRAPPER_APPLY_RESTART_NONE; + m_fRestartRequired = FALSE; + m_fAllowRestart = FALSE; - m_sczLicenseFile = NULL; - m_sczLicenseUrl = NULL; - m_fSuppressOptionsUI = FALSE; - m_fSuppressDowngradeFailure = FALSE; - m_fSuppressRepair = FALSE; - m_fShowVersion = FALSE; + m_sczLicenseFile = NULL; + m_sczLicenseUrl = NULL; + m_fSuppressOptionsUI = FALSE; + m_fSuppressDowngradeFailure = FALSE; + m_fSuppressRepair = FALSE; + m_fShowVersion = FALSE; + m_fSupportCacheOnly = FALSE; + m_fShowFilesInUse = FALSE; - m_sdOverridableVariables = NULL; - m_pTaskbarList = NULL; - m_uTaskbarButtonCreatedMessage = UINT_MAX; - m_fTaskbarButtonOK = FALSE; - m_fShowingInternalUiThisPackage = FALSE; + m_sdOverridableVariables = NULL; + m_shPrereqSupportPackages = NULL; + m_rgPrereqPackages = NULL; + m_cPrereqPackages = 0; + m_pTaskbarList = NULL; + m_uTaskbarButtonCreatedMessage = UINT_MAX; + m_fTaskbarButtonOK = FALSE; + m_fShowingInternalUiThisPackage = FALSE; + m_fTriedToLaunchElevated = FALSE; - m_fPrereq = fPrereq; - m_sczPrereqPackage = NULL; - m_fPrereqInstalled = FALSE; - m_fPrereqAlreadyInstalled = FALSE; + m_fPrereq = fPrereq; + m_sczPrereqPackage = NULL; + m_fPrereqInstalled = FALSE; + m_fPrereqAlreadyInstalled = FALSE; - m_fUpdating = FALSE; + m_fUpdating = FALSE; - pEngine->AddRef(); - m_pEngine = pEngine; + m_cModalPages = 0; + m_nLastFilesInUseResult = IDNOACTION; - m_hBAFModule = NULL; - m_pBAFunction = NULL; - } + pEngine->AddRef(); + m_pEngine = pEngine; + + m_hBAFModule = NULL; + m_pBAFunction = NULL; + } - // - // Destructor - release member variables. - // - ~CWixStandardBootstrapperApplication() - { - AssertSz(!::IsWindow(m_hWnd), "Window should have been destroyed before destructor."); - AssertSz(!m_pTheme, "Theme should have been released before destuctor."); + // + // Destructor - release member variables. + // + ~CWixStandardBootstrapperApplication() + { + AssertSz(!::IsWindow(m_hWnd), "Window should have been destroyed before destructor."); + AssertSz(!m_pTheme, "Theme should have been released before destructor."); - ReleaseObject(m_pTaskbarList); - ReleaseDict(m_sdOverridableVariables); - ReleaseStr(m_sczFailedMessage); - ReleaseStr(m_sczConfirmCloseMessage); - BalConditionsUninitialize(&m_Conditions); - BalInfoUninitialize(&m_Bundle); - LocFree(m_pWixLoc); + ReleaseObject(m_pTaskbarList); + ReleaseDict(m_sdOverridableVariables); + ReleaseDict(m_shPrereqSupportPackages); + ReleaseMem(m_rgPrereqPackages); + ReleaseStr(m_sczFailedMessage); + ReleaseStr(m_sczConfirmCloseMessage); + BalConditionsUninitialize(&m_Conditions); + BalInfoUninitialize(&m_Bundle); + LocFree(m_pWixLoc); - ReleaseStr(m_sczLanguage); - ReleaseStr(m_sczLicenseFile); - ReleaseStr(m_sczLicenseUrl); - ReleaseStr(m_sczPrereqPackage); - ReleaseStr(m_sczAfterForcedRestartPackage); - ReleaseNullObject(m_pEngine); + ReleaseStr(m_sczLanguage); + ReleaseStr(m_sczLicenseFile); + ReleaseStr(m_sczLicenseUrl); + ReleaseStr(m_sczPrereqPackage); + ReleaseStr(m_sczAfterForcedRestartPackage); + ReleaseNullObject(m_pEngine); - if (m_hBAFModule) - { - ::FreeLibrary(m_hBAFModule); - m_hBAFModule = NULL; - } - } + if (m_hBAFModule) + { + ::FreeLibrary(m_hBAFModule); + m_hBAFModule = NULL; + } + } private: - HMODULE m_hModule; - BOOTSTRAPPER_COMMAND m_command; - IBootstrapperEngine* m_pEngine; - BOOTSTRAPPER_ACTION m_plannedAction; + HMODULE m_hModule; + BOOTSTRAPPER_COMMAND m_command; + IBootstrapperEngine* m_pEngine; + BOOTSTRAPPER_ACTION m_plannedAction; - LPWSTR m_sczAfterForcedRestartPackage; + LPWSTR m_sczAfterForcedRestartPackage; - WIX_LOCALIZATION* m_pWixLoc; - BAL_INFO_BUNDLE m_Bundle; - BAL_CONDITIONS m_Conditions; - LPWSTR m_sczFailedMessage; - LPWSTR m_sczConfirmCloseMessage; + WIX_LOCALIZATION* m_pWixLoc; + BAL_INFO_BUNDLE m_Bundle; + BAL_CONDITIONS m_Conditions; + LPWSTR m_sczFailedMessage; + LPWSTR m_sczConfirmCloseMessage; - LPWSTR m_sczLanguage; - THEME* m_pTheme; - DWORD m_rgdwPageIds[countof(vrgwzPageNames)]; - DWORD m_dwCurrentPage; - HANDLE m_hUiThread; - BOOL m_fRegistered; - HWND m_hWnd; + LPWSTR m_sczLanguage; + THEME* m_pTheme; + DWORD m_rgdwPageIds[countof(vrgwzPageNames)]; + DWORD m_dwCurrentPage; + HANDLE m_hUiThread; + BOOL m_fRegistered; + HWND m_hWnd; - WIXSTDBA_STATE m_state; - WIXSTDBA_STATE m_stateBeforeOptions; - HRESULT m_hrFinal; + WIXSTDBA_STATE m_state; + WIXSTDBA_STATE m_stateBeforeOptions; + HRESULT m_hrFinal; - BOOL m_fStartedExecution; - DWORD m_dwCalculatedCacheProgress; - DWORD m_dwCalculatedExecuteProgress; + BOOL m_fStartedExecution; + DWORD m_dwCalculatedCacheProgress; + DWORD m_dwCalculatedExecuteProgress; - BOOL m_fDowngrading; - BOOTSTRAPPER_APPLY_RESTART m_restartResult; - BOOL m_fRestartRequired; - BOOL m_fAllowRestart; + BOOL m_fDowngrading; + BOOTSTRAPPER_APPLY_RESTART m_restartResult; + BOOL m_fRestartRequired; + BOOL m_fAllowRestart; - LPWSTR m_sczLicenseFile; - LPWSTR m_sczLicenseUrl; - BOOL m_fSuppressOptionsUI; - BOOL m_fSuppressDowngradeFailure; - BOOL m_fSuppressRepair; - BOOL m_fShowVersion; + LPWSTR m_sczLicenseFile; + LPWSTR m_sczLicenseUrl; + BOOL m_fSuppressOptionsUI; + BOOL m_fSuppressDowngradeFailure; + BOOL m_fSuppressRepair; + BOOL m_fShowVersion; + BOOL m_fSupportCacheOnly; + BOOL m_fShowFilesInUse; BOOL m_fLaunchPassive; BOOL m_fLaunchQuiet; - STRINGDICT_HANDLE m_sdOverridableVariables; + STRINGDICT_HANDLE m_sdOverridableVariables; - BOOL m_fPrereq; - LPWSTR m_sczPrereqPackage; - BOOL m_fPrereqInstalled; - BOOL m_fPrereqAlreadyInstalled; + WIXSTDBA_PREREQ_PACKAGE* m_rgPrereqPackages; + DWORD m_cPrereqPackages; + STRINGDICT_HANDLE m_shPrereqSupportPackages; - ITaskbarList3* m_pTaskbarList; - UINT m_uTaskbarButtonCreatedMessage; - BOOL m_fTaskbarButtonOK; - BOOL m_fShowingInternalUiThisPackage; + BOOL m_fPrereq; + LPWSTR m_sczPrereqPackage; + BOOL m_fPrereqInstalled; + BOOL m_fPrereqAlreadyInstalled; - BOOL m_fUpdating; - LPCWSTR m_wzUpdateLocation; + ITaskbarList3* m_pTaskbarList; + UINT m_uTaskbarButtonCreatedMessage; + BOOL m_fTaskbarButtonOK; + BOOL m_fShowingInternalUiThisPackage; + BOOL m_fTriedToLaunchElevated; + BOOL m_fUpdating; + LPCWSTR m_wzUpdateLocation; - HMODULE m_hBAFModule; - IBootstrapperBAFunction* m_pBAFunction; + DWORD m_cModalPages; + int m_nLastFilesInUseResult; + + HMODULE m_hBAFModule; + IBootstrapperBAFunction* m_pBAFunction; }; // -// CreateUserExperience - creates a new IBurnUserExperience object. +// CreateBootstrapperApplication - creates a new IBootstrapperApplication object. // HRESULT CreateBootstrapperApplication( - __in HMODULE hModule, - __in BOOL fPrereq, - __in IBootstrapperEngine* pEngine, - __in const BOOTSTRAPPER_COMMAND* pCommand, - __out IBootstrapperApplication** ppApplication - ) + __in HMODULE hModule, + __in BOOL fPrereq, + __in HRESULT hrHostInitialization, + __in IBootstrapperEngine* pEngine, + __in const BOOTSTRAPPER_COMMAND* pCommand, + __out IBootstrapperApplication** ppApplication + ) { - HRESULT hr = S_OK; - CWixStandardBootstrapperApplication* pApplication = NULL; + HRESULT hr = S_OK; + CWixStandardBootstrapperApplication* pApplication = NULL; - pApplication = new CWixStandardBootstrapperApplication(hModule, fPrereq, pEngine, pCommand); - ExitOnNull(pApplication, hr, E_OUTOFMEMORY, "Failed to create new standard bootstrapper application object."); + pApplication = new CWixStandardBootstrapperApplication(hModule, fPrereq, hrHostInitialization, pEngine, pCommand); + ExitOnNull(pApplication, hr, E_OUTOFMEMORY, "Failed to create new standard bootstrapper application object."); - *ppApplication = pApplication; - pApplication = NULL; + *ppApplication = pApplication; + pApplication = NULL; LExit: - ReleaseObject(pApplication); - return hr; + ReleaseObject(pApplication); + return hr; } diff --git a/wixstdba/precomp.h b/wixstdba/precomp.h index 61bee4f..059d1c1 100644 --- a/wixstdba/precomp.h +++ b/wixstdba/precomp.h @@ -21,6 +21,7 @@ #include #include #include +#include #include "dutil.h" #include "memutil.h" @@ -47,6 +48,7 @@ HRESULT CreateBootstrapperApplication( __in HMODULE hModule, __in BOOL fPrereq, + __in HRESULT hrHostInitialization, __in IBootstrapperEngine* pEngine, __in const BOOTSTRAPPER_COMMAND* pCommand, __out IBootstrapperApplication** ppApplication diff --git a/wixstdba/wixstdba.cpp b/wixstdba/wixstdba.cpp index 59c389c..dcee52a 100644 --- a/wixstdba/wixstdba.cpp +++ b/wixstdba/wixstdba.cpp @@ -47,7 +47,7 @@ extern "C" HRESULT WINAPI BootstrapperApplicationCreate( BalInitialize(pEngine); - hr = CreateBootstrapperApplication(vhInstance, FALSE, pEngine, pCommand, ppApplication); + hr = CreateBootstrapperApplication(vhInstance, FALSE, S_OK, pEngine, pCommand, ppApplication); BalExitOnFailure(hr, "Failed to create bootstrapper application interface."); LExit: @@ -59,3 +59,28 @@ extern "C" void WINAPI BootstrapperApplicationDestroy() { BalUninitialize(); } + + +extern "C" HRESULT WINAPI MbaPrereqBootstrapperApplicationCreate( + __in HRESULT hrHostInitialization, + __in IBootstrapperEngine* pEngine, + __in const BOOTSTRAPPER_COMMAND* pCommand, + __out IBootstrapperApplication** ppApplication + ) +{ + HRESULT hr = S_OK; + + BalInitialize(pEngine); + + hr = CreateBootstrapperApplication(vhInstance, TRUE, hrHostInitialization, pEngine, pCommand, ppApplication); + BalExitOnFailure(hr, "Failed to create managed prerequisite bootstrapper application interface."); + +LExit: + return hr; +} + + +extern "C" void WINAPI MbaPrereqBootstrapperApplicationDestroy() +{ + BalUninitialize(); +} diff --git a/wixstdba/wixstdba.vcxproj b/wixstdba/wixstdba.vcxproj index 3bde57e..44715cb 100644 --- a/wixstdba/wixstdba.vcxproj +++ b/wixstdba/wixstdba.vcxproj @@ -62,7 +62,7 @@ Disabled - $(WiX)SDK\VS2010\inc;%(AdditionalIncludeDirectories) + $(WiX)SDK\VS2013\inc;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_LIB;DEBUG;%(PreprocessorDefinitions);$(ExtraDefinitions) true EnableFastChecks @@ -80,7 +80,7 @@ dutil.lib;balutil.lib;comctl32.lib;gdiplus.lib;shlwapi.lib;wininet.lib;version.lib;msimg32.lib;%(AdditionalDependencies) - $(WiX)SDK\VS2010\lib\x86;%(AdditionalLibraryDirectories) + $(WiX)SDK\VS2013\lib\x86;%(AdditionalLibraryDirectories) wixstdba.def true Windows @@ -89,7 +89,7 @@ Disabled - $(WiX)SDK\VS2010\inc;%(AdditionalIncludeDirectories) + $(WiX)SDK\VS2013\inc;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);$(ExtraDefinitions) true EnableFastChecks @@ -107,7 +107,7 @@ dutil.lib;balutil.lib;comctl32.lib;gdiplus.lib;shlwapi.lib;wininet.lib;version.lib;msimg32.lib;%(AdditionalDependencies) - $(WiX)SDK\VS2010\lib\x86;%(AdditionalLibraryDirectories) + $(WiX)SDK\VS2013\lib\x86;%(AdditionalLibraryDirectories) wixstdba.def false Windows