This is a modified "UoDemo.exe" with the following patches applied:
  - using "UoDemo+.dat" instead of "UoDemo.dat".
  - reading directly from "..\.rundir" if file is not found in the .DAT file
  - added an environment variable DATFILE which allows you to specify which .DAT to use (default is UoDemo+.dat)
  - added an environment variable RUNDIR that allows you to override the ".rundir" subdirectory
  - replaced the version string with UoDemo+ and updated the publish identifier
  - re-organized FUNC_4283E4_ExtractScriptBytes to allow for easier debugging (and optional code insertion)
  - added an environment variable LOGFILE to log packets between "client" and "server" in Razor log format      
  - turned a "disabled" log function into a real log function using OutputDebugString (use DbgView or alike)
  - ensured a correct commit when writing to the packet log file
  - a bug in the packet log function (multi-threading problem) was fixed
  - set the environment variable SAVEDYNAMIC0 to YES to enable saving of this file (use with caution!)
  - renamed the class+window name to "Ultima Online Demo" (was Ultima Oline)
  - renamed the file mapping to "UoDemo+App" (was UoClientApp)
  - turned the uodemo into a real server, the port number in "server.txt" is used
    (use an old uo client to connect and apply a "standalone server" patch to connect without encryption)
    (WARNING: the uodemo will exit if it can't bind/listen to the defined port!)
    (to disable the bind/listen functionality please edit "server.txt" and set the port to 0)
  - added a Sleep patch to make the uodemo consume less power on modern PC's
  - REMOVED: set the environment variable REALDAMAGE to YES to disable the 'Divide Damage by Two' which OSI added to the demo
  - added an environment LOCALCOUNSELOR which will make the player running the server a counselor
      Valid String Values are: Seer, Counselor, Senior Counselor
      Valid Numerical Values are: 1, 2, 3
      Any other value will result in a non-existing, non-compliant counselor status/level
  - fixed the way the server locates the Ultima Online registry key
  - added an environment REGKEYNAME that allows you to override the Ultima Online registry key
    (HKLM\SOFTWARE\Origin Worlds Online\Ultima Online\%REGKEYNAME%)
    (defaults to 1.0 if not set)
  - added an option to ignore the DYNIDX0 file, set IGNOREDYNDIX0 to YES to enable this option
    (this allows direct editing of the DYNAMIC0 file)
    (if SAVEDYNAMIC0 is used, the DYNIDX0 file will be saved always, regardless this option that is!)
  - added support for newlines in the DYNAMIC0 file if DYNIDX0 is being ignored
  - added an environment variable MANUALLOGON to control the client-side logon process
    (set to YES to disable the automatic logon, allowing you to create a new character)  
  - added an environment variable USEACCOUNTNAME to override the account number if set to YES
    (this happens at account logon and works for both the local running demo and other connecting clients)
    (empty strings result in default behaviour (account number = IP address) and non-empty password results in logon error)
  - character creation is now using the same account number as account logon
    (the IP address of the client or the one typed if USEACCOUNTNAME was set to YES)
  - you can now override a script name so another script can be loaded instead
    (example: "SET player.m=hacker.m" will make the demo load "hacker.m.q" instead, the internal script name remains "player" though!)
  - fixed a bug introduced with the LOCALCOUNSELOR addition that crashed the server when another client tried to log on
  - added a environment variable UODEMODLL allowing you to load an extra DLL into the demo's address space
 

Greetings.