diff options
| author | Steven Bennetts <steve@lindenlab.com> | 2008-03-15 01:18:27 +0000 | 
|---|---|---|
| committer | Steven Bennetts <steve@lindenlab.com> | 2008-03-15 01:18:27 +0000 | 
| commit | 672a76d0ea08a0d0fc824e103ee4c4242b7e03ec (patch) | |
| tree | b623a9c884383ad75ed755b2c373db2b90643671 /indra/newview | |
| parent | 04611efae8a3291ceba8a29dd920bdae0d404830 (diff) | |
reverting premature commit at 82410.
Diffstat (limited to 'indra/newview')
45 files changed, 1682 insertions, 12378 deletions
diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml deleted file mode 100644 index 01c590c1f3..0000000000 --- a/indra/newview/app_settings/cmd_line.xml +++ /dev/null @@ -1,323 +0,0 @@ -<?xml version="1.0"?> -<llsd> -  <map> -    <key>help</key> -    <map> -      <key>desc</key> -      <string>display this help message</string> - -      <key>short</key> -      <string>h</string> -    </map> - -    <key>port</key> -    <map> -      <key>count</key> -      <integer>1</integer> -      <key>map-to</key> -      <string>UserConnectionPort</string> -    </map> - -    <key>drop</key> -    <map> -      <key>count</key> -      <integer>1</integer> -      <key>map-to</key> -      <string>PacketDropPercentage</string> -    </map> - -    <key>inbw</key> -    <map> -      <key>count</key> -      <integer>1</integer> -      <key>map-to</key> -      <string>InBandwidth</string> -    </map> - -    <key>outbw</key> -    <map> -      <key>count</key> -      <integer>1</integer> -      <key>map-to</key> -      <string>OutBandwidth</string> -    </map> - -    <key>grid</key> -    <map> -      <key>desc</key> -      <string>Specify the name of the grid, local, or an IP address to connect to.</string> -      <key>count</key> -      <integer>1</integer> -      <key>map-to</key> -      <string>GridChoice</string> -    </map> - -    <key>loginuri</key> -    <map> -      <key>desc</key> -      <string>login server and CGI script to use</string> -      <key>count</key> -      <integer>1</integer> -      <key>compose</key> -      <boolean>true</boolean> -      <key>map-to</key> -      <string>LoginURI</string> -    </map> - -    <key>helperuri</key> -    <map> -      <key>desc</key> -      <string>helper web CGI prefix to use</string> -      <key>count</key> -      <integer>1</integer> -      <key>map-to</key> -      <string>HelperURI</string> -    </map> - -    <key>debugviews</key> -    <map> -      <key>map-to</key> -      <string>DebugViews</string> -    </map> - -    <key>skin</key> -    <map> -      <key>desc</key> -      <string>ui/branding skin folder to use</string> -      <key>count</key> -      <integer>1</integer> -      <key>map-to</key> -      <string>SkinFolder</string> -    </map> - -    <key>autologin</key> -    <map> -      <key>desc</key> -      <string>log in as last saved user</string> -      <key>map-to</key> -      <string>AutoLogin</string> -    </map> - -    <key>quitafter</key> -    <map> -      <key>count</key> -      <integer>1</integer> -      <key>map-to</key> -      <string>QuitAfterSeconds</string> -    </map> - -    <key>rotate</key> -    <map> -      <key>map-to</key> -      <string>RotateRight</string> -    </map> - -    <key>noaudio</key> -    <map> -      <key>map-to</key> -      <string>NoAudio</string> -    </map> - -    <key>nosound</key> -    <map> -      <key>map-to</key> -      <string>NoAudio</string> -    </map> - -    <key>noprobe</key> -    <map> -      <key>map-to</key> -      <string>NoHardwareProbe</string> -    </map> - -    <key>noquicktime</key> -    <map> -      <key>map-to</key> -      <string>NoQuickTime</string> -    </map> - -    <key>nopreload</key> -    <map> -      <key>map-to</key> -      <string>NoPreload</string> -    </map> - -    <key>purge</key> -    <map> -      <key>desc</key> -      <string>Delete files in the cache.</string> -      <key>map-to</key> -      <string>PurgeCacheOnNextStartup</string> -    </map> - -    <key>noinvlib</key> -    <map> -      <key>desc</key> -      <string>Do not request the inventory library.</string> -      <key>map-to</key> -      <string>NoInventoryLibrary</string> -    </map> - -    <key>logfile</key> -    <map> -      <key>count</key> -      <integer>1</integer> -      <key>map-to</key> -      <string>UserLogFile</string> -    </map> - -    <key>setdefault</key> -    <map> -      <key>desc</key> -      <string> -        "specify the value of a particular\n -        configuration variable which can be\n -        overridden by settings.xml\n" -      </string> -      <key>count</key> -      <integer>2</integer> -      <!-- Special case. Mapped to settings procedurally. --> -    </map> - -    <key>set</key> -    <map> -      <key>desc</key> -      <string> -        "specify the value of a particular\n -        configuration variable that\n -        overrides all other settings\n" -      </string> -      <key>count</key> -      <integer>2</integer> -      <!-- Special case. Mapped to settings procedurally. --> -    </map> - -    <key>settings</key> -    <map> -      <key>desc</key> -      <string>Specify the filename of a configuration file.</string> -      <key>count</key> -      <integer>1</integer> -      <!-- Special case. Mapped to settings procedurally. --> -    </map> - -    <key>login</key> -    <map> -      <key>desc</key> -      <string>3 tokens: first, last and password</string> -      <key>count</key> -      <integer>3</integer> -      <key>map-to</key> -      <string>UserLoginInfo</string> -    </map> - -    <key>god</key> -    <map> -      <key>desc</key> -      <string>Log in a god if you have god access.</string> -      <key>map-to</key> -      <string>ConnectAsGod</string> -    </map> - -    <key>console</key> -    <map> -      <key>count</key> -      <integer>1</integer> -      <key>map-to</key> -      <string>ShowConsoleWindow</string> -    </map> - -    <key>safe</key> -    <map> -      <key>desc</key> -      <string>Reset preferences, run in safe mode.</string> -      <key>map-to</key> -      <string>SafeMode</string> -    </map> - -    <key>multiple</key>		   -    <map> -      <key>desc</key> -      <string>Allow multple viewers.</string> -      <key>count</key> -      <integer>1</integer> -      <key>map-to</key> -      <string>AllowMultipleViewers</string> -    </map> - -    <key>novoice</key> -    <map> -      <key>desc</key> -      <string>Disable voice.</string> -      <key>map-to</key> -      <string>CmdLineDisableVoice</string> -    </map> - -    <key>url</key> -    <map> -      <key>desc</key> -      <string>Startup location</string>             -      <key>count</key> -      <integer>1</integer> -      <key>last_option</key> -      <boolean>true</boolean> -      <!-- Special case. Not mapped to a setting. --> -    </map> - -    <key>slurl</key> -    <map> -      <key>desc</key> -      <string>Startup SLurl</string> -      <key>count</key> -      <integer>1</integer> -      <key>positional</key> -      <boolean>true</boolean> -      <key>last_option</key> -      <boolean>true</boolean> -      <!-- Special case. Not mapped to a setting. --> -    </map> - -    <key>ignorepixeldepth</key> -    <map> -      <key>desc</key> -      <string>Ignore pixel depth settings.</string> -      <key>map-to</key> -      <string>IgnorePixelDepth</string> -    </map> - -    <key>cooperative</key> -    <map> -      <key>desc</key> -      <string>Yield some idle time to local host.</string> -      <key>count</key> -      <integer>1</integer> -      <key>map-to</key> -      <string>YieldTime</string> -    </map> - -    <key>no-verify-ssl-cert</key> -    <map> -      <key>map-to</key> -      <string>NoVerifySSLCert</string> -    </map> - -    <key>channel</key> -    <map> -      <key>count</key> -      <integer>1</integer> -      <key>map-to</key> -      <string>VersionChannelName</string> -    </map> - -    <key>loginpage</key> -    <map> -      <key>desc</key> -      <string>Login authentication page to use.</string> -      <key>count</key> -      <integer>1</integer> -      <key>map-to</key> -      <string>LoginPage</string> -    </map> - -  </map> -</llsd> diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml deleted file mode 100644 index 012bc9ec10..0000000000 --- a/indra/newview/app_settings/settings.xml +++ /dev/null @@ -1,9604 +0,0 @@ -<llsd> -    <map> -    <key>AdvanceSnapshot</key> -        <map> -        <key>Comment</key> -            <string>Display advanced parameter settings in snaphot interface</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>AFKTimeout</key> -        <map> -        <key>Comment</key> -            <string>Time before automatically setting AFK (away from keyboard) mode (seconds)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>300</real> -        </map> -    <key>AgentChatColor</key> -        <map> -        <key>Comment</key> -            <string>Color of chat messages from other residents</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>1</real> -                <real>1</real> -                <real>1</real> -                <real>1</real> -            </array> -        </map> -    <key>AllowIdleAFK</key> -        <map> -        <key>Comment</key> -            <string>Automatically set AFK (away from keyboard) mode when idle</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>AllowMultipleViewers</key> -        <map> -        <key>Comment</key> -            <string>Allow multiple viewers.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>AnimateTextures</key> -        <map> -        <key>Comment</key> -            <string>Enable texture animation (debug)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>AnimationDebug</key> -        <map> -        <key>Comment</key> -            <string>Show active animations in a bubble above avatars head</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>AppearanceCameraMovement</key> -        <map> -        <key>Comment</key> -            <string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ApplyColorImmediately</key> -        <map> -        <key>Comment</key> -            <string>Preview selections in color picker immediately</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ApplyTextureImmediately</key> -        <map> -        <key>Comment</key> -            <string>Preview selections in texture picker immediately</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ArrowKeysMoveAvatar</key> -        <map> -        <key>Comment</key> -            <string>While cursor is in chat entry box, arrow keys still control your avatar</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>AskedAboutCrashReports</key> -        <map> -        <key>Comment</key> -            <string>Turns off dialog asking if you want to enable crash reporting</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>AsyncKeyboard</key> -        <map> -        <key>Comment</key> -            <string>Improves responsiveness to keyboard input when at low framerates</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>AuctionShowFence</key> -        <map> -        <key>Comment</key> -            <string>When auctioning land, include parcel boundary marker in snapshot</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>AudioLevelAmbient</key> -        <map> -        <key>Comment</key> -            <string>Audio level of environment sounds</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.5</real> -        </map> -    <key>AudioLevelDistance</key> -        <map> -        <key>Comment</key> -            <string>Scale factor for audio engine (multiple of world scale, 2.0 = audio falls off twice as fast)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>AudioLevelDoppler</key> -        <map> -        <key>Comment</key> -            <string>Scale of doppler effect on moving audio sources (1.0 = normal, <1.0 = diminished doppler effect, >1.0 = enhanced doppler effect)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>AudioLevelMaster</key> -        <map> -        <key>Comment</key> -            <string>Master audio level, or overall volume</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>AudioLevelMedia</key> -        <map> -        <key>Comment</key> -            <string>Audio level of Quicktime movies</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>AudioLevelMic</key> -        <map> -        <key>Comment</key> -            <string>Audio level of microphone input</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>AudioLevelMusic</key> -        <map> -        <key>Comment</key> -            <string>Audio level of streaming music</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>AudioLevelRolloff</key> -        <map> -        <key>Comment</key> -            <string>Controls the distance-based dropoff of audio volume (fraction or multiple of default audio rolloff)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>AudioLevelSFX</key> -        <map> -        <key>Comment</key> -            <string>Audio level of in-world sound effects</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>AudioLevelUI</key> -        <map> -        <key>Comment</key> -            <string>Audio level of UI sound effects</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.5</real> -        </map> -    <key>AudioLevelVoice</key> -        <map> -        <key>Comment</key> -            <string>Audio level of voice chat</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.5</real> -        </map> -    <key>AudioStreamingMusic</key> -        <map> -        <key>Comment</key> -            <string>Enable streaming audio</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>AudioStreamingVideo</key> -        <map> -        <key>Comment</key> -            <string>Enable streaming video</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>AutoAcceptNewInventory</key> -        <map> -        <key>Comment</key> -            <string>Automatically accept new notecards/textures/landmarks</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>AutoLoadWebProfiles</key> -        <map> -        <key>Comment</key> -            <string>Automatically load ALL profile webpages without asking first.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>AutoLogin</key> -        <map> -        <key>Comment</key> -            <string>Login automatically using last username/password combination</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>AutoMimeDiscovery</key> -        <map> -          <key>Comment</key> -              <string>Enable viewer mime type discovery of media URLs</string> -          <key>Persist</key> -              <integer>1</integer> -          <key>Type</key> -              <string>Boolean</string> -          <key>Value</key> -              <integer>0</integer> -        </map> -    <key>AutoPilotLocksCamera</key> -        <map> -        <key>Comment</key> -            <string>Keep camera position locked when avatar walks to selected position</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>AutoSnapshot</key> -        <map> -        <key>Comment</key> -            <string>Update snapshot when camera stops moving, or any parameter changes</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>AutomaticFly</key> -        <map> -        <key>Comment</key> -            <string>Fly by holding jump key or using "Fly" command (FALSE = fly by using "Fly" command only)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>AvatarBacklight</key> -        <map> -        <key>Comment</key> -            <string>Add rim lighting to avatar rendering to approximate shininess of skin</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>AvatarCompositeLimit</key> -        <map> -        <key>Comment</key> -            <string>Maximum number of avatars to display appearance changes on the fly</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>5</integer> -        </map> -    <key>AvatarPickerSortOrder</key> -        <map> -        <key>Comment</key> -            <string>Specifies sort key for textures in avatar picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>U32</string> -        <key>Value</key> -            <integer>2</integer> -        </map> -    <key>AvatarSex</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>U32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>BackgroundChatColor</key> -        <map> -        <key>Comment</key> -            <string>Color of chat bubble background</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0</real> -                <real>0</real> -                <real>0</real> -                <real>1</real> -            </array> -        </map> -    <key>BackgroundYieldTime</key> -        <map> -        <key>Comment</key> -            <string>Amount of time to yield every frame to other applications when SL is not the foreground window (milliseconds)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>40</integer> -        </map> -    <key>BackwardBtnRect</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>45</integer> -                <integer>29</integer> -                <integer>66</integer> -                <integer>4</integer> -            </array> -        </map> -    <key>BasicHelpRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for help window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>404</integer> -                <integer>467</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>BeaconAlwaysOn</key> -        <map> -        <key>Comment</key> -            <string>Beacons / highlighting always on</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>BrowserHomePage</key> -        <map> -        <key>Comment</key> -            <string>[NOT USED]</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>http://www.secondlife.com</string> -        </map> -    <key>BrowserProxyAddress</key> -        <map> -        <key>Comment</key> -            <string>Address for the Web Proxy]</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>BrowserProxyEnabled</key> -        <map> -        <key>Comment</key> -            <string>Use Web Proxy</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>BrowserProxyExclusions</key> -        <map> -        <key>Comment</key> -            <string>[NOT USED]</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>BrowserProxyPort</key> -        <map> -        <key>Comment</key> -            <string>Port for Web Proxy</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>3128</integer> -        </map> -    <key>BrowserProxySocks45</key> -        <map> -        <key>Comment</key> -            <string>[NOT USED]</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>5</integer> -        </map> -    <key>BuildBtnState</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ButtonFlashCount</key> -        <map> -        <key>Comment</key> -            <string>Number of flashes after which flashing buttons stay lit up</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>3</integer> -        </map> -    <key>ButtonFlashRate</key> -        <map> -        <key>Comment</key> -            <string>Frequency at which buttons flash (hz)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>2</real> -        </map> -    <key>ButtonHPad</key> -        <map> -        <key>Comment</key> -            <string>Default horizontal spacing between buttons (pixels)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>10</integer> -        </map> -    <key>ButtonHeight</key> -        <map> -        <key>Comment</key> -            <string>Default height for normal buttons (pixels)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>20</integer> -        </map> -    <key>ButtonHeightSmall</key> -        <map> -        <key>Comment</key> -            <string>Default height for small buttons (pixels)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>16</integer> -        </map> -    <key>ButtonVPad</key> -        <map> -        <key>Comment</key> -            <string>Default vertical spacing between buttons (pixels)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>CacheLocation</key> -        <map> -        <key>Comment</key> -            <string>Controls the location of the local disk cache</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>CacheSize</key> -        <map> -        <key>Comment</key> -            <string>Controls amount of hard drive space reserved for local file caching in MB</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>U32</string> -        <key>Value</key> -            <integer>500</integer> -        </map> -    <key>CacheValidateCounter</key> -        <map> -        <key>Comment</key> -            <string>Used to distribute cache validation</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>U32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>CameraOffset</key> -        <map> -        <key>Comment</key> -            <string>Render with camera offset from view frustum (rendering debug)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>CameraOffsetBuild</key> -        <map> -        <key>Comment</key> -            <string>Default camera position relative to focus point when entering build mode</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Vector3</string> -        <key>Value</key> -            <array> -                <real>-6</real> -                <real>0</real> -                <real>6</real> -            </array> -        </map> -    <key>CameraOffsetDefault</key> -        <map> -        <key>Comment</key> -            <string>Default camera offset from avatar</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Vector3</string> -        <key>Value</key> -            <array> -                <real>-3</real> -                <real>0</real> -                <real>0.75</real> -            </array> -        </map> -    <key>CameraPositionSmoothing</key> -        <map> -        <key>Comment</key> -            <string>Smooths camera position over time</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1.0</real> -        </map> -    <key>CameraPosOnLogout</key> -        <map> -        <key>Comment</key> -            <string>Camera position when last logged out (global coordinates)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Vector3D</string> -        <key>Value</key> -            <array> -                <real>0</real> -                <real>0</real> -                <real>0</real> -            </array> -        </map> -    <key>CameraMouseWheelZoom</key> -        <map> -        <key>Comment</key> -            <string>Camera zooms in and out with mousewheel</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ChatBarStealsFocus</key> -        <map> -        <key>Comment</key> -            <string>Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ChatBubbleOpacity</key> -        <map> -        <key>Comment</key> -            <string>Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.5</real> -        </map> -    <key>ChatFontSize</key> -        <map> -        <key>Comment</key> -            <string>Size of chat text in chat console (0 = small, 1 = big)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ChatFullWidth</key> -        <map> -        <key>Comment</key> -            <string>Chat console takes up full width of SL window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ChatHistoryTornOff</key> -        <map> -        <key>Comment</key> -            <string>Show chat history window separately from Communicate window.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ChatOnlineNotification</key> -        <map> -        <key>Comment</key> -            <string>Provide notifications for when friend log on and off of SL</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ChatPersistTime</key> -        <map> -        <key>Comment</key> -            <string>Time for which chat stays visible in console (seconds)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>15</real> -        </map> -    <key>ChatShowTimestamps</key> -        <map> -        <key>Comment</key> -            <string>Show timestamps in chat</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ChatVisible</key> -        <map> -        <key>Comment</key> -            <string>Chat bar is visible</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ChatterboxRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for chatterbox window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>400</integer> -                <integer>350</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>CheesyBeacon</key> -        <map> -        <key>Comment</key> -            <string>Enable cheesy beacon effects</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ClientSettingsFile</key> -        <map> -        <key>Comment</key> -            <string>Persisted client settings file name (per install).</string> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>CloseChatOnReturn</key> -        <map> -        <key>Comment</key> -            <string>Close chat after hitting return</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>CloseSnapshotOnKeep</key> -        <map> -        <key>Comment</key> -            <string>Close snapshot window after saving snapshot</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ClothingBtnState</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>CmdLineDisableVoice</key> -        <map> -        <key>Comment</key> -            <string>Disable Voice.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ColorPaletteEntry01</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0</real> -                <real>0</real> -                <real>0</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry02</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0.5</real> -                <real>0.5</real> -                <real>0.5</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry03</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0.5</real> -                <real>0</real> -                <real>0</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry04</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0.5</real> -                <real>0.5</real> -                <real>0</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry05</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0</real> -                <real>0.5</real> -                <real>0</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry06</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0</real> -                <real>0.5</real> -                <real>0.5</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry07</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0</real> -                <real>0</real> -                <real>0.5</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry08</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0.5</real> -                <real>0</real> -                <real>0.5</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry09</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0.5</real> -                <real>0.5</real> -                <real>0</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry10</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0</real> -                <real>0.25</real> -                <real>0.25</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry11</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0</real> -                <real>0.5</real> -                <real>1</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry12</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0</real> -                <real>0.25</real> -                <real>0.5</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry13</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0.5</real> -                <real>0</real> -                <real>1</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry14</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0.5</real> -                <real>0.25</real> -                <real>0</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry15</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>1</real> -                <real>1</real> -                <real>1</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry16</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>1</real> -                <real>1</real> -                <real>1</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry17</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>1</real> -                <real>1</real> -                <real>1</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry18</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0.75</real> -                <real>0.75</real> -                <real>0.75</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry19</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>1</real> -                <real>0</real> -                <real>0</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry20</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>1</real> -                <real>1</real> -                <real>0</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry21</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0</real> -                <real>1</real> -                <real>0</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry22</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0</real> -                <real>1</real> -                <real>1</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry23</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0</real> -                <real>0</real> -                <real>1</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry24</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>1</real> -                <real>0</real> -                <real>1</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry25</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>1</real> -                <real>1</real> -                <real>0.5</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry26</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0</real> -                <real>1</real> -                <real>0.5</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry27</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0.5</real> -                <real>1</real> -                <real>1</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry28</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0.5</real> -                <real>0.5</real> -                <real>1</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry29</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>1</real> -                <real>0</real> -                <real>0.5</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry30</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>1</real> -                <real>0.5</real> -                <real>0</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry31</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>1</real> -                <real>1</real> -                <real>1</real> -                <real>1</real> -            </array> -        </map> -    <key>ColorPaletteEntry32</key> -        <map> -        <key>Comment</key> -            <string>Color picker palette entry</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>1</real> -                <real>1</real> -                <real>1</real> -                <real>1</real> -            </array> -        </map> -    <key>ColumnHeaderDropDownDelay</key> -        <map> -        <key>Comment</key> -            <string>Time in seconds of mouse click before column header shows sort options list</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.300000011920928955078125</real> -        </map> -    <key>CompileOutputRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for script Recompile Everything output window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>400</integer> -                <integer>300</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>CompressSnapshotsToDisk</key> -        <map> -        <key>Comment</key> -            <string>Compress snapshots saved to disk (Using JPEG 2000)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ConnectAsGod</key> -        <map> -        <key>Comment</key> -            <string>Log in a god if you have god access.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ConnectionPort</key> -        <map> -        <key>Comment</key> -            <string>Custom connection port number</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>U32</string> -        <key>Value</key> -            <integer>13000</integer> -        </map> -    <key>ConnectionPortEnabled</key> -        <map> -        <key>Comment</key> -            <string>Use the custom connection port?</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ConsoleBackgroundOpacity</key> -        <map> -        <key>Comment</key> -            <string>Opacity of chat console (0.0 = completely transparent, 1.0 = completely opaque)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.4000000059604644775390625</real> -        </map> -    <key>ConsoleBufferSize</key> -        <map> -        <key>Comment</key> -            <string>Size of chat console history (lines of chat)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>40</integer> -        </map> -    <key>ConsoleMaxLines</key> -        <map> -        <key>Comment</key> -            <string>Max number of lines of chat text visible in console.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>40</integer> -        </map> -    <key>ContactsTornOff</key> -        <map> -        <key>Comment</key> -            <string>Show contacts window separately from Communicate window.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>CookiesEnabled</key> -        <map> -        <key>Comment</key> -            <string>Accept cookies from Web sites?</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>CrashLogBehavior</key> -        <map> -        <key>Comment</key> -            <string>Controls behavior when viewer (0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report)</string> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>CreateToolCopyCenters</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>CreateToolCopyRotates</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>CreateToolCopySelection</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>CreateToolKeepSelected</key> -        <map> -        <key>Comment</key> -            <string>After using create tool, keep the create tool active</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>CustomServer</key> -        <map> -        <key>Comment</key> -            <string>Specifies IP address or hostname of grid to which you connect</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>DebugBeaconLineWidth</key> -        <map> -        <key>Comment</key> -            <string>Size of lines for Debug Beacons</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>DebugInventoryFilters</key> -        <map> -        <key>Comment</key> -            <string>Turn on debugging display for inventory filtering</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>DebugPermissions</key> -        <map> -        <key>Comment</key> -            <string>Log permissions for selected inventory items</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>DebugShowColor</key> -        <map> -        <key>Comment</key> -            <string>Show color under cursor</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>DebugShowRenderInfo</key> -        <map> -        <key>Comment</key> -            <string>Show depth buffer contents</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>DebugShowTime</key> -        <map> -        <key>Comment</key> -            <string>Show depth buffer contents</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>DebugViews</key> -        <map> -        <key>Comment</key> -            <string>Display debugging info for views.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>DebugWindowProc</key> -        <map> -        <key>Comment</key> -            <string>Log windows messages</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>DefaultObjectTexture</key> -        <map> -        <key>Comment</key> -            <string>Texture used as 'Default' in texture picker. (UUID texture reference)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>89556747-24cb-43ed-920b-47caed15465f</string> -        </map> -    <key>DisableCameraConstraints</key> -        <map> -        <key>Comment</key> -            <string>Disable the normal bounds put on the camera by avatar position</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>DisableRendering</key> -        <map> -        <key>Comment</key> -            <string>Disable GL rendering and GUI (load testing)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>DisableVerticalSync</key> -        <map> -        <key>Comment</key> -            <string>Update frames as fast as possible (FALSE = update frames between display scans)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>DisplayAvatarAgentTarget</key> -        <map> -        <key>Comment</key> -            <string>Show avatar positioning locators (animation debug)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>DisplayChat</key> -        <map> -        <key>Comment</key> -            <string>Display Latest Chat message on LCD</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>DisplayDebug</key> -        <map> -        <key>Comment</key> -            <string>Display Network Information on LCD</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>DisplayDebugConsole</key> -        <map> -        <key>Comment</key> -            <string>Display Console Debug Information on LCD</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>DisplayIM</key> -        <map> -        <key>Comment</key> -            <string>Display Latest IM message on LCD</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>DisplayLinden</key> -        <map> -        <key>Comment</key> -            <string>Display Account Information on LCD</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>DisplayRegion</key> -        <map> -        <key>Comment</key> -            <string>Display Location information on LCD</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>DisplayTimecode</key> -        <map> -        <key>Comment</key> -            <string>Display timecode on screen</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>Disregard128DefaultDrawDistance</key> -        <map> -        <key>Comment</key> -            <string>Whether to use the auto default to 128 draw distance</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>Disregard96DefaultDrawDistance</key> -        <map> -        <key>Comment</key> -            <string>Whether to use the auto default to 96 draw distance</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>DoubleClickAutoPilot</key> -        <map> -        <key>Comment</key> -            <string>Enable double-click auto pilot</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>DragAndDropToolTipDelay</key> -        <map> -        <key>Comment</key> -            <string>Seconds before displaying tooltip when performing drag and drop operation</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.1000000014901161193847656</real> -        </map> -    <key>DropShadowButton</key> -        <map> -        <key>Comment</key> -            <string>Drop shadow width for buttons (pixels)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>2</integer> -        </map> -    <key>DropShadowFloater</key> -        <map> -        <key>Comment</key> -            <string>Drop shadow width for floaters (pixels)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>5</integer> -        </map> -    <key>DropShadowSlider</key> -        <map> -        <key>Comment</key> -            <string>Drop shadow width for sliders (pixels)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>3</integer> -        </map> -    <key>DropShadowTooltip</key> -        <map> -        <key>Comment</key> -            <string>Drop shadow width for tooltips (pixels)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>4</integer> -        </map> -    <key>DynamicCameraStrength</key> -        <map> -        <key>Comment</key> -            <string>Amount camera lags behind avatar motion (0 = none, 30 = avatar velocity)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>2</real> -        </map> -    <key>EditCameraMovement</key> -        <map> -        <key>Comment</key> -            <string>When entering build mode, camera moves up above avatar</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>EditLinkedParts</key> -        <map> -        <key>Comment</key> -            <string>Select individual parts of linked objects</string> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>EffectColor</key> -        <map> -        <key>Comment</key> -            <string>Particle effects color</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>1</real> -                <real>1</real> -                <real>1</real> -                <real>1</real> -            </array> -        </map> -    <key>EnablePushToTalk</key> -        <map> -        <key>Comment</key> -            <string>Must hold down a key or moouse button when talking into your microphone</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>EnableVoiceChat</key> -        <map> -        <key>Comment</key> -            <string>Enable talking to other residents with a microphone</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>EnergyFromTop</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>20</integer> -        </map> -    <key>EnergyHeight</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>40</integer> -        </map> -    <key>EnergyWidth</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>175</integer> -        </map> -    <key>FilterItemsPerFrame</key> -        <map> -        <key>Comment</key> -            <string>Maximum number of inventory items to match against search filter every frame (lower to increase framerate while searching, higher to improve search speed)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>500</integer> -        </map> -    <key>FindLandArea</key> -        <map> -        <key>Comment</key> -            <string>Enables filtering of land search results by area</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>FindLandPrice</key> -        <map> -        <key>Comment</key> -            <string>Enables filtering of land search results by price</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>FindLandType</key> -        <map> -        <key>Comment</key> -            <string>Controls which type of land you are searching for in Find Land interface ("All", "Auction", "For Sale")</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>All</string> -        </map> -    <key>FindPeopleOnline</key> -        <map> -        <key>Comment</key> -            <string>Limits people search to only users who are logged on</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>FindPlacesPictures</key> -        <map> -        <key>Comment</key> -            <string>Display only results of find places that have pictures</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>FirstLoginThisInstall</key> -        <map> -        <key>Comment</key> -            <string>Specifies that you have not successfully logged in since you installed the latest update</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>FirstName</key> -        <map> -        <key>Comment</key> -            <string>Login first name</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>FirstPersonAvatarVisible</key> -        <map> -        <key>Comment</key> -            <string>Display avatar and attachments below neck while in mouselook</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>FirstPersonBtnState</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>FirstRunThisInstall</key> -        <map> -        <key>Comment</key> -            <string>Specifies that you have not run the viewer since you installed the latest update</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>FixedWeather</key> -        <map> -        <key>Comment</key> -            <string>Weather effects do not change over time</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>FloaterAboutRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for About window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>440</integer> -                <integer>470</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterActiveSpeakersRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for active speakers window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>300</integer> -                <integer>250</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterAudioVolumeRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for Audio Volume window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>440</integer> -                <integer>470</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterBuildOptionsRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for build options window.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>0</integer> -                <integer>0</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterBumpRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for Bumps/Hits window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>180</integer> -                <integer>400</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterBuyContentsRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for Buy Contents window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>250</integer> -                <integer>300</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterBuyRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for buy window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>250</integer> -                <integer>300</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterCameraRect2</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for camera control window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>166</integer> -                <integer>128</integer> -                <integer>342</integer> -                <integer>64</integer> -            </array> -        </map> -    <key>FloaterChatRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for chat history</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>172</integer> -                <integer>500</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterClothingRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for clothing window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>480</integer> -                <integer>320</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterContactsRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for chat history</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>390</integer> -                <integer>395</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterCustomizeAppearanceRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for avatar customization window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>540</integer> -                <integer>494</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterFindRect2</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for Find window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>570</integer> -                <integer>780</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterFriendsRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for friends window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>400</integer> -                <integer>250</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterGestureRect2</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for gestures window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>465</integer> -                <integer>350</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterHtmlRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for HTML window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>100</integer> -                <integer>460</integer> -                <integer>370</integer> -                <integer>100</integer> -            </array> -        </map> -    <key>FloaterHUDRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for HUD Floater window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>282</integer> -                <integer>342</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterIMRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for IM window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>160</integer> -                <integer>500</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterInspectRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for Object Inspect window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>400</integer> -                <integer>400</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterInventoryRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for inventory window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>400</integer> -                <integer>300</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterJoystickRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for joystick controls window.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>0</integer> -                <integer>0</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterLagMeter</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for lag meter</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>142</integer> -                <integer>350</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterLandRect5</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for About Land window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>370</integer> -                <integer>460</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterLandmarkRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for landmark picker</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>290</integer> -                <integer>310</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterMediaRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for media browser window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>400</integer> -                <integer>400</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterMiniMapRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for world map</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>225</integer> -                <integer>200</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterMoveRect2</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for avatar control window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>58</integer> -                <integer>135</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterMuteRect3</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for mute window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>300</integer> -                <integer>300</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterOpenObjectRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for Open Object window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>350</integer> -                <integer>300</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterPayRectB</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for pay window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>150</integer> -                <integer>400</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterRegionInfo</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for region info window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>512</integer> -                <integer>480</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterScriptDebugRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for Script Error/Debug window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>130</integer> -                <integer>450</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FloaterSnapshotRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for snapshot window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>200</integer> -                <integer>200</integer> -                <integer>400</integer> -            </array> -        </map> -    <key>FloaterViewBottom</key> -        <map> -        <key>Comment</key> -            <string>[DO NOT MODIFY] Controls layout of floating windows within SL window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>-1</integer> -        </map> -    <key>FloaterWorldMapRect2</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for world map window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>0</integer> -                <integer>0</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>FlyBtnState</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>FlycamAbsolute</key> -        <map> -        <key>Comment</key> -            <string>Treat Flycam values as absolute positions (not deltas).</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>FlycamAutoLeveling</key> -        <map> -        <key>Comment</key> -            <string>Keep Flycam level.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>FlycamAxis0</key> -        <map> -        <key>Comment</key> -            <string>Flycam hardware axis mapping for internal axis 0 ([0, 5]).</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>FlycamAxis1</key> -        <map> -        <key>Comment</key> -            <string>Flycam hardware axis mapping for internal axis 1 ([0, 5]).</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>FlycamAxis2</key> -        <map> -        <key>Comment</key> -            <string>Flycam hardware axis mapping for internal axis 2 ([0, 5]).</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>2</integer> -        </map> -    <key>FlycamAxis3</key> -        <map> -        <key>Comment</key> -            <string>Flycam hardware axis mapping for internal axis 3 ([0, 5]).</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>3</integer> -        </map> -    <key>FlycamAxis4</key> -        <map> -        <key>Comment</key> -            <string>Flycam hardware axis mapping for internal axis 4 ([0, 5]).</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>4</integer> -        </map> -    <key>FlycamAxis5</key> -        <map> -        <key>Comment</key> -            <string>Flycam hardware axis mapping for internal axis 5 ([0, 5]).</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>5</integer> -        </map> -    <key>FlycamAxis6</key> -        <map> -        <key>Comment</key> -            <string>Flycam hardware axis mapping for internal axis 6 ([0, 5]).</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>-1</integer> -        </map> -    <key>FlycamAxisDeadZone0</key> -        <map> -        <key>Comment</key> -            <string>Flycam axis 0 dead zone.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.1000000014901161193847656</real> -        </map> -    <key>FlycamAxisDeadZone1</key> -        <map> -        <key>Comment</key> -            <string>Flycam axis 1 dead zone.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.1000000014901161193847656</real> -        </map> -    <key>FlycamAxisDeadZone2</key> -        <map> -        <key>Comment</key> -            <string>Flycam axis 2 dead zone.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.1000000014901161193847656</real> -        </map> -    <key>FlycamAxisDeadZone3</key> -        <map> -        <key>Comment</key> -            <string>Flycam axis 3 dead zone.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.1000000014901161193847656</real> -        </map> -    <key>FlycamAxisDeadZone4</key> -        <map> -        <key>Comment</key> -            <string>Flycam axis 4 dead zone.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.1000000014901161193847656</real> -        </map> -    <key>FlycamAxisDeadZone5</key> -        <map> -        <key>Comment</key> -            <string>Flycam axis 5 dead zone.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.1000000014901161193847656</real> -        </map> -    <key>FlycamAxisDeadZone6</key> -        <map> -        <key>Comment</key> -            <string>Flycam axis 6 dead zone.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.1000000014901161193847656</real> -        </map> -    <key>FlycamAxisScale0</key> -        <map> -        <key>Comment</key> -            <string>Flycam axis 0 scaler.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>FlycamAxisScale1</key> -        <map> -        <key>Comment</key> -            <string>Flycam axis 1 scaler.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>FlycamAxisScale2</key> -        <map> -        <key>Comment</key> -            <string>Flycam axis 2 scaler.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>FlycamAxisScale3</key> -        <map> -        <key>Comment</key> -            <string>Flycam axis 3 scaler.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>FlycamAxisScale4</key> -        <map> -        <key>Comment</key> -            <string>Flycam axis 4 scaler.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>FlycamAxisScale5</key> -        <map> -        <key>Comment</key> -            <string>Flycam axis 5 scaler.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>FlycamAxisScale6</key> -        <map> -        <key>Comment</key> -            <string>Flycam axis 6 scaler.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>FlycamFeathering</key> -        <map> -        <key>Comment</key> -            <string>Flycam feathering (less is softer)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>16</real> -        </map> -    <key>FlycamZoomDirect</key> -        <map> -        <key>Comment</key> -            <string>Map flycam zoom axis directly to camera zoom.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>FlyingAtExit</key> -        <map> -        <key>Comment</key> -            <string>Was flying when last logged out, so fly when logging in</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>FocusOffsetDefault</key> -        <map> -        <key>Comment</key> -            <string>Default focus point offset relative to avatar (x-axis is forward)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Vector3</string> -        <key>Value</key> -            <array> -                <real>1</real> -                <real>0</real> -                <real>1</real> -            </array> -        </map> -    <key>FocusPosOnLogout</key> -        <map> -        <key>Comment</key> -            <string>Camera focus point when last logged out (global coordinates)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Vector3D</string> -        <key>Value</key> -            <array> -                <real>0</real> -                <real>0</real> -                <real>0</real> -            </array> -        </map> -    <key>FolderAutoOpenDelay</key> -        <map> -        <key>Comment</key> -            <string>Seconds before automatically expanding the folder under the mouse when performing inventory drag and drop</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.75</real> -        </map> -    <key>FolderLoadingMessageWaitTime</key> -        <map> -        <key>Comment</key> -            <string>Seconds to wait before showing the LOADING... text in folder views</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.5</real> -        </map> -    <key>FontMonospace</key> -        <map> -        <key>Comment</key> -            <string>Name of monospace font (Truetype file name)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>profontwindows.ttf</string> -        </map> -    <key>FontSansSerif</key> -        <map> -        <key>Comment</key> -            <string>Name of san-serif font (Truetype file name)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>MtBkLfRg.ttf</string> -        </map> -    <key>FontSansSerifBold</key> -        <map> -        <key>Comment</key> -            <string>Name of bold font (Truetype file name)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>MtBdLfRg.ttf</string> -        </map> -    <key>FontSansSerifFallback</key> -        <map> -        <key>Comment</key> -            <string>Name of san-serif font (Truetype file name)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>???????? Pro W3.otf;???????? ProN W3.otf;AppleGothic.dfont;AppleGothic.ttf;????.ttf</string> -        </map> -    <key>FontSansSerifFallbackScale</key> -        <map> -        <key>Comment</key> -            <string>Scale of fallback font relative to huge font (fraction of huge font size)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>FontScreenDPI</key> -        <map> -        <key>Comment</key> -            <string>Font resolution, higher is bigger (pixels per inch)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>96</real> -        </map> -    <key>FontSizeHuge</key> -        <map> -        <key>Comment</key> -            <string>Size of huge font (points, or 1/72 of an inch)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>16</real> -        </map> -    <key>FontSizeLarge</key> -        <map> -        <key>Comment</key> -            <string>Size of large font (points, or 1/72 of an inch)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>12</real> -        </map> -    <key>FontSizeMedium</key> -        <map> -        <key>Comment</key> -            <string>Size of medium font (points, or 1/72 of an inch)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>10</real> -        </map> -    <key>FontSizeMonospace</key> -        <map> -        <key>Comment</key> -            <string>Size of monospaced font (points, or 1/72 of an inch)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>9</real> -        </map> -    <key>FontSizeSmall</key> -        <map> -        <key>Comment</key> -            <string>Size of small font (points, or 1/72 of an inch)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>9</real> -        </map> -    <key>ForceShowGrid</key> -        <map> -        <key>Comment</key> -            <string>Always show grid dropdown on login screen</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ForwardBtnRect</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>45</integer> -                <integer>54</integer> -                <integer>66</integer> -                <integer>29</integer> -            </array> -        </map> -    <key>FreezeTime</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>FullScreen</key> -        <map> -        <key>Comment</key> -            <string>Run SL in fullscreen mode</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>FullScreenAspectRatio</key> -        <map> -        <key>Comment</key> -            <string>Aspect ratio of fullscreen display (width / height)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1.33329999446868896484375</real> -        </map> -    <key>FullScreenAutoDetectAspectRatio</key> -        <map> -        <key>Comment</key> -            <string>Automatically detect proper aspect ratio for fullscreen display</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>FullScreenHeight</key> -        <map> -        <key>Comment</key> -            <string>Fullscreen resolution in height</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>768</integer> -        </map> -    <key>FullScreenWidth</key> -        <map> -        <key>Comment</key> -            <string>Fullscreen resolution in width</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>1024</integer> -        </map> -    <key>GridChoice</key> -        <map> -        <key>Comment</key> -            <string>The user's grid choice or ip address.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>GridCrossSections</key> -        <map> -        <key>Comment</key> -            <string>Highlight cross sections of prims with grid manipulation plane.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>GridDrawSize</key> -        <map> -        <key>Comment</key> -            <string>Visible extent of 2D snap grid (meters)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>12</real> -        </map> -    <key>GridMode</key> -        <map> -        <key>Comment</key> -            <string>Snap grid reference frame (0 = world, 1 = local, 2 = reference object)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>GridOpacity</key> -        <map> -        <key>Comment</key> -            <string>Grid line opacity (0.0 = completely transparent, 1.0 = completely opaque)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.699999988079071044921875</real> -        </map> -    <key>GridResolution</key> -        <map> -        <key>Comment</key> -            <string>Size of single grid step (meters)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.5</real> -        </map> -    <key>GridSubUnit</key> -        <map> -        <key>Comment</key> -            <string>Display fractional grid steps, relative to grid size</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>GridSubdivision</key> -        <map> -        <key>Comment</key> -            <string>Maximum number of times to divide single snap grid unit when GridSubUnit is true</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>32</integer> -        </map> -    <key>GroupNotifyBoxHeight</key> -        <map> -        <key>Comment</key> -            <string>Height of group notice messages</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>260</integer> -        </map> -    <key>GroupNotifyBoxWidth</key> -        <map> -        <key>Comment</key> -            <string>Width of group notice messages</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>400</integer> -        </map> -    <key>HTMLLinkColor</key> -        <map> -        <key>Comment</key> -            <string>Color of hyperlinks</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0.60000002384185791015625</real> -                <real>0.60000002384185791015625</real> -                <real>1</real> -                <real>1</real> -            </array> -        </map> -    <key>HelpHomeURL</key> -        <map> -        <key>Comment</key> -            <string>URL of initial help page</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>help/index.html</string> -        </map> -    <key>HelpLastVisitedURL</key> -        <map> -        <key>Comment</key> -            <string>URL of last help page, will be shown next time help is accessed</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>help/index.html</string> -        </map> -    <key>HelperURI</key> -        <map> -        <key>Comment</key> -            <string>helper web CGI prefix to use</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>HighResSnapshot</key> -        <map> -        <key>Comment</key> -            <string>Double resolution of snapshot from current window resolution</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>HtmlFindRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for HTML find window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>16</integer> -                <integer>650</integer> -                <integer>600</integer> -                <integer>128</integer> -            </array> -        </map> -    <key>HtmlHelpLastPage</key> -        <map> -        <key>Comment</key> -            <string>Last URL visited via help system</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>HtmlHelpRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for HTML help window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>16</integer> -                <integer>650</integer> -                <integer>600</integer> -                <integer>128</integer> -            </array> -        </map> -    <key>HtmlReleaseMessage</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for HTML Release Message Floater window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>46</integer> -                <integer>520</integer> -                <integer>400</integer> -                <integer>128</integer> -            </array> -        </map> -    <key>IMInChatHistory</key> -        <map> -        <key>Comment</key> -            <string>Copy IM into chat history</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>IMShowTimestamps</key> -        <map> -        <key>Comment</key> -            <string>Show timestamps in IM</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>IgnorePixelDepth</key> -        <map> -        <key>Comment</key> -            <string>Ignore pixel depth settings.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ImagePipelineUseHTTP</key> -        <map> -        <key>Comment</key> -            <string>If TRUE use HTTP GET to fetch textures from the server</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>InBandwidth</key> -        <map> -        <key>Comment</key> -            <string>Incoming bandwidth throttle (bps)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0</real> -        </map> -    <key>InventoryAutoOpenDelay</key> -        <map> -        <key>Comment</key> -            <string>Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>InventorySortOrder</key> -        <map> -        <key>Comment</key> -            <string>Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>U32</string> -        <key>Value</key> -            <integer>7</integer> -        </map> -    <key>InvertMouse</key> -        <map> -        <key>Comment</key> -            <string>When in mouselook, moving mouse up looks down and vice verse (FALSE = moving up looks up)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>KeepAspectForSnapshot</key> -        <map> -        <key>Comment</key> -            <string>Use full window when taking snapshot, regardless of requested image size</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>LCDDestination</key> -        <map> -        <key>Comment</key> -            <string>Which LCD to use</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>LSLHelpRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for LSL help window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>400</integer> -                <integer>400</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>LSLHelpURL</key> -        <map> -        <key>Comment</key> -            <string>URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>https://wiki.secondlife.com/wiki/[LSL_STRING]</string> -        </map> -    <key>LagMeterShrunk</key> -        <map> -        <key>Comment</key> -            <string>Last large/small state for lag meter</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>Language</key> -        <map> -        <key>Comment</key> -            <string>Language specifier (for XUI)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>default</string> -        </map> -    <key>LastFeatureVersion</key> -        <map> -        <key>Comment</key> -            <string>[DO NOT MODIFY] Version number for tracking hardware changes</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>LastFindPanel</key> -        <map> -        <key>Comment</key> -            <string>Controls which find operation appears by default when clicking "Find" button </string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>find_all_panel</string> -        </map> -    <key>LastName</key> -        <map> -        <key>Comment</key> -            <string>Login last name</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>LastPrefTab</key> -        <map> -        <key>Comment</key> -            <string>Last selected tab in preferences window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>LastRunVersion</key> -        <map> -        <key>Comment</key> -            <string>Version number of last instance of the viewer that you ran</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>0.0.0</string> -        </map> -    <key>LastSnapshotHeight</key> -        <map> -        <key>Comment</key> -            <string>The height of the last snapshot, in px</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>768</integer> -        </map> -    <key>LastSnapshotType</key> -        <map> -        <key>Comment</key> -            <string>Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>LastSnapshotWidth</key> -        <map> -        <key>Comment</key> -            <string>The width of the last snapshot, in px</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>1024</integer> -        </map> -    <key>LeftClickShowMenu</key> -        <map> -        <key>Comment</key> -            <string>Left click opens pie menu (FALSE = left click touches or grabs object)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>LimitDragDistance</key> -        <map> -        <key>Comment</key> -            <string>Limit translation of object via translate tool</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>LimitSelectDistance</key> -        <map> -        <key>Comment</key> -            <string>Disallow selection of objects beyond max select distance</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>LocalCacheVersion</key> -        <map> -        <key>Comment</key> -            <string>Version number of cache</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>LogMessages</key> -        <map> -        <key>Comment</key> -            <string>Log network traffic</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>LoginAsGod</key> -        <map> -        <key>Comment</key> -            <string>Attempt to login with god powers (Linden accounts only)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>LoginLastLocation</key> -        <map> -        <key>Comment</key> -            <string>Login at same location you last logged out</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>LoginPage</key> -        <map> -        <key>Comment</key> -            <string>Login authentication page.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>LoginURI</key> -        <map> -        <key>Comment</key> -            <string>login server and CGI prefix to use</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>LosslessJ2CUpload</key> -        <map> -        <key>Comment</key> -            <string>Use lossless compression for small image uploads</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>MapOverlayIndex</key> -        <map> -        <key>Comment</key> -            <string>Currently selected world map type</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>MapScale</key> -        <map> -        <key>Comment</key> -            <string>World map zoom level (pixels per region)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>128</real> -        </map> -    <key>MapShowClassifieds</key> -        <map> -        <key>Comment</key> -            <string>Show locations associated with classified ads on world map</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>MapShowEvents</key> -        <map> -        <key>Comment</key> -            <string>Show events on world map</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>MapShowInfohubs</key> -        <map> -        <key>Comment</key> -            <string>Show infohubs on the world map</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>MapShowLandForSale</key> -        <map> -        <key>Comment</key> -            <string>Show land for sale on world map</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>MapShowPeople</key> -        <map> -        <key>Comment</key> -            <string>Show other users on world map</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>MapShowPopular</key> -        <map> -        <key>Comment</key> -            <string>Show popular places on world map</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>MapShowTelehubs</key> -        <map> -        <key>Comment</key> -            <string>Show telehubs on world map</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>Marker</key> -        <map> -        <key>Comment</key> -            <string>[NOT USED]</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>MaxDragDistance</key> -        <map> -        <key>Comment</key> -            <string>Maximum allowed translation distance in a single operation of translate tool (meters from start point)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>48</real> -        </map> -    <key>MaxSelectDistance</key> -        <map> -        <key>Comment</key> -            <string>Maximum allowed selection distance (meters from avatar)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>64</real> -        </map> -    <key>MeanCollisionBump</key> -        <map> -        <key>Comment</key> -            <string>You have experienced an abuse of being bumped by an object or avatar</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>MeanCollisionPhysical</key> -        <map> -        <key>Comment</key> -            <string>You have experienced an abuse from a physical object</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>MeanCollisionPushObject</key> -        <map> -        <key>Comment</key> -            <string>You have experienced an abuse of being pushed by a scripted object</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>MeanCollisionScripted</key> -        <map> -        <key>Comment</key> -            <string>You have experienced an abuse from a scripted object</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>MeanCollisionSelected</key> -        <map> -        <key>Comment</key> -            <string>You have experienced an abuse of being pushed via a selected object</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>MenuAccessKeyTime</key> -        <map> -        <key>Comment</key> -            <string>Time (seconds) in which the menu key must be tapped to move focus to the menu bar</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.25</real> -        </map> -    <key>MenuBarHeight</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>18</integer> -        </map> -    <key>MenuBarWidth</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>410</integer> -        </map> -    <key>MiniMapRotate</key> -        <map> -        <key>Comment</key> -            <string>Rotate miniature world map to avatar direction</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>MiniMapScale</key> -        <map> -        <key>Comment</key> -            <string>Miniature world map zoom levle (pixels per region)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>128</real> -        </map> -    <key>MouseSensitivity</key> -        <map> -        <key>Comment</key> -            <string>Controls responsiveness of mouse when in mouselook mode (fraction or multiple of default mouse sensitivity)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>3</real> -        </map> -    <key>MouseSmooth</key> -        <map> -        <key>Comment</key> -            <string>Smooths out motion of mouse when in mouselook mode.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>MouseSun</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>MouselookBtnState</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>MoveDownBtnRect</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>91</integer> -                <integer>29</integer> -                <integer>116</integer> -                <integer>4</integer> -            </array> -        </map> -    <key>MoveUpBtnRect</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>91</integer> -                <integer>54</integer> -                <integer>116</integer> -                <integer>29</integer> -            </array> -        </map> -    <key>MuteAmbient</key> -        <map> -        <key>Comment</key> -            <string>Ambient sound effects, such as wind noise, play at 0 volume</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>MuteAudio</key> -        <map> -        <key>Comment</key> -            <string>All audio plays at 0 volume (streaming audio still takes up bandwidth, for example)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>MuteMedia</key> -        <map> -        <key>Comment</key> -            <string>Media plays at 0 volume (streaming audio still takes up bandwidth)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>MuteMusic</key> -        <map> -        <key>Comment</key> -            <string>Music plays at 0 volume (streaming audio still takes up bandwidth)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>MuteSounds</key> -        <map> -        <key>Comment</key> -            <string>Sound effects play at 0 volume</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>MuteUI</key> -        <map> -        <key>Comment</key> -            <string>UI sound effects play at 0 volume</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>MuteVoice</key> -        <map> -        <key>Comment</key> -            <string>Voice plays at 0 volume (streaming audio still takes up bandwidth)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>MuteWhenMinimized</key> -        <map> -        <key>Comment</key> -            <string>Mute audio when SL window is minimized</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>NewCacheLocation</key> -        <map> -        <key>Comment</key> -            <string>Change the location of the local disk cache to this</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>NextLoginLocation</key> -        <map> -        <key>Comment</key> -            <string>Location to log into by default.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>NoAudio</key> -        <map> -        <key>Comment</key> -            <string>Disable audio playback.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>NoHardwareProbe</key> -        <map> -        <key>Comment</key> -            <string>Disable hardware probe.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>NoInventoryLibrary</key> -        <map> -        <key>Comment</key> -            <string>Do not request inventory library.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>NoPreload</key> -        <map> -        <key>Comment</key> -            <string>Disable sound and image preload.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>NoQuickTime</key> -        <map> -        <key>Comment</key> -            <string>Disable quicktime playback.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>NoVerifySSLCert</key> -        <map> -        <key>Comment</key> -            <string>Do not verify SSL peers.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>NotecardEditorRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for notecard editor</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>400</integer> -                <integer>400</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>NotifyBoxHeight</key> -        <map> -        <key>Comment</key> -            <string>Height of notification messages</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>200</integer> -        </map> -    <key>NotifyBoxWidth</key> -        <map> -        <key>Comment</key> -            <string>Width of notification messages</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>350</integer> -        </map> -    <key>NotifyMoneyChange</key> -        <map> -        <key>Comment</key> -            <string>Pop up notifications for all L$ transactions</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>NotifyTipDuration</key> -        <map> -        <key>Comment</key> -            <string>Length of time that notification tips stay on screen (seconds)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>4</real> -        </map> -    <key>NumSessions</key> -        <map> -        <key>Comment</key> -            <string>Number of successful logins to Second Life</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>NumpadControl</key> -        <map> -        <key>Comment</key> -            <string>How numpad keys control your avatar. 0 = Like the normal arrow keys, 1 = Numpad moves avatar when numlock is off, 2 = Numpad moves avatar regardless of numlock (use this if you have no numlock)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ObjectChatColor</key> -        <map> -        <key>Comment</key> -            <string>Color of chat messages from objects</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0.699999988079071044921875</real> -                <real>0.89999997615814208984375</real> -                <real>0.699999988079071044921875</real> -                <real>1</real> -            </array> -        </map> -    <key>OpenDebugStatAdvanced</key> -        <map> -        <key>Comment</key> -            <string>Expand advanced performance stats display</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>OpenDebugStatBasic</key> -        <map> -        <key>Comment</key> -            <string>Expand basic performance stats display</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>OpenDebugStatNet</key> -        <map> -        <key>Comment</key> -            <string>Expand network stats display</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>OpenDebugStatRender</key> -        <map> -        <key>Comment</key> -            <string>Expand render stats display</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>OpenDebugStatSim</key> -        <map> -        <key>Comment</key> -            <string>Expand simulator performance stats display</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>OutBandwidth</key> -        <map> -        <key>Comment</key> -            <string>Outgoing bandwidth throttle (bps)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0</real> -        </map> -    <key>OverdrivenColor</key> -        <map> -        <key>Comment</key> -            <string>Color of various indicators when resident is speaking too loud.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>1</real> -                <real>0</real> -                <real>0</real> -                <real>1</real> -            </array> -        </map> -    <key>OverlayTitle</key> -        <map> -        <key>Comment</key> -            <string>Controls watermark text message displayed on screen when "ShowOverlayTitle" is enabled (one word, underscores become spaces)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>Set_via_OverlayTitle_in_settings.xml</string> -        </map> -    <key>PTTCurrentlyEnabled</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>PacketDropPercentage</key> -        <map> -        <key>Comment</key> -            <string>Percentage of packets dropped by the client.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0</real> -        </map> -    <key>PermissionsCautionEnabled</key> -        <map> -        <key>Comment</key> -            <string>When enabled, changes the handling of script permission requests to help avoid accidental granting of certain permissions, such as the debit permission</string> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>PermissionsCautionNotifyBoxHeight</key> -        <map> -        <key>Comment</key> -            <string>Height of caution-style notification messages</string> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>344</integer> -        </map> -    <key>PermissionsManagerRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for permissions manager window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>85</integer> -                <integer>300</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>PickerContextOpacity</key> -        <map> -        <key>Comment</key> -            <string>Controls overall opacity of context frustrum connecting color and texture pickers with their swatches</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.3499999940395355224609375</real> -        </map> -    <key>PieMenuLineWidth</key> -        <map> -        <key>Comment</key> -            <string>Width of lines in pie menu display (pixels)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>2.5</real> -        </map> -    <key>PinTalkViewOpen</key> -        <map> -        <key>Comment</key> -            <string>Stay in IM after hitting return</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>PingInterpolate</key> -        <map> -        <key>Comment</key> -            <string>Extrapolate object position along velocity vector based on ping delay</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>PitchFromMousePosition</key> -        <map> -        <key>Comment</key> -            <string>Vertical range over which avatar head tracks mouse position (degrees of head rotation from top of window to bottom)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>90</real> -        </map> -    <key>PlayTypingAnim</key> -        <map> -        <key>Comment</key> -            <string>Your avatar plays the typing animation whenever you type in the chat bar</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>PrecachingDelay</key> -        <map> -        <key>Comment</key> -            <string>Delay when logging in to load world before showing it (seconds)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>6</real> -        </map> -    <key>PreviewAnimRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for animation preview window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>85</integer> -                <integer>300</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>PreviewClassifiedRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for URL preview window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>530</integer> -                <integer>420</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>PreviewEventRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for Event preview window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>530</integer> -                <integer>420</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>PreviewLandmarkRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for landmark preview window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>90</integer> -                <integer>300</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>PreviewObjectRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for object preview window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>85</integer> -                <integer>300</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>PreviewScriptRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for script preview window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>550</integer> -                <integer>500</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>PreviewSoundRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for sound preview window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>85</integer> -                <integer>300</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>PreviewTextureRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for texture preview window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>400</integer> -                <integer>400</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>PreviewURLRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for URL preview window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>90</integer> -                <integer>300</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>PreviewWearableRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for wearable preview window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>85</integer> -                <integer>300</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>ProbeHardwareOnStartup</key> -        <map> -        <key>Comment</key> -            <string>Query current hardware configuration on application startup</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>PropertiesRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for inventory item properties window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>320</integer> -                <integer>350</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>PurgeCacheOnNextStartup</key> -        <map> -        <key>Comment</key> -            <string>Clear local file cache next time viewer is run</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>PurgeCacheOnStartup</key> -        <map> -        <key>Comment</key> -            <string>Clear local file cache every time viewer is run</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>PushToTalkButton</key> -        <map> -        <key>Comment</key> -            <string>Which button or keyboard key is used for push-to-talk</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>MiddleMouse</string> -        </map> -    <key>PushToTalkToggle</key> -        <map> -        <key>Comment</key> -            <string>Should the push-to-talk button behave as a toggle</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>QAMode</key> -        <map> -        <key>Comment</key> -            <string>Enable Testing Features.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>QuietSnapshotsToDisk</key> -        <map> -        <key>Comment</key> -            <string>Take snapshots to disk without playing animation or sound</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>QuitAfterSeconds</key> -        <map> -        <key>Comment</key> -            <string>The duration allowed before quitting.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0</real> -        </map> -    <key>RadioLandBrushAction</key> -        <map> -        <key>Comment</key> -            <string>Last selected land modification operation (0 = flatten, 1 = raise, 2 = lower, 3 = smooth, 4 = roughen, 5 = revert)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RadioLandBrushSize</key> -        <map> -        <key>Comment</key> -            <string>Size of land modification brush (0 = small, 1 = medium, 2 = large)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RecentItemsSortOrder</key> -        <map> -        <key>Comment</key> -            <string>Specifies sort key for recent inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>U32</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RectangleSelectInclusive</key> -        <map> -        <key>Comment</key> -            <string>Select objects that have at least one vertex inside selection rectangle</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RegionTextureSize</key> -        <map> -        <key>Comment</key> -            <string>Terrain texture dimensions (power of 2)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>U32</string> -        <key>Value</key> -            <integer>256</integer> -        </map> -    <key>RememberPassword</key> -        <map> -        <key>Comment</key> -            <string>Keep password (in encrypted form) for next login</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RenderAnisotropic</key> -        <map> -        <key>Comment</key> -            <string>Render textures using anisotropic filtering</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RenderAppleUseMultGL</key> -        <map> -        <key>Comment</key> -            <string>Whether we want to use multi-threaded OpenGL on Apple hardware (requires restart of SL).</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RenderAvatarCloth</key> -        <map> -        <key>Comment</key> -            <string>Controls if avatars use wavy cloth</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RenderAvatarLODFactor</key> -        <map> -        <key>Comment</key> -            <string>Controls level of detail of avatars (multiplier for current screen area when calculated level of detail)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.5</real> -        </map> -    <key>RenderAvatarMaxVisible</key> -        <map> -        <key>Comment</key> -            <string>Maximum number of avatars to display at any one time</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>35</integer> -        </map> -    <key>RenderAvatarVP</key> -        <map> -        <key>Comment</key> -            <string>Use vertex programs to perform hardware skinning of avatar</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RenderBumpmapMinDistanceSquared</key> -        <map> -        <key>Comment</key> -            <string>Maximum distance at which to render bumpmapped primitives (distance in meters, squared)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>100</real> -        </map> -    <key>RenderCubeMap</key> -        <map> -        <key>Comment</key> -            <string>Whether we can render the cube map or not</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RenderCustomSettings</key> -        <map> -        <key>Comment</key> -            <string>Do you want to set the graphics settings yourself</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RenderDebugTextureBind</key> -        <map> -        <key>Comment</key> -            <string>Enable texture bind performance test.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RenderDynamicLOD</key> -        <map> -        <key>Comment</key> -            <string>Dynamically adjust level of detail.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RenderDynamicReflections</key> -        <map> -        <key>Comment</key> -            <string>Generate a dynamic cube map for reflections (objects reflect their environment, experimental).</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RenderFarClip</key> -        <map> -        <key>Comment</key> -            <string>Distance of far clip plane from camera (meters)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>256</real> -        </map> -    <key>RenderFastUI</key> -        <map> -        <key>Comment</key> -            <string>[NOT USED]</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RenderFlexTimeFactor</key> -        <map> -        <key>Comment</key> -            <string>Controls level of detail of flexible objects (multiplier for amount of time spent processing flex objects)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>RenderFogRatio</key> -        <map> -        <key>Comment</key> -            <string>Distance from camera where fog reaches maximum density (fraction or multiple of far clip distance)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>4.0</real> -        </map> -    <key>RenderGamma</key> -        <map> -        <key>Comment</key> -            <string>Sets gamma exponent for renderer</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0</real> -        </map> -    <key>RenderGammaFull</key> -        <map> -        <key>Comment</key> -            <string>Use fully controllable gamma correction, instead of faster, hard-coded gamma correction of 2.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>RenderGlow</key> -        <map> -        <key>Comment</key> -            <string>Render bloom post effect.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RenderGlowIterations</key> -        <map> -        <key>Comment</key> -            <string>Number of times to iterate the glow (higher = wider and smoother but slower)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>2</integer> -        </map> -    <key>RenderGlowLumWeights</key> -        <map> -        <key>Comment</key> -            <string>Weights for each color channel to be used in calculating luminance (should add up to 1.0)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Vector3</string> -        <key>Value</key> -            <array> -                <real>0.299</real> -                <real>0.587</real> -                <real>0.114</real> -            </array> -        </map> -    <key>RenderGlowMaxExtractAlpha</key> -        <map> -        <key>Comment</key> -            <string>Max glow alpha value for brightness extraction to auto-glow.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.065</real> -        </map> -    <key>RenderGlowMinLuminance</key> -        <map> -        <key>Comment</key> -            <string>Min luminance intensity necessary to consider an object bright enough to automatically glow. (Gets clamped to 0 - 1.0 range)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1.0</real> -        </map> -    <key>RenderGlowResolutionPow</key> -        <map> -        <key>Comment</key> -            <string>Glow map resolution power of two.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>9</integer> -        </map> -    <key>RenderGlowStrength</key> -        <map> -        <key>Comment</key> -            <string>Additive strength of glow.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.35</real> -        </map> -    <key>RenderGlowWarmthAmount</key> -        <map> -        <key>Comment</key> -            <string>Amount of warmth extraction to use (versus luminance extraction). 0 = lum, 1.0 = warmth</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0</real> -        </map> -    <key>RenderGlowWarmthWeights</key> -        <map> -        <key>Comment</key> -            <string>Weight of each color channel used before finding the max warmth</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Vector3</string> -        <key>Value</key> -            <array> -                <real>1.0</real> -                <real>0.5</real> -                <real>0.7</real> -            </array> -        </map> -    <key>RenderGlowWidth</key> -        <map> -        <key>Comment</key> -            <string>Glow sample size (higher = wider and softer but eventually more pixelated)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1.3</real> -        </map> -    <key>RenderHUDInSnapshot</key> -        <map> -        <key>Comment</key> -            <string>Display HUD attachments in snapshot</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RenderHiddenSelections</key> -        <map> -        <key>Comment</key> -            <string>Show selection lines on objects that are behind other objects</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RenderHideGroupTitle</key> -        <map> -        <key>Comment</key> -            <string>Don't show my group title in my name label</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RenderHideGroupTitleAll</key> -        <map> -        <key>Comment</key> -            <string>Show group titles in name labels</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RenderInitError</key> -        <map> -        <key>Comment</key> -            <string>Error occured while initializing GL</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RenderLightRadius</key> -        <map> -        <key>Comment</key> -            <string>Render the radius of selected lights</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RenderLightingDetail</key> -        <map> -        <key>Comment</key> -            <string>Amount of detail for lighting objects/avatars/terrain (0=sun/moon only, 1=enable local lights)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RenderMaxPartCount</key> -        <map> -        <key>Comment</key> -            <string>Maximum number of particles to display on screen</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>4096</integer> -        </map> -    <key>RenderMaxVBOSize</key> -        <map> -        <key>Comment</key> -            <string>Maximum size of a vertex buffer (in KB).</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>32</integer> -        </map> -    <key>RenderName</key> -        <map> -        <key>Comment</key> -            <string>Controls display of names above avatars (0 = never, 1 = fade, 2 = always)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>2</integer> -        </map> -    <key>RenderNameFadeDuration</key> -        <map> -        <key>Comment</key> -            <string>Time interval over which to fade avatar names (seconds)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>RenderNameHideSelf</key> -        <map> -        <key>Comment</key> -            <string>Don't display own name above avatar</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RenderNameShowTime</key> -        <map> -        <key>Comment</key> -            <string>Fade avatar names after specified time (seconds)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>10</real> -        </map> -    <key>RenderObjectBump</key> -        <map> -        <key>Comment</key> -            <string>Show bumpmapping on primitives</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RenderQualityPerformance</key> -        <map> -        <key>Comment</key> -            <string>Which graphics settings you've chosen</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>U32</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RenderReflectionDetail</key> -        <map> -        <key>Comment</key> -            <string>Detail of reflection render pass.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>2</integer> -        </map> -    <key>RenderReflectionRes</key> -        <map> -        <key>Comment</key> -            <string>Reflection map resolution.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>64</integer> -        </map> -    <key>RenderResolutionDivisor</key> -        <map> -        <key>Comment</key> -            <string>Divisor for rendering 3D scene at reduced resolution.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>U32</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RenderShaderLODThreshold</key> -        <map> -        <key>Comment</key> -            <string>Fraction of draw distance defining the switch to a different shader LOD</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <integer>1.0</integer> -        </map> -    <key>RenderSunDynamicRange</key> -        <map> -        <key>Comment</key> -            <string>Defines what percent brighter the sun is than local point lights (1.0 = 100% brighter. Value should not be less than 0. ).</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <integer>1.0</integer> -        </map> -    <key>RenderTerrainDetail</key> -        <map> -        <key>Comment</key> -            <string>Detail applied to terrain texturing (0 = none, 1 or 2 = full)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>2</integer> -        </map> -    <key>RenderTerrainLODFactor</key> -        <map> -        <key>Comment</key> -            <string>Controls level of detail of terrain (multiplier for current screen area when calculated level of detail)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1.0</real> -        </map> -    <key>RenderTerrainScale</key> -        <map> -        <key>Comment</key> -            <string>Terrain detail texture scale</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>12</real> -        </map> -    <key>RenderTreeLODFactor</key> -        <map> -        <key>Comment</key> -            <string>Controls level of detail of vegetation (multiplier for current screen area when calculated level of detail)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.5</real> -        </map> -    <key>RenderUIInSnapshot</key> -        <map> -        <key>Comment</key> -            <string>Display user interface in snapshot</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RenderUseCleverUI</key> -        <map> -        <key>Comment</key> -            <string>Turns on the \"clever\" UI rendering optimization.  It's a known performace gain (and enabled by default) on apple.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RenderUseFarClip</key> -        <map> -        <key>Comment</key> -            <string>If false, frustum culling will ignore far clip plane.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RenderUseFBO</key> -        <map> -        <key>Comment</key> -            <string>Whether we want to use GL_EXT_framebuffer_objects.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RenderUseImpostors</key> -        <map> -        <key>Comment</key> -            <string>Whether we want to use impostors for far away avatars.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RenderUseShaderLOD</key> -        <map> -        <key>Comment</key> -            <string>Whether we want to have different shaders for LOD</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RenderUseShaderNearParticles</key> -        <map> -        <key>Comment</key> -            <string>Whether we want to use shaders on near particles</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RenderShaderParticleThreshold</key> -        <map> -        <key>Comment</key> -            <string>Fraction of draw distance to not use shader on particles</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.25</real> -        </map> -    <key>RenderVBOEnable</key> -        <map> -        <key>Comment</key> -            <string>Use GL Vertex Buffer Objects</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RenderVolumeLODFactor</key> -        <map> -        <key>Comment</key> -            <string>Controls level of detail of primitives (multiplier for current screen area when calculated level of detail)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>RenderWater</key> -        <map> -        <key>Comment</key> -            <string>Display water</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RenderWaterMipNormal</key> -        <map> -        <key>Comment</key> -            <string>Use mip maps for water normal map.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>RenderWaterReflections</key> -        <map> -        <key>Comment</key> -            <string>Reflect the environment in the water.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RenderWaterRefResolution</key> -        <map> -        <key>Comment</key> -            <string>Water planar reflection resolution.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>512</integer> -        </map> -    <key>RotateRight</key> -        <map> -        <key>Comment</key> -            <string>Make the agent rotate to its right.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RotationStep</key> -        <map> -        <key>Comment</key> -            <string>All rotations via rotation tool are constrained to multiples of this unit (degrees)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>RunBtnState</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>RunMultipleThreads</key> -        <map> -        <key>Comment</key> -            <string>If TRUE keep background threads active during render</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>SafeMode</key> -        <map> -        <key>Comment</key> -            <string>Reset preferences, run in safe mode.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ScaleShowAxes</key> -        <map> -        <key>Comment</key> -            <string>Show indicator of selected scale axis when scaling</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ScaleStretchTextures</key> -        <map> -        <key>Comment</key> -            <string>Stretch textures along with object when scaling</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ScaleUniform</key> -        <map> -        <key>Comment</key> -            <string>Scale selected objects evenly about center of selection</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ScriptErrorColor</key> -        <map> -        <key>Comment</key> -            <string>Color of script error messages</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0.819999992847442626953125</real> -                <real>0.819999992847442626953125</real> -                <real>0.9900000095367431640625</real> -                <real>1</real> -            </array> -        </map> -    <key>ScriptErrorsAsChat</key> -        <map> -        <key>Comment</key> -            <string>Display script errors and warning in chat history</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ScriptHelpFollowsCursor</key> -        <map> -        <key>Comment</key> -            <string>Scripting help window updates contents based on script editor contents under text cursor</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>SearchURLDefault</key> -        <map> -        <key>Comment</key> -            <string>URL to load for empty searches</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>http://secondlife.com/app/search/index.php?</string> -        </map> -    <key>SearchURLQuery</key> -        <map> -        <key>Comment</key> -            <string>URL to use for searches</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>http://secondlife.com/app/search/search_proxy.php?q=[QUERY]&s=[COLLECTION]&</string> -        </map> -    <key>SearchURLSuffix2</key> -        <map> -        <key>Comment</key> -            <string>Parameters added to end of search queries</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>lang=[LANG]&m=[MATURE]&t=[TEEN]&region=[REGION]&x=[X]&y=[Y]&z=[Z]&session=[SESSION]</string> -        </map> -    <key>SelectMovableOnly</key> -        <map> -        <key>Comment</key> -            <string>Select only objects you can move</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>SelectOwnedOnly</key> -        <map> -        <key>Comment</key> -            <string>Select only objects you own</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>SelectionHighlightAlpha</key> -        <map> -        <key>Comment</key> -            <string>Opacity of selection highlight (0.0 = completely transparent, 1.0 = completely opaque)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.4000000059604644775390625</real> -        </map> -    <key>SelectionHighlightAlphaTest</key> -        <map> -        <key>Comment</key> -            <string>Alpha value below which pixels are displayed on selection highlight line (0.0 = show all pixels, 1.0 = show now pixels)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.1000000014901161193847656</real> -        </map> -    <key>SelectionHighlightThickness</key> -        <map> -        <key>Comment</key> -            <string>Thickness of selection highlight line (fraction of view distance)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.009999999776482582092285156</real> -        </map> -    <key>SelectionHighlightUAnim</key> -        <map> -        <key>Comment</key> -            <string>Rate at which texture animates along U direction in selection highlight line (fraction of texture per second)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0</real> -        </map> -    <key>SelectionHighlightUScale</key> -        <map> -        <key>Comment</key> -            <string>Scale of texture display on selection highlight line (fraction of texture size)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.1000000014901161193847656</real> -        </map> -    <key>SelectionHighlightVAnim</key> -        <map> -        <key>Comment</key> -            <string>Rate at which texture animates along V direction in selection highlight line (fraction of texture per second)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.5</real> -        </map> -    <key>SelectionHighlightVScale</key> -        <map> -        <key>Comment</key> -            <string>Scale of texture display on selection highlight line (fraction of texture size)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>ServerChoice</key> -        <map> -        <key>Comment</key> -            <string>[DO NOT MODIFY] Controls which grid you connect to</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowAllObjectHoverTip</key> -        <map> -        <key>Comment</key> -            <string>Show descriptive tooltip when mouse hovers over non-interactive and interactive objects.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowAxes</key> -        <map> -        <key>Comment</key> -            <string>Render coordinate frame at your position</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowCameraControls</key> -        <map> -        <key>Comment</key> -            <string>Display camera controls on login</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowChatHistory</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowCommunicate</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowConsoleWindow</key> -        <map> -        <key>Comment</key> -            <string>Show log in separate OS window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowCrosshairs</key> -        <map> -        <key>Comment</key> -            <string>Display crosshairs when in mouselook mode</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ShowDebugConsole</key> -        <map> -        <key>Comment</key> -            <string>Show log in SL window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowDebugStats</key> -        <map> -        <key>Comment</key> -            <string>Show performance stats display</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowDepthBuffer</key> -        <map> -        <key>Comment</key> -            <string>Show depth buffer contents</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowDirectory</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowEmptyFoldersWhenSearching</key> -        <map> -        <key>Comment</key> -            <string>Shows folders that do not have any visible contents when applying a filter to inventory</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowHoverTips</key> -        <map> -        <key>Comment</key> -            <string>Show descriptive tooltip when mouse hovers over items in world</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ShowInventory</key> -        <map> -        <key>Comment</key> -            <string>Open inventory window on login</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowLandHoverTip</key> -        <map> -        <key>Comment</key> -            <string>Show descriptive tooltip when mouse hovers over land</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowLeaders</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowMatureClassifieds</key> -        <map> -        <key>Comment</key> -            <string>Display results of find classifieds that are flagged as mature</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowMatureEvents</key> -        <map> -        <key>Comment</key> -            <string>Display results of find events that are flagged as mature</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowMatureFindAll</key> -        <map> -        <key>Comment</key> -            <string>Display results of find all that are in mature sims</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowMatureGroups</key> -        <map> -        <key>Comment</key> -            <string>Display results of find groups that are in flagged as mature</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ShowMatureSims</key> -        <map> -        <key>Comment</key> -            <string>Display results of find places or find popular that are in mature sims</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowMiniMap</key> -        <map> -        <key>Comment</key> -            <string>Display mini map on login</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ShowMovementControls</key> -        <map> -        <key>Comment</key> -            <string>Display movement controls on login</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ShowNearClip</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowNewInventory</key> -        <map> -        <key>Comment</key> -            <string>Automatically views new notecards/textures/landmarks</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ShowObjectUpdates</key> -        <map> -        <key>Comment</key> -            <string>Show when update messages are received for individual objects</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowOverlayTitle</key> -        <map> -        <key>Comment</key> -            <string>Prints watermark text message on screen</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowParcelOwners</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowPermissions</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowPropertyLines</key> -        <map> -        <key>Comment</key> -            <string>Show line overlay demarking property boundaries</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowSearchBar</key> -        <map> -        <key>Comment</key> -            <string>Show the Search Bar in the Status Overlay</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ShowSelectionBeam</key> -        <map> -        <key>Comment</key> -            <string>Show selection particle beam when selecting or interacting with objects.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ShowStartLocation</key> -        <map> -        <key>Comment</key> -            <string>Display starting location menu on login screen</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowTangentBasis</key> -        <map> -        <key>Comment</key> -            <string>Render normal and binormal (debugging bump mapping)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowToolBar</key> -        <map> -        <key>Comment</key> -            <string>Show toolbar at bottom of screen</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ShowTools</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowVoiceChannelPopup</key> -        <map> -        <key>Comment</key> -            <string>Controls visibility of the current voice channel popup above the voice tab</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowVolumeSettingsPopup</key> -        <map> -        <key>Comment</key> -            <string>Show individual volume slider for voice, sound effects, etc</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowWorldMap</key> -        <map> -        <key>Comment</key> -            <string>Display world map on login</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ShowXUINames</key> -        <map> -        <key>Comment</key> -            <string>Display XUI Names as Tooltips</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>SitBtnState</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>SkinFolder</key> -        <map> -        <key>Comment</key> -            <string>The skin folder to use.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>SkyAmbientScale</key> -        <map> -        <key>Comment</key> -            <string>Controls strength of ambient, or non-directional light from the sun and moon (fraction or multiple of default ambient level)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.300000011920928955078125</real> -        </map> -    <key>SkyNightColorShift</key> -        <map> -        <key>Comment</key> -            <string>Controls moonlight color (base color applied to moon as light source)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color3</string> -        <key>Value</key> -            <array> -                <real>0.699999988079071044921875</real> -                <real>0.699999988079071044921875</real> -                <real>1</real> -            </array> -        </map> -    <key>SkyOverrideSimSunPosition</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>SkySunDefaultPosition</key> -        <map> -        <key>Comment</key> -            <string>Default position of sun in sky (direction in world coordinates)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Vector3</string> -        <key>Value</key> -            <array> -                <real>1</real> -                <real>0</real> -                <real>0.1000000014901161193847656</real> -            </array> -        </map> -	<key>SkyUseClassicClouds</key> -		<map> -		<key>Comment</key> -			<string>Whether to use the old Second Life particle clouds or not</string> -		<key>Persist</key> -			<integer>1</integer> -		<key>Type</key> -			<string>Boolean</string> -		<key>Value</key> -			<integer>1</integer> -		</map> -    <key>SlideLeftBtnRect</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>20</integer> -                <integer>54</integer> -                <integer>45</integer> -                <integer>29</integer> -            </array> -        </map> -    <key>SlideRightBtnRect</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>66</integer> -                <integer>54</integer> -                <integer>91</integer> -                <integer>29</integer> -            </array> -        </map> -    <key>SmallAvatarNames</key> -        <map> -        <key>Comment</key> -            <string>Display avatar name text in smaller font</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>SnapEnabled</key> -        <map> -        <key>Comment</key> -            <string>Enable snapping to grid</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>SnapMargin</key> -        <map> -        <key>Comment</key> -            <string>Controls maximum distance between windows before they auto-snap together (pixels)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>10</integer> -        </map> -    <key>SnapToMouseCursor</key> -        <map> -        <key>Comment</key> -            <string>When snapping to grid, center object on nearest grid point to mouse cursor</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>SnapshotLocalLastResolution</key> -        <map> -        <key>Comment</key> -            <string>Take next local snapshot at this resolution</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>SnapshotPostcardLastResolution</key> -        <map> -        <key>Comment</key> -            <string>Take next postcard snapshot at this resolution</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>SnapshotQuality</key> -        <map> -        <key>Comment</key> -            <string>Quality setting of postcard JPEGs (0 = worst, 100 = best)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>75</integer> -        </map> -    <key>SnapshotTextureLastResolution</key> -        <map> -        <key>Comment</key> -            <string>Take next texture snapshot at this resolution</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>SpeakingColor</key> -        <map> -        <key>Comment</key> -            <string>Color of various indicators when resident is speaking on a voice channel.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0</real> -                <real>1</real> -                <real>0</real> -                <real>1</real> -            </array> -        </map> -    <key>SpeedTest</key> -        <map> -        <key>Comment</key> -            <string>Performance testing mode, no network</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>StatsAutoRun</key> -        <map> -        <key>Comment</key> -            <string>Play back autopilot</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>StatsFile</key> -        <map> -        <key>Comment</key> -            <string>Filename for stats logging output</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>fs.txt</string> -        </map> -    <key>StatsNumRuns</key> -        <map> -        <key>Comment</key> -            <string>Loop autopilot playback this number of times</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>-1</integer> -        </map> -    <key>StatsPilotFile</key> -        <map> -        <key>Comment</key> -            <string>Filename for stats logging autopilot path</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>pilot.txt</string> -        </map> -    <key>StatsQuitAfterRuns</key> -        <map> -        <key>Comment</key> -            <string>Quit application after this number of autopilot playback runs</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>StatsSessionTrackFrameStats</key> -        <map> -        <key>Comment</key> -            <string>Track rendering and network statistics</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>StatsSummaryFile</key> -        <map> -        <key>Comment</key> -            <string>Filename for stats logging summary</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>fss.txt</string> -        </map> -    <key>StatusBarHeight</key> -        <map> -        <key>Comment</key> -            <string>Height of menu/status bar at top of screen (pixels)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>26</integer> -        </map> -    <key>StatusBarPad</key> -        <map> -        <key>Comment</key> -            <string>Spacing between popup buttons at bottom of screen (Stand up, Release Controls)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>10</integer> -        </map> -    <key>SystemChatColor</key> -        <map> -        <key>Comment</key> -            <string>Color of chat messages from SL System</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0.800000011920928955078125</real> -                <real>1</real> -                <real>1</real> -                <real>1</real> -            </array> -        </map> -    <key>SystemLanguage</key> -        <map> -        <key>Comment</key> -            <string>Language indicated by system settings (for XUI)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>en-us</string> -        </map> -    <key>TabToTextFieldsOnly</key> -        <map> -        <key>Comment</key> -            <string>TAB key takes you to next text entry field, instead of next widget</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>TerrainColorHeightRange</key> -        <map> -        <key>Comment</key> -            <string>Altitude range over which a given terrain texture has effect (meters)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>60</real> -        </map> -    <key>TerrainColorStartHeight</key> -        <map> -        <key>Comment</key> -            <string>Starting altitude for terrain texturing (meters)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>20</real> -        </map> -    <key>TextureMemory</key> -        <map> -        <key>Comment</key> -            <string>Amount of memory to use for textures in MB (0 = autodetect)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>TexturePickerRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for texture picker</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>290</integer> -                <integer>350</integer> -                <integer>0</integer> -            </array> -        </map> -    <key>TexturePickerShowFolders</key> -        <map> -        <key>Comment</key> -            <string>Show folders with no texures in texture picker</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>TexturePickerSortOrder</key> -        <map> -        <key>Comment</key> -            <string>Specifies sort key for textures in texture picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>U32</string> -        <key>Value</key> -            <integer>2</integer> -        </map> -    <key>ThirdPersonBtnState</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>ThrottleBandwidthKBPS</key> -        <map> -        <key>Comment</key> -            <string>Maximum allowable downstream bandwidth (kilo bits per second)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>500</real> -        </map> -    <key>ToolHelpRect</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>8</integer> -                <integer>178</integer> -                <integer>75</integer> -                <integer>162</integer> -            </array> -        </map> -    <key>ToolTipDelay</key> -        <map> -        <key>Comment</key> -            <string>Seconds before displaying tooltip when mouse stops over UI element</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.699999988079071044921875</real> -        </map> -    <key>ToolboxAutoMove</key> -        <map> -        <key>Comment</key> -            <string>[NOT USED]</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>ToolboxRect</key> -        <map> -        <key>Comment</key> -            <string>Rectangle for tools window</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>0</integer> -                <integer>100</integer> -                <integer>100</integer> -                <integer>100</integer> -            </array> -        </map> -    <key>ToolboxShowMore</key> -        <map> -        <key>Comment</key> -            <string>Whether to show additional build tool controls</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>TrackFocusObject</key> -        <map> -        <key>Comment</key> -            <string>Camera tracks last object zoomed on</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>TurnLeftBtnRect</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>20</integer> -                <integer>29</integer> -                <integer>45</integer> -                <integer>4</integer> -            </array> -        </map> -    <key>TurnRightBtnRect</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Rect</string> -        <key>Value</key> -            <array> -                <integer>66</integer> -                <integer>29</integer> -                <integer>91</integer> -                <integer>4</integer> -            </array> -        </map> -    <key>TypeAheadTimeout</key> -        <map> -        <key>Comment</key> -            <string>Time delay before clearing type-ahead buffer in lists (seconds)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1.5</real> -        </map> -    <key>UIAutoScale</key> -        <map> -        <key>Comment</key> -            <string>Keep UI scale consistent across different resolutions</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>UIFloaterTestBool</key> -        <map> -        <key>Comment</key> -            <string>Example saved setting for the test floater</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>UIImgBtnCloseActiveUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string> -        </map> -    <key>UIImgBtnCloseInactiveUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>779e4fa3-9b13-f74a-fba9-3886fe9c86ba</string> -        </map> -    <key>UIImgBtnClosePressedUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string> -        </map> -    <key>UIImgBtnForwardInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>54197a61-f5d1-4c29-95d2-c071d08849cb</string> -        </map> -    <key>UIImgBtnForwardOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>a0eb4021-1b20-4a53-892d-8faa9265a6f5</string> -        </map> -    <key>UIImgBtnJumpLeftInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1</string> -        </map> -    <key>UIImgBtnJumpLeftOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>3c18c87e-5f50-14e2-e744-f44734aa365f</string> -        </map> -    <key>UIImgBtnJumpRightInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>7dabc040-ec13-2309-ddf7-4f161f6de2f4</string> -        </map> -    <key>UIImgBtnJumpRightOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>ff9a71eb-7414-4cf8-866e-a701deb7c3cf</string> -        </map> -    <key>UIImgBtnLeftInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>95463c78-aaa6-464d-892d-3a805b6bb7bf</string> -        </map> -    <key>UIImgBtnLeftOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>13a93910-6b44-45eb-ad3a-4d1324c59bac</string> -        </map> -    <key>UIImgBtnMinimizeActiveUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>34c9398d-bb78-4643-9633-46a2fa3e9637</string> -        </map> -    <key>UIImgBtnMinimizeInactiveUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>6e72abba-1378-437f-bf7a-f0c15f3e99a3</string> -        </map> -    <key>UIImgBtnMinimizePressedUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>39801651-26cb-4926-af57-7af9352c273c</string> -        </map> -    <key>UIImgBtnMoveDownInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>b92a70b9-c841-4c94-b4b3-cee9eb460d48</string> -        </map> -    <key>UIImgBtnMoveDownOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>b5abc9fa-9e62-4e03-bc33-82c4c1b6b689</string> -        </map> -    <key>UIImgBtnMoveUpInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>49b4b357-e430-4b56-b9e0-05b8759c3c82</string> -        </map> -    <key>UIImgBtnMoveUpOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>f887146d-829f-4e39-9211-cf872b78f97c</string> -        </map> -    <key>UIImgBtnPanDownInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string> -        </map> -    <key>UIImgBtnPanDownOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string> -        </map> -    <key>UIImgBtnPanLeftInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string> -        </map> -    <key>UIImgBtnPanLeftOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string> -        </map> -    <key>UIImgBtnPanRightInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string> -        </map> -    <key>UIImgBtnPanRightOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string> -        </map> -    <key>UIImgBtnPanUpInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string> -        </map> -    <key>UIImgBtnPanUpOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string> -        </map> -    <key>UIImgBtnRestoreActiveUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>111b39de-8928-4690-b7b2-e17d5c960277</string> -        </map> -    <key>UIImgBtnRestoreInactiveUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>0eafa471-70af-4882-b8c1-40a310929744</string> -        </map> -    <key>UIImgBtnRestorePressedUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>90a0ed5c-2e7b-4845-9958-a64a1b30f312</string> -        </map> -    <key>UIImgBtnRightInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>5e616d0d-4335-476f-9977-560bccd009da</string> -        </map> -    <key>UIImgBtnRightOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>5a44fd04-f52b-4c30-8b00-4a31e27614bd</string> -        </map> -    <key>UIImgBtnScrollDownInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>d2421bab-2eaf-4863-b8f6-5e4c52519247</string> -        </map> -    <key>UIImgBtnScrollDownOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>b4ecdecf-5c8d-44e7-b882-17a77e88ed55</string> -        </map> -    <key>UIImgBtnScrollLeftInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>ea137a32-6718-4d05-9c22-7d570d27b2cd</string> -        </map> -    <key>UIImgBtnScrollLeftOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>43773e8d-49aa-48e0-80f3-a04715f4677a</string> -        </map> -    <key>UIImgBtnScrollRightInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>b749de64-e903-4c3c-ac0b-25fb6fa39cb5</string> -        </map> -    <key>UIImgBtnScrollRightOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>3d700d19-e708-465d-87f2-46c8c0ee7938</string> -        </map> -    <key>UIImgBtnScrollUpInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>a93abdf3-27b5-4e22-a8fa-c48216cd2e3a</string> -        </map> -    <key>UIImgBtnScrollUpOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>dad084d7-9a46-452a-b0ff-4b9f1cefdde9</string> -        </map> -    <key>UIImgBtnSlideLeftInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>724996f5-b956-46f6-9844-4fcfce1d5e83</string> -        </map> -    <key>UIImgBtnSlideLeftOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>82476321-0374-4c26-9567-521535ab4cd7</string> -        </map> -    <key>UIImgBtnSlideRightInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>7eeb57d2-3f37-454d-a729-8b217b8be443</string> -        </map> -    <key>UIImgBtnSlideRightOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>1fbe4e60-0607-44d1-a50a-032eff56ae75</string> -        </map> -    <key>UIImgBtnSpinDownInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>a985ac71-052f-48e6-9c33-d931c813ac92</string> -        </map> -    <key>UIImgBtnSpinDownOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>b6d240dd-5602-426f-b606-bbb49a30726d</string> -        </map> -    <key>UIImgBtnSpinUpInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>c8450082-96a0-4319-8090-d3ff900b4954</string> -        </map> -    <key>UIImgBtnSpinUpOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>56576e6e-6710-4e66-89f9-471b59122794</string> -        </map> -    <key>UIImgBtnTabBottomInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>c001d8fd-a869-4b6f-86a1-fdcb106df9c7</string> -        </map> -    <key>UIImgBtnTabBottomOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>bf0a8779-689b-48c3-bb9a-6af546366ef4</string> -        </map> -    <key>UIImgBtnTabBottomPartialInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>eb0b0904-8c91-4f24-b500-1180b91140de</string> -        </map> -    <key>UIImgBtnTabBottomPartialOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>8dca716c-b29c-403a-9886-91c028357d6e</string> -        </map> -    <key>UIImgBtnTabTopInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>16d032e8-817b-4368-8a4e-b7b947ae3889</string> -        </map> -    <key>UIImgBtnTabTopOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>1ed83f57-41cf-4052-a3b4-2e8bb78d8191</string> -        </map> -    <key>UIImgBtnTabTopPartialInUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>7c6c6c26-0e25-4438-89bd-30d8b8e9d704</string> -        </map> -    <key>UIImgBtnTabTopPartialOutUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>932ad585-0e45-4a57-aa23-4cf81beeb7b0</string> -        </map> -    <key>UIImgBtnTearOffActiveUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string> -        </map> -    <key>UIImgBtnTearOffInactiveUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string> -        </map> -    <key>UIImgBtnTearOffPressedUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>d2524c13-4ba6-af7c-e305-8ac6cc18d86a</string> -        </map> -    <key>UIImgCheckboxActiveSelectedUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>cf4a2ed7-1533-4686-9dde-df9a37ddca55</string> -        </map> -    <key>UIImgCheckboxActiveUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>05bb64ee-96fd-4243-b74e-f40a41bc53ba</string> -        </map> -    <key>UIImgCheckboxInactiveSelectedUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>c817c642-9abd-4236-9287-ae0513fe7d2b</string> -        </map> -    <key>UIImgCheckboxInactiveUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>7d94cb59-32a2-49bf-a516-9e5a2045f9d9</string> -        </map> -    <key>UIImgCreateSelectedUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>0098b015-3daf-4cfe-a72f-915369ea97c2</string> -        </map> -    <key>UIImgCreateUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b</string> -        </map> -    <key>UIImgCrosshairsUUID</key> -        <map> -        <key>Comment</key> -            <string>Image to use for crosshair display (UUID texture reference)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>6e1a3980-bf2d-4274-8970-91e60d85fb52</string> -        </map> -    <key>UIImgDefaultEyesUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>6522e74d-1660-4e7f-b601-6f48c1659a77</string> -        </map> -    <key>UIImgDefaultGlovesUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>5748decc-f629-461c-9a36-a35a221fe21f</string> -        </map> -    <key>UIImgDefaultHairUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>7ca39b4c-bd19-4699-aff7-f93fd03d3e7b</string> -        </map> -    <key>UIImgDefaultJacketUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>5748decc-f629-461c-9a36-a35a221fe21f</string> -        </map> -    <key>UIImgDefaultPantsUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>5748decc-f629-461c-9a36-a35a221fe21f</string> -        </map> -    <key>UIImgDefaultShirtUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>5748decc-f629-461c-9a36-a35a221fe21f</string> -        </map> -    <key>UIImgDefaultShoesUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>5748decc-f629-461c-9a36-a35a221fe21f</string> -        </map> -    <key>UIImgDefaultSkirtUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>5748decc-f629-461c-9a36-a35a221fe21f</string> -        </map> -    <key>UIImgDefaultSocksUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>5748decc-f629-461c-9a36-a35a221fe21f</string> -        </map> -    <key>UIImgDefaultUnderwearUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>5748decc-f629-461c-9a36-a35a221fe21f</string> -        </map> -    <key>UIImgDirectionArrowUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>586383e8-4d9b-4fba-9196-2b5938e79c2c</string> -        </map> -    <key>UIImgFaceSelectedUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>b4870163-6208-42a9-9801-93133bf9a6cd</string> -        </map> -    <key>UIImgFaceUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>ce15fd63-b0b6-463c-a37d-ea6393208b3e</string> -        </map> -    <key>UIImgFocusSelectedUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>ab6a730e-ddfd-4982-9a32-c6de3de6d31d</string> -        </map> -    <key>UIImgFocusUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>57bc39d1-288c-4519-aea6-6d1786a5c274</string> -        </map> -    <key>UIImgGrabSelectedUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>c1e21504-f136-451d-b8e9-929037812f1d</string> -        </map> -    <key>UIImgGrabUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>c63f124c-6340-4fbf-b59e-0869a44adb64</string> -        </map> -    <key>UIImgMoveSelectedUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>46f17c7b-8381-48c3-b628-6a406e060dd6</string> -        </map> -    <key>UIImgMoveUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>2fa5dc06-bcdd-4e09-a426-f9f262d4fa65</string> -        </map> -    <key>UIImgRadioActiveSelectedUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>52f09e07-5816-4052-953c-94c6c10479b7</string> -        </map> -    <key>UIImgRadioActiveUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>7a1ba9b8-1047-4d1e-9cfc-bc478c80b63f</string> -        </map> -    <key>UIImgRadioInactiveSelectedUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>1975db39-aa29-4251-aea0-409ac09d414d</string> -        </map> -    <key>UIImgRadioInactiveUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>90688481-67ff-4af0-be69-4aa084bcad1e</string> -        </map> -    <key>UIImgResizeBottomRightUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>e3690e25-9690-4f6c-a745-e7dcd885285a</string> -        </map> -    <key>UIImgRotateSelectedUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>cdfb7fde-0d13-418a-9d89-2bd91019fc95</string> -        </map> -    <key>UIImgRotateUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>c34b1eaa-aae3-4351-b082-e26c0b636779</string> -        </map> -    <key>UIImgScaleSelectedUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>55aa57ef-508a-47f7-8867-85d21c5a810d</string> -        </map> -    <key>UIImgScaleUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>88a90fef-b448-4883-9344-ecf378a60433</string> -        </map> -    <key>UIImgWhiteUUID</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>5748decc-f629-461c-9a36-a35a221fe21f</string> -        </map> -    <key>UIScaleFactor</key> -        <map> -        <key>Comment</key> -            <string>Size of UI relative to default layout on 1024x768 screen</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>1</real> -        </map> -    <key>UISndAlert</key> -        <map> -        <key>Comment</key> -            <string>Sound file for alerts (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>ed124764-705d-d497-167a-182cd9fa2e6c</string> -        </map> -    <key>UISndBadKeystroke</key> -        <map> -        <key>Comment</key> -            <string>Sound file for invalid keystroke (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>2ca849ba-2885-4bc3-90ef-d4987a5b983a</string> -        </map> -    <key>UISndClick</key> -        <map> -        <key>Comment</key> -            <string>Sound file for mouse click (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string> -        </map> -    <key>UISndClickRelease</key> -        <map> -        <key>Comment</key> -            <string>Sound file for mouse button release (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string> -        </map> -    <key>UISndDebugSpamToggle</key> -        <map> -        <key>Comment</key> -            <string>Log UI sound effects as they are played</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>UISndHealthReductionF</key> -        <map> -        <key>Comment</key> -            <string>Sound file for female pain (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>219c5d93-6c09-31c5-fb3f-c5fe7495c115</string> -        </map> -    <key>UISndHealthReductionM</key> -        <map> -        <key>Comment</key> -            <string>Sound file for male pain (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>e057c244-5768-1056-c37e-1537454eeb62</string> -        </map> -    <key>UISndHealthReductionThreshold</key> -        <map> -        <key>Comment</key> -            <string>Amount of health reduction required to trigger "pain" sound</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>10</real> -        </map> -    <key>UISndInvalidOp</key> -        <map> -        <key>Comment</key> -            <string>Sound file for invalid operations (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>4174f859-0d3d-c517-c424-72923dc21f65</string> -        </map> -    <key>UISndMoneyChangeDown</key> -        <map> -        <key>Comment</key> -            <string>Sound file for L$ balance increase (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>104974e3-dfda-428b-99ee-b0d4e748d3a3</string> -        </map> -    <key>UISndMoneyChangeThreshold</key> -        <map> -        <key>Comment</key> -            <string>Amount of change in L$ balance required to trigger "money" sound</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>50</real> -        </map> -    <key>UISndMoneyChangeUp</key> -        <map> -        <key>Comment</key> -            <string>Sound file for L$ balance decrease(uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>77a018af-098e-c037-51a6-178f05877c6f</string> -        </map> -    <key>UISndNewIncomingIMSession</key> -        <map> -        <key>Comment</key> -            <string>Sound file for new instant message session(uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>67cc2844-00f3-2b3c-b991-6418d01e1bb7</string> -        </map> -    <key>UISndObjectCreate</key> -        <map> -        <key>Comment</key> -            <string>Sound file for object creation (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>f4a0660f-5446-dea2-80b7-6482a082803c</string> -        </map> -    <key>UISndObjectDelete</key> -        <map> -        <key>Comment</key> -            <string>Sound file for object deletion (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>0cb7b00a-4c10-6948-84de-a93c09af2ba9</string> -        </map> -    <key>UISndObjectRezIn</key> -        <map> -        <key>Comment</key> -            <string>Sound file for rezzing objects (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>3c8fc726-1fd6-862d-fa01-16c5b2568db6</string> -        </map> -    <key>UISndObjectRezOut</key> -        <map> -        <key>Comment</key> -            <string>Sound file for derezzing objects (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>00000000-0000-0000-0000-000000000000</string> -        </map> -    <key>UISndPieMenuAppear</key> -        <map> -        <key>Comment</key> -            <string>Sound file for opening pie menu (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>8eaed61f-92ff-6485-de83-4dcc938a478e</string> -        </map> -    <key>UISndPieMenuHide</key> -        <map> -        <key>Comment</key> -            <string>Sound file for closing pie menu (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>00000000-0000-0000-0000-000000000000</string> -        </map> -    <key>UISndPieMenuSliceHighlight0</key> -        <map> -        <key>Comment</key> -            <string>Sound file for selecting pie menu item 0 (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>d9f73cf8-17b4-6f7a-1565-7951226c305d</string> -        </map> -    <key>UISndPieMenuSliceHighlight1</key> -        <map> -        <key>Comment</key> -            <string>Sound file for selecting pie menu item 1 (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>f6ba9816-dcaf-f755-7b67-51b31b6233e5</string> -        </map> -    <key>UISndPieMenuSliceHighlight2</key> -        <map> -        <key>Comment</key> -            <string>Sound file for selecting pie menu item 2 (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>7aff2265-d05b-8b72-63c7-dbf96dc2f21f</string> -        </map> -    <key>UISndPieMenuSliceHighlight3</key> -        <map> -        <key>Comment</key> -            <string>Sound file for selecting pie menu item 3 (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>09b2184e-8601-44e2-afbb-ce37434b8ba1</string> -        </map> -    <key>UISndPieMenuSliceHighlight4</key> -        <map> -        <key>Comment</key> -            <string>Sound file for selecting pie menu item 4 (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>bbe4c7fc-7044-b05e-7b89-36924a67593c</string> -        </map> -    <key>UISndPieMenuSliceHighlight5</key> -        <map> -        <key>Comment</key> -            <string>Sound file for selecting pie menu item 5 (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>d166039b-b4f5-c2ec-4911-c85c727b016c</string> -        </map> -    <key>UISndPieMenuSliceHighlight6</key> -        <map> -        <key>Comment</key> -            <string>Sound file for selecting pie menu item 6 (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>242af82b-43c2-9a3b-e108-3b0c7e384981</string> -        </map> -    <key>UISndPieMenuSliceHighlight7</key> -        <map> -        <key>Comment</key> -            <string>Sound file for selecting pie menu item 7 (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>c1f334fb-a5be-8fe7-22b3-29631c21cf0b</string> -        </map> -    <key>UISndSnapshot</key> -        <map> -        <key>Comment</key> -            <string>Sound file for taking a snapshot (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>3d09f582-3851-c0e0-f5ba-277ac5c73fb4</string> -        </map> -    <key>UISndStartIM</key> -        <map> -        <key>Comment</key> -            <string>Sound file for starting a new IM session (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>c825dfbc-9827-7e02-6507-3713d18916c1</string> -        </map> -    <key>UISndTeleportOut</key> -        <map> -        <key>Comment</key> -            <string>Sound file for teleporting (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>d7a9a565-a013-2a69-797d-5332baa1a947</string> -        </map> -    <key>UISndTyping</key> -        <map> -        <key>Comment</key> -            <string>Sound file for starting to type a chat message (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>5e191c7b-8996-9ced-a177-b2ac32bfea06</string> -        </map> -    <key>UISndWindowClose</key> -        <map> -        <key>Comment</key> -            <string>Sound file for closing a window (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>2c346eda-b60c-ab33-1119-b8941916a499</string> -        </map> -    <key>UISndWindowOpen</key> -        <map> -        <key>Comment</key> -            <string>Sound file for opening a window (uuid for sound asset)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>c80260ba-41fd-8a46-768a-6bf236360e3a</string> -        </map> -    <key>UseAltKeyForMenus</key> -        <map> -        <key>Comment</key> -            <string>Access menus via keyboard by tapping Alt</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>UseChatBubbles</key> -        <map> -        <key>Comment</key> -            <string>Show chat above avatars head in chat bubbles</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>UseDebugLogin</key> -        <map> -        <key>Comment</key> -            <string>Provides extra control over which grid to connect to</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>UseDebugMenus</key> -        <map> -        <key>Comment</key> -            <string>Turns on "Debug" menu</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>UseDefaultColorPicker</key> -        <map> -        <key>Comment</key> -            <string>Use color picker supplied by operating system</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>UseEnergy</key> -        <map> -        <key>Comment</key> -            <string /> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>UseExternalBrowser</key> -        <map> -        <key>Comment</key> -            <string>Use default browser when opening web pages instead of in-world browser.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>UseFreezeFrame</key> -        <map> -        <key>Comment</key> -            <string>Freeze time when taking snapshots.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>UseOcclusion</key> -        <map> -        <key>Comment</key> -            <string>Enable object culling based on occlusion (coverage) by other objects</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>UseWebPagesOnPrims</key> -        <map> -        <key>Comment</key> -            <string>[NOT USED]</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>UserConnectionPort</key> -        <map> -        <key>Comment</key> -            <string>Port that this client transmits on.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>U32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>UserLogFile</key> -        <map> -        <key>Comment</key> -            <string>User specified log file name.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>UserLoginInfo</key> -        <map> -        <key>Comment</key> -            <string>Users loging data.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>LLSD</string> -        <key>Value</key> -            <map /> -        </map> -    <key>UserSettingsFile</key> -        <map> -        <key>Comment</key> -            <string>Persisted client settings file name (per user).</string> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>VFSOldSize</key> -        <map> -        <key>Comment</key> -            <string>[DO NOT MODIFY] Controls resizing of local file cache</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>U32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>VFSSalt</key> -        <map> -        <key>Comment</key> -            <string>[DO NOT MODIFY] Controls local file caching behavior</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>U32</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>VectorizeEnable</key> -        <map> -        <key>Comment</key> -            <string>Enable general vector operations and data alignment.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>VectorizePerfTest</key> -        <map> -        <key>Comment</key> -            <string>Test SSE/vectorization performance and choose fastest version.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>VectorizeProcessor</key> -        <map> -        <key>Comment</key> -            <string>0=Compiler Default, 1=SSE, 2=SSE2, autodetected</string> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>U32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>VectorizeSkin</key> -        <map> -        <key>Comment</key> -            <string>Enable vector operations for avatar skinning.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>VelocityInterpolate</key> -        <map> -        <key>Comment</key> -            <string>Extrapolate object motion from last packet based on received velocity</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>VerboseLogs</key> -        <map> -        <key>Comment</key> -            <string>Display source file and line number for each log item for debugging purposes</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>VersionChannelName</key> -        <map> -        <key>Comment</key> -            <string>Versioning Channel Name.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>Second Life Release</string> -        </map> -    <key>VertexShaderEnable</key> -        <map> -        <key>Comment</key> -            <string>Enable/disable all GLSL shaders (debug)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>VivoxDebugLevel</key> -        <map> -        <key>Comment</key> -            <string>Logging level to use when launching the vivox daemon</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>-1</string> -        </map> -    <key>VivoxDebugServerName</key> -        <map> -        <key>Comment</key> -            <string>Hostname of the vivox account server to use for voice when not connected to Agni.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>bhd.vivox.com</string> -        </map> -    <key>VoiceCallsFriendsOnly</key> -        <map> -        <key>Comment</key> -            <string>Only accept voice calls from residents on your friends list</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>VoiceEarLocation</key> -        <map> -        <key>Comment</key> -            <string>Location of the virtual ear for voice</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>VoiceHost</key> -        <map> -        <key>Comment</key> -            <string>Client SLVoice host to connect to</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>127.0.0.1</string> -        </map> -    <key>VoiceImageLevel0</key> -        <map> -        <key>Comment</key> -            <string>Texture UUID for voice image level 0</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>041ee5a0-cb6a-9ac5-6e49-41e9320507d5</string> -        </map> -    <key>VoiceImageLevel1</key> -        <map> -        <key>Comment</key> -            <string>Texture UUID for voice image level 1</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>29de489d-0491-fb00-7dab-f9e686d31e83</string> -        </map> -    <key>VoiceImageLevel2</key> -        <map> -        <key>Comment</key> -            <string>Texture UUID for voice image level 2</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>29de489d-0491-fb00-7dab-f9e686d31e83</string> -        </map> -    <key>VoiceImageLevel3</key> -        <map> -        <key>Comment</key> -            <string>Texture UUID for voice image level 3</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>29de489d-0491-fb00-7dab-f9e686d31e83</string> -        </map> -    <key>VoiceImageLevel4</key> -        <map> -        <key>Comment</key> -            <string>Texture UUID for voice image level 4</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>29de489d-0491-fb00-7dab-f9e686d31e83</string> -        </map> -    <key>VoiceImageLevel5</key> -        <map> -        <key>Comment</key> -            <string>Texture UUID for voice image level 5</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>29de489d-0491-fb00-7dab-f9e686d31e83</string> -        </map> -    <key>VoiceImageLevel6</key> -        <map> -        <key>Comment</key> -            <string>Texture UUID for voice image level 6</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>29de489d-0491-fb00-7dab-f9e686d31e83</string> -        </map> -    <key>VoiceInputAudioDevice</key> -        <map> -        <key>Comment</key> -            <string>Audio input device to use for voice</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>Default</string> -        </map> -    <key>VoiceOutputAudioDevice</key> -        <map> -        <key>Comment</key> -            <string>Audio output device to use for voice</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>Default</string> -        </map> -    <key>VoicePort</key> -        <map> -        <key>Comment</key> -            <string>Client SLVoice port to connect to</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>U32</string> -        <key>Value</key> -            <integer>44124</integer> -        </map> -    <key>WarnAboutBadPCI</key> -        <map> -        <key>Comment</key> -            <string>Enables AboutBadPCI warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnAboutDirectX9</key> -        <map> -        <key>Comment</key> -            <string>Enables AboutDirectX9 warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnAboutOldGraphicsDriver</key> -        <map> -        <key>Comment</key> -            <string>Enables AboutOldGraphicsDriver warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnAboutPCIGraphics</key> -        <map> -        <key>Comment</key> -            <string>Enables AboutPCIGraphics warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnBrowserLaunch</key> -        <map> -        <key>Comment</key> -            <string>Enables BrowserLaunch warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnDeedObject</key> -        <map> -        <key>Comment</key> -            <string>Enables DeedObject warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstAppearance</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstAppearance warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstAttach</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstAttach warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstBalanceDecrease</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstBalanceDecrease warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstBalanceIncrease</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstBalanceIncrease warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstBuild</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstBuild warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstDebugMenus</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstDebugMenus warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstFlexible</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstFlexible warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstGoTo</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstGoTo warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstInventory</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstInventory warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstLeftClickNoHit</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstLeftClickNoHit warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstMap</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstMap warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstOverrideKeys</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstOverrideKeys warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstSandbox</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstSandbox warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstSculptedPrim</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstSculptedPrim warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstSit</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstSit warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstStreamingMusic</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstStreamingMusic warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstStreamingVideo</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstStreamingVideo warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstTeleport</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstTeleport warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnFirstVoice</key> -        <map> -        <key>Comment</key> -            <string>Enables FirstVoice warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnNewClassified</key> -        <map> -        <key>Comment</key> -            <string>Enables NewClassified warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnQuickTimeInstalled</key> -        <map> -        <key>Comment</key> -            <string>Enables QuickTimeInstalled warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WarnReturnToOwner</key> -        <map> -        <key>Comment</key> -            <string>Enables ReturnToOwner warning dialog</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -	<key>WindLightUseAtmosShaders</key> -		<map> -		<key>Comment</key> -			<string>Whether to enable or disable WindLight atmospheric shaders.</string> -		<key>Persist</key> -			<integer>1</integer> -		<key>Type</key> -			<string>Boolean</string> -		<key>Value</key> -			<integer>1</integer> -		</map> -    <key>WindowHeight</key> -        <map> -        <key>Comment</key> -            <string>SL viewer window height</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>700</integer> -        </map> -    <key>WindowMaximized</key> -        <map> -        <key>Comment</key> -            <string>SL viewer window maximized on login</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>WindowWidth</key> -        <map> -        <key>Comment</key> -            <string>SL viewer window width</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>1000</integer> -        </map> -    <key>WindowX</key> -        <map> -        <key>Comment</key> -            <string>X coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>10</integer> -        </map> -    <key>WindowY</key> -        <map> -        <key>Comment</key> -            <string>Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>10</integer> -        </map> -    <key>WLSkyDetail</key> -		<map> -		<key>Comment</key> -			<string>Controls vertex detail on the WindLight sky.  Lower numbers will give better performance and uglier skies.</string> -		<key>Persist</key> -			<integer>1</integer> -		<key>Type</key> -			<string>U32</string> -		<key>Value</key> -			<integer>64</integer> -		</map> -    <key>XferThrottle</key> -        <map> -        <key>Comment</key> -            <string>Maximum allowable downstream bandwidth for asset transfers (bits per second)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>150000</real> -        </map> -    <key>YawFromMousePosition</key> -        <map> -        <key>Comment</key> -            <string>Horizontal range over which avatar head tracks mouse position (degrees of head rotation from left of window to right)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>90</real> -        </map> -    <key>YieldTime</key> -        <map> -        <key>Comment</key> -            <string>Yield some time to the local host.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>-1</integer> -        </map> -    <key>ZoomTime</key> -        <map> -        <key>Comment</key> -            <string>Time of transition between different camera modes (seconds)</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>F32</string> -        <key>Value</key> -            <real>0.4000000059604644775390625</real> -        </map> -    <key>llOwnerSayChatColor</key> -        <map> -        <key>Comment</key> -            <string>Color of chat messages from objects only visible to the owner</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Color4</string> -        <key>Value</key> -            <array> -                <real>0.9900000095367431640625</real> -                <real>0.9900000095367431640625</real> -                <real>0.689999997615814208984375</real> -                <real>1</real> -            </array> -        </map> -    <key>ParcelMediaAutoPlayEnable</key> -        <map> -        <key>Comment</key> -            <string>Auto play parcel media when available</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>particlesbeacon</key> -        <map> -        <key>Comment</key> -            <string>Beacon / Highlight particle generators</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>physicalbeacon</key> -        <map> -        <key>Comment</key> -            <string>Beacon / Highlight physical objects</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>renderbeacons</key> -        <map> -        <key>Comment</key> -            <string>Beacon / Highlight particle generators</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>renderhighlights</key> -        <map> -        <key>Comment</key> -            <string>Beacon / Highlight scripted objects with touch function</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>scriptsbeacon</key> -        <map> -        <key>Comment</key> -            <string>Beacon / Highlight scripted objects</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>scripttouchbeacon</key> -        <map> -        <key>Comment</key> -            <string>Beacon / Highlight scripted objects with touch function</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>soundsbeacon</key> -        <map> -        <key>Comment</key> -            <string>Beacon / Highlight sound generators</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -	<key>SkyEditPresets</key> -		<map> -		<key>Comment</key> -			<string>Whether to be able to edit the sky defaults or not</string> -		<key>Persist</key> -			<integer>1</integer> -		<key>Type</key> -			<string>Boolean</string> -		<key>Value</key> -			<integer>0</integer> -		</map> -	<key>WaterGLFogDepthFloor</key> -		<map> -		<key>Comment</key> -			<string>Controls how dark water gl fog can get</string> -		<key>Persist</key> -			<integer>1</integer> -		<key>Type</key> -			<string>F32</string> -		<key>Value</key> -			<real>0.25</real> -		</map> -	<key>WaterGLFogDepthScale</key> -		<map> -		<key>Comment</key> -			<string>Controls how quickly gl fog gets dark under water</string> -		<key>Persist</key> -			<integer>1</integer> -		<key>Type</key> -			<string>F32</string> -		<key>Value</key> -			<real>50.0</real> -		</map> -	<key>WaterGLFogDensityScale</key> -		<map> -		<key>Comment</key> -			<string>Maps shader water fog density to gl fog density</string> -		<key>Persist</key> -			<integer>1</integer> -		<key>Type</key> -			<string>F32</string> -		<key>Value</key> -			<real>0.02</real> -		</map> -	<key>EnableRippleWater</key> -		<map> -		<key>Comment</key> -			<string>Whether to use ripple water shader or not</string> -		<key>Persist</key> -			<integer>1</integer> -		<key>Type</key> -			<string>Boolean</string> -		<key>Value</key> -			<integer>1</integer> -		</map> -	<key>WaterEditPresets</key> -	    <map> -	    <key>Comment</key> -		    <string>Whether to be able to edit the water defaults or not</string> -	    <key>Persist</key> -		    <integer>1</integer> -	    <key>Type</key> -		    <string>Boolean</string> -	    <key>Value</key> -		    <integer>0</integer> -	    </map> -    <key>FloaterEnvRect</key> -	    <map> -	    <key>Comment</key> -		    <string>Rectangle for Environment Editor</string> -	    <key>Persist</key> -		    <integer>1</integer> -	    <key>Type</key> -		    <string>Rect</string> -	    <key>Value</key> -            <array> -                <integer>50</integer> -                <integer>150</integer> -                <integer>650</integer> -                <integer>0</integer> -            </array> -	    </map> -    <key>FloaterAdvancedSkyRect</key> -	    <map> -	    <key>Comment</key> -		    <string>Rectangle for Advanced Sky Editor</string> -	    <key>Persist</key> -		    <integer>1</integer> -	    <key>Type</key> -		    <string>Rect</string> -	    <key>Value</key> -            <array> -                <integer>50</integer> -                <integer>220</integer> -                <integer>450</integer> -                <integer>0</integer> -            </array> -	    </map> -    <key>FloaterDayCycleRect</key> -	    <map> -	    <key>Comment</key> -		    <string>Rectangle for Day Cycle Editor</string> -	    <key>Persist</key> -		    <integer>1</integer> -	    <key>Type</key> -		    <string>Rect</string> -	    <key>Value</key> -            <array> -                <integer>50</integer> -                <integer>450</integer> -                <integer>300</integer> -                <integer>0</integer> -            </array> -	    </map> -    <key>FloaterAdvancedWaterRect</key> -	    <map> -	    <key>Comment</key> -		    <string>Rectangle for Advanced Water Editor</string> -	    <key>Persist</key> -		    <integer>1</integer> -	    <key>Type</key> -		    <string>Rect</string> -	    <key>Value</key> -            <array> -                <integer>50</integer> -                <integer>220</integer> -                <integer>450</integer> -                <integer>0</integer> -            </array> -	    </map> -    <key>AlertedUnsupportedHardware</key> -		<map> -		<key>Comment</key> -			<string>Toggle that lets us tell the user he's on old hardware only once</string> -		<key>Persist</key> -			<integer>1</integer> -		<key>Type</key> -			<string>Boolean</string> -		<key>Value</key> -			<integer>0</integer> -		</map> -    <key>RenderFastAlpha</key> -		<map> -		<key>Comment</key> -			<string>Use lossy alpha rendering optimization (opaque/nonexistent small alpha faces).</string> -		<key>Persist</key> -			<integer>1</integer> -		<key>Type</key> -			<string>Boolean</string> -		<key>Value</key> -			<integer>1</integer> -		</map> -    </map> -</llsd> diff --git a/indra/newview/app_settings/settings_crash_behavior.xml b/indra/newview/app_settings/settings_crash_behavior.xml deleted file mode 100644 index cc7f5ac88b..0000000000 --- a/indra/newview/app_settings/settings_crash_behavior.xml +++ /dev/null @@ -1,15 +0,0 @@ -<llsd> -    <map> -    <key>CrashSubmitBehavior</key> -        <map> -        <key>Comment</key> -            <string>Controls behavior when viewer crashes (0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report)</string> -		<key>Persist</key> -		    <integer>1</integer> -        <key>Type</key> -            <string>S32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    </map> -</llsd> diff --git a/indra/newview/app_settings/settings_files.xml b/indra/newview/app_settings/settings_files.xml deleted file mode 100644 index 997bb0c33c..0000000000 --- a/indra/newview/app_settings/settings_files.xml +++ /dev/null @@ -1,22 +0,0 @@ -<llsd> -  <map> -    <key>Files</key> -        <map> -        <key>Comment</key> -            <string>List of settings files to load. Key is the identifier, value is the filename</string> -        <key>Persist</key> -            <integer>0</integer> -        <key>Type</key> -            <string>LLSD</string> -        <key>Value</key> -		<map> -		  <key>Global</key> -		  <string>settings.xml</string> -		  <key>PerAccount</key> -		  <string>settings_per_account.xml</string> -		  <key>CrashSettings</key> -		  <string>settings_crash_behavior.xml</string> -		</map> -		</map> -  </map> -</llsd> diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml deleted file mode 100644 index 90c7b11637..0000000000 --- a/indra/newview/app_settings/settings_per_account.xml +++ /dev/null @@ -1,114 +0,0 @@ -<llsd> -    <map> -    <key>BusyModeResponse</key> -        <map> -        <key>Comment</key> -            <string>Auto response to instant messages while in busy mode.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string>The Resident you messaged is in 'busy mode' which means they have requested not to be disturbed.  Your message will still be shown in their IM panel for later viewing.</string> -        </map> -    <key>IMLogTimestamp</key> -        <map> -        <key>Comment</key> -            <string>Log Timestamp of Instant Messages</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>InstantMessageLogPath</key> -        <map> -        <key>Comment</key> -            <string>Path to your log files.</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>String</string> -        <key>Value</key> -            <string /> -        </map> -    <key>LastLogoff</key> -        <map> -        <key>Comment</key> -            <string>Last logoff</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>U32</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>LogChat</key> -        <map> -        <key>Comment</key> -            <string>Log Chat</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>LogChatIM</key> -        <map> -        <key>Comment</key> -            <string>Log Incoming Instant Messages with Chat</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>LogChatTimestamp</key> -        <map> -        <key>Comment</key> -            <string>Log Timestamp of Chat</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>0</integer> -        </map> -    <key>LogInstantMessages</key> -        <map> -        <key>Comment</key> -            <string>Log Instant Messages</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>LogShowHistory</key> -        <map> -        <key>Comment</key> -            <string>Log Show History</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    <key>LogTimestampDate</key> -        <map> -        <key>Comment</key> -            <string>Include Date with Timestamp</string> -        <key>Persist</key> -            <integer>1</integer> -        <key>Type</key> -            <string>Boolean</string> -        <key>Value</key> -            <integer>1</integer> -        </map> -    </map> -</llsd> diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 2fe23c9a51..420f0811ff 100644 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -917,19 +917,19 @@ Function .onInit  	; generate language ID that will be used as a command line arg	  	StrCmp $LANGUAGE "1042" 0 +3 -	StrCpy $LANGFLAGS " --set SystemLanguage ko" +	StrCpy $LANGFLAGS " -set SystemLanguage ko"  	Goto EndOfFunc  	StrCmp $LANGUAGE "1041" 0 +3 -	StrCpy $LANGFLAGS " --set SystemLanguage ja" +	StrCpy $LANGFLAGS " -set SystemLanguage ja"  	Goto EndOfFunc  	StrCmp $LANGUAGE "1031" 0 +3 -	StrCpy $LANGFLAGS " --set SystemLanguage de" +	StrCpy $LANGFLAGS " -set SystemLanguage de"  	Goto EndOfFunc  	StrCmp $LANGUAGE "1033" 0 +3 -	StrCpy $LANGFLAGS " --set SystemLanguage en-us" +	StrCpy $LANGFLAGS " -set SystemLanguage en-us"  	Goto EndOfFunc  	EndOfFunc: diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 4dab653d19..ac92ee8525 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -273,7 +273,8 @@ void LLAgentFriendObserver::changed(U32 mask)  // LLAgent()  //-----------------------------------------------------------------------------  LLAgent::LLAgent() -:	mDrawDistance( DEFAULT_FAR_PLANE ), +:	mViewerPort(NET_USE_OS_ASSIGNED_PORT), +	mDrawDistance( DEFAULT_FAR_PLANE ),  	mDoubleTapRunTimer(),  	mDoubleTapRunMode(DOUBLETAP_NONE), @@ -454,6 +455,8 @@ void LLAgent::init()  	mTrackFocusObject = gSavedSettings.getBOOL("TrackFocusObject");  //	LLDebugVarMessageBox::show("Camera Lag", &CAMERA_FOCUS_HALF_LIFE, 0.5f, 0.01f); +	gSavedSettings.getControl("RenderHideGroupTitle")->addListener(&mHideGroupTitleListener); +	gSavedSettings.getControl("EffectColor")->addListener(&mEffectColorListener);  	mEffectColor = gSavedSettings.getColor4("EffectColor"); @@ -7463,6 +7466,19 @@ void LLAgent::userRemoveAllAttachments( void* userdata )  	gMessageSystem->sendReliable( gAgent.getRegionHost() );  } +bool LLAgent::LLHideGroupTitleListener::handleEvent(LLPointer<LLEvent> event, const LLSD &userdata) +{ +	gAgent.setHideGroupTitle(event->getValue()); +	return true; + +} + +bool LLAgent::LLEffectColorListener::handleEvent(LLPointer<LLEvent> event, const LLSD &userdata) +{ +	gAgent.setEffectColor(LLColor4(event->getValue())); +	return true; +} +  void LLAgent::observeFriends()  {  	if(!mFriendObserver) diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 50830a75f0..469d2e4fe0 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -36,7 +36,6 @@  #include "indra_constants.h"  #include "llmath.h" -#include "llcontrol.h"  #include "llcoordframe.h"  #include "llevent.h"  #include "llagentconstants.h" @@ -226,8 +225,8 @@ public:  	// update internal datastructures and update the server with the  	// new contribution level. Returns true if the group id was found  	// and contribution could be set. -	BOOL 			setGroupContribution(const LLUUID& group_id, S32 contribution); -	BOOL 			setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile); +	BOOL setGroupContribution(const LLUUID& group_id, S32 contribution); +	BOOL setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile);  	void			setHideGroupTitle(BOOL hide)	{ mHideGroupTitle = hide; }  	// @@ -687,6 +686,7 @@ protected:  						BOOL notify = TRUE);  public:  	// TODO: Make these private! +	U32				mViewerPort;				// Port this agent transmits on.  	LLUUID			mSecureSessionID;			// secure token for this login session  	F32				mDrawDistance; @@ -932,6 +932,21 @@ private:  		LLPointer<LLRefCount> mCB;  	}; +	//control listeners +	class LLHideGroupTitleListener: public LLSimpleListener +	{ +	public: +		bool handleEvent(LLPointer<LLEvent> event, const LLSD &userdata); +	}; + +	class LLEffectColorListener: public LLSimpleListener +	{ +	public: +		bool handleEvent(LLPointer<LLEvent> event, const LLSD &userdata); +	}; + +	LLHideGroupTitleListener mHideGroupTitleListener; +	LLEffectColorListener mEffectColorListener;  	LLFriendObserver* mFriendObserver;  }; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index ffa2a82646..8c7af9ebf7 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -62,13 +62,10 @@  #include "llmutelist.h"  #include "llurldispatcher.h"  #include "llurlhistory.h" -#include "llfirstuse.h"  #include "llweb.h"  #include "llsecondlifeurls.h" -#include <boost/bind.hpp> -  #if LL_WINDOWS  	#include "llwindebug.h"  #endif @@ -156,7 +153,10 @@  #include "llinventoryview.h" -#include "llcommandlineparser.h" +// *FIX: Remove these once the command line params thing is figured out. +// Yuck! +static int gTempArgC = 0; +static char** gTempArgV;  // *FIX: These extern globals should be cleaned up.  // The globals either represent state/config/resource-storage of either  @@ -169,6 +169,7 @@  //----------------------------------------------------------------------------  // llviewernetwork.h  #include "llviewernetwork.h" +// extern EGridInfo gGridChoice;  ////// Windows-specific includes to the bottom - nasty defines in these pollute the preprocessor @@ -215,8 +216,14 @@ extern BOOL gPeriodicSlowFrame;  ////////////////////////////////////////////////////////////  // All from the last globals push... +bool gVerifySSLCert = true;  BOOL gHandleKeysAsync = FALSE; +BOOL gProbeHardware = TRUE; // Use DirectX 9 to probe for hardware + +S32 gYieldMS = 0; // set in parse_args, used in mainLoop +BOOL gYieldTime = FALSE; +  const F32 DEFAULT_AFK_TIMEOUT = 5.f * 60.f; // time with no input before user flagged as Away From Keyboard  F32 gSimLastTime; // Used in LLAppViewer::init and send_stats() @@ -227,10 +234,21 @@ LLString gDisabledMessage; // Set in LLAppViewer::initConfiguration used in idle  BOOL gHideLinks = FALSE; // Set in LLAppViewer::initConfiguration, used externally  BOOL				gAllowIdleAFK = TRUE; +F32					gAFKTimeout = DEFAULT_AFK_TIMEOUT;  BOOL				gShowObjectUpdates = FALSE; +BOOL gLogMessages = FALSE; +std::string gChannelName = LL_CHANNEL; +BOOL gUseAudio = TRUE;  BOOL gUseQuickTime = TRUE; +LLString gCmdLineFirstName; +LLString gCmdLineLastName; +LLString gCmdLinePassword; + +BOOL				gAutoLogin = FALSE;  const char*			DEFAULT_SETTINGS_FILE = "settings.xml"; +BOOL gRequestInventoryLibrary = TRUE; +BOOL gGodConnect = FALSE;  BOOL gAcceptTOS = FALSE;  BOOL gAcceptCriticalMessage = FALSE; @@ -261,6 +279,7 @@ F32					gLogoutMaxTime = LOGOUT_REQUEST_TIME;  LLUUID gInventoryLibraryOwner;  LLUUID gInventoryLibraryRoot; +BOOL				gDisableVoice = FALSE;  BOOL				gDisconnected = FALSE;  // Map scale in pixels per region @@ -272,11 +291,17 @@ LLFrameTimer	gRestoreGLTimer;  BOOL			gRestoreGL = FALSE;  BOOL				gUseWireframe = FALSE; +F32					gMouseSensitivity = 3.f; +BOOL				gInvertMouse = FALSE; +  // VFS globals - see llappviewer.h  LLVFS* gStaticVFS = NULL;  LLMemoryInfo gSysMemory; +bool gPreloadImages = true; +bool gPreloadSounds = true; +  LLString gLastVersionChannel;  LLVector3			gWindVec(3.0, 3.0, 0.0); @@ -286,14 +311,34 @@ U32		gPacketsIn = 0;  BOOL				gPrintMessagesThisFrame = FALSE; +BOOL gUseConsole = TRUE; +  BOOL gRandomizeFramerate = FALSE;  BOOL gPeriodicSlowFrame = FALSE; +BOOL gQAMode = FALSE;  BOOL gLLErrorActivated = FALSE; +  ////////////////////////////////////////////////////////////  // Internal globals... that should be removed. +static F32 gQuitAfterSeconds = 0.f; +static BOOL gRotateRight = FALSE; +static BOOL gIgnorePixelDepth = FALSE; + +// Allow multiple viewers in ReleaseForDownload +#if LL_RELEASE_FOR_DOWNLOAD +static BOOL gMultipleViewersOK = FALSE; +#else +static BOOL gMultipleViewersOK = TRUE; +#endif + +static std::map<std::string, std::string> gCommandLineSettings; +static std::map<std::string, std::string> gCommandLineForcedSettings; +  static LLString gArgs; +static LLString gOldSettingsFileName; +static const char* LEGACY_DEFAULT_SETTINGS_FILE = "settings.ini";  const char* MARKER_FILE_NAME = "SecondLife.exec_marker";  const char* ERROR_MARKER_FILE_NAME = "SecondLife.error_marker";  const char* LLERROR_MARKER_FILE_NAME = "SecondLife.llerror_marker"; @@ -315,10 +360,52 @@ std::string gLoginPage;  std::vector<std::string> gLoginURIs;  static std::string gHelperURI; +static const char USAGE[] = "\n" +"usage:\tviewer [options]\n" +"options:\n" +" -login <first> <last> <password>     log in as a user\n" +" -autologin                           log in as last saved user\n" +" -loginpage <URL>                     login authentication page to use\n" +" -loginuri <URI>                      login server and CGI script to use\n" +" -helperuri <URI>                     helper web CGI prefix to use\n" +" -settings <filename>                 specify the filename of a\n" +"                                        configuration file\n" +"                                        default is settings.xml\n" +" -setdefault <variable> <value>       specify the value of a particular\n" +"                                        configuration variable which can be\n" +"                                        overridden by settings.xml\n" +" -set <variable> <value>              specify the value of a particular\n" +"                                        configuration variable that\n" +"                                        overrides all other settings\n" +#if !LL_RELEASE_FOR_DOWNLOAD +" -sim <simulator_ip>                  specify the simulator ip address\n" +#endif +" -god		                           log in as god if you have god access\n" +" -purge                               delete files in cache\n" +" -safe                                reset preferences, run in safe mode\n" +" -noutc                               logs in local time, not UTC\n" +" -nothread                            run vfs in single thread\n" +" -noinvlib                            Do not request inventory library\n" +" -multiple                            allow multiple viewers\n" +" -nomultiple                          block multiple viewers\n" +" -novoice                             disable voice\n" +" -ignorepixeldepth                    ignore pixel depth settings\n" +" -cooperative [ms]                    yield some idle time to local host\n" +" -skin                                ui/branding skin folder to use\n" +#if LL_WINDOWS +" -noprobe                             disable hardware probe\n" +#endif +" -noquicktime                         disable QuickTime movies, speeds startup\n" +" -nopreload                           don't preload UI images or sounds, speeds startup\n" +// these seem to be unused +//" -noenv                               turn off environmental effects\n" +//" -proxy <proxy_ip>                    specify the proxy ip address\n" +"\n"; +  void idle_afk_check()  {  	// check idle timers -	if (gAllowIdleAFK && (gAwayTriggerTimer.getElapsedTimeF32() > gSavedSettings.getF32("AFKTimeout"))) +	if (gAllowIdleAFK && (gAwayTriggerTimer.getElapsedTimeF32() > gAFKTimeout))  	{  		gAgent.setAFK();  	} @@ -357,7 +444,7 @@ void request_initial_instant_messages()  // Use these strictly for things that are constructed at startup,  // or for things that are performance critical.  JC -static void settings_to_globals() +static void saved_settings_to_globals()  {  	LLBUTTON_H_PAD		= gSavedSettings.getS32("ButtonHPad");  	LLBUTTON_V_PAD		= gSavedSettings.getS32("ButtonVPad"); @@ -395,15 +482,15 @@ static void settings_to_globals()  	gDebugWindowProc = gSavedSettings.getBOOL("DebugWindowProc");  	gAllowIdleAFK = gSavedSettings.getBOOL("AllowIdleAFK"); +	gAFKTimeout = gSavedSettings.getF32("AFKTimeout"); +	gMouseSensitivity = gSavedSettings.getF32("MouseSensitivity"); +	gInvertMouse = gSavedSettings.getBOOL("InvertMouse");  	gShowObjectUpdates = gSavedSettings.getBOOL("ShowObjectUpdates");  	gMapScale = gSavedSettings.getF32("MapScale");  	gMiniMapScale = gSavedSettings.getF32("MiniMapScale");  	gHandleKeysAsync = gSavedSettings.getBOOL("AsyncKeyboard");  	LLHoverView::sShowHoverTips = gSavedSettings.getBOOL("ShowHoverTips"); -} -static void settings_modify() -{  	LLRenderTarget::sUseFBO				= gSavedSettings.getBOOL("RenderUseFBO");  	LLVOAvatar::sUseImpostors			= gSavedSettings.getBOOL("RenderUseImpostors");  	LLVOSurfacePatch::sLODFactor		= gSavedSettings.getF32("RenderTerrainLODFactor"); @@ -445,74 +532,367 @@ static void settings_modify()  	// propagate push to talk preference to current status  	gSavedSettings.setBOOL("PTTCurrentlyEnabled", gSavedSettings.getBOOL("EnablePushToTalk")); + +	settings_setup_listeners(); + +	// gAgent.init() also loads from saved settings.  } -void initGridChoice() +int parse_args(int argc, char **argv)  { -    LLString gridChoice = gSavedSettings.getString("GridChoice"); -    if(!gridChoice.empty()) +	// Sometimes IP addresses passed in on the command line have leading +	// or trailing white space.  Use LLString to clean that up. +	LLString ip_string; +	S32 j; + +	for (j = 1; j < argc; j++)  +	{  		// Used to show first chunk of each argument passed in the   		// window title. -    { -        // find the grid choice from the user setting. -        int gridIndex = GRID_INFO_NONE;  -        for(;gridIndex < GRID_INFO_OTHER; ++gridIndex ) -        { -            if(0 == LLString::compareInsensitive(gGridInfo[gridIndex].mLabel, gridChoice.c_str())) -            { -                gGridChoice = (EGridInfo)gridIndex; - -                if(GRID_INFO_LOCAL == gGridChoice) -                { -                    gGridName = LOOPBACK_ADDRESS_STRING; -                    break; -                } -                else -                { -                    gGridName = gGridInfo[gGridChoice].mName; -                    break; -                } -            } -        } - -        if(GRID_INFO_OTHER == gridIndex) -        { -                // *FIX:MEP Can and should we validate that this is an IP address? -                gGridChoice = (EGridInfo)gridIndex; -                gGridName = llformat("%s", gSavedSettings.getString("GridChoice").c_str()); - -        } -    } +		gArgs += argv[j]; +		gArgs += " "; +		LLString argument = argv[j]; +		if ((!strcmp(argv[j], "-port")) && (++j < argc))  +		{ +			sscanf(argv[j], "%u", &(gAgent.mViewerPort)); +		} +		else if ((!strcmp(argv[j], "-drop")) && (++j < argc))  +		{ +			sscanf(argv[j], "%f", &gPacketDropPercentage); +		} +		else if ((!strcmp(argv[j], "-inbw")) && (++j < argc)) +		{ +			sscanf(argv[j], "%f", &gInBandwidth); +		} +		else if ((!strcmp(argv[j], "-outbw")) && (++j < argc)) +		{ +			sscanf(argv[j], "%f", &gOutBandwidth); +		} +		else if (!strcmp(argv[j], "--aditi")) +		{ +			gGridChoice = GRID_INFO_ADITI; +			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore +		} +		else if (!strcmp(argv[j], "--agni")) +		{ +			gGridChoice = GRID_INFO_AGNI; +			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore +		} +		else if (!strcmp(argv[j], "--aruna")) +		{ +			gGridChoice = GRID_INFO_ARUNA; +			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName); +		} +		else if (!strcmp(argv[j], "--durga")) +		{ +			gGridChoice = GRID_INFO_DURGA; +			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore +		} +		else if (!strcmp(argv[j], "--ganga")) +		{ +			gGridChoice = GRID_INFO_GANGA; +			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName); +		} +		else if (!strcmp(argv[j], "--mitra")) +		{ +			gGridChoice = GRID_INFO_MITRA; +			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName); +		} +		else if (!strcmp(argv[j], "--mohini")) +		{ +			gGridChoice = GRID_INFO_MOHINI; +			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName); +		} +		else if (!strcmp(argv[j], "--nandi")) +		{ +			gGridChoice = GRID_INFO_NANDI; +			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName); +		} +		else if (!strcmp(argv[j], "--radha")) +		{ +			gGridChoice = GRID_INFO_RADHA; +			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName); +		} +		else if (!strcmp(argv[j], "--ravi")) +		{ +			gGridChoice = GRID_INFO_RAVI; +			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName); +		} +		else if (!strcmp(argv[j], "--siva")) +		{ +			gGridChoice = GRID_INFO_SIVA; +			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore +		} +		else if (!strcmp(argv[j], "--shakti")) +		{ +			gGridChoice = GRID_INFO_SHAKTI; +			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore +		} +		else if (!strcmp(argv[j], "--soma")) +		{ +			gGridChoice = GRID_INFO_SOMA; +			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore +		} +		else if (!strcmp(argv[j], "--uma")) +		{ +			gGridChoice = GRID_INFO_UMA; +			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName); +		} +		else if (!strcmp(argv[j], "--vaak")) +		{ +			gGridChoice = GRID_INFO_VAAK; +			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName); +		} +		else if (!strcmp(argv[j], "--yami")) +		{ +			gGridChoice = GRID_INFO_YAMI; +			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName); +		} +		else if (!strcmp(argv[j], "-loginpage") && (++j < argc)) +		{ +			LLAppViewer::instance()->setLoginPage(utf8str_trim(argv[j])); +		} +		else if (!strcmp(argv[j], "-loginuri") && (++j < argc)) +		{ +            LLAppViewer::instance()->addLoginURI(utf8str_trim(argv[j])); +		} +		else if (!strcmp(argv[j], "-helperuri") && (++j < argc)) +		{ +            LLAppViewer::instance()->setHelperURI(utf8str_trim(argv[j])); +		} +		else if (!strcmp(argv[j], "-debugviews")) +		{ +			LLView::sDebugRects = TRUE; +		} +		else if (!strcmp(argv[j], "-skin") && (++j < argc)) +		{ +			std::string folder(argv[j]); +			gDirUtilp->setSkinFolder(folder); +		} +		else if (!strcmp(argv[j], "-autologin") || !strcmp(argv[j], "--autologin")) // keep --autologin for compatibility +		{ +			gAutoLogin = TRUE; +		} +		else if (!strcmp(argv[j], "-quitafter") && (++j < argc)) +		{ +			gQuitAfterSeconds = (F32)atof(argv[j]); +		} +		else if (!strcmp(argv[j], "-rotate")) +		{ +			gRotateRight = TRUE; +		} +//		else if (!strcmp(argv[j], "-noenv"))  +//		{ +			//turn OFF environmental effects for slow machines/video cards +//			gRequestParaboloidMap = FALSE; +//		} +		else if (!strcmp(argv[j], "-noaudio")) +		{ +			gUseAudio = FALSE; +		} +		else if (!strcmp(argv[j], "-nosound"))  // tends to be popular cmdline on Linux. +		{ +			gUseAudio = FALSE; +		} +		else if (!strcmp(argv[j], "-noprobe")) +		{ +			gProbeHardware = FALSE; +		} +		else if (!strcmp(argv[j], "-noquicktime")) +		{ +			// Developers can log in faster if they don't load all the +			// quicktime dlls. +			gUseQuickTime = false; +		} +		else if (!strcmp(argv[j], "-nopreload")) +		{ +			// Developers can log in faster if they don't decode sounds +			// or images on startup, ~5 seconds faster. +			gPreloadSounds = false; +			gPreloadImages = false; +		} +		else if (!strcmp(argv[j], "-purge")) +		{ +			LLAppViewer::instance()->purgeCache(); +		} +		else if(!strcmp(argv[j], "-noinvlib")) +		{ +			gRequestInventoryLibrary = FALSE; +		} +		else if (!strcmp(argv[j], "-log")) +		{ +			gLogMessages = TRUE; +			continue; +		} +		else if (!strcmp(argv[j], "-logfile") && (++j < argc))  +		{ +			// *NOTE: This buffer size is hard coded into scanf() below. +			char logfile[256];	// Flawfinder: ignore +			sscanf(argv[j], "%255s", logfile);	// Flawfinder: ignore +			llinfos << "Setting log file to " << logfile << llendl; +			LLFile::remove(logfile); +			LLError::logToFile(logfile); +		} +		else if (!strcmp(argv[j], "-settings") && (++j < argc))  +		{ +			gSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, argv[j]); +		} +		else if (!strcmp(argv[j], "-setdefault") && (j + 2 < argc))  +		{ +			std::string control_name; +			std::string control_value; +			 +			j++; +			if (argv[j]) control_name = std::string(argv[j]); -#if !LL_RELEASE_FOR_DOWNLOAD -	if (gGridChoice == GRID_INFO_NONE) -	{ -		// Development version: load last server choice by default (overridden by cmd line args) -		S32 server = gSavedSettings.getS32("ServerChoice"); -		if (server != 0) -			gGridChoice = (EGridInfo)llclamp(server, 0, (S32)GRID_INFO_COUNT - 1); -		if (server == GRID_INFO_OTHER) +			j++; +			if (argv[j]) control_value = std::string(argv[j]); +			 +			// grab control name and value +			if (!control_name.empty()) +			{ +				gCommandLineSettings[control_name] = control_value; +			} +		} +		else if (!strcmp(argv[j], "-set") && (j + 2 < argc))   		{ -			LLString custom_server = gSavedSettings.getString("CustomServer"); -			if (custom_server.empty()) +			std::string control_name; +			std::string control_value; +			 +			j++; +			if (argv[j]) control_name = std::string(argv[j]); + +			j++; +			if (argv[j]) control_value = std::string(argv[j]); +			 +			// grab control name and value +			if (!control_name.empty())  			{ -				gGridName = "none"; +				gCommandLineForcedSettings[control_name] = control_value; +			} +		} +		else if (!strcmp(argv[j], "-login")) +		{ +			if (j + 3 < argc) +			{ +				j++; +				gCmdLineFirstName = argv[j]; +				j++; +				gCmdLineLastName = argv[j]; +				j++; +				gCmdLinePassword = argv[j];  			}  			else  			{ -				gGridName = custom_server.c_str(); +				// only works if -login is last parameter on command line +				llerrs << "Not enough parameters to -login. Did you mean -loginuri?" << llendl;  			}  		} -        gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mName); -	} +		else if (!strcmp(argv[j], "-god")) +		{ +			gGodConnect = TRUE; +		} +		else if (!strcmp(argv[j], "-noconsole")) +		{ +			gUseConsole = FALSE; +		} +		else if (!strcmp(argv[j], "-safe")) +		{ +			llinfos << "Setting viewer feature table to run in safe mode, resetting prefs" << llendl; +			gFeatureManagerp->setSafe(TRUE); +		} +		else if (!strcmp(argv[j], "-multiple")) +		{ +			gMultipleViewersOK = TRUE; +		} +		else if (!strcmp(argv[j], "-nomultiple")) +		{ +			gMultipleViewersOK = FALSE; +		} +		else if (!strcmp(argv[j], "-novoice")) +		{ +			gDisableVoice = TRUE; +		} +		else if (!strcmp(argv[j], "-nothread")) +		{ +			LLVFile::ALLOW_ASYNC = FALSE; +			llinfos << "Running VFS in nothread mode" << llendl; +		} +		// some programs don't respect the command line options in protocol handlers (I'm looking at you, Opera) +		// so this allows us to parse the URL straight off the command line without a "-url" paramater +		else if (LLURLDispatcher::isSLURL(argv[j]) +				 || !strcmp(argv[j], "-url") && (++j < argc))  +		{ +			std::string slurl = argv[j]; +			if (LLURLDispatcher::isSLURLCommand(slurl)) +			{ +				LLStartUp::sSLURLCommand = slurl; +			} +			else +			{ +				LLURLSimString::setString(slurl); +			} +			// *NOTE: After setting the url, bail. What can happen is +			// that someone can use IE (or potentially other browsers) +			// and do the rough equivalent of command injection and +			// steal passwords. Phoenix. SL-55321 +			return 0; +		} +		else if (!strcmp(argv[j], "-ignorepixeldepth")) +		{ +			gIgnorePixelDepth = TRUE; +		} +		else if (!strcmp(argv[j], "-cooperative")) +		{ +			S32 ms_to_yield = 0; +			if(++j < argc) +			{ +				S32 rv = sscanf(argv[j], "%d", &ms_to_yield); +				if(0 == rv) +				{ +					--j; +				} +			} +			else +			{ +				--j; +			} +			gYieldMS = ms_to_yield; +			gYieldTime = TRUE; +		} +		else if (!strcmp(argv[j], "-no-verify-ssl-cert")) +		{ +			gVerifySSLCert = false; +		} +		else if ( (!strcmp(argv[j], "--channel") || !strcmp(argv[j], "-channel"))  && (++j < argc))  +		{ +			gChannelName = argv[j]; +		} +#if LL_DARWIN +		else if (!strncmp(argv[j], "-psn_", 5)) +		{ +			// this is the Finder passing the process session number +			// we ignore this +		}  #endif +		else if(!strncmp(argv[j], "-qa", 3)) +		{ +			gQAMode = TRUE; +		} +		else +		{ -	if (gGridChoice == GRID_INFO_NONE) -	{ -		gGridChoice = GridDefaultChoice; -        gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mName); +			// DBC - Mac OS X passes some stuff by default on the command line (e.g. psn). +			// Second Life URLs are passed this way as well? +			llwarns << "Possible unknown keyword " << argv[j] << llendl; + +			// print usage information +			llinfos << USAGE << llendl; +			// return 1; +		}  	} +	return 0;  }  bool send_url_to_other_instance(const std::string& url) @@ -558,12 +938,11 @@ LLAppViewer::LLAppViewer() :  	mReportedCrash(false),  	mNumSessions(0),  	mPurgeCache(false), -	mPurgeOnExit(false), -	mSecondInstance(false), +    mPurgeOnExit(false), +    mSecondInstance(false),  	mSavedFinalSnapshot(false), -	mQuitRequested(false), -	mLogoutRequestSent(false), -	mYieldTime(-1) +    mQuitRequested(false), +    mLogoutRequestSent(false)  {  	if(NULL != sInstance)  	{ @@ -579,6 +958,13 @@ LLAppViewer::~LLAppViewer()  	removeMarkerFile();  } +bool LLAppViewer::tempStoreCommandOptions(int argc, char** argv) +{ +	gTempArgC = argc; +	gTempArgV = argv; +	return true; +} +  bool LLAppViewer::init()  {      // *NOTE:Mani - LLCurl::initClass is not thread safe.  @@ -587,6 +973,7 @@ bool LLAppViewer::init()      initThreads(); +	initEarlyConfiguration();  	//  	// Start of the application @@ -606,24 +993,61 @@ bool LLAppViewer::init()  	//  	// OK to write stuff to logs now, we've now crash reported if necessary  	// -    if (!initConfiguration()) -		return false; -    writeSystemInfo(); +	// Set up some defaults... +	gSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, DEFAULT_SETTINGS_FILE); +	gOldSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, LEGACY_DEFAULT_SETTINGS_FILE); -	// Build a string representing the current version number. -    gCurrentVersion = llformat("%s %d.%d.%d.%d",  -        gSavedSettings.getString("VersionChannelName").c_str(),  -        LL_VERSION_MAJOR,  -        LL_VERSION_MINOR,  -        LL_VERSION_PATCH,  -        LL_VERSION_BUILD ); +    if (!initConfiguration()) +		return false;  	//////////////////////////////////////////////////////////////////////////////  	//////////////////////////////////////////////////////////////////////////////  	//////////////////////////////////////////////////////////////////////////////  	//////////////////////////////////////////////////////////////////////////////  	// *FIX: The following code isn't grouped into functions yet. + +	// +	// Write system information into the debug log (CPU, OS, etc.) +	// +	writeSystemInfo(); + +	// Build a string representing the current version number. +        gCurrentVersion = llformat("%s %d.%d.%d.%d", gChannelName.c_str(), LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VERSION_BUILD ); +	 +	// +	// Merge with the command line overrides +	gSavedSettings.applyOverrides(gCommandLineSettings); + +	// Need to do this before calling parseAlerts +	gUICtrlFactory = new LLViewerUICtrlFactory(); +	 +	// Pre-load alerts.xml to define the warnings settings (always loads from skins/xui/en-us/) +	// Do this *before* loading the settings file +	LLAlertDialog::parseAlerts("alerts.xml", &gSavedSettings, TRUE); +	 +	// Overwrite default settings with user settings +	llinfos << "Loading configuration file " << gSettingsFileName << llendl; +	if (0 == gSavedSettings.loadFromFile(gSettingsFileName)) +	{ +		llinfos << "Failed to load settings from " << gSettingsFileName << llendl; +		llinfos << "Loading legacy settings from " << gOldSettingsFileName << llendl; +		gSavedSettings.loadFromFileLegacy(gOldSettingsFileName); +	} + +	// need to do this here - need to have initialized global settings first +	LLString nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" ); +	if ( nextLoginLocation.length() ) +	{ +		LLURLSimString::setString( nextLoginLocation.c_str() ); +	}; + +	// Merge with the command line overrides +	gSavedSettings.applyOverrides(gCommandLineForcedSettings); + +	gLastRunVersion = gSavedSettings.getString("LastRunVersion"); + +	fixup_settings();  	// Get the single value from the crash settings file, if it exists  	std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE); @@ -663,25 +1087,56 @@ bool LLAppViewer::init()  	{  		LLError::setPrintLocation(true);  	} + +#if !LL_RELEASE_FOR_DOWNLOAD +	if (gGridChoice == GRID_INFO_NONE) +	{ +		// Development version: load last server choice by default (overridden by cmd line args) +		 +		S32 server = gSavedSettings.getS32("ServerChoice"); +		if (server != 0) +			gGridChoice = (EGridInfo)llclamp(server, 0, (S32)GRID_INFO_COUNT - 1); +		if (server == GRID_INFO_OTHER) +		{ +			LLString custom_server = gSavedSettings.getString("CustomServer"); +			if (custom_server.empty()) +			{ +				snprintf(gGridName, MAX_STRING, "none");		/* Flawfinder: ignore */ +			} +			else +			{ +				snprintf(gGridName, MAX_STRING, "%s", custom_server.c_str());		/* Flawfinder: ignore */ +			} +		} +	} +#endif + +	if (gGridChoice == GRID_INFO_NONE) +	{ +		gGridChoice = GridDefaultChoice; +	}  	// Load art UUID information, don't require these strings to be declared in code.  	LLString viewer_art_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"viewerart.xml");  	llinfos << "Loading art table from " << viewer_art_filename << llendl; -	gViewerArt.loadFromFileLegacy(viewer_art_filename.c_str(), FALSE); +	gViewerArt.loadFromFile(viewer_art_filename.c_str(), FALSE);  	LLString textures_filename = gDirUtilp->getExpandedFilename(LL_PATH_SKINS, "textures", "textures.xml");  	llinfos << "Loading art table from " << textures_filename << llendl; -	gViewerArt.loadFromFileLegacy(textures_filename.c_str(), FALSE); +	gViewerArt.loadFromFile(textures_filename.c_str(), FALSE);  	LLString colors_base_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors_base.xml");  	llinfos << "Loading base colors from " << colors_base_filename << llendl; -	gColors.loadFromFileLegacy(colors_base_filename.c_str(), FALSE, TYPE_COL4U); +	gColors.loadFromFile(colors_base_filename.c_str(), FALSE, TYPE_COL4U);  	// Load overrides from user colors file  	LLString user_colors_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors.xml");  	llinfos << "Loading user colors from " << user_colors_filename << llendl; -	if (gColors.loadFromFileLegacy(user_colors_filename.c_str(), FALSE, TYPE_COL4U) == 0) +	if (gColors.loadFromFile(user_colors_filename.c_str(), FALSE, TYPE_COL4U) == 0)  	{ -		llinfos << "Cannot load user colors from " << user_colors_filename << llendl; +		llinfos << "Failed to load user colors from " << user_colors_filename << llendl; +		LLString user_legacy_colors_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors.ini"); +		llinfos << "Loading legacy colors from " << user_legacy_colors_filename << llendl; +		gColors.loadFromFileLegacy(user_legacy_colors_filename.c_str(), FALSE, TYPE_COL4U);  	}  	// Widget construction depends on LLUI being initialized @@ -704,18 +1159,16 @@ bool LLAppViewer::init()  	LLAgent::parseTeleportMessages("teleport_strings.xml"); -	LLViewerJointMesh::updateVectorize(); -  	// load MIME type -> media impl mappings  	LLMIMETypes::parseMIMETypes( "mime_types.xml" );  +	mCrashBehavior = gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING); + +	LLVectorPerformanceOptions::initClass(); + +	// Move certain saved settings into global variables for speed +	saved_settings_to_globals(); -	// Copy settings to globals. *TODO: Remove or move to appropriage class initializers -    	settings_to_globals(); -	// Setup settings listeners -	settings_setup_listeners(); -	// Modify settings based on system configuration and compile options -	settings_modify();  	// Find partition serial number (Windows) or hardware serial (Mac)  	mSerialNumber = generateSerialNumber(); @@ -980,9 +1433,9 @@ bool LLAppViewer::mainLoop()  				bool run_multiple_threads = gSavedSettings.getBOOL("RunMultipleThreads");  				// yield some time to the os based on command line option -				if(mYieldTime >= 0) +				if(gYieldTime)  				{ -					ms_sleep(mYieldTime); +					ms_sleep(gYieldMS);  				}  				// yield cooperatively when not running as foreground window @@ -1254,11 +1707,11 @@ bool LLAppViewer::cleanup()  	// Must do this after all panels have been deleted because panels that have persistent rects  	// save their rects on delete. -	gSavedSettings.saveToFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);	 - -	// UserSettingsFile should be empty if no use has been logged on. -	// *FIX:Mani This should get really saved in a "logoff" mode.  -	gSavedPerAccountSettings.saveToFile(gSavedSettings.getString("UserSettingsFile"), TRUE); +	gSavedSettings.saveToFile(gSettingsFileName, TRUE); +	if (!gPerAccountSettingsFileName.empty()) +	{ +		gSavedPerAccountSettings.saveToFile(gPerAccountSettingsFileName, TRUE); +	}  	llinfos << "Saved settings" << llendflush;  	std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE); @@ -1353,10 +1806,10 @@ bool LLAppViewer::cleanup()  	end_messaging_system(); -	// *NOTE:Mani - The following call is not thread safe.  -	LLCurl::cleanupClass(); +    // *NOTE:Mani - The following call is not thread safe.  +    LLCurl::cleanupClass(); -	// If we're exiting to launch an URL, do that here so the screen +    // If we're exiting to launch an URL, do that here so the screen  	// is at the right resolution before we launch IE.  	if (!gLaunchFileOnQuit.empty())  	{ @@ -1377,6 +1830,106 @@ bool LLAppViewer::cleanup()  	return true;  } +bool LLAppViewer::initEarlyConfiguration() +{ +	// *FIX: globals - This method sets a bunch of globals early in the init process. +	int argc = gTempArgC; +	char** argv = gTempArgV; + +	// HACK! We REALLY want to know what grid they were trying to connect to if they +	// crashed hard. +	// So we walk through the command line args ONLY looking for the +	// userserver arguments first.  And we don't do ANYTHING but set +	// the gGridName (which gets passed to the crash reporter). +	// We're assuming that they're trying to log into the same grid as last +	// time, which seems fairly reasonable. +	snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GridDefaultChoice].mName);		// Flawfinder: ignore +	S32 j; +	for (j = 1; j < argc; j++)  +	{ +		if (!strcmp(argv[j], "--aditi")) +		{ +			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_ADITI].mName);		// Flawfinder: ignore +		} +		else if (!strcmp(argv[j], "--agni")) +		{ +			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_AGNI].mName);		// Flawfinder: ignore +		} +		else if (!strcmp(argv[j], "--siva")) +		{ +			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_SIVA].mName);		// Flawfinder: ignore +		} +		else if (!strcmp(argv[j], "--shakti")) +		{ +			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_SHAKTI].mName); +		} +		else if (!strcmp(argv[j], "--durga")) +		{ +			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_DURGA].mName);		// Flawfinder: ignore +		} +		else if (!strcmp(argv[j], "--soma")) +		{ +			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_SOMA].mName);		// Flawfinder: ignore +		} +		else if (!strcmp(argv[j], "--ganga")) +		{ +			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_GANGA].mName);		// Flawfinder: ignore  +		} +		else if (!strcmp(argv[j], "--vaak")) +		{ +			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_VAAK].mName); +		} +		else if (!strcmp(argv[j], "--uma")) +		{ +			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_UMA].mName); +		} +		else if (!strcmp(argv[j], "--mohini")) +		{ +			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_MOHINI].mName); +		} +		else if (!strcmp(argv[j], "--yami")) +		{ +			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_YAMI].mName); +		} +		else if (!strcmp(argv[j], "--nandi")) +		{ +			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_NANDI].mName); +		} +		else if (!strcmp(argv[j], "--mitra")) +		{ +			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_MITRA].mName); +		} +		else if (!strcmp(argv[j], "--radha")) +		{ +			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_RADHA].mName); +		} +		else if (!strcmp(argv[j], "--ravi")) +		{ +			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_RAVI].mName); +		} +		else if (!strcmp(argv[j], "--aruna")) +		{ +			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_ARUNA].mName); +		} +		else if (!strcmp(argv[j], "-multiple")) +		{ +			// Hack to detect -multiple so we can disable the marker file check (which will always fail) +			gMultipleViewersOK = TRUE; +		} +		else if (!strcmp(argv[j], "-novoice")) +		{ +			// May need to know this early also +			gDisableVoice = TRUE; +		} +		else if (!strcmp(argv[j], "-url") && (++j < argc))  +		{ +			LLURLSimString::setString(argv[j]); +		} +	} + +	return true; +} +  bool LLAppViewer::initThreads()  {  #if MEM_TRACK_MEM @@ -1437,275 +1990,14 @@ bool LLAppViewer::initLogging()  	return true;  } -void LLAppViewer::loadSettingsFromDirectory(ELLPath path_index) -{ -	for(LLSD::map_iterator itr = mSettingsFileList.beginMap(); itr != mSettingsFileList.endMap(); ++itr) -	{ -		LLString settings_name = (*itr).first; -		LLString settings_file = mSettingsFileList[settings_name].asString(); -		LLString full_settings_path = gDirUtilp->getExpandedFilename(path_index, settings_file); -		if(gSettings.find(settings_name) == gSettings.end()) -		{ -			llwarns << "Cannot load " << settings_file << " - No matching settings group for name " << settings_name << llendl; -			continue; -		} -		if(!gSettings[settings_name]->loadFromFile(gDirUtilp->getExpandedFilename(path_index, settings_file))) -		{ -			llwarns << "Cannot load " << full_settings_path << " - No settings found." << llendl; -		} -		else -		{ -			llinfos << "Loaded settings file " << full_settings_path << llendl; -		} -	} -} -  bool LLAppViewer::initConfiguration()  { -	//Set up internal pointers	 -	gSettings["Global"] = &gSavedSettings; -	gSettings["PerAccount"] = &gSavedPerAccountSettings; -	gSettings["CrashSettings"] = &gCrashSettings; - -	//Load settings files list -	std::string settings_file_list = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "settings_files.xml"); -	LLControlGroup settings_control; -	llinfos << "Loading settings file list" << settings_file_list << llendl; -	if (0 == settings_control.loadFromFile(settings_file_list)) -	{ -        llerrs << "Cannot load default configuration file " << settings_file_list << llendl; -	} - -	mSettingsFileList = settings_control.getLLSD("Files"); -	 -	//Order of loading -	// - App Settings (Defaults) -	// - user_settings (Client Overrides) -	// - user directory (user specific overrides, happens in llstartup) -	loadSettingsFromDirectory(LL_PATH_APP_SETTINGS); - -	//Fix settings that require compiled information -	gSavedSettings.setString("ClientSettingsFile",  -        gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, DEFAULT_SETTINGS_FILE)); -	gSavedSettings.setString("VersionChannelName", LL_CHANNEL); -    #ifndef	LL_RELEASE_FOR_DOWNLOAD -        gSavedSettings.setBOOL("ShowConsoleWindow", TRUE); -    #endif - -	// These are warnings that appear on the first experience of that condition. -	// They are already set in the settings_default.xml file, but still need to be added to LLFirstUse -	// for disable/reset ability -	LLFirstUse::addConfigVariable("FirstBalanceIncrease"); -	LLFirstUse::addConfigVariable("FirstBalanceDecrease"); -	LLFirstUse::addConfigVariable("FirstSit"); -	LLFirstUse::addConfigVariable("FirstMap"); -	LLFirstUse::addConfigVariable("FirstGoTo"); -	LLFirstUse::addConfigVariable("FirstBuild"); -	LLFirstUse::addConfigVariable("FirstLeftClickNoHit"); -	LLFirstUse::addConfigVariable("FirstTeleport"); -	LLFirstUse::addConfigVariable("FirstOverrideKeys"); -	LLFirstUse::addConfigVariable("FirstAttach"); -	LLFirstUse::addConfigVariable("FirstAppearance"); -	LLFirstUse::addConfigVariable("FirstInventory"); -	LLFirstUse::addConfigVariable("FirstSandbox"); -	LLFirstUse::addConfigVariable("FirstFlexible"); -	LLFirstUse::addConfigVariable("FirstDebugMenus"); -	LLFirstUse::addConfigVariable("FirstStreamingMusic"); -	LLFirstUse::addConfigVariable("FirstStreamingVideo"); -	LLFirstUse::addConfigVariable("FirstSculptedPrim"); -	LLFirstUse::addConfigVariable("FirstVoice"); -	LLFirstUse::addConfigVariable("FirstMedia"); -		 -    ////// -    // *FIX:Mani - Find a way to remove the gUICtrlFactory and -    // LLAlertDialog::parseAlerts dependecies on the being loaded -    // *before* the user settings. Having to do this init here -    // seems odd.  - -   	// Need to do this before calling parseAlerts -	gUICtrlFactory = new LLViewerUICtrlFactory(); -	 -	// Pre-load alerts.xml to define the warnings settings (always loads from skins/xui/en-us/) -	// Do this *before* loading the settings file -	LLAlertDialog::parseAlerts("alerts.xml", &gSavedSettings, TRUE); - -	// Overwrite default user settings with	user settings -	loadSettingsFromDirectory(LL_PATH_USER_SETTINGS); - -	// Parse command line settings. -	LLControlGroupCLP clp; -	std::string	cmd_line_config	= gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, -														  "cmd_line.xml"); -	clp.configure(cmd_line_config, &gSavedSettings); - -	if(!initParseCommandLine(clp)) +	// Ye olde parse_args()... +	if(!doConfigFromCommandLine())  	{ -		llwarns	 -			<< "Error parsing command line options.	Command	Line options ignored."  -			<< llendl; - -		llinfos	<< "Command	line usage:\n" << clp << llendl; -	} - -	// If the user has specified a alternate settings file name. -	// Load	it now. -	if(clp.hasOption("settings")) -	{ -		std::string	user_settings_filename = clp.getOption("settings")[0]; -		std::string	full_settings_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,  -																		 user_settings_filename); - -		llinfos	<< "Loading	command	line specified settings	file: "	<< full_settings_path << llendl; - -		if(!gSavedSettings.loadFromFile(full_settings_path))		 -		{ -			llwarns	<< "File not found:	" << full_settings_path	<< llendl; -		} - -		gSavedSettings.setString("ClientSettingsFile", full_settings_path); -	} - -	// Apply the command line params to	the	settings system. -	// Anyway the following	call to	notify depends upon	the	settings being init'd. -	clp.notify();  - -	// Start up	the	debugging console before handling other	options. -	if (gSavedSettings.getBOOL("ShowConsoleWindow")) -	{ -		initConsole(); -	} - -	if(clp.hasOption("help")) -	{ -		llinfos	<< "Command	line usage:\n" << clp << llendl;  		return false;  	} - -    ////////////////////////// -    // Apply settings... -    if(clp.hasOption("setdefault")) -    { -        //const LLCommandLineParser::token_vector_t& setdefault = clp.getOption("setdefault"); -        //if(0x1 & setdefault.size()) -        //{ -        //    llwarns << "Invalid '--setdefault' parameter count." << llendl; -        //} -        //else -        //{ -        //    LLCommandLineParser::token_vector_t::const_iterator itr = setdefault.begin(); -        //    for(; itr != setdefault.end(); ++itr) -        //    { -        //        const std::string& name = *itr; -        //        const std::string& value = *(++itr); -        //        LLControlVariable* c = gSettings["global"]->getControl(name); -        //        if(c) -        //        { -        //            c->setDefault(value); -        //        } -        //        else -        //        { -        //            llwarns << "'--setdefault' specified with unknown setting: '" -        //                << name << "'." << llendl; -        //        } -        //    } -        //} -    } - -    if(clp.hasOption("set")) -    { -        const LLCommandLineParser::token_vector_t& set_values = clp.getOption("set"); -        if(0x1 & set_values.size()) -        { -            llwarns << "Invalid '--set' parameter count." << llendl; -        } -        else -        { -            LLCommandLineParser::token_vector_t::const_iterator itr = set_values.begin(); -            for(; itr != set_values.end(); ++itr) -            { -                const std::string& name = *itr; -                const std::string& value = *(++itr); -                LLControlVariable* c = gSettings["Global"]->getControl(name); -                if(c) -                { -                    c->setValue(value, false); -                } -                else -                { -                    llwarns << "'--set' specified with unknown setting: '" -                        << name << "'." << llendl; -                } -            } -        } -    } - -    initGridChoice(); - -    // Handle slurl use. NOTE: Don't let SL-55321 reappear. - -    // *FIX: This init code should be made more robust to prevent  -    // the issue SL-55321 from returning. One thought is to allow  -    // only select options to be set from command line when a slurl  -    // is specified. More work on the settings system is needed to  -    // achieve this. For now... - -    // *NOTE:Mani The command line parser parses tokens and is  -    // setup to bail after parsing the '--url' option or the  -    // first option specified without a '--option' flag (or -    // any other option that uses the 'last_option' setting -  -    // see LLControlGroupCLP::configure()) - -    // What can happen is that someone can use IE (or potentially  -    // other browsers) and do the rough equivalent of command  -    // injection and steal passwords. Phoenix. SL-55321 -    if(clp.hasOption("url")) -    { -        std::string slurl = clp.getOption("url")[0]; -        if (LLURLDispatcher::isSLURLCommand(slurl)) -        { -	        LLStartUp::sSLURLCommand = slurl; -        } -        else -        { -	        LLURLSimString::setString(slurl); -        } -    } -    else if(clp.hasOption("slurl")) -    { -        std::string slurl = clp.getOption("slurl")[0]; -        if(LLURLDispatcher::isSLURL(slurl)) -        { -            if (LLURLDispatcher::isSLURLCommand(slurl)) -            { -	            LLStartUp::sSLURLCommand = slurl; -            } -            else -            { -	            LLURLSimString::setString(slurl); -            } -        } -    } - -    const LLControlVariable* loginuri = gSavedSettings.getControl("LoginURI"); -    if(loginuri && LLString::null != loginuri->getValue().asString()) -    {    -        addLoginURI(loginuri->getValue().asString()); -    } - -    const LLControlVariable* helperuri = gSavedSettings.getControl("HelperURI"); -    if(helperuri && LLString::null != helperuri->getValue().asString()) -    {    -        setHelperURI(helperuri->getValue().asString()); -    } - -    const LLControlVariable* skinfolder = gSavedSettings.getControl("SkinFolder"); -    if(skinfolder && LLString::null != skinfolder->getValue().asString()) -    {    -        gDirUtilp->setSkinFolder(skinfolder->getValue().asString()); -    } - -    mYieldTime = gSavedSettings.getS32("YieldTime"); -              +	  	// XUI:translate  	gSecondLife = "Second Life"; @@ -1776,6 +2068,19 @@ bool LLAppViewer::initConfiguration()  	gStartTime = totalTime(); +	//////////////////////////////////////// +	// +	// Process ini files +	// + +	// declare all possible setting variables +	declare_settings(); + +#if !LL_RELEASE_FOR_DOWNLOAD +//	only write the defaults for non-release builds! +	gSavedSettings.saveToFile(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,"settings_default.xml").c_str(), FALSE); +#endif +  	//  	// Set the name of the window  	// @@ -1788,7 +2093,7 @@ bool LLAppViewer::initConfiguration()  #endif  	LLString::truncate(gWindowTitle, 255); -	if (!gSavedSettings.getBOOL("AllowMultipleViewers")) +	if (!gMultipleViewersOK)  	{  	    //  	    // Check for another instance of the app running @@ -1914,12 +2219,12 @@ bool LLAppViewer::initConfiguration()  		if (mSecondInstance)  		{ -			gSavedSettings.setBOOL("CmdLineDisableVoice", TRUE); +			gDisableVoice = TRUE;  			/* Don't start another instance if using -multiple  			//RN: if we received a URL, hand it off to the existing instance -			if (LLURLSimString::parse()) -			{ -				LLURLSimString::send_to_other_instance(); +		    if (LLURLSimString::parse()) +		    { +			    LLURLSimString::send_to_other_instance();  				return 1;  			}  			*/ @@ -1928,15 +2233,95 @@ bool LLAppViewer::initConfiguration()  		initMarkerFile();  	} -   	// need to do this here - need to have initialized global settings first -	LLString nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" ); -	if ( nextLoginLocation.length() ) +	return true; // Config was successful. +} + +bool LLAppViewer::doConfigFromCommandLine() +{ +	// *FIX: This is what parse args used to do, minus the arg reading part. +	// Now the arg parsing is handled by LLApp::parseCommandOptions() and this +	// method need only interpret settings. Perhaps some day interested parties  +	// can ask an app about a setting rather than have the app set  +	// a gazzillion globals. +	 +	///////////////////////////////////////// +	// +	// Process command line arguments +	// +	S32 args_result = 0; + +#if LL_DARWIN  	{ -		LLURLSimString::setString( nextLoginLocation.c_str() ); -	}; +		// On the Mac, read in arguments.txt (if it exists) and process it for additional arguments. +		LLString args; +		if(_read_file_into_string(args, "arguments.txt"))		/* Flawfinder: ignore*/ +		{ +			// The arguments file exists.   +			// It should consist of command line arguments separated by newlines. +			// Split it into individual arguments and build a fake argv[] to pass to parse_args. +			std::vector<std::string> arglist; +			 +			arglist.push_back("newview"); +			 +			llinfos << "Reading additional command line arguments from arguments.txt..." << llendl; +			 +			typedef boost::tokenizer<boost::escaped_list_separator<char> > tokenizer; +			boost::escaped_list_separator<char> sep("\\", "\r\n ", "\"'"); +			tokenizer tokens(args, sep); +			tokenizer::iterator token_iter; -	gLastRunVersion = gSavedSettings.getString("LastRunVersion"); -	return true; // Config was successful. +			for(token_iter = tokens.begin(); token_iter != tokens.end(); ++token_iter) +			{ +				llinfos << "argument: '" << (token_iter->c_str()) << "'" << llendl; +				 +				arglist.push_back(*token_iter); +			} + +			char **fakeargv = new char*[arglist.size()]; +			int i; +			for(i=0; i < arglist.size(); i++) +				fakeargv[i] = const_cast<char*>(arglist[i].c_str()); +				 +			args_result = parse_args(arglist.size(), fakeargv); +			delete[] fakeargv; +		} +		 +		// Get the user's preferred language string based on the Mac OS localization mechanism. +		// To add a new localization: +			// go to the "Resources" section of the project +			// get info on "language.txt" +			// in the "General" tab, click the "Add Localization" button +			// create a new localization for the language you're adding +			// set the contents of the new localization of the file to the string corresponding to our localization +			//   (i.e. "en-us", "ja", etc.  Use the existing ones as a guide.) +		CFURLRef url = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("language"), CFSTR("txt"), NULL); +		char path[MAX_PATH]; +		if(CFURLGetFileSystemRepresentation(url, false, (UInt8 *)path, sizeof(path))) +		{ +			LLString lang; +			if(_read_file_into_string(lang, path))		/* Flawfinder: ignore*/ +			{ +				gCommandLineForcedSettings["SystemLanguage"] = lang; +			} +		} +		CFRelease(url); +	} +#endif + +	int argc = gTempArgC; +	char** argv = gTempArgV; + +	// +	// Parse the command line arguments +	// +	args_result |= parse_args(argc, argv); +	if (args_result) +	{ +		removeMarkerFile(); +		return false; +	} + +	return true;  }  bool LLAppViewer::initWindow() @@ -1955,11 +2340,10 @@ bool LLAppViewer::initWindow()  	window_title_str[sizeof(window_title_str) - 1] = '\0';  	// always start windowed -	BOOL ignorePixelDepth = gSavedSettings.getBOOL("IgnorePixelDepth");  	gViewerWindow = new LLViewerWindow(window_title_str, "Second Life",  		gSavedSettings.getS32("WindowX"), gSavedSettings.getS32("WindowY"),  		gSavedSettings.getS32("WindowWidth"), gSavedSettings.getS32("WindowHeight"), -		FALSE, ignorePixelDepth); +		FALSE, gIgnorePixelDepth);  	if (gSavedSettings.getBOOL("FullScreen"))  	{ @@ -1981,14 +2365,14 @@ bool LLAppViewer::initWindow()  		// Set this flag in case we crash while initializing GL  		gSavedSettings.setBOOL("RenderInitError", TRUE); -		gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE ); +		gSavedSettings.saveToFile( gSettingsFileName, TRUE );  		gPipeline.init();  		stop_glerror();  		gViewerWindow->initGLDefaults();  		gSavedSettings.setBOOL("RenderInitError", FALSE); -		gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE ); +		gSavedSettings.saveToFile( gSettingsFileName, TRUE );  	}  	LLUI::sWindow = gViewerWindow->getWindow(); @@ -1996,6 +2380,11 @@ bool LLAppViewer::initWindow()  	LLAlertDialog::parseAlerts("alerts.xml");  	LLNotifyBox::parseNotify("notify.xml"); +	// *TODO - remove this when merging into release +	// DON'T Clean up the feature manager lookup table - settings are needed +	// for setting the graphics level. +	//gFeatureManagerp->cleanupFeatureTables(); +  	// Show watch cursor  	gViewerWindow->setCursor(UI_CURSOR_WAIT); @@ -2085,7 +2474,7 @@ void LLAppViewer::writeSystemInfo()  {  	gDebugInfo["SLLog"] = LLError::logFileName(); -	gDebugInfo["ClientInfo"]["Name"] = gSavedSettings.getString("VersionChannelName"); +	gDebugInfo["ClientInfo"]["Name"] = gChannelName;  	gDebugInfo["ClientInfo"]["MajorVersion"] = LL_VERSION_MAJOR;  	gDebugInfo["ClientInfo"]["MinorVersion"] = LL_VERSION_MINOR;  	gDebugInfo["ClientInfo"]["PatchVersion"] = LL_VERSION_PATCH; @@ -2136,7 +2525,7 @@ void LLAppViewer::handleViewerCrash()  	}  	pApp->mReportedCrash = TRUE; -	gDebugInfo["SettingsFilename"] = gSavedSettings.getString("ClientSettingsFile"); +	gDebugInfo["SettingsFilename"] = gSettingsFileName;  	gDebugInfo["CAFilename"] = gDirUtilp->getCAFile();  	gDebugInfo["ViewerExePath"] = gDirUtilp->getExecutablePathAndName().c_str();  	gDebugInfo["CurrentPath"] = gDirUtilp->getCurPath().c_str(); @@ -2277,11 +2666,7 @@ void LLAppViewer::initMarkerFile()  	ll_apr_file_remove(error_marker_file);  	//Freeze case checks -	if(anotherInstanceRunning())  -	{ -		return; -	} -	 +	if(anotherInstanceRunning()) return;  	fMarker = ll_apr_file_open(mMarkerFileName, LL_APR_RB);		  	if (fMarker != NULL)  	{ @@ -2487,7 +2872,7 @@ bool LLAppViewer::initCache()  	char static_vfs_index_file[LL_MAX_PATH];	// Flawfinder: ignore  	char static_vfs_data_file[LL_MAX_PATH];	// Flawfinder: ignore -	if (gSavedSettings.getBOOL("AllowMultipleViewers")) +	if (gMultipleViewersOK)  	{  		// don't mess with renaming the VFS in this case  		new_salt = old_salt; @@ -2686,6 +3071,17 @@ void LLAppViewer::setHelperURI(const std::string& uri)      gHelperURI = uri;  } +void LLAppViewer::setLoginPage(const std::string& login_page) +{ +	gLoginPage = login_page; +} + +const std::string& LLAppViewer::getLoginPage() +{ +	return gLoginPage; +} + +  // Callback from a dialog indicating user was logged out.    void finish_disconnect(S32 option, void* userdata)  { @@ -2854,6 +3250,8 @@ void LLAppViewer::idle()  	// Update frame timers  	static LLTimer idle_timer; +	LLControlBase::updateAllListeners(); +  	LLFrameTimer::updateFrameTime();  	LLEventTimer::updateClass();  	LLCriticalDamp::updateInterpolants(); @@ -2874,10 +3272,9 @@ void LLAppViewer::idle()  	// Smoothly weight toward current frame  	gFPSClamped = (frame_rate_clamped + (4.f * gFPSClamped)) / 5.f; -	F32 qas = gSavedSettings.getF32("QuitAfterSeconds"); -	if (qas > 0.f) +	if (gQuitAfterSeconds > 0.f)  	{ -		if (gRenderStartTime.getElapsedTimeF32() > qas) +		if (gRenderStartTime.getElapsedTimeF32() > gQuitAfterSeconds)  		{  			LLAppViewer::instance()->forceQuit();  		} @@ -2916,7 +3313,7 @@ void LLAppViewer::idle()  	    // Update simulator agent state  	    // -		if (gSavedSettings.getBOOL("RotateRight")) +		if (gRotateRight)  		{  			gAgent.moveYaw(-1.f);  		} @@ -3124,6 +3521,7 @@ void LLAppViewer::idle()  	//  	// Update weather effects  	// +  	if (!gNoRender)  	{  		gWorldp->updateClouds(gFrameDTClamped); diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index 40a69f7868..9518636f87 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -36,21 +36,15 @@ class LLTextureCache;  class LLWorkerThread;  class LLTextureFetch; -class LLCommandLineParser; -  class LLAppViewer : public LLApp  {  public:  	LLAppViewer();  	virtual ~LLAppViewer(); -    /** -     * @brief Access to the LLAppViewer singleton. -     *  -     * The LLAppViewer singleton is created in main()/WinMain(). -     * So don't use it in pre-entry (static initialization) code. -     */ -    static LLAppViewer* instance() {return sInstance; }  +	// *NOTE:Mani - Don't use this! +	// Having  +	static LLAppViewer* instance() {return sInstance; }   	//  	// Main application logic @@ -70,6 +64,10 @@ public:      bool quitRequested() { return mQuitRequested; }      bool logoutRequestSent() { return mLogoutRequestSent; } +	// *FIX: This is meant to stay only until the command line issues are hashed out with repect to LLApp::parseCommandLine +	// This version stores the argc and argv for later usage, make sure the params passed in last as long as this class. +	bool tempStoreCommandOptions(int argc, char** argv); +  	void closeDebug();  	const LLOSInfo& getOSInfo() const { return mSysOSInfo; } @@ -89,6 +87,9 @@ public:  	const std::string& getSerialNumber() { return mSerialNumber; } +	// *FIX:Mani purgeCache was made public for parse_args(). +	// If that beast is gone, make it private. +	void purgeCache(); // Clear the local cache.   	bool getPurgeCache() const { return mPurgeCache; }  	const LLString& getSecondLifeTitle() const; // The Second Life title. @@ -100,6 +101,8 @@ public:      const std::vector<std::string>& getLoginURIs() const;      const std::string& getHelperURI() const;      void resetURIs() const; +    void setLoginPage(const std::string& login_page); +    const std::string& getLoginPage();      void forceDisconnect(const LLString& msg); // Force disconnection, with a message to the user.      void badNetworkHandler(); // Cause a crash state due to bad network packet. @@ -122,26 +125,23 @@ public:      virtual void forceErrorInifiniteLoop();      virtual void forceErrorSoftwareException(); -	void loadSettingsFromDirectory(ELLPath path_index);  protected:  	virtual bool initWindow(); // Initialize the viewer's window.  	virtual bool initLogging(); // Initialize log files, logging system, return false on failure. -	virtual void initConsole() {}; // Initialize OS level debugging console.  	virtual bool initHardwareTest() { return true; } // A false result indicates the app should quit. - -    virtual bool initParseCommandLine(LLCommandLineParser& clp)  -        { return true; } // Allow platforms to specify the command line args.  	virtual std::string generateSerialNumber() = 0; // Platforms specific classes generate this.  private: +	bool initEarlyConfiguration(); // Initialize setting needed by crash reporting.  	bool initThreads(); // Initialize viewer threads, return false on failure.  	bool initConfiguration(); // Initialize settings from the command line/config file.  	bool initCache(); // Initialize local client cache. -	void purgeCache(); // Clear the local cache.  + +	bool doConfigFromCommandLine(); // calls parse args.  	void cleanupSavedSettings(); // Sets some config data to current or default values during cleanup.  	void removeCacheFiles(const char *filemask); // Deletes cached files the match the given wildcard. @@ -186,8 +186,6 @@ private:      bool mQuitRequested;				// User wants to quit, may have modified documents open.      bool mLogoutRequestSent;			// Disconnect message sent to simulator, no longer safe to send messages to the sim. -    S32 mYieldTime; -	LLSD mSettingsFileList;  };  // consts from viewer.h @@ -198,16 +196,31 @@ const S32 AGENT_UPDATES_PER_SECOND  = 10;  //  // "// llstartup" indicates that llstartup is the only client for this global. +extern bool gVerifySSLCert; // parse_args setting used by llxmlrpctransaction.cpp  extern BOOL gHandleKeysAsync; // gSavedSettings used by llviewerdisplay.cpp & llviewermenu.cpp +extern BOOL gProbeHardware;  extern LLString gDisabledMessage; // llstartup  extern BOOL gHideLinks; // used by llpanellogin, lllfloaterbuycurrency, llstartup  extern LLSD gDebugInfo;  extern BOOL	gAllowIdleAFK; +extern F32 gAFKTimeout;  extern BOOL	gShowObjectUpdates; +extern BOOL gLogMessages; // llstartup  +extern std::string gChannelName; +extern BOOL gUseAudio; // llstartup + +extern LLString gCmdLineFirstName; // llstartup +extern LLString gCmdLineLastName; +extern LLString gCmdLinePassword; + +extern BOOL gAutoLogin; // llstartup  extern const char* DEFAULT_SETTINGS_FILE; // llstartup +extern BOOL gRequestInventoryLibrary; // llstartup +extern BOOL gGodConnect; // llstartup +  extern BOOL gAcceptTOS;  extern BOOL gAcceptCriticalMessage; @@ -252,6 +265,7 @@ extern LLUUID gInventoryLibraryOwner;  extern LLUUID gInventoryLibraryRoot;  extern BOOL		gDisconnected; +extern BOOL		gDisableVoice;  // Map scale in pixels per region  extern F32 gMapScale; @@ -261,6 +275,9 @@ extern LLFrameTimer	gRestoreGLTimer;  extern BOOL			gRestoreGL;  extern BOOL		gUseWireframe; +extern F32 gMouseSensitivity; +extern BOOL gInvertMouse; +  // VFS globals - gVFS is for general use  // gStaticVFS is read-only and is shipped w/ the viewer  // it has pre-cache data like the UI .TGAs @@ -268,6 +285,9 @@ extern LLVFS	*gStaticVFS;  extern LLMemoryInfo gSysMemory; +extern bool gPreloadImages; +extern bool gPreloadSounds; +  extern LLString gLastVersionChannel;  extern LLVector3 gWindVec; @@ -278,7 +298,10 @@ extern BOOL gPrintMessagesThisFrame;  extern LLUUID gSunTextureID;  extern LLUUID gMoonTextureID; +extern BOOL gUseConsole;  +  extern BOOL gRandomizeFramerate;  extern BOOL gPeriodicSlowFrame; +extern BOOL gQAMode;  #endif // LL_LLAPPVIEWER_H diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp index c36dd2955e..1993fd0a76 100644 --- a/indra/newview/llappviewerlinux.cpp +++ b/indra/newview/llappviewerlinux.cpp @@ -31,11 +31,9 @@  #include "llviewerprecompiledheaders.h" +#include "llmemtype.h"  #include "llappviewerlinux.h" -#include "llcommandlineparser.h" - -#include "llmemtype.h"  #include "llviewernetwork.h"  #include "llmd5.h" @@ -56,12 +54,6 @@    #     include <ucontext.h>    #endif -namespace -{ -	int gArgC = 0; -	char **gArgV = NULL; -} -  int main( int argc, char **argv )   {  	LLMemType mt1(LLMemType::MTYPE_STARTUP); @@ -70,14 +62,18 @@ int main( int argc, char **argv )  	asm ("ta\t6");		 // NOTE:  Make sure memory alignment is enforced on SPARC  #endif -	gArgC = argc; -	gArgV = argv; -  	LLAppViewer* viewer_app_ptr = new LLAppViewerLinux();  	viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash); -	bool ok = viewer_app_ptr->init(); +	bool ok = viewer_app_ptr->tempStoreCommandOptions(argc, argv); +	if(!ok) +	{ +		llwarns << "Unable to parse command line." << llendl; +		return -1; +	} + +	ok = viewer_app_ptr->init();  	if(!ok)  	{  		llwarns << "Application init failed." << llendl; @@ -325,7 +321,7 @@ void LLAppViewerLinux::handleCrashReporting()  			{(char*)cmd.c_str(),  			 ask_dialog,  			 (char*)"-user", -			 (char*)gGridName.c_str(), +			 (char*)gGridName,  			 (char*)"-name",  			 (char*)LLAppViewer::instance()->getSecondLifeTitle().c_str(),  			 NULL}; @@ -407,12 +403,6 @@ bool LLAppViewerLinux::initLogging()  	return LLAppViewer::initLogging();  } -bool LLAppViewerLinux::initParseCommandLine(LLCommandLineParser& clp) -{ -	clp.parseCommandLine(gArgC, gArgV); -	return true; -} -  std::string LLAppViewerLinux::generateSerialNumber()  {  	char serial_md5[MD5HEX_STR_SIZE]; diff --git a/indra/newview/llappviewerlinux.h b/indra/newview/llappviewerlinux.h index ce91b6b8b6..f38a64a8cd 100644 --- a/indra/newview/llappviewerlinux.h +++ b/indra/newview/llappviewerlinux.h @@ -36,8 +36,6 @@  #include "llappviewer.h"  #endif -class LLCommandLineParser; -  class LLAppViewerLinux : public LLAppViewer  {  public: @@ -56,7 +54,6 @@ protected:  	virtual void handleCrashReporting();  	virtual bool initLogging(); -	virtual bool initParseCommandLine(LLCommandLineParser& clp);  };  #endif // LL_LLAPPVIEWERLINUX_H diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp index ba3f28911f..2d7091a075 100644 --- a/indra/newview/llappviewermacosx.cpp +++ b/indra/newview/llappviewermacosx.cpp @@ -36,8 +36,6 @@  #endif  #include "llappviewermacosx.h" -#include "llcommandlineparser.h" -  #include "llmemtype.h"  #include "llviewernetwork.h" @@ -47,13 +45,6 @@  #include "llurldispatcher.h"  #include <Carbon/Carbon.h> -namespace  -{ -	// The command line args stored. -	// They are not used immediately by the app. -	int gArgC; -	char** gArgV; -}  int main( int argc, char **argv )   { @@ -70,11 +61,14 @@ int main( int argc, char **argv )  	viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash); -	// Store off the command line args for use later. -	gArgC = argc; -	gArgV = argv; -	 -	bool ok = viewer_app_ptr->init(); +	bool ok = viewer_app_ptr->tempStoreCommandOptions(argc, argv); +	if(!ok) +	{ +		llwarns << "Unable to parse command line." << llendl; +		return -1; +	} + +	ok = viewer_app_ptr->init();  	if(!ok)  	{  		llwarns << "Application init failed." << llendl; @@ -114,27 +108,6 @@ bool LLAppViewerMacOSX::init()  	return LLAppViewer::init();  } -bool LLAppViewerMacOSX::initParseCommandLine(LLCommandLineParser& clp) -{ -	// First parse the command line, not often used on the mac. -	clp.parseCommandLine(gArgC, gArgV); -     -    // Now read in the args from arguments txt. -    // Succesive calls to clp.parse... will NOT override earlier  -    // options.  -    const char* filename = "arguments.txt"; -	llifstream ifs(filename, llifstream::binary); -	if (!ifs.is_open()) -	{ -		llwarns << "Unable to open file" << filename << llendl; -		return false; -	} -	 - -	clp.parseCommandLineFile(ifs); -    return true; -} -  void LLAppViewerMacOSX::handleCrashReporting()  {  	// Macintosh diff --git a/indra/newview/llappviewermacosx.h b/indra/newview/llappviewermacosx.h index cc4a7f5eb5..2c61e5a01c 100644 --- a/indra/newview/llappviewermacosx.h +++ b/indra/newview/llappviewermacosx.h @@ -51,7 +51,6 @@ public:  protected:  	virtual void handleCrashReporting();   	std::string generateSerialNumber(); -    virtual bool initParseCommandLine(LLCommandLineParser& clp);  };  #endif // LL_LLAPPVIEWERMACOSX_H diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index fb726e7c97..09bcf6f7cc 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -55,13 +55,41 @@  #include "llviewernetwork.h"  #include "llmd5.h" -#include "llcommandlineparser.h" +void fill_args(int& argc, char** argv, const S32 max_args, LPSTR cmd_line) +{ +	char *token = NULL; +	if( cmd_line[0] == '\"' ) +	{ +		// Exe name is enclosed in quotes +		token = strtok( cmd_line, "\"" ); +		argv[argc++] = token; +		token = strtok( NULL, " \t," ); +	} +	else +	{ +		// Exe name is not enclosed in quotes +		token = strtok( cmd_line, " \t," ); +	} +	while( (token != NULL) && (argc < max_args) ) +	{ +		argv[argc++] = token; +		/* Get next token: */ +		if (*(token + strlen(token) + 1) == '\"')		/* Flawfinder: ignore*/ +		{ +			token = strtok( NULL, "\""); +		} +		else +		{ +			token = strtok( NULL, " \t," ); +		} +	} +} + +// *NOTE:Mani - this code is stolen from LLApp, where its never actually used.  LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *exception_infop)  { -    // *NOTE:Mani - this code is stolen from LLApp, where its never actually used. -	 -    // Translate the signals/exceptions into cross-platform stuff +	// Translate the signals/exceptions into cross-platform stuff  	// Windows implementation  	llinfos << "Entering Windows Exception Handler..." << llendl; @@ -116,7 +144,21 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,  	// *FIX: global  	gIconResource = MAKEINTRESOURCE(IDI_LL_ICON); -	LLAppViewerWin32* viewer_app_ptr = new LLAppViewerWin32(lpCmdLine); +	// In Win32, we need to generate argc and argv ourselves... +	// Note: GetCommandLine() returns a  potentially return a LPTSTR +	// which can resolve to a LPWSTR (unicode string). +	// (That's why it's different from lpCmdLine which is a LPSTR.) +	// We don't currently do unicode, so call the non-unicode version +	// directly. +	LPSTR cmd_line_including_exe_name = GetCommandLineA(); + +	const S32	MAX_ARGS = 100; +	int argc = 0; +	char* argv[MAX_ARGS];		/* Flawfinder: ignore */ + +	fill_args(argc, argv, MAX_ARGS, cmd_line_including_exe_name); + +	LLAppViewerWin32* viewer_app_ptr = new LLAppViewerWin32();  	// *FIX:Mani This method is poorly named, since the exception  	// is now handled by LLApp.  @@ -138,6 +180,13 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,  	viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash); +	ok = viewer_app_ptr->tempStoreCommandOptions(argc, argv); +	if(!ok) +	{ +		llwarns << "Unable to parse command line." << llendl; +		return -1; +	} +  	ok = viewer_app_ptr->init();  	if(!ok)  	{ @@ -259,8 +308,7 @@ void create_console()  	setvbuf( stderr, NULL, _IONBF, 0 );  } -LLAppViewerWin32::LLAppViewerWin32(const char* cmd_line) : -    mCmdLine(cmd_line) +LLAppViewerWin32::LLAppViewerWin32()  {  } @@ -291,11 +339,15 @@ bool LLAppViewerWin32::cleanup()  	return result;  } -void LLAppViewerWin32::initConsole() +bool LLAppViewerWin32::initWindow()  { -	// pop up debug console -	create_console(); -	return LLAppViewer::initConsole(); +	// pop up debug console if necessary +	if (gUseConsole && gSavedSettings.getBOOL("ShowConsoleWindow")) +	{ +		create_console(); +	} + +	return LLAppViewer::initWindow();  }  void write_debug_dx(const char* str) @@ -316,7 +368,7 @@ bool LLAppViewerWin32::initHardwareTest()  	// Do driver verification and initialization based on DirectX  	// hardware polling and driver versions  	// -	if (FALSE == gSavedSettings.getBOOL("NoHardwareProbe")) +	if (gProbeHardware)  	{  		BOOL vram_only = !gSavedSettings.getBOOL("ProbeHardwareOnStartup"); @@ -379,11 +431,6 @@ bool LLAppViewerWin32::initHardwareTest()  	return true;  } -bool LLAppViewerWin32::initParseCommandLine(LLCommandLineParser& clp) -{ -    return clp.parseCommandLineString(mCmdLine); -} -  void LLAppViewerWin32::handleCrashReporting()  {  	// Windows only behaivor. Spawn win crash reporter. @@ -439,4 +486,4 @@ std::string LLAppViewerWin32::generateSerialNumber()  		llwarns << "GetVolumeInformation failed" << llendl;  	}  	return serial_md5; -} +}
\ No newline at end of file diff --git a/indra/newview/llappviewerwin32.h b/indra/newview/llappviewerwin32.h index 66653c48f5..23e7337618 100644 --- a/indra/newview/llappviewerwin32.h +++ b/indra/newview/llappviewerwin32.h @@ -39,7 +39,7 @@  class LLAppViewerWin32 : public LLAppViewer  {  public: -	LLAppViewerWin32(const char* cmd_line); +	LLAppViewerWin32();  	virtual ~LLAppViewerWin32();  	// @@ -49,18 +49,15 @@ public:  	virtual bool cleanup();  protected: -	virtual void initConsole(); // Initialize OS level debugging console. +	virtual bool initWindow(); // Initialize the viewer's window.  	virtual bool initHardwareTest(); // Win32 uses DX9 to test hardware. -    virtual bool initParseCommandLine(LLCommandLineParser& clp); - -    virtual void handleCrashReporting();  +	virtual void handleCrashReporting();   	std::string generateSerialNumber();  private:  	void disableWinErrorReporting(); -    std::string mCmdLine;  };  #endif // LL_LLAPPVIEWERWIN32_H diff --git a/indra/newview/llcommandlineparser.cpp b/indra/newview/llcommandlineparser.cpp deleted file mode 100644 index 2f99ca1247..0000000000 --- a/indra/newview/llcommandlineparser.cpp +++ /dev/null @@ -1,535 +0,0 @@ -/** - * @file llcommandlineparser.cpp - * @brief The LLCommandLineParser class definitions - * - * $LicenseInfo:firstyear=2007&license=viewergpl$ - *  - * Copyright (c) 2007, Linden Research, Inc. - *  - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab.  Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - *  - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - *  - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - *  - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */  - -#include "llviewerprecompiledheaders.h" -#include "llcommandlineparser.h" - -// *NOTE: The boost::lexical_cast generates  -// the warning C4701(local used with out assignment) in VC7.1. -// Disable the warning for the boost includes. -#if _MSC_VER -#   pragma warning(push) -#   pragma warning( disable : 4701 ) -#else -// NOTE: For the other platforms? -#endif - -#include <boost/program_options.hpp> -#include <boost/bind.hpp> -#include<boost/tokenizer.hpp> - -#if _MSC_VER -#   pragma warning(pop) -#endif - -#include "llsdserialize.h" -#include <iostream> -#include <sstream> - -#include "llcontrol.h" - -namespace po = boost::program_options; - -// *NTOE:MEP - Currently the boost object reside in file scope.  -// This has a couple of negatives, they are always around and  -// there can be only one instance of each.  -// The plus is that the boost-ly-ness of this implementation is  -// hidden from the rest of the world.  -// Its importatnt to realize that multiple LLCommandLineParser objects  -// will all have this single repository of option escs and parsed options. -// This could be good or bad, and probably won't matter for most use cases. -namespace  -{ -    po::options_description gOptionsDesc; -    po::positional_options_description gPositionalOptions; -	po::variables_map gVariableMap; -     -    const LLCommandLineParser::token_vector_t gEmptyValue; - -    void read_file_into_string(std::string& str, const std::basic_istream < char >& file) -    { -	    std::ostringstream oss; -	    oss << file.rdbuf(); -	    str = oss.str(); -    } - -    bool gPastLastOption = false; -} - -class LLCLPError : public std::logic_error { -public: -    LLCLPError(const std::string& what) : std::logic_error(what) {} -}; - -class LLCLPLastOption : public std::logic_error { -public: -    LLCLPLastOption(const std::string& what) : std::logic_error(what) {} -}; - -class LLCLPValue : public po::value_semantic_codecvt_helper<char>  -{ -    unsigned mMinTokens; -    unsigned mMaxTokens; -    bool mIsComposing; -    typedef boost::function1<void, const LLCommandLineParser::token_vector_t&> notify_callback_t; -    notify_callback_t mNotifyCallback; -    bool mLastOption; - -public: -    LLCLPValue() : -        mMinTokens(0), -        mMaxTokens(0), -        mIsComposing(false), -        mLastOption(false) -        {} -       -    virtual ~LLCLPValue() {}; - -    void setMinTokens(unsigned c)  -    { -        mMinTokens = c; -    } - -    void setMaxTokens(unsigned c)  -    { -        mMaxTokens = c; -    } - -    void setComposing(bool c) -    { -        mIsComposing = c; -    } - -    void setLastOption(bool c) -    { -        mLastOption = c; -    } - -    void setNotifyCallback(notify_callback_t f) -    { -        mNotifyCallback = f; -    } - -    // Overrides to support the value_semantic interface. -    virtual std::string name() const  -    {  -        const std::string arg("arg"); -        const std::string args("args"); -        return (max_tokens() > 1) ? args : arg;  -    } - -    virtual unsigned min_tokens() const -    { -        return mMinTokens; -    } - -    virtual unsigned max_tokens() const  -    { -        return mMaxTokens; -    } - -    virtual bool is_composing() const  -    { -        return mIsComposing; -    } - -    virtual bool apply_default(boost::any& value_store) const -    { -        return false; // No defaults. -    } - -    virtual void notify(const boost::any& value_store) const -    { -        const LLCommandLineParser::token_vector_t* value = -            boost::any_cast<const LLCommandLineParser::token_vector_t>(&value_store); -        if(mNotifyCallback)  -        { -           mNotifyCallback(*value); -        } - -    } - -protected: -    void xparse(boost::any& value_store, -         const std::vector<std::string>& new_tokens) const -    { -        if(gPastLastOption) -        { -            throw(LLCLPLastOption("Don't parse no more!")); -        } - -        // Error checks. Needed? -        if (!value_store.empty() && !is_composing())  -        { -            throw(LLCLPError("Non composing value with multiple occurences.")); -        } -        if (new_tokens.size() < min_tokens() || new_tokens.size() > max_tokens()) -        { -            throw(LLCLPError("Illegal number of tokens specified.")); -        } -         -        if(value_store.empty()) -        { -            value_store = boost::any(LLCommandLineParser::token_vector_t()); -        } -        LLCommandLineParser::token_vector_t* tv =  -            boost::any_cast<LLCommandLineParser::token_vector_t>(&value_store);  -        -        for(unsigned i = 0; i < new_tokens.size() && i < mMaxTokens; ++i) -        { -            tv->push_back(new_tokens[i]); -        } - -        if(mLastOption) -        { -            gPastLastOption = true; -        } -    } -}; - -//---------------------------------------------------------------------------- -// LLCommandLineParser defintions -//---------------------------------------------------------------------------- -void LLCommandLineParser::addOptionDesc(const LLString& option_name,  -                                        boost::function1<void, const token_vector_t&> notify_callback, -                                        unsigned int token_count, -                                        const LLString& description, -                                        const LLString& short_name, -                                        bool composing, -                                        bool positional, -                                        bool last_option) -{ -    // Compose the name for boost::po.  -    // It takes the format "long_name, short name" -    const LLString comma(","); -    LLString boost_option_name = option_name; -    if(short_name != LLString::null) -    { -        boost_option_name += comma; -        boost_option_name += short_name; -    } -    -    LLCLPValue* value_desc = new LLCLPValue(); -    value_desc->setMinTokens(token_count); -    value_desc->setMaxTokens(token_count); -    value_desc->setComposing(composing); -    value_desc->setLastOption(last_option); - -    boost::shared_ptr<po::option_description> d( -            new po::option_description(boost_option_name.c_str(),  -                                    value_desc,  -                                    description.c_str())); - -    if(!notify_callback.empty()) -    { -        value_desc->setNotifyCallback(notify_callback); -    } - -    gOptionsDesc.add(d); - -    if(positional) -    { -        gPositionalOptions.add(boost_option_name.c_str(), token_count); -    } -} - -bool parseAndStoreResults(po::command_line_parser& clp) -{ -    try -    { -        clp.options(gOptionsDesc); -        clp.positional(gPositionalOptions); -        clp.style(po::command_line_style::default_style  -                  | po::command_line_style::allow_long_disguise); -        po::basic_parsed_options<char> opts = clp.run(); -        po::store(opts, gVariableMap); -    } -    catch(po::error& e) -    { -        llwarns << "Caught Error:" << e.what() << llendl; -        return false; -    } -    catch(LLCLPError& e) -    { -        llwarns << "Caught Error:" << e.what() << llendl; -        return false; -    } -    catch(LLCLPLastOption&)  -    { -        // Continue without parsing. -        llwarns << "Found tokens past last option. Ignoring." << llendl; - -        // boost::po will have stored a mal-formed option.  -        // All such options will be removed below. -        for(po::variables_map::iterator i = gVariableMap.begin(); i != gVariableMap.end();) -        { -            po::variables_map::iterator tempI = i++; -            if(tempI->second.empty()) -            { -                gVariableMap.erase(tempI); -            } -        } -    }  -    return true; -} - -bool LLCommandLineParser::parseCommandLine(int argc, char **argv) -{ -    po::command_line_parser clp(argc, argv); -    return parseAndStoreResults(clp); -} - -bool LLCommandLineParser::parseCommandLineString(const std::string& str) -{ -    // Split the string content into tokens -    boost::escaped_list_separator<char> sep("\\", "\r\n ", "\"'"); -    boost::tokenizer< boost::escaped_list_separator<char> > tok(str, sep); -    std::vector<std::string> tokens; -    // std::copy(tok.begin(), tok.end(), std::back_inserter(tokens)); -    for(boost::tokenizer< boost::escaped_list_separator<char> >::iterator i = tok.begin(); -        i != tok.end(); -        ++i) -    { -        if(0 != i->size()) -        { -            tokens.push_back(*i); -        } -    } - -    po::command_line_parser clp(tokens); -    return parseAndStoreResults(clp); -         -} - -bool LLCommandLineParser::parseCommandLineFile(const std::basic_istream < char >& file) -{ -    std::string args; -    read_file_into_string(args, file); - -    return parseCommandLineString(args); -} - -void LLCommandLineParser::notify() -{ -    po::notify(gVariableMap);     -} - -void LLCommandLineParser::printOptions() const -{ -    for(po::variables_map::iterator i = gVariableMap.begin(); i != gVariableMap.end(); ++i) -    { -        std::string name = i->first; -        token_vector_t values = i->second.as<token_vector_t>(); -        std::ostringstream oss; -        oss << name << ": "; -        for(token_vector_t::iterator t_itr = values.begin(); t_itr != values.end(); ++t_itr) -        { -            oss << t_itr->c_str() << " "; -        } -        llinfos << oss.str() << llendl; -    } -} - -std::ostream& LLCommandLineParser::printOptionsDesc(std::ostream& os) const -{ -    return os << gOptionsDesc; -} - -bool LLCommandLineParser::hasOption(const std::string& name) const -{ -    return gVariableMap.count(name) > 0; -} - -const LLCommandLineParser::token_vector_t& LLCommandLineParser::getOption(const std::string& name) const -{ -    if(hasOption(name)) -    { -        return gVariableMap[name].as<token_vector_t>(); -    } - -    return gEmptyValue; -} - -//---------------------------------------------------------------------------- -// LLControlGroupCLP defintions -//---------------------------------------------------------------------------- -void setControlValueCB(const LLCommandLineParser::token_vector_t& value,  -                       const LLString& opt_name,  -                       LLControlGroup* ctrlGroup) -{ -    if(value.size() > 1) -    { -        llwarns << "Ignoring extra tokens mapped to the setting: " << opt_name << "." << llendl;  -    } -     -    // *FIX: Do sematic conversion here. -    // LLSD (ImplString) Is no good for doing string to type conversion for... -    // booleans -    // compound types -    // ?... - -    LLControlVariable* ctrl = ctrlGroup->getControl(opt_name); -    if(NULL != ctrl) -    { -        switch(ctrl->type()) -        { -        case TYPE_BOOLEAN: -            if(value.size() > 1) -            { -                llwarns << "Ignoring extra tokens." << llendl;  -            } -               -            if(value.size() > 0) -            { -                // There's a token. check the string for true/false/1/0 etc. -                BOOL result = false; -                BOOL gotSet = LLString::convertToBOOL(value[0], result); -                if(gotSet) -                { -                    ctrl->setValue(LLSD(result), false); -                } -            } -            else -            { -                ctrl->setValue(LLSD(true), false); -            } -            break; - -        default: -            { -                // For the default types, let llsd do the conversion. -                if(value.size() > 1) -                { -                    // Assume its an array... -                    LLSD llsdArray; -                    for(unsigned int i = 0; i < value.size(); ++i) -                    { -                        LLSD llsdValue; -                        llsdValue.assign(LLSD::String(value[i])); -                        llsdArray.set(i, llsdValue); -                    } - -                    ctrl->setValue(llsdArray, false); -                } -                else if(value.size() > 0) -                { -                    LLSD llsdValue; -                    llsdValue.assign(LLSD::String(value[0])); -                    ctrl->setValue(llsdValue, false); -                } -            } -            break; -        } -    } -    else -    { -        llwarns << "Command Line option mapping '"  -            << opt_name  -            << "' not found! Ignoring."  -            << llendl; -    } -} - -void LLControlGroupCLP::configure(const LLString& config_filename, LLControlGroup* controlGroup) -{ -    // This method reads the llsd based config file, and uses it to set  -    // members of a control group. -    LLSD clpConfigLLSD; -     -    llifstream input_stream; -    input_stream.open(config_filename.c_str(), std::ios::in | std::ios::binary); - -    if(input_stream.is_open()) -    { -        LLSDSerialize::fromXML(clpConfigLLSD, input_stream); -        for(LLSD::map_iterator option_itr = clpConfigLLSD.beginMap();  -            option_itr != clpConfigLLSD.endMap();  -            ++option_itr) -        { -            LLSD::String long_name = option_itr->first; -            LLSD option_params = option_itr->second; -             -            LLString desc("n/a"); -            if(option_params.has("desc")) -            { -                desc = option_params["desc"].asString(); -            } -             -            LLString short_name = LLString::null; -            if(option_params.has("short")) -            { -                short_name = option_params["short"].asString(); -            } - -            unsigned int token_count = 0; -            if(option_params.has("count")) -            { -                token_count = option_params["count"].asInteger(); -            } - -            bool composing = false; -            if(option_params.has("compose")) -            { -                composing = option_params["compose"].asBoolean(); -            } - -            bool positional = false; -            if(option_params.has("positional")) -            { -                positional = option_params["positional"].asBoolean(); -            } - -            bool last_option = false; -            if(option_params.has("last_option")) -            { -                last_option = option_params["last_option"].asBoolean(); -            } - -            boost::function1<void, const token_vector_t&> callback; -            if(option_params.has("map-to") && (NULL != controlGroup)) -            { -                LLString controlName = option_params["map-to"].asString(); -                callback = boost::bind(setControlValueCB, _1,  -                                       controlName, controlGroup); -            } - -            this->addOptionDesc( -                long_name,  -                callback, -                token_count,  -                desc,  -                short_name,  -                composing, -                positional, -                last_option); -        } -    } -} diff --git a/indra/newview/llcommandlineparser.h b/indra/newview/llcommandlineparser.h deleted file mode 100644 index 6cc40ee8b4..0000000000 --- a/indra/newview/llcommandlineparser.h +++ /dev/null @@ -1,131 +0,0 @@ -/**  - * @file llcommandlineparser.h - * @brief LLCommandLineParser class declaration - * - * $LicenseInfo:firstyear=2007&license=viewergpl$ - *  - * Copyright (c) 2007, Linden Research, Inc. - *  - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab.  Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - *  - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - *  - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - *  - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ -*/ - -#ifndef LL_LLCOMMANDLINEPARSER_H -#define LL_LLCOMMANDLINEPARSER_H - -#include <boost/function/function1.hpp> - -/**  - * @class LLCommandLineParser - * @brief Handle defining and parsing the command line. - */ -class LLCommandLineParser -{ -public: -    typedef std::vector< std::string > token_vector_t; - -    /** -     * @brief Add a value-less option to the command line description. -     * @param option_name The long name of the cmd-line option.  -     * @param description The text description of the option usage. -     */ -    void addOptionDesc( -        const LLString& option_name,  -        boost::function1<void, const token_vector_t&> notify_callback = 0, -        unsigned int num_tokens = 0, -        const LLString& description = LLString::null, -        const LLString& short_name = LLString::null, -        bool composing = false, -        bool positional = false, -        bool last_option = false); - - -    /**  -     * @brief Parse the command line given by argc/argv. -     */ -	bool parseCommandLine(int argc, char **argv); - -    /**  -     * @brief Parse the command line contained by the given file. -     */ -    bool parseCommandLineString(const std::string& str); - -    /**  -     * @brief Parse the command line contained by the given file. -     */ -    bool parseCommandLineFile(const std::basic_istream< char >& file); - -    /**  -     * @brief Call callbacks associated with option descriptions. -     *  -     * Use this to handle the results of parsing.  -     */ -    void notify(); - -    /** @brief Print a description of the configured options. -     * -     * Use this to print a description of options to the -     * given ostream. Useful for displaying usage info. -     */ -    std::ostream& printOptionsDesc(std::ostream& os) const; - -    /** @brief Manual option setting accessors. -     *  -     * Use these to retrieve get the values set for an option. -     * getOption will return an empty value if the option isn't -     * set.  -     */ -    bool hasOption(const std::string& name) const; -    const token_vector_t& getOption(const std::string& name) const; - -    void printOptions() const; -}; - -inline std::ostream& operator<<(std::ostream& out, const LLCommandLineParser& clp) -{ -    return clp.printOptionsDesc(out); -} - -class LLControlGroup;  - -/**  - * @class LLControlGroupCLP - * @brief Uses the CLP to configure an LLControlGroup - * - *  - */ -class LLControlGroupCLP : public LLCommandLineParser -{ -public: -    /** -     * @brief Configure the command line parser according the given config file. -     * -     * @param config_filename The name of the XML based LLSD config file.  -     * @param clp A reference to the command line parser object to configure. -     * -     * *FIX:Mani Specify config file format. -     */ -    void configure(const LLString& config_filename,  -                   LLControlGroup* controlGroup); -}; - -#endif // LL_LLCOMMANDLINEPARSER_H diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index e6fcfb6d40..bf7d48f911 100644 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -483,7 +483,7 @@ void LLFeatureManager::applyFeatures(bool skipFeatures)  		}  		// get the control setting -		LLControlVariable* ctrl = gSavedSettings.getControl(mIt->first); +		LLControlBase* ctrl = gSavedSettings.getControl(mIt->first);  		if(ctrl == NULL)  		{  			llwarns << "AHHH! Control setting " << mIt->first << " does not exist!" << llendl; diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp index b00450eec6..97ebc02ba1 100644 --- a/indra/newview/llfirstuse.cpp +++ b/indra/newview/llfirstuse.cpp @@ -49,8 +49,7 @@ std::set<LLString> LLFirstUse::sConfigVariables;  // static  void LLFirstUse::addConfigVariable(const LLString& var)  { -	//Don't add the warning, now that we're storing the default in the settings_default.xml file -	//gSavedSettings.addWarning(var); +	gSavedSettings.addWarning(var);  	sConfigVariables.insert(var);  } @@ -257,15 +256,13 @@ void LLFirstUse::useSculptedPrim()  // static   void LLFirstUse::useVoice()  { -	if (!gSavedSettings.getBOOL("CmdLineDisableVoice")) -    { -	    if (gSavedSettings.getWarning("FirstVoice")) -	    { -		    gSavedSettings.setWarning("FirstVoice", FALSE); - -		    LLFloaterVoiceWizard::showInstance(); -	    } -    } +	if (gDisableVoice) return; +	if (gSavedSettings.getWarning("FirstVoice")) +	{ +		gSavedSettings.setWarning("FirstVoice", FALSE); + +		LLFloaterVoiceWizard::showInstance(); +	}  }  // static  diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index 3a1fc6146a..4edf6f3652 100644 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -84,7 +84,7 @@ LLFloaterAbout::LLFloaterAbout()  		+ llformat(" %d.%d.%d (%d) %s %s (%s)",  				   LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD,  				   __DATE__, __TIME__, -				   gSavedSettings.getString("VersionChannelName").c_str()); +				   gChannelName.c_str());  	support.append(version);  	support.append("\n\n"); diff --git a/indra/newview/llfloatergroups.cpp b/indra/newview/llfloatergroups.cpp index 7a0f01e5a6..4573ca75d2 100644 --- a/indra/newview/llfloatergroups.cpp +++ b/indra/newview/llfloatergroups.cpp @@ -173,7 +173,8 @@ bool LLPanelGroups::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)  		reset();  		return true;  	} -	return false; +	 +	return LLView::handleEvent(event, userdata);  }  // Default constructor diff --git a/indra/newview/llfloatergroups.h b/indra/newview/llfloatergroups.h index 6d99f34085..a1740861d5 100644 --- a/indra/newview/llfloatergroups.h +++ b/indra/newview/llfloatergroups.h @@ -83,7 +83,7 @@ protected:  	static instance_map_t sInstances;  }; -class LLPanelGroups : public LLPanel, public LLSimpleListener +class LLPanelGroups : public LLPanel  {  public:  	LLPanelGroups(); diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 345561f551..584d7479e4 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -446,7 +446,7 @@ void LLFloaterPreference::onBtnOK( void* userdata )  		fp->apply();  		fp->close(false); -		gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE ); +		gSavedSettings.saveToFile( gSettingsFileName, TRUE );  		std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);  		// save all settings, even if equals defaults diff --git a/indra/newview/llfloatersettingsdebug.cpp b/indra/newview/llfloatersettingsdebug.cpp deleted file mode 100644 index 7975bd95ef..0000000000 --- a/indra/newview/llfloatersettingsdebug.cpp +++ /dev/null @@ -1,490 +0,0 @@ -/**  - * @file llfloatersettingsdebug.cpp - * @brief floater for debugging internal viewer settings - * - * $LicenseInfo:firstyear=2001&license=viewergpl$ - *  - * Copyright (c) 2001-2007, Linden Research, Inc. - *  - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab.  Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - *  - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - *  - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - *  - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" -#include "llfloatersettingsdebug.h" -#include "llfloater.h" -#include "llvieweruictrlfactory.h" -#include "llfirstuse.h" -#include "llcombobox.h" -#include "llspinctrl.h" -#include "llcolorswatch.h" -#include "llviewercontrol.h" - -LLFloaterSettingsDebug* LLFloaterSettingsDebug::sInstance = NULL; - -LLFloaterSettingsDebug::LLFloaterSettingsDebug() : LLFloater("Configuration Editor") -{ -} - -LLFloaterSettingsDebug::~LLFloaterSettingsDebug() -{ -	sInstance = NULL; -} - -BOOL LLFloaterSettingsDebug::postBuild() -{ -	LLComboBox* settings_combo = LLUICtrlFactory::getComboBoxByName(this, "settings_combo"); - -	struct f : public LLControlGroup::ApplyFunctor -	{ -		LLComboBox* combo; -		f(LLComboBox* c) : combo(c) {} -		virtual void apply(const LLString& name, LLControlVariable* control) -		{ -			combo->add(name, (void*)control); -		} -	} func(settings_combo); - -	gSavedSettings.applyToAll(&func); -	gSavedPerAccountSettings.applyToAll(&func); -	gColors.applyToAll(&func); - -	settings_combo->sortByName(); -	settings_combo->setCommitCallback(onSettingSelect); -	settings_combo->setCallbackUserData(this); -	settings_combo->updateSelection(); - -	childSetCommitCallback("val_spinner_1", onCommitSettings); -	childSetUserData("val_spinner_1", this); -	childSetCommitCallback("val_spinner_2", onCommitSettings); -	childSetUserData("val_spinner_2", this); -	childSetCommitCallback("val_spinner_3", onCommitSettings); -	childSetUserData("val_spinner_3", this); -	childSetCommitCallback("val_spinner_4", onCommitSettings); -	childSetUserData("val_spinner_4", this); -	childSetCommitCallback("val_text", onCommitSettings); -	childSetUserData("val_text", this); -	childSetCommitCallback("boolean_combo", onCommitSettings); -	childSetUserData("boolean_combo", this); -	childSetCommitCallback("color_swatch", onCommitSettings); -	childSetUserData("color_swatch", this); -	childSetAction("default_btn", onClickDefault, this); -	mComment = getChild<LLTextEditor>("comment_text"); -	return TRUE; -} - -void LLFloaterSettingsDebug::draw() -{ -	LLComboBox* settings_combo = getChild<LLComboBox>("settings_combo"); -	LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata(); -	updateControl(controlp); - -	LLFloater::draw(); -} - -//static -void LLFloaterSettingsDebug::show(void*) -{ -	if (sInstance == NULL) -	{ -		sInstance = new LLFloaterSettingsDebug(); - -		gUICtrlFactory->buildFloater(sInstance, "floater_settings_debug.xml"); -	} - -	sInstance->open();		/* Flawfinder: ignore */ -} - -//static  -void LLFloaterSettingsDebug::onSettingSelect(LLUICtrl* ctrl, void* user_data) -{ -	LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data; -	LLComboBox* combo_box = (LLComboBox*)ctrl; -	LLControlVariable* controlp = (LLControlVariable*)combo_box->getCurrentUserdata(); - -	floaterp->updateControl(controlp); -} - -//static -void LLFloaterSettingsDebug::onCommitSettings(LLUICtrl* ctrl, void* user_data) -{ -	LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data; - -	LLComboBox* settings_combo = floaterp->getChild<LLComboBox>("settings_combo"); -	LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata(); - -	LLVector3 vector; -	LLVector3d vectord; -	LLRect rect; -	LLColor4 col4; -	LLColor3 col3; -	LLColor4U col4U; -	LLColor4 color_with_alpha; - -	switch(controlp->type()) -	{		 -	  case TYPE_U32: -		controlp->set(floaterp->childGetValue("val_spinner_1")); -		break; -	  case TYPE_S32: -		controlp->set(floaterp->childGetValue("val_spinner_1")); -		break; -	  case TYPE_F32: -		controlp->set(LLSD(floaterp->childGetValue("val_spinner_1").asReal())); -		break; -	  case TYPE_BOOLEAN: -		controlp->set(floaterp->childGetValue("boolean_combo")); -		break; -	  case TYPE_STRING: -		controlp->set(LLSD(floaterp->childGetValue("val_text").asString())); -		break; -	  case TYPE_VEC3: -		vector.mV[VX] = (F32)floaterp->childGetValue("val_spinner_1").asReal(); -		vector.mV[VY] = (F32)floaterp->childGetValue("val_spinner_2").asReal(); -		vector.mV[VZ] = (F32)floaterp->childGetValue("val_spinner_3").asReal(); -		controlp->set(vector.getValue()); -		break; -	  case TYPE_VEC3D: -		vectord.mdV[VX] = floaterp->childGetValue("val_spinner_1").asReal(); -		vectord.mdV[VY] = floaterp->childGetValue("val_spinner_2").asReal(); -		vectord.mdV[VZ] = floaterp->childGetValue("val_spinner_3").asReal(); -		controlp->set(vectord.getValue()); -		break; -	  case TYPE_RECT: -		rect.mLeft = floaterp->childGetValue("val_spinner_1").asInteger(); -		rect.mRight = floaterp->childGetValue("val_spinner_2").asInteger(); -		rect.mBottom = floaterp->childGetValue("val_spinner_3").asInteger(); -		rect.mTop = floaterp->childGetValue("val_spinner_4").asInteger(); -		controlp->set(rect.getValue()); -		break; -	  case TYPE_COL4: -		col3.setValue(floaterp->childGetValue("color_swatch")); -		col4 = LLColor4(col3, (F32)floaterp->childGetValue("val_spinner_4").asReal()); -		controlp->set(col4.getValue()); -		break; -	  case TYPE_COL3: -		controlp->set(floaterp->childGetValue("color_swatch")); -		//col3.mV[VRED] = (F32)floaterp->childGetValue("val_spinner_1").asC(); -		//col3.mV[VGREEN] = (F32)floaterp->childGetValue("val_spinner_2").asReal(); -		//col3.mV[VBLUE] = (F32)floaterp->childGetValue("val_spinner_3").asReal(); -		//controlp->set(col3.getValue()); -		break; -	  case TYPE_COL4U: -		col3.setValue(floaterp->childGetValue("color_swatch")); -		col4U.setVecScaleClamp(col3); -		col4U.mV[VALPHA] = floaterp->childGetValue("val_spinner_4").asInteger(); -		controlp->set(col4U.getValue()); -		break; -	  default: -		break; -	} -} - -// static -void LLFloaterSettingsDebug::onClickDefault(void* user_data) -{ -	LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data; -	LLComboBox* settings_combo = floaterp->getChild<LLComboBox>("settings_combo"); -	LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata(); - -	if (controlp) -	{ -		controlp->resetToDefault(); -		floaterp->updateControl(controlp); -	} -} - -// we've switched controls, or doing per-frame update, so update spinners, etc. -void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp) -{ -	LLSpinCtrl* spinner1 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_1"); -	LLSpinCtrl* spinner2 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_2"); -	LLSpinCtrl* spinner3 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_3"); -	LLSpinCtrl* spinner4 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_4"); -	LLColorSwatchCtrl* color_swatch = getChild<LLColorSwatchCtrl>("color_swatch"); - -	if (!spinner1 || !spinner2 || !spinner3 || !spinner4 || !color_swatch) -	{ -		llwarns << "Could not find all desired controls by name" -			<< llendl; -		return; -	} - -	spinner1->setVisible(FALSE); -	spinner2->setVisible(FALSE); -	spinner3->setVisible(FALSE); -	spinner4->setVisible(FALSE); -	color_swatch->setVisible(FALSE); -	childSetVisible("val_text", FALSE); -	childSetVisible("boolean_combo", FALSE); -	mComment->setText(LLString::null); - -	if (controlp) -	{ -		eControlType type = controlp->type(); -		mComment->setText(controlp->getComment()); -		spinner1->setMaxValue(F32_MAX); -		spinner2->setMaxValue(F32_MAX); -		spinner3->setMaxValue(F32_MAX); -		spinner4->setMaxValue(F32_MAX); -		spinner1->setMinValue(-F32_MAX); -		spinner2->setMinValue(-F32_MAX); -		spinner3->setMinValue(-F32_MAX); -		spinner4->setMinValue(-F32_MAX); -		if (!spinner1->hasFocus()) -		{ -			spinner1->setIncrement(0.1f); -		} -		if (!spinner2->hasFocus()) -		{ -			spinner2->setIncrement(0.1f); -		} -		if (!spinner3->hasFocus()) -		{ -			spinner3->setIncrement(0.1f); -		} -		if (!spinner4->hasFocus()) -		{ -			spinner4->setIncrement(0.1f); -		} - -		LLSD sd = controlp->get(); -		switch(type) -		{ -		  case TYPE_U32: -			spinner1->setVisible(TRUE); -			spinner1->setLabel(LLString("value")); // Debug, don't translate -			if (!spinner1->hasFocus()) -			{ -				spinner1->setValue(sd); -				spinner1->setMinValue((F32)U32_MIN); -				spinner1->setMaxValue((F32)U32_MAX); -				spinner1->setIncrement(1.f); -				spinner1->setPrecision(0); -			} -			break; -		  case TYPE_S32: -			spinner1->setVisible(TRUE); -			spinner1->setLabel(LLString("value")); // Debug, don't translate -			if (!spinner1->hasFocus()) -			{ -				spinner1->setValue(sd); -				spinner1->setMinValue((F32)S32_MIN); -				spinner1->setMaxValue((F32)S32_MAX); -				spinner1->setIncrement(1.f); -				spinner1->setPrecision(0); -			} -			break; -		  case TYPE_F32: -			spinner1->setVisible(TRUE); -			spinner1->setLabel(LLString("value")); // Debug, don't translate -			if (!spinner1->hasFocus()) -			{ -				spinner1->setPrecision(3); -				spinner1->setValue(sd); -			} -			break; -		  case TYPE_BOOLEAN: -			childSetVisible("boolean_combo", TRUE); -			 -			if (!childHasFocus("boolean_combo")) -			{ -				if (sd.asBoolean()) -				{ -					childSetValue("boolean_combo", LLSD("true")); -				} -				else -				{ -					childSetValue("boolean_combo", LLSD("")); -				} -			} -			break; -		  case TYPE_STRING: -			childSetVisible("val_text", TRUE); -			if (!childHasFocus("val_text")) -			{ -				childSetValue("val_text", sd); -			} -			break; -		  case TYPE_VEC3: -		  { -			LLVector3 v; -			v.setValue(sd); -			spinner1->setVisible(TRUE); -			spinner1->setLabel(LLString("X")); -			spinner2->setVisible(TRUE); -			spinner2->setLabel(LLString("Y")); -			spinner3->setVisible(TRUE); -			spinner3->setLabel(LLString("Z")); -			if (!spinner1->hasFocus()) -			{ -				spinner1->setPrecision(3); -				spinner1->setValue(v[VX]); -			} -			if (!spinner2->hasFocus()) -			{ -				spinner2->setPrecision(3); -				spinner2->setValue(v[VY]); -			} -			if (!spinner3->hasFocus()) -			{ -				spinner3->setPrecision(3); -				spinner3->setValue(v[VZ]); -			} -			break; -		  } -		  case TYPE_VEC3D: -		  { -			LLVector3d v; -			v.setValue(sd); -			spinner1->setVisible(TRUE); -			spinner1->setLabel(LLString("X")); -			spinner2->setVisible(TRUE); -			spinner2->setLabel(LLString("Y")); -			spinner3->setVisible(TRUE); -			spinner3->setLabel(LLString("Z")); -			if (!spinner1->hasFocus()) -			{ -				spinner1->setPrecision(3); -				spinner1->setValue(v[VX]); -			} -			if (!spinner2->hasFocus()) -			{ -				spinner2->setPrecision(3); -				spinner2->setValue(v[VY]); -			} -			if (!spinner3->hasFocus()) -			{ -				spinner3->setPrecision(3); -				spinner3->setValue(v[VZ]); -			} -			break; -		  } -		  case TYPE_RECT: -		  { -			LLRect r; -			r.setValue(sd); -			spinner1->setVisible(TRUE); -			spinner1->setLabel(LLString("Left")); -			spinner2->setVisible(TRUE); -			spinner2->setLabel(LLString("Right")); -			spinner3->setVisible(TRUE); -			spinner3->setLabel(LLString("Bottom")); -			spinner4->setVisible(TRUE); -			spinner4->setLabel(LLString("Top")); -			if (!spinner1->hasFocus()) -			{ -				spinner1->setPrecision(0); -				spinner1->setValue(r.mLeft); -			} -			if (!spinner2->hasFocus()) -			{ -				spinner2->setPrecision(0); -				spinner2->setValue(r.mRight); -			} -			if (!spinner3->hasFocus()) -			{ -				spinner3->setPrecision(0); -				spinner3->setValue(r.mBottom); -			} -			if (!spinner4->hasFocus()) -			{ -				spinner4->setPrecision(0); -				spinner4->setValue(r.mTop); -			} - -			spinner1->setMinValue((F32)S32_MIN); -			spinner1->setMaxValue((F32)S32_MAX); -			spinner1->setIncrement(1.f); - -			spinner2->setMinValue((F32)S32_MIN); -			spinner2->setMaxValue((F32)S32_MAX); -			spinner2->setIncrement(1.f); - -			spinner3->setMinValue((F32)S32_MIN); -			spinner3->setMaxValue((F32)S32_MAX); -			spinner3->setIncrement(1.f); - -			spinner4->setMinValue((F32)S32_MIN); -			spinner4->setMaxValue((F32)S32_MAX); -			spinner4->setIncrement(1.f); -			break; -		  } -		  case TYPE_COL4: -		  { -			LLColor4 clr; -			clr.setValue(sd); -			color_swatch->setVisible(TRUE); -			// only set if changed so color picker doesn't update -			if(clr != LLColor4(color_swatch->getValue())) -			{ -				color_swatch->set(LLColor4(sd), TRUE, FALSE); -			} -			spinner4->setVisible(TRUE); -			spinner4->setLabel(LLString("Alpha")); -			if (!spinner4->hasFocus()) -			{ -				spinner4->setPrecision(3); -				spinner4->setMinValue(0.0); -				spinner4->setMaxValue(1.f); -				spinner4->setValue(clr.mV[VALPHA]); -			} -			break; -		  } -		  case TYPE_COL3: -		  { -			LLColor3 clr; -			clr.setValue(sd); -			color_swatch->setVisible(TRUE); -			color_swatch->setValue(sd); -			break; -		  } -		  case TYPE_COL4U: -		  { -			LLColor4U clr; -			clr.setValue(sd); -			color_swatch->setVisible(TRUE); -			if(LLColor4(clr) != LLColor4(color_swatch->getValue())) -			{ -				color_swatch->set(LLColor4(clr), TRUE, FALSE); -			} -			spinner4->setVisible(TRUE); -			spinner4->setLabel(LLString("Alpha")); -			if(!spinner4->hasFocus()) -			{ -				spinner4->setPrecision(0); -				spinner4->setValue(clr.mV[VALPHA]); -			} - -			spinner4->setMinValue(0); -			spinner4->setMaxValue(255); -			spinner4->setIncrement(1.f); - -			break; -		  } -		  default: -			mComment->setText(LLString("unknown")); -			break; -		} -	} - -} diff --git a/indra/newview/llfloatersettingsdebug.h b/indra/newview/llfloatersettingsdebug.h deleted file mode 100644 index 389a474467..0000000000 --- a/indra/newview/llfloatersettingsdebug.h +++ /dev/null @@ -1,61 +0,0 @@ -/**  - * @file llfloatersettingsdebug.h - * @brief floater for debugging internal viewer settings - * - * $LicenseInfo:firstyear=2001&license=viewergpl$ - *  - * Copyright (c) 2001-2007, Linden Research, Inc. - *  - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab.  Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - *  - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - *  - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - *  - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#ifndef LLFLOATERDEBUGSETTINGS_H -#define LLFLOATERDEBUGSETTINGS_H - -#include "llcontrol.h" -#include "llfloater.h" -#include "lltexteditor.h" - -class LLFloaterSettingsDebug : public LLFloater -{ -public: -	LLFloaterSettingsDebug(); -	virtual ~LLFloaterSettingsDebug(); - -	virtual BOOL postBuild(); -	virtual void draw(); - -	void updateControl(LLControlVariable* control); - -	static void show(void*); -	static void onSettingSelect(LLUICtrl* ctrl, void* user_data); -	static void onCommitSettings(LLUICtrl* ctrl, void* user_data); -	static void onClickDefault(void* user_data); - -protected: -	static LLFloaterSettingsDebug* sInstance; -	LLTextEditor* mComment; -}; - -#endif //LLFLOATERDEBUGSETTINGS_H - diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index e24b5251e0..7ceb40499f 100644 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -163,6 +163,8 @@ LLNetMap::LLNetMap(  	mPopupMenuHandle = menu->getHandle();  	sInstance = this; + +	gSavedSettings.getControl("MiniMapRotate")->addListener(&mNetMapListener);  }  LLNetMap::~LLNetMap() @@ -826,3 +828,9 @@ void LLNetMap::handleZoomLevel(void* which)  		break;  	}  } + +bool LLRotateNetMapListener::handleEvent(LLPointer<LLEvent> event, const LLSD& user_data) +{ +	LLNetMap::setRotateMap(event->getValue().asBoolean()); +	return true; +} diff --git a/indra/newview/llnetmap.h b/indra/newview/llnetmap.h index dc696238ea..d375413d1d 100644 --- a/indra/newview/llnetmap.h +++ b/indra/newview/llnetmap.h @@ -45,6 +45,12 @@ class LLCoordGL;  class LLTextBox;  class LLMenuGL; +class LLRotateNetMapListener : public LLSimpleListener +{ +public: +	bool handleEvent(LLPointer<LLEvent>, const LLSD& user_data); +}; +  class LLNetMap : public LLUICtrl  {  public: @@ -111,6 +117,8 @@ public:  	LLTextBox*		mTextBoxNorthWest;  	LLTextBox*		mTextBoxSouthWest; +	LLRotateNetMapListener mNetMapListener; +  	static BOOL		sRotateMap;  	static LLNetMap*	sInstance;  }; diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index b6e8c1a7f3..1e933706e1 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -206,7 +206,7 @@ void LLLoginHandler::parse(const LLSD& queryMap)   	if (LLAppViewer::instance()->getLoginURIs().size() == 0)   	{ -		gGridName = gGridInfo[gGridChoice].mName;		/* Flawfinder: ignore */ + 	    snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		/* Flawfinder: ignore */   	    LLAppViewer::instance()->resetURIs();   	}	     @@ -429,7 +429,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  	LLTextBox* channel_text = LLUICtrlFactory::getTextBoxByName(this, "channel_text");  	if (channel_text)  	{ -		channel_text->setText(gSavedSettings.getString("VersionChannelName")); +		channel_text->setText(gChannelName);  		channel_text->setClickedCallback(onClickVersion);  		channel_text->setCallbackUserData(this);  	} @@ -471,7 +471,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  		// kick off a request to grab the url manually  		gResponsePtr = LLIamHereLogin::build( this ); - 		std::string login_page = gSavedSettings.getString("LoginPage"); + 		std::string login_page = LLAppViewer::instance()->getLoginPage();   		if (login_page.empty())   		{   			login_page = getString( "real_url" ); @@ -927,7 +927,7 @@ void LLPanelLogin::loadLoginPage()  	std::ostringstream oStr; -	std::string login_page = gSavedSettings.getString("LoginPage"); +	std::string login_page = LLAppViewer::instance()->getLoginPage();  	if (login_page.empty())  	{  		login_page = sInstance->getString( "real_url" ); @@ -984,24 +984,24 @@ void LLPanelLogin::loadLoginPage()  	}  	LLString firstname, lastname; - -    if(gSavedSettings.getLLSD("UserLoginInfo").size() == 3) -    { -        LLSD cmd_line_login = gSavedSettings.getLLSD("UserLoginInfo"); -		firstname = cmd_line_login[0].asString(); -		lastname = cmd_line_login[1].asString(); -        password = cmd_line_login[2].asString(); -    } -    	 -	if (firstname.empty()) +	 +	if (gCmdLineFirstName.empty())  	{  		firstname = gSavedSettings.getString("FirstName");  	} +	else +	{ +		firstname = gCmdLineFirstName; +	} -	if (lastname.empty()) +	if (gCmdLineLastName.empty())  	{  		lastname = gSavedSettings.getString("LastName");  	} +	else +	{ +		lastname = gCmdLineLastName; +	}  	LLString version = llformat("%d.%d.%d (%d)",  						LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD); @@ -1020,9 +1020,9 @@ void LLPanelLogin::loadLoginPage()  	curl_free(curl_version); -	if (!password.empty()) +	if (!gCmdLinePassword.empty())  	{ -		oStr << "&password=" << password; +		oStr << "&password=" << gCmdLinePassword;  	}  	else if (!(password = load_password_from_disk()).empty())  	{ diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index f2475d84d9..d2bc8f4100 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -447,7 +447,7 @@ BOOL idle_startup()  		{  			fclose(found_template); -			U32 port = gSavedSettings.getU32("UserConnectionPort"); +			U32 port = gAgent.mViewerPort;  			if ((NET_USE_OS_ASSIGNED_PORT == port) &&   // if nothing specified on command line (-port)  			    (gSavedSettings.getBOOL("ConnectionPortEnabled"))) @@ -497,7 +497,7 @@ BOOL idle_startup()  								  invalid_message_callback,  								  NULL); -			if (gSavedSettings.getBOOL("LogMessages")) +			if (gSavedSettings.getBOOL("LogMessages") || gLogMessages)  			{  				llinfos << "Message logging activated!" << llendl;  				msg->startLogging(); @@ -516,23 +516,18 @@ BOOL idle_startup()  			}  			gAssetStorage = new LLViewerAssetStorage(msg, gXferManager, gVFS); - -			F32 dropPercent = gSavedSettings.getF32("PacketDropPercentage"); -			msg->mPacketRing.setDropPercentage(dropPercent); - -            F32 inBandwidth = gSavedSettings.getF32("InBandwidth");  -            F32 outBandwidth = gSavedSettings.getF32("OutBandwidth");  -			if (inBandwidth != 0.f) +			msg->mPacketRing.setDropPercentage(gPacketDropPercentage); +			if (gInBandwidth != 0.f)  			{ -				llinfos << "Setting packetring incoming bandwidth to " << inBandwidth << llendl; +				llinfos << "Setting packetring incoming bandwidth to " << gInBandwidth << llendl;  				msg->mPacketRing.setUseInThrottle(TRUE); -				msg->mPacketRing.setInBandwidth(inBandwidth); +				msg->mPacketRing.setInBandwidth(gInBandwidth);  			} -			if (outBandwidth != 0.f) +			if (gOutBandwidth != 0.f)  			{ -				llinfos << "Setting packetring outgoing bandwidth to " << outBandwidth << llendl; +				llinfos << "Setting packetring outgoing bandwidth to " << gOutBandwidth << llendl;  				msg->mPacketRing.setUseOutThrottle(TRUE); -				msg->mPacketRing.setOutBandwidth(outBandwidth); +				msg->mPacketRing.setOutBandwidth(gOutBandwidth);  			}  		} @@ -546,7 +541,7 @@ BOOL idle_startup()  		// or audio cues in connection UI.  		//------------------------------------------------- -		if (FALSE == gSavedSettings.getBOOL("NoAudio")) +		if (gUseAudio)  		{  #if LL_FMOD  			gAudiop = (LLAudioEngine *) new LLAudioEngine_FMOD(); @@ -591,13 +586,14 @@ BOOL idle_startup()  			show_connect_box = FALSE;  		} -        else if(gSavedSettings.getLLSD("UserLoginInfo").size() == 3) -        { -            LLSD cmd_line_login = gSavedSettings.getLLSD("UserLoginInfo"); -			firstname = cmd_line_login[0].asString(); -			lastname = cmd_line_login[1].asString(); +		else if( !gCmdLineFirstName.empty()  +			&& !gCmdLineLastName.empty()  +			&& !gCmdLinePassword.empty()) +		{ +			firstname = gCmdLineFirstName; +			lastname = gCmdLineLastName; -			LLMD5 pass((unsigned char*)cmd_line_login[2].asString().c_str()); +			LLMD5 pass((unsigned char*)gCmdLinePassword.c_str());  			char md5pass[33];               /* Flawfinder: ignore */  			pass.hex_digest(md5pass);  			password = md5pass; @@ -608,9 +604,9 @@ BOOL idle_startup()  #else  			show_connect_box = FALSE;  #endif -			gSavedSettings.setBOOL("AutoLogin", TRUE); -        } -		else if (gSavedSettings.getBOOL("AutoLogin")) +			gAutoLogin = TRUE; +		} +		else if (gAutoLogin || gSavedSettings.getBOOL("AutoLogin"))  		{  			firstname = gSavedSettings.getString("FirstName");  			lastname = gSavedSettings.getString("LastName"); @@ -785,14 +781,19 @@ BOOL idle_startup()  		// create necessary directories  		// *FIX: these mkdir's should error check  		gDirUtilp->setLindenUserDir(firstname.c_str(), lastname.c_str()); -    	LLFile::mkdir(gDirUtilp->getLindenUserDir().c_str()); -        // Set UserSettingsFile to the default value. -		gSavedSettings.setString("UserSettingsFile", -			gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, DEFAULT_SETTINGS_FILE)); -		// Overwrite default user settings with user settings								  -		LLAppViewer::instance()->loadSettingsFromDirectory(LL_PATH_PER_SL_ACCOUNT); +		LLFile::mkdir(gDirUtilp->getLindenUserDir().c_str()); + +		// the mute list is loaded in the llmutelist class. + +		gSavedSettings.loadFromFile(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,"overrides.xml")); + +		// handle the per account settings setup +		gPerAccountSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, DEFAULT_SETTINGS_FILE); + +		// per account settings.  Set defaults here if not found.  If we get a bunch of these, eventually move to a function. +		gSavedPerAccountSettings.loadFromFile(gPerAccountSettingsFileName);  		// Need to set the LastLogoff time here if we don't have one.  LastLogoff is used for "Recent Items" calculation  		// and startup time is close enough if we don't have a real value. @@ -827,7 +828,7 @@ BOOL idle_startup()  			gSavedSettings.setS32("ServerChoice", gGridChoice);  			if (gGridChoice == GRID_INFO_OTHER)  			{ -				gGridName = server_label;/* Flawfinder: ignore */ +				snprintf(gGridName, MAX_STRING, "%s", server_label.c_str());/* Flawfinder: ignore */  			}  			if ( user_picked_server ) @@ -931,7 +932,7 @@ BOOL idle_startup()  		//requested_options.push_back("inventory-meat");  		//requested_options.push_back("inventory-skel-targets");  #if (!defined LL_MINIMIAL_REQUESTED_OPTIONS) -		if(FALSE == gSavedSettings.getBOOL("NoInventoryLibrary")) +		if(gRequestInventoryLibrary)  		{  			requested_options.push_back("inventory-lib-root");  			requested_options.push_back("inventory-lib-owner"); @@ -951,7 +952,7 @@ BOOL idle_startup()  		requested_options.push_back("tutorial_setting");  		requested_options.push_back("login-flags");  		requested_options.push_back("global-textures"); -		if(gSavedSettings.getBOOL("ConnectAsGod")) +		if(gGodConnect)  		{  			gSavedSettings.setBOOL("UseDebugMenus", TRUE);  			requested_options.push_back("god-connect"); @@ -1239,6 +1240,7 @@ BOOL idle_startup()  				  << (sAuthUriNum + 1) << ".  ";  				auth_desc = s.str();  				LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE ); +				sAuthUriNum++;  				return do_normal_idle;  			}  			break; @@ -1488,7 +1490,7 @@ BOOL idle_startup()  				args["[ERROR_MESSAGE]"] = emsg.str();  				gViewerWindow->alertXml("ErrorMessage", args, login_alert_done);  				reset_login(); -				gSavedSettings.setBOOL("AutoLogin", FALSE); +				gAutoLogin = FALSE;  				show_connect_box = TRUE;  			} @@ -1508,7 +1510,7 @@ BOOL idle_startup()  			args["[ERROR_MESSAGE]"] = emsg.str();  			gViewerWindow->alertXml("ErrorMessage", args, login_alert_done);  			reset_login(); -			gSavedSettings.setBOOL("AutoLogin", FALSE); +			gAutoLogin = FALSE;  			show_connect_box = TRUE;  			// Don't save an incorrect password to disk.  			save_password_to_disk(NULL); @@ -1532,7 +1534,7 @@ BOOL idle_startup()  		// Since we connected, save off the settings so the user doesn't have to  		// type the name/password again if we crash. -		gSavedSettings.saveToFile(gSavedSettings.getString("ClientSettingsFile"), TRUE); +		gSavedSettings.saveToFile(gSettingsFileName, TRUE);  		//  		// Initialize classes w/graphics stuff. @@ -2099,7 +2101,7 @@ BOOL idle_startup()  			gSavedSettings.setString( "NextLoginLocation", "" );  			// and make sure it's saved -			gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile") , TRUE ); +			gSavedSettings.saveToFile( gSettingsFileName, TRUE );  		};  		if (!gNoRender) @@ -2391,7 +2393,7 @@ void login_show()  	if( GRID_INFO_OTHER == gGridChoice )  	{ -		   LLPanelLogin::addServer( gGridName.c_str(), GRID_INFO_OTHER ); +		   LLPanelLogin::addServer( gGridName, GRID_INFO_OTHER );  	}  	else  	{ @@ -2439,7 +2441,7 @@ void login_callback(S32 option, void *userdata)  		{  			// turn off the setting and write out to disk  			gSavedSettings.setBOOL("RememberPassword", FALSE); -			gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile") , TRUE ); +			gSavedSettings.saveToFile(gSettingsFileName, TRUE);  			// stomp the saved password on disk  			save_password_to_disk(NULL); @@ -2633,7 +2635,7 @@ void login_alert_status(S32 option, void* user_data)  void update_app(BOOL mandatory, const std::string& auth_msg)  {  	// store off config state, as we might quit soon -	gSavedSettings.saveToFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);	 +	gSavedSettings.saveToFile(gSettingsFileName, TRUE);  	std::ostringstream message; @@ -2733,7 +2735,7 @@ void update_dialog_callback(S32 option, void *userdata)  	// *TODO change userserver to be grid on both viewer and sim, since  	// userserver no longer exists.  	query_map["userserver"] = gGridName; -	query_map["channel"] = gSavedSettings.getString("VersionChannelName"); +	query_map["channel"] = gChannelName;  	// *TODO constantize this guy  	LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map); diff --git a/indra/newview/lltoolgun.cpp b/indra/newview/lltoolgun.cpp index 9c8bb97343..ffa921125a 100644 --- a/indra/newview/lltoolgun.cpp +++ b/indra/newview/lltoolgun.cpp @@ -80,10 +80,14 @@ BOOL LLToolGun::handleHover(S32 x, S32 y, MASK mask)  {  	if( gAgent.cameraMouselook() )  	{ -		const F32 NOMINAL_MOUSE_SENSITIVITY = 0.0025f; +		#if 1 //LL_WINDOWS || LL_DARWIN +			const F32 NOMINAL_MOUSE_SENSITIVITY = 0.0025f; +		#else +			const F32 NOMINAL_MOUSE_SENSITIVITY = 0.025f; +		#endif -		F32 mouse_sensitivity = gSavedSettings.getF32("MouseSensitivity"); -		mouse_sensitivity = clamp_rescale(mouse_sensitivity, 0.f, 15.f, 0.5f, 2.75f) * NOMINAL_MOUSE_SENSITIVITY; +		 +		F32 mouse_sensitivity = clamp_rescale(gMouseSensitivity, 0.f, 15.f, 0.5f, 2.75f) * NOMINAL_MOUSE_SENSITIVITY;  		// ...move the view with the mouse @@ -94,7 +98,7 @@ BOOL LLToolGun::handleHover(S32 x, S32 y, MASK mask)  		if (dx != 0 || dy != 0)  		{  			// ...actually moved off center -			if (gSavedSettings.getBOOL("InvertMouse")) +			if (gInvertMouse)  			{  				gAgent.pitch(mouse_sensitivity * -dy);  			} diff --git a/indra/newview/llvectorperfoptions.cpp b/indra/newview/llvectorperfoptions.cpp index 34c10a4f72..ca8ae2e886 100644 --- a/indra/newview/llvectorperfoptions.cpp +++ b/indra/newview/llvectorperfoptions.cpp @@ -31,4 +31,101 @@  #include "llviewerprecompiledheaders.h" -// Deprecated - moved into llviewerjointmesh +#include "llvectorperfoptions.h" +#include "llviewerjointmesh.h" +#include "llviewercontrol.h" + +// Initially, we test the performance of the vectorization code, then +// turn it off if it ends up being slower. JC +BOOL	gVectorizePerfTest	= TRUE; +BOOL	gVectorizeEnable	= FALSE; +U32		gVectorizeProcessor	= 0; +BOOL	gVectorizeSkin		= FALSE; + +void update_vector_performances(void) +{ +	char *vp; +	 +	switch(gVectorizeProcessor) +	{ +		case 2: vp = "SSE2"; break;					// *TODO: replace the magic #s +		case 1: vp = "SSE"; break; +		default: vp = "COMPILER DEFAULT"; break; +	} +	llinfos << "Vectorization         : " << ( gVectorizeEnable ? "ENABLED" : "DISABLED" ) << llendl ; +	llinfos << "Vector Processor      : " << vp << llendl ; +	llinfos << "Vectorized Skinning   : " << ( gVectorizeSkin ? "ENABLED" : "DISABLED" ) << llendl ; +	 +	if(gVectorizeEnable && gVectorizeSkin) +	{ +		switch(gVectorizeProcessor) +		{ +			case 2: +				LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometrySSE2; +				break; +			case 1: +				LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometrySSE; +				break; +			default: +				LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometryVectorized; +				break; +		} +	} +	else +	{ +		LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometryOriginal; +	} +} + + +class LLVectorizationEnableListener: public LLSimpleListener +{ +	bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) +	{ +		gVectorizeEnable = event->getValue().asBoolean(); +		update_vector_performances(); +		return true; +	} +}; +static LLVectorizationEnableListener vectorization_enable_listener; + +class LLVectorizeSkinListener: public LLSimpleListener +{ +	bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) +	{ +		gVectorizeSkin = event->getValue().asBoolean(); +		update_vector_performances(); +		return true; +	} +}; +static LLVectorizeSkinListener vectorize_skin_listener; + +class LLVectorProcessorListener: public LLSimpleListener +{ +	bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) +	{ +		gVectorizeProcessor = event->getValue().asInteger(); +		update_vector_performances(); +		return true; +	} +}; +static LLVectorProcessorListener vector_processor_listener; + +void LLVectorPerformanceOptions::initClass() +{ +	gVectorizePerfTest = gSavedSettings.getBOOL("VectorizePerfTest"); +	gVectorizeEnable = gSavedSettings.getBOOL("VectorizeEnable"); +	gVectorizeProcessor = gSavedSettings.getU32("VectorizeProcessor"); +	gVectorizeSkin = gSavedSettings.getBOOL("VectorizeSkin"); +	update_vector_performances(); + +	// these are currently static in this file, so they can't move to settings_setup_listeners +	gSavedSettings.getControl("VectorizeEnable")->addListener(&vectorization_enable_listener); +	gSavedSettings.getControl("VectorizeProcessor")->addListener(&vector_processor_listener); +	gSavedSettings.getControl("VectorizeSkin")->addListener(&vectorize_skin_listener); +} + +void LLVectorPerformanceOptions::cleanupClass() +{ +} + diff --git a/indra/newview/llvectorperfoptions.h b/indra/newview/llvectorperfoptions.h index e2a0a37e33..dac4d1f86c 100644 --- a/indra/newview/llvectorperfoptions.h +++ b/indra/newview/llvectorperfoptions.h @@ -32,6 +32,10 @@  #ifndef LL_VECTORPERFOPTIONS_H  #define LL_VECTORPERFOPTIONS_H -// Deprecated - moved into llviewerjointmesh +namespace LLVectorPerformanceOptions +{ +	void initClass(); // Run after configuration files are read. +	void cleanupClass(); +};  #endif diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp index fd85ac1bc1..affce91b79 100644 --- a/indra/newview/llvieweraudio.cpp +++ b/indra/newview/llvieweraudio.cpp @@ -65,7 +65,7 @@ void init_audio()  	BOOL mute_audio = gSavedSettings.getBOOL("MuteAudio"); -	if (!mute_audio && FALSE == gSavedSettings.getBOOL("NoPreload")) +	if (!mute_audio && gPreloadSounds)  	{  		gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndAlert")));  		gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndBadKeystroke"))); diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 7733ef5ae1..9c81f89e99 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -36,47 +36,26 @@  #include "indra_constants.h" -// For Listeners -#include "audioengine.h" -#include "llagent.h" -#include "llconsole.h" -#include "lldrawpoolterrain.h" -#include "llflexibleobject.h" -#include "llfeaturemanager.h" -#include "llglslshader.h" -#include "llnetmap.h" -#include "llpanelgeneral.h" -#include "llpanelinput.h" -#include "llsky.h" -#include "llvieweraudio.h" -#include "llviewerimagelist.h" -#include "llviewerthrottle.h" -#include "llviewerwindow.h" -#include "llvoavatar.h" -#include "llvoiceclient.h" -#include "llvosky.h" -#include "llvotree.h" -#include "llvovolume.h" -#include "llworld.h" -#include "pipeline.h" -#include "llviewerjoystick.h" -#include "llviewerparcelmgr.h" -#include "llparcel.h" -#include "llnotify.h" -#include "llkeyboard.h" -#include "llerrorcontrol.h" -#include "llversionviewer.h" -#include "llappviewer.h" -#include "llvosurfacepatch.h" -#include "llvowlsky.h" -#include "llglimmediate.h" +#include "v3math.h" +#include "v3dmath.h" +#include "llrect.h" +#include "v4color.h" +#include "v4coloru.h" +#include "v3color.h" + +#include "llfloater.h" +#include "llvieweruictrlfactory.h" +#include "llfirstuse.h" +#include "llcombobox.h" +#include "llspinctrl.h" +#include "llcolorswatch.h"  #ifdef TOGGLE_HACKED_GODLIKE_VIEWER  BOOL 				gHackGodmode = FALSE;  #endif +LLFloaterSettingsDebug* LLFloaterSettingsDebug::sInstance = NULL; -std::map<LLString, LLControlGroup*> gSettings;  LLControlGroup gSavedSettings;	// saved at end of session  LLControlGroup gSavedPerAccountSettings; // saved at end of session  LLControlGroup gViewerArt;		// read-only @@ -86,440 +65,461 @@ LLControlGroup gCrashSettings;	// saved at end of session  LLString gLastRunVersion;  LLString gCurrentVersion; -extern BOOL gResizeScreenTexture; +LLString gSettingsFileName; +LLString gPerAccountSettingsFileName; -//////////////////////////////////////////////////////////////////////////// -// Listeners - -static bool handleRenderAvatarMouselookChanged(const LLSD& newvalue) -{ -	LLVOAvatar::sVisibleInFirstPerson = newvalue.asBoolean(); -	return true; -} - -static bool handleRenderFarClipChanged(const LLSD& newvalue) +LLFloaterSettingsDebug::LLFloaterSettingsDebug() : LLFloater("Configuration Editor")  { -	F32 draw_distance = (F32) newvalue.asReal(); -	gAgent.mDrawDistance = draw_distance; -	if (gWorldPointer) -	{ -		gWorldPointer->setLandFarClip(draw_distance); -	} -	return true;  } -static bool handleTerrainDetailChanged(const LLSD& newvalue) +LLFloaterSettingsDebug::~LLFloaterSettingsDebug()  { -	LLDrawPoolTerrain::sDetailMode = newvalue.asInteger(); -	return true; +	sInstance = NULL;  } - -static bool handleSetShaderChanged(const LLSD& newvalue) +BOOL LLFloaterSettingsDebug::postBuild()  { -	LLShaderMgr::setShaders(); -	return true; -} +	LLComboBox* settings_combo = LLUICtrlFactory::getComboBoxByName(this, "settings_combo"); -static bool handleReleaseGLBufferChanged(const LLSD& newvalue) -{ -	if (gPipeline.isInit()) +	LLControlGroup::ctrl_name_table_t::iterator name_it; +	for(name_it = gSavedSettings.mNameTable.begin(); name_it != gSavedSettings.mNameTable.end(); ++name_it)  	{ -		gPipeline.releaseGLBuffers(); -		gPipeline.createGLBuffers(); +		settings_combo->add(name_it->first, (void*)name_it->second);  	} -	return true; -} - -static bool handleVolumeLODChanged(const LLSD& newvalue) -{ -	LLVOVolume::sLODFactor = (F32) newvalue.asReal(); -	LLVOVolume::sDistanceFactor = 1.f-LLVOVolume::sLODFactor * 0.1f; -	return true; -} - -static bool handleAvatarLODChanged(const LLSD& newvalue) -{ -	LLVOAvatar::sLODFactor = (F32) newvalue.asReal(); -	return true; -} - -static bool handleTerrainLODChanged(const LLSD& newvalue) -{ -		LLVOSurfacePatch::sLODFactor = (F32)newvalue.asReal(); -		//sqaure lod factor to get exponential range of [0,4] and keep -		//a value of 1 in the middle of the detail slider for consistency -		//with other detail sliders (see panel_preferences_graphics1.xml) -		LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; -		return true; -} - -static bool handleTreeLODChanged(const LLSD& newvalue) -{ -	LLVOTree::sTreeFactor = (F32) newvalue.asReal(); -	return true; -} - -static bool handleFlexLODChanged(const LLSD& newvalue) -{ -	LLVolumeImplFlexible::sUpdateFactor = (F32) newvalue.asReal(); -	return true; -} - -static bool handleGammaChanged(const LLSD& newvalue) -{ -	F32 gamma = (F32) newvalue.asReal(); -	if (gamma == 0.0f) +	for(name_it = gSavedPerAccountSettings.mNameTable.begin(); name_it != gSavedPerAccountSettings.mNameTable.end(); ++name_it)  	{ -		gamma = 1.0f; // restore normal gamma +		settings_combo->add(name_it->first, (void*)name_it->second);  	} -	if (gViewerWindow && gViewerWindow->getWindow() && gamma != gViewerWindow->getWindow()->getGamma()) +	for(name_it = gColors.mNameTable.begin(); name_it != gColors.mNameTable.end(); ++name_it)  	{ -		// Only save it if it's changed -		if (!gViewerWindow->getWindow()->setGamma(gamma)) -		{ -			llwarns << "setGamma failed!" << llendl; -		} +		settings_combo->add(name_it->first, (void*)name_it->second);  	} +	settings_combo->sortByName(); +	settings_combo->setCommitCallback(onSettingSelect); +	settings_combo->setCallbackUserData(this); +	settings_combo->updateSelection(); + +	childSetCommitCallback("val_spinner_1", onCommitSettings); +	childSetUserData("val_spinner_1", this); +	childSetCommitCallback("val_spinner_2", onCommitSettings); +	childSetUserData("val_spinner_2", this); +	childSetCommitCallback("val_spinner_3", onCommitSettings); +	childSetUserData("val_spinner_3", this); +	childSetCommitCallback("val_spinner_4", onCommitSettings); +	childSetUserData("val_spinner_4", this); +	childSetCommitCallback("val_text", onCommitSettings); +	childSetUserData("val_text", this); +	childSetCommitCallback("boolean_combo", onCommitSettings); +	childSetUserData("boolean_combo", this); +	childSetCommitCallback("color_swatch", onCommitSettings); +	childSetUserData("color_swatch", this); +	childSetAction("default_btn", onClickDefault, this); +	mComment = getChild<LLTextEditor>("comment_text"); +	return TRUE; +} + +void LLFloaterSettingsDebug::draw() +{ +	LLComboBox* settings_combo = getChild<LLComboBox>("settings_combo"); +	LLControlBase* controlp = (LLControlBase*)settings_combo->getCurrentUserdata(); +	updateControl(controlp); + +	LLFloater::draw(); +} + +//static +void LLFloaterSettingsDebug::show(void*) +{ +	if (sInstance == NULL) +	{ +		sInstance = new LLFloaterSettingsDebug(); -	return true; -} - -const F32 MAX_USER_FOG_RATIO = 10.f; -const F32 MIN_USER_FOG_RATIO = 0.5f; - -static bool handleFogRatioChanged(const LLSD& newvalue) -{ -	F32 fog_ratio = llmax(MIN_USER_FOG_RATIO, llmin((F32) newvalue.asReal(), MAX_USER_FOG_RATIO)); -	gSky.setFogRatio(fog_ratio); -	return true; -} - -static bool handleMaxPartCountChanged(const LLSD& newvalue) -{ -	LLViewerPartSim::setMaxPartCount(newvalue.asInteger()); -	return true; -} - -const S32 MAX_USER_COMPOSITE_LIMIT = 100; -const S32 MIN_USER_COMPOSITE_LIMIT = 0; +		gUICtrlFactory->buildFloater(sInstance, "floater_settings_debug.xml"); +	} -static bool handleCompositeLimitChanged(const LLSD& newvalue) -{ -	S32 composite_limit = llmax(MIN_USER_COMPOSITE_LIMIT,  llmin((S32)newvalue.asInteger(), MAX_USER_COMPOSITE_LIMIT)); -	LLVOAvatar::sMaxOtherAvatarsToComposite = composite_limit; -	return true; +	sInstance->open();		/* Flawfinder: ignore */ +} + +//static  +void LLFloaterSettingsDebug::onSettingSelect(LLUICtrl* ctrl, void* user_data) +{ +	LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data; +	LLComboBox* combo_box = (LLComboBox*)ctrl; +	LLControlBase* controlp = (LLControlBase*)combo_box->getCurrentUserdata(); + +	floaterp->updateControl(controlp); +} + +//static +void LLFloaterSettingsDebug::onCommitSettings(LLUICtrl* ctrl, void* user_data) +{ +	LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data; + +	LLComboBox* settings_combo = floaterp->getChild<LLComboBox>("settings_combo"); +	LLControlBase* controlp = (LLControlBase*)settings_combo->getCurrentUserdata(); + +	LLVector3 vector; +	LLVector3d vectord; +	LLRect rect; +	LLColor4 col4; +	LLColor3 col3; +	LLColor4U col4U; +	LLColor4 color_with_alpha; + +	switch(controlp->type()) +	{		 +	  case TYPE_U32: +		controlp->set(floaterp->childGetValue("val_spinner_1")); +		break; +	  case TYPE_S32: +		controlp->set(floaterp->childGetValue("val_spinner_1")); +		break; +	  case TYPE_F32: +		controlp->set(LLSD(floaterp->childGetValue("val_spinner_1").asReal())); +		break; +	  case TYPE_BOOLEAN: +		controlp->set(floaterp->childGetValue("boolean_combo")); +		break; +	  case TYPE_STRING: +		controlp->set(LLSD(floaterp->childGetValue("val_text").asString())); +		break; +	  case TYPE_VEC3: +		vector.mV[VX] = (F32)floaterp->childGetValue("val_spinner_1").asReal(); +		vector.mV[VY] = (F32)floaterp->childGetValue("val_spinner_2").asReal(); +		vector.mV[VZ] = (F32)floaterp->childGetValue("val_spinner_3").asReal(); +		controlp->set(vector.getValue()); +		break; +	  case TYPE_VEC3D: +		vectord.mdV[VX] = floaterp->childGetValue("val_spinner_1").asReal(); +		vectord.mdV[VY] = floaterp->childGetValue("val_spinner_2").asReal(); +		vectord.mdV[VZ] = floaterp->childGetValue("val_spinner_3").asReal(); +		controlp->set(vectord.getValue()); +		break; +	  case TYPE_RECT: +		rect.mLeft = floaterp->childGetValue("val_spinner_1").asInteger(); +		rect.mRight = floaterp->childGetValue("val_spinner_2").asInteger(); +		rect.mBottom = floaterp->childGetValue("val_spinner_3").asInteger(); +		rect.mTop = floaterp->childGetValue("val_spinner_4").asInteger(); +		controlp->set(rect.getValue()); +		break; +	  case TYPE_COL4: +		col3.setValue(floaterp->childGetValue("color_swatch")); +		col4 = LLColor4(col3, (F32)floaterp->childGetValue("val_spinner_4").asReal()); +		controlp->set(col4.getValue()); +		break; +	  case TYPE_COL3: +		controlp->set(floaterp->childGetValue("color_swatch")); +		//col3.mV[VRED] = (F32)floaterp->childGetValue("val_spinner_1").asC(); +		//col3.mV[VGREEN] = (F32)floaterp->childGetValue("val_spinner_2").asReal(); +		//col3.mV[VBLUE] = (F32)floaterp->childGetValue("val_spinner_3").asReal(); +		//controlp->set(col3.getValue()); +		break; +	  case TYPE_COL4U: +		col3.setValue(floaterp->childGetValue("color_swatch")); +		col4U.setVecScaleClamp(col3); +		col4U.mV[VALPHA] = floaterp->childGetValue("val_spinner_4").asInteger(); +		controlp->set(col4U.getValue()); +		break; +	  default: +		break; +	}  } -static bool handleVideoMemoryChanged(const LLSD& newvalue) +// static +void LLFloaterSettingsDebug::onClickDefault(void* user_data)  { -	gImageList.updateMaxResidentTexMem(newvalue.asInteger()); -	return true; -} +	LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data; +	LLComboBox* settings_combo = floaterp->getChild<LLComboBox>("settings_combo"); +	LLControlBase* controlp = (LLControlBase*)settings_combo->getCurrentUserdata(); -static bool handleBandwidthChanged(const LLSD& newvalue) -{ -	gViewerThrottle.setMaxBandwidth((F32) newvalue.asReal()); -	return true; -} - -static bool handleChatFontSizeChanged(const LLSD& newvalue) -{ -	if(gConsole) +	if (controlp)  	{ -		gConsole->setFontSize(newvalue.asInteger()); +		controlp->resetToDefault(); +		floaterp->updateControl(controlp);  	} -	return true;  } -static bool handleChatPersistTimeChanged(const LLSD& newvalue) +// we've switched controls, or doing per-frame update, so update spinners, etc. +void LLFloaterSettingsDebug::updateControl(LLControlBase* controlp)  { -	if(gConsole) -	{ -		gConsole->setLinePersistTime((F32) newvalue.asReal()); -	} -	return true; -} +	LLSpinCtrl* spinner1 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_1"); +	LLSpinCtrl* spinner2 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_2"); +	LLSpinCtrl* spinner3 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_3"); +	LLSpinCtrl* spinner4 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_4"); +	LLColorSwatchCtrl* color_swatch = getChild<LLColorSwatchCtrl>("color_swatch"); -static bool handleConsoleMaxLinesChanged(const LLSD& newvalue) -{ -	if(gConsole) +	if (!spinner1 || !spinner2 || !spinner3 || !spinner4 || !color_swatch)  	{ -		gConsole->setMaxLines(newvalue.asInteger()); +		llwarns << "Could not find all desired controls by name" +			<< llendl; +		return;  	} -	return true; -} -static void handleAudioVolumeChanged(const LLSD& newvalue) -{ -	audio_update_volume(true); -} - -static bool handleJoystickChanged(const LLSD& newvalue) -{ -	LLViewerJoystick::updateCamera(TRUE); -	return true; -} +	spinner1->setVisible(FALSE); +	spinner2->setVisible(FALSE); +	spinner3->setVisible(FALSE); +	spinner4->setVisible(FALSE); +	color_swatch->setVisible(FALSE); +	childSetVisible("val_text", FALSE); +	mComment->setText(LLString::null); -static bool handleAudioStreamMusicChanged(const LLSD& newvalue) -{ -	if (gAudiop) +	if (controlp)  	{ -		if ( newvalue.asBoolean() ) +		eControlType type = controlp->type(); +		mComment->setText(controlp->getComment()); +		spinner1->setMaxValue(F32_MAX); +		spinner2->setMaxValue(F32_MAX); +		spinner3->setMaxValue(F32_MAX); +		spinner4->setMaxValue(F32_MAX); +		spinner1->setMinValue(-F32_MAX); +		spinner2->setMinValue(-F32_MAX); +		spinner3->setMinValue(-F32_MAX); +		spinner4->setMinValue(-F32_MAX); +		if (!spinner1->hasFocus())  		{ -			if (gParcelMgr -				&& gParcelMgr->getAgentParcel() -				&& !gParcelMgr->getAgentParcel()->getMusicURL().empty()) -			{ -				// if stream is already playing, don't call this -				// otherwise music will briefly stop -				if ( ! gAudiop->isInternetStreamPlaying() ) -				{ -					gAudiop->startInternetStream(gParcelMgr->getAgentParcel()->getMusicURL().c_str()); -				} -			} +			spinner1->setIncrement(0.1f);  		} -		else +		if (!spinner2->hasFocus())  		{ -			gAudiop->stopInternetStream(); +			spinner2->setIncrement(0.1f); +		} +		if (!spinner3->hasFocus()) +		{ +			spinner3->setIncrement(0.1f); +		} +		if (!spinner4->hasFocus()) +		{ +			spinner4->setIncrement(0.1f);  		} -	} -	return true; -} - -static bool handleUseOcclusionChanged(const LLSD& newvalue) -{ -	LLPipeline::sUseOcclusion = (newvalue.asBoolean() && gGLManager.mHasOcclusionQuery  -			&& gFeatureManagerp->isFeatureAvailable("UseOcclusion") && !gUseWireframe) ? 2 : 0; -	return true; -} - -static bool handleNumpadControlChanged(const LLSD& newvalue) -{ -	if (gKeyboard) -	{ -		gKeyboard->setNumpadDistinct(static_cast<LLKeyboard::e_numpad_distinct>(newvalue.asInteger())); -	} -	return true; -} - -static bool handleRenderUseVBOChanged(const LLSD& newvalue) -{ -	if (gPipeline.isInit()) -	{ -		gPipeline.setUseVBO(newvalue.asBoolean()); -	} -	return true; -} - -static bool handleWLSkyDetailChanged(const LLSD&) -{ -	if (gSky.mVOWLSkyp.notNull()) -	{ -		gSky.mVOWLSkyp->updateGeometry(gSky.mVOWLSkyp->mDrawable); -	} -	return true; -} - -static bool handleRenderLightingDetailChanged(const LLSD& newvalue) -{ -	if (gPipeline.isInit()) -	{ -		gPipeline.setLightingDetail(newvalue.asInteger()); -	} -	return true; -} - -static bool handleResetVertexBuffersChanged(const LLSD&) -{ -	if (gPipeline.isInit()) -	{ -		gPipeline.resetVertexBuffers(); -	} -	return true; -} - -static bool handleRenderDynamicLODChanged(const LLSD& newvalue) -{ -	LLPipeline::sDynamicLOD = newvalue.asBoolean(); -	return true; -} - -static bool handleRenderUseFBOChanged(const LLSD& newvalue) -{ -	LLRenderTarget::sUseFBO = newvalue.asBoolean(); -	if (gPipeline.isInit()) -	{ -		gPipeline.releaseGLBuffers(); -		gPipeline.createGLBuffers(); -	} -	return true; -} - -static bool handleRenderUseImpostorsChanged(const LLSD& newvalue) -{ -	LLVOAvatar::sUseImpostors = newvalue.asBoolean(); -	return true; -} - -static bool handleRenderUseCleverUIChanged(const LLSD& newvalue) -{ -	gGL.setClever(newvalue.asBoolean()); -	return true; -} - -static bool handleRenderResolutionDivisorChanged(const LLSD&) -{ -	gResizeScreenTexture = TRUE; -	return true; -} - -static bool handleDebugViewsChanged(const LLSD& newvalue) -{ -	LLView::sDebugRects = newvalue.asBoolean(); -	return true; -} - -static bool handleLogFileChanged(const LLSD& newvalue) -{ -	std::string log_filename = newvalue.asString(); -	LLFile::remove(log_filename.c_str()); -	LLError::logToFile(log_filename); -	return true; -} - -bool handleHideGroupTitleChanged(const LLSD& newvalue) -{ -	gAgent.setHideGroupTitle(newvalue); -	return true; -} -bool handleEffectColorChanged(const LLSD& newvalue) -{ -	gAgent.setEffectColor(LLColor4(newvalue)); -	return true; -} +		LLSD sd = controlp->get(); +		switch(type) +		{ +		  case TYPE_U32: +			spinner1->setVisible(TRUE); +			spinner1->setLabel(LLString("value")); // Debug, don't translate +			childSetVisible("boolean_combo", FALSE); +			if (!spinner1->hasFocus()) +			{ +				spinner1->setValue(sd); +				spinner1->setMinValue((F32)U32_MIN); +				spinner1->setMaxValue((F32)U32_MAX); +				spinner1->setIncrement(1.f); +				spinner1->setPrecision(0); +			} +			break; +		  case TYPE_S32: +			spinner1->setVisible(TRUE); +			spinner1->setLabel(LLString("value")); // Debug, don't translate +			childSetVisible("boolean_combo", FALSE); +			if (!spinner1->hasFocus()) +			{ +				spinner1->setValue(sd); +				spinner1->setMinValue((F32)S32_MIN); +				spinner1->setMaxValue((F32)S32_MAX); +				spinner1->setIncrement(1.f); +				spinner1->setPrecision(0); +			} +			break; +		  case TYPE_F32: +			spinner1->setVisible(TRUE); +			spinner1->setLabel(LLString("value")); // Debug, don't translate +			childSetVisible("boolean_combo", FALSE); +			if (!spinner1->hasFocus()) +			{ +				spinner1->setPrecision(3); +				spinner1->setValue(sd); +			} +			break; +		  case TYPE_BOOLEAN: +			childSetVisible("boolean_combo", TRUE); +			 +			if (!childHasFocus("boolean_combo")) +			{ +				if (sd.asBoolean()) +				{ +					childSetValue("boolean_combo", LLSD("true")); +				} +				else +				{ +					childSetValue("boolean_combo", LLSD("")); +				} +			} +			break; +		  case TYPE_STRING: +			childSetVisible("val_text", TRUE); +			childSetVisible("boolean_combo", FALSE); +			if (!childHasFocus("val_text")) +			{ +				childSetValue("val_text", sd); +			} +			break; +		  case TYPE_VEC3: +		  { +			childSetVisible("boolean_combo", FALSE); +			LLVector3 v; +			v.setValue(sd); +			spinner1->setVisible(TRUE); +			spinner1->setLabel(LLString("X")); +			spinner2->setVisible(TRUE); +			spinner2->setLabel(LLString("Y")); +			spinner3->setVisible(TRUE); +			spinner3->setLabel(LLString("Z")); +			if (!spinner1->hasFocus()) +			{ +				spinner1->setPrecision(3); +				spinner1->setValue(v[VX]); +			} +			if (!spinner2->hasFocus()) +			{ +				spinner2->setPrecision(3); +				spinner2->setValue(v[VY]); +			} +			if (!spinner3->hasFocus()) +			{ +				spinner3->setPrecision(3); +				spinner3->setValue(v[VZ]); +			} +			break; +		  } +		  case TYPE_VEC3D: +		  { +			childSetVisible("boolean_combo", FALSE); +			LLVector3d v; +			v.setValue(sd); +			spinner1->setVisible(TRUE); +			spinner1->setLabel(LLString("X")); +			spinner2->setVisible(TRUE); +			spinner2->setLabel(LLString("Y")); +			spinner3->setVisible(TRUE); +			spinner3->setLabel(LLString("Z")); +			if (!spinner1->hasFocus()) +			{ +				spinner1->setPrecision(3); +				spinner1->setValue(v[VX]); +			} +			if (!spinner2->hasFocus()) +			{ +				spinner2->setPrecision(3); +				spinner2->setValue(v[VY]); +			} +			if (!spinner3->hasFocus()) +			{ +				spinner3->setPrecision(3); +				spinner3->setValue(v[VZ]); +			} +			break; +		  } +		  case TYPE_RECT: +		  { +			childSetVisible("boolean_combo", FALSE); +			LLRect r; +			r.setValue(sd); +			spinner1->setVisible(TRUE); +			spinner1->setLabel(LLString("Left")); +			spinner2->setVisible(TRUE); +			spinner2->setLabel(LLString("Right")); +			spinner3->setVisible(TRUE); +			spinner3->setLabel(LLString("Bottom")); +			spinner4->setVisible(TRUE); +			spinner4->setLabel(LLString("Top")); +			if (!spinner1->hasFocus()) +			{ +				spinner1->setPrecision(0); +				spinner1->setValue(r.mLeft); +			} +			if (!spinner2->hasFocus()) +			{ +				spinner2->setPrecision(0); +				spinner2->setValue(r.mRight); +			} +			if (!spinner3->hasFocus()) +			{ +				spinner3->setPrecision(0); +				spinner3->setValue(r.mBottom); +			} +			if (!spinner4->hasFocus()) +			{ +				spinner4->setPrecision(0); +				spinner4->setValue(r.mTop); +			} -bool handleRotateNetMapChanged(const LLSD& newvalue) -{ -	LLNetMap::setRotateMap(newvalue.asBoolean()); -	return true; -} +			spinner1->setMinValue((F32)S32_MIN); +			spinner1->setMaxValue((F32)S32_MAX); +			spinner1->setIncrement(1.f); + +			spinner2->setMinValue((F32)S32_MIN); +			spinner2->setMaxValue((F32)S32_MAX); +			spinner2->setIncrement(1.f); + +			spinner3->setMinValue((F32)S32_MIN); +			spinner3->setMaxValue((F32)S32_MAX); +			spinner3->setIncrement(1.f); + +			spinner4->setMinValue((F32)S32_MIN); +			spinner4->setMaxValue((F32)S32_MAX); +			spinner4->setIncrement(1.f); +			break; +		  } +		  case TYPE_COL4: +		  { +			childSetVisible("boolean_combo", FALSE); +			LLColor4 clr; +			clr.setValue(sd); +			color_swatch->setVisible(TRUE); +			// only set if changed so color picker doesn't update +			if(clr != LLColor4(color_swatch->getValue())) +			{ +				color_swatch->set(LLColor4(sd), TRUE, FALSE); +			} +			spinner4->setVisible(TRUE); +			spinner4->setLabel(LLString("Alpha")); +			if (!spinner4->hasFocus()) +			{ +				spinner4->setPrecision(3); +				spinner4->setMinValue(0.0); +				spinner4->setMaxValue(1.f); +				spinner4->setValue(clr.mV[VALPHA]); +			} +			break; +		  } +		  case TYPE_COL3: +		  { +			childSetVisible("boolean_combo", FALSE); +			LLColor3 clr; +			clr.setValue(sd); +			color_swatch->setVisible(TRUE); +			color_swatch->setValue(sd); +			break; +		  } +		  case TYPE_COL4U: +		  { +			childSetVisible("boolean_combo", FALSE); +			LLColor4U clr; +			clr.setValue(sd); +			color_swatch->setVisible(TRUE); +			if(LLColor4(clr) != LLColor4(color_swatch->getValue())) +			{ +				color_swatch->set(LLColor4(clr), TRUE, FALSE); +			} +			spinner4->setVisible(TRUE); +			spinner4->setLabel(LLString("Alpha")); +			if(!spinner4->hasFocus()) +			{ +				spinner4->setPrecision(0); +				spinner4->setValue(clr.mV[VALPHA]); +			} -bool handleVectorizeChanged(const LLSD& newvalue) -{ -	LLViewerJointMesh::updateVectorize(); -	return true; -} +			spinner4->setMinValue(0); +			spinner4->setMaxValue(255); +			spinner4->setIncrement(1.f); -bool handleVoiceClientPrefsChanged(const LLSD& newvalue) -{ -	if(gVoiceClient) -	{ -		// Note: Ignore the specific event value, look up the ones we want - -		gVoiceClient->setVoiceEnabled(gSavedSettings.getBOOL("EnableVoiceChat")); -		gVoiceClient->setUsePTT(gSavedSettings.getBOOL("PTTCurrentlyEnabled")); -		std::string keyString = gSavedSettings.getString("PushToTalkButton"); -		gVoiceClient->setPTTKey(keyString); -		gVoiceClient->setPTTIsToggle(gSavedSettings.getBOOL("PushToTalkToggle")); -		gVoiceClient->setEarLocation(gSavedSettings.getS32("VoiceEarLocation")); -		std::string serverName = gSavedSettings.getString("VivoxDebugServerName"); -		gVoiceClient->setVivoxDebugServerName(serverName); - -		std::string inputDevice = gSavedSettings.getString("VoiceInputAudioDevice"); -		gVoiceClient->setCaptureDevice(inputDevice); -		std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice"); -		gVoiceClient->setRenderDevice(outputDevice); +			break; +		  } +		  default: +			mComment->setText(LLString("unknown")); +			break; +		}  	} -	return true; -} - -//////////////////////////////////////////////////////////////////////////// -void settings_setup_listeners() -{ -	gSavedSettings.getControl("FirstPersonAvatarVisible")->getSignal()->connect(boost::bind(&handleRenderAvatarMouselookChanged, _1)); -	gSavedSettings.getControl("RenderFarClip")->getSignal()->connect(boost::bind(&handleRenderFarClipChanged, _1)); -	gSavedSettings.getControl("RenderTerrainDetail")->getSignal()->connect(boost::bind(&handleTerrainDetailChanged, _1)); -	gSavedSettings.getControl("RenderAvatarVP")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1)); -	gSavedSettings.getControl("VertexShaderEnable")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1)); -	gSavedSettings.getControl("RenderDynamicReflections")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1)); -	gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _1)); -	gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1)); -	gSavedSettings.getControl("EnableRippleWater")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1)); -	gSavedSettings.getControl("RenderGlowResolutionPow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _1)); -	gSavedSettings.getControl("RenderAvatarCloth")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1)); -	gSavedSettings.getControl("WindLightUseAtmosShaders")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1)); -	gSavedSettings.getControl("RenderGammaFull")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1)); -	gSavedSettings.getControl("RenderVolumeLODFactor")->getSignal()->connect(boost::bind(&handleVolumeLODChanged, _1)); -	gSavedSettings.getControl("RenderAvatarLODFactor")->getSignal()->connect(boost::bind(&handleAvatarLODChanged, _1)); -	gSavedSettings.getControl("RenderTerrainLODFactor")->getSignal()->connect(boost::bind(&handleTerrainLODChanged, _1)); -	gSavedSettings.getControl("RenderTreeLODFactor")->getSignal()->connect(boost::bind(&handleTreeLODChanged, _1)); -	gSavedSettings.getControl("RenderFlexTimeFactor")->getSignal()->connect(boost::bind(&handleFlexLODChanged, _1)); -	gSavedSettings.getControl("ThrottleBandwidthKBPS")->getSignal()->connect(boost::bind(&handleBandwidthChanged, _1)); -	gSavedSettings.getControl("RenderGamma")->getSignal()->connect(boost::bind(&handleGammaChanged, _1)); -	gSavedSettings.getControl("RenderFogRatio")->getSignal()->connect(boost::bind(&handleFogRatioChanged, _1)); -	gSavedSettings.getControl("RenderMaxPartCount")->getSignal()->connect(boost::bind(&handleMaxPartCountChanged, _1)); -	gSavedSettings.getControl("RenderDynamicLOD")->getSignal()->connect(boost::bind(&handleRenderDynamicLODChanged, _1)); -	gSavedSettings.getControl("RenderDebugTextureBind")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1)); -	gSavedSettings.getControl("RenderFastAlpha")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1)); -	gSavedSettings.getControl("RenderObjectBump")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1)); -	gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1)); -	gSavedSettings.getControl("RenderUseFBO")->getSignal()->connect(boost::bind(&handleRenderUseFBOChanged, _1)); -	gSavedSettings.getControl("RenderUseImpostors")->getSignal()->connect(boost::bind(&handleRenderUseImpostorsChanged, _1)); -	gSavedSettings.getControl("RenderUseCleverUI")->getSignal()->connect(boost::bind(&handleRenderUseCleverUIChanged, _1)); -	gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _1)); -	gSavedSettings.getControl("AvatarCompositeLimit")->getSignal()->connect(boost::bind(&handleCompositeLimitChanged, _1)); -	gSavedSettings.getControl("TextureMemory")->getSignal()->connect(boost::bind(&handleVideoMemoryChanged, _1)); -	gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&handleChatFontSizeChanged, _1)); -	gSavedSettings.getControl("ChatPersistTime")->getSignal()->connect(boost::bind(&handleChatPersistTimeChanged, _1)); -	gSavedSettings.getControl("ConsoleMaxLines")->getSignal()->connect(boost::bind(&handleConsoleMaxLinesChanged, _1)); -	gSavedSettings.getControl("UseOcclusion")->getSignal()->connect(boost::bind(&handleUseOcclusionChanged, _1)); -	gSavedSettings.getControl("AudioLevelMaster")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); - 	gSavedSettings.getControl("AudioLevelSFX")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); - 	gSavedSettings.getControl("AudioLevelUI")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); -	gSavedSettings.getControl("AudioLevelAmbient")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); -	gSavedSettings.getControl("AudioLevelMusic")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); -	gSavedSettings.getControl("AudioLevelMedia")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); -	gSavedSettings.getControl("AudioLevelVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); -	gSavedSettings.getControl("AudioLevelDistance")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); -	gSavedSettings.getControl("AudioLevelDoppler")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); -	gSavedSettings.getControl("AudioLevelRolloff")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); -	gSavedSettings.getControl("AudioStreamingMusic")->getSignal()->connect(boost::bind(&handleAudioStreamMusicChanged, _1)); -	gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); -	gSavedSettings.getControl("MuteMusic")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); -	gSavedSettings.getControl("MuteMedia")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); -	gSavedSettings.getControl("MuteVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); -	gSavedSettings.getControl("MuteAmbient")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); -	gSavedSettings.getControl("MuteUI")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); -	gSavedSettings.getControl("RenderVBOEnable")->getSignal()->connect(boost::bind(&handleRenderUseVBOChanged, _1)); -	gSavedSettings.getControl("WLSkyDetail")->getSignal()->connect(boost::bind(&handleWLSkyDetailChanged, _1)); -	gSavedSettings.getControl("RenderLightingDetail")->getSignal()->connect(boost::bind(&handleRenderLightingDetailChanged, _1)); -	gSavedSettings.getControl("NumpadControl")->getSignal()->connect(boost::bind(&handleNumpadControlChanged, _1)); -	gSavedSettings.getControl("FlycamAxis0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1)); -	gSavedSettings.getControl("FlycamAxis1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1)); -	gSavedSettings.getControl("FlycamAxis2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1)); -	gSavedSettings.getControl("FlycamAxis3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1)); -	gSavedSettings.getControl("FlycamAxis4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1)); -	gSavedSettings.getControl("FlycamAxis5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1)); -	gSavedSettings.getControl("FlycamAxis6")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1)); -    gSavedSettings.getControl("DebugViews")->getSignal()->connect(boost::bind(&handleDebugViewsChanged, _1)); -    gSavedSettings.getControl("UserLogFile")->getSignal()->connect(boost::bind(&handleLogFileChanged, _1)); -	gSavedSettings.getControl("RenderHideGroupTitle")->getSignal()->connect(boost::bind(handleHideGroupTitleChanged, _1)); -	gSavedSettings.getControl("EffectColor")->getSignal()->connect(boost::bind(handleEffectColorChanged, _1)); -	gSavedSettings.getControl("MiniMapRotate")->getSignal()->connect(boost::bind(handleRotateNetMapChanged, _1)); -	gSavedSettings.getControl("VectorizePerfTest")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1)); -	gSavedSettings.getControl("VectorizeEnable")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1)); -	gSavedSettings.getControl("VectorizeProcessor")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1)); -	gSavedSettings.getControl("VectorizeSkin")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1)); -	gSavedSettings.getControl("EnableVoiceChat")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); -	gSavedSettings.getControl("PTTCurrentlyEnabled")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); -	gSavedSettings.getControl("PushToTalkButton")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); -	gSavedSettings.getControl("PushToTalkToggle")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); -	gSavedSettings.getControl("VoiceEarLocation")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); -	gSavedSettings.getControl("VivoxDebugServerName")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); -	gSavedSettings.getControl("VoiceInputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); -	gSavedSettings.getControl("VoiceOutputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));  } - diff --git a/indra/newview/llviewercontrol.h b/indra/newview/llviewercontrol.h index 2727e36b53..c2a9dc9096 100644 --- a/indra/newview/llviewercontrol.h +++ b/indra/newview/llviewercontrol.h @@ -32,8 +32,9 @@  #ifndef LL_LLVIEWERCONTROL_H  #define LL_LLVIEWERCONTROL_H -#include <map>  #include "llcontrol.h" +#include "llfloater.h" +#include "lltexteditor.h"  // Enabled this definition to compile a 'hacked' viewer that  // allows a hacked godmode to be toggled on and off. @@ -42,12 +43,33 @@  extern BOOL gHackGodmode;  #endif +class LLFloaterSettingsDebug : public LLFloater +{ +public: +	LLFloaterSettingsDebug(); +	virtual ~LLFloaterSettingsDebug(); + +	virtual BOOL postBuild(); +	virtual void draw(); + +	void updateControl(LLControlBase* control); + +	static void show(void*); +	static void onSettingSelect(LLUICtrl* ctrl, void* user_data); +	static void onCommitSettings(LLUICtrl* ctrl, void* user_data); +	static void onClickDefault(void* user_data); + +protected: +	static LLFloaterSettingsDebug* sInstance; +	LLTextEditor* mComment; +}; +  // These functions found in llcontroldef.cpp *TODO: clean this up!  //setting variables are declared in this function +void declare_settings(); +void fixup_settings();  void settings_setup_listeners(); -extern std::map<LLString, LLControlGroup*> gSettings; -  // for the graphics settings  void create_graphics_group(LLControlGroup& group); @@ -68,4 +90,7 @@ extern LLControlGroup gCrashSettings;  extern LLString gLastRunVersion;  extern LLString gCurrentVersion; +extern LLString gSettingsFileName; +extern LLString gPerAccountSettingsFileName; +  #endif // LL_LLVIEWERCONTROL_H diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp index fe00c25c63..2677b33af8 100644 --- a/indra/newview/llviewerjointmesh.cpp +++ b/indra/newview/llviewerjointmesh.cpp @@ -866,53 +866,13 @@ static F64 sUpdateGeometryRunAvgOn[10];  static U32 sUpdateGeometryRunCount			= 0 ;  static U32 sUpdateGeometryCalls				= 0 ;  static U32 sUpdateGeometryLastProcessor		= 0 ; -static BOOL sVectorizePerfTest 				= FALSE; -static U32 sVectorizeProcessor 				= 0; - -//static  void (*LLViewerJointMesh::sUpdateGeometryFunc)(LLFace* face, LLPolyMesh* mesh); -//static -void LLViewerJointMesh::updateVectorize() -{ -	sVectorizePerfTest = gSavedSettings.getBOOL("VectorizePerfTest"); -	sVectorizeProcessor = gSavedSettings.getU32("VectorizeProcessor"); -	BOOL vectorizeEnable = gSavedSettings.getBOOL("VectorizeEnable"); -	BOOL vectorizeSkin = gSavedSettings.getBOOL("VectorizeSkin"); - -	std::string vp; -	switch(sVectorizeProcessor) -	{ -		case 2: vp = "SSE2"; break;					// *TODO: replace the magic #s -		case 1: vp = "SSE"; break; -		default: vp = "COMPILER DEFAULT"; break; -	} -	llinfos << "Vectorization         : " << ( vectorizeEnable ? "ENABLED" : "DISABLED" ) << llendl ; -	llinfos << "Vector Processor      : " << vp << llendl ; -	llinfos << "Vectorized Skinning   : " << ( vectorizeSkin ? "ENABLED" : "DISABLED" ) << llendl ; -	if(vectorizeEnable && vectorizeSkin) -	{ -		switch(sVectorizeProcessor) -		{ -			case 2: -				sUpdateGeometryFunc = &updateGeometrySSE2; -				break; -			case 1: -				sUpdateGeometryFunc = &updateGeometrySSE; -				break; -			default: -				sUpdateGeometryFunc = &updateGeometryVectorized; -				break; -		} -	} -	else -	{ -		sUpdateGeometryFunc = &updateGeometryOriginal; -	} -} -  void LLViewerJointMesh::updateGeometry()  { +	extern BOOL gVectorizePerfTest; +	extern U32	gVectorizeProcessor; +  	if (!(mValid  		  && mMesh  		  && mFace @@ -923,7 +883,7 @@ void LLViewerJointMesh::updateGeometry()  		return;  	} -	if (!sVectorizePerfTest) +	if (!gVectorizePerfTest)  	{  		// Once we've measured performance, just run the specified  		// code version. @@ -956,13 +916,13 @@ void LLViewerJointMesh::updateGeometry()  		{  			F64 time_since_app_start = ug_timer.getElapsedSeconds();  			if(sUpdateGeometryGlobalTime == 0.0  -				|| sUpdateGeometryLastProcessor != sVectorizeProcessor) +				|| sUpdateGeometryLastProcessor != gVectorizeProcessor)  			{  				sUpdateGeometryGlobalTime		= time_since_app_start;  				sUpdateGeometryElapsedTime		= 0;  				sUpdateGeometryCalls			= 0;  				sUpdateGeometryRunCount			= 0; -				sUpdateGeometryLastProcessor	= sVectorizeProcessor; +				sUpdateGeometryLastProcessor	= gVectorizeProcessor;  				sUpdateGeometryCallPointer		= false;  				return;  			} @@ -1009,7 +969,7 @@ void LLViewerJointMesh::updateGeometry()  				F64 perf_boost = ( sUpdateGeometryElapsedTimeOff - sUpdateGeometryElapsedTimeOn ) / sUpdateGeometryElapsedTimeOn;  				llinfos << "run averages (" << (F64)sUpdateGeometryRunCount  					<< "/10) vectorize off " << a -					<< "% : vectorize type " << sVectorizeProcessor +					<< "% : vectorize type " << gVectorizeProcessor  					<< " " << b  					<< "% : performance boost "   					<< perf_boost * 100.0 @@ -1023,6 +983,7 @@ void LLViewerJointMesh::updateGeometry()  					// We have data now on which version is faster.  Switch to that  					// code and save the data for next run. +					gVectorizePerfTest = FALSE;  					gSavedSettings.setBOOL("VectorizePerfTest", FALSE);  					if (perf_boost > 0.0) diff --git a/indra/newview/llviewerjointmesh.h b/indra/newview/llviewerjointmesh.h index 4cef1552ca..8e1ee514ff 100644 --- a/indra/newview/llviewerjointmesh.h +++ b/indra/newview/llviewerjointmesh.h @@ -149,9 +149,6 @@ public:  	/*virtual*/ BOOL isAnimatable() { return FALSE; } -	static void updateVectorize(); // Update globals when settings variables change -	 -private:  	// Avatar vertex skinning is a significant performance issue on computers  	// with avatar vertex programs turned off (for example, most Macs).  We  	// therefore have custom versions that use SIMD instructions. diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 9af072ad6f..f86d822d90 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -44,6 +44,9 @@  #include "llmediamanager.h"  #include "lluuid.h" +// don't want to include llappviewer.h +extern std::string gChannelName; +  // Implementation functions not exported into header file  class LLViewerMediaImpl  	:	public LLMediaObserver @@ -454,7 +457,7 @@ void LLViewerMedia::initClass()  	// append our magic version number string to the browser user agent id  	std::ostringstream codec;  	codec << "[Second Life "; -	codec << "(" << gSavedSettings.getString("VersionChannelName") << ")"; +	codec << "(" << gChannelName << ")";  	codec << " - " << LL_VERSION_MAJOR << "." << LL_VERSION_MINOR << "." << LL_VERSION_PATCH << "." << LL_VERSION_BUILD;  	codec << "]";  	init_data->setBrowserUserAgentId( codec.str() ); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index a2b9cde5d1..a384d24947 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -120,7 +120,6 @@  #include "llfloaterregioninfo.h"  #include "llfloaterreporter.h"  #include "llfloaterscriptdebug.h" -#include "llfloatersettingsdebug.h"  #include "llfloaterenvsettings.h"  #include "llfloaterstats.h"  #include "llfloatertest.h" @@ -377,11 +376,6 @@ void toggle_cull_small(void *);  void toggle_show_xui_names(void *);  BOOL check_show_xui_names(void *); -void run_vectorize_perf_test(void *) -{ -	gSavedSettings.setBOOL("VectorizePerfTest", TRUE); -} -  // Debug UI  void handle_web_search_demo(void*);  void handle_slurl_test(void*); @@ -1097,7 +1091,7 @@ void init_client_menu(LLMenuGL* menu)  										&menu_check_control,  										(void*)"ShowConsoleWindow")); -	if(gSavedSettings.getBOOL("QAMode")) +	if(gQAMode)  	{  		LLMenuGL* sub = NULL;  		sub = new LLMenuGL("Debugging"); @@ -1177,6 +1171,7 @@ extern BOOL gDebugClicks;  extern BOOL gDebugWindowProc;  extern BOOL gDebugTextEditorTips;  extern BOOL gDebugSelectMgr; +extern BOOL gVectorizePerfTest;  void init_debug_ui_menu(LLMenuGL* menu)  { @@ -1388,7 +1383,7 @@ void init_debug_rendering_menu(LLMenuGL* menu)  										   (void*)"ShowDepthBuffer"));  	sub_menu->append(new LLMenuItemToggleGL("Show Select Buffer", &gDebugSelect)); -	sub_menu->append(new LLMenuItemCallGL("Vectorize Perf Test", &run_vectorize_perf_test)); +	sub_menu->append(new LLMenuItemToggleGL("Vectorize Perf Test", &gVectorizePerfTest));  	sub_menu = new LLMenuGL("Render Tests"); @@ -4853,7 +4848,7 @@ BOOL menu_check_build_tool( void* user_data )  void handle_reload_settings(void*)  {  	gSavedSettings.resetToDefaults(); -	gSavedSettings.loadFromFile(gSavedSettings.getString("ClientSettingsFile"), TRUE); +	gSavedSettings.loadFromFile(gSettingsFileName, TRUE);  	llinfos << "Loading colors from colors.xml" << llendl;  	std::string color_file = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"colors.xml"); diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp index b0ebc64b7a..6fb2957023 100644 --- a/indra/newview/llviewernetwork.cpp +++ b/indra/newview/llviewernetwork.cpp @@ -114,5 +114,10 @@ LLGridData gGridInfo[GRID_INFO_COUNT] =  // Use this to figure out which domain name and login URI to use.  EGridInfo gGridChoice = GRID_INFO_NONE; -LLString gGridName;		/* Flawfinder: ignore */ +char gGridName[MAX_STRING];		/* Flawfinder: ignore */ + +F32 gPacketDropPercentage = 0.f; +F32 gInBandwidth = 0.f; +F32 gOutBandwidth = 0.f; +  unsigned char gMACAddress[MAC_ADDRESS_BYTES];		/* Flawfinder: ignore */ diff --git a/indra/newview/llviewernetwork.h b/indra/newview/llviewernetwork.h index 4e6c874921..4de73aae7a 100644 --- a/indra/newview/llviewernetwork.h +++ b/indra/newview/llviewernetwork.h @@ -55,7 +55,7 @@ enum EGridInfo  	GRID_INFO_VAAK,  	GRID_INFO_YAMI,  	GRID_INFO_LOCAL, -	GRID_INFO_OTHER, // IP address set via command line option +	GRID_INFO_OTHER, // IP address set via -user or other command line option  	GRID_INFO_COUNT  }; @@ -68,9 +68,12 @@ struct LLGridData  	const char* mHelperURI;  }; +extern F32 gPacketDropPercentage; +extern F32 gInBandwidth; +extern F32 gOutBandwidth;  extern EGridInfo gGridChoice;  extern LLGridData gGridInfo[]; -extern LLString gGridName;		/* Flawfinder: ignore */ +extern char gGridName[MAX_STRING];		/* Flawfinder: ignore */  const S32 MAC_ADDRESS_BYTES = 6;  extern unsigned char gMACAddress[MAC_ADDRESS_BYTES];		/* Flawfinder: ignore */ diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index e2ea6e6ecf..69e08db2bf 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -678,6 +678,31 @@ void LLVivoxProtocolParser::processResponse(std::string tag)  /////////////////////////////////////////////////////////////////////////////////////////////// +class LLVoiceClientPrefsListener: public LLSimpleListener +{ +	bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) +	{ +		// Note: Ignore the specific event value, look up the ones we want + +		gVoiceClient->setVoiceEnabled(gSavedSettings.getBOOL("EnableVoiceChat")); +		gVoiceClient->setUsePTT(gSavedSettings.getBOOL("PTTCurrentlyEnabled")); +		std::string keyString = gSavedSettings.getString("PushToTalkButton"); +		gVoiceClient->setPTTKey(keyString); +		gVoiceClient->setPTTIsToggle(gSavedSettings.getBOOL("PushToTalkToggle")); +		gVoiceClient->setEarLocation(gSavedSettings.getS32("VoiceEarLocation")); +		std::string serverName = gSavedSettings.getString("VivoxDebugServerName"); +		gVoiceClient->setVivoxDebugServerName(serverName); + +		std::string inputDevice = gSavedSettings.getString("VoiceInputAudioDevice"); +		gVoiceClient->setCaptureDevice(inputDevice); +		std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice"); +		gVoiceClient->setRenderDevice(outputDevice); + +		return true; +	} +}; +static LLVoiceClientPrefsListener voice_prefs_listener; +  class LLVoiceClientMuteListObserver : public LLMuteListObserver  {  	/* virtual */ void onChange()  { gVoiceClient->muteListChanged();} @@ -834,6 +859,16 @@ LLVoiceClient::LLVoiceClient()  	std::string renderDevice = gSavedSettings.getString("VoiceOutputAudioDevice");  	setRenderDevice(renderDevice); +	// Set up our listener to get updates on all prefs values we care about. +	gSavedSettings.getControl("EnableVoiceChat")->addListener(&voice_prefs_listener); +	gSavedSettings.getControl("PTTCurrentlyEnabled")->addListener(&voice_prefs_listener); +	gSavedSettings.getControl("PushToTalkButton")->addListener(&voice_prefs_listener); +	gSavedSettings.getControl("PushToTalkToggle")->addListener(&voice_prefs_listener); +	gSavedSettings.getControl("VoiceEarLocation")->addListener(&voice_prefs_listener); +	gSavedSettings.getControl("VivoxDebugServerName")->addListener(&voice_prefs_listener); +	gSavedSettings.getControl("VoiceInputAudioDevice")->addListener(&voice_prefs_listener); +	gSavedSettings.getControl("VoiceOutputAudioDevice")->addListener(&voice_prefs_listener); +  	mTuningMode = false;  	mTuningEnergy = 0.0f;  	mTuningMicVolume = 0; @@ -1246,7 +1281,7 @@ void LLVoiceClient::stateMachine()  		break;  		case stateStart: -			if(gSavedSettings.getBOOL("CmdLineDisableVoice")) +			if(gDisableVoice)  			{  				// Voice is locked out, we must not launch the vivox daemon.  				setState(stateJail); @@ -3609,7 +3644,7 @@ void LLVoiceClient::setVoiceEnabled(bool enabled)  bool LLVoiceClient::voiceEnabled()  { -	return gSavedSettings.getBOOL("EnableVoiceChat") && !gSavedSettings.getBOOL("CmdLineDisableVoice"); +	return gSavedSettings.getBOOL("EnableVoiceChat") && !gDisableVoice;  }  void LLVoiceClient::setUsePTT(bool usePTT) diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp index fc4ede5bab..9dc92efa81 100644 --- a/indra/newview/llxmlrpctransaction.cpp +++ b/indra/newview/llxmlrpctransaction.cpp @@ -238,9 +238,8 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip)  //	mCurlRequest->setopt(CURLOPT_VERBOSE, 1); // usefull for debugging  	mCurlRequest->setopt(CURLOPT_NOSIGNAL, 1);  	mCurlRequest->setWriteCallback(&curlDownloadCallback, (void*)this); -    	BOOL vefifySSLCert = !gSavedSettings.getBOOL("NoVerifySSLCert"); -	mCurlRequest->setopt(CURLOPT_SSL_VERIFYPEER, vefifySSLCert); -	mCurlRequest->setopt(CURLOPT_SSL_VERIFYHOST, vefifySSLCert ? 2 : 0); +	mCurlRequest->setopt(CURLOPT_SSL_VERIFYPEER, gVerifySSLCert); +	mCurlRequest->setopt(CURLOPT_SSL_VERIFYHOST, gVerifySSLCert? 2 : 0);  	// Be a little impatient about establishing connections.  	mCurlRequest->setopt(CURLOPT_CONNECTTIMEOUT, 40L); diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index e87fe8d8ff..b19e4e2c9c 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -115,15 +115,15 @@ class ViewerManifest(LLManifest):                  if not self.default_grid():                          if self.default_channel():                                  # beta grid viewer -                                channel_flags = '--settings settings_beta.xml' -                        grid_flags = "--helperuri http://preview-%(grid)s.secondlife.com/helpers/ --loginuri https://login.%(grid)s.lindenlab.com/cgi-bin/login.cgi" % {'grid':self.args['grid']} +                                channel_flags = '-settings settings_beta.xml' +                        grid_flags = "-helperuri http://preview-%(grid)s.secondlife.com/helpers/ -loginuri https://login.%(grid)s.lindenlab.com/cgi-bin/login.cgi" % {'grid':self.args['grid']}                  if not self.default_channel():                          # some channel on some grid -                        channel_flags = '--settings settings_%s.xml --channel "%s"' % (self.channel_lowerword(), self.channel()) +                        channel_flags = '-settings settings_%s.xml -channel "%s"' % (self.channel_lowerword(), self.channel())                  elif self.login_channel():                          # Report a special channel during login, but use default channel elsewhere -                        channel_flags = '--channel "%s"' % (self.login_channel()) +                        channel_flags = '-channel "%s"' % (self.login_channel())                  return " ".join((channel_flags, grid_flags)).strip()  | 
