From b406972af1ce404b19639cdbe955f07d2f8fb61f Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 28 Oct 2008 23:56:20 +0000
Subject: [PATCH] svn merge -r100302:100467 installer-james-combo-merge for
 QAR-972, incorporating: QAR-892 Windows installer that pings secondlife.com
 on launch QAR-837 Six New Languages in the Installer QAR-908
 downloader-support-1 merge

---
 indra/newview/app_settings/settings.xml       |  13 +-
 .../windows/FILES_ARE_UNICODE_UTF-16LE.txt    |   6 +
 .../installers/windows/installer_template.nsi | 473 +++++-------------
 indra/newview/installers/windows/lang_de.nsi  | Bin 3762 -> 8262 bytes
 .../newview/installers/windows/lang_en-us.nsi | Bin 3211 -> 7162 bytes
 indra/newview/installers/windows/lang_es.nsi  | Bin 0 -> 7612 bytes
 indra/newview/installers/windows/lang_fr.nsi  | Bin 0 -> 7858 bytes
 indra/newview/installers/windows/lang_it.nsi  | Bin 0 -> 7196 bytes
 indra/newview/installers/windows/lang_ja.nsi  | Bin 3579 -> 6302 bytes
 indra/newview/installers/windows/lang_ko.nsi  | Bin 3448 -> 6200 bytes
 indra/newview/installers/windows/lang_nl.nsi  | Bin 0 -> 7160 bytes
 .../newview/installers/windows/lang_pt-br.nsi | Bin 0 -> 7590 bytes
 indra/newview/installers/windows/lang_zh.nsi  | Bin 0 -> 5354 bytes
 .../installers/windows/language_menu.nsi      | Bin 0 -> 1292 bytes
 indra/newview/llappviewer.cpp                 |  20 -
 indra/newview/llappviewer.h                   |   2 -
 indra/newview/llfloaterbuycurrency.cpp        |  14 -
 indra/newview/llmutelist.cpp                  |  25 +-
 indra/newview/llpanellogin.cpp                |  12 +-
 indra/newview/llpreviewscript.cpp             |  15 +-
 indra/newview/llpreviewscript.h               |   4 +-
 indra/newview/llstartup.cpp                   |  56 +--
 indra/newview/llviewermenu.cpp                |  59 ---
 indra/newview/llviewermenu.h                  |   1 -
 indra/newview/viewer_manifest.py              |  52 +-
 indra/win_updater/updater.cpp                 | 103 +---
 26 files changed, 240 insertions(+), 615 deletions(-)
 create mode 100644 indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt
 create mode 100644 indra/newview/installers/windows/lang_es.nsi
 create mode 100644 indra/newview/installers/windows/lang_fr.nsi
 create mode 100644 indra/newview/installers/windows/lang_it.nsi
 create mode 100644 indra/newview/installers/windows/lang_nl.nsi
 create mode 100644 indra/newview/installers/windows/lang_pt-br.nsi
 create mode 100644 indra/newview/installers/windows/lang_zh.nsi
 create mode 100644 indra/newview/installers/windows/language_menu.nsi

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 07fa71ce389..72e16ea70ca 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3595,6 +3595,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>ForceMandatoryUpdate</key>
+    <map>
+      <key>Comment</key>
+      <string>For QA: On next startup, forces the auto-updater to run</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ForwardBtnRect</key>
     <map>
       <key>Comment</key>
@@ -4178,7 +4189,7 @@
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>https://wiki.secondlife.com/wiki/[LSL_STRING]</string>
+      <string>http://wiki.secondlife.com/wiki/[LSL_STRING]</string>
     </map>
     <key>LagMeterShrunk</key>
     <map>
diff --git a/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt b/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt
new file mode 100644
index 00000000000..185c0180fbb
--- /dev/null
+++ b/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt
@@ -0,0 +1,6 @@
+The language files in this directory are Unicode (Little-Endian) format, also known as UTF-16 LE.
+
+This is the format required for NSIS Unicode.  See http://www.scratchpaper.com/ for details.
+
+James Cook
+September 2008
diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi
index c79550774c4..01bd98f87c9 100644
--- a/indra/newview/installers/windows/installer_template.nsi
+++ b/indra/newview/installers/windows/installer_template.nsi
@@ -1,30 +1,22 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; secondlife setup.nsi
-;; Copyright 2004-2007, Linden Research, Inc.
-;; For info, see http://www.nullsoft.com/free/nsis/
+;; Copyright 2004-2008, Linden Research, Inc.
+;;
+;; NSIS Unicode 2.38.1 or higher required
+;; http://www.scratchpaper.com/
 ;;
-;; NSIS 2.22 or higher required
 ;; Author: James Cook, Don Kjer, Callum Prentice
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Detect NSIS compiler version
-!define "NSIS${NSIS_VERSION}"
-!ifdef "NSISv2.02" | "NSISv2.03" | "NSISv2.04" | "NSISv2.05" | "NSISv2.06"
-    ;; before 2.07 defaulted lzma to solid (whole file)
-    SetCompressor lzma
-!else
-    ;; after 2.07 required /solid for whole file compression
-    SetCompressor /solid lzma
-!endif
-
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Compiler flags
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 SetOverwrite on				; overwrite files
 SetCompress auto			; compress iff saves space
+SetCompressor /solid lzma	; compress whole installer as one block
 SetDatablockOptimize off	; only saves us 0.1%, not worth it
 XPStyle on                  ; add an XP manifest to the installer
+RequestExecutionLevel admin	; on Vista we must be admin because we write to Program Files
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;; Project flags
@@ -41,9 +33,22 @@ XPStyle on                  ; add an XP manifest to the installer
 !include "%%SOURCE%%\installers\windows\lang_en-us.nsi"
 !include "%%SOURCE%%\installers\windows\lang_ja.nsi"
 !include "%%SOURCE%%\installers\windows\lang_ko.nsi"
+!include "%%SOURCE%%\installers\windows\lang_pt-br.nsi"
+!include "%%SOURCE%%\installers\windows\lang_fr.nsi"
+!include "%%SOURCE%%\installers\windows\lang_es.nsi"
+!include "%%SOURCE%%\installers\windows\lang_it.nsi"
+!include "%%SOURCE%%\installers\windows\lang_nl.nsi"
+!include "%%SOURCE%%\installers\windows\lang_zh.nsi"
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Tweak for different servers/builds (this placeholder is replaced by viewer_manifest.py)
+;; For example:
+;; !define INSTFLAGS "%(flags)s"
+;; !define INSTNAME   "SecondLife%(grid_caps)s"
+;; !define SHORTCUT   "Second Life (%(grid_caps)s)"
+;; !define URLNAME   "secondlife%(grid)s"
+;; !define UNINSTALL_SETTINGS 1
+
 %%GRID_VARS%%
 
 Name ${INSTNAME}
@@ -63,11 +68,7 @@ AutoCloseWindow true					; after all files install, close window
 
 InstallDir "$PROGRAMFILES\${INSTNAME}"
 InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" ""
-!ifdef UPDATE
-DirText $(DirectoryChooseTitle) $(DirectoryChooseUpdate)
-!else
 DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup)
-!endif
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -76,145 +77,41 @@ DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup)
 Var INSTPROG
 Var INSTEXE
 Var INSTFLAGS
-Var LANGFLAGS
 Var INSTSHORTCUT
+Var COMMANDLINE         ; command line passed to this installer, set in .onInit
 
