diff --git a/BizHawk.Emulation/Consoles/Calculator/TI83.cs b/BizHawk.Emulation/Consoles/Calculator/TI83.cs index 66beb8b654..a0efe67f32 100644 --- a/BizHawk.Emulation/Consoles/Calculator/TI83.cs +++ b/BizHawk.Emulation/Consoles/Calculator/TI83.cs @@ -441,6 +441,12 @@ namespace BizHawk.Emulation.Consoles.Calculator public string SystemId { get { return "TI83"; } } public IList MemoryDomains { get { throw new NotImplementedException(); } } - public MemoryDomain MainMemory { get { throw new NotImplementedException(); } } + public MemoryDomain MainMemory { get { throw new NotImplementedException(); } } + + + public object Query(EmulatorQuery query) + { + return null; + } } } \ No newline at end of file diff --git a/BizHawk.Emulation/Consoles/Gameboy/Gameboy.cs b/BizHawk.Emulation/Consoles/Gameboy/Gameboy.cs index 96f03828b3..d6597c676f 100644 --- a/BizHawk.Emulation/Consoles/Gameboy/Gameboy.cs +++ b/BizHawk.Emulation/Consoles/Gameboy/Gameboy.cs @@ -846,5 +846,11 @@ namespace BizHawk.Emulation.Consoles.Gameboy public IList MemoryDomains { get { throw new NotImplementedException(); } } public MemoryDomain MainMemory { get { throw new NotImplementedException(); } } + + + public object Query(EmulatorQuery query) + { + return null; + } } } \ No newline at end of file diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs index ece81bc4b2..1b179ad2a6 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs @@ -159,5 +159,11 @@ namespace BizHawk.Emulation.Consoles.Nintendo public string SystemId { get { return "NES"; } } public IList MemoryDomains { get { throw new NotImplementedException(); } } public MemoryDomain MainMemory { get { throw new NotImplementedException(); } } + + + public object Query(EmulatorQuery query) + { + return null; + } } } \ No newline at end of file diff --git a/BizHawk.Emulation/Consoles/PC Engine/PCEngine.cs b/BizHawk.Emulation/Consoles/PC Engine/PCEngine.cs index f9a3ccc76f..1432f75e9b 100644 --- a/BizHawk.Emulation/Consoles/PC Engine/PCEngine.cs +++ b/BizHawk.Emulation/Consoles/PC Engine/PCEngine.cs @@ -281,5 +281,16 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx private IList memoryDomains; public IList MemoryDomains { get { return memoryDomains; } } public MemoryDomain MainMemory { get { return memoryDomains[0]; } } + + public object Query(EmulatorQuery query) + { + switch (query) + { + case EmulatorQuery.VsyncRate: + return 60.0; + default: + return null; + } + } } } diff --git a/BizHawk.Emulation/Consoles/Sega/Genesis/Genesis.cs b/BizHawk.Emulation/Consoles/Sega/Genesis/Genesis.cs index d1397cb4c1..8e0be3863e 100644 --- a/BizHawk.Emulation/Consoles/Sega/Genesis/Genesis.cs +++ b/BizHawk.Emulation/Consoles/Sega/Genesis/Genesis.cs @@ -187,5 +187,11 @@ namespace BizHawk.Emulation.Consoles.Sega public IList MemoryDomains { get { throw new NotImplementedException(); } } public MemoryDomain MainMemory { get { throw new NotImplementedException(); } } + + + public object Query(EmulatorQuery query) + { + return null; + } } } \ No newline at end of file diff --git a/BizHawk.Emulation/Consoles/Sega/SMS/SMS.cs b/BizHawk.Emulation/Consoles/Sega/SMS/SMS.cs index 12c52225ec..3b33a20da5 100644 --- a/BizHawk.Emulation/Consoles/Sega/SMS/SMS.cs +++ b/BizHawk.Emulation/Consoles/Sega/SMS/SMS.cs @@ -354,5 +354,11 @@ namespace BizHawk.Emulation.Consoles.Sega public IList MemoryDomains { get { return memoryDomains; } } public MemoryDomain MainMemory { get { return memoryDomains[0]; } } + + + public object Query(EmulatorQuery query) + { + return null; + } } } \ No newline at end of file diff --git a/BizHawk.Emulation/Interfaces/Base Implementations/NullEmulator.cs b/BizHawk.Emulation/Interfaces/Base Implementations/NullEmulator.cs index 2b106c1f80..3ee8daac15 100644 --- a/BizHawk.Emulation/Interfaces/Base Implementations/NullEmulator.cs +++ b/BizHawk.Emulation/Interfaces/Base Implementations/NullEmulator.cs @@ -46,6 +46,9 @@ namespace BizHawk public IList MemoryDomains { get { return memoryDomains; } } public MemoryDomain MainMemory { get { return memoryDomains[0]; } } - + public object Query(EmulatorQuery query) + { + return null; + } } } diff --git a/BizHawk.Emulation/Interfaces/IEmulator.cs b/BizHawk.Emulation/Interfaces/IEmulator.cs index 37188b301f..4f94b38eaa 100644 --- a/BizHawk.Emulation/Interfaces/IEmulator.cs +++ b/BizHawk.Emulation/Interfaces/IEmulator.cs @@ -31,6 +31,9 @@ namespace BizHawk void LoadStateBinary(BinaryReader reader); byte[] SaveStateBinary(); + //arbitrary extensible query mechanism + object Query(EmulatorQuery query); + // ----- Client Debugging API stuff ----- IList MemoryDomains { get; } MemoryDomain MainMemory { get; } @@ -63,4 +66,9 @@ namespace BizHawk public enum Endian { Big, Little, Unknown } public enum DisplayType { NTSC, PAL } + + public enum EmulatorQuery + { + VsyncRate + } } diff --git a/BizHawk.MultiClient/AboutBox.Designer.cs b/BizHawk.MultiClient/AboutBox.Designer.cs index d317b8ce32..8d805b4cb9 100644 --- a/BizHawk.MultiClient/AboutBox.Designer.cs +++ b/BizHawk.MultiClient/AboutBox.Designer.cs @@ -32,11 +32,16 @@ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox)); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.timer1 = new System.Windows.Forms.Timer(this.components); this.label3 = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label(); this.HR = new BizHawk.Core.HorizontalLine(); + this.label5 = new System.Windows.Forms.Label(); + this.mom1 = new System.Windows.Forms.PictureBox(); + this.mom2 = new System.Windows.Forms.PictureBox(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.mom1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.mom2)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.SuspendLayout(); // @@ -44,7 +49,7 @@ // this.label1.AutoSize = true; this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 72F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label1.Location = new System.Drawing.Point(0, 9); + this.label1.Location = new System.Drawing.Point(0, -3); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(490, 108); this.label1.TabIndex = 1; @@ -60,16 +65,6 @@ this.label2.TabIndex = 2; this.label2.Text = "EMULATES\r\nYOUR\r\nMOM"; // - // pictureBox1 - // - this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); - this.pictureBox1.Location = new System.Drawing.Point(155, 108); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(171, 216); - this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; - this.pictureBox1.TabIndex = 0; - this.pictureBox1.TabStop = false; - // // timer1 // this.timer1.Enabled = true; @@ -105,11 +100,53 @@ this.HR.TabIndex = 4; this.HR.Text = "COPYRITE 2001"; // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 36F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label5.Location = new System.Drawing.Point(222, 369); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(104, 55); + this.label5.TabIndex = 8; + this.label5.Text = "--->"; + // + // mom1 + // + this.mom1.Image = ((System.Drawing.Image)(resources.GetObject("mom1.Image"))); + this.mom1.Location = new System.Drawing.Point(372, 274); + this.mom1.Name = "mom1"; + this.mom1.Size = new System.Drawing.Size(115, 150); + this.mom1.TabIndex = 7; + this.mom1.TabStop = false; + this.mom1.Visible = false; + // + // mom2 + // + this.mom2.Image = ((System.Drawing.Image)(resources.GetObject("mom2.Image"))); + this.mom2.Location = new System.Drawing.Point(372, 274); + this.mom2.Name = "mom2"; + this.mom2.Size = new System.Drawing.Size(115, 150); + this.mom2.TabIndex = 6; + this.mom2.TabStop = false; + // + // pictureBox1 + // + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(155, 108); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(171, 216); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBox1.TabIndex = 0; + this.pictureBox1.TabStop = false; + // // AboutBox // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(519, 497); + this.Controls.Add(this.label5); + this.Controls.Add(this.mom1); + this.Controls.Add(this.mom2); this.Controls.Add(this.label4); this.Controls.Add(this.HR); this.Controls.Add(this.label3); @@ -118,6 +155,8 @@ this.Controls.Add(this.pictureBox1); this.Name = "AboutBox"; this.Text = "AboutBox"; + ((System.ComponentModel.ISupportInitialize)(this.mom1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.mom2)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -133,5 +172,8 @@ private System.Windows.Forms.Label label3; private BizHawk.Core.HorizontalLine HR; private System.Windows.Forms.Label label4; + private System.Windows.Forms.PictureBox mom2; + private System.Windows.Forms.PictureBox mom1; + private System.Windows.Forms.Label label5; } } \ No newline at end of file diff --git a/BizHawk.MultiClient/AboutBox.cs b/BizHawk.MultiClient/AboutBox.cs index 0e2ec4e2f6..694494448a 100644 --- a/BizHawk.MultiClient/AboutBox.cs +++ b/BizHawk.MultiClient/AboutBox.cs @@ -4,6 +4,7 @@ using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; +using System.Media; using System.Text; using System.Windows.Forms; @@ -11,17 +12,72 @@ namespace BizHawk.MultiClient { public partial class AboutBox : Form { + SoundPlayer sfx; + Random r = new Random(); + int ctr = 0; + Point loc; + public AboutBox() { InitializeComponent(); - label1.ForeColor = Color.LightGreen; + loc = label1.Location; + + label1.Text = ""; + try + { + var rm = new System.Resources.ResourceManager("BizHawk.MultiClient.Properties.Resources", GetType().Assembly); + sfx = new SoundPlayer(rm.GetStream("nothawk")); + sfx.Play(); + } + catch + { + } } + protected override void OnClosed(EventArgs e) + { + if(sfx != null) + sfx.Dispose(); + } + + int smack = 0; private void timer1_Tick(object sender, EventArgs e) { - if (label1.ForeColor == Color.LightGreen) - label1.ForeColor = Color.Pink; - else label1.ForeColor = Color.LightGreen; + ctr++; + if (ctr == 3) + label1.Text = "BIZ"; + else if (ctr == 10) + label1.Text = "BIZ HAWK"; + else if (ctr == 20) + { + label1.ForeColor = Color.LightGreen; + label1.Text = "BIZHAWK"; + } + else if (ctr > 20) + { + if (label1.ForeColor == Color.LightGreen) + label1.ForeColor = Color.Pink; + else label1.ForeColor = Color.LightGreen; + } + + if (ctr/5 % 2 ==0) + { + mom1.Visible = true; + mom2.Visible = false; + } + else + { + mom1.Visible = false; + mom2.Visible = true; + } + + if (ctr > 30) + { + if(ctr/7%7<4) + label1.Location = new Point(loc.X + r.Next(3) - 1, loc.Y + r.Next(3) - 1); + else + label1.Location = new Point(loc.X + r.Next(5) - 3, loc.Y + r.Next(5) - 3); + } } } diff --git a/BizHawk.MultiClient/AboutBox.resx b/BizHawk.MultiClient/AboutBox.resx index e1d6aed454..6526c419b8 100644 --- a/BizHawk.MultiClient/AboutBox.resx +++ b/BizHawk.MultiClient/AboutBox.resx @@ -117,7 +117,1174 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + + + + 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 + AAAAAElFTkSuQmCC + + + + + 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 + PvvXuzev3roB3ml6tvfPCOLNe/eug6npvTtXb165fv3zOzc/v3f943tX//zhu68/vzD6vaOr+5r9u0KO + C30tvzt/+LeXjv7yuUPvHVs+2hObC1sWItb5sOVQe2ilyTlgUw1YlUN2TVLFDnAxzTLKvoQLVIgXx1pf + me19Y3HwUIt/zK5uU7MBlOMOzVLIfKK78fJk+6newAvjjRfHYq8tdr4w136wJzTo1y+0hb51/si9Tz4C + Q4s7QFQH+pMH05T/9sdXskQgtAIgXgOWCBLMXTAUv373zpcAx49/9t7L+xZe2zWz1ODcF/Wc70n+y6UT + V7/z0qffvAigPD/SuifhBfAdbG3YnwqstYd2x927Ys6FkKXHKG2S0jpquLsaraBpOTfYfHGs7dW5vgvD + qTGbqlXF6jeKd0VtxzrDZ/rjgCg70el5fS5xcTz6wkzq0mz7qbHUaNjy0tryjc/+5d7NK3eAMOPjT26C + pvQaiDr/7RB+RQUEmDkCHMECmeUm6KPSIF65d/PzG//64Y9ePH9xYfx4T2rGYTza3PDpK+c/f+vih5eO + /fz0vpeme8/0J/bGPfsTvtVG52KDZcZrnHDWDtYrOmr4KQVr1mPYHbUfTHpP98beWBh4Z3Xs5enuC0PJ + aeDUtfxxu3olbNkXd62l3GtJ84sT0TeXO15eaL8033V+tuf4dN8f3//mnU8+uncTDFLSA6n70tN/iCF+ + NRkJmJc+SNA3gewYDKtA1X3nOuCa7t788urvf/HynsVXFid3NTgv9KT+cvnUR5dP/Ob82q/OHnh7eez5 + kbb9zd61lobdja45X92wWdmrl/QbZaMgV7gNB+K+Iy0NJzoizw2m3lwY/Oby8IvjHc8Pp873Nx9u8S8F + 6ua8utWwZS3lPN8XeGMu8cpM6vmJxHMzna8dmP3lt1++8Zffg/lt+raCevomUNWnBSP/pJb413NvAOKN + tFOn7RFoje/cvHLvysffO3/yR6cPvzE/9vb86M+P7fnd+bVfnt7/3oH5l6cAi9V7sit2uie+N+beH/eC + 511h+2LADNZKg22tOXAkCSjF8PODLW/ND31raeSVya6LQ6nLIy1nuqMHmpxgneoKXx5pfmms6ZtLbS9P + pZ6bSJ2f6X79yPInv//pvRtfgqEPQDAtnrxxEwg07o9T/gGPvx0T/0098O8D8Bv37l4DUKa12zevf/np + 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 @@ -581,7 +1748,4 @@ AKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAP/Z - - 17, 17 - \ No newline at end of file diff --git a/BizHawk.MultiClient/BizHawk.MultiClient.csproj b/BizHawk.MultiClient/BizHawk.MultiClient.csproj index 53fc04d49a..f9242823d9 100644 --- a/BizHawk.MultiClient/BizHawk.MultiClient.csproj +++ b/BizHawk.MultiClient/BizHawk.MultiClient.csproj @@ -3,7 +3,7 @@ Debug AnyCPU - 9.0.21022 + 9.0.30729 2.0 {DD448B37-BA3F-4544-9754-5406E8094723} Exe @@ -107,6 +107,10 @@ MainForm.cs + + MainForm.cs + Form + Form diff --git a/BizHawk.MultiClient/Config.cs b/BizHawk.MultiClient/Config.cs index ecf294625e..a35b6ff798 100644 --- a/BizHawk.MultiClient/Config.cs +++ b/BizHawk.MultiClient/Config.cs @@ -28,6 +28,14 @@ public int MainWndx = -1; //Negative numbers will be ignored public int MainWndy = -1; + // Run-Control settings + public int FrameProgressDelayMs = 500; //how long until a frame advance hold turns into a frame progress? + public int FrameSkip = 0; + public int SpeedPercent = 100; + public bool LimitFramerate = true; + public bool AutoMinimizeSkipping = true; + public bool DisplayVSync = false; + // Display options public bool DisplayFPS = false; public bool DisplayFrameCounter = false; diff --git a/BizHawk.MultiClient/MainForm.Designer.cs b/BizHawk.MultiClient/MainForm.Designer.cs index e8bbb7d953..af91537fec 100644 --- a/BizHawk.MultiClient/MainForm.Designer.cs +++ b/BizHawk.MultiClient/MainForm.Designer.cs @@ -123,6 +123,27 @@ this.pauseWhenMenuActivatedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveWindowPositionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.startPausedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.frameSkipToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.miLimitFramerate = new System.Windows.Forms.ToolStripMenuItem(); + this.miDisplayVsync = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator(); + this.miAutoMinimizeSkipping = new System.Windows.Forms.ToolStripMenuItem(); + this.miFrameskip0 = new System.Windows.Forms.ToolStripMenuItem(); + this.miFrameskip1 = new System.Windows.Forms.ToolStripMenuItem(); + this.miFrameskip2 = new System.Windows.Forms.ToolStripMenuItem(); + this.miFrameskip3 = new System.Windows.Forms.ToolStripMenuItem(); + this.miFrameskip4 = new System.Windows.Forms.ToolStripMenuItem(); + this.miFrameskip5 = new System.Windows.Forms.ToolStripMenuItem(); + this.miFrameskip6 = new System.Windows.Forms.ToolStripMenuItem(); + this.miFrameskip7 = new System.Windows.Forms.ToolStripMenuItem(); + this.miFrameskip8 = new System.Windows.Forms.ToolStripMenuItem(); + this.miFrameskip9 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripSeparator(); + this.miSpeed50 = new System.Windows.Forms.ToolStripMenuItem(); + this.miSpeed75 = new System.Windows.Forms.ToolStripMenuItem(); + this.miSpeed100 = new System.Windows.Forms.ToolStripMenuItem(); + this.miSpeed150 = new System.Windows.Forms.ToolStripMenuItem(); + this.miSpeed200 = new System.Windows.Forms.ToolStripMenuItem(); this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.rAMWatchToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.rAMSearchToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -834,7 +855,8 @@ this.hotkeysToolStripMenuItem, this.toolStripSeparator9, this.soundToolStripMenuItem, - this.gUIToolStripMenuItem}); + this.gUIToolStripMenuItem, + this.frameSkipToolStripMenuItem}); this.configToolStripMenuItem.Name = "configToolStripMenuItem"; this.configToolStripMenuItem.Size = new System.Drawing.Size(50, 20); this.configToolStripMenuItem.Text = "&Config"; @@ -842,26 +864,26 @@ // controllersToolStripMenuItem // this.controllersToolStripMenuItem.Name = "controllersToolStripMenuItem"; - this.controllersToolStripMenuItem.Size = new System.Drawing.Size(137, 22); + this.controllersToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.controllersToolStripMenuItem.Text = "&Controllers"; this.controllersToolStripMenuItem.Click += new System.EventHandler(this.controllersToolStripMenuItem_Click); // // hotkeysToolStripMenuItem // this.hotkeysToolStripMenuItem.Name = "hotkeysToolStripMenuItem"; - this.hotkeysToolStripMenuItem.Size = new System.Drawing.Size(137, 22); + this.hotkeysToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.hotkeysToolStripMenuItem.Text = "&Hotkeys"; this.hotkeysToolStripMenuItem.Click += new System.EventHandler(this.hotkeysToolStripMenuItem_Click); // // toolStripSeparator9 // this.toolStripSeparator9.Name = "toolStripSeparator9"; - this.toolStripSeparator9.Size = new System.Drawing.Size(134, 6); + this.toolStripSeparator9.Size = new System.Drawing.Size(149, 6); // // soundToolStripMenuItem // this.soundToolStripMenuItem.Name = "soundToolStripMenuItem"; - this.soundToolStripMenuItem.Size = new System.Drawing.Size(137, 22); + this.soundToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.soundToolStripMenuItem.Text = "&Sound"; this.soundToolStripMenuItem.Click += new System.EventHandler(this.soundToolStripMenuItem_Click); // @@ -872,7 +894,7 @@ this.saveWindowPositionToolStripMenuItem, this.startPausedToolStripMenuItem}); this.gUIToolStripMenuItem.Name = "gUIToolStripMenuItem"; - this.gUIToolStripMenuItem.Size = new System.Drawing.Size(137, 22); + this.gUIToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.gUIToolStripMenuItem.Text = "GUI"; this.gUIToolStripMenuItem.DropDownOpened += new System.EventHandler(this.gUIToolStripMenuItem_DropDownOpened); // @@ -897,6 +919,170 @@ this.startPausedToolStripMenuItem.Text = "Start paused"; this.startPausedToolStripMenuItem.Click += new System.EventHandler(this.startPausedToolStripMenuItem_Click); // + // frameSkipToolStripMenuItem + // + this.frameSkipToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.miLimitFramerate, + this.miDisplayVsync, + this.toolStripMenuItem3, + this.miAutoMinimizeSkipping, + this.miFrameskip0, + this.miFrameskip1, + this.miFrameskip2, + this.miFrameskip3, + this.miFrameskip4, + this.miFrameskip5, + this.miFrameskip6, + this.miFrameskip7, + this.miFrameskip8, + this.miFrameskip9, + this.toolStripMenuItem5, + this.miSpeed50, + this.miSpeed75, + this.miSpeed100, + this.miSpeed150, + this.miSpeed200}); + this.frameSkipToolStripMenuItem.Name = "frameSkipToolStripMenuItem"; + this.frameSkipToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.frameSkipToolStripMenuItem.Text = "Speed/Skip"; + this.frameSkipToolStripMenuItem.DropDownOpened += new System.EventHandler(this.frameSkipToolStripMenuItem_DropDownOpened); + // + // miLimitFramerate + // + this.miLimitFramerate.Name = "miLimitFramerate"; + this.miLimitFramerate.Size = new System.Drawing.Size(192, 22); + this.miLimitFramerate.Text = "Limit Framerate"; + this.miLimitFramerate.Click += new System.EventHandler(this.miLimitFramerate_Click); + // + // miDisplayVsync + // + this.miDisplayVsync.Name = "miDisplayVsync"; + this.miDisplayVsync.Size = new System.Drawing.Size(192, 22); + this.miDisplayVsync.Text = "Display VSync"; + this.miDisplayVsync.Click += new System.EventHandler(this.miDisplayVsync_Click); + // + // toolStripMenuItem3 + // + this.toolStripMenuItem3.Name = "toolStripMenuItem3"; + this.toolStripMenuItem3.Size = new System.Drawing.Size(189, 6); + // + // miAutoMinimizeSkipping + // + this.miAutoMinimizeSkipping.Name = "miAutoMinimizeSkipping"; + this.miAutoMinimizeSkipping.Size = new System.Drawing.Size(192, 22); + this.miAutoMinimizeSkipping.Text = "Auto-minimize skipping"; + this.miAutoMinimizeSkipping.Click += new System.EventHandler(this.miAutoMinimizeSkipping_Click); + // + // miFrameskip0 + // + this.miFrameskip0.Name = "miFrameskip0"; + this.miFrameskip0.Size = new System.Drawing.Size(192, 22); + this.miFrameskip0.Text = "0 (never skip)"; + this.miFrameskip0.Click += new System.EventHandler(this.miFrameskip0_Click); + // + // miFrameskip1 + // + this.miFrameskip1.Name = "miFrameskip1"; + this.miFrameskip1.Size = new System.Drawing.Size(192, 22); + this.miFrameskip1.Text = "1"; + this.miFrameskip1.Click += new System.EventHandler(this.miFrameskip1_Click); + // + // miFrameskip2 + // + this.miFrameskip2.Name = "miFrameskip2"; + this.miFrameskip2.Size = new System.Drawing.Size(192, 22); + this.miFrameskip2.Text = "2"; + this.miFrameskip2.Click += new System.EventHandler(this.miFrameskip2_Click); + // + // miFrameskip3 + // + this.miFrameskip3.Name = "miFrameskip3"; + this.miFrameskip3.Size = new System.Drawing.Size(192, 22); + this.miFrameskip3.Text = "3"; + this.miFrameskip3.Click += new System.EventHandler(this.miFrameskip3_Click); + // + // miFrameskip4 + // + this.miFrameskip4.Name = "miFrameskip4"; + this.miFrameskip4.Size = new System.Drawing.Size(192, 22); + this.miFrameskip4.Text = "4"; + this.miFrameskip4.Click += new System.EventHandler(this.miFrameskip4_Click); + // + // miFrameskip5 + // + this.miFrameskip5.Name = "miFrameskip5"; + this.miFrameskip5.Size = new System.Drawing.Size(192, 22); + this.miFrameskip5.Text = "5"; + this.miFrameskip5.Click += new System.EventHandler(this.miFrameskip5_Click); + // + // miFrameskip6 + // + this.miFrameskip6.Name = "miFrameskip6"; + this.miFrameskip6.Size = new System.Drawing.Size(192, 22); + this.miFrameskip6.Text = "6"; + this.miFrameskip6.Click += new System.EventHandler(this.miFrameskip6_Click); + // + // miFrameskip7 + // + this.miFrameskip7.Name = "miFrameskip7"; + this.miFrameskip7.Size = new System.Drawing.Size(192, 22); + this.miFrameskip7.Text = "7"; + this.miFrameskip7.Click += new System.EventHandler(this.miFrameskip7_Click); + // + // miFrameskip8 + // + this.miFrameskip8.Name = "miFrameskip8"; + this.miFrameskip8.Size = new System.Drawing.Size(192, 22); + this.miFrameskip8.Text = "8"; + this.miFrameskip8.Click += new System.EventHandler(this.miFrameskip8_Click); + // + // miFrameskip9 + // + this.miFrameskip9.Name = "miFrameskip9"; + this.miFrameskip9.Size = new System.Drawing.Size(192, 22); + this.miFrameskip9.Text = "9"; + this.miFrameskip9.Click += new System.EventHandler(this.miFrameskip9_Click); + // + // toolStripMenuItem5 + // + this.toolStripMenuItem5.Name = "toolStripMenuItem5"; + this.toolStripMenuItem5.Size = new System.Drawing.Size(189, 6); + // + // miSpeed50 + // + this.miSpeed50.Name = "miSpeed50"; + this.miSpeed50.Size = new System.Drawing.Size(192, 22); + this.miSpeed50.Text = "Speed 50%"; + this.miSpeed50.Click += new System.EventHandler(this.miSpeed50_Click); + // + // miSpeed75 + // + this.miSpeed75.Name = "miSpeed75"; + this.miSpeed75.Size = new System.Drawing.Size(192, 22); + this.miSpeed75.Text = "Speed 75%"; + this.miSpeed75.Click += new System.EventHandler(this.miSpeed75_Click); + // + // miSpeed100 + // + this.miSpeed100.Name = "miSpeed100"; + this.miSpeed100.Size = new System.Drawing.Size(192, 22); + this.miSpeed100.Text = "Speed 100%"; + this.miSpeed100.Click += new System.EventHandler(this.miSpeed100_Click); + // + // miSpeed150 + // + this.miSpeed150.Name = "miSpeed150"; + this.miSpeed150.Size = new System.Drawing.Size(192, 22); + this.miSpeed150.Text = "Speed 150%"; + this.miSpeed150.Click += new System.EventHandler(this.miSpeed150_Click); + // + // miSpeed200 + // + this.miSpeed200.Name = "miSpeed200"; + this.miSpeed200.Size = new System.Drawing.Size(192, 22); + this.miSpeed200.Text = "Speed 200%"; + this.miSpeed200.Click += new System.EventHandler(this.miSpeed200_Click); + // // toolsToolStripMenuItem // this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -965,14 +1151,14 @@ // this.helpToolStripMenuItem1.Enabled = false; this.helpToolStripMenuItem1.Name = "helpToolStripMenuItem1"; - this.helpToolStripMenuItem1.Size = new System.Drawing.Size(152, 22); + this.helpToolStripMenuItem1.Size = new System.Drawing.Size(114, 22); this.helpToolStripMenuItem1.Text = "&Help"; this.helpToolStripMenuItem1.Click += new System.EventHandler(this.helpToolStripMenuItem1_Click); // // aboutToolStripMenuItem // this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; - this.aboutToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.aboutToolStripMenuItem.Size = new System.Drawing.Size(114, 22); this.aboutToolStripMenuItem.Text = "&About"; this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); // @@ -1102,6 +1288,27 @@ private System.Windows.Forms.ToolStripMenuItem rAMPokeToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem saveWindowPositionToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem startPausedToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem frameSkipToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem miDisplayVsync; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem3; + private System.Windows.Forms.ToolStripMenuItem miAutoMinimizeSkipping; + private System.Windows.Forms.ToolStripMenuItem miFrameskip0; + private System.Windows.Forms.ToolStripMenuItem miFrameskip1; + private System.Windows.Forms.ToolStripMenuItem miFrameskip2; + private System.Windows.Forms.ToolStripMenuItem miFrameskip3; + private System.Windows.Forms.ToolStripMenuItem miFrameskip4; + private System.Windows.Forms.ToolStripMenuItem miFrameskip5; + private System.Windows.Forms.ToolStripMenuItem miFrameskip6; + private System.Windows.Forms.ToolStripMenuItem miFrameskip7; + private System.Windows.Forms.ToolStripMenuItem miFrameskip8; + private System.Windows.Forms.ToolStripMenuItem miFrameskip9; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem5; + private System.Windows.Forms.ToolStripMenuItem miSpeed50; + private System.Windows.Forms.ToolStripMenuItem miSpeed75; + private System.Windows.Forms.ToolStripMenuItem miSpeed100; + private System.Windows.Forms.ToolStripMenuItem miSpeed150; + private System.Windows.Forms.ToolStripMenuItem miSpeed200; + private System.Windows.Forms.ToolStripMenuItem miLimitFramerate; } } diff --git a/BizHawk.MultiClient/MainForm.MenuItems.cs b/BizHawk.MultiClient/MainForm.MenuItems.cs new file mode 100644 index 0000000000..45b0bd9f29 --- /dev/null +++ b/BizHawk.MultiClient/MainForm.MenuItems.cs @@ -0,0 +1,382 @@ +using System; +using System.Threading; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using BizHawk.Core; +using BizHawk.Emulation.Consoles.Sega; +using BizHawk.Emulation.Consoles.TurboGrafx; +using BizHawk.Emulation.Consoles.Calculator; +using BizHawk.Emulation.Consoles.Gameboy; +using BizHawk.Emulation.Consoles.Nintendo; + +namespace BizHawk.MultiClient +{ + partial class MainForm + { + private void rAMPokeToolStripMenuItem_Click(object sender, EventArgs e) + { + RamPoke r = new RamPoke(); + r.Show(); + } + + private void saveWindowPositionToolStripMenuItem_Click(object sender, EventArgs e) + { + Global.Config.SaveWindowPosition ^= true; + } + + private void startPausedToolStripMenuItem_Click(object sender, EventArgs e) + { + Global.Config.StartPaused ^= true; + } + + private void luaConsoleToolStripMenuItem_Click(object sender, EventArgs e) + { + var window = new BizHawk.MultiClient.tools.LuaWindow(); + window.Show(); + } + + private void miLimitFramerate_Click(object sender, EventArgs e) + { + Global.Config.LimitFramerate ^= true; + } + + private void miDisplayVsync_Click(object sender, EventArgs e) + { + Global.Config.DisplayVSync ^= true; + Global.RenderPanel.Resized = true; + } + + private void miAutoMinimizeSkipping_Click(object sender, EventArgs e) + { + Global.Config.AutoMinimizeSkipping ^= true; + } + + private void miFrameskip0_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 0; } + private void miFrameskip1_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 1; } + private void miFrameskip2_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 2; } + private void miFrameskip3_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 3; } + private void miFrameskip4_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 4; } + private void miFrameskip5_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 5; } + private void miFrameskip6_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 6; } + private void miFrameskip7_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 7; } + private void miFrameskip8_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 8; } + private void miFrameskip9_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 9; } + + private void miSpeed50_Click(object sender, EventArgs e) { SetSpeedPercent(50); } + private void miSpeed75_Click(object sender, EventArgs e) { SetSpeedPercent(75); } + private void miSpeed100_Click(object sender, EventArgs e) { SetSpeedPercent(100); } + private void miSpeed150_Click(object sender, EventArgs e) { SetSpeedPercent(150); } + private void miSpeed200_Click(object sender, EventArgs e) { SetSpeedPercent(200); } + + private void pauseWhenMenuActivatedToolStripMenuItem_Click(object sender, EventArgs e) + { + Global.Config.PauseWhenMenuActivated ^= true; + } + + private void soundToolStripMenuItem_Click(object sender, EventArgs e) + { + SoundConfig s = new SoundConfig(); + s.ShowDialog(); + } + + private void zoomMenuItem_Click(object sender, EventArgs e) + { + if (sender == x1MenuItem) Global.Config.TargetZoomFactor = 1; + if (sender == x2MenuItem) Global.Config.TargetZoomFactor = 2; + if (sender == x3MenuItem) Global.Config.TargetZoomFactor = 3; + if (sender == x4MenuItem) Global.Config.TargetZoomFactor = 4; + if (sender == x5MenuItem) Global.Config.TargetZoomFactor = 5; + if (sender == mzMenuItem) Global.Config.TargetZoomFactor = 10; + + x1MenuItem.Checked = Global.Config.TargetZoomFactor == 1; + x2MenuItem.Checked = Global.Config.TargetZoomFactor == 2; + x3MenuItem.Checked = Global.Config.TargetZoomFactor == 3; + x4MenuItem.Checked = Global.Config.TargetZoomFactor == 4; + x5MenuItem.Checked = Global.Config.TargetZoomFactor == 5; + mzMenuItem.Checked = Global.Config.TargetZoomFactor == 10; + + FrameBufferResized(); + } + + private void enableFMChipToolStripMenuItem_Click(object sender, EventArgs e) + { + Global.Config.SmsEnableFM ^= true; + } + + private void overclockWhenKnownSafeToolStripMenuItem_Click(object sender, EventArgs e) + { + Global.Config.SmsAllowOverlock ^= true; + } + + private void forceStereoSeparationToolStripMenuItem_Click(object sender, EventArgs e) + { + Global.Config.SmsForceStereoSeparation ^= true; + } + + private void recordMovieToolStripMenuItem_Click(object sender, EventArgs e) + { + RecordMovie r = new RecordMovie(); + r.ShowDialog(); + } + + private void playMovieToolStripMenuItem_Click(object sender, EventArgs e) + { + PlayMovie p = new PlayMovie(); + p.ShowDialog(); + } + + private void stopMovieToolStripMenuItem_Click(object sender, EventArgs e) + { + + } + + private void playFromBeginningToolStripMenuItem_Click(object sender, EventArgs e) + { + + } + + + private void RAMWatchToolStripMenuItem_Click(object sender, EventArgs e) + { + LoadRamWatch(); + } + + private void rAMSearchToolStripMenuItem_Click(object sender, EventArgs e) + { + LoadRamSearch(); + } + + + private void autoloadMostRecentToolStripMenuItem_Click(object sender, EventArgs e) + { + UpdateAutoLoadRecentRom(); + } + + private void clearToolStripMenuItem_Click(object sender, EventArgs e) + { + Global.Config.RecentRoms.Clear(); + } + + + private void selectSlot1ToolStripMenuItem_Click(object sender, EventArgs e) + { + SaveSlot = 1; + SaveSlotSelectedMessage(); + } + + private void selectSlot2ToolStripMenuItem_Click(object sender, EventArgs e) + { + SaveSlot = 2; + SaveSlotSelectedMessage(); + } + + private void selectSlot3ToolStripMenuItem_Click(object sender, EventArgs e) + { + SaveSlot = 3; + SaveSlotSelectedMessage(); + } + + private void selectSlot4ToolStripMenuItem_Click(object sender, EventArgs e) + { + SaveSlot = 4; + SaveSlotSelectedMessage(); + } + + private void selectSlot5ToolStripMenuItem_Click(object sender, EventArgs e) + { + SaveSlot = 5; + SaveSlotSelectedMessage(); + } + + private void selectSlot6ToolStripMenuItem_Click(object sender, EventArgs e) + { + SaveSlot = 6; + SaveSlotSelectedMessage(); + } + + private void selectSlot7ToolStripMenuItem_Click(object sender, EventArgs e) + { + SaveSlot = 7; + SaveSlotSelectedMessage(); + } + + private void selectSlot8ToolStripMenuItem_Click(object sender, EventArgs e) + { + SaveSlot = 8; + SaveSlotSelectedMessage(); + } + + private void selectSlot9ToolStripMenuItem_Click(object sender, EventArgs e) + { + SaveSlot = 9; + SaveSlotSelectedMessage(); + } + + private void selectSlot10ToolStripMenuItem_Click(object sender, EventArgs e) + { + SaveSlot = 0; + SaveSlotSelectedMessage(); + } + + private void previousSlotToolStripMenuItem_Click(object sender, EventArgs e) + { + if (SaveSlot == 0) SaveSlot = 9; //Wrap to end of slot list + else if (SaveSlot > 9) SaveSlot = 9; //Meh, just in case + else SaveSlot--; + SaveSlotSelectedMessage(); + } + + private void nextSlotToolStripMenuItem_Click(object sender, EventArgs e) + { + if (SaveSlot >= 9) SaveSlot = 1; //Wrap to beginning of slot list + else SaveSlot++; + SaveSlotSelectedMessage(); + } + + private void saveToCurrentSlotToolStripMenuItem_Click(object sender, EventArgs e) + { + SaveState("QuickSave" + SaveSlot.ToString()); + } + + private void loadCurrentSlotToolStripMenuItem_Click(object sender, EventArgs e) + { + LoadState("QuickSave" + SaveSlot.ToString()); + } + + private void closeROMToolStripMenuItem_Click(object sender, EventArgs e) + { + CloseGame(); + Global.Emulator = new NullEmulator(); + Text = "BizHawk"; + } + + private void saveStateToolStripMenuItem_Click(object sender, EventArgs e) + { + Global.Sound.StopSound(); + + var frm = new NameStateForm(); + frm.ShowDialog(this); + + if (frm.OK) + SaveState(frm.Result); + + Global.Sound.StartSound(); + } + + private void powerToolStripMenuItem_Click(object sender, EventArgs e) + { + LoadRom(CurrentlyOpenRom); + } + + private void resetToolStripMenuItem_Click(object sender, EventArgs e) + { + if (Global.Emulator.ControllerDefinition.BoolButtons.Contains("Reset")) + Global.Emulator.Controller.ForceButton("Reset"); + } + + private void pauseToolStripMenuItem_Click(object sender, EventArgs e) + { + if (EmulatorPaused == true) + UnpauseEmulator(); + else + PauseEmulator(); + } + + private void helpToolStripMenuItem1_Click(object sender, EventArgs e) + { + + } + + private void aboutToolStripMenuItem_Click(object sender, EventArgs e) + { + new AboutBox().ShowDialog(); + } + + private void controllersToolStripMenuItem_Click(object sender, EventArgs e) + { + InputConfig i = new InputConfig(); + i.ShowDialog(); + } + + private void hotkeysToolStripMenuItem_Click(object sender, EventArgs e) + { + BizHawk.MultiClient.tools.HotkeyWindow h = new BizHawk.MultiClient.tools.HotkeyWindow(); + h.ShowDialog(); + } + + private void displayFPSToolStripMenuItem_Click(object sender, EventArgs e) + { + Global.Config.DisplayFPS ^= true; + } + + private void displayFrameCounterToolStripMenuItem_Click(object sender, EventArgs e) + { + Global.Config.DisplayFrameCounter ^= true; + } + + private void displayInputToolStripMenuItem_Click(object sender, EventArgs e) + { + Global.Config.DisplayInput ^= true; + } + + private void displayLagCounterToolStripMenuItem_Click(object sender, EventArgs e) + { + Global.Config.DisplayLagCounter ^= true; + } + + private void screenshotF12ToolStripMenuItem_Click(object sender, EventArgs e) + { + TakeScreenshot(); + } + + private void savestate1toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave1"); } + private void savestate2toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave2"); } + private void savestate3toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave3"); } + private void savestate4toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave4"); } + private void savestate5toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave5"); } + private void savestate6toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave6"); } + private void savestate7toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave7"); } + private void savestate8toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave8"); } + private void savestate9toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave9"); } + private void savestate0toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave0"); } + + private void loadstate1toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave1"); } + private void loadstate2toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave2"); } + private void loadstate3toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave3"); } + private void loadstate4toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave4"); } + private void loadstate5toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave5"); } + private void loadstate6toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave6"); } + private void loadstate7toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave7"); } + private void loadstate8toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave8"); } + private void loadstate9toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave9"); } + private void loadstate0toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave0"); } + + private void exitToolStripMenuItem_Click(object sender, EventArgs e) + { + if (RamWatch1.AskSave()) + Close(); + } + + private void openROMToolStripMenuItem_Click(object sender, EventArgs e) + { + var ofd = new OpenFileDialog(); + ofd.InitialDirectory = Global.Config.LastRomPath; + ofd.Filter = "Rom Files|*.SMS;*.GG;*.SG;*.PCE;*.SGX;*.GB;*.BIN;*.SMD;*.ZIP;*.7z|Master System|*.SMS;*.GG;*.SG;*.ZIP;*.7z|PC Engine|*.PCE;*.SGX;*.ZIP;*.7z|Gameboy|*.GB;*.ZIP;*.7z|Archive Files|*.zip;*.7z|All Files|*.*"; + ofd.RestoreDirectory = true; + + Global.Sound.StopSound(); + var result = ofd.ShowDialog(); + Global.Sound.StartSound(); + if (result != DialogResult.OK) + return; + var file = new FileInfo(ofd.FileName); + Global.Config.LastRomPath = file.DirectoryName; + LoadRom(file.FullName); + } + + + } +} \ No newline at end of file diff --git a/BizHawk.MultiClient/MainForm.cs b/BizHawk.MultiClient/MainForm.cs index 8c380da97c..9cee0445c5 100644 --- a/BizHawk.MultiClient/MainForm.cs +++ b/BizHawk.MultiClient/MainForm.cs @@ -19,22 +19,17 @@ namespace BizHawk.MultiClient private Control renderTarget; private RetainedViewportPanel retainedPanel; private string CurrentlyOpenRom; - private int SaveSlot = 0; //Saveslot sytem + + //the currently selected savestate slot + private int SaveSlot = 0; //runloop control - struct MainLoopData - { - public int lastskiprate; - public int framestoskip; - public int FrameAdvanceDelay; - public bool runloop_frameProgress; - public bool skipnextframe; - public bool exit; - } - MainLoopData mainLoopData = new MainLoopData(); + bool exit; + bool runloop_frameProgress; + DateTime FrameAdvanceTimestamp = DateTime.MinValue; public bool EmulatorPaused; - - Throttle throttle; + bool runloop_frameadvance; + Throttle throttle = new Throttle(); //For handling automatic pausing when entering the menu private bool wasPaused = false; @@ -139,15 +134,17 @@ namespace BizHawk.MultiClient if (Global.Config.StartPaused) PauseEmulator(); + } - //TODO - pick the actual correct throttle rate based on the platform and configuration - //(and later we will need to modify it at runtime) - throttle = new Throttle(30); + void SetSpeedPercent(int value) + { + Global.Config.SpeedPercent = value; + throttle.SetSpeedPercent(value); } protected override void OnClosed(EventArgs e) { - mainLoopData.exit = true; + exit = true; base.OnClosed(e); } @@ -159,13 +156,15 @@ namespace BizHawk.MultiClient CheckHotkeys(); - StepRunLoop_Core(); - //StepRunLoop_Throttle(true, -1); + StepRunLoop_Core(); + if(!IsNullEmulator()) + StepRunLoop_Throttle(); + Render(); CheckMessages(); - if (mainLoopData.exit) + if (exit) break; Thread.Sleep(0); } @@ -431,6 +430,17 @@ namespace BizHawk.MultiClient new BizHawk.Emulation.Consoles.Gameboy.Debugger(Global.Emulator as Gameboy).Show(); } + + //setup the throttle based on platform's specifications + //(one day later for some systems we will need to modify it at runtime as the display mode changes) + { + object o = Global.Emulator.Query(EmulatorQuery.VsyncRate); + if (o is double) + throttle.SetCoreFps((double)o); + else throttle.SetCoreFps(60); + SetSpeedPercent(Global.Config.SpeedPercent); + } + CurrentlyOpenRom = path; return true; } @@ -506,13 +516,6 @@ namespace BizHawk.MultiClient LoadRom(CurrentlyOpenRom); } - //TODO - fast forward is handled by disabling the throttle - if (Global.ClientControls["Fast Forward"]) - { - Global.Emulator.FrameAdvance(false); - Global.Emulator.FrameAdvance(false); - Global.Emulator.FrameAdvance(false); - } if (Global.ClientControls["Screenshot"]) { Global.ClientControls.UnpressButton("Screenshot"); @@ -554,52 +557,57 @@ namespace BizHawk.MultiClient } } + void StepRunLoop_Throttle() + { + throttle.signal_fastForward = Global.ClientControls["Fast Forward"]; + throttle.signal_frameAdvance = runloop_frameadvance; + throttle.signal_continuousframeAdvancing = runloop_frameProgress; + + throttle.Step(true, -1); + } void StepRunLoop_Core() { - //TODO - this method can't depend on that value of 60. it may run too quickly. - //this method needs to be refactored anyway since I'm not sure that it is where all this belongs - bool runFrame = false; + runloop_frameadvance = false; + DateTime now = DateTime.Now; + double frameAdvanceTimestampDelta = (now - FrameAdvanceTimestamp).TotalMilliseconds; + bool frameProgressTimeElapsed = Global.Config.FrameProgressDelayMs < frameAdvanceTimestampDelta; - //handle unpress of frame advance: do we need to deactivate FrameProgress? - if (!Global.ClientControls.IsPressed("Frame Advance")) + if (Global.ClientControls["Frame Advance"]) { - if (mainLoopData.runloop_frameProgress) - { - mainLoopData.runloop_frameProgress = false; - PauseEmulator(); - } - mainLoopData.FrameAdvanceDelay = 60; - } - - //handle normal frame advance: either countdown, or the initial trigger (which necessitates a pause) - if (Global.ClientControls["Frame Advance"] && mainLoopData.FrameAdvanceDelay > 0) - { - if (mainLoopData.FrameAdvanceDelay == 60) + //handle the initial trigger of a frame advance + if (FrameAdvanceTimestamp == DateTime.MinValue) { if (!EmulatorPaused) PauseEmulator(); runFrame = true; - mainLoopData.FrameAdvanceDelay--; + runloop_frameadvance = true; + FrameAdvanceTimestamp = now; } else { - if (mainLoopData.FrameAdvanceDelay > 0) - mainLoopData.FrameAdvanceDelay--; - if (mainLoopData.FrameAdvanceDelay < 0) - mainLoopData.FrameAdvanceDelay = 0; + //handle the timed transition from countdown to FrameProgress + if (frameProgressTimeElapsed) + { + runFrame = true; + runloop_frameProgress = true; + UnpauseEmulator(); + } } } - - //frame advance: handle the timed transition from countdown to FrameProgress - if (Global.ClientControls["Frame Advance"] && mainLoopData.FrameAdvanceDelay == 0) + else { - runFrame = true; - mainLoopData.runloop_frameProgress = true; - UnpauseEmulator(); + //handle release of frame advance: do we need to deactivate FrameProgress? + if (runloop_frameProgress) + { + runloop_frameProgress = false; + PauseEmulator(); + } + FrameAdvanceTimestamp = DateTime.MinValue; } + if (!EmulatorPaused) { runFrame = true; @@ -614,13 +622,13 @@ namespace BizHawk.MultiClient if (runFrame) { CaptureRewindState(); - DoFrameAdvance(); + Global.Emulator.FrameAdvance(!throttle.skipnextframe); Global.Sound.UpdateSound(Global.Emulator.SoundProvider); + RamWatch1.UpdateValues(); + RamSearch1.UpdateValues(); } } - private bool wasMaximized = false; - private void TakeScreenshot() { var video = Global.Emulator.VideoProvider; @@ -665,227 +673,12 @@ namespace BizHawk.MultiClient Global.RenderPanel.AddMessage("Loaded state: " + name); } - private void exitToolStripMenuItem_Click(object sender, EventArgs e) - { - if (RamWatch1.AskSave()) - Close(); - } - - private void openROMToolStripMenuItem_Click(object sender, EventArgs e) - { - var ofd = new OpenFileDialog(); - ofd.InitialDirectory = Global.Config.LastRomPath; - ofd.Filter = "Rom Files|*.SMS;*.GG;*.SG;*.PCE;*.SGX;*.GB;*.BIN;*.SMD;*.ZIP;*.7z|Master System|*.SMS;*.GG;*.SG;*.ZIP;*.7z|PC Engine|*.PCE;*.SGX;*.ZIP;*.7z|Gameboy|*.GB;*.ZIP;*.7z|Archive Files|*.zip;*.7z|All Files|*.*"; - ofd.RestoreDirectory = true; - - Global.Sound.StopSound(); - var result = ofd.ShowDialog(); - Global.Sound.StartSound(); - if (result != DialogResult.OK) - return; - var file = new FileInfo(ofd.FileName); - Global.Config.LastRomPath = file.DirectoryName; - LoadRom(file.FullName); - } - - private void savestate1toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave1"); } - private void savestate2toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave2"); } - private void savestate3toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave3"); } - private void savestate4toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave4"); } - private void savestate5toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave5"); } - private void savestate6toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave6"); } - private void savestate7toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave7"); } - private void savestate8toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave8"); } - private void savestate9toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave9"); } - private void savestate0toolStripMenuItem_Click(object sender, EventArgs e) { SaveState("QuickSave0"); } - - private void loadstate1toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave1"); } - private void loadstate2toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave2"); } - private void loadstate3toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave3"); } - private void loadstate4toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave4"); } - private void loadstate5toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave5"); } - private void loadstate6toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave6"); } - private void loadstate7toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave7"); } - private void loadstate8toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave8"); } - private void loadstate9toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave9"); } - private void loadstate0toolStripMenuItem_Click(object sender, EventArgs e) { LoadState("QuickSave0"); } - - private void saveStateToolStripMenuItem_Click(object sender, EventArgs e) - { - Global.Sound.StopSound(); - - var frm = new NameStateForm(); - frm.ShowDialog(this); - - if (frm.OK) - SaveState(frm.Result); - - Global.Sound.StartSound(); - } - - private void powerToolStripMenuItem_Click(object sender, EventArgs e) - { - LoadRom(CurrentlyOpenRom); - } - - private void resetToolStripMenuItem_Click(object sender, EventArgs e) - { - if (Global.Emulator.ControllerDefinition.BoolButtons.Contains("Reset")) - Global.Emulator.Controller.ForceButton("Reset"); - } - - private void pauseToolStripMenuItem_Click(object sender, EventArgs e) - { - if (EmulatorPaused == true) - UnpauseEmulator(); - else - PauseEmulator(); - } - - private void helpToolStripMenuItem1_Click(object sender, EventArgs e) - { - - } - - private void aboutToolStripMenuItem_Click(object sender, EventArgs e) - { - new AboutBox().ShowDialog(); - } - - private void controllersToolStripMenuItem_Click(object sender, EventArgs e) - { - InputConfig i = new InputConfig(); - i.ShowDialog(); - } - - private void hotkeysToolStripMenuItem_Click(object sender, EventArgs e) - { - BizHawk.MultiClient.tools.HotkeyWindow h = new BizHawk.MultiClient.tools.HotkeyWindow(); - h.ShowDialog(); - } - - private void displayFPSToolStripMenuItem_Click(object sender, EventArgs e) - { - Global.Config.DisplayFPS ^= true; - } - - private void displayFrameCounterToolStripMenuItem_Click(object sender, EventArgs e) - { - Global.Config.DisplayFrameCounter ^= true; - } - - private void displayInputToolStripMenuItem_Click(object sender, EventArgs e) - { - Global.Config.DisplayInput ^= true; - } - - private void displayLagCounterToolStripMenuItem_Click(object sender, EventArgs e) - { - Global.Config.DisplayLagCounter ^= true; - } - - private void screenshotF12ToolStripMenuItem_Click(object sender, EventArgs e) - { - TakeScreenshot(); - } - + private void SaveSlotSelectedMessage() { Global.RenderPanel.AddMessage("Slot " + SaveSlot + " selected."); } - private void selectSlot1ToolStripMenuItem_Click(object sender, EventArgs e) - { - SaveSlot = 1; - SaveSlotSelectedMessage(); - } - - private void selectSlot2ToolStripMenuItem_Click(object sender, EventArgs e) - { - SaveSlot = 2; - SaveSlotSelectedMessage(); - } - - private void selectSlot3ToolStripMenuItem_Click(object sender, EventArgs e) - { - SaveSlot = 3; - SaveSlotSelectedMessage(); - } - - private void selectSlot4ToolStripMenuItem_Click(object sender, EventArgs e) - { - SaveSlot = 4; - SaveSlotSelectedMessage(); - } - - private void selectSlot5ToolStripMenuItem_Click(object sender, EventArgs e) - { - SaveSlot = 5; - SaveSlotSelectedMessage(); - } - - private void selectSlot6ToolStripMenuItem_Click(object sender, EventArgs e) - { - SaveSlot = 6; - SaveSlotSelectedMessage(); - } - - private void selectSlot7ToolStripMenuItem_Click(object sender, EventArgs e) - { - SaveSlot = 7; - SaveSlotSelectedMessage(); - } - - private void selectSlot8ToolStripMenuItem_Click(object sender, EventArgs e) - { - SaveSlot = 8; - SaveSlotSelectedMessage(); - } - - private void selectSlot9ToolStripMenuItem_Click(object sender, EventArgs e) - { - SaveSlot = 9; - SaveSlotSelectedMessage(); - } - - private void selectSlot10ToolStripMenuItem_Click(object sender, EventArgs e) - { - SaveSlot = 0; - SaveSlotSelectedMessage(); - } - - private void previousSlotToolStripMenuItem_Click(object sender, EventArgs e) - { - if (SaveSlot == 0) SaveSlot = 9; //Wrap to end of slot list - else if (SaveSlot > 9) SaveSlot = 9; //Meh, just in case - else SaveSlot--; - SaveSlotSelectedMessage(); - } - - private void nextSlotToolStripMenuItem_Click(object sender, EventArgs e) - { - if (SaveSlot >= 9) SaveSlot = 1; //Wrap to beginning of slot list - else SaveSlot++; - SaveSlotSelectedMessage(); - } - - private void saveToCurrentSlotToolStripMenuItem_Click(object sender, EventArgs e) - { - SaveState("QuickSave" + SaveSlot.ToString()); - } - - private void loadCurrentSlotToolStripMenuItem_Click(object sender, EventArgs e) - { - LoadState("QuickSave" + SaveSlot.ToString()); - } - - private void closeROMToolStripMenuItem_Click(object sender, EventArgs e) - { - CloseGame(); - Global.Emulator = new NullEmulator(); - Text = "BizHawk"; - } - private void emulationToolStripMenuItem_DropDownOpened(object sender, EventArgs e) { powerToolStripMenuItem.Enabled = !IsNullEmulator(); @@ -898,10 +691,7 @@ namespace BizHawk.MultiClient if (didMenuPause) pauseToolStripMenuItem.Checked = wasPaused; } - private void clearToolStripMenuItem_Click(object sender, EventArgs e) - { - Global.Config.RecentRoms.Clear(); - } + private void UpdateAutoLoadRecentRom() { @@ -917,11 +707,6 @@ namespace BizHawk.MultiClient } } - private void autoloadMostRecentToolStripMenuItem_Click(object sender, EventArgs e) - { - UpdateAutoLoadRecentRom(); - } - private void fileToolStripMenuItem_DropDownOpened(object sender, EventArgs e) { if (IsNullEmulator()) @@ -1101,16 +886,6 @@ namespace BizHawk.MultiClient RamSearch1.Focus(); } - private void RAMWatchToolStripMenuItem_Click(object sender, EventArgs e) - { - LoadRamWatch(); - } - - private void rAMSearchToolStripMenuItem_Click(object sender, EventArgs e) - { - LoadRamSearch(); - } - private int lastWidth = -1; private int lastHeight = -1; @@ -1186,62 +961,7 @@ namespace BizHawk.MultiClient } } - private void zoomMenuItem_Click(object sender, EventArgs e) - { - if (sender == x1MenuItem) Global.Config.TargetZoomFactor = 1; - if (sender == x2MenuItem) Global.Config.TargetZoomFactor = 2; - if (sender == x3MenuItem) Global.Config.TargetZoomFactor = 3; - if (sender == x4MenuItem) Global.Config.TargetZoomFactor = 4; - if (sender == x5MenuItem) Global.Config.TargetZoomFactor = 5; - if (sender == mzMenuItem) Global.Config.TargetZoomFactor = 10; - - x1MenuItem.Checked = Global.Config.TargetZoomFactor == 1; - x2MenuItem.Checked = Global.Config.TargetZoomFactor == 2; - x3MenuItem.Checked = Global.Config.TargetZoomFactor == 3; - x4MenuItem.Checked = Global.Config.TargetZoomFactor == 4; - x5MenuItem.Checked = Global.Config.TargetZoomFactor == 5; - mzMenuItem.Checked = Global.Config.TargetZoomFactor == 10; - - FrameBufferResized(); - } - - private void enableFMChipToolStripMenuItem_Click(object sender, EventArgs e) - { - Global.Config.SmsEnableFM ^= true; - } - - private void overclockWhenKnownSafeToolStripMenuItem_Click(object sender, EventArgs e) - { - Global.Config.SmsAllowOverlock ^= true; - } - - private void forceStereoSeparationToolStripMenuItem_Click(object sender, EventArgs e) - { - Global.Config.SmsForceStereoSeparation ^= true; - } - - private void recordMovieToolStripMenuItem_Click(object sender, EventArgs e) - { - RecordMovie r = new RecordMovie(); - r.ShowDialog(); - } - - private void playMovieToolStripMenuItem_Click(object sender, EventArgs e) - { - PlayMovie p = new PlayMovie(); - p.ShowDialog(); - } - - private void stopMovieToolStripMenuItem_Click(object sender, EventArgs e) - { - - } - - private void playFromBeginningToolStripMenuItem_Click(object sender, EventArgs e) - { - - } - + private void viewToolStripMenuItem_DropDownOpened(object sender, EventArgs e) { displayFPSToolStripMenuItem.Checked = Global.Config.DisplayFPS; @@ -1293,42 +1013,35 @@ namespace BizHawk.MultiClient startPausedToolStripMenuItem.Checked = Global.Config.StartPaused; } - private void pauseWhenMenuActivatedToolStripMenuItem_Click(object sender, EventArgs e) - { - Global.Config.PauseWhenMenuActivated ^= true; - } - - private void soundToolStripMenuItem_Click(object sender, EventArgs e) - { - SoundConfig s = new SoundConfig(); - s.ShowDialog(); - } - private void MainForm_Load(object sender, EventArgs e) { } - private void rAMPokeToolStripMenuItem_Click(object sender, EventArgs e) + private void frameSkipToolStripMenuItem_DropDownOpened(object sender, EventArgs e) { - RamPoke r = new RamPoke(); - r.Show(); + miDisplayVsync.Checked = Global.Config.LimitFramerate; + miAutoMinimizeSkipping.Checked = Global.Config.AutoMinimizeSkipping; + miLimitFramerate.Checked = Global.Config.LimitFramerate; + miDisplayVsync.Checked = Global.Config.DisplayVSync; + miFrameskip0.Checked = Global.Config.FrameSkip == 0; + miFrameskip1.Checked = Global.Config.FrameSkip == 1; + miFrameskip2.Checked = Global.Config.FrameSkip == 2; + miFrameskip3.Checked = Global.Config.FrameSkip == 3; + miFrameskip4.Checked = Global.Config.FrameSkip == 4; + miFrameskip5.Checked = Global.Config.FrameSkip == 5; + miFrameskip6.Checked = Global.Config.FrameSkip == 6; + miFrameskip7.Checked = Global.Config.FrameSkip == 7; + miFrameskip8.Checked = Global.Config.FrameSkip == 8; + miFrameskip9.Checked = Global.Config.FrameSkip == 9; + miSpeed100.Checked = Global.Config.SpeedPercent == 100; + miSpeed150.Checked = Global.Config.SpeedPercent == 150; + miSpeed200.Checked = Global.Config.SpeedPercent == 200; + miSpeed75.Checked = Global.Config.SpeedPercent == 75; + miSpeed50.Checked = Global.Config.SpeedPercent == 50; + miAutoMinimizeSkipping.Enabled = !miFrameskip0.Checked; + if (!miAutoMinimizeSkipping.Enabled) miAutoMinimizeSkipping.Checked = true; } - private void saveWindowPositionToolStripMenuItem_Click(object sender, EventArgs e) - { - Global.Config.SaveWindowPosition ^= true; - } - - private void startPausedToolStripMenuItem_Click(object sender, EventArgs e) - { - Global.Config.StartPaused ^= true; - } - - private void luaConsoleToolStripMenuItem_Click(object sender, EventArgs e) - { - BizHawk.MultiClient.tools.LuaWindow l = new BizHawk.MultiClient.tools.LuaWindow(); - l.Show(); - } } } \ No newline at end of file diff --git a/BizHawk.MultiClient/MainForm.resx b/BizHawk.MultiClient/MainForm.resx index 88ec8fcc3e..024b7c8da3 100644 --- a/BizHawk.MultiClient/MainForm.resx +++ b/BizHawk.MultiClient/MainForm.resx @@ -120,6 +120,9 @@ 17, 17 + + 30 + diff --git a/BizHawk.MultiClient/Properties/Resources.Designer.cs b/BizHawk.MultiClient/Properties/Resources.Designer.cs index 0e52cfb26f..ca630965e4 100644 --- a/BizHawk.MultiClient/Properties/Resources.Designer.cs +++ b/BizHawk.MultiClient/Properties/Resources.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:2.0.50727.3053 +// Runtime Version:2.0.50727.3615 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -116,6 +116,12 @@ namespace BizHawk.MultiClient.Properties { } } + internal static System.IO.UnmanagedMemoryStream nothawk { + get { + return ResourceManager.GetStream("nothawk", resourceCulture); + } + } + internal static System.Drawing.Bitmap PCEngineController { get { object obj = ResourceManager.GetObject("PCEngineController", resourceCulture); diff --git a/BizHawk.MultiClient/Properties/Resources.resx b/BizHawk.MultiClient/Properties/Resources.resx index e4dfd1b17d..b729771acb 100644 --- a/BizHawk.MultiClient/Properties/Resources.resx +++ b/BizHawk.MultiClient/Properties/Resources.resx @@ -160,4 +160,432 @@ ..\images\undo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + AAEAAAD/////AQAAAAAAAAAEAQAAABZTeXN0ZW0uSU8uTWVtb3J5U3RyZWFtCgAAAAdfYnVmZmVyB19v + cmlnaW4JX3Bvc2l0aW9uB19sZW5ndGgJX2NhcGFjaXR5C19leHBhbmRhYmxlCV93cml0YWJsZQpfZXhw + b3NhYmxlB19pc09wZW4dTWFyc2hhbEJ5UmVmT2JqZWN0K19faWRlbnRpdHkHAAAAAAAAAAACAggICAgB + AQEBCQIAAAAAAAAAAAAAAHhiAAB4YgAAAAEAAQoPAgAAAHhiAAACUklGRnBiAABXQVZFZm10IBAAAAAB + AAEAIlYAACJWAAABAAgAZGF0YYBhAAB/f39/gICAgH9/f39/gICAgH9/f4CAgIB/f39/gICAf39/gIB/ + f39/f39/f3+AgH9/f3+AgIB/f39/gICAf39/gICAgIB/f39/f3+AgICAf39/gICAgH9/f4CAgIB/f39/ + gICAgH9/gICAgH9/f3+AgIB/f39/f4CAgIB/f3+AgIB/f39/gICAf3+AgIB/f39/gICAf39/gICAf39/ + f4CAgH9/f3+AgH9/f4CAgH9/f3+AgIB/f3+AgICAf3+AgH9/f3+AgICAgICAgH9/f39/f3+AgICAf39/ + gICAgH9/f3+AgH9/f3+AgICAf3+AgICAf39/gICAgICAf39/gICAgH9/f4CAgH9/f4CAgH9/f3+AgIB/ + f3+AgICAf39/f39/f3+AgIB/gICAgH9/f4CAgH9/f4CAgIB/f3+AgIB/f3+AgIB/f3+AgICAf39/gICA + gH9/f3+AgIB/f39/f4CAgICAgICAgICAf39/f39/f3+AgICAf39/gICAgH9/f4CAgH9/f4CAgH9/f4CA + gICAf39/f3+AgIB/f3+AgICAf39/gICAf39/f4CAgH9/f4CAgH9/f4CAgIB/f3+AgICAf39/gICAgH9/ + f4CAgH9/f3+AgIB/f39/f4CAgH9/f3+AgIB/f3+AgICAf39/f4CAgICAgIB/f3+AgIB/f39/gIB/f3+A + gIB/f3+AgIB/f39/gICAf3+AgICAf39/f4CAf3+AgICAgICAgIB/f3+AgH9/f3+AgICAgH9/f39/gIB/ + f39/gICAgH9/gICAgH9/gICAf35+f39/f39/gIGBgYCBgYGBgIB/fXp4eH2Bg4OCg4WHh4R/e3p7fH19 + fXx+gYSEgoB/f4GBgYB/f3+Af39+fXx8fn+BgYGBgoODgoB+fX1+fn9/fn6AgYGBgH+AgIGAgICAgICA + gH99fX5/gICAf4CAgYKBgH9/f39/f35+f3+AgICAgICAgIGBgH9/f39+f3+Af39/gICAf4CAgICAgH9/ + f39/gICAgICAgH9/f39/f39/f3+AgH+AgYGAgIGCgH57eHp/g4KAfn+DhYaFgH18fn9/fXl4fYOFhIKB + gYKEhYWFgHNobHqDhIF+gYyVlYt/eHR1en58dnR6hIuKgnx9gIKEhIB+gYODg4F7dXV5fH+Afn+Fh4aF + gn9+gYF/gH16fH9+e3p4eYCFhoaGhIWIhYB9enZ3fH18fn5/goaFg4GAgIODgH9+fHt/fnx7fH1/goOE + hIOCgoJ/fXx6e31+f39/gYKBgoKAfoCAf4CBfn1/gH9/fn1+gIGBgYCBgoGAf399fH1/f4CBgYGCgoKC + g4F+fHp6e3x9f4CBgoODg4OEg4SGhn9vX2FyhZCTkIuIiYeDfnt4dXl8dnF1foiQjYWDh4yRiW5TVGmB + joyCg5Kgo5eBbWRlb3p9dXJ+kZmTh314eoCBgoaCeXR0dHmChYiLiYKBgoSJin5mVl93iYyDfIOYp6SR + emxpb3h7dGhpf5abkIJ8gYuOhnt0dHmAg31zbnF/jJGPiIOFiYiEeWddZneDiIWCiJSalYd3cG90e315 + dHiEjY2FfXp9goaEgH+Ag4aFgHl1dXl8fHp8gomMiYSBgYWGgn15eHyCgnZlYW6BjpCMjJKbnpN9a2Nj + aXB0c3aDk5yaj4WAgYJ+d3Z3eXx/e3V1eH2EiouMi4mHhH15d3h7fn54amBqfouPjo+YpaaWfWlfXmBl + cHqEkpmUioSDiIyHfHFucnh6eXl8hJCZm45pSFFxhIeDhJm1u6WDaF1bXWFrc3uOoJ6LenqNnZiDbWdv + eHhzcHWGnKGFXFNrh5GIfICasq2RcF1ZYGt0c253lKypkXl2hI+Kd2psdHh5fH2DlZ+LZlZnf4uJgHyN + pKmWe2heYWx4eXF1jKetm4J0dnx6bmVqe4mPjYN7gZCbl4ZwX1tqe3xzb3uTqqyZgnZ3fHx0aWVrfI6V + joF8go2QhHRudoGGgXdydoGMjYeCgoWIiYeAcFhSZn2HiIiNn66qlXtqY2JnbG9vdYebo5qLgH5+fnZv + c3x+fHl4fIeTlY2DgIWOjXRNOlB0jpaRkqO2uaN/YlJRXGxyb3WIm6GYh3+FjY+Gd21sbnR5eHZ+j6Gq + l2Q/UHaKiX9/l7W8o31gVVdfbnl2epKknoZydo6emIJrZnF4d3Z5gZOcfFFQbIeVkYiTr72rg19OS1Rk + cGttjK23pYZ3h52dhmVUXGlvdICRmYhnYniJjYqDiaKypodmVVNXYHN7dIGnvbCQcml4iYl4aWpzd3h7 + g5Gio3tQUnGKkIJzfqCypodqW1ljdYJ7dYeir6SGaWJrdXZ1fY2Rhn19f4iYoJJzU0pfeH94cHmavMKr + h2pkbHBsY1tlh6aploF4fYR+cnB7i5OKd21xgJSdlIFvX15udnBrdJCwv7KVeW5uaWBaXGd/nbCrk3xz + dHV2d3qAhoN5dX2JkZSPiIaDb04/UGqAlaSuvL+ri3BdTEVQZ3mCjpuemIyEhoyLgXZxdHNtbHWEmKme + aTxKdZGViH6Vv8unc1BFS15vb2h4nrSwlXVzkquhelRMXW55g5CYhmBXdIuOiYSNr8WxiGJOS1FWXWd0 + kLG+qol7jaOihl9HUGRxfIyTeFNeiKGhloyYuMCca0w+PkpZaXN7msLUwJJ1gZeTc0s4SGN5k6iVYlB1 + n6mYgoGgwrmGVkE+R1lrdnqJq8nKp3lqe4uDaVFQZHN+jZqioYNfYHR9gYOBkq2wmnpfU1FVaIGFhZ21 + sZd2YWJzhId9d3d1d4ORnqaTXzxPdImHeXeWws2re1hJT2N3eW1ylLO4nXJVYYKVkoJ0c3p+f4OLlZJy + UFRtgoyGfYytu6iEZVdWYHB6d3qPo6maeF1edY2Xj4F6eXp8fXyCk5+UcEhDX3Z+hI+jvsq3kGpQRkxa + anR5iqKpmYJ4gZGWi3xzcGtlZ3KEnKyZYUBXfpGUiIKdwL6ZbE1CSl9wdXmMoaeeiHqKpaiPaEtLX3F/ + kZ+KWkxylJaLhI+30rmCVUNCR05cboCctryrjHyOpqB9VUBMZHKAlpRlSnCfrKGPiKLFuoRRQT43PVd9 + m6y1tK6di4yWi2xJOkpsiJyWZjpWmsC7m3+TxMiUVjMvPVJia22Es9bXtId2iZqHWTExUXKImqaMW1uM + raSNfoy1wphdPTtIV2NweIGjydO4iWt5k45sQzJMcIOXr6d4WGyPmYl2d5e+u4ldT05RXGt3fYupw8Kg + cFtvh4dyXl1rdXuJmKSvnmhJWnB9hn55lLO1mnRbUlVqhIh7hJylmn5hW3KRopmBbWdsfpKdl3tSRWaI + joJ1fabPyZhlTEtZa3Nwbn+iuq6IYllykpyNenBzeXd0eYieqpdmQUlrg4V/haLEw6B4XlFSY3NzbHWP + o6GJc3qUpJ6Fa2Nrbmxyf5KjlGBCWXuOlZOYtMizhl5JQUZUZ3J9mLGxoYyAjKCdf15MUWFsdIKarZxs + V2uAiY+QlKy4nnRYSj8/V4SlppaMkJeZm5eJdmNUVmd5jJd1QEuIrqych4+70KptRjw5PE9tgYycr7q0 + oZaXlIFdOjlYdIiVfUxRi7W6poqLtsqkZzwvMD1ZeoyMlKi7vKyblZF9WTk1UXWJelFKea/IxaqSosCy + e0QnJDlUZ294lcHf0qWEhZKSeUwqMlRxh5mYd2GBqrGdh4Sfu6p1RDZAUWBnanaey9a+lXJ4l5p7UTdA + XnSDlaOTbmeInI9/f46tvqBrT05SVFxrd4KbusOwinB5kZFzVE1ecHV5h5uqnnRcaXuGj4yHlqWbg2lU + TlZnfIaGlK61n39rbHeBgnlvbGxwgpaio45kT2WAiIF1eZm4t5ZtU1Jebnx+eYSjtKWAXVVsjJeKeHF4 + hIeAfoeYn4pfQkxofoiJj6jDvpt0XFNWXWlydH2Top6MfH2Pm5N8aWlvcXF0fZKnm2c/T3iQlZGSp722 + kWZMQ0dZbniAlayqloR7hZqeh2ZWXWtwcXiIorGSWk1mfo6VjZGstZhwVktLVnKTno58e4iWmZSSjoV0 + Y19pd4SRg1ZHcJWakoiPtNC7hltKREFMZHqDjp2nqJ+VlpmQd1hKVmp4hI12UFyOq6aWipW1vJhlSEFG + VGVzfYKPo7OyoZWVkoFgQj9WcYeWhllUiLOwmIKGrMasckU6RVdiZmh3mru/rZKFk6adckY5SVxoc4eg + nn94j5mRioWInKSLaFVSVVtmdH+SrLmyl3Nsh5uRdFNKX3F1eoWZsKx+WF5zgIeEgpSrqZFzWUpPYXOA + ipyvr5h5aniLjX1pYWl1enl6hJmxsolSQ1x5hH54irDBrIJfUVNecoKDhpaloopuZHKFjId8dXZ3dHmE + jpejoXxKQGF7fnyAkbPErIVqXFlga3J0fJCkpI90anmMkINzcnt9d3Z6gYuZoZp/WEZYcHuBhZGrvLGU + dmFZXmhvcneDkpiPf3qGlpiLe3BtbXF1eYCNnKCFV0ZgfoqKiJKtvaqDZVdSVWFve4iWnp6RgH6NlY15 + ZFxod3l3eoOTpKyheEdBYXmBhYaSrbmlg2dYVmJ7j49+bWl2iZOaoJySgW5na25yfYqPgGFWbIGGiZCd + tL+qgmBTUVJZa3yHjpCPj46RnqWagmhaXGRnbHmOnY5uZnqKkZKMkKOplXVaTEtWa4GOkZOVlY+Hi5SU + inReW2VsdoeVkHVhb4aMh4SJnraykXBcUU1SYnJ/kaWroYx6gJOYhm9fYW5ycXWBkqaieVNadIaNi4iX + ra2TcVZJTmBzgIqcqKGOe296j5eJc2Jjcn59en6NoKWIXEladYeMjJSnsKKGaldQV2h4gIiapJuIeXeC + jYp8bWlvd3t+gIOLlp6djmtJSWN3gIWKlq23poVsY15eaHZ6fImWlo+EeXqEioeCfHNwc3l+gYaOlJOJ + cFZXaHR+ipSgra2cgmtdVVZidH2Fl6aklYV4dXt/enNycnJ3gYiOkZGNi4yMflo9RmaClZyYobGwmHtj + U1BccYCDg4qUm5WDeXyFi4Z3a2hrdoOKiYmNlZqSc0tBW3yNk5GSoq+jhGlcWF9xgoWDiY6Oi4WBhYiC + d25tc3yBhYaFh4uPkY98Vz9Sc4iUl5Ocr6+UdF1RWXaPj3tmZXmQlZCPk5WPgXFqbHB3f4GEjYxuUldu + gpWkqKuuooVpWU5IVXaQk4qFhYyVlpWTi31wZ2RmaG9+j5qdjm5daXuDiYyRoauZc1tdaG91e36AiZCO + hoGDjpaRgGtjbHh6eXyIlpFwWWR4hY+TlaKsoodrV01NXHaKj5KXl4+Hho2Sjn9tYmNmaXOBjZypnHRa + YnJ+hISIm6ykiW1bVlljdYaTn6GYh3RvgJCOgG9kZ3R9f4CGj5umoX9SQVZve4KJlai1rJBzYVpbZnV9 + gIiUmZOFenyFiIB2c3NxcnqCh4yQkI6MiYV0U0NWcYWUmJair6qUe2RUVGN0fHp7iZqgloR6foiKgHBo + aHF9hoiEhIqRlpOAXUZUdouOiIeWq66YeGJYWmh6gX5/jJyhlH1tbXmHiHxxbXB7iY+Lh4mKhX5+hohz + UUpkgZGUjo6eq6WOdGBYXWx8fnZ6jp+fjXh0gIuKfW5pbXeCiomDg4iNj46GcFBJY36KjY2SpbGmjHBe + WF1qeX57f4uXmo+DgYaIgXNrbnN2fIGCgYOIjI6Rk4hmS1NwhYuIiJapqZV8Z1tdb4eTiXdsdIePioeK + j46Edm9ucHV6foGIlpyJYExdeo+Yl5GYoJiAaFlTXXeTnZF/d4KOi4KChIR/dWxscXiCjZCOkZiPbEtM + Y3yQmJWYoJyLeXFtbHJ8gHlwb3uJi4mPlpWOgHJwc3N0eoKJjX5hV2l+i5OYnaepl3xoXFddaXZ+g4iQ + lZGJh4yRjoBvZmlucnd7g5Ghn4BcWGyAiomFjp+jlH5tYFthcICLkpOPioF4fIqQiHptanN8fn6ChoyU + mI1wUU5lfIiPkZajqp2DbFxVWmx+hYSLmJ+bjHt0eXx5dXNvbXSCjpKRj42HgHx+g3xfSFV2jZWTj5em + qZqBaVpVX3R/eXaClqSfinp8homAcmdjaXiGiYeGi5GUkY2GcVNKYHmCg4WPoq2kkHxuZWVteH14eIWT + lIl6dHyKkIyCd29scnyCg4OGiISBgYaMj4NjTVt1hImIhZOqsaCGbFpZZ3V5c3KDm6SYgXN4iZOMe25m + aHSAgoCBipOUjomJhW5RTGJ5hoyOlKKpoY97a19danl6c3aGlZiOgX+HkpKHeGpiZHB6fYCHkJSSioKA + houJgG1TSl96homKlKm5sZR2Y1xcZG91dnuFkZeRiIyVkoRzZmVqcXZ8gYaLkZWam4xmRktnfYeJh5Oq + saCGb2BbZnqEfXJzgZGVjYeKjIqAcmxvdHuAgHx8g46Wlo1yVFNvho+NhoufpZB0ZmVue4J/eHV9i5WR + gXh+iIuBcGlzgIaEgX+FkZmTc0pFZoaSk46RoaqZfGdgZW51eXh2f4+ZlYd/ho+NfWhhbHl9fn6BiJKa + nJBvT09rgoiEgYyjrJ6Fb2JgaHV+f36Fj5CJf36HkY5+bmhrdX6Bfn6EjpSVj4JrV1pufoWGh5CfpZmD + cGRiaHV/gH2DkpuUgnV0fYeJgnhybm91f4aJjJCQh3x2eX+Fh4FwXVttgIiHhY+ntquPcmBbX2Vqa218 + laimk4ODjZKHdWVfYmhvdn6Jl6Kil4d8en6Ae29dT1l0h4yMjpistqiKcGJeYGRoaWt5kKCil4eDjJaT + hHRnYGBjaG57jZ2jnpSNiYV/d3Bsa2lgW2h9jJWdoqiroo54Z1pWWmFpcHyPoKehl5CKhHpvam1vbm1v + dYGOmJuXkIiDfnhzb21xeH19dW52iJOVko+QlZOGdWdfXmRveH6FkZ6moZGBeHVybm1wdXp+goSFiI2O + ioR+e3p6eHh4eXt+gYSJj4x6ZWV3hoqIhYmVmpB9bmViaHWCh4eJjpKOg36EiYd+cmxtcHN5f4OHio2O + ioSDg4B7dnN1eoCAdGNkfJGYlo+OmJ+UfmldXGJud3p8hpWgn5KHhYmIfGpeX2hxeH2CipWdnJKGfnx7 + dnFub3FsaHKEkJSVlJifmol3a2RiZGtzeX+Ik5qXkIyMi4R3amZpbG90e4OKkJOSj4uIg312b2tudHqA + fXNxgZOZlo6IjJKMfGxiYmhxeX5/hJGhpJeGfHt9eW5mZ295gIKChYySk4+GfHl7e3h1cHB3gIeMjIFy + c4KLiYN+gIyTjH1xbW9zd3p7e4GQnJyPgHp6fHhua3N9goKBgYWMkY+If3l4d3Vxb3J7hYmIhoaKjYyH + gHt5eHFkY3GAiY2NkJiclId7cWtqbXFzdX2JlJaPh4OChIF5dXh4dXR0d3+HjZCQi4aAe3h1cXB1en6B + hIaIjI2Lh4J+fHx0Z2JsfYeKioyUmpeLfnVvbG1wcnJ2gZCXk4mEhYaEfHRzdnp9fHt6fIGHiomIh4eF + f3hycXN4fX+AgoWJioiGg4GBfnl1dXd8gH95d3+Jj4yGgoWJiIB2cG90eXt9fYCHkJKMhH9+f314c3N3 + fYGDg4KDhYeGgn18foCAfHd4fICCgoKDhYWDgH16en2Af319foCCgoGBgoSEg4B/fXl0dHl/goSGh4qL + h4N+eXZ2eHp8fX+Dh4iFgoCBgYB9ent9f4CAgH9/f4B/f3+BgoOEgn59f39+fHx8foCCg4KBgoOBf359 + fH5/f39/gIGCgH9+fn5/f4CAgICBgYGAgIB/fXx7ent9gYWHh4eHhoN/e3d2d3l7fH+EiIqJhoJ/fn19 + e3p6fH+AgH+AgYKCgoCAf4CAf359fX5/f39+f3+BgoODgoKCgH57e3t9fn+AgoOEhISDgX99fHt6eXt+ + gIKDg4OEhYOBf318fHx7e3t8foGDhIWFhYWFg4F+e3l4eHl6fH+ChYiIh4WDgX99enh5e31/f35/goSF + hIKBgH9+fXx8fH5/f39/gIKDgoGAf39/f39+fn5+gICAgIGBgYGAf4CAgICAf35/f4CAgICAgIB/f39/ + f4B/f35/gICBgYGBgIB/fn5+fn5+f4CAgIGCgoCAf35+fn5/f4CAgYGBgYGAgH99fHx9f4CBgoKCgoGA + gH99fHx8fX5/gYKDg4KBgIB/fn19fX1+f4CBgYGBgYCAf35+f4CAf3+Af39/fn1+f4CBg4SDgoF/fn18 + fH1+foCBgoKCgoKCgH9+fn5+fX1/gICAgIB/gIGBgYB/f4CAgH9+fn5/f3+Af4CAgYGAgICAgH9/f3+A + gIB/f35+fn5/gIGBgYKBgYB/fn5+fn59fX6AgYKCgoGBgYB/fn59fn+AgICAf39/gICBgYGBgH9+fn19 + fn+AgIGBgYGAgH9/f39/f3+AgICAgICAgIB/f39+f39/gIGBgYGAf35+fn5+f4CAgICBgYCAf39+f3+A + gICAgICAf39/gICAgH9/f4CAgIB/f39/gICAgIB/fn5/f39/gICAgICAgYGBgH9+fXx8fX5/gYKDg4KC + gYB/fn59fH1+fn+BgoKCgoKBf35+fX19fn5/gIGBgYGAgICAgIB/f39/f35+fn+AgYGCgYGBgYB/fXx8 + fX5/gICBgoKCgYGAf35+fX19fX6AgYGCgoKBgH9+fn5/f3+AgIB/f39/f4CBgYGAf39/f39/f4CAgIB/ + f39/f3+AgICBgYB/f4CAf39/f39/fn5/gIGBgoGBgH9/f35+fn5/gICAgIGBgICAf39/gICAgH9/f4CA + gIB/fn5/f4CAgYGAgICAgICAf39+fn5+f4CBgoGAf35+f3+AgYGBgH9/f39/f39/f39/gIGCgYGAgH9/ + f39/fn19fX6AgYKDgoKBgH9/fn5+fXx8fX+AgYKDg4KBgIB/f359fX19fn+AgoODgoF/f39+fn5+fn5+ + f4CBgYGBgIB/f3+AgIB/fn1+f4CBgYGBgYGBgIB/f359fHx9f4GDhISDgoB/fn18fHx8fX6AgoOEg4OB + f35+fn19fX1+fn+BgoODg4GAf35+fn5+fn9/f3+AgYGBgYCAf39/f39/fn5+fn9/gIGBgIB/gICBgYB/ + fn5+fn5/gICBgYCAgICAgICAf35+f39/f39/gICAgYGBgIB/fn5+fn+AgICAgICAgYGBgYB/fn1+f3+A + gICAgYGAgIB/f35+fn9/gIGBgIB/f3+AgICAf39/f39/f39/f4CAgICBgYCAf35+fn9/gICAgICAgH9/ + f39/f39/gICAgIB/f39/gICAgYCAf39/f39/f39/f3+AgICAgIB/f35/f39/gICBgYGAgH9/f39+fn9/ + gICBgYGBgYB/fn5+fn5/f4CBgYGBgH9+fn9/f39/f4CAgYGAgICAgH9/f35+f3+AgICBgYGAf39/gICA + f35+fn9/f39/gICAgYGBgYGBf359fX1+f3+AgICBgYGBgYCAf39+fn5/f39/fn+AgICBgYGBgH9/f39/ + f39/f39/gICBgYGAf35+f4CAgICAf39/f4B/f39/f3+AgIGBgYB/fn5/f39/f3+AgICAgIGAgIB/f39/ + gIB/f35+f3+AgICAgICAgICAgIB/fn19fn+AgYGCgYGBgH9/f35+fn5/f4CAgYGBgH9/f4CAf39/f3+A + f3+AgICAgICAgICAf39+fn5+f3+AgICAgICAgYCAf39+fn5/gICAgICAf39/f4CAgICAgIB/f39/f39/ + f3+AgICBgYCAgH9/f39/f39/f39/gICAgIB/f3+AgICAf39/f39/f4CAgICAgH9/f3+AgICAgICAf39/ + f39/gICAgIB/f39/f4CAgYCAf39/f4CAgICAgIB/f39/f3+AgICAgICAgH9/f35/f3+AgICAgICAgICA + f35+fn5/gICAgIGBgYGAf39/fn5+f3+AgIGBgICAgICAf39/f35+f3+AgICAgIB/f3+AgICAf39/gICA + gIB/f39+fn5/gICAgICAgYGBgH9/fn19fX5+f4CBgYGCgYGAgH9+fn5+fn+AgICAgIGBgYGAgH9+fn5/ + f4CAgICAgH9/gICAf39/f39/f4CAgICAgIB/f39/f35+f4CAgYGAgICAgH9/f39/f39/f4CAgYGBgICA + gIB/fn5+fn9/gICAgICAgICAgH9/f35+fn5/gIGBgYGAf39/f39/f4CAgICAgH9/f39/f3+AgICAgH9/ + gICAgICAgH9/f39/f39/f39/gICBgYCAgICAf39/f39/f3+AgICAgYGAgICAf39+fn5/f3+AgIGBgICA + gICAf39/f39/f3+AgIGBgIB/f39/f3+AgH9/gICAgIB/f39/f39/gICAgICAgICAgH9/f39/f3+AgICA + gICAgH9/gICAf39/gIB/f39/f39/gICAgIB/f39/f39/f39/f4CAgIGAgH9/f39/f39/gICAgICAgIB/ + f35+fn9/gICAgICAgIB/f39/f39/f3+AgICAf39/f3+AgICAgIB/f3+AgH9/f39/gICAgH9/f4CAgICB + gIB/fn5/f4B/f39/f4CAgICAf39/f39/gICAgIB/f39/gICAf39/gICBgYCAgH9/f39/f39/f4CAgICB + gYCAf39/f39/f39/f39/gIGBgYGAgICAf39/f35+fn5/gICBgYGBgYCAgH9/fn19fX5/gIGCgoKBgYGA + f35+fX19fn+AgYKCgYGAgICAf39+fn5+f3+AgYGBgICAgICAgH9/f39/f3+AgICAgICAgICAgH9/f39/ + gICAgIB/f39/f3+AgIB/f3+AgICAgIB/f39+fn9/f4CAgICAgYGAgH9/fn5/f39/f3+AgIGBgYCAgH9/ + fn5+f3+AgICAgICAgICAgH9/f39/f3+AgICAgICAgICAgH9/f39/f39/f39/gICAgICAf39/f39/f39/ + f4CAgIGBgIB/f35+fn9/gICAgICAgH9/f39/f39/f3+AgH9/gICAf39/f4CAgICAgH9/f39/f39/f4CA + gICAgIB/f39/f4CAgIB/f39/f39/f3+AgICAgIB/f39/f39/f4CAgICAgICAgH9/f39+fn9/gICAgICA + gICAgICAgH9+fn5/f39/f4CBgYGBgYCAf35+fn5/f39/f4CBgYGBgYCAf39+fn5+f39/gICBgYGBgIB/ + f35+f39/f3+AgICAgICAf39/f39/gICAgICAgH9/f4CAgH9/f4CAgIB/f39/gICAgIB/f39/f39/f4CA + gICAgICAf39/f39/f4CAgICAf39/f39/gICAgICAgICAgH9/f39/f39/f4CAgICAgICAgIB/fn5+f39/ + f3+AgIGBgYCAgH9/fn5+fn5/f4CAgIGBgYCAgH9/fn5+f39/gICAgICAgICAgICAgICAf39/f39/f3+A + gIGBgYCAf39/fn5+f3+AgICAgICAgH9/f39/f39/f4CAgICAf39/f4CAgICAgICAgH9/f39/gICAgIB/ + f39/gICAgH9/f39/f3+AgICAgICAgICAgIB/f39/f3+AgICAgICAgH9/fn5+fn9/gICAgICAgICAgH9/ + f35+f3+AgICAgICAf39/f39/f39/gICAgICAf39/f39/f4CAgICAgIB/f39/f3+AgICAgIB/f39/gICA + gICAgICAf39/f39/gICAgICAgH9/f39/f39/f39/gICAgICAgH9/f39/gICAf4CAgICAgICAgH9/f39/ + f3+AgICAgICAgIB/f39/fn9/f3+AgICBgYGAgIB/f39+fn5+f3+AgIGAgICAgIB/f39/f39/f3+AgICA + gICAgICAgICAgH9/fn5+fn+AgICBgYGAgIB/f39/f39/f39/f4CAgICAgICAgH9/f39/f39/f3+AgICA + gICAgH9/gICAgICAgIB/f39/f39/gICAgICAgICAf39/fn5+f39/gICAgYGAgH9/f35+f39/gICAgICA + gH9/f39/f39/gICAgICAgICAf39/f39/f39/f3+AgICAgICAgH9/f39/f39/f4CAgIGBgIB/f39/f39/ + f3+AgICAgIB/f39/f39/f4CAgH9/gICAgICAgICAgICAf39/f3+AgICAgICAgIB/f39/f39/f4CAgICA + gIB/f39/f4CAgIB/f39/f39/f3+AgICAgICAgICAf39/f39/f3+AgICAgICAgIB/f39/f39/f39/f39/ + gICAgICAgH9/f39/f39/f39/f3+AgICAgICAf39/f39/f39/f3+AgICAgICAgICAf4CAgH9/f3+AgIB/ + f39/f3+AgICAf4B/gIB/f39/f39/f3+AgICAgICAgICAgH9/f39/f3+AgICAgICAgH9/f39/f39/f4CA + gICAgICAgICAf39/f39/f39/f4CAgICAgICAf39/f39/f39/gICAgICAgIB/f39/f3+AgICAgICAf39/ + f39/f3+AgICAgICAgH9/f39/f39/gICAgICAgIB/f3+AgIB/f39/f39/f39/gICAgICAgIB/f39/f39/ + f3+AgICAgICAgIB/f39/f39/f39/gICAgICAgIB/f39/f39/f39/f3+AgICAgH9/f39/f39/f3+AgICA + gH9/f39/gICAgICAf39/gICAgH9/f39/f4CAgICAgICAf39/f39/f4CAgICAgIB/f3+AgICAgICAgICA + gH9/f39/f3+AgICAgICAgH9/f39/f3+AgICAf39/f4CAgICAf39/f39/gICAgH9/f3+AgICAgICAgICA + f39/f39/gIB/f39/gICAgICAgIB/f39/f39/f4CAgICAgICAgICAf39/f39/f3+AgICAgICAgIB/f39/ + f39/f39/gICAgICAgICAf39/f39/f39/gICAgICAgICAgICAf39/f39/f3+AgICAgICAgICAgICAf39/ + fn9/gICAgICAgICAf39/f39/f39/gICAgICAgICAgIB/f39/f39/f3+AgICAgICAgH9/f39/f39/f4CA + gICAgH+Af39/f39/gICAgICAgIB/f3+AgICAgIB/f39/f39/gICAgICAgICAf39/f39/f39/gICAgICA + gIB/f39/f39/f4CAgICAgICAf39/f39/gICAgICAgH9/f39/f39/f4CAgICAgH9/f39/f39/gICAgICA + gICAf39/f39/f4CAf39/gICAgICAgH9/f39/f39/f4CAgICAgICAf39/f39/f39/gICAgICAgICAgIB/ + f39/f39/f3+AgICAgICAgH9/f39/f39/f3+AgICAgICAgH9/f39/f39/f4CAgICAgICAf39/f39/f3+A + gIB/f39/f4CAgICAgIB/f39/f39/f4CAgICAgH9/f4CAgICAgH9/f39/f4CAgICAgICAgH9/f39/f39/ + gICAgICAf39/f39/f4CAgICAgICAgH9/f39/f3+AgICAgICAgIB/f39/f39/f3+AgICAgICAgH9/f39/ + gICAgICAgH9/f3+AgICAgICAgH9/f39/f39/gICAgICAgICAgH9/f39/f39/gICAgICAgICAgICAf39/ + f39/f39/gICAgICAgH9/f39/f39/f39/f39/f39/f4CAgICAgICAf39/f39/f3+AgICAgICAgIB/f39/ + f3+AgICAgH9/f39/f3+AgICAgICAgH9/f39/f39/f3+AgICAgICAf39/f39/f39/gICAgICAgH9/f39/ + f3+AgICAgICAgICAf39/gICAgICAf39/f39/f3+AgIB/f39/f39/f39/gICAgICAgH9/f39/f3+AgICA + gICAgIB/f39/f39/f4CAgICAgICAgH9/f39/f3+AgICAgICAgICAgIB/f39/f39/f39/gICAgICAgIB/ + f39/f39/f39/gICAgICAgH9/f39/f39/gICAf4B/f39/f4CAgICAgH9/f39/f39/f3+AgICAgICAf39/ + f39/f39/f3+AgICAgICAf3+AgICAf39/f39/f4CAgICAgICAgIB/f39/f39/f4CAgICAgICAgH9/f39/ + f39/f3+AgICAgICAgIB/f39/f39/f39/f39/f4CAgICAgICAgIB/f39/f39/f4CAgICAgICAf39/f39/ + f3+AgICAgICAgIB/f39/f4CAgICAgH9/f39/f4CAgICAgICAf39/f39/f3+AgICAgICAgH9/f39/f39/ + f4CAgICAgICAf39/f39/f39/gICAgICAgH9/f39/f39/gICAgICAgIB/f39/f39/f39/gICAgICAgH9/ + f39/f39/gICAgICAgIB/f39/f3+AgIB/f39/gICAgICAgICAgH9/f39/f39/gICAgICAgIB/f39/f39/ + f4CAgICAgIB/f39/f39/f39/f4CAgICAgICAgH9/f39/f3+AgICAgH9/f4CAgH9/f39/f4CAgICAf39/ + f4CAgICAgH9/f39/f39/f39/gICAgICAf39/f39/f4CAgH9/gICAgH9/f39/gICAgIB/f39/f39/gICA + f3+AgICAgICAf39/f39/f39/f4CAgICAgIB/f39/f39/f39/gICAgICAgIB/f3+AgH9/f39/f4CAgICA + gH9/f39/f4CAgIB/f4B/f39/f39/f4CAgICAgICAf39/f39/f3+AgICAgICAgIB/f39/f39/f4CAgICA + f4CAgIB/f39/f39/f4CAgICAgICAgICAf39/f39/f4CAgICAgICAgIB/f39/f39/f4CAgICAgICAgH9/ + f39/f39/f39/f4CAgICAgICAf39/f39/f39/gICAgICAf39/f39/f39/gICAgICAf39/f39/gICAgICA + gH9/gICAgIB/f39/gICAf39/gICAgICAgIB/f4CAgH9/f39/f4CAgICAgH9/f39/f39/f3+AgIB/f39/ + f3+AgICAgICAf39/f3+AgICAf4CAgICAgH9/f39/f39/f39/gICAgIB/f39/f4CAgICAgH9/f39/f4CA + gICAgICAgIB/f39/gICAgICAgICAgIB/f39/f4CAgICAgH9/f39/f39/f4CAgICAgIB/f39/f39/f3+A + f39/gICAgIB/f39/f4CAgICAgICAgH9/f39/f4CAgICAgH+AgICAgICAgIB/f39/f39/f39/gICAgICA + f39/f39/f3+AgICAgIB/f39/f39/f3+AgICAgICAgH9/f39/f39/f4CAgICAgICAgIB/f39/gICAgIB/ + f3+AgIB/f39/f39/f39/f4CAgIB/f39/f3+Af39/f3+AgICAgICAgICAgH9/f3+AgH+AgICAgH9/f39/ + gICAgICAgICAgH9/f39/f39/f39/f4CAgICAf39/f4B/f39/f39/f3+AgICAgICAgICAgH9/f39/f3+A + gICAgICAgICAgIB/f39/f39/f4CAgICAgIB/f39/f39/f4CAgH+AgICAgIB/f4CAf39/gH+Af39/f3+A + gICAf3+AgICAgH9/f39/f39/f39/gICAgICAgICAf39/f39/f39/f4CAgICAgIB/f39/f3+AgH9/f4CA + gIB/f39/gICAgICAf39/f39/f39/f4CAgICAf4CAgICAf4CAgH9/f39/f4CAgICAgICAgICAgH9/f39/ + f39/gICAgICAgH9/f39/f39/gIB/f3+AgICAf3+AgICAgICAgH9/f39/f4CAgICAgH9/f3+AgIB/f4CA + gICAgH9/f4B/f39/f39/f3+AgICAgICAgH9/f39/f39/gICAgICAgH9/f39/gIB/gICAgIB/f4CAgH9/ + f3+AgICAgH9/f39/f39/gH9/f3+AgICAgICAgICAf39/f39/gICAgIB/f39/f39/f39/gICAgICAgH9/ + f39/f4CAgICAgIB/f39/f39/gICAgICAgH9/f39/f39/f4CAgICAgICAgH9/f39/f4CAgICAgICAgIB/ + f39/gICAgICAgH9/f39/gICAgICAf39/f39/f39/f4B/f39/f39/f39/f39/f39/f4CAgH9/f39/f39/ + f39/gICAgICAgICAf39/f3+AgICAgICAgICAgICAgIB/f4CAgICAf39/f39/gICAgICAgICAgH+AgH9/ + f39/f4CAgICAgICAgICAf39/f39/f39/f4CAgICAgICAf39/f39/f39/f3+AgICAgICAgICAgIB/f39/ + f3+AgICAgICAgIB/f3+Af39/f39/f4CAf39/gICAgICAgH9/f39/f39/f3+AgICAgICAgH9/f3+AgH9/ + f39/f4CAgICAf3+AgICAgH9/f39/f39/f3+AgICAgIB/f39/f4CAgICAf39/gICAgIB/f39/f39/f39/ + f39/f4CAgICAf39/f39/f39/f4CAgICAgH9/gICAgIB/f3+AgICAf39/f4B/f3+AgICAgICAgIB/f39/ + f39/gICAgIB/f39/f39/f39/f4CAgICAgIB/f39/f39/f4CAgICAgH+AgICAgICAgH9/f39/gICAf3+A + gICAf39/f3+AgICAf39/f4CAgICAf39/f4CAf39/f4CAgICAf3+AgICAgICAgH9/gICAgICAgIB/f39/ + f4CAgH9/gICAgIB/f39/f4CAgIB/f4CAgICAgH9/gICAgIB/f39/f39/gICAgICAf39/f39/f39/gICA + gICAgH9/f39/f39/f3+AgICAgIB/f39/f3+AgH9/gICAgIB/f3+AgICAgH9/f39/f39/f39/gICAgICA + gH9/f39/f4CAgICAgICAgH9/f39/gICAf3+Af4CAgICAgIB/f4CAgICAgH9/f39/f39/f3+AgICAgIB/ + f39/f39/f39/f3+AgH+AgICAgICAf39/f39/gICAgICAgICAgICAf39/f4CAf39/f39/gICAgICAgH9/ + gIB/f39/f39/f39/gICAgICAgICAf39/f39/gICAgICAf39/gIB/f39/f3+AgICAgICAgH+Af39/f3+A + gICAgICAgIB/f39/f4CAf39/f4CAgH9/f39/f4CAgIB/f39/gICAgH9/f39/f4CAgICAgIB/f4CAgIB/ + f39/f4CAgICAgICAgICAgH9/f39/gICAf39/gICAgICAf39/f39/f39/f39/f4B/f39/f39/f3+AgICA + gH9/f4CAgICAgICAgICAgIB/f39/f4CAgICAf39/f3+Af39/f3+AgICAgH+Af4CAgH9/f39/f39/gICA + gICAf4CAgIB/f39/f4CAgH9/f4CAgICAgH9/f3+Af39/f39/gICAgICAgH+AgICAf4CAf4CAf39/f39/ + gICAgICAgIB/f39/f39/f39/gICAgH9/f4CAgICAf39/f39/gICAgICAgICAgH9/f39/f39/gICAgICA + f39/f39/f39/f4CAgICAgICAgICAgH9/f39/f3+AgICAgIB/f39/f4CAf39/f3+AgICAgH9/f4B/f3+A + gICAgICAgH9/f39/f3+AgH9/gICAgICAf39/f39/f3+AgICAgICAgICAf39/f4CAgH+AgICAf39/f3+A + gH9/f4CAgICAf4CAgH9/f39/gICAgICAgICAf39/f39/f39/f4CAgICAgICAgH9/f39/f4CAgICAgH9/ + f4CAgICAf39/gIB/f39/gICAgICAgICAgH9/f4CAf39/f3+AgICAgICAgIB/f39/f39/f3+AgICAgICA + gICAf39/gICAf39/f4CAgIB/gICAf39/f39/f39/gICAgICAgH+AgH9/f39/gICAgH9/f4CAgIB/f4CA + f39/f3+Af39/f4CAgICAgICAgIB/f3+AgICAf39/f39/gICAgICAf4B/f4B/f39/f4CAgH9/f3+AgIB/ + f39/f39/f4CAgIB/f3+AgICAf3+AgIB/f39/f39/f39/f4CAgICAgICAgH9/f39/gIB/f4CAgIB/f3+A + gICAf3+AgICAf39/f4CAgH9/f4CAf39/gICAgH9/f3+Af39/f3+AgICAf39/f4CAf39/f3+AgICAgICA + f39/f3+Af39/gICAgH9/f4B/f39/f3+AgIB/f3+AgICAgH9/gICAf39/f3+AgICAgICAgH9/f3+Af39/ + f39/gICAf39/gIB/f3+AgIB/f39/f4CAgH9/gICAgIB/f4CAgH9/f39/f39/f39/gICAgICAgICAgH9/ + f39/f39/f4CAgICAgICAgICAf39/f39/f3+AgICAgIB/gICAgH9/f39/f3+AgICAgICAgH9/f39/f39/ + gICAgH9/gICAgH9/f39/gH9/f39/f3+AgICAgICAf4CAf39/gH9/f4B/gICAgICAgICAgH9/f39/f39/ + gICAgIB/f39/gICAgH9/f39/f39/f3+AgICAgICAgIB/f39/f3+Af39/gICAf3+AgICAf39/gIB/f39/ + f4CAgICAgIB/f39/f39/gICAgICAgICAf39/f39/f39/f3+AgICAgICAf39/f3+Af3+AgICAgICAgIB/ + f39/f4CAgH9/f3+AgICAf39/f3+AgIB/f4B/f3+AgH9/gIB/gICAf39/gICAgH9/f4CAgH9/f3+AgIB/ + f39/gICAf4B/f3+AgICAgICAf3+AgICAf39/gICAgIB/gICAf39/f39/gICAgH+AgICAf39/f3+Af3+A + f39/gIB/gICAf3+Af39/f39/f4B/gICAgICAgH+AgH9/f39/gH9/gICAgICAgICAf39/f39/f3+AgICA + gICAgICAf39/f39/f39/gICAgICAgH+AgH9/f39/f4B/f4CAgIB/gICAgIB/f39/f3+AgH9/gICAgIB/ + f3+Af39/f3+AgICAf4CAgICAgH9/gICAf39/f4CAgH9/gIB/f39/f3+AgH9/f3+AgH9/f3+AgICAgICA + gICAf39/gICAf39/f4CAf39/gICAgIB/f3+Af39/f39/gICAgICAgIB/f39/f4CAf39/gICAgH+AgH+A + gH9/f39/gH9/gICAgICAf39/f39/f3+AgICAgICAgICAgH9/f4CAf39/f4CAgH9/f3+AgICAf3+AgIB/ + f39/gICAgH+AgICAf39/gIB/f39/f4CAgIB/f39/f3+Af4CAgH9/f3+AgIB/f4CAgICAgH9/gH9/f39/ + gICAf3+AgIB/f39/f4CAgIB/f4CAgICAgH+AgH9/f39/gICAf39/f4CAgH9/f4CAgH9/gIB/gIB/f4CA + gICAf39/gICAgH9/gIB/f4B/f39/f3+AgICAgH9/f4CAgIB/f39/gICAgH9/f39/f4CAgICAgH+AgH9/ + f39/f3+AgIB/f4CAf4CAgH9/f39/f3+AgH9/f4CAgICAgH+Af3+AgH9/f39/f4CAgH9/gH+AgICAf39/ + f39/gICAgICAgIB/f4CAf4CAf3+AgH+AgICAgICAf3+AgH9/f4CAgICAf39/gH+AgH9/f39/f3+AgICA + gIB/f4B/f4CAf39/f4CAgH9/f4CAgH+AgH9/f39/f4CAgICAgICAgICAf4CAf3+AgH+AgIB/gH9/gICA + gH9/f4CAf3+Af3+Af39/f4CAgH9/f39/gICAgH9/f4CAf3+AgH9/gICAgICAgICAf4CAgICAgH9/f4CA + f4CAgICAgH9/f39/f3+Af3+AgICAgIB/f4B/f39/f39/f3+AgICAgICAgIB/gICAf39/f4CAgIB/f39/ + f3+AgH9/gICAgICAf39/f39/f4CAgH+AgH9/gH9/f4B/gICAgICAgICAf4CAf3+Af39/gICAgIB/f39/ + f3+AgIB/gICAgICAgICAf39/f4CAf39/f39/gICAf3+AgICAgH9/f39/gICAgH9/gICAgH+AgIB/f39/ + f4CAgIB/f4CAgIB/f3+AgICAf39/gICAgH9/gICAf39/gICAgICAgICAgICAgH+AgH9/f39/f4CAgICA + gICAf4CAgH9/f35+f39/f4CAgYGBgYGAf39/gH99eXh6f4OEg4ODhYaFgn98enp7fH5+fX6AgoODgoB/ + f4CAgIB/f35/gIB+fXx9foCBgYCBgYKCgoF/fn1+f39/fn5/gIGBgYB/f4CAgYGAgH9/gIB/fn5+fn+A + gICAgIGBgYGAf35+f39/f39/f4CAgIB/f3+AgICAf3+Af39/f39/f39/gICAgICAgICAgH9/f4CAf39/ + f3+AgICBgYGBgH59fX19fn9/gICBgYGCgYGCg4ODgHZsbnmDiIqGhIWHhYOCgX59gIB9d3JzeX+Cg4OD + hIWGh4WDgH59f4KCeGdhbXyHi4iFi5SXkomAdW5udHh7eHV6hImKiYR/foCChIWEf3x+gYB8dXByeH6E + h4aEhYeIh4WBfXp7e3p5d3d6foGEhYWFhoaGhYJ+e3p8fHt7ent9gIKDg4KCg4SEg4F/fX19fHt7e3x+ + gIKCg4SEg4OCgH99fX19fX1+f39+fYCCg4KAf4CBgYGBgX99foCBgoJ/dmtrdoKJi4qMkZOOhXtybG11 + foKCfnp8gYOEhoeGhIKBf3x6eXx/gYOGhnxnW2Z6houMj5qkopSEdmhfX2ZvdXuCjpeYk4uDfX6AgYB6 + cGdpdIGKjYqIiIqMkI98XEpYcoOMioaPn6Wdj35rYGNvfIN+eHqAgoaJiYmJiYmHgnlxcHZ/hYeDd2Zg + cYSLh4KHmKajkYBzaGRpcHR1c3mJlJKKhIKFiomHhH51b3J5gYiGdmRic4eRj4SDkqCej39wZWRrc3V0 + cnqNmpmSjIaDgoB7d3JucHmCg3x2eIOQmJeOgnt6fntuYWBpeYuUk5COjY6Oh3hraG95gIKAf4GFiIqF + fHZ1e4SKh4B7enyChoR/f4KFiIZ5ZFpkdYOLjo+Wn6GXh3ZnX2Focnp9gY2XmJCEenh+g4SAd25sc3+K + jYmHiIyRkoRgQUdjfY+UkputsaORfmVSUmBwfH98gYmNjpCQkIyFgoJ7bmZncH2JkJSIaFRng4yKhIWa + sKyTfm1cV2BtdHR3hJackoWCi5eViHtyamZqcnuIlY5vVGB9jZGKhJWxt5+Cb11TWGFmaWx5lamklI6T + nJuMempfW2FvgYdyU1d+nqeilZOhq6CKclVCR1xveXl6i6SwqJaDeX2IjYZzXVRdc4ualnhcZIafopB3 + dI2gm4dwWlFfdoWIgHuGnKach3RoanWAhoJ6dXZ+ho2QkpCEbFtic3p6fYOQnqKYinxvaWtwdHd9h5KW + kIZ+d3FsbXmJkYyDfHyBiY6Oi4V+c2FQVmdyfIydsLu0nIV1Z11bXWFreIeUlouCho6RkIuEf3pxaWhw + fY2akW1OVXWMkouGl7O5o4ZsVUhQZXR3dHuSp6aYioWMkIh8cGZeYGx/k6CVb09Ye5KWjoaUsruif2VR + SFBfanB3hp2sp5aMkpyZh3FgVldjdImOa0NViau1qpeasLCVeV9AMkFZbXl7g524vrCdkpCMfWlYTUxc + d4h/Y1t2mK+0qaGnq5qBalA5N0VZbHyHmK+7uaydk4yAbV1TT1JjfY19XmGDorOxoZqlp5J6Z0w4PFFm + d4ONnbCzpZaPjo2GdGRbUU9jg5yegl5fhKKnmoWEmqeZgGdMPkxoeoOGiZaqrpyHfHt/gH52aFxdboad + pY5gTmyNmZmLf46lp5J2WkdHW3eOlIuLnKabhG5haYCTlYdwX2BxjKWtnXdORmiJinhse6XGv5p3YVVa + bXh0a2yBm6GRfXqIl5iPg3ZoY2t8j5iBUzxahZqgmZKftbacfF5FP1BmdHh3gJmsqZqRkpaQgW9fVFZk + epSadkhPgKSto5GYsLKXfWRFNT9VaXmFkaS1s6CSlJiOemZXTVJpg4ltSlR/pLq6qKWyrZB4YkEqMEdh + doKPqMHIuqOVkIVxXU9GSV96g21Za4+tv7qqqrChf2VUPzA2S2Bziqa+ycOwnZOJe2dTQ0JTbYWHa1Zt + mLXAuKinq5x8Y0suJz9ccIOSn7PCv6+dkIZ5aVhIQEdggqKqiWNnjKivoIiHmZ6PdlpAO0pedYiNkKS9 + vaaRhoF9c2JTTVFigJ2igVhdiKu1po+OnqCKcFY9NEZkfI6Yn623rJSAeXh7enRpWExYfKS5qHNKXYqi + oYx3fZinmX5gRkJYdIaOjo+ao56NgH18e3t3bWRjcISbqI9aRWaJmqKXi5SjoI53WUBBV3KIkYqKmqSd + k4+Mhn5zZl1aYnaSpJNgQ12KoqaclaKxqIxyVzswP1t2ipilsbKll5WXj3phUEpQZIKRf1lRd6C5vaic + qK2TdmVKKiI4W4Gfqauxtq+lpJqAYkg9Rlt2hnNLToCuxsewpLG4m3NUMRcePGOFmZ+sv8S7sKSPdWBR + S1BaWT80X5S0x87Hycu1imNCIxYkPFx/k52zzM7Cu6uJaFJHSlhgTjA4bJ+9y8jEyce0k2k7FgwjSGN2 + jKS/0tPGtZ+EaVRIR09TRDVOgae8xsbIy76deFk+LS47Slxtfpq6ztLMvqKCZ1RHP0JSZ3d0ZnGTsby0 + paezqottUzsxOUtdbX6TsczRv6aWinpoVklDSFx7jHtkcZSuu7Wkoqeae2VXQDI8VGp/j5qqvcO4ppaG + c2FTS0hPZICQgmtyj6i1sKCbn5d/aFVAOUdcbH6Pm6u8u6qZj4R5bVtMR1BjfZqmkWtlhKCpoY+MmJuK + cVpIQEthdYWQnK65rpSCg4mFdGBRTVZsiqapfk1UhaeqnIqSqquPc11DND5Xc4udqK2toI2JlZiHbFVK + TV11kp19TFGHscCyko6mqo1wWTokMFV7mqmlo6ionZeZj3pjTUdTaoWLaEJVjLTHwaehr6uLaE0vHSpS + e5afnqe2urGkloNvXlFKT2R6bU1TgKa9x7ituLeVa1M6IiM9Y4WXmaO4wbuzp49zX1BMU2BnWD9NgKm/ + x7yyvcWpe1UxFx89WHOKkp++0cWzqph8Y1BGS1lgTzpRhq3Ax8K8vbicd1c6Jio/Vmh5hpy7z829q5iE + cl9LPTtMaIKHcGN/qL69raOoq5dzUjwwMkJYcYeatMrLtZyPjYd4YUo8PFJ0kZZ4X3afucKwlZWgk3Zh + SjQySWZ7iZGet8W6opCGgn1sUkRETWKCpLOdcWKAnqCUg3+Uo5Z6YU1BSWF3hY6Yq7itkH2AjIl1YldT + V2Z7kKmuh1pki5iShnqHo6eNdmNMRFdwgYyPkaCrn4h8gISAeG1gWmFygpWoqodZV3aGiIeAiaiym39q + VUlTaXyGipGdoZN+e4uVi3ptY2FncHqJnqqVZk1heoaMiIynuquKbVZIS1dlfJSgoJmKfYKVopiDblxW + YnJ9jp6FVExzlJ6Yio+vwqmBY0c0PVhvg5OZm56ZkJKeoI93YVVTXGx/kJFxUmeQp6qbkJ2tpottUToz + QWOIm5uUlJ6hnJyeknthUFBaaHuMhGJVeJ6vsJ2Pn7KhfGRQOjZJZX6Ql5qlrqidnJyPdlpGR1tygHZa + U3egu8Ovm6Com3xiSzc0RV51hpKitLesoZ2Zj35jTEJGVm6HmIhmaJCts6qWj5ygiW5aRDdFX29+k6Gs + t7CYh4uSindeSkhTZXqTpZpyX3ydpJqGgJKimX5pVkVFW3iJioqdtbKXfXmHj4BqX1xeaHR9jJ+rpIRi + W2l6g4GAkqqslX1sW1BXaHuIkJeblIh+f4yRiHxvamxubnKBk5+fiWVXan2ChIOLoq+fhHFgU1dlcXyJ + lqKqoIp4cm9vdHx/fHJvdoGNkpWZnZd/W0hUZGd0h5WmtK+biXlnX2FnbniDjY6Hf32Bio6Jh4aAd3Jx + cXaCjJKWjGtRW3F9goSKoLKsloJxYVpeZ3J9hY2VkoeBg4uNhHt4d3R0dXZ6g42XoZx4S0JZbXyMlKC3 + vaiOe2NNR1Nqf4mMjIiCgo2eppuHd21paWloboGTmY1vV2B5ipOWm6qzpYdtWklAS2iIm56WjIWEi5uj + loFvY2FnaWlvg5qjlHFea32Fi46VpaybfWZZUlVic4SPkY6Lh4mUoaWXfmdbWmBqdoaRg2NhgpyhmIyS + paeRdlxFQVt4gIOHiJCdm42KlJiQf2pZVVxqeoiXm4Nla4aPioiKmKuqjG1dUU1ZbHuKlZialod+iZma + i3ZjXWBpdH6KkIFna4iVj4mGkqaokntpVElVZ3F8iZakqpyEe4eNhHlwa2dnbXR8h5ajo4xmU2N6hIKC + jqOrnId1ZFhZY297iZWaloyAfImVj35ya2docHh+hI6XnJ2MZU5ccXuCiZGepZ6NfWxbV19tfomOl6Kh + koN5c25rbnd7dHN7hY+ampCJiYqJe1k8Ql53i5ebqbi1o453X1FSXWt3fIGNlJWSi4eHh4eGf29laHB6 + goSDho+YlYBiV2V3hYyLjJedlId+cWBbZneGjIuNlZaPhXtycHZ+gHtvaXKDkZaSjIqIgoGJjHhROUxy + ipOSkqC0uKaMbVNKWWx1dXN6jJmYk4+OioeFfXFpanBydnyBhpCdo5NtT1Rqe4eLi5emppeFcVxRWm6D + kZKNiYR/gImRjoN1a2txeH2Ag4WIiouQl45oQkZlfpCZk5ioqpaDdF9QXXyPi3ttcIGNjZCWlYyDenFt + cHV5f4SGiIBqW2Z6jJmbmaKolHJhYGJqd39/fHp/ipCPjY+Pi4F1bG1xcnF3g5KdmXpXV3CCjZKPlqOf + hnBoZGZzf315fIKKjoiBh5KVjoJyZmVvd3uCiYuDcm15goaJi5CanpF7bGVgXWR2iZSVk46GgYKKj4h6 + bmhqcnZ1eomVmZmXhWdXYW95gIOMnaOYjIN2ZV9mcn6Jj4+Kgn19hoyHfnh3dnZ5fH2BiY2MjY+EaVJW + anuIkJKbpKOVhHVkWFppeICEipGTj4uKiod+dXFwbm1xeIOOko+LiIWHjo12UkVbeYmMiY+fqaSWhHBe + WWJ0gH97gY+VkIaBgYKDg352bWxxeYOJiYiJiYiLkIx2VkldeIaJhYmcrKqbh3JfWmVzenl3fo6Yk4Z+ + foOKjYl9bmVmb3uEiIqLjIuHhomKhXhfUF1zf4OGiZiqr6OSfGVbYGhqam14jJuclpGQjomFfnFjXWBo + c4CKkZmblI6NjYqEclNATWl+iImOoLO1ppJ6Z15ham9raHB+jJOUlJmbk4d9dGtkZWpxeH+Fi5CQjpKW + lo1yUUdZbnuFiZCir6iXhnNiXmh0e3t5eoCIjY2RlJGIfXRua2xvdHyChYiOk5aalXlVUWZ2fX58h5qi + mo+GeG1ygYeAc2hpeIGBhZGVj4iDfnl5e3t6eXZ0d4CJkZWLcF5sgoqHf3yJmZmJfHNscX+FgHl1eYOG + gX+GjIqEfnt7fn9+eXd4e4CHj49/aWJxgIiKiIqUmpKBdGxmZm9+iouHh4qIgn6EiYV7cG1xeHx+g4qM + iYeHh4iJgWxXWGx/ioqFjZ6lnIx8bWRmb3d5eX6GjIuJiIuMhn12c3NzdHd9g4aHiYuIgoOIin9pWFxw + f4SGiJOjqJuKfG5kY2txcnJ3hZKVkYyKjY+LgXlwaGVna3J8hI2Xm5eRjYiBenVxbmtjXWR2hpCZnqKm + opaFdWVbWmBmbnaAjZmbmJWSjoqGfnNqZGNla3R9hpCVlpORj4uCe3ZzcXFzc21mbH6MlJaVmJ6ckYR2 + Z15eY2pyeoCLmZ6ZkImEg4F9d3BrbnN3en6EiIyNiYSChISCf3p2d3l7f4OBdmpugIyNiYWLmJqPgnZr + ZmhscHN3f4+dnZSMhoF9eXR0dnZzcnZ8goiMjo2JhIOBe3V1d3h6fH1+goqQjn9wbnmDhoJ8fomPjIV9 + dnFzen5+fH6Fjo+Hf3x8fX6AgH98eHZ4fYCDhoqMh4B6eXl4eX2Af319f4GEh4eGhYN/dm1tdn2BhYeL + kZONhH53cnFzdnh6fYSMjYiEhIWFhIB7eHd1cnN5gYaJioqJhoKAfXp5eHd3eXp9gIWKjIqIhYJ/eXBr + bnh/hIeIio+QjIZ+d3NzdXh6fH6ChIWFh4eHhoSAfHh1dXd5foKEg4SEg4KBgH9+fn59fXx9foCEhoWD + gXt0dHyBgYGAhIuNiYN+e3l5eHd5fH6Bh4iFgoKCgoGAf39/fXl2eHyBg4SGhYSEgoB9ent9fX18e3t9 + gYOFhoeGhIJ/fHp6enl3d3qAhoiIhoiKiYV/enZ2eHh3eX6Bg4eKiYaDgoB+fHp5eXl7fX6BhIWEhYSD + gX9+fXp4eXx+fn6Ag4SFhYODg4KAfnx7e3t6d3h+hIaHhoaHiIWAfXp3dnh5ent+goeLiYWEg4B9enh5 + e35+fn5/gYKDg4SEhIKAfXp5eXp8fn+AgoSFhYSEg4F/f318eXl6fH1+f4CDhoeFhIOBf358e3p7e3x9 + fn+Bg4SDg4OEhYOAfXt6e3x8e32AgoODg4KCgoKCgH59fHx9fn18fYCCgoOCgoKDgn99fHt7fH1+gIGD + g4KBgICAgYB/f3+Af35+fX5/gIGCgoB9fn+BgoKBgIKDgX17ent9f4CAgYOEhIKBgH59fX18fH1+gIGC + goKCgoGAgICAf359fH19fX5/gIKDg4OCgoGBgX9+fXx7fH19fn+BgoOFhYSCgX99fHx8fH19f4CAgIGC + g4ODg4KAfn18fHt8fX+BgoKCgoKBgYB/f359fn59fX5/gIGBgYGBgYGAf39/f39/fn5+f3+AgICAgYGB + gYB/fn1+fn5+f4GBgoKBgH9/fn5/f3+AgICAgYGBgICAgH9/fnx9foCBgYGBgYGAf35+f39+fn9/fn6A + gYKDgoKBgH9/fX18fX1+f4CCg4SEg4KAf318enp8fX+BgoKCgoKBgH9+fX19fn5/gICAgICBgH9/gICA + gIB/fn9/f39/gIGBgICAf39/fn5/f3+AgIGBgICAgH9+fn5+f4CAgYGBgYGAf39/f39/f4CAgIB/f39/ + gICAf39/f39/f4CBgYGAgIB/fX1+f39/gIGBgYGBgYGAgIB/fX19fX5/gICBgoOCgYB/fn5/f359fX6A + gICAgYKDgoGAf35+fn5+fn1+f4CBgYKCg4KBgH99fHx8fX1+gIGDg4OCgoB/fn18fH1+f4CAgICBgYGB + gYCAgIGAf319fX19fn5/gIGDhISDgoF/fn18e3t8fX5/gYKDhISEg4GAf359e3t7fH1/gIKCgoODgoGA + f35+fn59fHx9fn+AgYODg4ODgYB+fXx7fH19fX+AgoODg4OCgYB/fn18fHx9fn+AgYKDgoKDg4KAfn18 + fHx8fX+AgYKCg4KCgYB/f39+fn5+fn9/gICAgYGBgICAgICAf39+fn5+fn5/gIGBgYKCgoF/fn19fX5+ + fn9/gIGBgoKCgYCAgH9+fX19fn5/f4CBgoKDgoKBgH9+fXx8fH1+gIGCg4OEg4KAfn19fX19fn9/gIGB + gYGBgYGBgIB/fn59fn1+fn+AgIGBgYGBgYB/fn5+fX1+fn+AgoKBgYCAf39+fn5/gICAgICAgYGAgH9/ + fn5+fn9/gICAgICAgICAgICAgH9/fn19fX5/gIGBgoKBgYGAgH9+fX19fn5/gIGBgYKCgYB/f39/f39+ + fn5/gICAgICAgICAgICAgICAgH9+fn5+f3+AgIGBgYCAgH9/fn5+f39/f39/gIGBgICAgICAgH9/fn5/ + f39/gIGBgYGAf39/f3+AgICAgH9/f35/f4CAgYGBgH9/fn9/f39/f4CAgIB/f4CAgH9/gICAgICAgH9+ + fn5+fn5/gYKCgoKCgYB/fn18fH19fn6AgoODgoKBgYB/fn59fn59fX5/f4GCgoKCgoGBgH9+fX19fn5+ + f3+AgYKBgYGAgH9/f39/f39/gH9/f39/f4CAgH+AgIB/f3+AgIB/f4CAf39/f39/f3+AgIGBgYGBgH5+ + fX1+fn5/gIGCgoGAgH9+fn5+fn9/gICAgICAgICAgH9/f39/f4CAgICAgICAf39/f3+AgICBgICAf35+ + fn9/f3+AgIGBgYGAgH9/f35+fn5+f3+AgYGBgoGBgH9/fn19fX1+f4CBgoKCgoGAf359fX1+fn9/gIGB + gYGBgYCAf35+fn5+fn9/gICAgYGBgYGAgIB/fn5+fn5/f4CAgYGBgYGAgH9+fn5+fn9/gICAgIGBgYCA + f39/f39/gICAgICAf39/f39/gICAgICAf39/f39/gICAgICAgH9/fn5+f4CAgIGBgYGAgH9+fn5+f3+A + gICAgICAgH9/f4CAf39/gICAf39/f4CAgICAgICAgICAgH9/fn5+fn5/f4CAgYGBgYGBgIB/f359fX1+ + fn+AgYKCgoKBgYB/fn5+fn5+f4CAgIGBgYGBgYB/f39+fn5+f39/f4CAgIGBgIB/f39/f39/f4CAgICA + gICAgH9/f39/f4CAgICAgICAf39/f39/f39/gICAgICAgH9/f35/f3+AgICAgICAgIB/f39+fn5+f3+A + gIGBgoKBgH9+fn19fX5+f4CBgoKCgoGAf35+fX5+fn+AgIGBgYGAgIB/f39/f35/f3+AgICAgICAgIB/ + f39+fn5/f3+AgICBgYCAgIB/f35+fn9/f4CAgICBgYGAgH9/f35+fn5/f4CAgYGBgYGAf39+fn5+f3+A + gICAgICAgH9/f39/f39/f3+AgICAgICAf39/f39/gICAgICAgICAgICAf39/f39/gICAgIB/f39/f39/ + gICAgICAgH9/f35+fn9/gICAgICAgYGBgIB/f39+fn5+f3+AgYGBgYGBgH9+fn5+fn9/f4CAgYGAgH9/ + f39/f3+AgICAgICAf39/f39/gICAgICAf39/f39/f4CAgICAgH9/f39/f39/gICAgICAgIB/f39/f39/ + f39/gICAgIB/f3+AgH9/f39/f3+AgICAgIB/f39/f39/f4CAgICAgICAgH9/f39/f39/gICAgIGAgIB/ + f4CAf39/f39/f3+AgICAgYGAgICAf39+fn5+fn9/gICBgYGBgIB/f39/f35+f39/gICAgICAgICAgH9/ + f39+fn5/gICAgICBgYCAf39+fn9/f4CAgIGAgICAf39/f39/f39/f39/f4CAgYGBgIB/f39+fn5+f4CA + gYGBgICAf39/f39/f3+AgICAgICAgICAgICAgIB/f35+fn9/gICAgYGBgYCAf35+fn5/f3+AgIGBgYCA + gH9/f39/f39/f39/f4CAgICBgYGAf39/fn5+f39/f4CAgICAgYCAgH9/f39/f39/f3+AgICAgYCAgICA + f39/fn5+f39/f4CAgYGBgYCAgH9/f39/f39/f4CAgIGBgYCAgH9/fn5+fn9/gICBgYGBgICAf35+fn5/ + f4CAgICBgYCAgH9/f39/f39/f39/f3+AgICAgICAgICAf39/f39/f39/gICAgYGBgICAgH9+fn5+f39/ + gICAgYGBgICAf39/fn5+f3+AgICAgICAgICAf39/f39/f39/f4CAgICAgICAf39/f39/f39/f4CAgYCA + gICAf39/f39/f3+AgICAgICAgICAgIB/f39/f39/f39/f4CAgICAgICAf39/f39/f3+AgICAgICAf39/ + f39/gICAgICAgH9/f39/f39/gICAgICAgIB/f39/f39/f4CAgICAgICAgH9/f39/f39/gICAgICAgICA + gH9/f39/f35/f4CAgIGBgYGAgH9/fn5+fn9/gICBgYGBgYCAf39+fn5+f3+AgICAgICAgIB/f39/f39/ + f4CAgIB/gICAgICAf4CAgH9/f3+AgH9/f39/f39/f4CAgICAgICAgIB/f35+f39/f3+AgYGBgICAgICA + f39/f39/fn9/gIGBgYGBgIB/f35+f39/gICAgICAgH9/f39/f3+AgICAgICAgH9/f39/f3+AgICAgICA + gH9/gIB/gICAf39/f39/f39/f3+AgICAgICAf39/f39/f3+AgICAgICAgICAgH9/f39/f39/gICAgICA + gH9/f39/f39/f4CAgICAgICAgICAf39/f39/f4CAgICAgICAgIB/f39/f39/f39/gIB/gICAgICAf3+A + gICAgIB/f39/f39/f4CAgICAgIB/f39/fn5+f3+AgICBgYCAgH9/f35+f39/f4CAgYGBgICAgH9/f39+ + f39/f4CAgIGBgICAgH9/f39+fn5/f3+AgIGBgYGAgH9/f35+fn9/f4CAgICAgICAgIB/f39/f39/f39/ + f4CAgICAgICAgIB/f39/f39/f39/f39/gICAgICAgH9/f39/f39/f4CAgICAgICAgH9/f39/gICAgICA + gIB/f39/f4CAgICAgIB/f39/f39/f39/gICAgICAgH9/f4CAgH9/f3+AgIB/f3+AgIGAf39/f39/f39/ + f4CAgICAf39/f39/f39/f4CAgICAgICAgH9/f39/f3+AgICAgICAgIB/gICAgH9/f39/f39/gICAgICA + gH9/f4CAgICAf39/f39/f3+AgICAgICAgIB/f39/f39/f39/f4CAgH9/gICAgICAf39/f39/f39/gICA + gICAgICAgH9/f39/f4CAgICAgIB/f39/f3+AgICAgICAf39/f39/f4CAf4CAgICAgICAf39/f39/f4CA + gICAgICAf39/f39/f39/f3+AgICAgICAgICAf39/f39/f39/f39/gICAgYGBgYCAf39+fn5+fn9/gIGB + gYGBgYCAgH9/fn5+fn5/f4CAgYGBgYGAgH9/f35+fn5/f3+AgIGBgYCAgH9/f39/f39/f39/f4CAgICA + gICAgIB/f39/f39/gICAgICAgICAf39/f39/f3+AgICAgICAgICAgH9/f39/f39/f39/gICAgICAgICA + f39/f39/f3+AgICAgICAgH9/f39/f3+AgICAf39/f4CAgICAgIB/f39/f39/f4CAgICAgICAgIB/f39/ + f39/gICAgICAgIB/f39/f39/gICAgICAgICAf39/f39/f39/f4CAgH9/gICAgH9/f4CAf39/f3+AgICA + gICAgIB/f39/f39/f4CAgICAgICAf39/f39/f3+AgICAgICAgICAgH9/f39/f39/f4CAgICAgICAgICA + f39/f39/f39/f4CAgICAgICAf39/f39/f39/gICAgICAgIB/f4CAgH9/f39/f39/gICAgICAgH9/f39/ + f39/f39/gICAgICAgICAf39/f3+AgICAgICAgICAgH9/f39/f39/f4CAgICAgICAf39/f39/f39/f4CA + gICAgICAgIB/f39/f39/f3+AgICBgYGBgIB/f35+fn5/f4CAgIGBgYGAgICAf39/fn5+f39/gICAgYGB + gICAf39/f39/f39/gICAgICAgICAgH9/f39/f39/f4CAgICAgICAgH9/f39/f39/f4CAgICAgICAf39/ + f39/f39/f4CAgICAgICAgH9/f39/f39/f3+AgICAgICAgH9/f39/f39/f39/gICAgICAgIB/f39/f3+A + gICAgICAgIB/f39/f39/gICAgICAgIB/f39/f39/gICAgICAgH9/f39/f39/f39/gICAgICAgIB/f39/ + f39/f4CAgICAgICAgH9/f4CAgICAgIB/f39/f4CAgICAgICAgICAf39/f39/f3+AgICAgICAgH9/f39/ + f39/gICAgICAgICAgICAf39/f39/f39/gICAgICAgICAgIB/f39/f39/f4CAgICAgICAf39/f39/f3+A + gIB/f4CAgH9/f39/f39/f39/gICAgICAf39/f39/f39/gICAgICAgH9/f39/f39/gICAgICAgH9/f39/ + f39/gICAgICAgICAf39/f39/f39/gICAgICAgICAgICAf39/f39/f39/gICAgICAgICAgIB/f39/f39/ + f3+AgICAgICAgH9/f39/f39/f3+AgH9/f4CAgICAgH9/f39/f39/gICAgICAgH9/f39/f4CAgICAgICA + f39/f39/f4CAgICAgICAf39/f39/f39/gICAgICAgICAgIB/f39/f39/gICAgICAgH9/f39/f3+AgIB/ + f39/f39/f3+AgICAgICAgH9/f39/f3+AgICAgICAgICAf39/f39/f39/gICAgICAgICAf39/f39/f39/ + f3+AgICAgICAgH9/f39/f39/f39/gICAgICAgICAf39/f39/f3+AgICAgICAgICAgH9/f39/f39/gICA + gICAgH9/f39/f39/gICAgICAgICAgIB/f39/f39/f4CAgICAgICAf39/f39/f39/f4CAgICAgICAgH9/ + f3+AgICAgH9/f39/f3+AgICAgICAgIB/f39/f3+AgICAgICAgIB/f39/gICAgH9/gIB/f39/gICAgICA + gICAgICAgIB/f39/f39/gICAgICAf39/f39/f4CAgH9/f39/f3+AgICAgICAgIB/f39/f39/gICAgICA + gICAf39/f39/f39/gICAgICAgICAgIB/f39/f39/f4CAgICAgICAf39/f39/f39/gICAgICAgICAf39/ + f39/f39/gICAgICAgICAf39/f39/f3+AgICAgICAgICAf39/f39/f39/f3+AgICAgICAgIB/f39/f39/ + gIB/f4CAgICAgICAgICAgH9/f39/gICAgH9/gICAgH+AgICAgICAf39/f39/f3+AgICAgICAf39/f39/ + f39/f4CAgICAgICAgH9/f39/f3+AgICAgIB/f39/f4CAgICAgH9/f4B/f39/f3+AgICAgICAf3+AgICA + gICAf39/f39/gICAgICAgIB/f39/f39/f4CAgICAgICAf39/f39/f4CAgICAgICAgH9/f39/f39/gICA + gICAgICAgICAgICAf39/f39/f4CAgICAgIB/f39/f39/f3+AgICAgICAgH9/f3+AgICAgICAgH9/f39/ + f39/f39/f3+AgICAgICAgICAf39/f39/f3+AgICAgICAgICAgIB/f39/f39/f4CAgICAgIB/f39/f39/ + f39/f4CAgICAgIB/f39/f4B/f39/f39/f39/f3+AgICAgICAgICAf39/f39/gICAgICAgICAgH9/f39/ + f39/f39/gICAgICAgIB/f39/f39/f3+AgICAgICAgH9/f39/f39/f4CAgICAgICAgIB/f39/f39/f39/ + gICAgICAgICAf39/f39/f39/gICAgICAgICAgICAf39/f39/f39/f4CAgICAgICAgH9/f39/f39/f3+A + gICAgICAgICAgIB/f39/f39/f3+AgIBMSVNUxAAAAElORk9JQ1JECwAAADE5OTQtMDItMDUAAElTQkpu + AAAAUEFSVElBTDpiaXJkLCBjcm93LCBjb21tb24gY3JvdywgY2FsbHM7IFRoZSBIb2xseXdvb2QgU291 + bmQgTGlicmFyeSwgQzE5OTQsIE5ldyBFZGVuIE11bHRpbWVkaWEsIDE4MDA3MzUtRURFTgBJU0ZULgAA + AFNvdW5kIEZvcmdlIDIuMDtTb25pYyBGb3VuZHJ5IFNvdW5kIEZvcmdlIDUuMAAL + + \ No newline at end of file diff --git a/BizHawk.MultiClient/RenderPanel.cs b/BizHawk.MultiClient/RenderPanel.cs index f76ae89b35..f031fb5f1e 100644 --- a/BizHawk.MultiClient/RenderPanel.cs +++ b/BizHawk.MultiClient/RenderPanel.cs @@ -181,14 +181,14 @@ namespace BizHawk.MultiClient public void CreateDevice() { DestroyDevice(); - Device = new Device(d3d, 0, DeviceType.Hardware, backingControl.Handle, CreateFlags.HardwareVertexProcessing, - new PresentParameters + var pp = new PresentParameters { BackBufferWidth = Math.Max(1, backingControl.ClientSize.Width), BackBufferHeight = Math.Max(1, backingControl.ClientSize.Height), DeviceWindowHandle = backingControl.Handle, - PresentationInterval = PresentInterval.One - }); + PresentationInterval = Global.Config.DisplayVSync?PresentInterval.One:PresentInterval.Immediate + }; + Device = new Device(d3d, 0, DeviceType.Hardware, backingControl.Handle, CreateFlags.HardwareVertexProcessing, pp); Sprite = new Sprite(Device); Texture = new ImageTexture(Device); MessageFont = new Font(Device, 16, 0, FontWeight.Bold, 1, false, CharacterSet.Default, Precision.Default, FontQuality.Default, PitchAndFamily.Default | PitchAndFamily.DontCare, "Arial"); diff --git a/BizHawk.MultiClient/Throttle.cs b/BizHawk.MultiClient/Throttle.cs index ca50fe19be..93ca65d996 100644 --- a/BizHawk.MultiClient/Throttle.cs +++ b/BizHawk.MultiClient/Throttle.cs @@ -9,6 +9,97 @@ namespace BizHawk.MultiClient { class Throttle { + int lastskiprate; + int framestoskip; + int framesskipped; + public bool skipnextframe; + + public bool signal_frameAdvance; + public bool signal_fastForward; + public bool signal_continuousframeAdvancing; //continuousframeAdvancing + + public int cfg_frameskiprate { get { return Global.Config.FrameSkip; } } + public bool cfg_frameLimit { get { return Global.Config.LimitFramerate; } } + public bool cfg_autoframeskipenab { get { return Global.Config.AutoMinimizeSkipping; } } + + public void Step(bool allowSleep, int forceFrameSkip) + { + int skipRate = (forceFrameSkip < 0) ? cfg_frameskiprate : forceFrameSkip; + int ffSkipRate = (forceFrameSkip < 0) ? 9 : forceFrameSkip; + + if (lastskiprate != skipRate) + { + lastskiprate = skipRate; + framestoskip = 0; // otherwise switches to lower frameskip rates will lag behind + } + + if (!skipnextframe || forceFrameSkip == 0 || signal_frameAdvance || (signal_continuousframeAdvancing && !signal_fastForward)) + { + framesskipped = 0; + + if (framestoskip > 0) + skipnextframe = true; + } + else + { + framestoskip--; + + if (framestoskip < 1) + skipnextframe = false; + else + skipnextframe = true; + + framesskipped++; + + //NDS_SkipNextFrame(); + } + + if (signal_fastForward) + { + if (framesskipped < ffSkipRate) + { + skipnextframe = true; + framestoskip = 1; + } + if (framestoskip < 1) + framestoskip += ffSkipRate; + } + else if ((/*autoframeskipenab && frameskiprate ||*/ cfg_frameLimit) && allowSleep) + { + SpeedThrottle(); + } + + if (cfg_autoframeskipenab && cfg_frameskiprate!=0) + { + if (!signal_frameAdvance && !signal_continuousframeAdvancing) + { + AutoFrameSkip_NextFrame(); + if (framestoskip < 1) + framestoskip += AutoFrameSkip_GetSkipAmount(0, skipRate); + } + } + else + { + if (framestoskip < 1) + framestoskip += skipRate; + } + + if (signal_frameAdvance && allowSleep) + { + //this logic has been replaced by some logic in steprunloop_core. + //really, it should be moved back here somehow later. + + //frameAdvance = false; + //emu_halt(); + //SPU_Pause(1); + } + //if (execute && emu_paused && !frameAdvance) + //{ + // // safety net against running out of control in case this ever happens. + // Unpause(); Pause(); + //} + } + static ulong GetCurTime() { if (tmethod == 1) @@ -46,11 +137,23 @@ namespace BizHawk.MultiClient tfreq = afsfreq << 16; } - public Throttle(float desired_fps) + public Throttle() + { + } + + public void SetCoreFps(double desired_fps) { core_desiredfps = (ulong)(65536 * desired_fps); - desiredfps = core_desiredfps; - desiredspf = 65536.0f / core_desiredfps; + SetSpeedPercent(pct); + } + + int pct = 100; + public void SetSpeedPercent(int percent) + { + pct = percent; + float fraction = percent / 100.0f; + desiredfps = (ulong)(core_desiredfps * fraction); + desiredspf = 65536.0f / desiredfps; AutoFrameSkip_IgnorePreviousDelay(); } @@ -177,5 +280,37 @@ namespace BizHawk.MultiClient return rv; } + + void SpeedThrottle() + { + AutoFrameSkip_BeforeThrottle(); + + waiter: + if (signal_fastForward) + return; + + ulong ttime = GetCurTime(); + + if ((ttime - ltime) < (tfreq / desiredfps)) + { + ulong sleepy; + sleepy = (tfreq / desiredfps) - (ttime - ltime); + sleepy *= 1000; + if (tfreq >= 65536) + sleepy /= afsfreq; + else + sleepy = 0; + if (sleepy >= 10) + Thread.Sleep((int)(sleepy / 2)); // reduce it further beacuse Sleep usually sleeps for more than the amount we tell it to + else if (sleepy > 0) // spin for <1 millisecond waits + Thread.Sleep(0); + //SwitchToThread(); // limit to other threads on the same CPU core for other short waits + goto waiter; + } + if ((ttime - ltime) >= (tfreq * 4 / desiredfps)) + ltime = ttime; + else + ltime += tfreq / desiredfps; + } } } \ No newline at end of file