Merge Firestorm LGPL

Sat, 07 Apr 2018 14:59:44 +0200

author
Ansariel
date
Sat, 07 Apr 2018 14:59:44 +0200
changeset 55083
6cc7466e6e3c
parent 55082
c230dd5e6f29
parent 55034
914def879c16
child 55091
5159e3f3817e

Merge Firestorm LGPL

autobuild.xml file | annotate | diff | revisions
indra/newview/app_settings/settings.xml file | annotate | diff | revisions
indra/newview/llappviewer.cpp file | annotate | diff | revisions
indra/newview/llmediactrl.cpp file | annotate | diff | revisions
indra/newview/llstartup.cpp file | annotate | diff | revisions
     1.1 --- a/autobuild.xml	Wed Mar 21 20:23:52 2018 +0100
     1.2 +++ b/autobuild.xml	Sat Apr 07 14:59:44 2018 +0200
     1.3 @@ -222,9 +222,9 @@
     1.4              <key>archive</key>
     1.5              <map>
     1.6                <key>hash</key>
     1.7 -              <string>8a19ebfac2b8ad690ef406ae55d13fe3</string>
     1.8 -              <key>url</key>
     1.9 -              <string>http://downloads.phoenixviewer.com/SDL-1.2.15-linux-201605221913-r44.tar.bz2</string>
    1.10 +              <string>2dd97d8bd012be4cdc58f550395feb7d</string>
    1.11 +              <key>url</key>
    1.12 +              <string>http://downloads.phoenixviewer.com/SDL-1.2.15-linux-180871815.tar.bz2</string>
    1.13              </map>
    1.14              <key>name</key>
    1.15              <string>linux</string>
    1.16 @@ -234,9 +234,9 @@
    1.17              <key>archive</key>
    1.18              <map>
    1.19                <key>hash</key>
    1.20 -              <string>2566e373b89a2e4f8e93a78948deda10</string>
    1.21 -              <key>url</key>
    1.22 -              <string>http://downloads.phoenixviewer.com/SDL-1.2.15-linux-x64-201509062227-r43.tar.bz2</string>
    1.23 +              <string>608dfd27f7aed9d57cf1f581c995b680</string>
    1.24 +              <key>url</key>
    1.25 +              <string>http://downloads.phoenixviewer.com/SDL-1.2.15-linux64-180841947.tar.bz2</string>
    1.26              </map>
    1.27              <key>name</key>
    1.28              <string>linux64</string>
    1.29 @@ -288,9 +288,9 @@
    1.30              <key>archive</key>
    1.31              <map>
    1.32                <key>hash</key>
    1.33 -              <string>1aa2e5355bb9df09f9196d14a72b6705</string>
    1.34 -              <key>url</key>
    1.35 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-apr/rev/314241/arch/Linux/installer/apr_suite-1.4.5.314241-linux-314241.tar.bz2</string>
    1.36 +              <string>161e07b37e2f30da004a0d72d5075ad7</string>
    1.37 +              <key>url</key>
    1.38 +              <string>http://downloads.phoenixviewer.com/apr_suite-1.4.5.180871344-linux-180871344.tar.bz2</string>
    1.39              </map>
    1.40              <key>name</key>
    1.41              <string>linux</string>
    1.42 @@ -300,9 +300,9 @@
    1.43              <key>archive</key>
    1.44              <map>
    1.45                <key>hash</key>
    1.46 -              <string>e640dcbc376eec6f3a942b4625d92d8e</string>
    1.47 -              <key>url</key>
    1.48 -              <string>http://downloads.phoenixviewer.com/apr_suite-1.4.5.201505150215-r92-linux-x64-201505150215-r92.tar.bz2</string>
    1.49 +              <string>5c3c29851edd837d5f9518618c4a303b</string>
    1.50 +              <key>url</key>
    1.51 +              <string>http://downloads.phoenixviewer.com/apr_suite-1.4.5.180841559-linux64-180841559.tar.bz2</string>
    1.52              </map>
    1.53              <key>name</key>
    1.54              <string>linux64</string>
    1.55 @@ -378,9 +378,9 @@
    1.56              <key>archive</key>
    1.57              <map>
    1.58                <key>hash</key>
    1.59 -              <string>5ff95c28897a7bb4da93bd4f5b3d9d06</string>
    1.60 -              <key>url</key>
    1.61 -              <string>http://downloads.phoenixviewer.com/boost-1.57-linux-201505061539-r135.tar.bz2</string>
    1.62 +              <string>32828f4ee3e5a45ed31e37eb7dd6367c</string>
    1.63 +              <key>url</key>
    1.64 +              <string>http://downloads.phoenixviewer.com/boost-1.57-linux-180871354.tar.bz2</string>
    1.65              </map>
    1.66              <key>name</key>
    1.67              <string>linux</string>
    1.68 @@ -390,9 +390,9 @@
    1.69              <key>archive</key>
    1.70              <map>
    1.71                <key>hash</key>
    1.72 -              <string>e86cc6e004d39d7210f708b39bed77a9</string>
    1.73 -              <key>url</key>
    1.74 -              <string>http://downloads.phoenixviewer.com/boost-1.57-linux-x64-201505150230-r138.tar.bz2</string>
    1.75 +              <string>b1d3daab689c5a8c8869715c5111d38e</string>
    1.76 +              <key>url</key>
    1.77 +              <string>http://downloads.phoenixviewer.com/boost-1.57-linux64-180841628.tar.bz2</string>
    1.78              </map>
    1.79              <key>name</key>
    1.80              <string>linux64</string>
    1.81 @@ -496,9 +496,9 @@
    1.82              <key>archive</key>
    1.83              <map>
    1.84                <key>hash</key>
    1.85 -              <string>f73cbdc220605119cf5f1b0c42d3bb9c</string>
    1.86 -              <key>url</key>
    1.87 -              <string>http://downloads.phoenixviewer.com/colladadom-2.3.201505061613-r94-linux-201505061613-r94.tar.bz2</string>
    1.88 +              <string>d83896f28716f34b7b49d61a23283c4c</string>
    1.89 +              <key>url</key>
    1.90 +              <string>http://downloads.phoenixviewer.com/colladadom-2.3.180871403-linux-180871403.tar.bz2</string>
    1.91              </map>
    1.92              <key>name</key>
    1.93              <string>linux</string>
    1.94 @@ -508,9 +508,9 @@
    1.95              <key>archive</key>
    1.96              <map>
    1.97                <key>hash</key>
    1.98 -              <string>0f3447ce6fddba79b54cb5959e95f330</string>
    1.99 -              <key>url</key>
   1.100 -              <string>http://downloads.phoenixviewer.com/colladadom-2.3.201505150238-r95-linux-x64-201505150238-r95.tar.bz2</string>
   1.101 +              <string>91a522a7bf0e8d66d2941c76dc28a261</string>
   1.102 +              <key>url</key>
   1.103 +              <string>http://downloads.phoenixviewer.com/colladadom-2.3.180841822-linux64-180841822.tar.bz2</string>
   1.104              </map>
   1.105              <key>name</key>
   1.106              <string>linux64</string>
   1.107 @@ -586,9 +586,9 @@
   1.108              <key>archive</key>
   1.109              <map>
   1.110                <key>hash</key>
   1.111 -              <string>9430c08954c00736117099046694e1b1</string>
   1.112 -              <key>url</key>
   1.113 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-curl/rev/314230/arch/Linux/installer/curl-7.47.0.314230-linux-314230.tar.bz2</string>
   1.114 +              <string>cade3843dfd7985f008cc8161daaefb0</string>
   1.115 +              <key>url</key>
   1.116 +              <string>http://downloads.phoenixviewer.com/curl-7.54.1.180871811-linux-180871811.tar.bz2</string>
   1.117              </map>
   1.118              <key>name</key>
   1.119              <string>linux</string>
   1.120 @@ -598,9 +598,9 @@
   1.121              <key>archive</key>
   1.122              <map>
   1.123                <key>hash</key>
   1.124 -              <string>630a2ddf43bba6e5b6e171dc68921dcb</string>
   1.125 -              <key>url</key>
   1.126 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/8663/36142/curl-7.54.1.508652-linux64-508652.tar.bz2</string>
   1.127 +              <string>51d9ce98279709854b0be5d0f450ba63</string>
   1.128 +              <key>url</key>
   1.129 +              <string>http://downloads.phoenixviewer.com/curl-7.54.1.180841943-linux64-180841943.tar.bz2</string>
   1.130              </map>
   1.131              <key>name</key>
   1.132              <string>linux64</string>
   1.133 @@ -684,9 +684,9 @@
   1.134              <key>archive</key>
   1.135              <map>
   1.136                <key>hash</key>
   1.137 -              <string>6d676abd9ad8d2883b855dbe397d9034</string>
   1.138 -              <key>url</key>
   1.139 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-dbus-glib/rev/314266/arch/Linux/installer/dbus_glib-0.76-linux-314266.tar.bz2</string>
   1.140 +              <string>9591dcb7efce2a770d77e907705e1492</string>
   1.141 +              <key>url</key>
   1.142 +              <string>http://downloads.phoenixviewer.com/dbus_glib-0.76-linux-180871236.tar.bz2</string>
   1.143              </map>
   1.144              <key>name</key>
   1.145              <string>linux</string>
   1.146 @@ -696,9 +696,9 @@
   1.147              <key>archive</key>
   1.148              <map>
   1.149                <key>hash</key>
   1.150 -              <string>7ee7b9aed3c0c8c09e7bf26bba7af8e1</string>
   1.151 -              <key>url</key>
   1.152 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-dbus-glib/rev/314266/arch/Linux/installer/dbus_glib-0.76-linux64-314266.tar.bz2</string>
   1.153 +              <string>5a685a65a7066937ef580dcd5a90f9dc</string>
   1.154 +              <key>url</key>
   1.155 +              <string>http://downloads.phoenixviewer.com/dbus_glib-0.76-linux64-180841549.tar.bz2</string>
   1.156              </map>
   1.157              <key>name</key>
   1.158              <string>linux64</string>
   1.159 @@ -768,9 +768,9 @@
   1.160              <key>archive</key>
   1.161              <map>
   1.162                <key>hash</key>
   1.163 -              <string>efc92b20a8170ab4f4d3f88c03c6cb9b</string>
   1.164 -              <key>url</key>
   1.165 -              <string>http://192.168.1.115/dev/pkg/dullahan-1.1.651_3.2987.1591.gd3e47f5-linux-171011511.tar.bz2</string>
   1.166 +              <string>bd0f62a03d846332adf07997e307cde6</string>
   1.167 +              <key>url</key>
   1.168 +              <string>http://downloads.phoenixviewer.com/dullahan-1.1.1080_3.3325.1750.gaabe4c4-linux-180871715.tar.bz2</string>
   1.169              </map>
   1.170              <key>name</key>
   1.171              <string>linux</string>
   1.172 @@ -780,9 +780,9 @@
   1.173              <key>archive</key>
   1.174              <map>
   1.175                <key>hash</key>
   1.176 -              <string>331c13dfd261f867884308f15d9952bc</string>
   1.177 -              <key>url</key>
   1.178 -              <string>http://192.168.1.115/dev/pkg/dullahan-1.1.651_3.2987.1591.gd3e47f5-linux64-171011518.tar.bz2</string>
   1.179 +              <string>6dded97d697c5ac9e4bd33c9ca8e3f9e</string>
   1.180 +              <key>url</key>
   1.181 +              <string>http://downloads.phoenixviewer.com/dullahan-1.1.1080_3.3325.1750.gaabe4c4-linux64-180861548.tar.bz2</string>
   1.182              </map>
   1.183              <key>name</key>
   1.184              <string>linux64</string>
   1.185 @@ -882,9 +882,9 @@
   1.186              <key>archive</key>
   1.187              <map>
   1.188                <key>hash</key>
   1.189 -              <string>387c90b9bb5ec412587fbe7a56261dd1</string>
   1.190 -              <key>url</key>
   1.191 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-expat/rev/314211/arch/Linux/installer/expat-2.1.1.314211-linux-314211.tar.bz2</string>
   1.192 +              <string>b20e813b55488e43df5c197f1efd165c</string>
   1.193 +              <key>url</key>
   1.194 +              <string>http://downloads.phoenixviewer.com/expat-2.1.1.180871203-linux-180871203.tar.bz2</string>
   1.195              </map>
   1.196              <key>name</key>
   1.197              <string>linux</string>
   1.198 @@ -894,9 +894,9 @@
   1.199              <key>archive</key>
   1.200              <map>
   1.201                <key>hash</key>
   1.202 -              <string>5e1f025d1cebd12db542080aa755257f</string>
   1.203 -              <key>url</key>
   1.204 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/380/943/expat-2.1.1.500375-linux64-500375.tar.bz2</string>
   1.205 +              <string>bbcfe77b920fb7f00c7f2a494ffc6c43</string>
   1.206 +              <key>url</key>
   1.207 +              <string>http://downloads.phoenixviewer.com/expat-2.1.1.180841547-linux64-180841547.tar.bz2</string>
   1.208              </map>
   1.209              <key>name</key>
   1.210              <string>linux64</string>
   1.211 @@ -962,11 +962,11 @@
   1.212              <key>archive</key>
   1.213              <map>
   1.214                <key>hash</key>
   1.215 -              <string>eccdcb4a1e96bb829284d01255f4f913</string>
   1.216 +              <string>a379240b46b13b2b9e858baa79d1a6ab</string>
   1.217                <key>hash_algorithm</key>
   1.218                <string>md5</string>
   1.219                <key>url</key>
   1.220 -              <string>file:///opt/firestorm/fmodstudio-1.10.02-linux-201801091647.tar.bz2</string>
   1.221 +              <string>file:///opt/firestorm/fmodstudio-1.10.04-linux-180891813.tar.bz2</string>
   1.222              </map>
   1.223              <key>name</key>
   1.224              <string>linux</string>
   1.225 @@ -976,11 +976,11 @@
   1.226              <key>archive</key>
   1.227              <map>
   1.228                <key>hash</key>
   1.229 -              <string>8787b777a49d41ccbb3cbd6c4a1d768d</string>
   1.230 +              <string>e0b59ec3b5549b9a0f9caf8c7116af4e</string>
   1.231                <key>hash_algorithm</key>
   1.232                <string>md5</string>
   1.233                <key>url</key>
   1.234 -              <string>file:///opt/firestorm/fmodstudio-1.10.02-linux-x64-201801091648.tar.bz2</string>
   1.235 +              <string>file:///opt/firestorm/fmodstudio-1.10.04-linux64-180891838.tar.bz2</string>
   1.236              </map>
   1.237              <key>name</key>
   1.238              <string>linux64</string>
   1.239 @@ -1088,9 +1088,9 @@
   1.240              <key>archive</key>
   1.241              <map>
   1.242                <key>hash</key>
   1.243 -              <string>a20a3d0ab7fc3401bc2ca81e9309f630</string>
   1.244 -              <key>url</key>
   1.245 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-fontconfig/rev/314281/arch/Linux/installer/fontconfig-2.11.0-linux-314281.tar.bz2</string>
   1.246 +              <string>f7a2a70417ab9d2f999f80604cb4fa48</string>
   1.247 +              <key>url</key>
   1.248 +              <string>http://downloads.phoenixviewer.com/fontconfig-2.11.0-linux-180871443.tar.bz2</string>
   1.249              </map>
   1.250              <key>name</key>
   1.251              <string>linux</string>
   1.252 @@ -1100,9 +1100,9 @@
   1.253              <key>archive</key>
   1.254              <map>
   1.255                <key>hash</key>
   1.256 -              <string>e2419d56960c160670051fbb055fb729</string>
   1.257 -              <key>url</key>
   1.258 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-fontconfig/rev/314281/arch/Linux/installer/fontconfig-2.11.0-linux64-314281.tar.bz2</string>
   1.259 +              <string>5818ed2d9b29bad00878f3e26b09b7f9</string>
   1.260 +              <key>url</key>
   1.261 +              <string>http://downloads.phoenixviewer.com/fontconfig-2.11.0-linux64-180841833.tar.bz2</string>
   1.262              </map>
   1.263              <key>name</key>
   1.264              <string>linux64</string>
   1.265 @@ -1154,9 +1154,9 @@
   1.266              <key>archive</key>
   1.267              <map>
   1.268                <key>hash</key>
   1.269 -              <string>1b401394106cedc86926bd488f5aa45e</string>
   1.270 -              <key>url</key>
   1.271 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-freetype/rev/314215/arch/Linux/installer/freetype-2.4.4.314215-linux-314215.tar.bz2</string>
   1.272 +              <string>ced1bc8b28a2e87093b364c2b6d8cb9c</string>
   1.273 +              <key>url</key>
   1.274 +              <string>http://downloads.phoenixviewer.com/freetype-2.4.4.180871412-linux-180871412.tar.bz2</string>
   1.275              </map>
   1.276              <key>name</key>
   1.277              <string>linux</string>
   1.278 @@ -1166,9 +1166,9 @@
   1.279              <key>archive</key>
   1.280              <map>
   1.281                <key>hash</key>
   1.282 -              <string>b30634f1a6ee2b4940eee06267a607df</string>
   1.283 -              <key>url</key>
   1.284 -              <string>http://downloads.phoenixviewer.com/freetype-2.3.9.201505150242-r61-linux-x64-201505150242-r61.tar.bz2</string>
   1.285 +              <string>0dab99c682433145aa8f5e26d8940afd</string>
   1.286 +              <key>url</key>
   1.287 +              <string>http://downloads.phoenixviewer.com/freetype-2.4.4.180841832-linux64-180841832.tar.bz2</string>
   1.288              </map>
   1.289              <key>name</key>
   1.290              <string>linux64</string>
   1.291 @@ -1220,9 +1220,9 @@
   1.292              <key>archive</key>
   1.293              <map>
   1.294                <key>hash</key>
   1.295 -              <string>baf1fd13e1fe6aef586200fc87a70f53</string>
   1.296 -              <key>url</key>
   1.297 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-glext/rev/314200/arch/Linux/installer/glext-68-linux-314200.tar.bz2</string>
   1.298 +              <string>da432b959ccd920adca1030ad7f1b6cf</string>
   1.299 +              <key>url</key>
   1.300 +              <string>http://downloads.phoenixviewer.com/glext-68-linux-180871251.tar.bz2</string>
   1.301              </map>
   1.302              <key>name</key>
   1.303              <string>linux</string>
   1.304 @@ -1232,9 +1232,9 @@
   1.305              <key>archive</key>
   1.306              <map>
   1.307                <key>hash</key>
   1.308 -              <string>5f3c9d61b620f949b199ebd8885218ed</string>
   1.309 -              <key>url</key>
   1.310 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-glext/rev/314200/arch/Linux/installer/glext-68-linux64-314200.tar.bz2</string>
   1.311 +              <string>12b2d643a013be8297bbbe37743abe94</string>
   1.312 +              <key>url</key>
   1.313 +              <string>http://downloads.phoenixviewer.com/glext-68-linux64-180841554.tar.bz2</string>
   1.314              </map>
   1.315              <key>name</key>
   1.316              <string>linux64</string>
   1.317 @@ -1342,11 +1342,11 @@
   1.318              <key>archive</key>
   1.319              <map>
   1.320                <key>hash</key>
   1.321 -              <string>f62e7cff14feb646babaa19b7ea14ed3</string>
   1.322 +              <string>4aa53f9774195899efb9d14a0f6c4748</string>
   1.323                <key>hash_algorithm</key>
   1.324                <string>md5</string>
   1.325                <key>url</key>
   1.326 -              <string>http://downloads.phoenixviewer.com/glod-1.0pre3.201704302344-linux-201704302344.tar.bz2</string>
   1.327 +              <string>http://downloads.phoenixviewer.com/glod-1.0pre3.180872225-linux-180872225.tar.bz2</string>
   1.328              </map>
   1.329              <key>name</key>
   1.330              <string>linux</string>
   1.331 @@ -1356,9 +1356,9 @@
   1.332              <key>archive</key>
   1.333              <map>
   1.334                <key>hash</key>
   1.335 -              <string>fea16abf8c2b7f38fc33a2142bfbfe18</string>
   1.336 -              <key>url</key>
   1.337 -              <string>http://downloads.phoenixviewer.com/glod-1.0pre3.201704302331-linux64-201704302331.tar.bz2</string>
   1.338 +              <string>c742c8b3903aadd79c3a6f3d3c09986d</string>
   1.339 +              <key>url</key>
   1.340 +              <string>http://downloads.phoenixviewer.com/glod-1.0pre3.180842253-linux64-180842253.tar.bz2</string>
   1.341              </map>
   1.342              <key>name</key>
   1.343              <string>linux64</string>
   1.344 @@ -1436,9 +1436,9 @@
   1.345              <key>archive</key>
   1.346              <map>
   1.347                <key>hash</key>
   1.348 -              <string>352e673897e8f36f8470150b8ace6ce9</string>
   1.349 -              <key>url</key>
   1.350 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-google-breakpad/rev/314225/arch/Linux/installer/google_breakpad-1413.314225-linux-314225.tar.bz2</string>
   1.351 +              <string>95860763e872e984e4215b0fa22d40b8</string>
   1.352 +              <key>url</key>
   1.353 +              <string>http://downloads.phoenixviewer.com/google_breakpad-1413.180871249-linux-180871249.tar.bz2</string>
   1.354              </map>
   1.355              <key>name</key>
   1.356              <string>linux</string>
   1.357 @@ -1448,9 +1448,9 @@
   1.358              <key>archive</key>
   1.359              <map>
   1.360                <key>hash</key>
   1.361 -              <string>f8df27382e6afeee5408e85c010a6c86</string>
   1.362 -              <key>url</key>
   1.363 -              <string>http://downloads.phoenixviewer.com/google_breakpad-1413.201505150223-r95-linux-x64-201505150223-r95.tar.bz2</string>
   1.364 +              <string>aa4a74b0c5794034797f22d4bdc57a0d</string>
   1.365 +              <key>url</key>
   1.366 +              <string>http://downloads.phoenixviewer.com/google_breakpad-1413.180841553-linux64-180841553.tar.bz2</string>
   1.367              </map>
   1.368              <key>name</key>
   1.369              <string>linux64</string>
   1.370 @@ -1526,9 +1526,9 @@
   1.371              <key>archive</key>
   1.372              <map>
   1.373                <key>hash</key>
   1.374 -              <string>ad51f68702f25ba245fff312c50c8876</string>
   1.375 -              <key>url</key>
   1.376 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-googlemock/rev/317828/arch/Linux/installer/googlemock-1.7.0.317828-linux-317828.tar.bz2</string>
   1.377 +              <string>5bc5ddeb97b8498d5141e27092161323</string>
   1.378 +              <key>url</key>
   1.379 +              <string>http://downloads.phoenixviewer.com/googlemock-1.7.0.180871704-linux-180871704.tar.bz2</string>
   1.380              </map>
   1.381              <key>name</key>
   1.382              <string>linux</string>
   1.383 @@ -1538,9 +1538,9 @@
   1.384              <key>archive</key>
   1.385              <map>
   1.386                <key>hash</key>
   1.387 -              <string>0f606bf01f933f00edeb9bf9a2530930</string>
   1.388 -              <key>url</key>
   1.389 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/918/2056/googlemock-1.7.0.500908-linux64-500908.tar.bz2</string>
   1.390 +              <string>f879f518ea207cecf13943d58b57b515</string>
   1.391 +              <key>url</key>
   1.392 +              <string>http://downloads.phoenixviewer.com/googlemock-1.7.0.180841921-linux64-180841921.tar.bz2</string>
   1.393              </map>
   1.394              <key>name</key>
   1.395              <string>linux64</string>
   1.396 @@ -1590,9 +1590,9 @@
   1.397              <key>archive</key>
   1.398              <map>
   1.399                <key>hash</key>
   1.400 -              <string>5017b3e95d2c6f47bb111c3f9c075522</string>
   1.401 -              <key>url</key>
   1.402 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-gstreamer/rev/314267/arch/Linux/installer/gstreamer-0.10.6.314267-linux-314267.tar.bz2</string>
   1.403 +              <string>904540d91ea7d577c7bcbb679621f013</string>
   1.404 +              <key>url</key>
   1.405 +              <string>http://downloads.phoenixviewer.com/gstreamer-0.10.6.180871246-linux-180871246.tar.bz2</string>
   1.406              </map>
   1.407              <key>name</key>
   1.408              <string>linux</string>
   1.409 @@ -1602,9 +1602,9 @@
   1.410              <key>archive</key>
   1.411              <map>
   1.412                <key>hash</key>
   1.413 -              <string>7c9d7cc88add7831a6afeedc20cad2fe</string>
   1.414 -              <key>url</key>
   1.415 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-gstreamer/rev/314267/arch/Linux/installer/gstreamer-0.10.6.314267-linux64-314267.tar.bz2</string>
   1.416 +              <string>86a358f1b5a2c2baf68444b2bfc5bb32</string>
   1.417 +              <key>url</key>
   1.418 +              <string>http://downloads.phoenixviewer.com/gstreamer-0.10.6.180841551-linux64-180841551.tar.bz2</string>
   1.419              </map>
   1.420              <key>name</key>
   1.421              <string>linux64</string>
   1.422 @@ -1630,9 +1630,9 @@
   1.423              <key>archive</key>
   1.424              <map>
   1.425                <key>hash</key>
   1.426 -              <string>8cd64b4c5d7f02c5ad87051861108749</string>
   1.427 -              <key>url</key>
   1.428 -              <string>http://downloads.phoenixviewer.com/gtk_atk_pango_glib-2.0-linux-201608031222.tar.bz2</string>
   1.429 +              <string>fb047d496c32cc3b9f99793ee6ebb1e3</string>
   1.430 +              <key>url</key>
   1.431 +              <string>http://downloads.phoenixviewer.com/gtk_atk_pango_glib-2.1-linux-180871647.tar.bz2</string>
   1.432              </map>
   1.433              <key>name</key>
   1.434              <string>linux</string>
   1.435 @@ -1642,16 +1642,16 @@
   1.436              <key>archive</key>
   1.437              <map>
   1.438                <key>hash</key>
   1.439 -              <string>61a10409052c7f77cbfe30b7a8cd7c0b</string>
   1.440 -              <key>url</key>
   1.441 -              <string>http://downloads.phoenixviewer.com/gtk_atk_pango_glib-2.0-linux-x64-201505151700-r5.tar.bz2</string>
   1.442 +              <string>d918d894430c1d1d869b9f2e06570c65</string>
   1.443 +              <key>url</key>
   1.444 +              <string>http://downloads.phoenixviewer.com/gtk_atk_pango_glib-2.1-linux64-180841902.tar.bz2</string>
   1.445              </map>
   1.446              <key>name</key>
   1.447              <string>linux64</string>
   1.448            </map>
   1.449          </map>
   1.450          <key>version</key>
   1.451 -        <string>0.1</string>
   1.452 +        <string>2.1</string>
   1.453        </map>
   1.454        <key>havok-source</key>
   1.455        <map>
   1.456 @@ -1816,9 +1816,9 @@
   1.457              <key>archive</key>
   1.458              <map>
   1.459                <key>hash</key>
   1.460 -              <string>32560d3200da72fea2922371fcef25f5</string>
   1.461 -              <key>url</key>
   1.462 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-jpeglib/rev/314202/arch/Linux/installer/jpeglib-8c.314202-linux-314202.tar.bz2</string>
   1.463 +              <string>a7039c9a9c4461c5f85542f068dc09e5</string>
   1.464 +              <key>url</key>
   1.465 +              <string>http://downloads.phoenixviewer.com/jpeglib-8c.180871203-linux-180871203.tar.bz2</string>
   1.466              </map>
   1.467              <key>name</key>
   1.468              <string>linux</string>
   1.469 @@ -1828,9 +1828,9 @@
   1.470              <key>archive</key>
   1.471              <map>
   1.472                <key>hash</key>
   1.473 -              <string>8b36861396af4a31668f673aebd4b1d8</string>
   1.474 -              <key>url</key>
   1.475 -              <string>http://downloads.phoenixviewer.com/jpeglib-8c.201505150200-r27-linux-x64-201505150200-r27.tar.bz2</string>
   1.476 +              <string>324bb9deb00d256a12f8cbf686f413f0</string>
   1.477 +              <key>url</key>
   1.478 +              <string>http://downloads.phoenixviewer.com/jpeglib-8c.180841548-linux64-180841548.tar.bz2</string>
   1.479              </map>
   1.480              <key>name</key>
   1.481              <string>linux64</string>
   1.482 @@ -1906,9 +1906,9 @@
   1.483              <key>archive</key>
   1.484              <map>
   1.485                <key>hash</key>
   1.486 -              <string>9d5d9fec28cbbb1651b95728173f8af7</string>
   1.487 -              <key>url</key>
   1.488 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-jsoncpp/rev/314229/arch/Linux/installer/jsoncpp-0.5.0.314229-linux-314229.tar.bz2</string>
   1.489 +              <string>da45220ec6fcf945f6ca1f11bc7606cf</string>
   1.490 +              <key>url</key>
   1.491 +              <string>http://downloads.phoenixviewer.com/jsoncpp-0.5.0.180872045-linux-180872045.tar.bz2</string>
   1.492              </map>
   1.493              <key>name</key>
   1.494              <string>linux</string>
   1.495 @@ -1918,9 +1918,9 @@
   1.496              <key>archive</key>
   1.497              <map>
   1.498                <key>hash</key>
   1.499 -              <string>e10077e94fa6916b6da001fc52e15ed6</string>
   1.500 -              <key>url</key>
   1.501 -              <string>http://downloads.phoenixviewer.com/jsoncpp-0.5.0.201508041908-r34-linux-x64-201508041908-r34.tar.bz2</string>
   1.502 +              <string>724850830e01cdb6afb4eed9ce2ec6c5</string>
   1.503 +              <key>url</key>
   1.504 +              <string>http://downloads.phoenixviewer.com/jsoncpp-0.5.0.180841554-linux64-180841554.tar.bz2</string>
   1.505              </map>
   1.506              <key>name</key>
   1.507              <string>linux64</string>
   1.508 @@ -1972,9 +1972,9 @@
   1.509              <key>archive</key>
   1.510              <map>
   1.511                <key>hash</key>
   1.512 -              <string>75991f598df209713faf94b4a1cb1a89</string>
   1.513 -              <key>url</key>
   1.514 -              <string>file:///opt/firestorm/kdu-7.A.3-darwin-180711129.tar.bz2</string>
   1.515 +              <string>814bec3fa5045a18dce2bc4ce78b585d</string>
   1.516 +              <key>url</key>
   1.517 +              <string>file:///opt/firestorm/kdu-7.A.4-darwin-180792321.tar.bz2</string>
   1.518              </map>
   1.519              <key>name</key>
   1.520              <string>darwin</string>
   1.521 @@ -1984,9 +1984,9 @@
   1.522              <key>archive</key>
   1.523              <map>
   1.524                <key>hash</key>
   1.525 -              <string>75991f598df209713faf94b4a1cb1a89</string>
   1.526 -              <key>url</key>
   1.527 -              <string>file:///opt/firestorm/kdu-7.A.3-darwin-180711129.tar.bz2</string>
   1.528 +              <string>814bec3fa5045a18dce2bc4ce78b585d</string>
   1.529 +              <key>url</key>
   1.530 +              <string>file:///opt/firestorm/kdu-7.A.4-darwin-180792321.tar.bz2</string>
   1.531              </map>
   1.532              <key>name</key>
   1.533              <string>darwin64</string>
   1.534 @@ -1996,9 +1996,9 @@
   1.535              <key>archive</key>
   1.536              <map>
   1.537                <key>hash</key>
   1.538 -              <string>1c4e11f6ca7cdc2a3e5158eda7a432be</string>
   1.539 -              <key>url</key>
   1.540 -              <string>file:///opt/firestorm/kdu-7.9.1-linux-201703182157.tar.bz2</string>
   1.541 +              <string>fa8a0db7f4900663f5d58eaac2b782b5</string>
   1.542 +              <key>url</key>
   1.543 +              <string>file:///opt/firestorm/kdu-7.A.4-linux-180892203.tar.bz2</string>
   1.544              </map>
   1.545              <key>name</key>
   1.546              <string>linux</string>
   1.547 @@ -2008,9 +2008,9 @@
   1.548              <key>archive</key>
   1.549              <map>
   1.550                <key>hash</key>
   1.551 -              <string>1c4e11f6ca7cdc2a3e5158eda7a432be</string>
   1.552 -              <key>url</key>
   1.553 -              <string>file:///opt/firestorm/kdu-7.9.1-linux-201703182157.tar.bz2</string>
   1.554 +              <string>fa8a0db7f4900663f5d58eaac2b782b5</string>
   1.555 +              <key>url</key>
   1.556 +              <string>file:///opt/firestorm/kdu-7.A.4-linux-180892203.tar.bz2</string>
   1.557              </map>
   1.558              <key>name</key>
   1.559              <string>linux64</string>
   1.560 @@ -2086,9 +2086,9 @@
   1.561              <key>archive</key>
   1.562              <map>
   1.563                <key>hash</key>
   1.564 -              <string>0d8009c3b6c1eb510593476dd1d821b5</string>
   1.565 -              <key>url</key>
   1.566 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-hunspell/rev/314217/arch/Linux/installer/libhunspell-1.3.2.314217-linux-314217.tar.bz2</string>
   1.567 +              <string>77996d95cf2f072f4f277a2aaff20456</string>
   1.568 +              <key>url</key>
   1.569 +              <string>http://downloads.phoenixviewer.com/libhunspell-1.3.2.180871248-linux-180871248.tar.bz2</string>
   1.570              </map>
   1.571              <key>name</key>
   1.572              <string>linux</string>
   1.573 @@ -2098,9 +2098,9 @@
   1.574              <key>archive</key>
   1.575              <map>
   1.576                <key>hash</key>
   1.577 -              <string>7341037efcf156ad7aa6ba67ab0413c5</string>
   1.578 -              <key>url</key>
   1.579 -              <string>http://downloads.phoenixviewer.com/libhunspell-1.3.2.201505150222-r21-linux-x64-201505150222-r21.tar.bz2</string>
   1.580 +              <string>6555f040c686d8c1dec8e6264c2d3672</string>
   1.581 +              <key>url</key>
   1.582 +              <string>http://downloads.phoenixviewer.com/libhunspell-1.3.2.180841552-linux64-180841552.tar.bz2</string>
   1.583              </map>
   1.584              <key>name</key>
   1.585              <string>linux64</string>
   1.586 @@ -2242,9 +2242,9 @@
   1.587              <key>archive</key>
   1.588              <map>
   1.589                <key>hash</key>
   1.590 -              <string>0758f3cb4c02ebab61854b811b0894e9</string>
   1.591 -              <key>url</key>
   1.592 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-libpng/rev/314214/arch/Linux/installer/libpng-1.6.8.314214-linux-314214.tar.bz2</string>
   1.593 +              <string>31754947447ec98374b3bf92e29cf68a</string>
   1.594 +              <key>url</key>
   1.595 +              <string>http://downloads.phoenixviewer.com/libpng-1.6.8.180871343-linux-180871343.tar.bz2</string>
   1.596              </map>
   1.597              <key>name</key>
   1.598              <string>linux</string>
   1.599 @@ -2254,9 +2254,9 @@
   1.600              <key>archive</key>
   1.601              <map>
   1.602                <key>hash</key>
   1.603 -              <string>96cccc9c256107ff8425e15647957f17</string>
   1.604 -              <key>url</key>
   1.605 -              <string>http://downloads.phoenixviewer.com/libpng-1.6.8.201505150228-r52-linux-x64-201505150228-r52.tar.bz2</string>
   1.606 +              <string>83ae55031f81dace9dcf688cc5510010</string>
   1.607 +              <key>url</key>
   1.608 +              <string>http://downloads.phoenixviewer.com/libpng-1.6.8.180841558-linux64-180841558.tar.bz2</string>
   1.609              </map>
   1.610              <key>name</key>
   1.611              <string>linux64</string>
   1.612 @@ -2308,9 +2308,9 @@
   1.613              <key>archive</key>
   1.614              <map>
   1.615                <key>hash</key>
   1.616 -              <string>a2eaf9515cd129f3e21a08e92689006b</string>
   1.617 -              <key>url</key>
   1.618 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-libuuid/rev/314269/arch/Linux/installer/libuuid-1.6.2-linux-314269.tar.bz2</string>
   1.619 +              <string>1b1d83df165c947bea5c60c460277f93</string>
   1.620 +              <key>url</key>
   1.621 +              <string>http://downloads.phoenixviewer.com/libuuid-1.6.2-linux-180871203.tar.bz2</string>
   1.622              </map>
   1.623              <key>name</key>
   1.624              <string>linux</string>
   1.625 @@ -2320,9 +2320,9 @@
   1.626              <key>archive</key>
   1.627              <map>
   1.628                <key>hash</key>
   1.629 -              <string>6eca8418f134d2f4d97de89a33773be3</string>
   1.630 -              <key>url</key>
   1.631 -              <string>http://downloads.phoenixviewer.com/libuuid-1.6.2-linux-x64-201505150200-r8.tar.bz2</string>
   1.632 +              <string>f3cc32c84b99f1277370ce88a0faf40e</string>
   1.633 +              <key>url</key>
   1.634 +              <string>http://downloads.phoenixviewer.com/libuuid-1.6.2-linux64-180841554.tar.bz2</string>
   1.635              </map>
   1.636              <key>name</key>
   1.637              <string>linux64</string>
   1.638 @@ -2374,9 +2374,9 @@
   1.639              <key>archive</key>
   1.640              <map>
   1.641                <key>hash</key>
   1.642 -              <string>6954173a141d928f2614076577d952de</string>
   1.643 -              <key>url</key>
   1.644 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-libxml/rev/314197/arch/Linux/installer/libxml2-2.9.1.314197-linux-314197.tar.bz2</string>
   1.645 +              <string>b4e676d3d583264f006432510727aa05</string>
   1.646 +              <key>url</key>
   1.647 +              <string>http://downloads.phoenixviewer.com/libxml2-2.9.4.180871340-linux-180871340.tar.bz2</string>
   1.648              </map>
   1.649              <key>name</key>
   1.650              <string>linux</string>
   1.651 @@ -2386,9 +2386,9 @@
   1.652              <key>archive</key>
   1.653              <map>
   1.654                <key>hash</key>
   1.655 -              <string>ba36cdab49fd5f3f5158cd6719a84a90</string>
   1.656 -              <key>url</key>
   1.657 -              <string>http://downloads.phoenixviewer.com/libxml2-2.9.1.201505150226-r42-linux-x64-201505150226-r42.tar.bz2</string>
   1.658 +              <string>0bc56fa68f59537486c75b04646d65a9</string>
   1.659 +              <key>url</key>
   1.660 +              <string>http://downloads.phoenixviewer.com/libxml2-2.9.4.180841555-linux64-180841555.tar.bz2</string>
   1.661              </map>
   1.662              <key>name</key>
   1.663              <string>linux64</string>
   1.664 @@ -2694,9 +2694,9 @@
   1.665              <key>archive</key>
   1.666              <map>
   1.667                <key>hash</key>
   1.668 -              <string>079c1a1bdb3ce1cda8ce3d7f75eeced3</string>
   1.669 -              <key>url</key>
   1.670 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/9258/41585/nghttp2-1.25.0.509246-linux-509246.tar.bz2</string>
   1.671 +              <string>24c50d563fe8ff10ca819088ffbef7a6</string>
   1.672 +              <key>url</key>
   1.673 +              <string>http://downloads.phoenixviewer.com/nghttp2-1.25.0.180871240-linux-180871240.tar.bz2</string>
   1.674              </map>
   1.675              <key>name</key>
   1.676              <string>linux</string>
   1.677 @@ -2706,9 +2706,9 @@
   1.678              <key>archive</key>
   1.679              <map>
   1.680                <key>hash</key>
   1.681 -              <string>c3c5ff7d2f7ac1143ef8d888192d4a53</string>
   1.682 -              <key>url</key>
   1.683 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/9257/41579/nghttp2-1.25.0.509246-linux64-509246.tar.bz2</string>
   1.684 +              <string>b460d5bac2d20b38cb73b54d0ab1b6e3</string>
   1.685 +              <key>url</key>
   1.686 +              <string>http://downloads.phoenixviewer.com/nghttp2-1.25.0.180841549-linux64-180841549.tar.bz2</string>
   1.687              </map>
   1.688              <key>name</key>
   1.689              <string>linux64</string>
   1.690 @@ -2828,9 +2828,9 @@
   1.691              <key>archive</key>
   1.692              <map>
   1.693                <key>hash</key>
   1.694 -              <string>5c9d94dce4551b19790057766ff939ea</string>
   1.695 -              <key>url</key>
   1.696 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-oggvorbis/rev/314224/arch/Linux/installer/ogg_vorbis-1.2.2-1.3.2.314224-linux-314224.tar.bz2</string>
   1.697 +              <string>ee185657aed3a7fcabcd9a1335a6050b</string>
   1.698 +              <key>url</key>
   1.699 +              <string>http://downloads.phoenixviewer.com/ogg_vorbis-1.2.2-1.3.2.180871245-linux-180871245.tar.bz2</string>
   1.700              </map>
   1.701              <key>name</key>
   1.702              <string>linux</string>
   1.703 @@ -2840,9 +2840,9 @@
   1.704              <key>archive</key>
   1.705              <map>
   1.706                <key>hash</key>
   1.707 -              <string>a237c81b2c5fa3926ce04586568cce74</string>
   1.708 -              <key>url</key>
   1.709 -              <string>http://downloads.phoenixviewer.com/ogg_vorbis-1.2.2-1.3.2.201505150221-r32-linux-x64-201505150221-r32.tar.bz2</string>
   1.710 +              <string>ec5fd10d3a504e528b61d339522ca0f9</string>
   1.711 +              <key>url</key>
   1.712 +              <string>http://downloads.phoenixviewer.com/ogg_vorbis-1.2.2-1.3.2.180841550-linux64-180841550.tar.bz2</string>
   1.713              </map>
   1.714              <key>name</key>
   1.715              <string>linux64</string>
   1.716 @@ -2894,9 +2894,9 @@
   1.717              <key>archive</key>
   1.718              <map>
   1.719                <key>hash</key>
   1.720 -              <string>a0f11d381e6daf2b4352461a75c53e89</string>
   1.721 -              <key>url</key>
   1.722 -              <string>http://downloads.phoenixviewer.com/open_libndofdev-0.8-linux-201605222023-r13.tar.bz2</string>
   1.723 +              <string>86cb59b79ce0aafe28d4055a17d1f748</string>
   1.724 +              <key>url</key>
   1.725 +              <string>http://downloads.phoenixviewer.com/open_libndofdev-0.3.180871824-linux-180871824.tar.bz2</string>
   1.726              </map>
   1.727              <key>name</key>
   1.728              <string>linux</string>
   1.729 @@ -2906,16 +2906,16 @@
   1.730              <key>archive</key>
   1.731              <map>
   1.732                <key>hash</key>
   1.733 -              <string>587567ef04c06b9bf746e3491dbcc556</string>
   1.734 -              <key>url</key>
   1.735 -              <string>http://downloads.phoenixviewer.com/open_libndofdev-0.8-linux-x64-201602152224-r18.tar.bz2</string>
   1.736 +              <string>4df349abfc942fb8e674244d1bd0a515</string>
   1.737 +              <key>url</key>
   1.738 +              <string>http://downloads.phoenixviewer.com/open_libndofdev-0.3.180841957-linux64-180841957.tar.bz2</string>
   1.739              </map>
   1.740              <key>name</key>
   1.741              <string>linux64</string>
   1.742            </map>
   1.743          </map>
   1.744          <key>version</key>
   1.745 -        <string>0.3</string>
   1.746 +        <string>0.3.180841957</string>
   1.747        </map>
   1.748        <key>openal</key>
   1.749        <map>
   1.750 @@ -2936,11 +2936,11 @@
   1.751              <key>archive</key>
   1.752              <map>
   1.753                <key>hash</key>
   1.754 -              <string>24b91eda3831a51c7774644016c4cb09</string>
   1.755 +              <string>cc0f030e6f4a78e3afd5269165c056b4</string>
   1.756                <key>hash_algorithm</key>
   1.757                <string>md5</string>
   1.758                <key>url</key>
   1.759 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-openal/rev/314223/arch/Linux/installer/openal-1.12.854-1.1.0.314223-linux-314223.tar.bz2</string>
   1.760 +              <string>http://downloads.phoenixviewer.com/openal-1.12.854-1.1.0.180871246-linux-180871246.tar.bz2</string>
   1.761              </map>
   1.762              <key>name</key>
   1.763              <string>linux</string>
   1.764 @@ -2950,9 +2950,9 @@
   1.765              <key>archive</key>
   1.766              <map>
   1.767                <key>hash</key>
   1.768 -              <string>9ccf2c9046edd73854fc084919f507b2</string>
   1.769 -              <key>url</key>
   1.770 -              <string>http://downloads.phoenixviewer.com/openal-1.12.854-1.1.0.201505150222-r25-linux-x64-201505150222-r25.tar.bz2</string>
   1.771 +              <string>4f36ae378593240701fd4453bd6074c8</string>
   1.772 +              <key>url</key>
   1.773 +              <string>http://downloads.phoenixviewer.com/openal-1.12.854-1.1.0.180841552-linux64-180841552.tar.bz2</string>
   1.774              </map>
   1.775              <key>name</key>
   1.776              <string>linux64</string>
   1.777 @@ -3030,9 +3030,9 @@
   1.778              <key>archive</key>
   1.779              <map>
   1.780                <key>hash</key>
   1.781 -              <string>675c283030879d3d9c49082bfa2192eb</string>
   1.782 -              <key>url</key>
   1.783 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openjpeg_3p-update-openjpeg/rev/297018/arch/Linux/installer/openjpeg-1.4.297018-linux-297018.tar.bz2</string>
   1.784 +              <string>cc1aca5688b00878ae94a0ad71cb4f35</string>
   1.785 +              <key>url</key>
   1.786 +              <string>http://downloads.phoenixviewer.com/openjpeg-1.5.1.180871249-linux-180871249.tar.bz2</string>
   1.787              </map>
   1.788              <key>name</key>
   1.789              <string>linux</string>
   1.790 @@ -3042,9 +3042,9 @@
   1.791              <key>archive</key>
   1.792              <map>
   1.793                <key>hash</key>
   1.794 -              <string>8b36861396af4a31668f673aebd4b1d8</string>
   1.795 -              <key>url</key>
   1.796 -              <string>http://downloads.phoenixviewer.com/jpeglib-8c.201505150200-r27-linux-x64-201505150200-r27.tar.bz2</string>
   1.797 +              <string>6098e555296583336b02f1a78b41b93a</string>
   1.798 +              <key>url</key>
   1.799 +              <string>http://downloads.phoenixviewer.com/openjpeg-1.5.1.180841553-linux64-180841553.tar.bz2</string>
   1.800              </map>
   1.801              <key>name</key>
   1.802              <string>linux64</string>
   1.803 @@ -3120,9 +3120,9 @@
   1.804              <key>archive</key>
   1.805              <map>
   1.806                <key>hash</key>
   1.807 -              <string>f46a601d60b7dbcfde32afc0cb64453e</string>
   1.808 -              <key>url</key>
   1.809 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-openssl/rev/314227/arch/Linux/installer/openssl-1.0.1h.314227-linux-314227.tar.bz2</string>
   1.810 +              <string>343f6ace63617546704c4aad9b432312</string>
   1.811 +              <key>url</key>
   1.812 +              <string>http://downloads.phoenixviewer.com/openssl-1.0.2l.180871731-linux-180871731.tar.bz2</string>
   1.813              </map>
   1.814              <key>name</key>
   1.815              <string>linux</string>
   1.816 @@ -3132,9 +3132,9 @@
   1.817              <key>archive</key>
   1.818              <map>
   1.819                <key>hash</key>
   1.820 -              <string>d50ccfbf0c1d249392919e2c46ad8d5c</string>
   1.821 -              <key>url</key>
   1.822 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/8339/33495/openssl-1.0.2l.508328-linux64-508328.tar.bz2</string>
   1.823 +              <string>7920fce93d9addf63a420d86f91c5749</string>
   1.824 +              <key>url</key>
   1.825 +              <string>http://downloads.phoenixviewer.com/openssl-1.0.2l.180841936-linux64-180841936.tar.bz2</string>
   1.826              </map>
   1.827              <key>name</key>
   1.828              <string>linux64</string>
   1.829 @@ -3210,9 +3210,9 @@
   1.830              <key>archive</key>
   1.831              <map>
   1.832                <key>hash</key>
   1.833 -              <string>24a119b18e63017ad932ad54df8161bc</string>
   1.834 -              <key>url</key>
   1.835 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-pcre/rev/314136/arch/Linux/installer/pcre-8.35.314136-linux-314136.tar.bz2</string>
   1.836 +              <string>cf1c53b27e5889c7c5963ed06ab23cb2</string>
   1.837 +              <key>url</key>
   1.838 +              <string>http://downloads.phoenixviewer.com/pcre-8.35.180871234-linux-180871234.tar.bz2</string>
   1.839              </map>
   1.840              <key>name</key>
   1.841              <string>linux</string>
   1.842 @@ -3222,9 +3222,9 @@
   1.843              <key>archive</key>
   1.844              <map>
   1.845                <key>hash</key>
   1.846 -              <string>0f058ca2176e7d02d51e54c66a96f336</string>
   1.847 -              <key>url</key>
   1.848 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/908/2010/pcre-8.35.500898-linux64-500898.tar.bz2</string>
   1.849 +              <string>348a6111dede9a4ddfc51049c2ff186f</string>
   1.850 +              <key>url</key>
   1.851 +              <string>http://downloads.phoenixviewer.com/pcre-8.35.180841548-linux64-180841548.tar.bz2</string>
   1.852              </map>
   1.853              <key>name</key>
   1.854              <string>linux64</string>
   1.855 @@ -3288,9 +3288,9 @@
   1.856              <key>archive</key>
   1.857              <map>
   1.858                <key>hash</key>
   1.859 -              <string>a92f2235991871c3d601a73cfef9b2af</string>
   1.860 -              <key>url</key>
   1.861 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/4105/11530/requests-1.0-linux64-504094.tar.bz2</string>
   1.862 +              <string>9fe44ba82ee05363fdfa4c1b9f2ec360</string>
   1.863 +              <key>url</key>
   1.864 +              <string>http://downloads.phoenixviewer.com/requests-2.18.1-linux64-180841555.tar.bz2</string>
   1.865              </map>
   1.866              <key>name</key>
   1.867              <string>linux64</string>
   1.868 @@ -3466,9 +3466,9 @@
   1.869              <key>archive</key>
   1.870              <map>
   1.871                <key>hash</key>
   1.872 -              <string>dddfc8dea540801f93ba0382cb1e3685</string>
   1.873 -              <key>url</key>
   1.874 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/uriparser_3p-update-uriparser/rev/299435/arch/Linux/installer/uriparser-0.8.0.1-linux-299435.tar.bz2</string>
   1.875 +              <string>6573a190dbdef9b23235beb9b1219bef</string>
   1.876 +              <key>url</key>
   1.877 +              <string>http://downloads.phoenixviewer.com/uriparser-0.8.0.1-linux-180871244.tar.bz2</string>
   1.878              </map>
   1.879              <key>name</key>
   1.880              <string>linux</string>
   1.881 @@ -3478,9 +3478,9 @@
   1.882              <key>archive</key>
   1.883              <map>
   1.884                <key>hash</key>
   1.885 -              <string>e67a27e13e546cbb13fad2665a1896b7</string>
   1.886 -              <key>url</key>
   1.887 -              <string>http://downloads.phoenixviewer.com/uriparser-0.8.0.1-linux-x64-201502251606-r15.tar.bz2</string>
   1.888 +              <string>df570f2b9c0087438604a8ba4dc37a85</string>
   1.889 +              <key>url</key>
   1.890 +              <string>http://downloads.phoenixviewer.com/uriparser-0.8.0.1-linux64-180841550.tar.bz2</string>
   1.891              </map>
   1.892              <key>name</key>
   1.893              <string>linux64</string>
   1.894 @@ -3574,13 +3574,25 @@
   1.895              <key>archive</key>
   1.896              <map>
   1.897                <key>hash</key>
   1.898 -              <string>8c7f32f85850248809ae811ba8e47d81</string>
   1.899 -              <key>url</key>
   1.900 -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/3428/8686/viewer_manager-1.0-linux-503417.tar.bz2</string>
   1.901 +              <string>b7167025f54c044abee21b48476ad4f2</string>
   1.902 +              <key>url</key>
   1.903 +              <string>http://downloads.phoenixviewer.com/viewer_manager-1.0.180871935-linux-180871935.tar.bz2</string>
   1.904              </map>
   1.905              <key>name</key>
   1.906              <string>linux</string>
   1.907            </map>
   1.908 +          <key>linux64</key>
   1.909 +          <map>
   1.910 +            <key>archive</key>
   1.911 +            <map>
   1.912 +              <key>hash</key>
   1.913 +              <string>129b80dd47b53bfa02fc21ab1eb1901c</string>
   1.914 +              <key>url</key>
   1.915 +              <string>http://downloads.phoenixviewer.com/viewer_manager-1.0.180861311-linux64-180861311.tar.bz2</string>
   1.916 +            </map>
   1.917 +            <key>name</key>
   1.918 +            <string>linux64</string>
   1.919 +          </map>
   1.920            <key>windows</key>
   1.921            <map>
   1.922              <key>archive</key>
   1.923 @@ -3720,9 +3732,9 @@
   1.924              <key>archive</key>
   1.925              <map>
   1.926                <key>hash</key>
   1.927 -              <string>b63f828e798287d475991134cdcfbca3</string>
   1.928 -              <key>url</key>
   1.929 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-xmlrpc-epi/rev/314240/arch/Linux/installer/xmlrpc_epi-0.54.1.314240-linux-314240.tar.bz2</string>
   1.930 +              <string>0f318372198fb34b3a59b4aa03c40ac7</string>
   1.931 +              <key>url</key>
   1.932 +              <string>http://downloads.phoenixviewer.com/xmlrpc_epi-0.54.1.180871731-linux-180871731.tar.bz2</string>
   1.933              </map>
   1.934              <key>name</key>
   1.935              <string>linux</string>
   1.936 @@ -3732,9 +3744,9 @@
   1.937              <key>archive</key>
   1.938              <map>
   1.939                <key>hash</key>
   1.940 -              <string>e2e5b6aba70c8fbc09ef7f12e8fb3937</string>
   1.941 -              <key>url</key>
   1.942 -              <string>http://downloads.phoenixviewer.com/xmlrpc_epi-0.54.1.201505150223-r63-linux-x64-201505150223-r63.tar.bz2</string>
   1.943 +              <string>f810193590cae9b35a1c77b6c72bfb01</string>
   1.944 +              <key>url</key>
   1.945 +              <string>http://downloads.phoenixviewer.com/xmlrpc_epi-0.54.1.180841935-linux64-180841935.tar.bz2</string>
   1.946              </map>
   1.947              <key>name</key>
   1.948              <string>linux64</string>
   1.949 @@ -3810,11 +3822,11 @@
   1.950              <key>archive</key>
   1.951              <map>
   1.952                <key>hash</key>
   1.953 -              <string>98a8c775c581ca80bb559e8b4e8eaae7</string>
   1.954 +              <string>ee84398d540324533332a048f77bf08a</string>
   1.955                <key>hash_algorithm</key>
   1.956                <string>md5</string>
   1.957                <key>url</key>
   1.958 -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-zlib/rev/314131/arch/Linux/installer/zlib-1.2.8.314131-linux-314131.tar.bz2</string>
   1.959 +              <string>http://downloads.phoenixviewer.com/zlib-1.2.8.180871259-linux-180871259.tar.bz2</string>
   1.960              </map>
   1.961              <key>name</key>
   1.962              <string>linux</string>
   1.963 @@ -3824,9 +3836,9 @@
   1.964              <key>archive</key>
   1.965              <map>
   1.966                <key>hash</key>
   1.967 -              <string>c165dcf9bd8a27c0382137c33e1a3854</string>
   1.968 -              <key>url</key>
   1.969 -              <string>http://downloads.phoenixviewer.com/zlib-1.2.8.201505150226-r125-linux-x64-201505150226-r125.tar.bz2</string>
   1.970 +              <string>15a645809cb2f14074f22e7848bb42cf</string>
   1.971 +              <key>url</key>
   1.972 +              <string>http://downloads.phoenixviewer.com/zlib-1.2.8.180841547-linux64-180841547.tar.bz2</string>
   1.973              </map>
   1.974              <key>name</key>
   1.975              <string>linux64</string>
   1.976 @@ -3981,7 +3993,6 @@
   1.977                <key>name</key>
   1.978                <string>Doxygen</string>
   1.979              </map>
   1.980 -
   1.981              <key>ReleaseFS</key>
   1.982              <map>
   1.983                <key>configure</key>
   1.984 @@ -4088,7 +4099,6 @@
   1.985                <key>name</key>
   1.986                <string>RelWithDebInfoFS_open</string>
   1.987              </map>
   1.988 -
   1.989            </map>
   1.990            <key>name</key>
   1.991            <string>common</string>
   1.992 @@ -4147,10 +4157,6 @@
   1.993                    <string>Xcode</string>
   1.994                  </array>
   1.995                </map>
   1.996 -              <!--
   1.997 -              <key>default</key>
   1.998 -              <string>True</string>
   1.999 -              -->
  1.1000                <key>name</key>
  1.1001                <string>RelWithDebInfo</string>
  1.1002              </map>
  1.1003 @@ -4233,7 +4239,6 @@
  1.1004                <key>name</key>
  1.1005                <string>ReleaseOS</string>
  1.1006              </map>
  1.1007 -
  1.1008              <key>RelWithDebInfoFS</key>
  1.1009              <map>
  1.1010                <key>build</key>
  1.1011 @@ -4318,7 +4323,6 @@
  1.1012                <key>name</key>
  1.1013                <string>ReleaseFS</string>
  1.1014              </map>
  1.1015 -
  1.1016            </map>
  1.1017            <key>name</key>
  1.1018            <string>darwin64</string>
  1.1019 @@ -4375,10 +4379,6 @@
  1.1020                    <string>Unix Makefiles</string>
  1.1021                  </array>
  1.1022                </map>
  1.1023 -              <!--
  1.1024 -              <key>default</key>
  1.1025 -              <string>True</string>
  1.1026 -              -->
  1.1027                <key>name</key>
  1.1028                <string>RelWithDebInfo</string>
  1.1029              </map>
  1.1030 @@ -4603,10 +4603,6 @@
  1.1031                    <string>${AUTOBUILD_WIN_CMAKE_GEN|NOTWIN}</string>
  1.1032                  </array>
  1.1033                </map>
  1.1034 -              <!--
  1.1035 -              <key>default</key>
  1.1036 -              <string>True</string>
  1.1037 -              -->
  1.1038                <key>name</key>
  1.1039                <string>RelWithDebInfo</string>
  1.1040              </map>
  1.1041 @@ -4719,7 +4715,6 @@
  1.1042                <key>name</key>
  1.1043                <string>ReleaseOS</string>
  1.1044              </map>
  1.1045 -
  1.1046              <key>RelWithDebInfoFS</key>
  1.1047              <map>
  1.1048                <key>build</key>
  1.1049 @@ -4938,8 +4933,6 @@
  1.1050                <key>name</key>
  1.1051                <string>ReleaseFS_open</string>
  1.1052              </map>
  1.1053 -
  1.1054 -
  1.1055            </map>
  1.1056            <key>name</key>
  1.1057            <string>windows</string>
     2.1 --- a/indra/cmake/00-Common.cmake	Wed Mar 21 20:23:52 2018 +0100
     2.2 +++ b/indra/cmake/00-Common.cmake	Sat Apr 07 14:59:44 2018 +0200
     2.3 @@ -157,7 +157,7 @@
     2.4    if ( ${FORTIFY_SOURCE_RES} EQUAL 0 )
     2.5     add_definitions(-D_FORTIFY_SOURCE=2)
     2.6    endif()
     2.7 -  set(CMAKE_CXX_FLAGS "-Wno-deprecated -Wno-unused-but-set-variable -Wno-unused-variable ${CMAKE_CXX_FLAGS}")
     2.8 +  set(CMAKE_CXX_FLAGS "-Wno-deprecated -Wno-unused-but-set-variable -Wno-unused-variable -Wno-placement-new ${CMAKE_CXX_FLAGS}")
     2.9  
    2.10    # gcc 4.3 and above don't like the LL boost and also
    2.11    # cause warnings due to our use of deprecated headers
    2.12 @@ -180,6 +180,10 @@
    2.13    add_definitions(-std=gnu++11)
    2.14    # </FS:ND>
    2.15  
    2.16 +  # <FS:ND> Enable old C++ ABI
    2.17 +  add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
    2.18 +  # </FS:ND>
    2.19 +
    2.20    # force this platform to accept TOS via external browser <FS:ND> No, do not.
    2.21    # add_definitions(-DEXTERNAL_TOS)
    2.22  
    2.23 @@ -198,7 +202,8 @@
    2.24      # this stops us requiring a really recent glibc at runtime
    2.25      add_compile_options(-fno-stack-protector)
    2.26      # linking can be very memory-hungry, especially the final viewer link
    2.27 -    set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory")
    2.28 +    #set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory")
    2.29 +	set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory -Wl,--build-id -Wl,-rpath,'$ORIGIN:$ORIGIN/../lib' -Wl,--exclude-libs,ALL")
    2.30    endif (NOT USESYSTEMLIBS)
    2.31  
    2.32    set(CMAKE_CXX_FLAGS_DEBUG "-fno-inline ${CMAKE_CXX_FLAGS_DEBUG}")
     3.1 --- a/indra/cmake/CEFPlugin.cmake	Wed Mar 21 20:23:52 2018 +0100
     3.2 +++ b/indra/cmake/CEFPlugin.cmake	Sat Apr 07 14:59:44 2018 +0200
     3.3 @@ -38,8 +38,8 @@
     3.4  
     3.5  elseif (LINUX)
     3.6      set(CEF_PLUGIN_LIBRARIES
     3.7 +        dullahan
     3.8          cef
     3.9          cef_dll_wrapper.a
    3.10 -        dullahan
    3.11      )
    3.12  endif (WINDOWS)
     4.1 --- a/indra/cmake/CURL.cmake	Wed Mar 21 20:23:52 2018 +0100
     4.2 +++ b/indra/cmake/CURL.cmake	Sat Apr 07 14:59:44 2018 +0200
     4.3 @@ -1,5 +1,6 @@
     4.4  # -*- cmake -*-
     4.5  include(Prebuilt)
     4.6 +include(NGHTTP2)
     4.7  
     4.8  set(CURL_FIND_QUIETLY ON)
     4.9  set(CURL_FIND_REQUIRED ON)
    4.10 @@ -16,7 +17,7 @@
    4.11      set(CURL_LIBRARIES libcurl.a)
    4.12        if (LINUX)
    4.13            list(APPEND CURL_LIBRARIES
    4.14 -               pthread
    4.15 +               pthread ${NGHTTP2_LIBRARIES}
    4.16                )
    4.17        endif (LINUX)
    4.18    endif (WINDOWS)
     5.1 --- a/indra/cmake/FMODSTUDIO.cmake	Wed Mar 21 20:23:52 2018 +0100
     5.2 +++ b/indra/cmake/FMODSTUDIO.cmake	Sat Apr 07 14:59:44 2018 +0200
     5.3 @@ -41,15 +41,9 @@
     5.4              debug fmodL
     5.5              optimized fmod)
     5.6        elseif (LINUX)
     5.7 -        if (ADDRESS_SIZE EQUAL 32)
     5.8 -          set(FMODSTUDIO_LIBRARY 
     5.9 +        set(FMODSTUDIO_LIBRARY 
    5.10              debug fmodL
    5.11              optimized fmod)
    5.12 -         elseif (ADDRESS_SIZE EQUAL 64)
    5.13 -          set(FMODSTUDIO_LIBRARY 
    5.14 -            debug fmodL64
    5.15 -            optimized fmod64)
    5.16 -         endif(ADDRESS_SIZE EQUAL 32)
    5.17        endif (WINDOWS)
    5.18        set(FMODSTUDIO_LIBRARIES ${FMODSTUDIO_LIBRARY})
    5.19        set(FMODSTUDIO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/fmodstudio)
     6.1 --- a/indra/cmake/JsonCpp.cmake	Wed Mar 21 20:23:52 2018 +0100
     6.2 +++ b/indra/cmake/JsonCpp.cmake	Sat Apr 07 14:59:44 2018 +0200
     6.3 @@ -16,11 +16,7 @@
     6.4    elseif (DARWIN)
     6.5      set(JSONCPP_LIBRARIES libjson_darwin_libmt.a)
     6.6    elseif (LINUX)
     6.7 -    if ( ADDRESS_SIZE EQUAL 64 )
     6.8 -      set(JSONCPP_LIBRARIES libjson_linux-gcc-4.6_libmt.a)
     6.9 -    else ( )
    6.10 -      set(JSONCPP_LIBRARIES libjson_linux-gcc-4.1.3_libmt.a)
    6.11 -    endif ( )
    6.12 +    set(JSONCPP_LIBRARIES libjson_linux-gcc-4.8_libmt.a)
    6.13    endif (WINDOWS)
    6.14    set(JSONCPP_INCLUDE_DIR "${LIBS_PREBUILT_DIR}/include/")
    6.15  endif (USESYSTEMLIBS)
     7.1 --- a/indra/cmake/ViewerManager.cmake	Wed Mar 21 20:23:52 2018 +0100
     7.2 +++ b/indra/cmake/ViewerManager.cmake	Sat Apr 07 14:59:44 2018 +0200
     7.3 @@ -1,3 +1,2 @@
     7.4  include (Prebuilt)
     7.5  use_prebuilt_binary(viewer-manager)
     7.6 -
     8.1 --- a/indra/llimage/llimageworker.cpp	Wed Mar 21 20:23:52 2018 +0100
     8.2 +++ b/indra/llimage/llimageworker.cpp	Sat Apr 07 14:59:44 2018 +0200
     8.3 @@ -131,7 +131,7 @@
     8.4  			{
     8.5  				return true; // done (failed)
     8.6  			}
     8.7 -			if (!(mFormattedImage->getWidth() * mFormattedImage->getHeight() * mFormattedImage->getComponents()))
     8.8 +			if (0 == (mFormattedImage->getWidth() * mFormattedImage->getHeight() * mFormattedImage->getComponents()))
     8.9  			{
    8.10  				return true; // done (failed)
    8.11  			}
     9.1 --- a/indra/llprimitive/lldaeloader.cpp	Wed Mar 21 20:23:52 2018 +0100
     9.2 +++ b/indra/llprimitive/lldaeloader.cpp	Sat Apr 07 14:59:44 2018 +0200
     9.3 @@ -60,7 +60,17 @@
     9.4  #include "llsdserialize.h"
     9.5  #include "lljoint.h"
     9.6  
     9.7 +#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000
     9.8 +#pragma GCC diagnostic push
     9.9 +#pragma GCC diagnostic ignored "-Wmisleading-indentation"
    9.10 +#endif
    9.11 +
    9.12  #include "glh/glh_linear.h"
    9.13 +
    9.14 +#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000
    9.15 +#pragma GCC diagnostic push
    9.16 +#endif
    9.17 +
    9.18  #include "llmatrix4a.h"
    9.19  
    9.20  
    10.1 --- a/indra/llprimitive/llmodelloader.cpp	Wed Mar 21 20:23:52 2018 +0100
    10.2 +++ b/indra/llprimitive/llmodelloader.cpp	Sat Apr 07 14:59:44 2018 +0200
    10.3 @@ -29,7 +29,17 @@
    10.4  #include "lljoint.h"
    10.5  #include "llcallbacklist.h"
    10.6  
    10.7 +#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000
    10.8 +#pragma GCC diagnostic push
    10.9 +#pragma GCC diagnostic ignored "-Wmisleading-indentation"
   10.10 +#endif
   10.11 +
   10.12  #include "glh/glh_linear.h"
   10.13 +
   10.14 +#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000
   10.15 +#pragma GCC diagnostic push
   10.16 +#endif
   10.17 +
   10.18  #include "llmatrix4a.h"
   10.19  #include <boost/bind.hpp>
   10.20  
    11.1 --- a/indra/llprimitive/llprimtexturelist.cpp	Wed Mar 21 20:23:52 2018 +0100
    11.2 +++ b/indra/llprimitive/llprimtexturelist.cpp	Sat Apr 07 14:59:44 2018 +0200
    11.3 @@ -137,14 +137,22 @@
    11.4  		// we're changing an existing entry
    11.5  	llassert(mEntryList[index]);
    11.6  	delete (mEntryList[index]);
    11.7 -	if  (&te)
    11.8 -	{
    11.9 -		mEntryList[index] = te.newCopy();
   11.10 -	}
   11.11 -	else
   11.12 -	{
   11.13 -		mEntryList[index] = LLPrimTextureList::newTextureEntry();
   11.14 -	}
   11.15 +
   11.16 +	//<FS:ND> The compiler will assume te being valid as it is passed by reference and thus else will never be executed.
   11.17 +	// If someone really passed *nullptr in here, this will be undefined behaviour
   11.18 +	
   11.19 +	// if  (&te)
   11.20 +	// {
   11.21 +	// 	mEntryList[index] = te.newCopy();
   11.22 +	// }
   11.23 +	// else
   11.24 +	// {
   11.25 +	// 	mEntryList[index] = LLPrimTextureList::newTextureEntry();
   11.26 +	// }
   11.27 +
   11.28 +	mEntryList[index] = te.newCopy();
   11.29 +	// </FS:ND>
   11.30 +	
   11.31  	return TEM_CHANGE_TEXTURE;
   11.32  }
   11.33  
    12.1 --- a/indra/llrender/llgl.h	Wed Mar 21 20:23:52 2018 +0100
    12.2 +++ b/indra/llrender/llgl.h	Sat Apr 07 14:59:44 2018 +0200
    12.3 @@ -43,8 +43,18 @@
    12.4  #include "llinstancetracker.h"
    12.5  
    12.6  #include "llglheaders.h"
    12.7 +
    12.8 +#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000
    12.9 +#pragma GCC diagnostic push
   12.10 +#pragma GCC diagnostic ignored "-Wmisleading-indentation"
   12.11 +#endif
   12.12 +
   12.13  #include "glh/glh_linear.h"
   12.14  
   12.15 +#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000
   12.16 +#pragma GCC diagnostic push
   12.17 +#endif
   12.18 +
   12.19  extern BOOL gDebugGL;
   12.20  extern BOOL gDebugSession;
   12.21  extern llofstream gFailLog;
    13.1 --- a/indra/llrender/llrender.h	Wed Mar 21 20:23:52 2018 +0100
    13.2 +++ b/indra/llrender/llrender.h	Sat Apr 07 14:59:44 2018 +0200
    13.3 @@ -42,8 +42,18 @@
    13.4  #include "llpointer.h"
    13.5  #include "llglheaders.h"
    13.6  #include "llmatrix4a.h"
    13.7 +
    13.8 +#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000
    13.9 +#pragma GCC diagnostic push
   13.10 +#pragma GCC diagnostic ignored "-Wmisleading-indentation"
   13.11 +#endif
   13.12 +
   13.13  #include "glh/glh_linear.h"
   13.14  
   13.15 +#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000
   13.16 +#pragma GCC diagnostic push
   13.17 +#endif
   13.18 +
   13.19  class LLVertexBuffer;
   13.20  class LLCubeMap;
   13.21  class LLImageGL;
    14.1 --- a/indra/llwindow/llwindowsdl.cpp	Wed Mar 21 20:23:52 2018 +0100
    14.2 +++ b/indra/llwindow/llwindowsdl.cpp	Sat Apr 07 14:59:44 2018 +0200
    14.3 @@ -1471,10 +1471,10 @@
    14.4      if (!to)
    14.5          return FALSE;
    14.6  
    14.7 -	to->mX = from.mX;
    14.8 -	to->mY = mWindow->h - from.mY - 1;
    14.9 -
   14.10 -	return TRUE;
   14.11 +    to->mX = from.mX;
   14.12 +    to->mY = mWindow->h - from.mY - 1;
   14.13 +
   14.14 +    return TRUE;
   14.15  }
   14.16  
   14.17  BOOL LLWindowSDL::convertCoords(LLCoordWindow from, LLCoordGL* to)
   14.18 @@ -1482,31 +1482,31 @@
   14.19      if (!to)
   14.20          return FALSE;
   14.21  
   14.22 -	to->mX = from.mX;
   14.23 -	to->mY = mWindow->h - from.mY - 1;
   14.24 -
   14.25 -	return TRUE;
   14.26 +    to->mX = from.mX;
   14.27 +    to->mY = mWindow->h - from.mY - 1;
   14.28 +
   14.29 +    return TRUE;
   14.30  }
   14.31  
   14.32  BOOL LLWindowSDL::convertCoords(LLCoordScreen from, LLCoordWindow* to)
   14.33  {
   14.34      if (!to)
   14.35 -		return FALSE;
   14.36 -
   14.37 -	// In the fullscreen case, window and screen coordinates are the same.
   14.38 -	to->mX = from.mX;
   14.39 -	to->mY = from.mY;
   14.40 +        return FALSE;
   14.41 +
   14.42 +    // In the fullscreen case, window and screen coordinates are the same.
   14.43 +    to->mX = from.mX;
   14.44 +    to->mY = from.mY;
   14.45      return (TRUE);
   14.46  }
   14.47  
   14.48  BOOL LLWindowSDL::convertCoords(LLCoordWindow from, LLCoordScreen *to)
   14.49  {
   14.50      if (!to)
   14.51 -		return FALSE;
   14.52 -
   14.53 -	// In the fullscreen case, window and screen coordinates are the same.
   14.54 -	to->mX = from.mX;
   14.55 -	to->mY = from.mY;
   14.56 +        return FALSE;
   14.57 +
   14.58 +    // In the fullscreen case, window and screen coordinates are the same.
   14.59 +    to->mX = from.mX;
   14.60 +    to->mY = from.mY;
   14.61      return (TRUE);
   14.62  }
   14.63  
    15.1 --- a/indra/media_plugins/cef/CMakeLists.txt	Wed Mar 21 20:23:52 2018 +0100
    15.2 +++ b/indra/media_plugins/cef/CMakeLists.txt	Sat Apr 07 14:59:44 2018 +0200
    15.3 @@ -62,6 +62,7 @@
    15.4  #  message(FATAL_ERROR "CEF plugin has been enabled for a Linux compile.\n"
    15.5  #    "  Please create a volume_catcher implementation for this platform.")
    15.6    list(APPEND media_plugin_cef_SOURCE_FILES dummy_volume_catcher.cpp)
    15.7 +  set(CMAKE_SHARED_LINKER_FLAGS  "-Wl,--build-id -Wl,-rpath,'$ORIGIN:$ORIGIN/../../lib'")
    15.8  elseif (DARWIN)
    15.9    list(APPEND media_plugin_cef_SOURCE_FILES mac_volume_catcher_null.cpp)
   15.10    find_library(CORESERVICES_LIBRARY CoreServices)
    16.1 --- a/indra/media_plugins/libvlc/CMakeLists.txt	Wed Mar 21 20:23:52 2018 +0100
    16.2 +++ b/indra/media_plugins/libvlc/CMakeLists.txt	Sat Apr 07 14:59:44 2018 +0200
    16.3 @@ -94,3 +94,7 @@
    16.4    )
    16.5  
    16.6  endif (DARWIN)
    16.7 +
    16.8 +if( LINUX )
    16.9 +  set(CMAKE_SHARED_LINKER_FLAGS  "-Wl,--build-id -Wl,-rpath,'$ORIGIN:$ORIGIN/../../lib'")
   16.10 +endif()
    17.1 --- a/indra/newview/CMakeLists.txt	Wed Mar 21 20:23:52 2018 +0100
    17.2 +++ b/indra/newview/CMakeLists.txt	Sat Apr 07 14:59:44 2018 +0200
    17.3 @@ -2401,7 +2401,7 @@
    17.4      linux-crash-logger
    17.5      SLPlugin
    17.6      media_plugin_cef
    17.7 -    media_plugin_gstreamer010
    17.8 +    #media_plugin_gstreamer010
    17.9      media_plugin_libvlc
   17.10      llcommon
   17.11      )
   17.12 @@ -2411,7 +2411,7 @@
   17.13      linux-crash-logger
   17.14      SLPlugin
   17.15      media_plugin_cef
   17.16 -    media_plugin_gstreamer010
   17.17 +    #media_plugin_gstreamer010
   17.18      llcommon
   17.19      )
   17.20  endif (NOT ENABLE_MEDIA_PLUGINS)
    18.1 --- a/indra/newview/app_settings/settings.xml	Wed Mar 21 20:23:52 2018 +0100
    18.2 +++ b/indra/newview/app_settings/settings.xml	Sat Apr 07 14:59:44 2018 +0200
    18.3 @@ -13828,6 +13828,19 @@
    18.4        <key>Value</key>
    18.5        <integer>1</integer>
    18.6      </map>
    18.7 +    <key>FSInternalShowNavbarFavoritesPanel</key>
    18.8 +    <map>
    18.9 +      <key>Comment</key>
   18.10 +      <string>Internal control to show/hide navigation bar favorites panel</string>
   18.11 +      <key>HideFromEditor</key>
   18.12 +      <integer>1</integer>
   18.13 +      <key>Persist</key>
   18.14 +      <integer>0</integer>
   18.15 +      <key>Type</key>
   18.16 +      <string>Boolean</string>
   18.17 +      <key>Value</key>
   18.18 +      <integer>1</integer>
   18.19 +    </map>
   18.20      <key>ShowNavbarNavigationPanel</key>
   18.21      <map>
   18.22        <key>Comment</key>
   18.23 @@ -13839,6 +13852,19 @@
   18.24        <key>Value</key>
   18.25        <integer>0</integer>
   18.26      </map>
   18.27 +    <key>FSInternalShowNavbarNavigationPanel</key>
   18.28 +    <map>
   18.29 +      <key>Comment</key>
   18.30 +      <string>Internal control to show/hide navigation bar navigation panel</string>
   18.31 +      <key>HideFromEditor</key>
   18.32 +      <integer>1</integer>
   18.33 +      <key>Persist</key>
   18.34 +      <integer>0</integer>
   18.35 +      <key>Type</key>
   18.36 +      <string>Boolean</string>
   18.37 +      <key>Value</key>
   18.38 +      <integer>0</integer>
   18.39 +    </map>
   18.40      <key>ShowMiniLocationPanel</key>
   18.41      <map>
   18.42        <key>Comment</key>
   18.43 @@ -24576,6 +24602,28 @@
   18.44        <key>Value</key>
   18.45        <integer>1</integer>
   18.46      </map>
   18.47 +    <key>FSUseReadOfflineMsgsCap</key>
   18.48 +    <map>
   18.49 +      <key>Comment</key>
   18.50 +      <string>If enabled, use the ReadOfflineMsgsCap to request offline messages at login</string>
   18.51 +      <key>Persist</key>
   18.52 +      <integer>1</integer>
   18.53 +      <key>Type</key>
   18.54 +      <string>Boolean</string>
   18.55 +      <key>Value</key>
   18.56 +      <integer>0</integer>
   18.57 +    </map>
   18.58 +    <key>FSExperimentalRegionCrossingMovementFix</key>
   18.59 +    <map>
   18.60 +      <key>Comment</key>
   18.61 +      <string>If enabled, use the experimental fix for region crossing movements being bogus due to false predictions by the viewer.</string>
   18.62 +      <key>Persist</key>
   18.63 +      <integer>1</integer>
   18.64 +      <key>Type</key>
   18.65 +      <string>Boolean</string>
   18.66 +      <key>Value</key>
   18.67 +      <integer>1</integer>
   18.68 +    </map>
   18.69    </map>
   18.70  </llsd>
   18.71  
    19.1 --- a/indra/newview/chatbar_as_cmdline.cpp	Wed Mar 21 20:23:52 2018 +0100
    19.2 +++ b/indra/newview/chatbar_as_cmdline.cpp	Sat Apr 07 14:59:44 2018 +0200
    19.3 @@ -1708,7 +1708,7 @@
    19.4  void cmdline_tp2name(const std::string& target)
    19.5  {
    19.6  	LLUUID avkey = cmdline_partial_name2key(target);
    19.7 -	if (avkey.notNull())
    19.8 +	if (avkey.notNull() && avkey != gAgentID)
    19.9  	{
   19.10  		LLAvatarActions::teleportTo(avkey);
   19.11  	}
    20.1 --- a/indra/newview/daeexport.cpp	Wed Mar 21 20:23:52 2018 +0100
    20.2 +++ b/indra/newview/daeexport.cpp	Sat Apr 07 14:59:44 2018 +0200
    20.3 @@ -426,7 +426,7 @@
    20.4  		else
    20.5  		{
    20.6  			// For other formats we need to decode first
    20.7 -			if (mFormattedImage->updateData() && (mFormattedImage->getWidth() * mFormattedImage->getHeight() * mFormattedImage->getComponents()))
    20.8 +			if (mFormattedImage->updateData() && ( (mFormattedImage->getWidth() * mFormattedImage->getHeight() * mFormattedImage->getComponents()) != 0 ) )
    20.9  			{
   20.10  				LLPointer<LLImageRaw> raw = new LLImageRaw;
   20.11  				raw->resize(mFormattedImage->getWidth(), mFormattedImage->getHeight(),	mFormattedImage->getComponents());
    21.1 --- a/indra/newview/fs_viewer_manifest.py	Wed Mar 21 20:23:52 2018 +0100
    21.2 +++ b/indra/newview/fs_viewer_manifest.py	Sat Apr 07 14:59:44 2018 +0200
    21.3 @@ -103,29 +103,33 @@
    21.4  
    21.5          self.run_command_shell( "cd %s && objcopy --add-gnu-debuglink=%s %s" % (debugDir, debugName, fileBin) )
    21.6          
    21.7 -        if( os.path.exists( "%s/firestorm-symbols-linux.tar.bz2" % self.args['configuration'].lower()) ):
    21.8 -            symName = "%s/Phoenix_%s_%s_%s_symbols-linux.tar.bz2" % ( self.args['configuration'].lower(), self.fs_channel_legacy_oneword(),
    21.9 -                                                                      '-'.join( self.args['version'] ), self.args['viewer_flavor'] )
   21.10 +        if( os.path.exists( "%s/firestorm-symbols-linux-%d.tar.bz2" % (self.args['configuration'].lower(), self.address_size)) ):
   21.11 +            symName = "%s/Phoenix_%s_%s_%s_symbols-linux-%d.tar.bz2" % ( self.args['configuration'].lower(), self.fs_channel_legacy_oneword(),
   21.12 +                                                                      '-'.join( self.args['version'] ), self.args['viewer_flavor'], self.address_size )
   21.13              print( "Saving symbols %s" % symName )
   21.14 -            os.rename("%s/firestorm-symbols-linux.tar.bz2" % self.args['configuration'].lower(), symName )
   21.15 +            os.rename("%s/firestorm-symbols-linux-%d.tar.bz2" % (self.args['configuration'].lower(), self.address_size), symName )
   21.16  
   21.17      def fs_linux_tar_excludes(self):
   21.18 -        return "--exclude core --exclude .debug/* --exclude .debug"
   21.19 +        installer_name_components = ['Phoenix',self.app_name(),self.args.get('arch'),'.'.join(self.args['version'])]
   21.20 +        installer_name = "_".join(installer_name_components)
   21.21 +        return "--exclude=%s/bin/.debug" % installer_name
   21.22  
   21.23      def fs_save_windows_symbols(self, substitution_strings):
   21.24          #AO: Try to package up symbols
   21.25          # New Method, for reading cross platform stack traces on a linux/mac host
   21.26 -        if (os.path.exists("%s/firestorm-symbols-windows.tar.bz2" % self.args['configuration'].lower())):
   21.27 +        if (os.path.exists("%s/firestorm-symbols-windows-%d.tar.bz2" % (self.args['configuration'].lower(),
   21.28 +                                                                        self.address_size))):
   21.29              # Rename to add version numbers
   21.30 -            sName = "%s/Phoenix_%s_%s_%s_symbols-windows.tar.bz2" % (self.args['configuration'].lower(),
   21.31 +            sName = "%s/Phoenix_%s_%s_%s_symbols-windows-%d.tar.bz2" % (self.args['configuration'].lower(),
   21.32                                                                       self.fs_channel_legacy_oneword(),
   21.33                                                                       substitution_strings['version_dashes'],
   21.34 -                                                                     self.args['viewer_flavor'])
   21.35 +                                                                     self.args['viewer_flavor'],
   21.36 +                                                                     self.address_size)
   21.37  
   21.38              if os.path.exists( sName ):
   21.39                  os.unlink( sName )
   21.40  
   21.41 -            os.rename("%s/firestorm-symbols-windows.tar.bz2" % self.args['configuration'].lower(), sName )
   21.42 +            os.rename("%s/firestorm-symbols-windows-%d.tar.bz2" % (self.args['configuration'].lower(), self.address_size), sName )
   21.43          
   21.44          pdbName = "firestorm-bin.pdb"
   21.45          try:
   21.46 @@ -141,10 +145,11 @@
   21.47          # Store windows symbols we want to keep for debugging in a tar file, this will be later compressed with xz (lzma)
   21.48          # Using tat+xz gives far superior compression than zip (~half the size of the zip archive).
   21.49          # Python3 natively supports tar+xz via mode 'w:xz'. But we're stuck with Python2 for now.
   21.50 -        symbolTar = tarfile.TarFile("%s/Phoenix_%s_%s_%s_pdbsymbols-windows.tar" % (self.args['configuration'].lower(),
   21.51 +        symbolTar = tarfile.TarFile("%s/Phoenix_%s_%s_%s_pdbsymbols-windows-%d.tar" % (self.args['configuration'].lower(),
   21.52                                                                                      self.fs_channel_legacy_oneword(),
   21.53                                                                                      substitution_strings['version_dashes'],
   21.54 -                                                                                    self.args['viewer_flavor']),
   21.55 +                                                                                    self.args['viewer_flavor'],
   21.56 +                                                                                    self.address_size),
   21.57                                                                                      'w')
   21.58          symbolTar.add( "%s/Firestorm-bin.exe" % self.args['configuration'].lower(), "firestorm-bin.exe" )
   21.59          symbolTar.add( "%s/%s" % (self.args['configuration'].lower(),pdbName), pdbName )
    22.1 --- a/indra/newview/fsradar.cpp	Wed Mar 21 20:23:52 2018 +0100
    22.2 +++ b/indra/newview/fsradar.cpp	Sat Apr 07 14:59:44 2018 +0200
    22.3 @@ -864,33 +864,35 @@
    22.4  		}
    22.5  		else
    22.6  		{
    22.7 -			// <FS:TS> FIRE-20862: Teleport the configured offset
    22.8 -			//	   toward the center of the region from the
    22.9 +			// <FS:TS> FIRE-20862: Teleport the configured offset toward the center of the region from the
   22.10  			//         avatar's reported position
   22.11  			LLViewerRegion* avreg = world->getRegionFromPosGlobal(avpos);
   22.12 -		        LLVector3d region_center = avreg->getCenterGlobal();
   22.13 -		        LLVector3d offset = avpos - region_center;
   22.14 -		        LLVector3d destination;
   22.15 -	        	F32 lateral_distance= gSavedSettings.getF32("FSTeleportToOffsetLateral");
   22.16 -	        	F32 vertical_distance= gSavedSettings.getF32("FSTeleportToOffsetVertical");
   22.17 -		        if (offset.normalize() != 0.f) // there's an actual offset
   22.18 -		        {
   22.19 -		        	if (lateral_distance > 0.0f)
   22.20 -		        	{
   22.21 -			        	offset *= lateral_distance;
   22.22 -			        	destination = avpos - offset;
   22.23 +			if (avreg)
   22.24 +			{
   22.25 +				LLVector3d region_center = avreg->getCenterGlobal();
   22.26 +				LLVector3d offset = avpos - region_center;
   22.27 +				LLVector3d destination;
   22.28 +				F32 lateral_distance = gSavedSettings.getF32("FSTeleportToOffsetLateral");
   22.29 +				F32 vertical_distance = gSavedSettings.getF32("FSTeleportToOffsetVertical");
   22.30 +				if (offset.normalize() != 0.f) // there's an actual offset
   22.31 +				{
   22.32 +					if (lateral_distance > 0.0f)
   22.33 +					{
   22.34 +						offset *= lateral_distance;
   22.35 +						destination = avpos - offset;
   22.36 +					}
   22.37 +					else
   22.38 +					{
   22.39 +						destination = avpos;
   22.40 +					}
   22.41  				}
   22.42 -				else
   22.43 +				else // the target is exactly at the center, so the offset is 0
   22.44  				{
   22.45 -					destination = avpos;
   22.46 +					destination = region_center + LLVector3d(0.f, lateral_distance, 0.f);
   22.47  				}
   22.48 +				destination.mdV[VZ] = avpos.mdV[VZ] + vertical_distance;
   22.49 +				gAgent.teleportViaLocation(destination);
   22.50  			}
   22.51 -			else // the target is exactly at the center, so the offset is 0
   22.52 -			{
   22.53 -				destination = region_center + LLVector3d(0.f, lateral_distance, 0.f);
   22.54 -			}
   22.55 -			destination.mdV[VZ] = avpos.mdV[VZ] + vertical_distance;
   22.56 -			gAgent.teleportViaLocation(destination);
   22.57  		}
   22.58  	}
   22.59  	else
    23.1 --- a/indra/newview/llappviewer.cpp	Wed Mar 21 20:23:52 2018 +0100
    23.2 +++ b/indra/newview/llappviewer.cpp	Sat Apr 07 14:59:44 2018 +0200
    23.3 @@ -323,7 +323,7 @@
    23.4  #   define LL_PLATFORM_KEY "mac"
    23.5  #elif LL_LINUX
    23.6  #   define LL_PLATFORM_KEY "lnx"
    23.7 -else
    23.8 +#else
    23.9  #   error "Unknown Platform"
   23.10  #endif
   23.11  const char* gPlatform = LL_PLATFORM_KEY;
   23.12 @@ -1144,10 +1144,11 @@
   23.13  
   23.14  	if (!initCache())
   23.15  	{
   23.16 +		LL_WARNS("InitInfo") << "Failed to init cache" << LL_ENDL;
   23.17  		std::ostringstream msg;
   23.18  		msg << LLTrans::getString("MBUnableToAccessFile");
   23.19  		OSMessageBox(msg.str(),LLStringUtil::null,OSMB_OK);
   23.20 -		return 1;
   23.21 +		return 0;
   23.22  	}
   23.23  	LL_INFOS("InitInfo") << "Cache initialization is done." << LL_ENDL ;
   23.24  
   23.25 @@ -1651,7 +1652,8 @@
   23.26  			// Scan keyboard for movement keys.  Command keys and typing
   23.27  			// are handled by windows callbacks.  Don't do this until we're
   23.28  			// done initializing.  JC
   23.29 -			if ((gHeadlessClient || gViewerWindow->getWindow()->getVisible())
   23.30 +			if (gViewerWindow
   23.31 +				&& (gHeadlessClient || gViewerWindow->getWindow()->getVisible())
   23.32  				&& gViewerWindow->getActive()
   23.33  				&& !gViewerWindow->getWindow()->getMinimized()
   23.34  				&& LLStartUp::getStartupState() == STATE_STARTED
   23.35 @@ -1690,7 +1692,7 @@
   23.36  
   23.37  			// Render scene.
   23.38  			// *TODO: Should we run display() even during gHeadlessClient?  DK 2011-02-18
   23.39 -			if (!LLApp::isExiting() && !gHeadlessClient)
   23.40 +			if (!LLApp::isExiting() && !gHeadlessClient && gViewerWindow)
   23.41  			{
   23.42  				pingMainloopTimeout("Main:Display");
   23.43  				gGLActive = TRUE;
    24.1 --- a/indra/newview/llface.cpp	Wed Mar 21 20:23:52 2018 +0100
    24.2 +++ b/indra/newview/llface.cpp	Sat Apr 07 14:59:44 2018 +0200
    24.3 @@ -1033,10 +1033,15 @@
    24.4  	const LLVolumeFace& vf = getViewerObject()->getVolume()->getVolumeFace(mTEOffset);
    24.5  	const LLVector4a& normal4a = vf.mNormals[0];
    24.6  	const LLVector4a& tangent = vf.mTangents[0];
    24.7 -	if (!&tangent)
    24.8 -	{
    24.9 -		return;
   24.10 -	}
   24.11 +
   24.12 +	// <FS:ND> tangent is a reference, compiler will always assume it's valid and skip the check due to tangent==nullptr being undefined behaviour.
   24.13 +
   24.14 +	// if (!&tangent)
   24.15 +	// {
   24.16 +	// 	return;
   24.17 +	// }
   24.18 +
   24.19 +	// </FS:ND>
   24.20  
   24.21  	LLVector4a binormal4a;
   24.22  	binormal4a.setCross3(normal4a, tangent);
    25.1 --- a/indra/newview/llfilepicker.cpp	Wed Mar 21 20:23:52 2018 +0100
    25.2 +++ b/indra/newview/llfilepicker.cpp	Sat Apr 07 14:59:44 2018 +0200
    25.3 @@ -1252,13 +1252,13 @@
    25.4  static std::string add_xml_filter_to_gtkchooser(GtkWindow *picker)
    25.5  {
    25.6  	return add_simple_pattern_filter_to_gtkchooser(picker,  "*.xml",
    25.7 -												   LLTrans::getString("xml_files") + " (*.xml)");
    25.8 +												   LLTrans::getString("xml_file") + " (*.xml)");
    25.9  }
   25.10  
   25.11  static std::string add_collada_filter_to_gtkchooser(GtkWindow *picker)
   25.12  {
   25.13  	return add_simple_pattern_filter_to_gtkchooser(picker,  "*.dae",
   25.14 -						       LLTrans::getString("scene_files") + " (*.dae)");
   25.15 +						       LLTrans::getString("collada_files") + " (*.dae)");
   25.16  }
   25.17  
   25.18  static std::string add_imageload_filter_to_gtkchooser(GtkWindow *picker)
    26.1 --- a/indra/newview/llimprocessing.cpp	Wed Mar 21 20:23:52 2018 +0100
    26.2 +++ b/indra/newview/llimprocessing.cpp	Sat Apr 07 14:59:44 2018 +0200
    26.3 @@ -45,6 +45,7 @@
    26.4  #include "llnotificationmanager.h"
    26.5  #include "llpanelgroup.h"
    26.6  #include "llregionhandle.h"
    26.7 +#include "llsdserialize.h"
    26.8  #include "llslurl.h"
    26.9  #include "llstring.h"
   26.10  #include "lltoastnotifypanel.h"
   26.11 @@ -231,12 +232,12 @@
   26.12      // Strip any SLURL from the message display. (DEV-2754)
   26.13      std::string msg = info->mDesc;
   26.14      int indx = msg.find(" ( http://slurl.com/secondlife/");
   26.15 -    if(indx == std::string::npos)
   26.16 +    if (indx == std::string::npos)
   26.17      {
   26.18          // try to find new slurl host
   26.19          indx = msg.find(" ( http://maps.secondlife.com/secondlife/");
   26.20      }
   26.21 -    if(indx >= 0)
   26.22 +    if (indx >= 0)
   26.23      {
   26.24          LLStringUtil::truncate(msg, indx);
   26.25      }
   26.26 @@ -622,7 +623,8 @@
   26.27      LLVector3 position,
   26.28      U8 *binary_bucket,
   26.29      S32 binary_bucket_size,
   26.30 -    LLHost &sender)
   26.31 +    LLHost &sender,
   26.32 +    LLUUID aux_id)
   26.33  {
   26.34      LLChat chat;
   26.35      std::string buffer;
   26.36 @@ -682,7 +684,7 @@
   26.37      chat.mFromID = from_id;
   26.38      chat.mFromName = name;
   26.39      chat.mSourceType = (from_id.isNull() || (name == std::string(SYSTEM_FROM))) ? CHAT_SOURCE_SYSTEM : CHAT_SOURCE_AGENT;
   26.40 -    
   26.41 +
   26.42      if (chat.mSourceType == CHAT_SOURCE_SYSTEM)
   26.43      { // Translate server message if required (MAINT-6109)
   26.44          translate_if_needed(message);
   26.45 @@ -720,262 +722,122 @@
   26.46      LLSD payload;
   26.47      LLNotification::Params params;
   26.48  
   26.49 -    switch(dialog)
   26.50 -    { 
   26.51 -    case IM_CONSOLE_AND_CHAT_HISTORY:
   26.52 -        args["MESSAGE"] = message;
   26.53 -        payload["from_id"] = from_id;
   26.54 +    switch (dialog)
   26.55 +    {
   26.56 +        case IM_CONSOLE_AND_CHAT_HISTORY:
   26.57 +            args["MESSAGE"] = message;
   26.58 +            payload["from_id"] = from_id;
   26.59  
   26.60 -        params.name = "IMSystemMessageTip";
   26.61 -        params.substitutions = args;
   26.62 -        params.payload = payload;
   26.63 -        LLPostponedNotification::add<LLPostponedIMSystemTipNotification>(params, from_id, false);
   26.64 -        break;
   26.65 +            params.name = "IMSystemMessageTip";
   26.66 +            params.substitutions = args;
   26.67 +            params.payload = payload;
   26.68 +            LLPostponedNotification::add<LLPostponedIMSystemTipNotification>(params, from_id, false);
   26.69 +            break;
   26.70  
   26.71 -    case IM_NOTHING_SPECIAL:	// p2p IM
   26.72 -        // Don't show dialog, just do IM
   26.73 -        if (!gAgent.isGodlike()
   26.74 -                && gAgent.getRegion()->isPrelude() 
   26.75 -                && to_id.isNull() )
   26.76 -        {
   26.77 -            // do nothing -- don't distract newbies in
   26.78 -            // Prelude with global IMs
   26.79 -        }
   26.80 +        case IM_NOTHING_SPECIAL:	// p2p IM
   26.81 +            // Don't show dialog, just do IM
   26.82 +            if (!gAgent.isGodlike()
   26.83 +                && gAgent.getRegion()->isPrelude()
   26.84 +                && to_id.isNull())
   26.85 +            {
   26.86 +                // do nothing -- don't distract newbies in
   26.87 +                // Prelude with global IMs
   26.88 +            }
   26.89  // [RLVa:KB] - Checked: RLVa-2.1.0
   26.90 -        else if ( (RlvActions::isRlvEnabled()) && (offline == IM_ONLINE) && (!is_muted) && ((!accept_im_from_only_friend) || (is_friend)) &&
   26.91 -                  (message.length() > 3) && (RLV_CMD_PREFIX == message[0]) && (RlvHandler::instance().processIMQuery(from_id, message)) )
   26.92 -        {
   26.93 -            // Eat the message and do nothing
   26.94 -            return;
   26.95 -        }
   26.96 +            else if ( (RlvActions::isRlvEnabled()) && (offline == IM_ONLINE) && (!is_muted) && ((!accept_im_from_only_friend) || (is_friend)) &&
   26.97 +                      (message.length() > 3) && (RLV_CMD_PREFIX == message[0]) && (RlvHandler::instance().processIMQuery(from_id, message)) )
   26.98 +            {
   26.99 +                // Eat the message and do nothing
  26.100 +                return;
  26.101 +            }
  26.102  // [/RLVa:KB]
  26.103 -//      else if (offline == IM_ONLINE 
  26.104 -//                  && is_do_not_disturb
  26.105 -//                  && from_id.notNull() //not a system message
  26.106 -//                  && to_id.notNull()) //not global message
  26.107 +//          else if (offline == IM_ONLINE 
  26.108 +//                      && is_do_not_disturb
  26.109 +//                      && from_id.notNull() //not a system message
  26.110 +//                      && to_id.notNull()) //not global message
  26.111  // [RLVa:KB] - Checked: 2010-11-30 (RLVa-1.3.0)
  26.112 -        // <FS:Ansariel> Only send the busy reponse if either the sender is not
  26.113 -        //               muted OR the sender is muted and we explicitely want
  26.114 -        //               to inform him about that fact.
  26.115 -        else if (offline == IM_ONLINE
  26.116 -                    && (!accept_im_from_only_friend || is_friend)                                    // is friend or accept IMs from friend only disabled
  26.117 -                    && ((is_do_not_disturb && (!is_muted || (is_muted && !is_autorespond_muted))) || // do not disturb
  26.118 -                        (is_autorespond && !is_muted) ||                                             // autorespond everyone
  26.119 -                        (is_autorespond_nonfriends && !is_friend && !is_muted) ||                    // autorespond friends only
  26.120 -                        (is_afk && FSSendAwayAvatarResponse && !is_muted))                           // away
  26.121 -                    && from_id.notNull() //not a system message
  26.122 -                    && to_id.notNull() //not global message
  26.123 -                    && RlvActions::canReceiveIM(from_id))
  26.124 -// [/RLVa:KB]
  26.125 -        {
  26.126 -            // <FS:Ansariel> Log autoresponse notification after initial message
  26.127 -            bool has_session = true;
  26.128 +            // <FS:Ansariel> Only send the busy reponse if either the sender is not
  26.129 +            //               muted OR the sender is muted and we explicitely want
  26.130 +            //               to inform him about that fact.
  26.131 +            else if (offline == IM_ONLINE
  26.132 +                        && (!accept_im_from_only_friend || is_friend)                                    // is friend or accept IMs from friend only disabled
  26.133 +                        && ((is_do_not_disturb && (!is_muted || (is_muted && !is_autorespond_muted))) || // do not disturb
  26.134 +                            (is_autorespond && !is_muted) ||                                             // autorespond everyone
  26.135 +                            (is_autorespond_nonfriends && !is_friend && !is_muted) ||                    // autorespond friends only
  26.136 +                            (is_afk && FSSendAwayAvatarResponse && !is_muted))                           // away
  26.137 +                        && from_id.notNull() //not a system message
  26.138 +                        && to_id.notNull() //not global message
  26.139 +                        && RlvActions::canReceiveIM(from_id))
  26.140 +    // [/RLVa:KB]
  26.141 +            {
  26.142 +                // <FS:Ansariel> Log autoresponse notification after initial message
  26.143 +                bool has_session = true;
  26.144  
  26.145 -            // <FS:Ansariel> Old "do not disturb" message behavior: only send once if session not open
  26.146 -            // Session id will be null if avatar answers from offline IM via email
  26.147 -            std::string response;
  26.148 -            if (!gIMMgr->hasSession(session_id) && session_id.notNull())
  26.149 -            {
  26.150 -            // </FS:Ansariel>
  26.151 -                // <FS:Ansariel> Log autoresponse notification after initial message
  26.152 -                has_session = false;
  26.153 -                // <FS:Ansariel> FS autoresponse feature
  26.154 -                std::string my_name;
  26.155 -                LLAgentUI::buildFullname(my_name);
  26.156 -                if (is_do_not_disturb)
  26.157 +                // <FS:Ansariel> Old "do not disturb" message behavior: only send once if session not open
  26.158 +                // Session id will be null if avatar answers from offline IM via email
  26.159 +                std::string response;
  26.160 +                if (!gIMMgr->hasSession(session_id) && session_id.notNull())
  26.161                  {
  26.162 -                    response = gSavedPerAccountSettings.getString("DoNotDisturbModeResponse");
  26.163 -                }
  26.164 -                else if (is_autorespond_nonfriends && !is_friend)
  26.165 -                {
  26.166 -                    response = gSavedPerAccountSettings.getString("FSAutorespondNonFriendsResponse");
  26.167 -                }
  26.168 -                else if (is_autorespond)
  26.169 -                {
  26.170 -                    response = gSavedPerAccountSettings.getString("FSAutorespondModeResponse");
  26.171 -                }
  26.172 -                // <FS:PP> FIRE-10500: Autoresponse for (Away)
  26.173 -                else if (is_afk && FSSendAwayAvatarResponse)
  26.174 -                {
  26.175 -                    response = gSavedPerAccountSettings.getString("FSAwayAvatarResponse");
  26.176 -                }
  26.177 -                // </FS:PP>
  26.178 -                else
  26.179 -                {
  26.180 -                    LL_WARNS() << "Unknown auto-response mode" << LL_ENDL;
  26.181 -                }
  26.182 -                pack_instant_message(
  26.183 -                    gMessageSystem,
  26.184 -                    gAgent.getID(),
  26.185 -                    FALSE,
  26.186 -                    gAgent.getSessionID(),
  26.187 -                    from_id,
  26.188 -                    my_name,
  26.189 -                    response,
  26.190 -                    IM_ONLINE,
  26.191 -                    IM_DO_NOT_DISTURB_AUTO_RESPONSE,
  26.192 -                    session_id);
  26.193 -                gAgent.sendReliableMessage();
  26.194 -                // </FS:Ansariel> FS autoresponse feature
  26.195 -            // <FS:Ansariel> Old "do not disturb" message behavior: only send once if session not open
  26.196 -            }
  26.197 -            // </FS:Ansariel>
  26.198 -
  26.199 -            // <FS:Ansariel> checkfor and process reqinfo
  26.200 -            if (has_session)
  26.201 -            {
  26.202 -                message = FSData::getInstance()->processRequestForInfo(from_id,message,name,session_id);
  26.203 -            }
  26.204 -            // </FS:Ansariel>
  26.205 -
  26.206 -            // now store incoming IM in chat history
  26.207 -
  26.208 -            buffer = message;
  26.209 -    
  26.210 -            LL_DEBUGS("Messaging") << "session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
  26.211 -
  26.212 -            // <FS:PP> FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of IM)
  26.213 -            chat.mText = buffer;
  26.214 -            bool keyword_alert_performed = false;
  26.215 -            if (FSKeywords::getInstance()->chatContainsKeyword(chat, false))
  26.216 -            {
  26.217 -                FSKeywords::notify(chat);
  26.218 -                keyword_alert_performed = true;
  26.219 -            }
  26.220 -            // </FS:PP>
  26.221 -
  26.222 -            // add to IM panel, but do not bother the user
  26.223 -            gIMMgr->addMessage(
  26.224 -                session_id,
  26.225 -                from_id,
  26.226 -                name,
  26.227 -                buffer,
  26.228 -                IM_OFFLINE == offline,
  26.229 -                LLStringUtil::null,
  26.230 -                dialog,
  26.231 -                parent_estate_id,
  26.232 -                region_id,
  26.233 -                position,
  26.234 -                true,
  26.235 -                false,
  26.236 -                keyword_alert_performed);
  26.237 -
  26.238 -            // <FS:Ansariel> Old "do not disturb" message behavior: only send once if session not open
  26.239 -            //if (!gIMMgr->isDNDMessageSend(session_id))
  26.240 -            //{
  26.241 -            //	// return a standard "do not disturb" message, but only do it to online IM
  26.242 -            //	// (i.e. not other auto responses and not store-and-forward IM)
  26.243 -            //	send_do_not_disturb_message(msg, from_id, session_id);
  26.244 -            //	gIMMgr->setDNDMessageSent(session_id, true);
  26.245 -            //}
  26.246 -            // </FS:Ansariel>
  26.247 -
  26.248 -            if (!has_session)
  26.249 -            {
  26.250 -                // <FS:LO> Fire-5389 - "Autoresponse Sent" message added to Firestorm as was in Phoenix
  26.251 -                LLStringUtil::format_map_t args;
  26.252 -                args["MESSAGE"] = response;
  26.253 -
  26.254 -                gIMMgr->addMessage(
  26.255 -                    session_id,
  26.256 -                    gAgentID,
  26.257 -                    LLStringUtil::null, // Pass null value so no name gets prepended
  26.258 -                    LLTrans::getString("IM_autoresponse_sent", args),
  26.259 -                    false,
  26.260 -                    name,
  26.261 -                    IM_NOTHING_SPECIAL,
  26.262 -                    parent_estate_id,
  26.263 -                    region_id,
  26.264 -                    position,
  26.265 -                    false,
  26.266 -                    true
  26.267 -                    );
  26.268 -                // </FS:LO>
  26.269 -
  26.270 -                // <FS:Ansariel> Send inventory item on autoresponse
  26.271 -                LLUUID item_id(gSavedPerAccountSettings.getString("FSAutoresponseItemUUID"));
  26.272 -                if (item_id.notNull())
  26.273 -                {
  26.274 -                    LLInventoryItem* item = dynamic_cast<LLInventoryItem*>(gInventory.getItem(item_id));
  26.275 -                    if (item)
  26.276 +                // </FS:Ansariel>
  26.277 +                    // <FS:Ansariel> Log autoresponse notification after initial message
  26.278 +                    has_session = false;
  26.279 +                    // <FS:Ansariel> FS autoresponse feature
  26.280 +                    std::string my_name;
  26.281 +                    LLAgentUI::buildFullname(my_name);
  26.282 +                    if (is_do_not_disturb)
  26.283                      {
  26.284 -                        gIMMgr->addMessage(
  26.285 -                                session_id,
  26.286 -                                gAgentID,
  26.287 -                                LLStringUtil::null, // Pass null value so no name gets prepended
  26.288 -                                LLTrans::getString("IM_autoresponse_item_sent", LLSD().with("[ITEM_NAME]", item->getName())),
  26.289 -                                false,
  26.290 -                                name,
  26.291 -                                IM_NOTHING_SPECIAL,
  26.292 -                                parent_estate_id,
  26.293 -                                region_id,
  26.294 -                                position,
  26.295 -                                false,
  26.296 -                                true);
  26.297 -                        LLGiveInventory::doGiveInventoryItem(from_id, item, session_id);
  26.298 +                        response = gSavedPerAccountSettings.getString("DoNotDisturbModeResponse");
  26.299                      }
  26.300 +                    else if (is_autorespond_nonfriends && !is_friend)
  26.301 +                    {
  26.302 +                        response = gSavedPerAccountSettings.getString("FSAutorespondNonFriendsResponse");
  26.303 +                    }
  26.304 +                    else if (is_autorespond)
  26.305 +                    {
  26.306 +                        response = gSavedPerAccountSettings.getString("FSAutorespondModeResponse");
  26.307 +                    }
  26.308 +                    // <FS:PP> FIRE-10500: Autoresponse for (Away)
  26.309 +                    else if (is_afk && FSSendAwayAvatarResponse)
  26.310 +                    {
  26.311 +                        response = gSavedPerAccountSettings.getString("FSAwayAvatarResponse");
  26.312 +                    }
  26.313 +                    // </FS:PP>
  26.314 +                    else
  26.315 +                    {
  26.316 +                        LL_WARNS() << "Unknown auto-response mode" << LL_ENDL;
  26.317 +                    }
  26.318 +                    pack_instant_message(
  26.319 +                        gMessageSystem,
  26.320 +                        gAgent.getID(),
  26.321 +                        FALSE,
  26.322 +                        gAgent.getSessionID(),
  26.323 +                        from_id,
  26.324 +                        my_name,
  26.325 +                        response,
  26.326 +                        IM_ONLINE,
  26.327 +                        IM_DO_NOT_DISTURB_AUTO_RESPONSE,
  26.328 +                        session_id);
  26.329 +                    gAgent.sendReliableMessage();
  26.330 +                    // </FS:Ansariel> FS autoresponse feature
  26.331 +                // <FS:Ansariel> Old "do not disturb" message behavior: only send once if session not open
  26.332                  }
  26.333                  // </FS:Ansariel>
  26.334 -            }
  26.335 -        }
  26.336 -        else if (from_id.isNull())
  26.337 -        {
  26.338 -            LLSD args;
  26.339 -            args["MESSAGE"] = message;
  26.340 -            LLNotificationsUtil::add("SystemMessage", args);
  26.341 -        }
  26.342 -        else if (to_id.isNull())
  26.343 -        {
  26.344 -            // Message to everyone from GOD, look up the fullname since
  26.345 -            // server always slams name to legacy names
  26.346 -            LLAvatarNameCache::get(from_id, boost::bind(god_message_name_cb, _2, chat, message));
  26.347 -        }
  26.348 -        else
  26.349 -        {
  26.350 -            // standard message, not from system
  26.351 -            std::string saved;
  26.352 -            if(offline == IM_OFFLINE)
  26.353 -            {
  26.354 -                LLStringUtil::format_map_t args;
  26.355 -                args["[LONG_TIMESTAMP]"] = formatted_time(timestamp);
  26.356 -                saved = LLTrans::getString("Saved_message", args);
  26.357 -            }
  26.358 -            buffer = saved + message;
  26.359  
  26.360 -            LL_DEBUGS("Messaging") << "session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
  26.361 +                // <FS:Ansariel> checkfor and process reqinfo
  26.362 +                if (has_session)
  26.363 +                {
  26.364 +                    message = FSData::getInstance()->processRequestForInfo(from_id,message,name,session_id);
  26.365 +                }
  26.366 +                // </FS:Ansariel>
  26.367  
  26.368 -            bool mute_im = is_muted;
  26.369 -            if (accept_im_from_only_friend && !is_friend)
  26.370 -            {
  26.371 -                if (!gIMMgr->isNonFriendSessionNotified(session_id))
  26.372 -                {
  26.373 -                    // <FS:Ansariel> Disable this - doesn't make sense it will be skipped by LLIMMgr::addMessage() anyway
  26.374 -                    //std::string message = LLTrans::getString("IM_unblock_only_groups_friends");
  26.375 -                    //gIMMgr->addMessage(session_id, from_id, name, message, IM_OFFLINE == offline);
  26.376 -                    // </FS:Ansariel>
  26.377 -                    gIMMgr->addNotifiedNonFriendSessionID(session_id);
  26.378 -                }
  26.379 +                // now store incoming IM in chat history
  26.380  
  26.381 -                mute_im = true;
  26.382 -            }
  26.383 +                buffer = message;
  26.384  
  26.385 -// [RLVa:KB] - Checked: 2010-11-30 (RLVa-1.3.0)
  26.386 -            // Don't block offline IMs, or IMs from Lindens
  26.387 -            if ( (rlv_handler_t::isEnabled()) && (offline != IM_OFFLINE) && (!RlvActions::canReceiveIM(from_id)) && (!LLMuteList::getInstance()->isLinden(original_name) ))
  26.388 -            {
  26.389 -                if (!mute_im)
  26.390 -                    RlvUtil::sendBusyMessage(from_id, RlvStrings::getString(RLV_STRING_BLOCKED_RECVIM_REMOTE), session_id);
  26.391 -                message = RlvStrings::getString(RLV_STRING_BLOCKED_RECVIM);
  26.392 -            }
  26.393 -// [/RLVa:KB]
  26.394 -
  26.395 -            if (!mute_im) 
  26.396 -            {
  26.397 -                // checkfor and process reqinfo
  26.398 -                message = FSData::getInstance()->processRequestForInfo(from_id, message, name, session_id);
  26.399 +                LL_DEBUGS("Messaging") << "session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
  26.400  
  26.401                  // <FS:PP> FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of IM)
  26.402 -                chat.mText = message;
  26.403 +                chat.mText = buffer;
  26.404                  bool keyword_alert_performed = false;
  26.405                  if (FSKeywords::getInstance()->chatContainsKeyword(chat, false))
  26.406                  {
  26.407 @@ -984,8 +846,7 @@
  26.408                  }
  26.409                  // </FS:PP>
  26.410  
  26.411 -                buffer = saved + message;
  26.412 -
  26.413 +                // add to IM panel, but do not bother the user
  26.414                  gIMMgr->addMessage(
  26.415                      session_id,
  26.416                      from_id,
  26.417 @@ -1000,132 +861,339 @@
  26.418                      true,
  26.419                      false,
  26.420                      keyword_alert_performed);
  26.421 +
  26.422 +                // <FS:Ansariel> Old "do not disturb" message behavior: only send once if session not open
  26.423 +                //if (!gIMMgr->isDNDMessageSend(session_id))
  26.424 +                //{
  26.425 +                //	// return a standard "do not disturb" message, but only do it to online IM
  26.426 +                //	// (i.e. not other auto responses and not store-and-forward IM)
  26.427 +                //	send_do_not_disturb_message(msg, from_id, session_id);
  26.428 +                //	gIMMgr->setDNDMessageSent(session_id, true);
  26.429 +                //}
  26.430 +                // </FS:Ansariel>
  26.431 +
  26.432 +                if (!has_session)
  26.433 +                {
  26.434 +                    // <FS:LO> Fire-5389 - "Autoresponse Sent" message added to Firestorm as was in Phoenix
  26.435 +                    LLStringUtil::format_map_t args;
  26.436 +                    args["MESSAGE"] = response;
  26.437 +
  26.438 +                    gIMMgr->addMessage(
  26.439 +                        session_id,
  26.440 +                        gAgentID,
  26.441 +                        LLStringUtil::null, // Pass null value so no name gets prepended
  26.442 +                        LLTrans::getString("IM_autoresponse_sent", args),
  26.443 +                        false,
  26.444 +                        name,
  26.445 +                        IM_NOTHING_SPECIAL,
  26.446 +                        parent_estate_id,
  26.447 +                        region_id,
  26.448 +                        position,
  26.449 +                        false,
  26.450 +                        true
  26.451 +                        );
  26.452 +                    // </FS:LO>
  26.453 +
  26.454 +                    // <FS:Ansariel> Send inventory item on autoresponse
  26.455 +                    LLUUID item_id(gSavedPerAccountSettings.getString("FSAutoresponseItemUUID"));
  26.456 +                    if (item_id.notNull())
  26.457 +                    {
  26.458 +                        LLInventoryItem* item = dynamic_cast<LLInventoryItem*>(gInventory.getItem(item_id));
  26.459 +                        if (item)
  26.460 +                        {
  26.461 +                            gIMMgr->addMessage(
  26.462 +                                    session_id,
  26.463 +                                    gAgentID,
  26.464 +                                    LLStringUtil::null, // Pass null value so no name gets prepended
  26.465 +                                    LLTrans::getString("IM_autoresponse_item_sent", LLSD().with("[ITEM_NAME]", item->getName())),
  26.466 +                                    false,
  26.467 +                                    name,
  26.468 +                                    IM_NOTHING_SPECIAL,
  26.469 +                                    parent_estate_id,
  26.470 +                                    region_id,
  26.471 +                                    position,
  26.472 +                                    false,
  26.473 +                                    true);
  26.474 +                            LLGiveInventory::doGiveInventoryItem(from_id, item, session_id);
  26.475 +                        }
  26.476 +                    }
  26.477 +                    // </FS:Ansariel>
  26.478 +                }
  26.479 +            }
  26.480 +            else if (from_id.isNull())
  26.481 +            {
  26.482 +                LLSD args;
  26.483 +                args["MESSAGE"] = message;
  26.484 +                LLNotificationsUtil::add("SystemMessage", args);
  26.485 +            }
  26.486 +            else if (to_id.isNull())
  26.487 +            {
  26.488 +                // Message to everyone from GOD, look up the fullname since
  26.489 +                // server always slams name to legacy names
  26.490 +                LLAvatarNameCache::get(from_id, boost::bind(god_message_name_cb, _2, chat, message));
  26.491              }
  26.492              else
  26.493              {
  26.494 -                /*
  26.495 -                EXT-5099
  26.496 -                currently there is no way to store in history only...
  26.497 -                using  LLNotificationsUtil::add will add message to Nearby Chat
  26.498 +                // standard message, not from system
  26.499 +                std::string saved;
  26.500 +                if (offline == IM_OFFLINE)
  26.501 +                {
  26.502 +                    LLStringUtil::format_map_t args;
  26.503 +                    args["[LONG_TIMESTAMP]"] = formatted_time(timestamp);
  26.504 +                    saved = LLTrans::getString("Saved_message", args);
  26.505 +                }
  26.506 +                buffer = saved + message;
  26.507  
  26.508 -                // muted user, so don't start an IM session, just record line in chat
  26.509 -                // history.  Pretend the chat is from a local agent,
  26.510 -                // so it will go into the history but not be shown on screen.
  26.511 +                LL_DEBUGS("Messaging") << "session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
  26.512  
  26.513 -                LLSD args;
  26.514 -                args["MESSAGE"] = buffer;
  26.515 -                LLNotificationsUtil::add("SystemMessageTip", args);
  26.516 -                */
  26.517 -                static LLCachedControl<bool> fsSendMutedAvatarResponse(gSavedPerAccountSettings, "FSSendMutedAvatarResponse");
  26.518 -                if (fsSendMutedAvatarResponse && (!accept_im_from_only_friend || is_friend))
  26.519 +                bool mute_im = is_muted;
  26.520 +                if (accept_im_from_only_friend && !is_friend)
  26.521                  {
  26.522 -                    std::string my_name;
  26.523 -                    LLAgentUI::buildFullname(my_name);
  26.524 -                    std::string response = gSavedPerAccountSettings.getString("FSMutedAvatarResponse");
  26.525 -                    pack_instant_message(
  26.526 -                        gMessageSystem,
  26.527 -                        gAgent.getID(),
  26.528 -                        FALSE,
  26.529 -                        gAgent.getSessionID(),
  26.530 -                        from_id,
  26.531 -                        my_name,
  26.532 -                        response,
  26.533 -                        IM_ONLINE,
  26.534 -                        IM_DO_NOT_DISTURB_AUTO_RESPONSE,
  26.535 -                        session_id);
  26.536 -                    gAgent.sendReliableMessage();
  26.537 +                    if (!gIMMgr->isNonFriendSessionNotified(session_id))
  26.538 +                    {
  26.539 +                        // <FS:Ansariel> Disable this - doesn't make sense it will be skipped by LLIMMgr::addMessage() anyway
  26.540 +                        //std::string message = LLTrans::getString("IM_unblock_only_groups_friends");
  26.541 +                        //gIMMgr->addMessage(session_id, from_id, name, message, IM_OFFLINE == offline);
  26.542 +                        // </FS:Ansariel>
  26.543 +                        gIMMgr->addNotifiedNonFriendSessionID(session_id);
  26.544 +                    }
  26.545 +
  26.546 +                    mute_im = true;
  26.547                  }
  26.548  
  26.549 -                // <FS:Ansariel> Don't flash for muted IMs
  26.550 -                return;
  26.551 +// [RLVa:KB] - Checked: 2010-11-30 (RLVa-1.3.0)
  26.552 +                // Don't block offline IMs, or IMs from Lindens
  26.553 +                if ( (rlv_handler_t::isEnabled()) && (offline != IM_OFFLINE) && (!RlvActions::canReceiveIM(from_id)) && (!LLMuteList::getInstance()->isLinden(original_name) ))
  26.554 +                {
  26.555 +                    if (!mute_im)
  26.556 +                        RlvUtil::sendBusyMessage(from_id, RlvStrings::getString(RLV_STRING_BLOCKED_RECVIM_REMOTE), session_id);
  26.557 +                    message = RlvStrings::getString(RLV_STRING_BLOCKED_RECVIM);
  26.558 +                }
  26.559 +// [/RLVa:KB]
  26.560 +
  26.561 +                if (!mute_im)
  26.562 +                {
  26.563 +                    // checkfor and process reqinfo
  26.564 +                    message = FSData::getInstance()->processRequestForInfo(from_id, message, name, session_id);
  26.565 +
  26.566 +                    // <FS:PP> FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of IM)
  26.567 +                    chat.mText = message;
  26.568 +                    bool keyword_alert_performed = false;
  26.569 +                    if (FSKeywords::getInstance()->chatContainsKeyword(chat, false))
  26.570 +                    {
  26.571 +                        FSKeywords::notify(chat);
  26.572 +                        keyword_alert_performed = true;
  26.573 +                    }
  26.574 +                    // </FS:PP>
  26.575 +
  26.576 +                    buffer = saved + message;
  26.577 +
  26.578 +                    gIMMgr->addMessage(
  26.579 +                        session_id,
  26.580 +                        from_id,
  26.581 +                        name,
  26.582 +                        buffer,
  26.583 +                        IM_OFFLINE == offline,
  26.584 +                        LLStringUtil::null,
  26.585 +                        dialog,
  26.586 +                        parent_estate_id,
  26.587 +                        region_id,
  26.588 +                        position,
  26.589 +                        true,
  26.590 +                        false,
  26.591 +                        keyword_alert_performed);
  26.592 +                }
  26.593 +                else
  26.594 +                {
  26.595 +                    /*
  26.596 +                    EXT-5099
  26.597 +                    */
  26.598 +                    static LLCachedControl<bool> fsSendMutedAvatarResponse(gSavedPerAccountSettings, "FSSendMutedAvatarResponse");
  26.599 +                    if (fsSendMutedAvatarResponse && (!accept_im_from_only_friend || is_friend))
  26.600 +                    {
  26.601 +                        std::string my_name;
  26.602 +                        LLAgentUI::buildFullname(my_name);
  26.603 +                        std::string response = gSavedPerAccountSettings.getString("FSMutedAvatarResponse");
  26.604 +                        pack_instant_message(
  26.605 +                            gMessageSystem,
  26.606 +                            gAgent.getID(),
  26.607 +                            FALSE,
  26.608 +                            gAgent.getSessionID(),
  26.609 +                            from_id,
  26.610 +                            my_name,
  26.611 +                            response,
  26.612 +                            IM_ONLINE,
  26.613 +                            IM_DO_NOT_DISTURB_AUTO_RESPONSE,
  26.614 +                            session_id);
  26.615 +                        gAgent.sendReliableMessage();
  26.616 +                    }
  26.617 +
  26.618 +                    // <FS:Ansariel> Don't flash for muted IMs
  26.619 +                    return;
  26.620 +                }
  26.621              }
  26.622 -        }
  26.623 -        break;
  26.624 +            break;
  26.625  
  26.626 -    case IM_TYPING_START:
  26.627 +        case IM_TYPING_START:
  26.628          {
  26.629 -            LLPointer<LLIMInfo> im_info = new LLIMInfo(gMessageSystem);
  26.630 +            std::vector<U8> bucket(binary_bucket[0], binary_bucket_size);
  26.631 +            LLSD data;
  26.632 +            data["binary_bucket"] = bucket;
  26.633 +            LLPointer<LLIMInfo> im_info = new LLIMInfo(from_id,
  26.634 +                    from_group,
  26.635 +                    to_id,
  26.636 +                    dialog,
  26.637 +                    agentName,
  26.638 +                    message,
  26.639 +                    session_id,
  26.640 +                    parent_estate_id,
  26.641 +                    region_id,
  26.642 +                    position,
  26.643 +                    data,
  26.644 +                    offline,
  26.645 +                    timestamp);
  26.646              gIMMgr->processIMTypingStart(im_info);
  26.647          }
  26.648          break;
  26.649  
  26.650 -    case IM_TYPING_STOP:
  26.651 +        case IM_TYPING_STOP:
  26.652          {
  26.653 -            LLPointer<LLIMInfo> im_info = new LLIMInfo(gMessageSystem);
  26.654 +            std::vector<U8> bucket(binary_bucket[0], binary_bucket_size);
  26.655 +            LLSD data;
  26.656 +            data["binary_bucket"] = bucket;
  26.657 +            LLPointer<LLIMInfo> im_info = new LLIMInfo(from_id,
  26.658 +                    from_group,
  26.659 +                    to_id,
  26.660 +                    dialog,
  26.661 +                    agentName,
  26.662 +                    message,
  26.663 +                    session_id,
  26.664 +                    parent_estate_id,
  26.665 +                    region_id,
  26.666 +                    position,
  26.667 +                    data,
  26.668 +                    offline,
  26.669 +                    timestamp);
  26.670              gIMMgr->processIMTypingStop(im_info);
  26.671          }
  26.672          break;
  26.673  
  26.674 -    case IM_MESSAGEBOX:
  26.675 +        case IM_MESSAGEBOX:
  26.676          {
  26.677              // This is a block, modeless dialog.
  26.678              args["MESSAGE"] = message;
  26.679              LLNotificationsUtil::add("SystemMessageTip", args);
  26.680          }
  26.681          break;
  26.682 -    case IM_GROUP_NOTICE:
  26.683 -    case IM_GROUP_NOTICE_REQUESTED:
  26.684 +        case IM_GROUP_NOTICE:
  26.685 +        case IM_GROUP_NOTICE_REQUESTED:
  26.686          {
  26.687              LL_INFOS("Messaging") << "Received IM_GROUP_NOTICE message." << LL_ENDL;
  26.688 -            // Read the binary bucket for more information.
  26.689 -            struct notice_bucket_header_t
  26.690 +
  26.691 +            LLUUID agent_id;
  26.692 +            U8 has_inventory;
  26.693 +            U8 asset_type = 0;
  26.694 +            LLUUID group_id;
  26.695 +            std::string item_name;
  26.696 +
  26.697 +            if (aux_id.notNull())
  26.698              {
  26.699 -                U8 has_inventory;
  26.700 -                U8 asset_type;
  26.701 -                LLUUID group_id;
  26.702 -            };
  26.703 -            struct notice_bucket_full_t
  26.704 +                // aux_id contains group id, binary bucket contains name and asset type
  26.705 +                group_id = aux_id;
  26.706 +                has_inventory = binary_bucket_size > 1 ? TRUE : FALSE;
  26.707 +                from_group = TRUE; // inaccurate value correction
  26.708 +                if (has_inventory)
  26.709 +                {
  26.710 +                    std::string str_bucket = ll_safe_string((char*)binary_bucket, binary_bucket_size);
  26.711 +
  26.712 +                    typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
  26.713 +                    boost::char_separator<char> sep("|", "", boost::keep_empty_tokens);
  26.714 +                    tokenizer tokens(str_bucket, sep);
  26.715 +                    tokenizer::iterator iter = tokens.begin();
  26.716 +
  26.717 +                    asset_type = (LLAssetType::EType)(atoi((*(iter++)).c_str()));
  26.718 +                    iter++; // wearable type if applicable, otherwise asset type
  26.719 +                    item_name = std::string((*(iter++)).c_str());
  26.720 +                    // Note There is more elements in 'tokens' ...
  26.721 +
  26.722 +
  26.723 +                    for (int i = 0; i < 6; i++)
  26.724 +                    {
  26.725 +                        LL_WARNS() << *(iter++) << LL_ENDL;
  26.726 +                        iter++;
  26.727 +                    }
  26.728 +                }
  26.729 +            }
  26.730 +            else
  26.731              {
  26.732 -                struct notice_bucket_header_t header;
  26.733 -                U8 item_name[DB_INV_ITEM_NAME_BUF_SIZE];
  26.734 -            }* notice_bin_bucket;
  26.735 +                // All info is in binary bucket, read it for more information.
  26.736 +                struct notice_bucket_header_t
  26.737 +                {
  26.738 +                    U8 has_inventory;
  26.739 +                    U8 asset_type;
  26.740 +                    LLUUID group_id;
  26.741 +                };
  26.742 +                struct notice_bucket_full_t
  26.743 +                {
  26.744 +                    struct notice_bucket_header_t header;
  26.745 +                    U8 item_name[DB_INV_ITEM_NAME_BUF_SIZE];
  26.746 +                }*notice_bin_bucket;
  26.747  
  26.748 -            // Make sure the binary bucket is big enough to hold the header 
  26.749 -            // and a null terminated item name.
  26.750 -            if ( (binary_bucket_size < (S32)((sizeof(notice_bucket_header_t) + sizeof(U8))))
  26.751 -                || (binary_bucket[binary_bucket_size - 1] != '\0') )
  26.752 -            {
  26.753 -                LL_WARNS("Messaging") << "Malformed group notice binary bucket" << LL_ENDL;
  26.754 -                // <FS:Ansariel> Don't flash task icon
  26.755 -                //break;
  26.756 -                return;
  26.757 +                // Make sure the binary bucket is big enough to hold the header 
  26.758 +                // and a null terminated item name.
  26.759 +                if ((binary_bucket_size < (S32)((sizeof(notice_bucket_header_t) + sizeof(U8))))
  26.760 +                    || (binary_bucket[binary_bucket_size - 1] != '\0'))
  26.761 +                {
  26.762 +                    LL_WARNS("Messaging") << "Malformed group notice binary bucket" << LL_ENDL;
  26.763 +                    // <FS:Ansariel> Don't flash task icon
  26.764 +                    //break;
  26.765 +                    return;
  26.766 +                }
  26.767 +
  26.768 +                notice_bin_bucket = (struct notice_bucket_full_t*) &binary_bucket[0];
  26.769 +                has_inventory = notice_bin_bucket->header.has_inventory;
  26.770 +                asset_type = notice_bin_bucket->header.asset_type;
  26.771 +                group_id = notice_bin_bucket->header.group_id;
  26.772 +                item_name = ll_safe_string((const char*)notice_bin_bucket->item_name);
  26.773              }
  26.774  
  26.775 -            // The group notice packet does not have an AgentID.  Obtain one from the name cache.
  26.776 -            // If last name is "Resident" strip it out so the cache name lookup works.
  26.777 -            std::string::size_type index = original_name.find(" Resident");
  26.778 -            if (index != std::string::npos)
  26.779 +            if (group_id != from_id)
  26.780              {
  26.781 -                original_name = original_name.substr(0, index);
  26.782 +                agent_id = from_id;
  26.783 +            }
  26.784 +            else
  26.785 +            {
  26.786 +                S32 index = original_name.find(" Resident");
  26.787 +                if (index != std::string::npos)
  26.788 +                {
  26.789 +                    original_name = original_name.substr(0, index);
  26.790 +                }
  26.791 +
  26.792 +                // The group notice packet does not have an AgentID.  Obtain one from the name cache.
  26.793 +                // If last name is "Resident" strip it out so the cache name lookup works.
  26.794 +                std::string legacy_name = gCacheName->buildLegacyName(original_name);
  26.795 +                agent_id = LLAvatarNameCache::findIdByName(legacy_name);
  26.796 +
  26.797 +                if (agent_id.isNull())
  26.798 +                {
  26.799 +                    LL_WARNS("Messaging") << "buildLegacyName returned null while processing " << original_name << LL_ENDL;
  26.800 +                }
  26.801              }
  26.802  
  26.803 -            std::string legacy_name = gCacheName->buildLegacyName(original_name);
  26.804 -            LLUUID agent_id = LLAvatarNameCache::findIdByName(legacy_name);
  26.805 -
  26.806 -            if (agent_id.isNull())
  26.807 -            {
  26.808 -                LL_WARNS("Messaging") << "buildLegacyName returned null while processing " << original_name << LL_ENDL;
  26.809 -            }
  26.810 -            else if (LLMuteList::getInstance()->isMuted(agent_id))
  26.811 +            if (agent_id.notNull() && LLMuteList::getInstance()->isMuted(agent_id))
  26.812              {
  26.813                  // <FS:Ansariel> Don't flash task icon
  26.814                  //break;
  26.815                  return;
  26.816              }
  26.817  
  26.818 -            notice_bin_bucket = (struct notice_bucket_full_t*) &binary_bucket[0];
  26.819 -            U8 has_inventory = notice_bin_bucket->header.has_inventory;
  26.820 -            U8 asset_type = notice_bin_bucket->header.asset_type;
  26.821 -            LLUUID group_id = notice_bin_bucket->header.group_id;
  26.822 -            std::string item_name = ll_safe_string((const char*) notice_bin_bucket->item_name);
  26.823 -
  26.824              // If there is inventory, give the user the inventory offer.
  26.825              LLOfferInfo* info = NULL;
  26.826  
  26.827              if (has_inventory)
  26.828              {
  26.829                  info = new LLOfferInfo();
  26.830 -                
  26.831 +
  26.832                  info->mIM = IM_GROUP_NOTICE;
  26.833                  info->mFromID = from_id;
  26.834                  info->mFromGroup = from_group;
  26.835 @@ -1146,7 +1214,7 @@
  26.836                  info->mDesc = item_name;
  26.837                  info->mHost = sender;
  26.838              }
  26.839 -            
  26.840 +
  26.841              std::string str(message);
  26.842  
  26.843              // Tokenize the string.
  26.844 @@ -1170,7 +1238,7 @@
  26.845                  payload["group_id"] = group_id;
  26.846                  payload["inventory_name"] = item_name;
  26.847                  payload["received_time"] = LLDate::now();
  26.848 -                if(info && info->asLLSD())
  26.849 +                if (info && info->asLLSD())
  26.850                  {
  26.851                      payload["inventory_offer"] = info->asLLSD();
  26.852                  }
  26.853 @@ -1193,8 +1261,8 @@
  26.854              // Also send down the old path for now.
  26.855              if (IM_GROUP_NOTICE_REQUESTED == dialog)
  26.856              {
  26.857 -                
  26.858 -                LLPanelGroup::showNotice(subj,mes,group_id,has_inventory,item_name,info);
  26.859 +
  26.860 +                LLPanelGroup::showNotice(subj, mes, group_id, has_inventory, item_name, info);
  26.861              }
  26.862              else
  26.863              {
  26.864 @@ -1202,7 +1270,7 @@
  26.865              }
  26.866          }
  26.867          break;
  26.868 -    case IM_GROUP_INVITATION:
  26.869 +        case IM_GROUP_INVITATION:
  26.870          {
  26.871              // <FS:Ansariel> FIRE-20385: Don't show group invitation for groups agent is already a member of
  26.872              if (gAgent.isInGroup(from_id) && !gSavedSettings.getBOOL("FSShowJoinedGroupInvitations"))
  26.873 @@ -1223,7 +1291,7 @@
  26.874              {
  26.875                  send_do_not_disturb_message(gMessageSystem, from_id);
  26.876              }
  26.877 -            
  26.878 +
  26.879              if (!is_muted)
  26.880              {
  26.881                  LL_INFOS("Messaging") << "Received IM_GROUP_INVITATION message." << LL_ENDL;
  26.882 @@ -1232,7 +1300,7 @@
  26.883                  {
  26.884                      S32 membership_fee;
  26.885                      LLUUID role_id;
  26.886 -                }* invite_bucket;
  26.887 +                }*invite_bucket;
  26.888  
  26.889                  // Make sure the binary bucket is the correct size.
  26.890                  if (binary_bucket_size != sizeof(invite_bucket_t))
  26.891 @@ -1280,9 +1348,9 @@
  26.892          }
  26.893          break;
  26.894  
  26.895 -    case IM_INVENTORY_OFFERED:
  26.896 -    case IM_TASK_INVENTORY_OFFERED:
  26.897 -        // Someone has offered us some inventory.
  26.898 +        case IM_INVENTORY_OFFERED:
  26.899 +        case IM_TASK_INVENTORY_OFFERED:
  26.900 +            // Someone has offered us some inventory.
  26.901          {
  26.902              LLOfferInfo* info = new LLOfferInfo;
  26.903              if (IM_INVENTORY_OFFERED == dialog)
  26.904 @@ -1291,7 +1359,7 @@
  26.905                  {
  26.906                      S8		asset_type;
  26.907                      LLUUID	object_id;
  26.908 -                }* bucketp;
  26.909 +                }*bucketp;
  26.910  
  26.911                  if (sizeof(offer_agent_bucket_t) != binary_bucket_size)
  26.912                  {
  26.913 @@ -1356,54 +1424,54 @@
  26.914          }
  26.915          break;
  26.916  
  26.917 -    case IM_INVENTORY_ACCEPTED:
  26.918 -    {
  26.919 -//      args["NAME"] = LLSLURL("agent", from_id, "completename").getSLURLString();;
  26.920 -//      args["ORIGINAL_NAME"] = original_name;
  26.921 +        case IM_INVENTORY_ACCEPTED:
  26.922 +        {
  26.923 +//          args["NAME"] = LLSLURL("agent", from_id, "completename").getSLURLString();;
  26.924 +//          args["ORIGINAL_NAME"] = original_name;
  26.925  // [RLVa:KB] - Checked: RLVa-1.2.2
  26.926 -        // Only anonymize the name if the agent is nearby, there isn't an open IM session to them and their profile isn't open
  26.927 -        LLAvatarName av_name;
  26.928 -        bool fRlvCanShowName = (!RlvActions::isRlvEnabled()) ||
  26.929 -            (RlvActions::canShowName(RlvActions::SNC_DEFAULT, from_id)) || (!RlvUtil::isNearbyAgent(from_id)) || (RlvUIEnabler::hasOpenProfile(from_id)) || (RlvUIEnabler::hasOpenIM(from_id));
  26.930 -        args["NAME"] = LLSLURL("agent", from_id, (fRlvCanShowName) ? "completename" : "rlvanonym").getSLURLString();;
  26.931 -        args["ORIGINAL_NAME"] = fRlvCanShowName ? original_name : (LLAvatarNameCache::get(from_id, &av_name) ? RlvStrings::getAnonym(av_name) : RlvStrings::getAnonym(original_name));
  26.932 +            // Only anonymize the name if the agent is nearby, there isn't an open IM session to them and their profile isn't open
  26.933 +            LLAvatarName av_name;
  26.934 +            bool fRlvCanShowName = (!RlvActions::isRlvEnabled()) ||
  26.935 +                (RlvActions::canShowName(RlvActions::SNC_DEFAULT, from_id)) || (!RlvUtil::isNearbyAgent(from_id)) || (RlvUIEnabler::hasOpenProfile(from_id)) || (RlvUIEnabler::hasOpenIM(from_id));
  26.936 +            args["NAME"] = LLSLURL("agent", from_id, (fRlvCanShowName) ? "completename" : "rlvanonym").getSLURLString();;
  26.937 +            args["ORIGINAL_NAME"] = fRlvCanShowName ? original_name : (LLAvatarNameCache::get(from_id, &av_name) ? RlvStrings::getAnonym(av_name) : RlvStrings::getAnonym(original_name));
  26.938  // [/RLVa:KB]
  26.939 -        LLSD payload;
  26.940 -        payload["from_id"] = from_id;
  26.941 -        // Passing the "SESSION_NAME" to use it for IM notification logging
  26.942 -        // in LLTipHandler::processNotification(). See STORM-941.
  26.943 -        payload["SESSION_NAME"] = name;
  26.944 -        LLNotificationsUtil::add("InventoryAccepted", args, payload);
  26.945 -        break;
  26.946 -    }
  26.947 -    case IM_INVENTORY_DECLINED:
  26.948 -    {
  26.949 -//      args["NAME"] = LLSLURL("agent", from_id, "completename").getSLURLString();;
  26.950 +            LLSD payload;
  26.951 +            payload["from_id"] = from_id;
  26.952 +            // Passing the "SESSION_NAME" to use it for IM notification logging
  26.953 +            // in LLTipHandler::processNotification(). See STORM-941.
  26.954 +            payload["SESSION_NAME"] = name;
  26.955 +            LLNotificationsUtil::add("InventoryAccepted", args, payload);
  26.956 +            break;
  26.957 +        }
  26.958 +        case IM_INVENTORY_DECLINED:
  26.959 +        {
  26.960 +//          args["NAME"] = LLSLURL("agent", from_id, "completename").getSLURLString();;
  26.961  // [RLVa:KB] - Checked: RLVa-1.2.2
  26.962 -        // Only anonymize the name if the agent is nearby, there isn't an open IM session to them and their profile isn't open
  26.963 -        bool fRlvCanShowName = (!RlvActions::isRlvEnabled()) ||
  26.964 -            (RlvActions::canShowName(RlvActions::SNC_DEFAULT, from_id)) || (!RlvUtil::isNearbyAgent(from_id)) || (RlvUIEnabler::hasOpenProfile(from_id)) || (RlvUIEnabler::hasOpenIM(from_id));
  26.965 -        args["NAME"] = LLSLURL("agent", from_id, (fRlvCanShowName) ? "completename" : "rlvanonym").getSLURLString();;
  26.966 +            // Only anonymize the name if the agent is nearby, there isn't an open IM session to them and their profile isn't open
  26.967 +            bool fRlvCanShowName = (!RlvActions::isRlvEnabled()) ||
  26.968 +                (RlvActions::canShowName(RlvActions::SNC_DEFAULT, from_id)) || (!RlvUtil::isNearbyAgent(from_id)) || (RlvUIEnabler::hasOpenProfile(from_id)) || (RlvUIEnabler::hasOpenIM(from_id));
  26.969 +            args["NAME"] = LLSLURL("agent", from_id, (fRlvCanShowName) ? "completename" : "rlvanonym").getSLURLString();;
  26.970  // [/RLVa:KB]
  26.971 -        LLSD payload;
  26.972 -        payload["from_id"] = from_id;
  26.973 -        LLNotificationsUtil::add("InventoryDeclined", args, payload);
  26.974 -        break;
  26.975 -    }
  26.976 -    // TODO: _DEPRECATED suffix as part of vote removal - DEV-24856
  26.977 -    case IM_GROUP_VOTE:
  26.978 +            LLSD payload;
  26.979 +            payload["from_id"] = from_id;
  26.980 +            LLNotificationsUtil::add("InventoryDeclined", args, payload);
  26.981 +            break;
  26.982 +        }
  26.983 +        // TODO: _DEPRECATED suffix as part of vote removal - DEV-24856
  26.984 +        case IM_GROUP_VOTE:
  26.985          {
  26.986              LL_WARNS("Messaging") << "Received IM: IM_GROUP_VOTE_DEPRECATED" << LL_ENDL;
  26.987          }
  26.988          break;
  26.989  
  26.990 -    case IM_GROUP_ELECTION_DEPRECATED:
  26.991 -    {
  26.992 -        LL_WARNS("Messaging") << "Received IM: IM_GROUP_ELECTION_DEPRECATED" << LL_ENDL;
  26.993 -    }
  26.994 -    break;
  26.995 -    
  26.996 -    case IM_FROM_TASK:
  26.997 +        case IM_GROUP_ELECTION_DEPRECATED:
  26.998 +        {
  26.999 +            LL_WARNS("Messaging") << "Received IM: IM_GROUP_ELECTION_DEPRECATED" << LL_ENDL;
 26.1000 +        }
 26.1001 +        break;
 26.1002 +
 26.1003 +        case IM_FROM_TASK:
 26.1004          {
 26.1005  
 26.1006              if (is_do_not_disturb && !is_owned_by_me)
 26.1007 @@ -1446,7 +1514,7 @@
 26.1008              // enough to check only from name (i.e. fromName = "Second Life"). For example
 26.1009              // source type of messages from objects called "Second Life" should not be CHAT_SOURCE_SYSTEM.
 26.1010              bool chat_from_system = (SYSTEM_FROM == name) && region_id.isNull() && position.isNull();
 26.1011 -            if(chat_from_system)
 26.1012 +            if (chat_from_system)
 26.1013              {
 26.1014                  // System's UUID is NULL (fixes EXT-4766)
 26.1015                  chat.mFromID = LLUUID::null;
 26.1016 @@ -1482,9 +1550,9 @@
 26.1017              if (from_group)
 26.1018              {
 26.1019                  query_string["groupowned"] = "true";
 26.1020 -            }	
 26.1021 +            }
 26.1022  
 26.1023 -//          chat.mURL = LLSLURL("objectim", session_id, "").getSLURLString();
 26.1024 +//              chat.mURL = LLSLURL("objectim", session_id, "").getSLURLString();
 26.1025  // [SL:KB] - Checked: 2010-11-02 (RLVa-1.2.2a) | Added: RLVa-1.2.2a
 26.1026              chat.mURL = LLSLURL("objectim", session_id, LLURI::mapToQueryString(query_string)).getSLURLString();
 26.1027  // [/SL:KB]
 26.1028 @@ -1503,7 +1571,7 @@
 26.1029              //LLFloaterIMNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLFloaterIMNearbyChat>("nearby_chat");
 26.1030              FSFloaterNearbyChat* nearby_chat = FSFloaterNearbyChat::getInstance();
 26.1031              // </FS:Ansariel> [FS communication UI]
 26.1032 -            if(!chat_from_system && nearby_chat)
 26.1033 +            if (!chat_from_system && nearby_chat)
 26.1034              {
 26.1035                  chat.mOwnerID = from_id;
 26.1036                  LLSD args;
 26.1037 @@ -1525,7 +1593,7 @@
 26.1038  
 26.1039              //Object IMs send with from name: 'Second Life' need to be displayed also in notification toasts (EXT-1590)
 26.1040              if (!chat_from_system) break;
 26.1041 -            
 26.1042 +
 26.1043              LLSD substitutions;
 26.1044              substitutions["NAME"] = name;
 26.1045              substitutions["MSG"] = message;
 26.1046 @@ -1546,128 +1614,128 @@
 26.1047          }
 26.1048          break;
 26.1049  
 26.1050 -    case IM_SESSION_SEND:		// ad-hoc or group IMs
 26.1051 +        case IM_SESSION_SEND:		// ad-hoc or group IMs
 26.1052  
 26.1053 -        // Only show messages if we have a session open (which
 26.1054 -        // should happen after you get an "invitation"
 26.1055 +            // Only show messages if we have a session open (which
 26.1056 +            // should happen after you get an "invitation"
 26.1057  // [SL:KB] - Patch: Chat-GroupSnooze | Checked: 2012-06-16 (Catznip-3.3)
 26.1058 -        //if ( !gIMMgr->hasSession(session_id) )
 26.1059 -        if ( (!gIMMgr->hasSession(session_id)) &&
 26.1060 -             ( (!gAgent.isInGroup(session_id)) || (!gIMMgr->checkSnoozeExpiration(session_id)) || LLAvatarActions::isBlocked(from_id) || (!gIMMgr->restoreSnoozedSession(session_id)) ) )
 26.1061 +            //if ( !gIMMgr->hasSession(session_id) )
 26.1062 +            if ( (!gIMMgr->hasSession(session_id)) &&
 26.1063 +                 ( (!gAgent.isInGroup(session_id)) || (!gIMMgr->checkSnoozeExpiration(session_id)) || LLAvatarActions::isBlocked(from_id) || (!gIMMgr->restoreSnoozedSession(session_id)) ) )
 26.1064  // [/SL:KB]
 26.1065 -        {
 26.1066 -            return;
 26.1067 -        }
 26.1068 -
 26.1069 -        else if (offline == IM_ONLINE && is_do_not_disturb)
 26.1070 -        {
 26.1071 -
 26.1072 -            // return a standard "do not disturb" message, but only do it to online IM 
 26.1073 -            // (i.e. not other auto responses and not store-and-forward IM)
 26.1074 -            if (!gIMMgr->hasSession(session_id))
 26.1075              {
 26.1076 -                // if there is not a panel for this conversation (i.e. it is a new IM conversation
 26.1077 -                // initiated by the other party) then...
 26.1078 -                send_do_not_disturb_message(gMessageSystem, from_id, session_id);
 26.1079 +                return;
 26.1080              }
 26.1081  
 26.1082 -            // now store incoming IM in chat history
 26.1083 +            else if (offline == IM_ONLINE && is_do_not_disturb)
 26.1084 +            {
 26.1085  
 26.1086 -            buffer = message;
 26.1087 -    
 26.1088 -            LL_DEBUGS("Messaging") << "message in dnd; session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
 26.1089 +                // return a standard "do not disturb" message, but only do it to online IM 
 26.1090 +                // (i.e. not other auto responses and not store-and-forward IM)
 26.1091 +                if (!gIMMgr->hasSession(session_id))
 26.1092 +                {
 26.1093 +                    // if there is not a panel for this conversation (i.e. it is a new IM conversation
 26.1094 +                    // initiated by the other party) then...
 26.1095 +                    send_do_not_disturb_message(gMessageSystem, from_id, session_id);
 26.1096 +                }
 26.1097  
 26.1098 -            // add to IM panel, but do not bother the user
 26.1099 -            gIMMgr->addMessage(
 26.1100 -                session_id,
 26.1101 -                from_id,
 26.1102 -                name,
 26.1103 -                buffer,
 26.1104 -                IM_OFFLINE == offline,
 26.1105 -                ll_safe_string((char*)binary_bucket),
 26.1106 -                IM_SESSION_INVITE,
 26.1107 -                parent_estate_id,
 26.1108 -                region_id,
 26.1109 -                position,
 26.1110 -                true);
 26.1111 -        }
 26.1112 -        else
 26.1113 -        {
 26.1114 +                // now store incoming IM in chat history
 26.1115  
 26.1116 -            // <FS:PP> FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of IM)
 26.1117 -            chat.mText = message;
 26.1118 -            bool keyword_alert_performed = false;
 26.1119 -            if (FSKeywords::getInstance()->chatContainsKeyword(chat, false))
 26.1120 +                buffer = message;
 26.1121 +
 26.1122 +                LL_DEBUGS("Messaging") << "message in dnd; session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
 26.1123 +
 26.1124 +                // add to IM panel, but do not bother the user
 26.1125 +                gIMMgr->addMessage(
 26.1126 +                    session_id,
 26.1127 +                    from_id,
 26.1128 +                    name,
 26.1129 +                    buffer,
 26.1130 +                    IM_OFFLINE == offline,
 26.1131 +                    ll_safe_string((char*)binary_bucket),
 26.1132 +                    IM_SESSION_INVITE,
 26.1133 +                    parent_estate_id,
 26.1134 +                    region_id,
 26.1135 +                    position,
 26.1136 +                    true);
 26.1137 +            }
 26.1138 +            else
 26.1139              {
 26.1140 -                FSKeywords::notify(chat);
 26.1141 -                keyword_alert_performed = true;
 26.1142 +
 26.1143 +                // <FS:PP> FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of IM)
 26.1144 +                chat.mText = message;
 26.1145 +                bool keyword_alert_performed = false;
 26.1146 +                if (FSKeywords::getInstance()->chatContainsKeyword(chat, false))
 26.1147 +                {
 26.1148 +                    FSKeywords::notify(chat);
 26.1149 +                    keyword_alert_performed = true;
 26.1150 +                }
 26.1151 +                // </FS:PP>
 26.1152 +
 26.1153 +                // standard message, not from system
 26.1154 +                std::string saved;
 26.1155 +                if (offline == IM_OFFLINE)
 26.1156 +                {
 26.1157 +                    saved = llformat("(Saved %s) ", formatted_time(timestamp).c_str());
 26.1158 +                }
 26.1159 +
 26.1160 +                buffer = saved + message;
 26.1161 +
 26.1162 +                LL_DEBUGS("Messaging") << "standard message session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
 26.1163 +
 26.1164 +                gIMMgr->addMessage(
 26.1165 +                    session_id,
 26.1166 +                    from_id,
 26.1167 +                    name,
 26.1168 +                    buffer,
 26.1169 +                    IM_OFFLINE == offline,
 26.1170 +                    ll_safe_string((char*)binary_bucket),
 26.1171 +                    IM_SESSION_INVITE,
 26.1172 +                    parent_estate_id,
 26.1173 +                    region_id,
 26.1174 +                    position,
 26.1175 +                    true,
 26.1176 +                    false,
 26.1177 +                    keyword_alert_performed);
 26.1178              }
 26.1179 -            // </FS:PP>
 26.1180 +            break;
 26.1181  
 26.1182 -            // standard message, not from system
 26.1183 -            std::string saved;
 26.1184 -            if(offline == IM_OFFLINE)
 26.1185 +        case IM_FROM_TASK_AS_ALERT:
 26.1186 +            if (is_do_not_disturb && !is_owned_by_me)
 26.1187              {
 26.1188 -                saved = llformat("(Saved %s) ", formatted_time(timestamp).c_str());
 26.1189 +                return;
 26.1190              }
 26.1191 +            {
 26.1192 +                // Construct a viewer alert for this message.
 26.1193 +                args["NAME"] = name;
 26.1194 +                args["MESSAGE"] = message;
 26.1195 +                LLNotificationsUtil::add("ObjectMessage", args);
 26.1196 +            }
 26.1197 +            break;
 26.1198 +        case IM_DO_NOT_DISTURB_AUTO_RESPONSE:
 26.1199 +            if (is_muted)
 26.1200 +            {
 26.1201 +                LL_DEBUGS("Messaging") << "Ignoring do-not-disturb response from " << from_id << LL_ENDL;
 26.1202 +                return;
 26.1203 +            }
 26.1204 +            else
 26.1205 +            {
 26.1206 +                // <FS:Ansariel> FIRE-12908: Add busy response indicator back to busy messages
 26.1207 +                //gIMMgr->addMessage(session_id, from_id, name, message);
 26.1208 +                buffer = llformat("(%s): %s", LLTrans::getString("BusyResponse").c_str(), message.c_str());
 26.1209 +                gIMMgr->addMessage(session_id, from_id, name, buffer);
 26.1210 +                // </FS:Ansariel>
 26.1211 +            }
 26.1212 +            break;
 26.1213  
 26.1214 -            buffer = saved + message;
 26.1215 -
 26.1216 -            LL_DEBUGS("Messaging") << "standard message session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
 26.1217 -
 26.1218 -            gIMMgr->addMessage(
 26.1219 -                session_id,
 26.1220 -                from_id,
 26.1221 -                name,
 26.1222 -                buffer,
 26.1223 -                IM_OFFLINE == offline,
 26.1224 -                ll_safe_string((char*)binary_bucket),
 26.1225 -                IM_SESSION_INVITE,
 26.1226 -                parent_estate_id,
 26.1227 -                region_id,
 26.1228 -                position,
 26.1229 -                true,
 26.1230 -                false,
 26.1231 -                keyword_alert_performed);
 26.1232 -        }
 26.1233 -        break;
 26.1234 -
 26.1235 -    case IM_FROM_TASK_AS_ALERT:
 26.1236 -        if (is_do_not_disturb && !is_owned_by_me)
 26.1237 -        {
 26.1238 -            return;
 26.1239 -        }
 26.1240 -        {
 26.1241 -            // Construct a viewer alert for this message.
 26.1242 -            args["NAME"] = name;
 26.1243 -            args["MESSAGE"] = message;
 26.1244 -            LLNotificationsUtil::add("ObjectMessage", args);
 26.1245 -        }
 26.1246 -        break;
 26.1247 -    case IM_DO_NOT_DISTURB_AUTO_RESPONSE:
 26.1248 -        if (is_muted)
 26.1249 -        {
 26.1250 -            LL_DEBUGS("Messaging") << "Ignoring do-not-disturb response from " << from_id << LL_ENDL;
 26.1251 -            return;
 26.1252 -        }
 26.1253 -        else
 26.1254 -        {
 26.1255 -            // <FS:Ansariel> FIRE-12908: Add busy response indicator back to busy messages
 26.1256 -            //gIMMgr->addMessage(session_id, from_id, name, message);
 26.1257 -            buffer = llformat("(%s): %s", LLTrans::getString("BusyResponse").c_str(), message.c_str());
 26.1258 -            gIMMgr->addMessage(session_id, from_id, name, buffer);
 26.1259 -            // </FS:Ansariel>
 26.1260 -        }
 26.1261 -        break;
 26.1262 -        
 26.1263 -    case IM_LURE_USER:
 26.1264 -    case IM_TELEPORT_REQUEST:
 26.1265 +        case IM_LURE_USER:
 26.1266 +        case IM_TELEPORT_REQUEST:
 26.1267          {
 26.1268  // [RLVa:KB] - Checked: RLVa-1.4.9
 26.1269              // If we auto-accept the offer/request then this will override DnD status (but we'll still let the other party know later)
 26.1270              bool fRlvAutoAccept = (rlv_handler_t::isEnabled()) &&
 26.1271                  ( ((IM_LURE_USER == dialog) && (RlvActions::autoAcceptTeleportOffer(from_id))) ||
 26.1272 -                  ((IM_TELEPORT_REQUEST == dialog) && (RlvActions::autoAcceptTeleportRequest(from_id))) );
 26.1273 +                    ((IM_TELEPORT_REQUEST == dialog) && (RlvActions::autoAcceptTeleportRequest(from_id))) );
 26.1274  // [/RLVa:KB]
 26.1275  
 26.1276              if (is_muted)
 26.1277 @@ -1687,7 +1755,7 @@
 26.1278              // </FS:PP>
 26.1279              else
 26.1280              {
 26.1281 -//              if (is_do_not_disturb)
 26.1282 +//                  if (is_do_not_disturb)
 26.1283  // [RLVa:KB] - Checked: RLVa-1.4.9
 26.1284                  if ( (is_do_not_disturb) && (!fRlvAutoAccept) )
 26.1285  // [/RLVa:KB]
 26.1286 @@ -1701,7 +1769,7 @@
 26.1287                  std::string region_info = ll_safe_string((char*)binary_bucket, binary_bucket_size);
 26.1288                  std::string region_access_str = LLStringUtil::null;
 26.1289                  std::string region_access_icn = LLStringUtil::null;
 26.1290 -                std::string region_access_lc  = LLStringUtil::null;
 26.1291 +                std::string region_access_lc = LLStringUtil::null;
 26.1292  
 26.1293                  bool canUserAccessDstRegion = true;
 26.1294                  bool doesUserRequireMaturityIncrease = false;
 26.1295 @@ -1711,39 +1779,39 @@
 26.1296                  {
 26.1297                      region_access_str = LLViewerRegion::accessToString(region_access);
 26.1298                      region_access_icn = LLViewerRegion::getAccessIcon(region_access);
 26.1299 -                    region_access_lc  = region_access_str;
 26.1300 +                    region_access_lc = region_access_str;
 26.1301                      LLStringUtil::toLower(region_access_lc);
 26.1302  
 26.1303                      if (!gAgent.isGodlike())
 26.1304                      {
 26.1305                          switch (region_access)
 26.1306                          {
 26.1307 -                        case SIM_ACCESS_MIN :
 26.1308 -                        case SIM_ACCESS_PG :
 26.1309 -                            break;
 26.1310 -                        case SIM_ACCESS_MATURE :
 26.1311 -                            if (gAgent.isTeen())
 26.1312 -                            {
 26.1313 -                                canUserAccessDstRegion = false;
 26.1314 -                            }
 26.1315 -                            else if (gAgent.prefersPG())
 26.1316 -                            {
 26.1317 -                                doesUserRequireMaturityIncrease = true;
 26.1318 -                            }
 26.1319 -                            break;
 26.1320 -                        case SIM_ACCESS_ADULT :
 26.1321 -                            if (!gAgent.isAdult())
 26.1322 -                            {
 26.1323 -                                canUserAccessDstRegion = false;
 26.1324 -                            }
 26.1325 -                            else if (!gAgent.prefersAdult())
 26.1326 -                            {
 26.1327 -                                doesUserRequireMaturityIncrease = true;
 26.1328 -                            }
 26.1329 -                            break;
 26.1330 -                        default :
 26.1331 -                            llassert(0);
 26.1332 -                            break;
 26.1333 +                            case SIM_ACCESS_MIN:
 26.1334 +                            case SIM_ACCESS_PG:
 26.1335 +                                break;
 26.1336 +                            case SIM_ACCESS_MATURE:
 26.1337 +                                if (gAgent.isTeen())
 26.1338 +                                {
 26.1339 +                                    canUserAccessDstRegion = false;
 26.1340 +                                }
 26.1341 +                                else if (gAgent.prefersPG())
 26.1342 +                                {
 26.1343 +                                    doesUserRequireMaturityIncrease = true;
 26.1344 +                                }
 26.1345 +                                break;
 26.1346 +                            case SIM_ACCESS_ADULT:
 26.1347 +                                if (!gAgent.isAdult())
 26.1348 +                                {
 26.1349 +                                    canUserAccessDstRegion = false;
 26.1350 +                                }
 26.1351 +                                else if (!gAgent.prefersAdult())
 26.1352 +                                {
 26.1353 +                                    doesUserRequireMaturityIncrease = true;
 26.1354 +                                }
 26.1355 +                                break;
 26.1356 +                            default:
 26.1357 +                                llassert(0);
 26.1358 +                                break;
 26.1359                          }
 26.1360                      }
 26.1361                  }
 26.1362 @@ -1752,7 +1820,7 @@
 26.1363                  if (rlv_handler_t::isEnabled())
 26.1364                  {
 26.1365                      if ( ((IM_LURE_USER == dialog) && (!RlvActions::canAcceptTpOffer(from_id))) ||
 26.1366 -                         ((IM_TELEPORT_REQUEST == dialog) && (!RlvActions::canAcceptTpRequest(from_id))) )
 26.1367 +                            ((IM_TELEPORT_REQUEST == dialog) && (!RlvActions::canAcceptTpRequest(from_id))) )
 26.1368                      {
 26.1369                          RlvUtil::sendBusyMessage(from_id, RlvStrings::getString(RLV_STRING_BLOCKED_TPLUREREQ_REMOTE));
 26.1370                          if (is_do_not_disturb)
 26.1371 @@ -1762,7 +1830,7 @@
 26.1372  
 26.1373                      // Censor message if: 1) restricted from receiving IMs from the sender, or 2) teleport offer/request and @showloc=n restricted
 26.1374                      if ( (!RlvActions::canReceiveIM(from_id)) || 
 26.1375 -                         ((gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) && (IM_LURE_USER == dialog || IM_TELEPORT_REQUEST == dialog)) )
 26.1376 +                            ((gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) && (IM_LURE_USER == dialog || IM_TELEPORT_REQUEST == dialog)) )
 26.1377                      {
 26.1378                          message = RlvStrings::getString(RLV_STRING_HIDDEN);
 26.1379                      }
 26.1380 @@ -1800,7 +1868,7 @@
 26.1381                      LLNotification::Params params("TeleportOffered_MaturityBlocked");
 26.1382                      params.substitutions = args;
 26.1383                      params.payload = payload;
 26.1384 -                    LLPostponedNotification::add<LLPostponedOfferNotification>(	params, from_id, false);
 26.1385 +                    LLPostponedNotification::add<LLPostponedOfferNotification>(params, from_id, false);
 26.1386                      send_simple_im(from_id, LLTrans::getString("TeleportMaturityExceeded"), IM_NOTHING_SPECIAL, session_id);
 26.1387                      send_simple_im(from_id, LLStringUtil::null, IM_LURE_DECLINED, session_id);
 26.1388                  }
 26.1389 @@ -1809,7 +1877,7 @@
 26.1390                      LLNotification::Params params("TeleportOffered_MaturityExceeded");
 26.1391                      params.substitutions = args;
 26.1392                      params.payload = payload;
 26.1393 -                    LLPostponedNotification::add<LLPostponedOfferNotification>(	params, from_id, false);
 26.1394 +                    LLPostponedNotification::add<LLPostponedOfferNotification>(params, from_id, false);
 26.1395                  }
 26.1396                  else
 26.1397                  {
 26.1398 @@ -1842,13 +1910,13 @@
 26.1399                          LLPostponedNotification::add<LLPostponedOfferNotification>(params, from_id, false);
 26.1400                      }
 26.1401  // [/RLVa:KB]
 26.1402 -//                  LLPostponedNotification::add<LLPostponedOfferNotification>(params, from_id, false);
 26.1403 +//                      LLPostponedNotification::add<LLPostponedOfferNotification>(params, from_id, false);
 26.1404                  }
 26.1405              }
 26.1406          }
 26.1407          break;
 26.1408  
 26.1409 -    case IM_GODLIKE_LURE_USER:
 26.1410 +        case IM_GODLIKE_LURE_USER:
 26.1411          {
 26.1412              LLVector3 pos, look_at;
 26.1413              U64 region_handle(0);
 26.1414 @@ -1856,7 +1924,7 @@
 26.1415              std::string region_info = ll_safe_string((char*)binary_bucket, binary_bucket_size);
 26.1416              std::string region_access_str = LLStringUtil::null;
 26.1417              std::string region_access_icn = LLStringUtil::null;
 26.1418 -            std::string region_access_lc  = LLStringUtil::null;
 26.1419 +            std::string region_access_lc = LLStringUtil::null;
 26.1420  
 26.1421              bool canUserAccessDstRegion = true;
 26.1422              bool doesUserRequireMaturityIncrease = false;
 26.1423 @@ -1865,39 +1933,39 @@
 26.1424              {
 26.1425                  region_access_str = LLViewerRegion::accessToString(region_access);
 26.1426                  region_access_icn = LLViewerRegion::getAccessIcon(region_access);
 26.1427 -                region_access_lc  = region_access_str;
 26.1428 +                region_access_lc = region_access_str;
 26.1429                  LLStringUtil::toLower(region_access_lc);
 26.1430  
 26.1431                  if (!gAgent.isGodlike())
 26.1432                  {
 26.1433                      switch (region_access)
 26.1434                      {
 26.1435 -                    case SIM_ACCESS_MIN :
 26.1436 -                    case SIM_ACCESS_PG :
 26.1437 -                        break;
 26.1438 -                    case SIM_ACCESS_MATURE :
 26.1439 -                        if (gAgent.isTeen())
 26.1440 -                        {
 26.1441 -                            canUserAccessDstRegion = false;
 26.1442 -                        }
 26.1443 -                        else if (gAgent.prefersPG())
 26.1444 -                        {
 26.1445 -                            doesUserRequireMaturityIncrease = true;
 26.1446 -                        }
 26.1447 -                        break;
 26.1448 -                    case SIM_ACCESS_ADULT :
 26.1449 -                        if (!gAgent.isAdult())
 26.1450 -                        {
 26.1451 -                            canUserAccessDstRegion = false;
 26.1452 -                        }
 26.1453 -                        else if (!gAgent.prefersAdult())
 26.1454 -                        {
 26.1455 -                            doesUserRequireMaturityIncrease = true;
 26.1456 -                        }
 26.1457 -                        break;
 26.1458 -                    default :
 26.1459 -                        llassert(0);
 26.1460 -                        break;
 26.1461 +                        case SIM_ACCESS_MIN:
 26.1462 +                        case SIM_ACCESS_PG:
 26.1463 +                            break;
 26.1464 +                        case SIM_ACCESS_MATURE:
 26.1465 +                            if (gAgent.isTeen())
 26.1466 +                            {
 26.1467 +                                canUserAccessDstRegion = false;
 26.1468 +                            }
 26.1469 +                            else if (gAgent.prefersPG())
 26.1470 +                            {
 26.1471 +                                doesUserRequireMaturityIncrease = true;
 26.1472 +                            }
 26.1473 +                            break;
 26.1474 +                        case SIM_ACCESS_ADULT:
 26.1475 +                            if (!gAgent.isAdult())
 26.1476 +                            {
 26.1477 +                                canUserAccessDstRegion = false;
 26.1478 +                            }
 26.1479 +                            else if (!gAgent.prefersAdult())
 26.1480 +                            {
 26.1481 +                                doesUserRequireMaturityIncrease = true;
 26.1482 +                            }
 26.1483 +                            break;
 26.1484 +                        default:
 26.1485 +                            llassert(0);
 26.1486 +                            break;
 26.1487                      }
 26.1488                  }
 26.1489              }
 26.1490 @@ -1920,7 +1988,7 @@
 26.1491                  LLNotification::Params params("TeleportOffered_MaturityBlocked");
 26.1492                  params.substitutions = args;
 26.1493                  params.payload = payload;
 26.1494 -                LLPostponedNotification::add<LLPostponedOfferNotification>(	params, from_id, false);
 26.1495 +                LLPostponedNotification::add<LLPostponedOfferNotification>(params, from_id, false);
 26.1496                  send_simple_im(from_id, LLTrans::getString("TeleportMaturityExceeded"), IM_NOTHING_SPECIAL, session_id);
 26.1497                  send_simple_im(from_id, LLStringUtil::null, IM_LURE_DECLINED, session_id);
 26.1498              }
 26.1499 @@ -1929,18 +1997,18 @@
 26.1500                  LLNotification::Params params("TeleportOffered_MaturityExceeded");
 26.1501                  params.substitutions = args;
 26.1502                  params.payload = payload;
 26.1503 -                LLPostponedNotification::add<LLPostponedOfferNotification>(	params, from_id, false);
 26.1504 +                LLPostponedNotification::add<LLPostponedOfferNotification>(params, from_id, false);
 26.1505              }
 26.1506              else
 26.1507              {
 26.1508 -            // do not show a message box, because you're about to be
 26.1509 -            // teleported.
 26.1510 -            LLNotifications::instance().forceResponse(LLNotification::Params("TeleportOffered").payload(payload), 0);
 26.1511 -        }
 26.1512 +                // do not show a message box, because you're about to be
 26.1513 +                // teleported.
 26.1514 +                LLNotifications::instance().forceResponse(LLNotification::Params("TeleportOffered").payload(payload), 0);
 26.1515 +            }
 26.1516          }
 26.1517          break;
 26.1518  
 26.1519 -    case IM_GOTO_URL:
 26.1520 +        case IM_GOTO_URL:
 26.1521          {
 26.1522              LLSD args;
 26.1523              // n.b. this is for URLs sent by the system, not for
 26.1524 @@ -1960,11 +2028,11 @@
 26.1525              args["URL"] = url;
 26.1526              LLSD payload;
 26.1527              payload["url"] = url;
 26.1528 -            LLNotificationsUtil::add("GotoURL", args, payload );
 26.1529 +            LLNotificationsUtil::add("GotoURL", args, payload);
 26.1530          }
 26.1531          break;
 26.1532  
 26.1533 -    case IM_FRIENDSHIP_OFFERED:
 26.1534 +        case IM_FRIENDSHIP_OFFERED:
 26.1535          {
 26.1536  
 26.1537              // <FS:PP> FIRE-15233: Automatic friendship request refusal
 26.1538 @@ -2011,37 +2079,37 @@
 26.1539  
 26.1540                  if (add_notification)
 26.1541                  {
 26.1542 -                if(message.empty())
 26.1543 -                {
 26.1544 -                    //support for frienship offers from clients before July 2008
 26.1545 +                    if (message.empty())
 26.1546 +                    {
 26.1547 +                        //support for frienship offers from clients before July 2008
 26.1548                          LLNotificationsUtil::add("OfferFriendshipNoMessage", args, payload);
 26.1549                          make_ui_sound("UISndFriendshipOffer"); // <FS:PP> Friendship offer sound
 26.1550 -                }
 26.1551 -                else
 26.1552 -                {
 26.1553 -                    args["[MESSAGE]"] = message;
 26.1554 -                    LLNotification::Params params("OfferFriendship");
 26.1555 -                    params.substitutions = args;
 26.1556 -                    params.payload = payload;
 26.1557 -                    LLPostponedNotification::add<LLPostponedOfferNotification>(	params, from_id, false);
 26.1558 -                    make_ui_sound("UISndFriendshipOffer"); // <FS:PP> Friendship offer sound
 26.1559 +                    }
 26.1560 +                    else
 26.1561 +                    {
 26.1562 +                        args["[MESSAGE]"] = message;
 26.1563 +                        LLNotification::Params params("OfferFriendship");
 26.1564 +                        params.substitutions = args;
 26.1565 +                        params.payload = payload;
 26.1566 +                        LLPostponedNotification::add<LLPostponedOfferNotification>(params, from_id, false);
 26.1567 +                        make_ui_sound("UISndFriendshipOffer"); // <FS:PP> Friendship offer sound
 26.1568 +                    }
 26.1569                  }
 26.1570              }
 26.1571          }
 26.1572 -        }
 26.1573          break;
 26.1574  
 26.1575 -    case IM_FRIENDSHIP_ACCEPTED:
 26.1576 +        case IM_FRIENDSHIP_ACCEPTED:
 26.1577          {
 26.1578              // In the case of an offline IM, the formFriendship() may be extraneous
 26.1579              // as the database should already include the relationship.  But it
 26.1580              // doesn't hurt for dupes.
 26.1581              LLAvatarTracker::formFriendship(from_id);
 26.1582 -            
 26.1583 +
 26.1584              std::vector<std::string> strings;
 26.1585              strings.push_back(from_id.asString());
 26.1586              send_generic_message("requestonlinenotification", strings);
 26.1587 -            
 26.1588 +
 26.1589              args["NAME"] = name;
 26.1590              LLSD payload;
 26.1591              payload["from_id"] = from_id;
 26.1592 @@ -2049,11 +2117,11 @@
 26.1593          }
 26.1594          break;
 26.1595  
 26.1596 -    case IM_FRIENDSHIP_DECLINED_DEPRECATED:
 26.1597 -    default:
 26.1598 -        LL_WARNS("Messaging") << "Instant message calling for unknown dialog "
 26.1599 +        case IM_FRIENDSHIP_DECLINED_DEPRECATED:
 26.1600 +        default:
 26.1601 +            LL_WARNS("Messaging") << "Instant message calling for unknown dialog "
 26.1602                  << (S32)dialog << LL_ENDL;
 26.1603 -        break;
 26.1604 +            break;
 26.1605      }
 26.1606  
 26.1607      LLWindow* viewer_window = gViewerWindow->getWindow();
 26.1608 @@ -2082,7 +2150,7 @@
 26.1609          // Auto-accepted inventory items may require the avatar object
 26.1610          // to build a correct name.  Likewise, inventory offers from
 26.1611          // muted avatars require the mute list to properly mute.
 26.1612 -        if (cap_url.empty())
 26.1613 +        if (cap_url.empty() || !gSavedSettings.getBOOL("FSUseReadOfflineMsgsCap"))
 26.1614          {
 26.1615              requestOfflineMessagesLegacy();
 26.1616          }
 26.1617 @@ -2109,7 +2177,7 @@
 26.1618  
 26.1619      if (!status) // success = httpResults["success"].asBoolean();
 26.1620      {
 26.1621 -        LL_WARNS() << "Error requesting offline messages via capability " << url << ", Status: " << status.toString() << "\nFalling back to legacy method." << LL_ENDL;
 26.1622 +        LL_WARNS("Messaging") << "Error requesting offline messages via capability " << url << ", Status: " << status.toString() << "\nFalling back to legacy method." << LL_ENDL;
 26.1623  
 26.1624          requestOfflineMessagesLegacy();
 26.1625          return;
 26.1626 @@ -2119,10 +2187,11 @@
 26.1627  
 26.1628      if (!contents.size())
 26.1629      {
 26.1630 -        LL_WARNS() << "No contents received for offline messages via capability " << url << LL_ENDL;
 26.1631 +        LL_WARNS("Messaging") << "No contents received for offline messages via capability " << url << LL_ENDL;
 26.1632          return;
 26.1633      }
 26.1634  
 26.1635 +    // Todo: once dirtsim-369 releases, remove one of the map/array options
 26.1636      LLSD messages;
 26.1637      if (contents.isArray())
 26.1638      {
 26.1639 @@ -2134,16 +2203,24 @@
 26.1640      }
 26.1641      else
 26.1642      {
 26.1643 -        LL_WARNS() << "Invalid offline message content received via capability " << url << LL_ENDL;
 26.1644 +        LL_WARNS("Messaging") << "Invalid offline message content received via capability " << url << LL_ENDL;
 26.1645          return;
 26.1646      }
 26.1647  
 26.1648      if (!messages.isArray())
 26.1649      {
 26.1650 -        LL_WARNS() << "Invalid offline message content received via capability " << url << LL_ENDL;
 26.1651 +        LL_WARNS("Messaging") << "Invalid offline message content received via capability " << url << LL_ENDL;
 26.1652          return;
 26.1653      }
 26.1654  
 26.1655 +    if (messages.emptyArray())
 26.1656 +    {
 26.1657 +        // Nothing to process
 26.1658 +        return;
 26.1659 +    }
 26.1660 +
 26.1661 +    LL_INFOS("Messaging") << "Processing offline messages." << LL_ENDL;
 26.1662 +
 26.1663      std::vector<U8> data;
 26.1664      S32 binary_bucket_size = 0;
 26.1665      LLHost sender = gAgent.getRegion()->getHost();
 26.1666 @@ -2153,17 +2230,29 @@
 26.1667      for (; i != iEnd; ++i)
 26.1668      {
 26.1669          const LLSD &message_data(*i);
 26.1670 +
 26.1671          LLVector3 position(message_data["local_x"].asReal(), message_data["local_y"].asReal(), message_data["local_z"].asReal());
 26.1672          data = message_data["binary_bucket"].asBinary();
 26.1673 -        binary_bucket_size = data.size(); // message_data["count"] == data.size() - 1 due to ('\0')
 26.1674 -        U32 parent_estate_id = message_data.has("parent_estate_id") ? message_data["ParentEstateID"].asInteger() : 1; // 1 - IMMainland
 26.1675 +        binary_bucket_size = data.size(); // message_data["count"] always 0
 26.1676 +        U32 parent_estate_id = message_data.has("parent_estate_id") ? message_data["parent_estate_id"].asInteger() : 1; // 1 - IMMainland
 26.1677 +
 26.1678 +        // Todo: once dirtsim-369 releases, remove one of the int/str options
 26.1679 +        BOOL from_group;
 26.1680 +        if (message_data["from_group"].isInteger())
 26.1681 +        {
 26.1682 +            from_group = message_data["from_group"].asInteger();
 26.1683 +        }
 26.1684 +        else
 26.1685 +        {
 26.1686 +            from_group = message_data["from_group"].asString() == "Y";
 26.1687 +        }
 26.1688  
 26.1689          LLIMProcessing::processNewMessage(message_data["from_agent_id"].asUUID(),
 26.1690 -            message_data["from_group"].asInteger(), // BOOL
 26.1691 +            from_group,
 26.1692              message_data["to_agent_id"].asUUID(),
 26.1693              IM_OFFLINE,
 26.1694              (EInstantMessage)message_data["dialog"].asInteger(),
 26.1695 -            message_data["session_id"].asUUID(),
 26.1696 +            LLUUID::null, // session id, fix this for friendship offers to work
 26.1697              message_data["timestamp"].asInteger(),
 26.1698              message_data["from_agent_name"].asString(),
 26.1699              message_data["message"].asString(),
 26.1700 @@ -2172,12 +2261,15 @@
 26.1701              position,
 26.1702              &data[0],
 26.1703              binary_bucket_size,
 26.1704 -            sender);
 26.1705 +            sender,
 26.1706 +            message_data["asset_id"].asUUID()); // not necessarily an asset
 26.1707      }
 26.1708  }
 26.1709  
 26.1710  void LLIMProcessing::requestOfflineMessagesLegacy()
 26.1711  {
 26.1712 +    LL_INFOS("Messaging") << "Requesting offline messages (Legacy)." << LL_ENDL;
 26.1713 +
 26.1714      LLMessageSystem* msg = gMessageSystem;
 26.1715      msg->newMessageFast(_PREHASH_RetrieveInstantMessages);
 26.1716      msg->nextBlockFast(_PREHASH_AgentData);
    27.1 --- a/indra/newview/llimprocessing.h	Wed Mar 21 20:23:52 2018 +0100
    27.2 +++ b/indra/newview/llimprocessing.h	Sat Apr 07 14:59:44 2018 +0200
    27.3 @@ -47,7 +47,8 @@
    27.4          LLVector3 position,
    27.5          U8 *binary_bucket,
    27.6          S32 binary_bucket_size,
    27.7 -        LLHost &sender);
    27.8 +        LLHost &sender,
    27.9 +        LLUUID aux_id = LLUUID::null);
   27.10  
   27.11      // Either receives list of offline messages from 'ReadOfflineMsgs' capability
   27.12      // or uses legacy method
    28.1 --- a/indra/newview/llmediactrl.cpp	Wed Mar 21 20:23:52 2018 +0100
    28.2 +++ b/indra/newview/llmediactrl.cpp	Sat Apr 07 14:59:44 2018 +0200
    28.3 @@ -827,21 +827,6 @@
    28.4  			S32 x_offset, y_offset, width, height;
    28.5  			calcOffsetsAndSize(&x_offset, &y_offset, &width, &height);
    28.6  
    28.7 -#if 0
    28.8 -			// <FS:ND> Flip Y-Axis of media texture
    28.9 -			U32 mode = gGL.getMatrixMode();
   28.10 -			gGL.matrixMode(LLRender::MM_TEXTURE0);
   28.11 -
   28.12 -			F32 aMatrix[16] = {	1.0f,  0.0f, 0.0f, 0.0f,
   28.13 -								0.0f, -1.0f, 0.0f, 0.0f,
   28.14 -								0.0f,  0.0f, 1.0f, 0.0f,
   28.15 -								0.0f,  max_v, 0.0f, 1.0f
   28.16 -								};
   28.17 -			gGL.pushMatrix();
   28.18 -			gGL.loadMatrix( aMatrix );
   28.19 -			gGL.matrixMode(mode);
   28.20 -			// </FS:ND>
   28.21 -#endif
   28.22  			// draw the browser
   28.23  			// <FS:Ansariel> Remove QUADS rendering mode
   28.24  			//gGL.begin( LLRender::QUADS );
   28.25 @@ -894,13 +879,6 @@
   28.26  				gGL.vertex2i( x_offset + width, y_offset );
   28.27  			}
   28.28  			gGL.end();
   28.29 -#if 0
   28.30 -			// <FS:ND> Restore matrix for texture 0
   28.31 -			gGL.matrixMode(LLRender::MM_TEXTURE0);
   28.32 -			gGL.popMatrix();
   28.33 -			gGL.matrixMode( mode );
   28.34 -			// </FS:ND>
   28.35 -#endif
   28.36  		}
   28.37  		gGL.popUIMatrix();
   28.38  	
    29.1 --- a/indra/newview/llmediadataclient.cpp	Wed Mar 21 20:23:52 2018 +0100
    29.2 +++ b/indra/newview/llmediadataclient.cpp	Sat Apr 07 14:59:44 2018 +0200
    29.3 @@ -204,7 +204,7 @@
    29.4      if (std::find_if(mUnQueuedRequests.begin(), mUnQueuedRequests.end(), upred) != mUnQueuedRequests.end())
    29.5          return true;
    29.6      
    29.7 -	return false;
    29.8 +    return false;
    29.9  }
   29.10  
   29.11  void LLMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object)
   29.12 @@ -815,14 +815,14 @@
   29.13  
   29.14  bool LLObjectMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object)
   29.15  {
   29.16 -	// First, call parent impl.
   29.17 -	if(LLMediaDataClient::isInQueue(object))
   29.18 -		return true;
   29.19 +    // First, call parent impl.
   29.20 +    if(LLMediaDataClient::isInQueue(object))
   29.21 +        return true;
   29.22  
   29.23      if (std::find_if(mRoundRobinQueue.begin(), mRoundRobinQueue.end(), PredicateMatchRequest(object->getID())) != mRoundRobinQueue.end())
   29.24          return true;
   29.25  
   29.26 -	return false;
   29.27 +    return false;
   29.28  }
   29.29  
   29.30  void LLObjectMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object)
    30.1 --- a/indra/newview/llstartup.cpp	Wed Mar 21 20:23:52 2018 +0100
    30.2 +++ b/indra/newview/llstartup.cpp	Sat Apr 07 14:59:44 2018 +0200
    30.3 @@ -557,6 +557,13 @@
    30.4  // true when all initialization done.
    30.5  bool idle_startup()
    30.6  {
    30.7 +	if (gViewerWindow == NULL)
    30.8 +	{
    30.9 +		// We expect window to be initialized
   30.10 +		LL_WARNS_ONCE() << "gViewerWindow is not initialized" << LL_ENDL;
   30.11 +		return false; // No world yet
   30.12 +	}
   30.13 +
   30.14  	const F32 PRECACHING_DELAY = gSavedSettings.getF32("PrecachingDelay");
   30.15  	static LLTimer timeout;
   30.16  
   30.17 @@ -643,6 +650,11 @@
   30.18  		gSavedSettings.setString("FSInternalSkinCurrentTheme", gSavedSettings.getString("FSSkinCurrentThemeReadableName"));
   30.19  		// </FS:Ansariel>
   30.20  
   30.21 +		// <FS:Ansariel> Notification not showing if hiding the UI
   30.22 +		gSavedSettings.setBOOL("FSInternalShowNavbarNavigationPanel", gSavedSettings.getBOOL("ShowNavbarNavigationPanel"));
   30.23 +		gSavedSettings.setBOOL("FSInternalShowNavbarFavoritesPanel", gSavedSettings.getBOOL("ShowNavbarFavoritesPanel"));
   30.24 +		// </FS:Ansariel>
   30.25 +
   30.26  		if (LLFeatureManager::getInstance()->isSafe())
   30.27  		{
   30.28  			LLNotificationsUtil::add("DisplaySetToSafe");
    31.1 --- a/indra/newview/llviewercontrol.cpp	Wed Mar 21 20:23:52 2018 +0100
    31.2 +++ b/indra/newview/llviewercontrol.cpp	Sat Apr 07 14:59:44 2018 +0200
    31.3 @@ -919,6 +919,14 @@
    31.4  }
    31.5  // </FS:Ansariel>
    31.6  
    31.7 +// <FS:Ansariel> Notification not showing if hiding the UI
    31.8 +void handleNavbarSettingsChanged()
    31.9 +{
   31.10 +	gSavedSettings.setBOOL("FSInternalShowNavbarNavigationPanel", gSavedSettings.getBOOL("ShowNavbarNavigationPanel"));
   31.11 +	gSavedSettings.setBOOL("FSInternalShowNavbarFavoritesPanel", gSavedSettings.getBOOL("ShowNavbarFavoritesPanel"));
   31.12 +}
   31.13 +// </FS:Ansariel>
   31.14 +
   31.15  // <FS:Ansariel> FIRE-20288: Option to render friends only
   31.16  void handleRenderFriendsOnlyChanged(const LLSD& newvalue)
   31.17  {
   31.18 @@ -1167,6 +1175,11 @@
   31.19  
   31.20  	// <FS:Ansariel> FIRE-20288: Option to render friends only
   31.21  	gSavedPerAccountSettings.getControl("FSRenderFriendsOnly")->getSignal()->connect(boost::bind(&handleRenderFriendsOnlyChanged, _2));
   31.22 +
   31.23 +	// <FS:Ansariel> Notification not showing if hiding the UI
   31.24 +	gSavedSettings.getControl("ShowNavbarFavoritesPanel")->getSignal()->connect(boost::bind(&handleNavbarSettingsChanged));
   31.25 +	gSavedSettings.getControl("ShowNavbarNavigationPanel")->getSignal()->connect(boost::bind(&handleNavbarSettingsChanged));
   31.26 +	// </FS:Ansariel>
   31.27  }
   31.28  
   31.29  #if TEST_CACHED_CONTROL
    32.1 --- a/indra/newview/llviewerobject.cpp	Wed Mar 21 20:23:52 2018 +0100
    32.2 +++ b/indra/newview/llviewerobject.cpp	Sat Apr 07 14:59:44 2018 +0200
    32.3 @@ -2660,20 +2660,24 @@
    32.4  			// Extrapolation across region boundaries is almost always wrong, and if the region being
    32.5  			// entered is slow to respond, very wrong.
    32.6  			// Probably don't need edge of world check below any more since we are clipping the predictor to the region.
    32.7 -			bool clipped; // true if clipped at boundary
    32.8 -			LLVector3d clip_pos_global_region = LLWorld::getInstance()->clipToRegion(mRegionp,old_pos_global, new_pos_global, clipped);
    32.9 -			if (clipped)
   32.10 +			static LLCachedControl<bool> fsExperimentalRegionCrossingMovementFix(gSavedSettings, "FSExperimentalRegionCrossingMovementFix");
   32.11 +			if (fsExperimentalRegionCrossingMovementFix)
   32.12  			{
   32.13 -				// Was clipped, so we crossed a region boundary
   32.14 -				//LL_INFOS() << "Beyond region edge, clipped predicted position to " << mRegionp->getPosRegionFromGlobal(clip_pos_global_region)
   32.15 -				//	<< " from [" << getPositionRegion() << " .. " << new_pos << "]" << LL_ENDL;
   32.16 -				new_pos = mRegionp->getPosRegionFromGlobal(clip_pos_global_region);
   32.17 -				// Don't zero out velocity on the server. Telling the server affects scripts and audio.
   32.18 -				//new_v.clear();
   32.19 -				//setAcceleration(LLVector3::zero); // stop linear acceleration
   32.20 -				LLVector3 new_angv;
   32.21 -				new_angv.clear();
   32.22 -				setAngularVelocity(new_angv); // stop rotation
   32.23 +				bool clipped; // true if clipped at boundary
   32.24 +				LLVector3d clip_pos_global_region = LLWorld::getInstance()->clipToRegion(mRegionp, old_pos_global, new_pos_global, clipped);
   32.25 +				if (clipped)
   32.26 +				{
   32.27 +					// Was clipped, so we crossed a region boundary
   32.28 +					//LL_INFOS() << "Beyond region edge, clipped predicted position to " << mRegionp->getPosRegionFromGlobal(clip_pos_global_region)
   32.29 +					//	<< " from [" << getPositionRegion() << " .. " << new_pos << "]" << LL_ENDL;
   32.30 +					new_pos = mRegionp->getPosRegionFromGlobal(clip_pos_global_region);
   32.31 +					// Don't zero out velocity on the server. Telling the server affects scripts and audio.
   32.32 +					//new_v.clear();
   32.33 +					//setAcceleration(LLVector3::zero); // stop linear acceleration
   32.34 +					LLVector3 new_angv;
   32.35 +					new_angv.clear();
   32.36 +					setAngularVelocity(new_angv); // stop rotation
   32.37 +				}
   32.38  			}
   32.39  			// </FS>
   32.40  
    33.1 --- a/indra/newview/llviewershadermgr.cpp	Wed Mar 21 20:23:52 2018 +0100
    33.2 +++ b/indra/newview/llviewershadermgr.cpp	Sat Apr 07 14:59:44 2018 +0200
    33.3 @@ -2829,6 +2829,7 @@
    33.4  			gSkinnedObjectSimpleWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
    33.5  			gSkinnedObjectSimpleWaterProgram.mFeatures.hasObjectSkinning = true;
    33.6  			gSkinnedObjectSimpleWaterProgram.mFeatures.disableTextureIndex = true;
    33.7 +			gSkinnedObjectSimpleWaterProgram.mFeatures.hasAlphaMask = true;
    33.8  			gSkinnedObjectSimpleWaterProgram.mShaderFiles.clear();
    33.9  			gSkinnedObjectSimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB));
   33.10  			gSkinnedObjectSimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleWaterF.glsl", GL_FRAGMENT_SHADER_ARB));
    34.1 --- a/indra/newview/llviewerwindow.cpp	Wed Mar 21 20:23:52 2018 +0100
    34.2 +++ b/indra/newview/llviewerwindow.cpp	Sat Apr 07 14:59:44 2018 +0200
    34.3 @@ -6854,6 +6854,10 @@
    34.4  
    34.5  	// <FS:Ansariel> Notification not showing if hiding the UI
    34.6  	FSNearbyChat::instance().showDefaultChatBar(visible && !gSavedSettings.getBOOL("AutohideChatBar"));
    34.7 +	gSavedSettings.setBOOL("FSInternalShowNavbarNavigationPanel", visible && gSavedSettings.getBOOL("ShowNavbarNavigationPanel"));
    34.8 +	gSavedSettings.setBOOL("FSInternalShowNavbarFavoritesPanel", visible && gSavedSettings.getBOOL("ShowNavbarFavoritesPanel"));
    34.9 +	mRootView->getChildView("chiclet_container")->setVisible(visible);
   34.10 +	// </FS:Ansariel>
   34.11  
   34.12  	// <FS:Zi> Is done inside XUI now, using visibility_control
   34.13  	//LLNavigationBar::getInstance()->setVisible(visible ? gSavedSettings.getBOOL("ShowNavbarNavigationPanel") : FALSE);
    35.1 --- a/indra/newview/llvoicevivox.cpp	Wed Mar 21 20:23:52 2018 +0100
    35.2 +++ b/indra/newview/llvoicevivox.cpp	Sat Apr 07 14:59:44 2018 +0200
    35.3 @@ -785,7 +785,10 @@
    35.4  bool LLVivoxVoiceClient::startAndLaunchDaemon()
    35.5  {
    35.6      //---------------------------------------------------------------------
    35.7 -    if (!voiceEnabled())
    35.8 +    // </FS:Ansariel> Bypass cached controls
    35.9 +    //if (!voiceEnabled())
   35.10 +    if (!voiceEnabled(true))
   35.11 +    // </FS:Ansariel>
   35.12      {
   35.13          // Voice is locked out, we must not launch the vivox daemon.
   35.14          return false;
    36.1 --- a/indra/newview/llvovolume.cpp	Wed Mar 21 20:23:52 2018 +0100
    36.2 +++ b/indra/newview/llvovolume.cpp	Sat Apr 07 14:59:44 2018 +0200
    36.3 @@ -4569,11 +4569,6 @@
    36.4  	{ //texture animation breaks batches
    36.5  		return false;
    36.6  	}
    36.7 -	
    36.8 -	if( facep->mTextureMatrix &&
    36.9 -		( ( facep->getTextureEntry() && facep->getTextureEntry()->hasMedia() ) ||
   36.10 -		  ( facep->getTexture() && facep->getTexture()->getType()  == LLViewerTexture::MEDIA_TEXTURE ) ) )
   36.11 -		return false;
   36.12  
   36.13  	return true;
   36.14  }
   36.15 @@ -4687,13 +4682,6 @@
   36.16  		tex_mat = facep->mTextureMatrix;	
   36.17  	}
   36.18  
   36.19 -	// <FS:ND> CEF: if this is a face with media, then use the texture matrix to flip the texture
   36.20 -	if( facep->mTextureMatrix &&
   36.21 -		( ( facep->getTextureEntry() && facep->getTextureEntry()->hasMedia() ) ||
   36.22 -		  ( facep->getTexture() && facep->getTexture()->getType()  == LLViewerTexture::MEDIA_TEXTURE ) ) )
   36.23 -		tex_mat = facep->mTextureMatrix;
   36.24 -	// </FS:ND>
   36.25 -	
   36.26  	const LLMatrix4* model_mat = NULL;
   36.27  
   36.28  	LLDrawable* drawable = facep->getDrawable();
    37.1 --- a/indra/newview/llworld.cpp	Wed Mar 21 20:23:52 2018 +0100
    37.2 +++ b/indra/newview/llworld.cpp	Sat Apr 07 14:59:44 2018 +0200
    37.3 @@ -787,6 +787,8 @@
    37.4  //  If start_pos is outside the region, use start_pos.
    37.5  LLVector3d	LLWorld::clipToRegion(const LLViewerRegion* regionp, const LLVector3d &start_pos, const LLVector3d &end_pos, bool &clipped)
    37.6  {
    37.7 +	static LLCachedControl<bool> fsExperimentalRegionCrossingMovementFix(gSavedSettings, "FSExperimentalRegionCrossingMovementFix");
    37.8 +
    37.9  	clipped = false;									// no clipping yet
   37.10  	if (!regionp)										// no region. We're lost
   37.11  	{
   37.12 @@ -808,8 +810,9 @@
   37.13  	// </FS>
   37.14  	F32 region_width = regionp->getWidth();
   37.15  	// <FS> FIRE-21915: Fix bogus avatar movement on region crossing
   37.16 -	if (region_coord_start.mV[VX] < 0.f || region_coord_start.mV[VX] > region_width
   37.17 -		|| region_coord_start.mV[VY] < 0.f || region_coord_start.mV[VY] > region_width)
   37.18 +	if (fsExperimentalRegionCrossingMovementFix &&
   37.19 +		(region_coord_start.mV[VX] < 0.f || region_coord_start.mV[VX] > region_width
   37.20 +		|| region_coord_start.mV[VY] < 0.f || region_coord_start.mV[VY] > region_width))
   37.21  	{
   37.22  		clip_factor = 1.0;								// start pos outside region, use start pos
   37.23  	}
   37.24 @@ -853,8 +856,14 @@
   37.25  		clip_factor = (region_coord.mV[VY] - region_width) / delta_pos_abs.mdV[VY];
   37.26  	}
   37.27  	// <FS> FIRE-21915: Fix bogus avatar movement on region crossing
   37.28 -		if (!std::isfinite(clip_factor)) { clip_factor = 0.0; }	// avoid NaN problems
   37.29 -		clip_factor = llclamp(clip_factor, 0.0, 1.0);			// avoid overflow problem
   37.30 +		if (!std::isfinite(clip_factor))
   37.31 +		{
   37.32 +			clip_factor = 0.0;								// avoid NaN problems
   37.33 +		}
   37.34 +		else
   37.35 +		{
   37.36 +			clip_factor = llclamp(clip_factor, 0.0, 1.0);	// avoid overflow problem
   37.37 +		}
   37.38  	}
   37.39  	// </FS>
   37.40  
   37.41 @@ -868,21 +877,36 @@
   37.42  	//final_region_pos.mdV[VZ] = llclamp(final_region_pos.mdV[VZ], 0.0,
   37.43  	//								   (F64)(LLWorld::getInstance()->getRegionMaxHeight() - F_ALMOST_ZERO));
   37.44  
   37.45 -	// True if clipped. Caller needs to know, because it will kill velocity if there's clipping
   37.46 -	// Don't do this by comparing floating point numbers for equality. That has roundoff problems.
   37.47 -	clipped = clip_factor > F_ALMOST_ZERO;						// clipped in X or Y
   37.48 -	LLVector3d final_region_pos = LLVector3d(region_coord) - (delta_pos * clip_factor);
   37.49 -	clipped |= final_region_pos.mdV[VX] < -F_ALMOST_ZERO || final_region_pos.mdV[VX] > (F64)(region_width - F_ALMOST_ZERO);
   37.50 -	clipped |= final_region_pos.mdV[VY] < -F_ALMOST_ZERO || final_region_pos.mdV[VY] > (F64)(region_width - F_ALMOST_ZERO);
   37.51 -	clipped |= final_region_pos.mdV[VZ] < -F_ALMOST_ZERO || final_region_pos.mdV[VZ] > (F64)(LLWorld::getInstance()->getRegionMaxHeight() - F_ALMOST_ZERO); // if actually clipping
   37.52 -	// Final sanity check - don't allow positions more than clamp_range out of region.
   37.53 -	F64 clamp_range = region_width / 2.0; // half a region width
   37.54 -	final_region_pos.mdV[VX] = llclamp(final_region_pos.mdV[VX], -clamp_range,
   37.55 -									   (F64)(region_width + clamp_range));
   37.56 -	final_region_pos.mdV[VY] = llclamp(final_region_pos.mdV[VY], -clamp_range,
   37.57 -									   (F64)(region_width + clamp_range));
   37.58 -	final_region_pos.mdV[VZ] = llclamp(final_region_pos.mdV[VZ], 0.0,
   37.59 -									   (F64)(LLWorld::getInstance()->getRegionMaxHeight() - F_ALMOST_ZERO));
   37.60 +	LLVector3d final_region_pos;
   37.61 +	if (fsExperimentalRegionCrossingMovementFix)
   37.62 +	{
   37.63 +		// True if clipped. Caller needs to know, because it will kill velocity if there's clipping
   37.64 +		// Don't do this by comparing floating point numbers for equality. That has roundoff problems.
   37.65 +		clipped = clip_factor > F_ALMOST_ZERO;						// clipped in X or Y
   37.66 +		final_region_pos = LLVector3d(region_coord) - (delta_pos * clip_factor);
   37.67 +		clipped |= final_region_pos.mdV[VX] < -F_ALMOST_ZERO || final_region_pos.mdV[VX] > (F64)(region_width - F_ALMOST_ZERO);
   37.68 +		clipped |= final_region_pos.mdV[VY] < -F_ALMOST_ZERO || final_region_pos.mdV[VY] > (F64)(region_width - F_ALMOST_ZERO);
   37.69 +		clipped |= final_region_pos.mdV[VZ] < -F_ALMOST_ZERO || final_region_pos.mdV[VZ] > (F64)(LLWorld::getInstance()->getRegionMaxHeight() - F_ALMOST_ZERO); // if actually clipping
   37.70 +		// Final sanity check - don't allow positions more than clamp_range out of region.
   37.71 +		F64 clamp_range = region_width / 2.0; // half a region width
   37.72 +		final_region_pos.mdV[VX] = llclamp(final_region_pos.mdV[VX], -clamp_range,
   37.73 +			(F64)(region_width + clamp_range));
   37.74 +		final_region_pos.mdV[VY] = llclamp(final_region_pos.mdV[VY], -clamp_range,
   37.75 +			(F64)(region_width + clamp_range));
   37.76 +		final_region_pos.mdV[VZ] = llclamp(final_region_pos.mdV[VZ], 0.0,
   37.77 +			(F64)(LLWorld::getInstance()->getRegionMaxHeight() - F_ALMOST_ZERO));
   37.78 +	}
   37.79 +	else
   37.80 +	{
   37.81 +		// clamp to within region dimensions
   37.82 +		final_region_pos = LLVector3d(region_coord) - (delta_pos * clip_factor);
   37.83 +		final_region_pos.mdV[VX] = llclamp(final_region_pos.mdV[VX], 0.0,
   37.84 +										   (F64)(region_width - F_ALMOST_ZERO));
   37.85 +		final_region_pos.mdV[VY] = llclamp(final_region_pos.mdV[VY], 0.0,
   37.86 +										   (F64)(region_width - F_ALMOST_ZERO));
   37.87 +		final_region_pos.mdV[VZ] = llclamp(final_region_pos.mdV[VZ], 0.0,
   37.88 +										   (F64)(LLWorld::getInstance()->getRegionMaxHeight() - F_ALMOST_ZERO));
   37.89 +	}
   37.90  	// </FS>
   37.91  	return regionp->getPosGlobalFromRegion(LLVector3(final_region_pos));
   37.92  }
    38.1 --- a/indra/newview/llxmlrpctransaction.cpp	Wed Mar 21 20:23:52 2018 +0100
    38.2 +++ b/indra/newview/llxmlrpctransaction.cpp	Sat Apr 07 14:59:44 2018 +0200
    38.3 @@ -367,7 +367,7 @@
    38.4  	mCertStore = gSavedSettings.getString("CertStore");
    38.5  
    38.6  	httpOpts->setSSLVerifyPeer( vefifySSLCert );
    38.7 -	httpOpts->setSSLVerifyHost( vefifySSLCert ? 2 : 0);
    38.8 +	httpOpts->setSSLVerifyHost( vefifySSLCert );
    38.9  
   38.10  	// LLRefCounted starts with a 1 ref, so don't add a ref in the smart pointer
   38.11  	httpHeaders = LLCore::HttpHeaders::ptr_t(new LLCore::HttpHeaders());
    39.1 --- a/indra/newview/skins/default/xui/en/floater_my_appearance.xml	Wed Mar 21 20:23:52 2018 +0100
    39.2 +++ b/indra/newview/skins/default/xui/en/floater_my_appearance.xml	Sat Apr 07 14:59:44 2018 +0200
    39.3 @@ -13,7 +13,7 @@
    39.4    reuse_instance="true"
    39.5    title="Appearance"
    39.6    min_height="200"
    39.7 -  min_width="325"
    39.8 +  min_width="351"
    39.9    width="333">
   39.10      <panel
   39.11        top="18"
    40.1 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml	Wed Mar 21 20:23:52 2018 +0100
    40.2 +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml	Sat Apr 07 14:59:44 2018 +0200
    40.3 @@ -33,7 +33,7 @@
    40.4   height="22"
    40.5   layout="topleft"
    40.6   name="navigation_bar_visibility_panel"
    40.7 - visibility_control="ShowNavbarNavigationPanel"
    40.8 + visibility_control="FSInternalShowNavbarNavigationPanel"
    40.9   auto_resize="false"
   40.10   width="1024">
   40.11  
   40.12 @@ -216,7 +216,7 @@
   40.13   height="15"
   40.14   layout="topleft"
   40.15   name="favorites_bar_visibility_panel"
   40.16 - visibility_control="ShowNavbarFavoritesPanel"
   40.17 + visibility_control="FSInternalShowNavbarFavoritesPanel"
   40.18   auto_resize="false">
   40.19  
   40.20    <favorites_bar
    41.1 --- a/indra/newview/skins/metaharper/xui/en/panel_navigation_bar.xml	Wed Mar 21 20:23:52 2018 +0100
    41.2 +++ b/indra/newview/skins/metaharper/xui/en/panel_navigation_bar.xml	Sat Apr 07 14:59:44 2018 +0200
    41.3 @@ -33,7 +33,7 @@
    41.4   height="22"
    41.5   layout="topleft"
    41.6   name="navigation_bar_visibility_panel"
    41.7 - visibility_control="ShowNavbarNavigationPanel"
    41.8 + visibility_control="FSInternalShowNavbarNavigationPanel"
    41.9   auto_resize="false"
   41.10   width="1024">
   41.11  
   41.12 @@ -216,7 +216,7 @@
   41.13   height="15"
   41.14   layout="topleft"
   41.15   name="favorites_bar_visibility_panel"
   41.16 - visibility_control="ShowNavbarFavoritesPanel"
   41.17 + visibility_control="FSInternalShowNavbarFavoritesPanel"
   41.18   auto_resize="true">
   41.19  
   41.20    <favorites_bar
    42.1 --- a/indra/newview/skins/starlight/xui/en/panel_navigation_bar.xml	Wed Mar 21 20:23:52 2018 +0100
    42.2 +++ b/indra/newview/skins/starlight/xui/en/panel_navigation_bar.xml	Sat Apr 07 14:59:44 2018 +0200
    42.3 @@ -36,7 +36,7 @@
    42.4   height="24"
    42.5   layout="topleft"
    42.6   name="navigation_bar_visibility_panel"
    42.7 - visibility_control="ShowNavbarNavigationPanel"
    42.8 + visibility_control="FSInternalShowNavbarNavigationPanel"
    42.9   width="1024"
   42.10   auto_resize="false">
   42.11  
   42.12 @@ -227,7 +227,7 @@
   42.13   height="15"
   42.14   layout="topleft"
   42.15   name="favorites_bar_visibility_panel"
   42.16 - visibility_control="ShowNavbarFavoritesPanel"
   42.17 + visibility_control="FSInternalShowNavbarFavoritesPanel"
   42.18   auto_resize="false">
   42.19  
   42.20    <favorites_bar
    43.1 --- a/indra/newview/skins/starlightcui/xui/en/panel_navigation_bar.xml	Wed Mar 21 20:23:52 2018 +0100
    43.2 +++ b/indra/newview/skins/starlightcui/xui/en/panel_navigation_bar.xml	Sat Apr 07 14:59:44 2018 +0200
    43.3 @@ -35,7 +35,7 @@
    43.4   height="24"
    43.5   layout="topleft"
    43.6   name="navigation_bar_visibility_panel"
    43.7 - visibility_control="ShowNavbarNavigationPanel"
    43.8 + visibility_control="FSInternalShowNavbarNavigationPanel"
    43.9   width="1024"
   43.10   auto_resize="false">
   43.11  
   43.12 @@ -225,7 +225,7 @@
   43.13   height="15"
   43.14   layout="topleft"
   43.15   name="favorites_bar_visibility_panel"
   43.16 - visibility_control="ShowNavbarFavoritesPanel"
   43.17 + visibility_control="FSInternalShowNavbarFavoritesPanel"
   43.18   auto_resize="false">
   43.19  
   43.20    <favorites_bar
    44.1 --- a/indra/newview/skins/vintage/xui/en/floater_fs_nearby_chat.xml	Wed Mar 21 20:23:52 2018 +0100
    44.2 +++ b/indra/newview/skins/vintage/xui/en/floater_fs_nearby_chat.xml	Sat Apr 07 14:59:44 2018 +0200
    44.3 @@ -28,13 +28,13 @@
    44.4      animate="false"
    44.5      follows="top|left"
    44.6      clip="false"
    44.7 -    height="9"
    44.8 +    height="27"
    44.9      width="200"
   44.10      left_pad="0"
   44.11      layout="topleft"
   44.12      orientation="horizontal"
   44.13      name="ls_control_panel"
   44.14 -    top="18"
   44.15 +    top="0"
   44.16      left="3">
   44.17      <layout_panel
   44.18        name="lp_translate_btn"
    45.1 --- a/indra/newview/viewer_manifest.py	Wed Mar 21 20:23:52 2018 +0100
    45.2 +++ b/indra/newview/viewer_manifest.py	Sat Apr 07 14:59:44 2018 +0200
    45.3 @@ -1957,12 +1957,16 @@
    45.4          with self.prefix(src=os.path.join(os.pardir, 'packages', 'lib', 'release'), dst="lib"):
    45.5              self.path( "libcef.so" )
    45.6              self.path( "libllceflib.so" )
    45.7 +            
    45.8 +        with self.prefix(src=os.path.join(os.pardir, 'packages', 'lib', 'release', 'swiftshader'), dst=os.path.join("bin", "swiftshader") ):
    45.9 +            self.path( "*.so" )
   45.10  
   45.11          with self.prefix(src=os.path.join(os.pardir, 'packages', 'bin', 'release'), dst="bin"):
   45.12              self.path( "chrome-sandbox" )
   45.13 -            self.path( "llceflib_host" )
   45.14 +            self.path( "dullahan_host" )
   45.15              self.path( "natives_blob.bin" )
   45.16              self.path( "snapshot_blob.bin" )
   45.17 +            self.path( "v8_context_snapshot.bin" )
   45.18              self.path( "libffmpegsumo.so" )
   45.19  
   45.20          with self.prefix(src=os.path.join(os.pardir, 'packages', 'resources'), dst="bin"):
   45.21 @@ -2159,7 +2163,7 @@
   45.22                  [os.path.join(self.get_dst_prefix(), dir) for dir in ('bin', 'lib')] +
   45.23                  # <FS:Ansariel> Remove VMP
   45.24                  #['-type', 'f', '!', '-name', '*.py', '!', '-name', 'SL_Launcher',
   45.25 -                ['-type', 'f', '!',
   45.26 +                ['-type', 'f', "!", "-name", "*.dat", "!", "-name", "*.pak", "!", "-name", "*.bin",
   45.27                  # </FS:Ansariel> Remove VMP
   45.28                   '!', '-name', 'update_install', '-exec', 'strip', '-S', '{}', ';'])
   45.29  

mercurial