-;;; Function definitions should go before file includes, because the NSIS package
-;;; is a single stream of bytecodes + file data.  So if your function definitions are at
-;;; the end of the file it has to decompress the whole thing before it can call a function. JC
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; PostInstallExe
-; This just runs any post installation scripts.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function PostInstallExe
-push $0
-  ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "PostInstallExe"
-  ;MessageBox MB_OK '$0'
-  ExecWait '$0'
-pop $0
-FunctionEnd
+;;; Function definitions should go before file includes, because calls to
+;;; DLLs like LangDLL trigger an implicit file include, so if that call is at
+;;; the end of this script NSIS has to decompress the whole installer before 
+;;; it can call the DLL function. JC
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; CheckStartupParameters
-; Sets INSTFLAGS, INSTPROG, and INSTEXE.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function CheckStartupParams
-push $0
-push $R0
-
-  ; Look for a registry entry with info about where to update.
-  Call GetProgramName
-  pop $R0
-  StrCpy $INSTPROG "$R0"
-  StrCpy $INSTEXE "$R0.exe"
-
-  ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" ""
-  ; If key doesn't exist, skip install
-  IfErrors ABORT
-  StrCpy $INSTDIR "$0"
-
-  ; We now have a directory to install to.  Get the startup parameters and shortcut as well.
-  ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags"
-  IfErrors +2
-  StrCpy $INSTFLAGS "$0"
-  ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut"
-  IfErrors +2
-  StrCpy $INSTSHORTCUT "$0"
-  ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe"
-  IfErrors +2
-  StrCpy $INSTEXE "$0"
-  Goto FINISHED
-
-ABORT:
-  MessageBox MB_OK $(CheckStartupParamsMB)
-  Quit
-
-FINISHED:
-  ;MessageBox MB_OK "INSTPROG: $INSTPROG, INSTEXE: $INSTEXE, INSTFLAGS: $INSTFLAGS"
-pop $R0
-pop $0
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function un.CheckStartupParams
-push $0
-push $R0
-
-  ; Look for a registry entry with info about where to update.
-  Call un.GetProgramName
-  pop $R0
-  StrCpy $INSTPROG "$R0"
-  StrCpy $INSTEXE "$R0.exe"
-
-  ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" ""
-  ; If key doesn't exist, skip install
-  IfErrors ABORT
-  StrCpy $INSTDIR "$0"
-
-  ; We now have a directory to install to.  Get the startup parameters and shortcut as well.
-  ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags"
-  IfErrors +2
-  StrCpy $INSTFLAGS "$0"
-  ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut"
-  IfErrors +2
-  StrCpy $INSTSHORTCUT "$0"
-  ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe"
-  IfErrors +2
-  StrCpy $INSTEXE "$0"
-  Goto FINISHED
-
-ABORT:
-  MessageBox MB_OK $(CheckStartupParamsMB)
-  Quit
-
-FINISHED:
-  ;MessageBox MB_OK "INSTPROG: $INSTPROG, INSTEXE: $INSTEXE, INSTFLAGS: $INSTFLAGS"
-pop $R0
-pop $0
-FunctionEnd
+!include "FileFunc.nsh"     ; For GetParameters, GetOptions
+!insertmacro GetParameters
+!insertmacro GetOptions
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; After install completes, offer readme file
+;;; After install completes, launch app
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 Function .onInstSuccess
-	MessageBox MB_YESNO \
-	$(InstSuccesssQuestion) /SD IDYES IDNO NoReadme
-		; Assumes SetOutPath $INSTDIR
-		Exec '"$INSTDIR\$INSTEXE" $INSTFLAGS'
-	NoReadme:
+    Push $R0	# Option value, unused
+    ${GetOptions} $COMMANDLINE "/AUTOSTART" $R0
+    # If parameter was there (no error) just launch
+    # Otherwise ask
+    IfErrors label_ask_launch label_launch
+    
+label_ask_launch:
+    # Don't launch by default when silent
+    IfSilent label_no_launch
+	MessageBox MB_YESNO $(InstSuccesssQuestion) \
+        IDYES label_launch IDNO label_no_launch
+        
+label_launch:
+	# Assumes SetOutPath $INSTDIR
+	Exec '"$INSTDIR\$INSTEXE" $INSTFLAGS'
+label_no_launch:
+	Pop $R0
 FunctionEnd
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Remove old NSIS version. Modifies no variables.
-; Does NOT delete the LindenWorld directory, or any
-; user files in that directory.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function RemoveNSIS
-  Push $0
-  ; Grab the installation directory of the old version
-  DetailPrint $(RemoveOldNSISVersion)
-  ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" ""
-
-  ; If key doesn't exist, skip uninstall
-  IfErrors NO_NSIS
-
-  ; Clean up legacy beta shortcuts
-  Delete "$SMPROGRAMS\Second Life Beta.lnk"
-  Delete "$DESKTOP\Second Life Beta.lnk"
-  Delete "$SMPROGRAMS\Second Life.lnk"
-  
-  ; Clean up old newview.exe file
-  Delete "$INSTDIR\newview.exe"
-
-  ; Intentionally don't delete the stuff in
-  ; Documents and Settings, so we keep the user's settings
-
-  NO_NSIS:
-  Pop $0
-FunctionEnd
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Make sure we're not on Windows 98 / ME
@@ -242,28 +139,28 @@ FunctionEnd
 ; Make sure the user can install/uninstall
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 Function CheckIfAdministrator
-		DetailPrint $(CheckAdministratorInstDP)
-         UserInfo::GetAccountType
-         Pop $R0
-         StrCmp $R0 "Admin" is_admin
-         MessageBox MB_OK $(CheckAdministratorInstMB)
-         Quit
-is_admin:
-         Return
+    DetailPrint $(CheckAdministratorInstDP)
+    UserInfo::GetAccountType
+    Pop $R0
+    StrCmp $R0 "Admin" lbl_is_admin
+        MessageBox MB_OK $(CheckAdministratorInstMB)
+        Quit
+lbl_is_admin:
+    Return
 FunctionEnd
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 Function un.CheckIfAdministrator
-	DetailPrint $(CheckAdministratorUnInstDP)
-         UserInfo::GetAccountType
-         Pop $R0
-         StrCmp $R0 "Admin" is_admin
-         MessageBox MB_OK $(CheckAdministratorUnInstMB)
-         Quit
-is_admin:
-         Return
+    DetailPrint $(CheckAdministratorUnInstDP)
+    UserInfo::GetAccountType
+    Pop $R0
+    StrCmp $R0 "Admin" lbl_is_admin
+        MessageBox MB_OK $(CheckAdministratorUnInstMB)
+        Quit
+lbl_is_admin:
+    Return
 FunctionEnd
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -310,6 +207,33 @@ Function CloseSecondLife
     Return
 FunctionEnd
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Test our connection to secondlife.com
+; Also allows us to count attempted installs by examining web logs.
+; *TODO: Return current SL version info and have installer check
+; if it is up to date.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CheckNetworkConnection
+    Push $0
+    Push $1
+    DetailPrint $(CheckNetworkConnectionDP)
+    GetTempFileName $0
+    !define HTTP_TIMEOUT 5000 ; milliseconds
+    ; Don't show secondary progress bar, this will be quick.
+    NSISdl::download_quiet \
+        /TIMEOUT=${HTTP_TIMEOUT} \
+        "http://join.secondlife.com/installer-check/?v=${VERSION_LONG}" \
+        $0
+    Pop $1 ; Return value, either "success", "cancel" or an error message
+    ; MessageBox MB_OK "Download result: $1"
+    ; Result ignored for now
+	; StrCmp $1 "success" +2
+	;	DetailPrint "Connection failed: $1"
+    Delete $0 ; temporary file
+    Pop $1
+    Pop $0
+    Return
+FunctionEnd
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Delete files in Documents and Settings\<user>\SecondLife\cache
@@ -577,7 +501,6 @@ StrCpy $INSTFLAGS ""
 StrCpy $INSTPROG "${INSTNAME}"
 StrCpy $INSTEXE "${INSTEXE}"
 StrCpy $INSTSHORTCUT "${SHORTCUT}"
-Call un.CheckStartupParams              ; Figure out where, what and how to uninstall.
 Call un.CheckIfAdministrator		; Make sure the user can install/uninstall
 
 ; uninstall for all users (if you change this, change it in the install as well)
@@ -586,10 +509,9 @@ SetShellVarContext all
 ; Make sure we're not running
 Call un.CloseSecondLife
 
-; Clean up registry keys (these should all be !defines somewhere)
+; Clean up registry keys and subkeys (these should all be !defines somewhere)
 DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG"
 DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG"
-DeleteRegKey HKEY_LOCAL_MACHINE "Software\Linden Research, Inc.\Installer Language" 
 
 ; Clean up shortcuts
 Delete "$SMPROGRAMS\$INSTSHORTCUT\*.*"
@@ -613,123 +535,6 @@ Call un.ProgramFiles
 
 SectionEnd 				; end of uninstall section
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; (From the NSIS wiki, DK)
-; GetParameterValue
-;
-; Usage:
-; !insertmacro GetParameterValue "/L=" "1033"
-; pop $R0
-;
-; Returns on top of stack
-;
-; Example command lines:
-; foo.exe /S /L=1033 /D=C:\Program Files\Foo
-; or:
-; foo.exe /S "/L=1033" /D="C:\Program Files\Foo"
-; gpv "/L=" "1033"
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- !macro GetParameterValue SWITCH DEFAULT
-   Push $0
-   Push $1
-   Push $2
-   Push $3
-   Push $4
-
- ;$CMDLINE='"My Setup\Setup.exe" /L=1033 /S'
-   Push "$CMDLINE"
-   Push '${SWITCH}"'
-   !insertmacro StrStr
-   Pop $0
-   StrCmp "$0" "" gpv_notquoted
- ;$0='/L="1033" /S'
-   StrLen $2 "$0"
-   Strlen $1 "${SWITCH}"
-   IntOp $1 $1 + 1
-   StrCpy $0 "$0" $2 $1
- ;$0='1033" /S'
-   Push "$0"
-   Push '"'
-   !insertmacro StrStr
-   Pop $1
-   StrLen $2 "$0"
-   StrLen $3 "$1"
-   IntOp $4 $2 - $3
-   StrCpy $0 $0 $4 0
-   Goto gpv_done
-
-   gpv_notquoted:
-   Push "$CMDLINE"
-   Push "${SWITCH}"
-   !insertmacro StrStr
-   Pop $0
-   StrCmp "$0" "" gpv_done
- ;$0='/L="1033" /S'
-   StrLen $2 "$0"
-   Strlen $1 "${SWITCH}"
-   StrCpy $0 "$0" $2 $1
- ;$0=1033 /S'
-   Push "$0"
-   Push ' '
-   !insertmacro StrStr
-   Pop $1
-   StrLen $2 "$0"
-   StrLen $3 "$1"
-   IntOp $4 $2 - $3
-   StrCpy $0 $0 $4 0
-   Goto gpv_done
-
-   gpv_done:
-   StrCmp "$0" "" 0 +2
-   StrCpy $0 "${DEFAULT}"
-
-   Pop $4
-   Pop $3
-   Pop $2
-   Pop $1
-   Exch $0
- !macroend
-
-; And I had to modify StrStr a tiny bit.
-; Possible upgrade switch the goto's to use ${__LINE__}
-
-!macro STRSTR
-  Exch $R1 ; st=haystack,old$R1, $R1=needle
-  Exch    ; st=old$R1,haystack
-  Exch $R2 ; st=old$R1,old$R2, $R2=haystack
-  Push $R3
-  Push $R4
-  Push $R5
-  StrLen $R3 $R1
-  StrCpy $R4 0
-  ; $R1=needle
-  ; $R2=haystack
-  ; $R3=len(needle)
-  ; $R4=cnt
-  ; $R5=tmp
- ;  loop;
-    StrCpy $R5 $R2 $R3 $R4
-    StrCmp $R5 $R1 +4
-    StrCmp $R5 "" +3
-    IntOp $R4 $R4 + 1
-    Goto -4
- ;  done;
-  StrCpy $R1 $R2 "" $R4
-  Pop $R5
-  Pop $R4
-  Pop $R3
-  Pop $R2
-  Exch $R1
-!macroend
-
-Function GetProgramName
-  !insertmacro GetParameterValue "/P=" "SecondLife"
-FunctionEnd
-
-Function un.GetProgramName
-  !insertmacro GetParameterValue "/P=" "SecondLife"
-FunctionEnd
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; (From the NSIS documentation, JC)
@@ -827,42 +632,59 @@ FunctionEnd
 ;;  entry to the language ID selector below
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 Function .onInit
-
-	; read the language from registry (ok if not there) and set langauge menu
+    Push $0
+    ${GetParameters} $COMMANDLINE              ; get our command line
+    ${GetOptions} $COMMANDLINE "/LANGID=" $0   ; /LANGID=1033 implies US English
+    ; If no language (error), then proceed
+    IfErrors lbl_check_silent
+    ; No error means we got a language, so use it
+    StrCpy $LANGUAGE $0
+    Goto lbl_return
+
+lbl_check_silent:
+    ; For silent installs, no language prompt, use default
+    IfSilent lbl_return
+    
+	; If we currently have a version of SL installed, default to the language of that install
+    ; Otherwise don't change $LANGUAGE and it will default to the OS UI language.
 	ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
