ETJump 3.5.0

- added 'target_random' entity for generating per-client random numbers
  - takes two keys, 'chance' & 'total' and generates a random number in the range of '1 - total', if the generated number is less or equal to 'chance', fires targets
  - 'spawnflag 1' to change the behavior such that the generated random number must match 'chance'
- increased the number of unique remappable shaders from '32' to '511'
- added 'etj_onDemoPlaybackEnd' cvar to execute a command when demo playback ends
  - this combined with 'etj_onDemoPlaybackStart' allows for example creating a separate set of keybinds/scripts that are automatically loaded/unloaded on demo playback start/end
- vote UI now separates votes given out by spectators, to help out ambiguity on why a passes/fails when spectators can vote
- fixed rank 1 times displaying a '+00:00.000' diff if a player had no record on a run
- fixed replay menu displaying demo names incorrectly if the last character of the filename was '^^*'
- demo compatibility settings are no longer automatically printed when playback starts
  - active compatibility settings can be printed with 'printDemoCompatInfo' command
- improved smoothness of in-game mouse cursor - the cursor now operates on real screen pixels rather than virtual grid pixels
  - this greatly increases the accuracy of the cursor, especially on small movements, as your movement "resolution" is now higher
  - as a side effect, the overall mouse sensitivity in menus is now lower, as the mouse movement deltas per frame are no longer scaled to virtual grid
- mouse cursor is now always warped to center of the screen when UI is brought up, instead of remembering it's position
  - chat UI is an exception to this, which positions the mouse to the top left
- added 2 new mouse cursors, can be enabled with 'etj_altCursor' cvar
  - the mouse cursor can now also be resized with 'etj_cursorSize' cvar (valid range '8 - 128')
- added 'etj_CGaz1DrawMidline' to draw the middle point between min/max angles on CGaz 1
  - this is not a meaningful angle when it comes to physics calculations, it's purely a helper line to indicate you're approaching minline soon
  - color can be adjusted with 'etj_CGaz1MidlineColor' (default '1.0 0.5 0.0 0.75')
- added 'etj_runtimerSize' cvar to adjust size of timerun timer
  - valid range is '0.0 - 10.0'
- fixed certain votes not showing the keybinds for 'vote yes/no' in the vote text
- massively sped up the computation for timerun rankings
- added 'listcheckpoints' and 'comparecheckpoints' commands
  - 'listcheckpoints --season <season name> --map <map name> --run <run name> --rank <rank>'
    - lists checkpoint times for a given run
  - 'comparecheckpoints --season <season name> --map <map name> --run <run name> --rank-1 <rank> --rank-2 <rank>'
    - compares checkpoint times between two runs
  - also accessible via admin commands '!list/comparecheckpoints'
- added 'func_static_client' entity
  - works like 'func_static', except it's on/off state is unique for each client
  - any portalgun portals fired on this entity will be deleted when it's turned off
  - keys:
    - 'model2' - optional 'md3/mdc' model to draw
    - 'offModel' - optional model to draw when the brush is turned off (the brush is invisible otherwise)
    - 'offShader' - optional shader to use when the brush is turned off (invisible otherwise)
    - 'scriptname' - optionally call script block when activated, calls 'activate (allies/axis)' action
    - 'target' - targets to fire when activated
    - 'offShader' and 'offModel' are mutually exclusive - 'offModel' only works if 'model2' is set, and 'offShader' does nothing in such cases
  - spawnflags:
    - '1' - starts off for all clients
    - '2' - gibs the activator if they are inside the brush when it's turned on
    - '4' - syncs the state of this entity for all fireteam members to fireteam leader's state when teamjump mode is enabled
- fixed a potential crash on older versions of ETe when issuing RCON commands in localhost
- added custom command menu - a vsay-style menu where users can define up to 40 custom commands to easily execute
  - commands are stored in 'custom_commands.dat' by default, and are configured in TOML, a simple markup language
  - commands & cvars:
    - 'openCustomCommandMenu [page]' - toggles the menu, optionally opens to given page
    - 'addCustomCommand <name> <command> [page] [slot]' - adds a new custom command, optionally to specific page/slot
    - 'editCustomCommand <page> <slot> [name] [command]' - edits a custom command at given page/slot
    - 'moveCustomCommand <from-page> <from-slot> <to-page> <to-slot>' - moves a command from one page/slot to another, swapping with an existing command if present
    - 'deleteCustomCommand <page> <slot>' - deletes a custom command from given page/slot
    - 'listCustomCommands [page]' - lists all saved custom commands, optionally only from a given page
    - 'generateCustomCommandsFile' - generates an example 'custom_commands.dat' file
    - 'readCustomCommands' - reloads the custom command file, useful after external editing
    - 'etj_ccMenu_filename' - file to save custom commands in (without file extenstion), default 'custom_commands'
      - this must be a '.dat' file to work around pure server limitations
    - 'etj_ccMenu_rememberPage' - toggles whether the menu opens to last opened page or resets to page 1, default '0'
    - 'etj_ccMenu_autoClose' - toggles whether the menu automatically closes after executing a command, default '1'
- 'ignore' no longer works on yourself
- tweaked coloring of some prints, most prints should now be in white text
- fixed jump speeds text size being initialized from wrong cvar value
- fixed a potential crash when loading a map after demo playback
- fixed 'etj_smoothAngles' sometimes getting applied during demo playback, breaking view angles
- added 'printMapCustomizationInfo' console command to print custom mapscript and entity file hashes used on the server
  - works during demo playback starting from ETJump 3.5.0, to see the hashes of the files that were loaded at the time the demo was recorded
- fixed missing colon character in 'etj_viewPlayerPortals' menu entry
- fixed season states, timerun records and daily logs using server local time for timestamps - these are now using UTC time for consistency
- added high resolution, anti-aliased drawing to CGaz2
  - 'etj_CGaz2HighRes' can be used to toggle between old and new drawing style (default '1')
  - 'etj_CGaz2Thickness' can be used to change the line thickness when high-res drawing is enabled (default '2', valid range '0.5 - 5.0')