-
Notifications
You must be signed in to change notification settings - Fork 437
Adding DOSBox as core for DOS TASing #4217
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 215 commits
Commits
Show all changes
222 commits
Select commit
Hold shift + click to select a range
29dff3c
Adding dosbox
08f48c7
Adding placeholder
SergioMartin86 291ded4
Adding initial placeholder for DOSBox
20b320f
update
SergioMartin86 a010b13
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
SergioMartin86 37e6fbd
Update
SergioMartin86 526fdeb
Update
SergioMartin86 5ed0937
progress
SergioMartin86 141ee39
Progress
SergioMartin86 7b4ac53
Merge branch 'master' into dosbox
SergioMartin86 d7301e4
Increasing mem capacity
572b420
Progress
SergioMartin86 c160b74
Now running timer correctly
SergioMartin86 5489374
Progress
SergioMartin86 ef15559
Stable
6c7eca4
Parsin inputs
SergioMartin86 3c15351
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
SergioMartin86 e5ee631
Keyboard working
SergioMartin86 8cf111d
stable before using memfiles
SergioMartin86 148390a
Now accepting rw hdds
SergioMartin86 73184cb
Hard disk rw working
a311140
merging with latest
bbec1d2
Fixing conflict
e177ec9
Getting samples
SergioMartin86 d59527e
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
SergioMartin86 26ca007
Reading samples but sounds too low
SergioMartin86 9030ae3
Reading samples but sounds too low
SergioMartin86 686aa47
Now accepting multiple cdrom/floppy images
fce80c6
Allowing swapping
e0a6b58
Enabling cdrom and disk swapping
SergioMartin86 75f6730
Updating
37e8fa4
Simplifying
93b249b
Simplifying
736064d
Simplifications
4ef0b11
Simplfiications
SergioMartin86 20d72f1
Capturing sdl delay
SergioMartin86 159e9fd
Adding configuration presets
363e902
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
f320439
Enabling joystick
SergioMartin86 5c13c91
Enabling joysticks
bfa12ba
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
54024de
Added mouse support
SergioMartin86 4996a0d
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
SergioMartin86 ff3b929
Adding mouse support
270f3e7
Progress with hard disk
SergioMartin86 182d1db
merging changes
SergioMartin86 55a46e6
Adding default hard disk images and making them selectable
b77c7be
Adding mnemonics, more configs, and some refactoring on the standard …
d629626
Processing file extensions
fe1e520
Adding sram
SergioMartin86 2307bc2
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
3952c93
Adding saveram
cca7ae3
Adding drive lights
SergioMartin86 c549add
Adding drive lights
887d7d5
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
75c231f
Adding memory domains
SergioMartin86 cb4f8d0
Removing warnings
8515d30
Fixing warning
7f14c7c
Revert unrelated changes to Multi-Disk Bundler
YoshiRulz 3e62253
Re-alphabetise lists and clean up diff
YoshiRulz 9a89fe3
Missed a bit
YoshiRulz 2bf20f1
Make `DOSBox`' `ISaveRam` implementations `override`
YoshiRulz b7874ca
Fix `DOSBox`' `[PortedCore]`
YoshiRulz 37198b4
Clean up string comparisons in `DOSBox` ctor
YoshiRulz 94e63c4
Set values for `WriteableHardDiskOptions` instead of translating
YoshiRulz 18335d5
Clean up reading of DOSBox config presets from embedded resources
YoshiRulz 05540e9
Fix code style warning
YoshiRulz 5841416
Removing duped line
338a1e6
Fixing extension parsing
363c8b2
Small adjustments
c42ce50
Aligning fps to that of normal DOS
SergioMartin86 ff8689f
merging with c# changes
SergioMartin86 964a118
Aligning fps to that of normal DOS
3655185
Simplified extension getting and adding base config file resource
7be1d54
Remove unused import
YoshiRulz faf8932
Properly measuring extended mem size
SergioMartin86 f4a3a8e
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
SergioMartin86 c226049
Adding more settings and simplifying machine presets
3e28bf1
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
6d1a6a2
Adding check for SRAM size to prevent wrong-sized HD being loaded
93b7dc9
Removing unnecessary directive
0d11d21
Update correct DOS framerate
738d588
Adding sensible configuration presets
5a173ce
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
c69820e
Adding to the config preset description text
94caf33
Update src/BizHawk.Emulation.Common/Base Implementations/Bk2MnemonicL…
f8c505f
Merge branch 'master' into dosbox
a09a9d4
Removing stale config files
5be138c
Fixed mouse emulation
SergioMartin86 4202fa8
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
SergioMartin86 1312913
Fixed mouse emulation
eeb848b
Removing unused keyboard flag
SergioMartin86 c9fda85
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
d254538
Addressing feos' comment about virtual height/width
a4fc304
Fixed bug with saveram
b5e3e70
fix VirtualWidth
vadosnaprimer 5b1c4c1
DependentUpon
vadosnaprimer de62678
Making FPS configurable
SergioMartin86 7bc5f29
Making FPS configurable
6404f20
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
7d8e10e
Adding fps num/denom
SergioMartin86 3a97201
Implementing proper fps numerator / denominator defaults for DOS
9c8f6a9
Passing mouse deltas from bk
SergioMartin86 20f9c33
Passing mouse deltas from bk to the core
37c5aa6
expose and use deltas directly
vadosnaprimer d73e8c3
Implementing support for .cue+.bin and other cdrom types
ebc7ed7
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
92956d9
Fixing sensitivity
SergioMartin86 cdbab95
Fixing conflict
SergioMartin86 3553861
Adjusting mouse sensitivity
b822e2b
Fixing integration for windows
69d6cdc
updating with upstream
79a8e81
[WIP] loading cds from bk
SergioMartin86 7c7c12a
[WIP] loading cds from bk
47f63b7
Using .cdrom extension for cdroms, and passing disk name to the read …
SergioMartin86 5756436
Using .cdrom extension for cdroms, and passing disk name to the read …
b4de985
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
cddad21
Cleanup and fixing .iso loading and swapping
SergioMartin86 ac5057d
Fixing .iso loading and cdrom swapping
94e557a
Adding default controllers
6235b76
Fix warning
b33ebf3
Added callback for video updates to prevent tearing
SergioMartin86 399855a
merge with latest changes
SergioMartin86 a56e127
Removing unnecessary message
716e3d6
Merge branch 'master' into dosbox
YoshiRulz 3ec532f
Fix line endings in `Bk2MnemonicLookup.cs`
YoshiRulz d59ee09
Fix indentation
YoshiRulz ca370bc
Fix misc. whitespace crimes
YoshiRulz c3133b1
Drop redundant `<None Remove/>`
YoshiRulz 6e806aa
More whitespace fixes
YoshiRulz 948b856
More code style fixes
YoshiRulz 1b07dc0
Small fixes
355dce2
Fixing misc comments
72ba79b
Adjusting naming
SergioMartin86 985cc02
Fixing values
SergioMartin86 eae719a
Removing dead code
4ecb8f9
Clarifying the source of DOS framerate chosen
02e5f00
Removing unused variable
82a3bd5
Removing duped assignments
19d9ef7
Fixing typo
SergioMartin86 d229a7a
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
SergioMartin86 7d140f5
Removing no-longer required SRAM management
SergioMartin86 a9387ee
Removing no longer required sram management functions
SergioMartin86 488ec5d
Removing no-longer needed SRAM logic
a4a19aa
Fixing framerates as per feos's comment
f5b2d63
Passing init struct for a more tidy initialization. Also fixing ident…
SergioMartin86 54c8180
Fixing hard landing on failure to load SRAM. This is needed to preven…
a25b23b
Added missing submodule and artifact
SergioMartin86 bb9e0f7
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
SergioMartin86 bb1491d
Reverting unnecessary change
3e9c5a6
Removing no longer needd dosbox-iso extensions
af205a8
Removing no-longer necessary virtuals
adbb218
fix
e8a976c
Adding lines into readme
SergioMartin86 5319a73
fixing indentation
be374cb
Reducing job concurrency for dosbox -- otherwise the server gets over…
3ef3f8c
adding recursive submodule for dosbox-x
4a1d977
Simplifying
SergioMartin86 c0559c9
Simplifying
SergioMartin86 bc0b826
Simplifying
SergioMartin86 4a84de9
Simplifying
SergioMartin86 4e22c2b
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
SergioMartin86 3e43a74
Only offer drive switching if more than one drive is present
7774d4a
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
071667c
Adding proper Disc identification for ISO9660 / Joliet (default targe…
eb72fc7
Adding CDROM case
9797d58
Moving comments to proper place
88d2a58
Moving comments to proper place
e68aa2e
Code style fixes
YoshiRulz 1bbceeb
Clean up handling of Next Disc buttons
YoshiRulz 3fe534b
Clean up `DOSBoxKeyboard` definition
YoshiRulz 47e4df8
Remove redundant button mnemonic overrides
YoshiRulz 4f603db
remove leftover hack from my initial 2-byte range
vadosnaprimer c7b5459
Fixing mouse buttons getting stuck and aligning mouse speed minmaxes …
55e1f4b
Fixing mouse
27ef76b
Removing default framerate for DOS
6ed550b
set mouse speed range to match raw deltas range
vadosnaprimer 9f9148b
fix casing on public fields
vadosnaprimer 942c708
fix num/denom values to match dosbox-x for when it launches into dos
vadosnaprimer 90833fc
use an existing thing instead of GetFullName
vadosnaprimer 10e4e08
Move init of new `MouseState` to top and eliminate locals
YoshiRulz 7119fd4
fix naming for mouse states
vadosnaprimer c42f033
update submodules
vadosnaprimer c667431
Adding function to get video refresh rate
SergioMartin86 ced12c5
Adding report on video refresh rate update
e5b16a6
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
7654254
Revert "Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk in…
47eab9b
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
4f1636c
Removing unnecessary directive
4e2dbae
Merge branch 'master' into dosbox
e06154b
Fixing reboot
SergioMartin86 03bebd8
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
SergioMartin86 3998332
fps notice formatting
vadosnaprimer 0eeada6
Zero init fps vals
529e783
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
0846112
Using variable framerates
SergioMartin86 ea0e1bc
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
54c2f7a
Now accepting variable framerates as given by the core
66b61e2
Moving ISO9660 detection lower
11e83ee
Storing refresh rate in savestate -- update it on load if different
e72bb9e
fix GetFullName()
vadosnaprimer c9c13af
Adding function to get number of ran cycles
SergioMartin86 ea70a8f
Adding ICycleTiming
bcf8283
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
a73f61c
attoseconds are obsolete now
vadosnaprimer 5eb69bb
fix loading CDs with spaces in their name
vadosnaprimer 204ea04
Message duration needs to be left to the user to configure. Just pass…
a358f56
Setting notify times back to 4 seconds cause these require a bit more…
c223120
Updating CycleCount from within wbx
SergioMartin86 87218e6
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
SergioMartin86 49e7a29
Simplifying cycle timing
5354ac0
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
6d33cb9
Removing FPS change notification, using default waiting times
088865c
Updating submodule
SergioMartin86 3f51434
Fixing bug in disc swapping
SergioMartin86 a01b786
Adding drive selection functionality
2a44bf9
Merge branch 'dosbox' of github.com:SergioMartin86/BizHawk into dosbox
ec2c341
fixing period input
b4bc072
Adding logic to present disc swapping operations from repeating when …
8831190
added defines for drive id
SergioMartin86 fb339fb
point submodule to specific branch
vadosnaprimer 8dbe453
Merge remote-tracking branch 'remotes/origin/master' into dosbox
vadosnaprimer File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
128 changes: 128 additions & 0 deletions
128
src/BizHawk.Emulation.Cores/Computers/DOS/DOSBox.Controllers.cs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,128 @@ | ||
| using System.Collections.Generic; | ||
| using BizHawk.Common; | ||
| using BizHawk.Emulation.Common; | ||
|
|
||
| namespace BizHawk.Emulation.Cores.Computers.DOS | ||
| { | ||
| public partial class DOSBox | ||
| { | ||
| // A class to store the current state of the mouse for delta and button activation calculation | ||
| private class MouseState | ||
| { | ||
| public int PosX = 0; | ||
| public int PosY = 0; | ||
| public bool LeftButtonHeld = false; | ||
| public bool MiddleButtonHeld = false; | ||
| public bool RightButtonHeld = false; | ||
| } | ||
|
|
||
| private MouseState _lastMouseState = new MouseState(); | ||
|
|
||
| private static readonly (string Name, LibDOSBox.DOSBoxKeyboard Key)[] _keyboardMap = CreateKeyboardMap(); | ||
|
|
||
| private static (string Name, LibDOSBox.DOSBoxKeyboard Value)[] CreateKeyboardMap() | ||
| { | ||
| var keyboardMap = new List<(string, LibDOSBox.DOSBoxKeyboard)>(); | ||
| // ReSharper disable once LoopCanBeConvertedToQuery | ||
| foreach (var k in Enum.GetValues(typeof(LibDOSBox.DOSBoxKeyboard))) | ||
| { | ||
| if (k is LibDOSBox.DOSBoxKeyboard.Key_None) continue; | ||
| var name = Enum.GetName(typeof(LibDOSBox.DOSBoxKeyboard), k)!.Replace('_', ' '); | ||
| keyboardMap.Add((name, (LibDOSBox.DOSBoxKeyboard) k)); | ||
| } | ||
|
|
||
| return keyboardMap.ToArray(); | ||
| } | ||
|
|
||
| private static ControllerDefinition CreateControllerDefinition(SyncSettings settings, int floppyDiskCount, int cdROMCount) | ||
| { | ||
| var controller = new ControllerDefinition("DOSBox Controller"); | ||
|
|
||
| // Adding joystick buttons | ||
| if (settings.EnableJoystick1) | ||
| { | ||
| foreach (var button in JoystickButtonCollection) | ||
| { | ||
| controller.BoolButtons.Add("P1 " + Inputs.Joystick + " " + button); | ||
| } | ||
| } | ||
|
|
||
| if (settings.EnableJoystick2) | ||
| { | ||
| foreach (var button in JoystickButtonCollection) | ||
| { | ||
| controller.BoolButtons.Add("P2 " + Inputs.Joystick + " " + button); | ||
| } | ||
| } | ||
|
|
||
| // Adding mouse inputs | ||
| if (settings.EnableMouse) | ||
| { | ||
| controller.BoolButtons.Add(Inputs.Mouse + " " + MouseInputs.LeftButton); | ||
| controller.BoolButtons.Add(Inputs.Mouse + " " + MouseInputs.MiddleButton); | ||
| controller.BoolButtons.Add(Inputs.Mouse + " " + MouseInputs.RightButton); | ||
|
|
||
| // Although most apps (including windows) use speed to compute the mouse position, some games (SimCity) use the absolute value | ||
| // The absolute values needs to be 1:1 with the video size, as this is translated 1:1 to the core. | ||
| // The effect is that the position on BK's window translates perfectly to the core | ||
| controller.AddAxis(Inputs.Mouse + " " + MouseInputs.PosX, (0).RangeTo(LibDOSBox.SVGA_MAX_WIDTH), LibDOSBox.SVGA_MAX_WIDTH / 2); | ||
| controller.AddAxis(Inputs.Mouse + " " + MouseInputs.PosY, (0).RangeTo(LibDOSBox.SVGA_MAX_HEIGHT), LibDOSBox.SVGA_MAX_HEIGHT / 2); | ||
|
|
||
| // Range above 180 results in minimal mouse movement values bigger than 1, and we need 1 as a basis before sensitivity is applied | ||
| // To adjust sensitivity, use the corresponding sync setting (global sensitivity for raw deltas is a TODO) | ||
| controller.AddAxis(Inputs.Mouse + " " + MouseInputs.SpeedX, (-180).RangeTo(180), 0); | ||
| controller.AddAxis(Inputs.Mouse + " " + MouseInputs.SpeedY, (-180).RangeTo(180), 0); | ||
| } | ||
|
|
||
| // Adding drive management buttons | ||
| if (floppyDiskCount > 1) controller.BoolButtons.Add(Inputs.NextFloppyDisk); | ||
| if (cdROMCount > 1) controller.BoolButtons.Add(Inputs.NextCDROM); | ||
|
|
||
| foreach (var (name, _) in _keyboardMap) | ||
| { | ||
| controller.BoolButtons.Add(name); | ||
| controller.CategoryLabels[name] = "Keyboard"; | ||
| } | ||
|
|
||
| return controller.MakeImmutable(); | ||
| } | ||
|
|
||
| private static string[] JoystickButtonCollection = [ | ||
| JoystickButtons.Up, | ||
| JoystickButtons.Down, | ||
| JoystickButtons.Left, | ||
| JoystickButtons.Right, | ||
| JoystickButtons.Button1, | ||
| JoystickButtons.Button2 | ||
| ]; | ||
|
|
||
| private static class JoystickButtons | ||
| { | ||
| public const string Up = "Up"; | ||
| public const string Down = "Down"; | ||
| public const string Left = "Left"; | ||
| public const string Right = "Right"; | ||
| public const string Button1 = "Button 1"; | ||
| public const string Button2 = "Button 2"; | ||
| } | ||
|
|
||
| private static class MouseInputs | ||
| { | ||
| public const string LeftButton = "Left Button"; | ||
| public const string RightButton = "Right Button"; | ||
| public const string MiddleButton = "Middle Button"; | ||
| public const string PosX = "Position X"; | ||
| public const string PosY = "Position Y"; | ||
| public const string SpeedX = "Speed X"; // How many pixels has it changed in a single frame | ||
| public const string SpeedY = "Speed Y"; | ||
| } | ||
|
|
||
| private static class Inputs | ||
| { | ||
| public const string Joystick = "Joystick"; | ||
| public const string Mouse = "Mouse"; | ||
| public const string NextFloppyDisk = "Next Floppy Disk"; | ||
| public const string NextCDROM = "Next CDROM"; | ||
| } | ||
| } | ||
| } |
10 changes: 10 additions & 0 deletions
10
src/BizHawk.Emulation.Cores/Computers/DOS/DOSBox.ICycleTiming.cs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| using BizHawk.Emulation.Common; | ||
|
|
||
| namespace BizHawk.Emulation.Cores.Computers.DOS | ||
| { | ||
| public partial class DOSBox : ICycleTiming | ||
| { | ||
| // DOSBox emulates the internal core at stable 1ms increments, regardless of the configuration. Therefore, this is basis for time calculation. | ||
| public double ClockRate => 1000.0; | ||
| } | ||
| } |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.