+    IfErrors lbl_build_menu
 	StrCpy $LANGUAGE $0
 
+lbl_build_menu:
 	Push ""
-	Push ${LANG_ENGLISH}
-	Push English
-	Push ${LANG_GERMAN}
-	Push German
-	Push ${LANG_JAPANESE}
-	Push Japanese
-	Push ${LANG_KOREAN}
-	Push Korean
+    # Use separate file so labels can be UTF-16 but we can still merge changes
+    # into this ASCII file. JC
+    !include "%%SOURCE%%\installers\windows\language_menu.nsi"
+    
 	Push A ; A means auto count languages for the auto count to work the first empty push (Push "") must remain
-	LangDLL::LangDialog "Installer Language" "Please select the language of the installer"
-	Pop $LANGUAGE
-	StrCmp $LANGUAGE "cancel" 0 +2
+	LangDLL::LangDialog $(InstallerLanguageTitle) $(SelectInstallerLanguage)
+	Pop $0
+	StrCmp $0 "cancel" 0 +2
 		Abort
+    StrCpy $LANGUAGE $0
 
 	; save language in registry		
 	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" $LANGUAGE
+lbl_return:
+    Pop $0
+    Return
 FunctionEnd
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 Function un.onInit
-
-	; read language from registry and set for ininstaller
+	; read language from registry and set for uninstaller
+    ; Key will be removed on successful uninstall
 	ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
+    IfErrors lbl_end
 	StrCpy $LANGUAGE $0
-
+lbl_end:
+    Return
 FunctionEnd
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Sections
+;;; MAIN SECTION
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 Section ""						; (default section)
 
@@ -874,15 +696,11 @@ StrCpy $INSTPROG "${INSTNAME}"
 StrCpy $INSTEXE "${INSTEXE}"
 StrCpy $INSTSHORTCUT "${SHORTCUT}"
 
-IfSilent +2
-Goto NOT_SILENT
-  Call CheckStartupParams                 ; Figure out where, what and how to install.
-NOT_SILENT:
 Call CheckWindowsVersion		; warn if on Windows 98/ME
 Call CheckIfAdministrator		; Make sure the user can install/uninstall
 Call CheckIfAlreadyCurrent		; Make sure that we haven't already installed this version
 Call CloseSecondLife			; Make sure we're not running
-Call RemoveNSIS					; Check for old NSIS install to remove
+Call CheckNetworkConnection		; ping secondlife.com
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;; Don't remove cache files during a regular install, removing the inventory cache on upgrades results in lots of damage to the servers.
@@ -907,9 +725,6 @@ Call RemoveOldReleaseNotes
 ;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
 %%INSTALL_FILES%%
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; If this is a silent update, we don't need to re-create these shortcuts or registry entries.
-IfSilent POST_INSTALL
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Shortcuts in start menu
@@ -918,25 +733,18 @@ SetOutPath "$INSTDIR"
 CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \
 				"$INSTDIR\$INSTEXE" "$INSTFLAGS"
 
-!ifdef MUSEUM
-CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT Museum.lnk" \
 
-				"$INSTDIR\$INSTEXE" "$INSTFLAGS -simple"
-CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT Museum Spanish.lnk" \
-
-				"$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish"
-!endif
-
-WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Create Trial Account.url" \
+WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Create Account.url" \
 				"InternetShortcut" "URL" \
 				"http://www.secondlife.com/registration/"
 WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \
 				"InternetShortcut" "URL" \
 				"http://www.secondlife.com/account/"
-CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.lnk" \
-				"$INSTDIR\lsl_guide.html"
+WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.url" \
+				"InternetShortcut" "URL" \
+                "http://wiki.secondlife.com/wiki/LSL_Portal"
 CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \
-				'"$INSTDIR\uninst.exe"' '/P="$INSTPROG"'
+				'"$INSTDIR\uninst.exe"' ''
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Other shortcuts
@@ -944,18 +752,8 @@ SetOutPath "$INSTDIR"
 CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS"
 CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS"
 CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \
-				'"$INSTDIR\uninst.exe"' '/P="$INSTPROG"'
-
-!ifdef MUSEUM
-CreateShortCut "$DESKTOP\$INSTSHORTCUT Museum.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple"
+				'"$INSTDIR\uninst.exe"' ''
 
-CreateShortCut "$DESKTOP\$INSTSHORTCUT Museum Spanish.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish"
-
-CreateShortCut "$INSTDIR\$INSTSHORTCUT Museum.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple"
-
-CreateShortCut "$INSTDIR\$INSTSHORTCUT Museum Spanish.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish"
-
-!endif
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Write registry
@@ -965,22 +763,17 @@ WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags
 WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut" "$INSTSHORTCUT"
 WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" "$INSTEXE"
 WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG (remove only)"
-WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe" /P="$INSTPROG"'
+WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe"'
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Write URL registry info
 WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life"
 WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" ""
 WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
+;; URL param must be last item passed to viewer, it ignores subsequent params
+;; to avoid parameter injection attacks.
 WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"'
 
-Goto WRITE_UNINST
-
-POST_INSTALL:
-; Run a post-executable script if necessary.
-Call PostInstallExe
-
-WRITE_UNINST:
 ; write out uninstaller
 WriteUninstaller "$INSTDIR\uninst.exe"
 
diff --git a/indra/newview/installers/windows/lang_de.nsi b/indra/newview/installers/windows/lang_de.nsi
index c41012861fbeca26dedea9e65fcc8d201536ee66..911ed743488f773143e3e74860ce1dde775043b8 100644
GIT binary patch
literal 8262
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

literal 3762
zcmd5<O-~z15WVv&N){5k60y)8lS4#of~*+Z%RtBhDe9T2v0EPZSp5MBQU2*3^BXw%
zu&=wvc+A)=ht+B&kfoXGs_IwuUe&y#k5U^;(ooKYaHTyMRw5q?HFaXjA7#nZIs7q7
z21$Q#`SZ3{DXV3AyEdQ#7UuSx^+KqwDvQp+!8<Z8wbJ5frKpq{E5l^@o25)Ft;ECM
z3|qG(#rJf_+W1G6Cb!ImWy+k^tSk=mfsd0QqMFh$I!au6<$YgA<HH}r)6x0Y^Rvr~
z)6q}rP<-Bb;banGw+@EKA^n_9re(~uaf2lQ+2OVi>pjWzB^x$05p%Y5FLh42FqE=p
zX$?tbtSC##8kbHut5l9l7EB9i>2nRs;g8Q}m&sr}`Z^qs&VP0Z&)Gh(>h8Lt&t>=Z
z+Nm@n3Rlozrg=fVYO!>dbtAhMVvT%JpCfsL+p!Kv)>jmv=(*IK*-C#8z0gFmzkbu3
zRh8jT-<I1!ge&+mZ^k-TK1icMo_X0*lbc_&k`*PA(ee0g;2wQavC@>s%0(Y<UkbAu
z?nxnXK!^~Ftq_}<BlbOOpMt5%5+T5w-i)((Vuc1dCPIsap#>X*zN57I*1T)m^5R1a
zu}_s!XswB^rtr0(qr<@{xtd&#&yPsSY-Yh;g$%lsSXqL{HF>DuSvf^3%}Rv!orc`D
zN@-k{Au+%t%4*t7%vULiZ_S^MO{o0y4rzi84xs<l`w#>jSlvN3%ACC9ti_=j;4+wu
z%iJ4mShB4Ge}Q95y#kj+2?W+=-EO=~=5YogRbJhjT|ol8H}QRaxIby(yN=?ZPB|!3
zAJ`7pXwV&A+f_Sig5yv>$n(lRSW<2i;mhRsDcT<=Cnw~f9Ty^_aYA3ZhqnrUePrZw
zciD_kT2JwHf`^wU^x)Pdg#fWSruk#&7Cd+AuF^9vG_zFT9i67gK|^#xoIXTa-LWnm
z21l`iY^XZqm9FfAZ~11Mzd!Qr6Cjsh#X>4+tQHUgDxAvVJg5)+-mG+h>$G{mH`gob
z;LRYcwNiY*_0a2biZbB_p$DE9r4?mYU7#2#8|lRtIKbBm|2flk01t&1m&M8$7&1hl
zvvunZ89Y2D_kuE@2)-Nu_BG%+^*Z>j)hhu!Q?_8Oa7puK`*yE@FGl(A0mRDSlLqD+
z^tRzEHH-Xvy<W6BZBX>$;?YjMbE+VQs2b{xRmpBi`m+hWYrNO=xLF0g_uT<PPJOZ%
z=ZYQnuh_DIict!)5|hw`=~Viq;2*f+t)p`I6=F}FZ-UeYDZqe3<KjMn7j%a`rzt!w
zmbCrvfT`(WE|jXL%;s`f>by|K9R@2=7=Xw4g)Ja~YKP6J{N)N;gBFrRQGpr^u|9eD
zfSmyItc!{?$C5dZHZ=a!q89og^;eBL^{HXpJ011ThT(t*#KX204if2uOTBcgC*b~y
z>>=PbW_#K9uT^Cq^E!L#QZwfNRfiVraVN+G3K2dwn#7IEK+nJPpDJd@a2P&<x_&~V
zuxPztOMZk&Gz`SKU(MYDNN|{KXTDdtEQ7wsWg+L1@pc)vsQAIt%%LCN*GpE&Vh1zM
z4DmN8M<6)*-EYV<AAOTZ+`l&*-t290FRl6D7kM&RO=$5rMJr=Y!yP`bYFEd8cZC5a
zP?gI<KKSp8NV}Bpd1`4UQdV#MlHk`teAdN%;o=cfvL+E+z$3%10BnXz58`@Bd+PSq
o9)G<aL|6DOxG>Y!#uSndA41KRe6FBgjA}H#qZ$i(l6F+&Z(tuc%>V!Z

diff --git a/indra/newview/installers/windows/lang_en-us.nsi b/indra/newview/installers/windows/lang_en-us.nsi
index 218f1c60fc64e393f23e88818eda07d63a9c6b51..a01541377dfd717d76d318989593d302add98d94 100644
GIT binary patch
literal 7162
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
HLj3v*)lJdI

literal 3211
zcmd5;ZEG7j5dNNDF)RkRP)xXw?T3=Hlbkun&Sjk@2Z18*%3e{eWF&1}6Y}3XBkgYF
z>^d!_90v~Ak@U>WGtazyfD2))17RWOYgS2jGSe)dF}11KhF=KDAsIZ*(`h=H-aI{w
zwQ@$R9-0fV#vAtGTy3PV#Yo9@a&qzkY_)R2;ajahii|7E!SQbnGPZR>s}p*kB9hv`
zES#s+YDrISw>fhh29L9|`Q_*H`Q>by{`CY2goEUjrzv;Uw&$h)zxPWh>zI^`e1KdS
zo;hvy-nAHa(wvM7tu6O{b#bRLSo<V_SCEbcmvV`&fGaqpJku&iR@OZBP(u}naT>mI
zV<~{a<EQhRbh?;-o-O8=Pop>Y_xEq#A28Iq6(TvpP-H$LMMF*3florA1x)d{;Mted
zF@v06Gs8*?CAStu11tS4=Ae7?>d!8lV_nG{ly)d7jGw638ofba7!IcMba{QVxEzik
zMZqc8u(4+NGaq%6YpX0ncaTCR^(J<Q(w2r(`%lHK*Fr~bKC*+rmEL{yb__4|SClro
zOLfttBerqluPkIv7e2M=dLd~~43)rI8xL0}b~FkBWkfOTkPf}GeP%qsT{y3;Os;#V
zB^<I-Uu~egov0Ff;CeDOj1{Vt++($Gx7s+{;@@AtYrp?-dV2Z}7^d`!Ww1!$el&Pc
z_&IZqm)H%^FVu7+HI#MZ<>2NN`-K9-E%qh60hwX8;MSvImtY{ZwKZH_jd-@-vHiy(
zY19)a)+{fD64n`p)eh@QWj^O`YMXE4%y|yZ;s*r$Dyx*eEjOjGzAB%C>E*YB-AD1i
zx&pS{a%PB|6^F_aPYe<%O5u2(0LwC6DM!)M?Xtoyju(-y<RIQ8W;aUR=w}$J)X#Br
ztA2r{7W~IN1^oYlsn)5u_7Ay|hO>O1RmNZ=>S$-W9*2`2Z<DF3(`vE7F&Eo-+0AJr
zvtX(z4s3Lxbnbkw++*6M_=1!5xqJi~*f60&r^>KCxb*`?(meTr^yzj`2u+`38NFk|
z7cI#?(i3@Mi^>5uE7i$p7rKw07!E6c=oMWnkms-~XdS^2BWg^gP@|igm<y`&0xu%B
zNYBvV4As8F6kLG~Q+Dw;`Rchj2!MJN&Rz_z;)GXE#qrsEd_MC}n98_pvf-DAx=|nH
zxs}sllR2d0c=h}Su8)>Z(#v-1@c)MIKyetl8N-(DSI)TZ!n7UJ87-`~uUk(r_g=Oh
zBCM@6QYJd9O045BRB%6{OBN@x%(?O7KBt$@%Sgw%N9NaISMm1yq`fRSijm<TE*w%m
zJAg86>d5bW&C=5@Vzsmp0GDV2*y7L=E1bLD71B8lMvhB!4p@@3o8bDS-&3ogy$SdB
z&^0F7-`z1>pRfSxH3k>0GIWbJ^__kAwiyFU+~Ke6rn_P+3#`c<1@?>*>+8j;3TvZF
O^2UJOTigRM$=?BEPG8CZ

diff --git a/indra/newview/installers/windows/lang_es.nsi b/indra/newview/installers/windows/lang_es.nsi
new file mode 100644
index 0000000000000000000000000000000000000000..3340a1230fa76a70f4f82b07e5bc5fd40b7ae347
GIT binary patch
literal 7612
zcmeI1U2hvj6o$_=68~WpRZ1$M2yqD)RY*dJNSctOr5BYd$1$nFvBNs)2Z-O+-@+x=
zz2gFSpE;h+?5@{YHz`5_S+>{SnKS3(J?}X)``4deSYcn;&`O)ym9B^SF6_((_PzD&
z+D7{KWBbVVY@*+1`tI4-&UL4!&q0_w(syAicF%sXhjwhcdT;6T$bPk_wyBw8Nhu}!
zRKM#I3avEMIs>izR5LHb3h43N)-`ja`zt{Q^g!RHgsEmDp|5p@VLfaZO43Nb&Sw_5
z=EpN#u%eKb<6t=>kx(|IpGeMCxL0UAHtyMm?A)<u()KW1WAWFr7BB2cO7zeVx^{1l
zYHQ)kiB@yVqD58Rjx{@4b+ew`v^xx|;`5%pm|Z9D^=IBgYt{x2_;F$v8t;}A^4E2^
zlRQ_oCdP?zry(NIe;}cd+@T_cmsq*bh=IM*XQ6+4ihqou<8EHm_9_yN!#XKWk0j$v
zl91aaVufM|a=<jY{jBfBky*SxaYNc=$JO)Lrj?@?hZTfkRgUmdYoR+>dY$>Q-FI7>
zU!Aq7Oq=LMG?Ev)c&;uB%_2&2y?fGeXm4f7itfL!Zp+4%IC%avaSf_-FXWmtuP;l+
zLJ@2;RJMR5n5ope(7TD3m@$_c1LrW(vxXU?Fz<!rz_jiQ_wZxe7E{8S2V#|HT95A?
zvB|ov*^}_PZ=Ww@ih3Mgi*-{>m&4=oUL%vE^*;&s_^KNHQvb~NYP2h&9li1Xj~ag^
zpOv#rIt<r%l=^g`F;l&~1{GqNi5R3ES6!s;+n17jGrvC!7@r0!FJ&z}j`iaiW~g-N
z9X-;-!>U%<4VCgl_2WqK-mz6hyATpey~t%S2LFQ5oRuPynh1;;=J|(j;6E@7hxa7E
zT1E2+fzHG$@OED>_c8L8sid%Rnmx5|10v`yB5&R7<2Ru$Qzclr9X)snoa6BaHT&?~
zh3=7ag}z6!qX=H7S{LDe&qXr59Xm&voP!`G_BfAqCrRjn9eSY)@dz<KmCi&5^vq`m
z?h`{gCv02~uWA(g@A9Rvmm231UxqA6Y_r(HlpWtyBvkF&5?1ftMmo*Hs_W)<&hL!6
zY1}QNS6i5gKIg3>Lwr)U4-_#p9vHn{U)Xk*at5edQi#0|?UROug?(n9hF1})_P(&t
z*QkSl%qNQTJ@vxl+2^sM;*9DU&5H9F);qQ)-#9;4eM}^eqyf5-=TtX30D5$4W?_-Z
zT`G6TVRDMq-6M>h%tkVY4kY?&sIjHI1&ZMi7={(9wt1!_8J6>0cMmg~>~Ox1*AK*$
z<Z7%J3I9}S`p}DjVb>O3@ZN}y_gb3dJA}0`GOj(c`wLhgA#S5}ja|t{+U+yNt-cH%
z#GdKQ52*uj#>hE5^;pZ~&&}3!%_6VR<U|!cc;q)B;96EB#v>NshztUsj_DO)U>G9E
zZ!oj+4li38cN%14bzU1lT<WRl+~9roV)O72_g#5ESM_6iy;;9g^x=bi<=Z3hktFWw
z{m-J1e8vCyelT_;cZ0>;uKxla=Xvz~Q8^M1(?y<%pUF3ROwYOYt|#%`u9$PPGOJqz
zR#f@m^Ex9Ohku&8E4sq=y%4npz5r>?Csn+W)%D5(W55l}<E&#e>-p#!oAr}QR_`JE
zp}sl4V25iBNBNHMwl#${k)Hb`?l+gs<84Xuiji10*6>_@zN2MrIM{17vFehqU9|3s
zkv7f7@=WR_s1f8uGivMw(cVuOd-6fV$nW9Gcc!sdORSXlS0|cZ&iV${z`nfy0dYus
zF5I}UV&5M7o#rXShDHt)59%11yQbdm8+90Y)nNp=xOj)d8jd`6P-A7HkI%b3->anz
zz^hH2HZ_wDh<j11&2WCXsh#IuL%aIu#XU!TUlLIQ#=2$Bvh^^okYgxjPhK&)_GAB!
z49YeCP+8PgU;fXfNyrcS?O07dWG>B%L*l4vM#0YUJcDy`-}$6xC+)TTD4Pif_)MPq
zz!B5V`;~2t_wJnDJ#wIDAvLuOl82$z!o$wkQCAq0Js$f<I0zYWf5)$Q3c~m@R5ITa
zY$+CWEu8tm@<{g8{Y>#n|G|srx|3J0xI;t>>}2l>`{t*!`Lm~X|7~Rw4lDDM54&dS
zhW!z2rIx_#O|Q8xID_+(H}9Z)7n`3_S1qBVaewD*m}-4Qv)4VI0;Rov^ep}X`NX2B
zSL`LwoQi~A9zjmmsKcDKan{JMo=&V|jg4oW{!B3b%lXC|VK4P)#3|vc)GxHG_hii~
zk)9y6#}HP{JI0Zobof)JeXYThz?)AcsSi1dV%2re*LOf=*!9kjhOf4$+x1vF3Xtq8
JlRNPo_irn<HDCY$

literal 0
HcmV?d00001

diff --git a/indra/newview/installers/windows/lang_fr.nsi b/indra/newview/installers/windows/lang_fr.nsi
new file mode 100644
index 0000000000000000000000000000000000000000..5c17ad077f6e9a8a8e5968671e5f8126ab344221
GIT binary patch
literal 7858
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
E-!7bbB>(^b

literal 0
HcmV?d00001

diff --git a/indra/newview/installers/windows/lang_it.nsi b/indra/newview/installers/windows/lang_it.nsi
new file mode 100644
index 0000000000000000000000000000000000000000..9f18013691c41e1dbf1f883dcf47d5014b475584
GIT binary patch
literal 7196
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

literal 0
HcmV?d00001

diff --git a/indra/newview/installers/windows/lang_ja.nsi b/indra/newview/installers/windows/lang_ja.nsi
index 5e0496ee6fe2735dd75bc732ec3cfbff123ef24b..f564291f7dcfdd4f71973d17de4801f1f43f3ebe 100644
GIT binary patch
literal 6302
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
QZS|{u36lV|OH*0?AB_l?KmY&$

literal 3579
zcmb_f&2Jk;6u;-M7)6l^mnh;$FZe5|Q^z*mBn>4>*zAs-6`NgaXPu@BL3l=O^Wl#s
zZkr3JRc;ATR6&(SY6_I{5y=)3M+8FRL@Pk<g)?tv?PPboP7UhK^1ONP&F}r*@4Y>X
zhBb@WNFzwaS-GIweF;-m6S9#j$T>W$=@|77EGMP76pd$ArX!|dTiV=o+W=+3f=rLf
zdD*}O4;p&5zpw8sB853yv*EI7AYD_iK`^rMl8qEOZ)>K}#~n!E%E+OFb1oI;#`%?r
zyeium4J;=@$&uO7P&$;1NwF2wk64J!u|<|GzRhy|=oA+cwhQ?{4;R5h&hY~tAW;<)
z#nMDh?p*Wm_<#UWu<n{4y+`XT4*}AU;04-X7uhJQv3a(}BFv^uX7c~pHC7u~o{VLr
zcq%!YNF_&B2I-OeY4kq*h3*%_fluTabbFpZ0eXl2Ko23Q45UHW6$n2Aq5Nq@;B<=R
z;B@1Kp_9CZou#SVcF@!eV#~TN^AaOfv#?^D)@4z7H=5D*No3wM2^M7!@CvXUXI6}{
zEDN&|OG5qDz0mmFbuEww<bC?oheX{Sfi^een@zyu3H_8lqMy^9V)*q_!*;8RFG|z>
zD$28Py(=&(FrPCuGLMyaC0n+D+iBU77YJIwgaA>|oVnzNx6^Vg90czoE3*`^^MhLt
z&kV$q(s(+P8aYGvO1tzi-KBp34G-w^VwjCX&LyZt4yxelL3&hqaDxcW+^2_vu#l&R
z1EioRkR)(H*3Fzd$v99&a!$#c1xy5GI+?Zgkbc?8+4a$i;c%7i7SFW+vhaer2#TYt
zi0c(v#1`>MO-7icbd?)SI_Ck%l)j-mC*4~8`{r}#-gnqA^mcOVD*YC^Q*nx-@S>ng
znxUGPNKiykiwn+qD_}Go5R%1!-CQhU>@DcnW2p!VJ~%k&Wnw^(;EH=&ztPGIO{I&W
z_V3q*hK7ovF<C(=2~E*D{T1Fm&fWug$cc8?anz}8Kad#$16QYVPFHTxMlmFmdWP1k
zUsoQ`-=TBY0KiFhh1N@7to}ofK%JhhJ-#u0{bRZZTE+PWvgh&D+`LCW<NxzIyCB!H
zvbvxd8nG=IBnD**h9VgBN{fE4y16Fs3ArzD_666${gOJU=Wmehozho+0tDBfBStS}
z=s*vUX{>+0{ZZv75qa<C`RzqPy0Dn7f^*#gC>Xs#Fky5DAp}%>c|bUkdV|6r8OU@B
z96}h|c<2_E)yqo3vakVb%*lcw${){0oRc2%@Xcogv)qM7`A6spt^williHH|q(hPv
z9mX5MifO32mc=ikDYuq{bpourm&e=2&1!u6z>%d+R(87V;r+C}k*wVXmq(u0HLB+J
zYI`UI3o}oJtAyuXQ^++`vihuijW$x}*)p49HQHReEfnQ=z(zvJNGu`#->2VgU9G(D
zAPS>}Pr&YIcHzAD@uv~~e<RvEw@)zjbNs*H>c9IkuoYe8Oix9IZW24ayMdgs8R2LA
zi+}_wCyJU%VF6l?AlXn6tV1?z_XIJUonsqp7N%N)F=qn6e{TRqHb7OgY@Lsm)>!3B
zuh`0U4Br5G%gn)|<9uYe6N+Mfo_3B!N<FdKvuc6J7DK@1N5{$RRTNnCp25o3nsEcu
zhS-bX(+7Tn4mk_;Uir`KpNPAMw6Xeg?JnFppob@Zz%F30ZA$b>`LF7S9V&6m-i}3i
dqOIlQuy>D<T+rg+p{`H40AD|0+8-Bv{{meu*Vh05

diff --git a/indra/newview/installers/windows/lang_ko.nsi b/indra/newview/installers/windows/lang_ko.nsi
index b570315f03e135c810a8cfd5c68d400c4cccd2e3..5162b7ddad1f7ebdceda14a6d70cad38050ae704 100644
GIT binary patch
literal 6200
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

literal 3448
zcmcgv-A~(A6o2QhI6`^Yqza)ut`8G~7Dc6j5$O7WR2ka=YsN;l(+?s37^`cmPHIR-
zOakQNdLi*10x4a)^6|hnb)yv<np6!?)rXyX9S6s8X!o+WB=_F)@jK`DJ13Xns-)=#
zNID2&f=kLq&xpziBb+jm<YvUHk}N`RWFZ!h#)qQgi&KNDVrbIzly?CVctfAMrfMRm
z^eJ+px2NYa=*ekAGVrOYfGqK%qKjaNcMagVc|%f_9{N0vhLjl?anIw)=?VH|a$evJ
z5h4pC1F_*-*G9*$48#_pw{&VfAoW_R_kyQ!(MZmByoAE?hUqjizp=;!QRg*@1>p~F
z9&-(`JcPHq1Vrjk+pebVlk5*rC~Vl)?<;Rf-LdlzVfBQ(k1X7{G9HhP#%_&_#)cRB
zNItg(UJ~HE$TqUOeGrxn^%<VY1ui!>ob~Ev*>sb2t#>mXqlF0Ko82Wv29Tua1}DoL
zEfWZmCh~@=-DB1B12p8F49=>mF0#^f7^TRA^>=Qq`YPXExxn)-7zc3m;B%g}j3U~F
zOts=P3Wf5k0G<IK;g|+ouwLn6{&R-U;H=1h6E`>wdu@!<xH%o>L|w=Jfob)wAEM5i
z*T3w52+UL@8jDYijgJnSOW@eKt<1~Z1F{a4`}PUs&zyrIahrwgS>;v>VX2Ew?P=?@
zvvzut=P@v>At$Rd{=lMG;<$UNf0Yz<R_b6w1b``4$iCA^@6li~$6qjanmDK4Mvlt@
zP<?>gqNWGPJ<hI-$^yM`!#(f7fYix*MjDoN`Y#|qyE&T=ks&B2JjERDNQ$7|(Zk#@
zsK0j4n_h;-I{iGhtn#0pryo;f3o|<R*4IXu5R)P0^P_}9KwJ+u$1ZsvKkM)BzXX|=
z`4oD}*I+abH?e8$lk%A-0?kK}@%|=%@w`~EET@rw17$+?t#bMuQ2DEF!rIfKgE~MO
zrQ_u#D4evg>Vx#_!cR@HYt_kzpOoN)IZ2UpL*tOrkVq;#tNbTT%75zb5tjad{{iiq
z5KtM%Gmf*3#iNjdeL$YGhV2XRG2CPbsLlyFL|znLWS^T$>DTtRXnOsyd~|L)sJNcQ
z19{}^6f*d@d|bB3o|!>ZTJN2m(t#(v=Y7>3m!$G>$V@6-u(2Pes}PD!yYhD;<C+Y?
z2L3xZGzvQZJ|3L*u90!H3-|b>rilt}2j`QUg&j={x+fvQ`q{x~hm>p^i?oyLt9913
zmQy<Rb#r#NSZQ{1u@dZO8ApyT@~R@pQbPPtE7RL?c6$VGcd3;>R!Y!P?pK^MD~}*^
zj5?e>Lj3FlCP;n+I!%87hP3HsOj%9)xdG`vP?Kl_qgO^@bc?($oq4*?Do*xGr$~eR
zPUQfF#7t4DnM?Rf_DK$PpnU;h!EXbd>0qBZzp(1B?yj7<gQV%Ka#VQcG;%hojG3Ze
z%q0vV`#67}4bxs=(%Tj4F6?MWq$@STA`XGu%(RPgnDr3E+W_eTIi<z_5BUXvyR37E
zD$nt=B3rHfgmb6qAU&gtxgH|NFr@OyIV7qMoFV`&Jq9k>I@I1}|AFOo;=sl-605dB
z8rB<Z9~?w)SywPY6hv9X<$GRJXK=G|cYA*TL+pIaJ!T<<fbTDDYoTdvY&hdeHT%?y
zpbpF5muf!V(<RppZjFgP*~9wf^VT7xH!<RRy1M*bWJ+O66aFKiAEy-Dtx4S~JKNsd
zM*C<yH;NfEIczD4+vcri?pSmuy&*7xYx8w|remw{ryG>FbsXfywd#J^EIe@?d#m}s
Dv^JXd

diff --git a/indra/newview/installers/windows/lang_nl.nsi b/indra/newview/installers/windows/lang_nl.nsi
new file mode 100644
index 0000000000000000000000000000000000000000..42453baa2859d7acd9104d55b8fc089ffd760411
GIT binary patch
literal 7160
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

literal 0
HcmV?d00001

diff --git a/indra/newview/installers/windows/lang_pt-br.nsi b/indra/newview/installers/windows/lang_pt-br.nsi
new file mode 100644
index 0000000000000000000000000000000000000000..6524cc7c0102fac8ee0efb787a2d5403b4a53910
GIT binary patch
literal 7590
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
F`X|V%F(Uu~

literal 0
HcmV?d00001

diff --git a/indra/newview/installers/windows/lang_zh.nsi b/indra/newview/installers/windows/lang_zh.nsi
new file mode 100644
index 0000000000000000000000000000000000000000..e644e6389b8fac7c3f06b66c7e89edda50da3c03
GIT binary patch
literal 5354
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

literal 0
HcmV?d00001

diff --git a/indra/newview/installers/windows/language_menu.nsi b/indra/newview/installers/windows/language_menu.nsi
new file mode 100644
index 0000000000000000000000000000000000000000..473f9e0784743088c2815f2ee429494ed097c5ab
GIT binary patch
literal 1292
zcmah}NlwE+5Uev2e;5TME(D1S_W({XBq4&p2?-hEgh<&GCoDpIfJg8HZhV0!@C1a!
zjR&w)^@uH-WqCZF>8Y-&Zu|3N0S+xh=%9fipAEz~Mw?@Y?<*V=G%=4kD6)b+cY2J|
z)1i(oXX6Ntr()v9IK_bHyToxns16rg8{mv<9bzfs-0()3_<gZSemI1N74fWccrL>5
ze43V3dtF8-ht}K7(zJ648TC2uanErs<<8Xn#^kV%4TQXe5aW{LGUpeDCgl<FJ$myG
zvpR95`4{)Z-VRVj9$Bnn4MhZ|<lE6*=B_bHF4o9dN;_CGb`e?jxFWZeO^U>Fz)L5@
zsZ6dRZ?Cw|oo{Adx38na39c9;*L`K`tgSdySmnejv50H3%Mr1_4hZa7H0&+hjKpTR
zua0REQKvH_`~R^DjNU`Zu*Z=$sby%qPE(Qg$yW@ecrvTRI^vC9wNhB+$w?|VCL-nO
zuX^K!qcqM|7_!1Sx))B-7*bzkZV9uSg0=~D%w%3=y5;-De=D_AZWZiOX_c4--T|Ep
zu+Ek7N>s>99W=Cm!7Gt{PddiS4gCqyT-~MvzD7RNc$VjQxp8+p+s_^2987WZ=&61G
Y@HiVmUqy*b<YLGwPh*oUzaM&}FM-(8ivR!s

literal 0
HcmV?d00001

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index aed88497ee2..f47f9b1f43d 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -216,10 +216,6 @@ const F32 DEFAULT_AFK_TIMEOUT = 5.f * 60.f; // time with no input before user fl
 F32 gSimLastTime; // Used in LLAppViewer::init and send_stats()
 F32 gSimFrames;
 
-std::string gDisabledMessage; // Set in LLAppViewer::initConfiguration used in idle_startup
-
-BOOL gHideLinks = FALSE; // Set in LLAppViewer::initConfiguration, used externally
-
 BOOL gAllowIdleAFK = TRUE;
 BOOL gAllowTapTapHoldRun = TRUE;
 BOOL gShowObjectUpdates = FALSE;
@@ -1869,22 +1865,6 @@ bool LLAppViewer::initConfiguration()
 	//		llerrs << "Failed to parse skin definition." << llendl;
 	//	}
 
-	//	LLXmlTreeNode* rootp = skin_def_tree.getRoot();
-	//	LLXmlTreeNode* disabled_message_node = rootp->getChildByName("disabled_message");	
-	//	if (disabled_message_node)
-	//	{
-	//		gDisabledMessage = disabled_message_node->getContents();
-	//	}
-
-	//	static LLStdStringHandle hide_links_string = LLXmlTree::addAttributeString("hide_links");
-	//	rootp->getFastAttributeBOOL(hide_links_string, gHideLinks);
-
-	//	// Legacy string.  This flag really meant we didn't want to expose references to "Second Life".
-	//	// Just set gHideLinks instead.
-	//	static LLStdStringHandle silent_string = LLXmlTree::addAttributeString("silent_update");
-	//	BOOL silent_update;
-	//	rootp->getFastAttributeBOOL(silent_string, silent_update);
-	//	gHideLinks = (gHideLinks || silent_update);
 	//}
 
 #if LL_DARWIN
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index d1359daad44..b1262c3e5e4 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -225,8 +225,6 @@ const S32 AGENT_UPDATES_PER_SECOND  = 10;
 // "// llstartup" indicates that llstartup is the only client for this global.
 
 extern BOOL gHandleKeysAsync; // gSavedSettings used by llviewerdisplay.cpp & llviewermenu.cpp
-extern std::string gDisabledMessage; // llstartup
-extern BOOL gHideLinks; // used by llpanellogin, lllfloaterbuycurrency, llstartup
 extern LLSD gDebugInfo;
 
 extern BOOL	gAllowIdleAFK;
diff --git a/indra/newview/llfloaterbuycurrency.cpp b/indra/newview/llfloaterbuycurrency.cpp
index 34df1e06aee..150bf276a14 100644
--- a/indra/newview/llfloaterbuycurrency.cpp
+++ b/indra/newview/llfloaterbuycurrency.cpp
@@ -358,11 +358,6 @@ void LLFloaterBuyCurrencyUI::onClickErrorWeb(void* data)
 // static
 void LLFloaterBuyCurrency::buyCurrency()
 {
-	if (gHideLinks)
-	{
-		return;
-	}
-
 	LLFloaterBuyCurrencyUI* ui = LLFloaterBuyCurrencyUI::soleInstance(true);
 	ui->noTarget();
 	ui->updateUI();
@@ -371,15 +366,6 @@ void LLFloaterBuyCurrency::buyCurrency()
 
 void LLFloaterBuyCurrency::buyCurrency(const std::string& name, S32 price)
 {
-	if (gHideLinks)
-	{
-		LLStringUtil::format_map_t args;
-		args["[NAME]"] = name;
-		args["[PRICE]"] = llformat("%d", price);
-		gViewerWindow->alertXml("NotEnoughCurrency", args);
-		return;
-	}
-	
 	LLFloaterBuyCurrencyUI* ui = LLFloaterBuyCurrencyUI::soleInstance(true);
 	ui->target(name, price);
 	ui->updateUI();
diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp
index ccf63b32852..3ad26b703a1 100644
--- a/indra/newview/llmutelist.cpp
+++ b/indra/newview/llmutelist.cpp
@@ -236,17 +236,24 @@ void LLMuteList::loadUserVolumes()
 //-----------------------------------------------------------------------------
 LLMuteList::~LLMuteList()
 {
-	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "volume_settings.xml");
-	LLSD settings_llsd;
-
-	for(user_volume_map_t::iterator iter = mUserVolumeSettings.begin(); iter != mUserVolumeSettings.end(); ++iter)
+	// If we quit from the login screen we will not have an SL account
+	// name.  Don't try to save, otherwise we'll dump a file in
+	// C:\Program Files\SecondLife\  JC
+	std::string user_dir = gDirUtilp->getLindenUserDir();
+	if (!user_dir.empty())
 	{
-		settings_llsd[iter->first.asString()] = iter->second;
-	}
+		std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "volume_settings.xml");
+		LLSD settings_llsd;
 
-	llofstream file;
-	file.open(filename);
-	LLSDSerialize::toPrettyXML(settings_llsd, file);
+		for(user_volume_map_t::iterator iter = mUserVolumeSettings.begin(); iter != mUserVolumeSettings.end(); ++iter)
+		{
+			settings_llsd[iter->first.asString()] = iter->second;
+		}
+
+		llofstream file;
+		file.open(filename);
+		LLSDSerialize::toPrettyXML(settings_llsd, file);
+	}
 }
 
 BOOL LLMuteList::isLinden(const std::string& name) const
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 7a8497aa2ef..924b27a24cc 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -63,7 +63,6 @@
 #include "llviewernetwork.h"
 #include "llviewerwindow.h"			// to link into child list
 #include "llnotify.h"
-#include "llappviewer.h"					// for gHideLinks
 #include "llurlsimstring.h"
 #include "lluictrlfactory.h"
 #include "llhttpclient.h"
@@ -1066,15 +1065,8 @@ void LLPanelLogin::onClickConnect(void *)
 		}
 		else
 		{
-			if (gHideLinks)
-			{
-				gViewerWindow->alertXml("MustHaveAccountToLogInNoLinks");
-			}
-			else
-			{
-				gViewerWindow->alertXml("MustHaveAccountToLogIn",
-										LLPanelLogin::newAccountAlertCallback);
-			}
+			gViewerWindow->alertXml("MustHaveAccountToLogIn",
+									LLPanelLogin::newAccountAlertCallback);
 		}
 	}
 }
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index c6c0fb21a8d..2717c444154 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -101,7 +101,7 @@ const std::string HELLO_LSL =
 	"        llSay(0, \"Touched.\");\n"
 	"    }\n"
 	"}\n";
-const std::string HELP_LSL = "lsl_guide.html";
+const std::string HELP_LSL_URL = "http://wiki.secondlife.com/wiki/LSL_Portal";
 
 const std::string DEFAULT_SCRIPT_NAME = "New Script"; // *TODO:Translate?
 const std::string DEFAULT_SCRIPT_DESC = "(No Description)"; // *TODO:Translate?
@@ -294,7 +294,7 @@ LLScriptEdCore::LLScriptEdCore(
 	const std::string& name,
 	const LLRect& rect,
 	const std::string& sample,
-	const std::string& help,
+	const std::string& help_url,
 	const LLHandle<LLFloater>& floater_handle,
 	void (*load_callback)(void*),
 	void (*save_callback)(void*, BOOL),
@@ -304,7 +304,7 @@ LLScriptEdCore::LLScriptEdCore(
 	:
 	LLPanel( std::string("name"), rect ),
 	mSampleText(sample),
-	mHelpFile ( help ),
+	mHelpURL(help_url),
 	mEditor( NULL ),
 	mLoadCallback( load_callback ),
 	mSaveCallback( save_callback ),
@@ -547,7 +547,6 @@ void LLScriptEdCore::setHelpPage(const std::string& help_string)
 	if (!history_combo) return;
 
 	LLUIString url_string = gSavedSettings.getString("LSLHelpURL");
-	url_string.setArg("[APP_DIRECTORY]", gDirUtilp->getWorkingDir());
 	url_string.setArg("[LSL_STRING]", help_string);
 
 	addHelpItemToHistory(help_string);
@@ -556,6 +555,7 @@ void LLScriptEdCore::setHelpPage(const std::string& help_string)
 
 }
 
+
 void LLScriptEdCore::addHelpItemToHistory(const std::string& help_string)
 {
 	if (help_string.empty()) return;
@@ -647,7 +647,7 @@ void LLScriptEdCore::onHelpWebDialog(S32 option, void* userdata)
 	switch(option)
 	{
 	case 0:
-		load_url_local_file(corep->mHelpFile);
+		LLWeb::loadURL(corep->mHelpURL);
 		break;
 	default:
 		break;
@@ -773,7 +773,6 @@ void LLScriptEdCore::onHelpComboCommit(LLUICtrl* ctrl, void* userdata)
 
 		LLWebBrowserCtrl* web_browser = live_help_floater->getChild<LLWebBrowserCtrl>("lsl_guide_html");
 		LLUIString url_string = gSavedSettings.getString("LSLHelpURL");
-		url_string.setArg("[APP_DIRECTORY]", gDirUtilp->getWorkingDir());
 		url_string.setArg("[LSL_STRING]", help_string);
 		web_browser->navigateTo(url_string);
 	}
@@ -1072,7 +1071,7 @@ void* LLPreviewLSL::createScriptEdPanel(void* userdata)
 	self->mScriptEd =  new LLScriptEdCore("script panel",
 								   LLRect(),
 								   HELLO_LSL,
-								   HELP_LSL,
+								   HELP_LSL_URL,
 								   self->getHandle(),
 								   LLPreviewLSL::onLoad,
 								   LLPreviewLSL::onSave,
@@ -1590,7 +1589,7 @@ void* LLLiveLSLEditor::createScriptEdPanel(void* userdata)
 	self->mScriptEd =  new LLScriptEdCore("script ed panel",
 								   LLRect(),
 								   HELLO_LSL,
-								   HELP_LSL,
+								   HELP_LSL_URL,
 								   self->getHandle(),
 								   &LLLiveLSLEditor::onLoad,
 								   &LLLiveLSLEditor::onSave,
diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h
index ca1c527cb28..c0af06f4802 100644
--- a/indra/newview/llpreviewscript.h
+++ b/indra/newview/llpreviewscript.h
@@ -65,7 +65,7 @@ class LLScriptEdCore : public LLPanel
 		const std::string& name,
 		const LLRect& rect,
 		const std::string& sample,
-		const std::string& help,
+		const std::string& help_url,
 		const LLHandle<LLFloater>& floater_handle,
 		void (*load_callback)(void* userdata),
 		void (*save_callback)(void* userdata, BOOL close_after_save),
@@ -132,7 +132,7 @@ class LLScriptEdCore : public LLPanel
 
 private:
 	std::string		mSampleText;
-	std::string		mHelpFile;
+	std::string		mHelpURL;
 	LLTextEditor*	mEditor;
 	void			(*mLoadCallback)(void* userdata);
 	void			(*mSaveCallback)(void* userdata, BOOL close_after_save);
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 4f98c3b524d..1f1e56fce8d 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -1101,6 +1101,7 @@ bool idle_startup()
 		LL_DEBUGS("AppInit") << "STATE_LOGIN_PROCESS_RESPONSE" << LL_ENDL;
 		std::ostringstream emsg;
 		bool quit = false;
+		bool update = false;
 		std::string login_response;
 		std::string reason_response;
 		std::string message_response;
@@ -1144,11 +1145,7 @@ bool idle_startup()
 				reason_response = LLUserAuth::getInstance()->getResponse("reason");
 				message_response = LLUserAuth::getInstance()->getResponse("message");
 
-				if (gHideLinks && reason_response == "disabled")
-				{
-					emsg << gDisabledMessage;
-				}
-				else if (!message_response.empty())
+				if (!message_response.empty())
 				{
 					// XUI: fix translation for strings returned during login
 					// We need a generic table for translations
@@ -1206,16 +1203,7 @@ bool idle_startup()
 				if(reason_response == "update")
 				{
 					auth_message = LLUserAuth::getInstance()->getResponse("message");
-					if (show_connect_box)
-					{
-						update_app(TRUE, auth_message);
-						LLStartUp::setStartupState( STATE_UPDATE_CHECK );
-						return false;
-					}
-					else
-					{
-						quit = true;
-					}
+					update = true;
 				}
 				if(reason_response == "optional")
 				{
@@ -1253,6 +1241,21 @@ bool idle_startup()
 			break;
 		}
 
+		if (update || gSavedSettings.getBOOL("ForceMandatoryUpdate"))
+		{
+			gSavedSettings.setBOOL("ForceMandatoryUpdate", FALSE);
+			if (show_connect_box)
+			{
+				update_app(TRUE, auth_message);
+				LLStartUp::setStartupState( STATE_UPDATE_CHECK );
+				return false;
+			}
+			else
+			{
+				quit = true;
+			}
+		}
+
 		// Version update and we're not showing the dialog
 		if(quit)
 		{
@@ -2840,29 +2843,6 @@ void update_dialog_callback(S32 option, void *userdata)
 
 	std::ostringstream params;
 	params << "-url \"" << update_url.asString() << "\"";
-	if (gHideLinks)
-	{
-		// Figure out the program name.
-		const std::string& data_dir = gDirUtilp->getAppRODataDir();
-		// Roll back from the end, stopping at the first '\'
-		const char* program_name = data_dir.c_str() + data_dir.size();		/* Flawfinder: ignore */
-		while ( (data_dir != --program_name) &&
-				*(program_name) != '\\');
-		
-		if ( *(program_name) == '\\')
-		{
-			// We found a '\'.
-			program_name++;
-		}
-		else
-		{
-			// Oops.
-			program_name = "SecondLife";
-		}
-
-		params << " -silent -name \"" << LLAppViewer::instance()->getSecondLifeTitle() << "\"";
-		params << " -program \"" << program_name << "\"";
-	}
 
 	LL_DEBUGS("AppInit") << "Calling updater: " << update_exe_path << " " << params.str() << LL_ENDL;
 
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 7c78a26367a..7f9ba3206c3 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -2752,33 +2752,6 @@ void process_grant_godlike_powers(LLMessageSystem* msg, void**)
 	}
 }
 
-void load_url_local_file(const std::string& file_name)
-{
-	if( gAgent.cameraMouselook() )
-	{
-		gAgent.changeCameraToDefault();
-	}
-
-#if LL_DARWIN || LL_LINUX || LL_SOLARIS
-	// MBW -- If the Mac client is in fullscreen mode, it needs to go windowed so the browser will be visible.
-	if(gViewerWindow->mWindow->getFullscreen())
-	{
-		gViewerWindow->toggleFullscreen(TRUE);
-	}
-#endif
-
-	// JC - system() blocks until IE has launched.
-	// spawn() runs asynchronously, but opens a command prompt.
-	// ShellExecute() just opens the damn file with the default
-	// web browser.
-	std::string full_path = "file:///";
-	full_path.append(gDirUtilp->getAppRODataDir());
-	full_path.append(gDirUtilp->getDirDelimiter());
-	full_path.append(file_name);
-
-	LLWeb::loadURL(full_path);
-}
-
 /*
 class LLHaveCallingcard : public LLInventoryCollectFunctor
 {
@@ -5415,37 +5388,6 @@ class LLPromptShowURL : public view_listener_t
 	}
 };
 
-void callback_show_file(S32 option, void* data)
-{
-	std::string* filenamep = (std::string*)data;
-	if (0 == option)
-	{
-		load_url_local_file(*filenamep);
-	}
-	delete filenamep;
-}
-
-class LLPromptShowFile : public view_listener_t
-{
-	bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
-	{
-		std::string param = userdata.asString();
-		std::string::size_type offset = param.find(",");
-		if (offset != param.npos)
-		{
-			std::string alert = param.substr(0, offset);
-			std::string file = param.substr(offset+1);
-			std::string* file_copy = new std::string(file);
-			gViewerWindow->alertXml(alert, callback_show_file, file_copy);
-		}
-		else
-		{
-			llinfos << "PromptShowFile invalid parameters! Expecting \"ALERT,FILE\"." << llendl;
-		}
-		return true;
-	}
-};
-
 class LLShowAgentProfile : public view_listener_t
 {
 	bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
@@ -7809,7 +7751,6 @@ void initialize_menus()
 	// Generic actions
 	addMenu(new LLShowFloater(), "ShowFloater");
 	addMenu(new LLPromptShowURL(), "PromptShowURL");
-	addMenu(new LLPromptShowFile(), "PromptShowFile");
 	addMenu(new LLShowAgentProfile(), "ShowAgentProfile");
 	addMenu(new LLShowAgentGroups(), "ShowAgentGroups");
 	addMenu(new LLToggleControl(), "ToggleControl");
diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h
index d8a8bba08c5..288c501b59b 100644
--- a/indra/newview/llviewermenu.h
+++ b/indra/newview/llviewermenu.h
@@ -50,7 +50,6 @@ void cleanup_menus();
 void show_debug_menus(); // checks for if menus should be shown first.
 void show_context_menu( S32 x, S32 y, MASK mask );
 void show_build_mode_context_menu(S32 x, S32 y, MASK mask);
-void load_url_local_file(const std::string& file_name);
 BOOL enable_save_into_inventory(void*);
 void handle_reset_view();
 void handle_cut(void*);
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 978d70c6461..875b3ccbf7d 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -51,7 +51,6 @@ def construct(self):
             self.path("*.pem")
             self.path("*.ini")
             self.path("*.xml")
-            self.path("*.vp")
             self.path("*.db2")
 
             # include the entire shaders directory recursively
@@ -66,35 +65,35 @@ def construct(self):
             self.path("*.tga")
             self.end_prefix("character")
 
-
         # Include our fonts
         if self.prefix(src="fonts"):
             self.path("*.ttf")
             self.path("*.txt")
             self.end_prefix("fonts")
 
-            # skins
-            if self.prefix(src="skins"):
-                    self.path("paths.xml")
-                    # include the entire textures directory recursively
-                    if self.prefix(src="*/textures"):
-                            self.path("*.tga")
-                            self.path("*.j2c")
-                            self.path("*.jpg")
-                            self.path("*.png")
-                            self.path("textures.xml")
-                            self.end_prefix("*/textures")
-                    self.path("*/xui/*/*.xml")
-                    self.path("*/*.xml")
-                    
-                    # Local HTML files (e.g. loading screen)
-                    if self.prefix(src="*/html"):
-                            self.path("*.png")
-                            self.path("*/*/*.html")
-                            self.path("*/*/*.gif")
-                            self.end_prefix("*/html")
-                    self.end_prefix("skins")
-        self.path("lsl_guide.html")
+        # skins
+        if self.prefix(src="skins"):
+                self.path("paths.xml")
+                # include the entire textures directory recursively
+                if self.prefix(src="*/textures"):
+                        self.path("*.tga")
+                        self.path("*.j2c")
+                        self.path("*.jpg")
+                        self.path("*.png")
+                        self.path("textures.xml")
+                        self.end_prefix("*/textures")
+                self.path("*/xui/*/*.xml")
+                self.path("*/*.xml")
+                
+                # Local HTML files (e.g. loading screen)
+                if self.prefix(src="*/html"):
+                        self.path("*.png")
+                        self.path("*/*/*.html")
+                        self.path("*/*/*.gif")
+                        self.end_prefix("*/html")
+                self.end_prefix("skins")
+        
+        # Files in the newview/ directory
         self.path("gpu_table.txt")
 
     def login_channel(self):
@@ -361,7 +360,7 @@ def package_finish(self):
                 "%%INSTALL_FILES%%":self.nsi_file_commands(True),
                 "%%DELETE_FILES%%":self.nsi_file_commands(False)})
 
-        NSIS_path = 'C:\\Program Files\\NSIS\\makensis.exe'
+        NSIS_path = 'C:\\Program Files\\NSIS\\Unicode\\makensis.exe'
         self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile))
         # self.remove(self.dst_path_of(tempfile))
         self.created_path(self.dst_path_of(installer_file))
@@ -505,9 +504,6 @@ def package_finish(self):
         if not os.path.exists (self.src_path_of(dmg_template)):
             dmg_template = os.path.join ('installers', 'darwin', 'release-dmg')
 
-        # To reinstate the linden scripting guide, add this to the list below:
-        #            "lsl_guide.html":"Linden Scripting Language Guide.html",
-
         for s,d in {self.get_dst_prefix():app_name + ".app",
                     os.path.join(dmg_template, "_VolumeIcon.icns"): ".VolumeIcon.icns",
                     os.path.join(dmg_template, "background.jpg"): "background.jpg",
diff --git a/indra/win_updater/updater.cpp b/indra/win_updater/updater.cpp
index f849e4e9ada..4bd07ead960 100644
--- a/indra/win_updater/updater.cpp
+++ b/indra/win_updater/updater.cpp
@@ -30,7 +30,7 @@
  */
 
 //
-// Usage: updater -url <url> [-name <window_title>] [-program <program_name>] [-silent]
+// Usage: updater -url <url>
 //
 
 #include "linden_common.h"
@@ -45,9 +45,6 @@ DWORD gTotalBytes = -1;
 HWND gWindow = NULL;
 WCHAR gProgress[256];
 char* gUpdateURL;
-char* gProgramName;
-char* gProductName;
-bool gIsSilent;
 
 #if _DEBUG
 FILE* logfile = 0;
@@ -217,7 +214,7 @@ int WINAPI get_url_into_file(WCHAR *uri, char *path, int *cancelled)
 		fprintf(logfile,"Calling PeekMessage\n");
 		fflush(logfile);
 #endif	
-		if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+		while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
 		{
 			TranslateMessage(&msg);
 			DispatchMessage(&msg);
@@ -279,26 +276,14 @@ int parse_args(int argc, char **argv)
 
 	for (j = 1; j < argc; j++) 
 	{
-		if ((!strcmp(argv[j], "-name")) && (++j < argc)) 
-		{
-			gProductName = argv[j];
-		}
-		else if ((!strcmp(argv[j], "-url")) && (++j < argc)) 
+		if ((!strcmp(argv[j], "-url")) && (++j < argc)) 
 		{
 			gUpdateURL = argv[j];
 		}
-		else if ((!strcmp(argv[j], "-program")) && (++j < argc)) 
-		{
-			gProgramName = argv[j];
-		}
-		else if (!strcmp(argv[j], "-silent"))
-		{
-			gIsSilent = true;
-		}
 	}
 
 	// If nothing was set, let the caller know.
-	if (!gProductName && !gProgramName && !gIsSilent && !gUpdateURL)
+	if (!gUpdateURL)
 	{
 		return 1;
 	}
@@ -350,9 +335,6 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
 	}
 
 	gUpdateURL = NULL;
-	gProgramName = NULL;
-	gProductName = NULL;
-	gIsSilent = false;
 
 	/////////////////////////////////////////
 	//
@@ -368,21 +350,10 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
 	// Parse the command line arguments
 	//
 	int parse_args_result = parse_args(argc, argv);
-	WCHAR window_title[2048];
-	if (gProductName)
-	{
-		mbstowcs(window_title, gProductName, 2048);
-		wcscat(window_title, L" Updater");		/* Flawfinder: ignore */
-	}
-	else
-	{
-		mbstowcs(window_title, "Second Life Updater", 2048);
-	}
 	
 	WNDCLASSEX wndclassex = { 0 };
 	DEVMODE dev_mode = { 0 };
 	char update_exec_path[MAX_PATH];		/* Flawfinder: ignore */
-	char *ptr;
 
 	const int WINDOW_WIDTH = 250;
 	const int WINDOW_HEIGHT = 100;
@@ -403,7 +374,7 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
 	EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dev_mode);
 	
 	gWindow = CreateWindowEx(NULL, win_class_name, 
-		window_title,
+		L"Second Life Updater",
 		WS_OVERLAPPEDWINDOW, 
 		CW_USEDEFAULT, 
 		CW_USEDEFAULT, 
@@ -437,24 +408,13 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
 			L"Error", MB_OK);
 		return 1;
 	}
-	if (0 == GetTempFileNameA(update_exec_path, NULL, 0, update_exec_path))
-	{
-		MessageBox(gWindow, L"Problem with GetTempFileName()",
-			L"Error", MB_OK);
-		return 1;
-	}
-	// Hack hack hack
-	ptr = strrchr(update_exec_path, '.');
-	*(ptr + 1) = 'e';
-	*(ptr + 2) = 'x';
-	*(ptr + 3) = 'e';
-	*(ptr + 4) = 0;
+	strcat(update_exec_path, "Second_Life_Updater.exe");
 
 	WCHAR update_uri[4096];
 	mbstowcs(update_uri, gUpdateURL, 4096);
 
-	int success;
-	int cancelled;
+	int success = 0;
+	int cancelled = 0;
 
 	// Actually do the download
 #if _DEBUG
@@ -493,47 +453,24 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
 		return 1;
 	}
 
-	// Construct some parameters.
-	char params[2048];		/* Flawfinder: ignore */
-	if (gIsSilent && gProgramName)
-	{
-		_snprintf(params, sizeof(params), "/S /P=\"%s\"", gProgramName);		/* Flawfinder: ignore */
-		params[2047] = '\0';
-	}
-	else if (gProgramName)
-	{
-		_snprintf(params, sizeof(params), "/P=\"%s\"", gProgramName);		/* Flawfinder: ignore */
-		params[2047] = '\0';
-	}
-	else if (gIsSilent)
-	{
-		sprintf(params, "/S");		/* Flawfinder: ignore */
-	}
-	else
-	{
-		params[0] = '\0';
-	}
+	// TODO: Make updates silent (with /S to NSIS)
+	//char params[256];		/* Flawfinder: ignore */
+	//sprintf(params, "/S");	/* Flawfinder: ignore */
+	//MessageBox(gWindow, 
+	//	L"Updating Second Life.\n\nSecond Life will automatically start once the update is complete.  This may take a minute...",
+	//	L"Download Complete",
+	//	MB_OK);
 		
-	if (32 >= (int) ShellExecuteA(gWindow, "open", update_exec_path, params, 
+	if (32 >= (int) ShellExecuteA(gWindow, "open", update_exec_path, NULL, 
 		"C:\\", SW_SHOWDEFAULT))
 	{
-		// No shit: less than or equal to 32 means failure
-		MessageBox(gWindow, L"ShellExecute failed.  Please try again later.", NULL, MB_OK);
+		// Less than or equal to 32 means failure
+		MessageBox(gWindow, L"Update failed.  Please try again later.", NULL, MB_OK);
 		return 1;
 	}
 
-	if (gIsSilent && gProductName)
-	{
-		WCHAR message[2048];
-		WCHAR wproduct[2048];
-		mbstowcs(wproduct, gProductName, 2048);
-
-		wsprintf(message, 
-				L"Updating %s.  %s will automatically start once the update is complete.  This may take a minute...",
-				wproduct, wproduct);
-				
-		MessageBox(gWindow, message, L"Download Complete", MB_OK);
-	}
+	// Give installer some time to open a window
+	Sleep(1000);
 
 	return 0;
 }
-- 
GitLab