[Nodes] PixelData preserves stream if possible, and has Apply Stride pin, to perform slow copy but packing pixels.

--- Nodes/VVVV.DX11.Nodes/Nodes/Textures/2D/PixelData.cs
+++ Nodes/VVVV.DX11.Nodes/Nodes/Textures/2D/PixelData.cs
@@ -16,14 +16,24 @@

 using System.IO;
 using SlimDX;
+using System.Runtime.InteropServices;
+using FeralTic.DX11.Utils;

 namespace VVVV.DX11.Nodes
 {
     [PluginInfo(Name = "PixelData", Category = "DX11.Texture", Version = "2d", Author = "vux", Credits = "vux")]
-    public class TexturePixelDataNode : IPluginEvaluate, IDX11ResourceDataRetriever, IPartImportsSatisfiedNotification
+    public unsafe class TexturePixelDataNode : IPluginEvaluate, IDX11ResourceDataRetriever, IPartImportsSatisfiedNotification
     {
+        private FormatHelper formatHelper = FormatHelper.Instance;
+
+        [DllImport("msvcrt.dll", SetLastError = false)]
+        static extern IntPtr memcpy(byte* dest, byte* src, int count);
+
         [Input("Texture In", IsSingle =true, AutoValidate =false)]
         protected Pin<DX11Resource<DX11Texture2D>> FTextureIn;
+
+        [Input("Apply Stride")]
+        protected ISpread<bool> FApplyStride;

         [Input("Read", IsBang = true)]
         protected ISpread<bool> FRead;
@@ -55,7 +65,8 @@
             FStreamOut.SliceCount = 0;
         }

-        Stream lastStream;
+        DataStream lastStream;
+        byte[] binter = new byte[0];

         #region IPluginEvaluate Members

@@ -79,11 +90,7 @@

                     if (this.FTextureIn[0].Contains(this.AssignedContext))
                     {
-                        if (this.lastStream != null)
-                        {
-                            this.lastStream.Dispose();
-                            this.lastStream = null;
-                        }
+

                         var texture = this.FTextureIn[0][context];
                         var staging = new DX11StagingTexture2D(context, texture.Width, texture.Height, texture.Format);
@@ -93,16 +100,53 @@

                         strideOut[0] = db.RowPitch;

-                        MemoryStream ms = new MemoryStream((int)db.Data.Length);
-                        db.Data.CopyTo(ms);
-                        ms.Position = 0;
+                        if (this.lastStream != null)
+                        {
+                            if (this.lastStream.Length != db.Data.Length)
+                            {
+                                this.lastStream.Dispose();
+                                this.lastStream = null;
+                            }
+                        }
+
+                        if (this.lastStream == null)
+                        {
+                            this.lastStream = new DataStream((int)db.Data.Length, true, true);
+                        }
+
+                        this.lastStream.Position = 0;
+
+                        int pixelStride = formatHelper.GetSize(texture.Format);
+                        int dstStride = pixelStride * texture.Width;
+
+                        if (FApplyStride[0])
+                        {
+                            if (this.binter.Length != db.RowPitch)
+                            {
+                                this.binter = new byte[db.RowPitch];
+                            }
+
+                            byte* destPointer = (byte*)this.lastStream.DataPointer.ToPointer();
+                            byte* srcPointer = (byte*)db.Data.DataPointer.ToPointer();
+
+                            for (int i = 0; i < texture.Height; i++)
+                            {
+                                memcpy(destPointer, srcPointer, dstStride);
+                                destPointer += dstStride;
+                                srcPointer += db.RowPitch;
+                            }
+                        }
+                        else
+                        {
+                            db.Data.CopyTo(this.lastStream);
+                        }
+                        this.lastStream.Position = 0;

                         staging.UnLock();
                         staging.Dispose();

-                        FStreamOut[0] = ms;
+                        FStreamOut[0] = this.lastStream;
                         FStreamOut.Flush(true);
-                        this.lastStream = ms;
                     }
                 }
             }


Changed enclave creation to use the enclave configuration.

--- NtObjectManager/Cmdlets/Object/NewNtEnclaveCmdlet.cs
+++ NtObjectManager/Cmdlets/Object/NewNtEnclaveCmdlet.cs
@@ -1,10 +1,7 @@
 using NtApiDotNet;
+using NtApiDotNet.Win32.Security.Authenticode;
 using System;
-using System.Collections.Generic;
-using System.Linq;
 using System.Management.Automation;
-using System.Text;
-using System.Threading.Tasks;

 namespace NtObjectManager.Cmdlets.Object
 {
@@ -21,25 +18,13 @@
     public class NewNtEnclaveCmdlet : PSCmdlet
     {
         /// <summary>
-        /// <para type="description">Specify to create a VBS enclave.</para>
-        /// </summary>
-        [Parameter(Mandatory = true, ParameterSetName = "FromVBS")]
-        public SwitchParameter VBS { get; set; }
-
-        /// <summary>
         /// <para type="description">Specify to process to create the enclave in.</para>
         /// </summary>
         [Parameter(ParameterSetName = "FromVBS")]
         public NtProcess Process { get; set; }

         /// <summary>
-        /// <para type="description">Specify the enclave size in bytes.</para>
-        /// </summary>
-        [Parameter(Mandatory = true, Position = 0, ParameterSetName = "FromVBS")]
-        public long Size { get; set; }
-
-        /// <summary>
-        /// <para type="description">Specify the VBS enclave enclave size in bytes.</para>
+        /// <para type="description">Specify the VBS enclave flags.</para>
         /// </summary>
         [Parameter(ParameterSetName = "FromVBS")]
         public LdrEnclaveVBSFlags VBSFlags { get; set; }
@@ -51,33 +36,28 @@
         public byte[] OwnerId { get; set; }

         /// <summary>
-        /// <para type="description">Specify the initial image file to load in the enclave.</para>
+        /// <para type="description">Specify the primary image file to load in the enclave.</para>
         /// </summary>
-        [Parameter(Mandatory = true, Position = 2, ParameterSetName = "FromVBS")]
-        public string InitialImageFile { get; set; }
-
-        /// <summary>
-        /// <para type="description">Specify the number of threads to create in the enclave.</para>
-        /// </summary>
-        [Parameter(ParameterSetName = "FromVBS")]
-        public int ThreadCount { get; set; }
+        [Parameter(Mandatory = true, Position = 0, ParameterSetName = "FromVBS")]
+        public string ImageFile { get; set; }

         /// <summary>
         /// Process record.
         /// </summary>
         protected override void ProcessRecord()
         {
+            var config = AuthenticodeUtils.GetEnclaveConfiguration(ImageFile);
+
             if (Process == null)
             {
                 Process = NtProcess.Current;
             }
-            var enclave = Process.CreateEnclaveVBS(Size, VBSFlags, OwnerId);
+
+            var enclave = Process.CreateEnclaveVBS(config.EnclaveSize, VBSFlags, OwnerId);
             try
             {
-                enclave.LoadModule(InitialImageFile, IntPtr.Zero);
-                if (ThreadCount <= 0)
-                    ThreadCount = 8;
-                enclave.Initialize(ThreadCount);
+                enclave.LoadModule(ImageFile, IntPtr.Zero);
+                enclave.Initialize(config.NumberOfThreads);
                 WriteObject(enclave);
             }
             catch


corrected this test to be 1-based (and trigger null)

--- Octokit.Tests/Models/ReadOnlyPagedCollectionTests.cs
+++ Octokit.Tests/Models/ReadOnlyPagedCollectionTests.cs
@@ -77,7 +77,7 @@

                 connection.Get<List<object>>(nextPageUrl, null, null).Returns(nextPageResponse);

-                var pageCount = 0;
+                var pageCount = 1;

                 var pagedCollection = new ReadOnlyPagedCollection<object>(
                     response,
@@ -95,7 +95,7 @@
                 var second = await pagedCollection.GetNextPage();

                 Assert.NotNull(first);
-                Assert.NotNull(second);
+                Assert.Null(second);
             }
         }
     }


Make the kicked user's avie truly disappear when it's god-kicked.

--- OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs
+++ OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs
@@ -278,8 +278,7 @@
             if (sp.IsChildAgent)
                 return;
             sp.ControllingClient.Kick(reason);
-            sp.MakeChildAgent();
-            sp.ControllingClient.Close();
+            sp.Scene.IncomingCloseAgent(sp.UUID, true);
         }

         private void OnIncomingInstantMessage(GridInstantMessage msg)


Always save files before committing.

Always save files before committing.

--- OpenSim/Services/CapsService/PerRegionCapsService.cs
+++ OpenSim/Services/CapsService/PerRegionCapsService.cs
@@ -58,12 +58,6 @@
             get { return m_RegionHandle; }
         }

-        private UUID m_RegionID;
-        public UUID RegionID
-        {
-            get { return m_RegionID; }
-        }
-
         protected Dictionary<UUID, IRegionClientCapsService> m_clientsInThisRegion =
             new Dictionary<UUID, IRegionClientCapsService>();

@@ -76,9 +70,8 @@
         /// </summary>
         /// <param name="regionHandle"></param>
         /// <param name="regionID"></param>
-        public void Initialise(ulong regionHandle, UUID regionID)
-        {
-            m_RegionID = regionID;
+        public void Initialise(ulong regionHandle)
+        {
             m_RegionHandle = regionHandle;
         }


Added overload to inject mutation operator in EAX algorithm.

--- OsmSharp.Logistics/Solutions/TSP/GA/EAX/EAXSolver.cs
+++ OsmSharp.Logistics/Solutions/TSP/GA/EAX/EAXSolver.cs
@@ -36,6 +36,16 @@
         public EAXSolver(GASettings settings)
             : base(new HillClimbing3OptSolver(), new EAXOperator(30, EAXOperator.EdgeAssemblyCrossoverSelectionStrategyEnum.SingleRandom, true),
             new TournamentSelectionOperator<ITSP, IRoute>(10, 0.5), new EmptyOperator<ITSP, IRoute>(), settings)
+        {
+
+        }
+
+        /// <summary>
+        /// Creates a new EAX-solver.
+        /// </summary>
+        public EAXSolver(GASettings settings, IOperator<ITSP, IRoute> mutation)
+            : base(new HillClimbing3OptSolver(), new EAXOperator(30, EAXOperator.EdgeAssemblyCrossoverSelectionStrategyEnum.SingleRandom, true),
+            new TournamentSelectionOperator<ITSP, IRoute>(10, 0.5), mutation, settings)
         {

         }


Fix unit test.

Fix unit test.

--- DynamicStyleBundles.Tests/DynamicStyleBundleTest.cs
+++ DynamicStyleBundles.Tests/DynamicStyleBundleTest.cs
@@ -91,7 +91,7 @@
             var response = bundle.GenerateBundleResponse(context);

             Assert.That(response.Cacheability, Is.EqualTo(HttpCacheability.Public));
-            Assert.That(response.ContentType, Is.EqualTo("text/css"));
+            Assert.That(response.ContentType, Is.Null);
             Assert.That(response.Content, Is.Empty);
             Assert.That(response.Files, Is.Not.Null);
             Assert.That(response.Files.Count(), Is.EqualTo(0));


Update UserControlStarDistance.cs

Update UserControlStarDistance.cs

--- EDDiscovery/UserControls/UserControlStarDistance.cs
+++ EDDiscovery/UserControls/UserControlStarDistance.cs
@@ -138,7 +138,8 @@
                         }
                     }
                     else
-                    {   int rowindex = dataGridViewNearest.Rows.Add(rowobj);
+                    {
+                        int rowindex = dataGridViewNearest.Rows.Add(rowobj);
                         dataGridViewNearest.Rows[rowindex].Tag = tvp.Value;
                     }


Fix IMMDevice::Activate E_POINTER/NullReferenceException

--- EarTrumpet/DataModel/Internal/AudioDeviceManager.cs
+++ EarTrumpet/DataModel/Internal/AudioDeviceManager.cs
@@ -149,8 +149,10 @@
                             _devices.Add(new SafeAudioDevice(new AudioDevice(device, this, _dispatcher)));
                         }
                     }
-                    catch(COMException ex)
+                    catch(Exception ex)
                     {
+                        // We catch Exception here because IMMDevice::Activate can return E_POINTER/NullReferenceException, as well as other expcetions listed here:
+                        // https://docs.microsoft.com/en-us/dotnet/framework/interop/how-to-map-hresults-and-exceptions
                         Debug.WriteLine(ex);
                     }
                 }


RootSample - add test for summing same sqrt with real & imag


Added append argument to start-script

Added append argument to start-script

--- CrowesNest/HackTool.cs
+++ CrowesNest/HackTool.cs
@@ -57,7 +57,7 @@
                     else
                     {
                         string tmpfilename = this.DeployString.Replace(" ", "_");
-                        string deployCommand = $"-NoExit -Command &{{Start-Transcript -Path '{this.Client}\\{tmpfilename}.txt'; {this.DeployString}; Stop-Transcript}}";
+                        string deployCommand = $"-NoExit -Command &{{Start-Transcript -Append -Path '{this.Client}\\{tmpfilename}.txt'; {this.DeployString}; Stop-Transcript}}";
                         ProcessStartInfo psInfo = new ProcessStartInfo("powershell.exe", deployCommand);
                         psInfo.UseShellExecute = true;


And now the tests pass.

And now the tests pass.

Note that I did not even need to add the Slim library since I did not
actually use anything in the library for my test. The Slim library is
perfectly capable of using a POCO (Plain ol' C# object).

--- ProteinTracker/ProteinTrackerDotNetSlim/HelloSlim.cs
+++ ProteinTracker/ProteinTrackerDotNetSlim/HelloSlim.cs
@@ -2,5 +2,12 @@
 {
     public class HelloSlim
     {
+        public string FirstName { get; set; }
+        public string LastName { get; set; }
+
+        public string FullName()
+        {
+            return FirstName + " " + LastName;
+        }
     }
 }


Simplified Lesson 1 PrintElementTemplates() to just use AFElementTemplate data type instead of a list

--- Ex1-Connection-And-Hierarchy-Basics-Sln/Program1.cs
+++ Ex1-Connection-And-Hierarchy-Basics-Sln/Program1.cs
@@ -63,17 +63,7 @@
             AFNamedCollectionList<AFElementTemplate> elemTemplates = database.ElementTemplates.FilterBy(typeof(AFElement));
             foreach (AFElementTemplate elemTemp in elemTemplates)
             {
-                var categories = new List<string>();
-                foreach (AFCategory category in elemTemp.Categories)
-                {
-                    categories.Add(category.Name);
-                }
-
-                string categoriesString = string.Join(",", categories);
-                Console.WriteLine("Name: {0}; Categories: {1}", elemTemp.Name, categoriesString);
-
-                // Note: An alternative approach is to use CategoriesString directly: "CategoriesString read only property returns the list of categories in a string separated by semicolons."
-                //Console.WriteLine("Name: {0}, Categories: {1}", elemTemp.Name, elemTemp.CategoriesString);
+                Console.WriteLine("Name: {0}; Categories: {1}", elemTemp.Name, elemTemp.CategoriesString);
             }

             Console.WriteLine();


fix nullref

fix nullref

--- EyeInTheSky.Web/Services/NancyUserMapper.cs
+++ EyeInTheSky.Web/Services/NancyUserMapper.cs
@@ -28,7 +28,10 @@

             var identity = new UserIdentity(user);

-            ((List<string>) identity.Claims).AddRange(user.GlobalFlags.ToCharArray().Select(x => x.ToString()));
+            if (!string.IsNullOrWhiteSpace(user.GlobalFlags))
+            {
+                ((List<string>) identity.Claims).AddRange(user.GlobalFlags.ToCharArray().Select(x => x.ToString()));
+            }

             return identity;


Version bump to 1.4

Version bump to 1.4

--- FBExtendedEvents/Properties/AssemblyInfo.cs
+++ FBExtendedEvents/Properties/AssemblyInfo.cs
@@ -19,5 +19,5 @@
 [assembly: AssemblyConfiguration("Release")]
 #endif

-[assembly: AssemblyVersion("1.3.*")]
-[assembly: AssemblyFileVersion("1.3.0.0")]
+[assembly: AssemblyVersion("1.4.*")]
+[assembly: AssemblyFileVersion("1.4.0.0")]


Version bump to v1.7.2

Version bump to v1.7.2

--- FBExtendedEvents/Properties/AssemblyInfo.cs
+++ FBExtendedEvents/Properties/AssemblyInfo.cs
@@ -19,5 +19,5 @@
 [assembly: AssemblyConfiguration("Release")]
 #endif

-[assembly: AssemblyVersion("1.7.0.*")]
-[assembly: AssemblyFileVersion("1.7.0.0")]
+[assembly: AssemblyVersion("1.7.2.*")]
+[assembly: AssemblyFileVersion("1.7.2.0")]


Changed text of "Time Table" menu item to "Event Time Table"

--- GW2PAO/Controllers/ApplicationController.cs
+++ GW2PAO/Controllers/ApplicationController.cs
@@ -372,7 +372,7 @@
         private void BuildMenuItems()
         {
             // Event Menu Items
-            var eventTimeTableMenus = new MenuItemViewModel("Time Table", null);
+            var eventTimeTableMenus = new MenuItemViewModel("Event Time Table", null);
             var standardEvents = new MenuItemViewModel("Standard", null, true,
                 () => { return !this.EventSettings.UseAdjustedTimeTable; },
                 (selected) => this.EventSettings.UseAdjustedTimeTable = !selected,


Increase version number before publishing

--- GitAutoUpdateGUI/Properties/AssemblyInfo.cs
+++ GitAutoUpdateGUI/Properties/AssemblyInfo.cs
@@ -31,5 +31,5 @@
 // Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut
 // en utilisant '*', comme indiqué ci-dessous :
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.4.0.0")]
-[assembly: AssemblyFileVersion("1.4.0.0")]
+[assembly: AssemblyVersion("1.5.0.0")]
+[assembly: AssemblyFileVersion("1.5.0.0")]


refactored createnode

refactored createnode

--- GraafMachine/Controllers/GraafController.cs
+++ GraafMachine/Controllers/GraafController.cs
@@ -24,18 +24,19 @@
         {
             // Loop through all lines
             foreach(String line in lines) {
-                // lineSplit[0] is the name of the node
-                // lineSplit[1] is the node type
+
                 string[] lineSplit = line.Split(':');
                 string nodeName = lineSplit[0];
                 string nodeType = lineSplit[1];
+
                 bool exists = checkExistence(nodeName);
+
                 if (exists)
                 {
                     // Create link
                 } else
                 {
-                    createNode(nodeName, nodeType);
+                    nodes.Add(createNode(nodeName, nodeType));
                 }
             }

@@ -57,14 +58,14 @@
             return false;
         }

-        private void createNode(string name, string type)
+        private BaseNode createNode(string name, string type)
         {
             try
             {
                 BaseNode node = BaseNode.create(type);
                 // Set name and add to list
                 node.setName(name);
-                nodes.Add(node);
+                return node;
             }
             catch (Exception e)
             {


propertychanged pattern

propertychanged pattern

--- Hyperstore/DomainModel/Impl/ModelElement.cs
+++ Hyperstore/DomainModel/Impl/ModelElement.cs
@@ -26,6 +26,7 @@
 using Hyperstore.Modeling.Commands;
 using Hyperstore.Modeling.Domain;
 using Hyperstore.Modeling.Metadata;
+using System.Runtime.CompilerServices;

 #endregion

@@ -103,6 +104,8 @@
             if (!(this is INotifyPropertyChanged))
                 return calculation();

+            SetCalculatedPropertySource(propertyName);
+
             var session = EnsuresRunInSession();
             try
             {
@@ -477,7 +480,7 @@
             return null;
         }

-        protected void SetCalculatedPropertySource(string propertyName)
+        protected void SetCalculatedPropertySource([CallerMemberName]string propertyName=null)
         {
             var tracker = Session.Current as ISupportsCalculatedPropertiesTracking;
             if (tracker != null)


Infoline

Infoline

--- configware/Klli.Sensact.Config/Sattlerstrasse16.cs
+++ configware/Klli.Sensact.Config/Sattlerstrasse16.cs
@@ -10,6 +10,8 @@
         private const int DEFAULT_MIN_DIM_LEVEL = 20;

         //Zählreihenfolge beim EIB-Kabel: rot, schwarz, weiß, gelb
+
+        //Infos: RL 32 ist für LX.Back.P3 auf Klemme X1.40.
         public static Model Build()
         {
             #region Floor sensors


add exception with helpful message in impossible null case

--- ExpressionToCodeLib/Internal/ObjectStringifyImpl.cs
+++ ExpressionToCodeLib/Internal/ObjectStringifyImpl.cs
@@ -45,7 +45,7 @@
                         match.Groups[1].Value,
                     _ => methodInfoVal.Name,
                 },
-            _ when val is ValueType && Activator.CreateInstance(val.GetType()).Equals(val) => "default(" + TypeNameToCode(val.GetType()) + ")",
+            _ when val is ValueType && (Activator.CreateInstance(val.GetType()) ?? throw new("value types cannot be null: " + val.GetType())).Equals(val) => "default(" + TypeNameToCode(val.GetType()) + ")",
             _ => null
         };


Added a test for the MethodInfo action redirect test

--- FluentMVCTesting.Tests/ControllerResultTestTests.cs
+++ FluentMVCTesting.Tests/ControllerResultTestTests.cs
@@ -70,6 +70,10 @@
                 t => t.ShouldRedirectTo(c => c.ActionWithMoreThanThreeParameters(0, 0, 0, 0)),
                 c => c.RedirectToActionWithMoreThanThreeParameters()
             ),
+            ActionRedirect("ActionWithMoreThanThreeParameters",
+                t => t.ShouldRedirectTo(typeof(ControllerResultTestController).GetMethod("ActionWithMoreThanThreeParameters")),
+                c => c.RedirectToActionWithMoreThanThreeParameters()
+            ),
         };
         // Different ways that redirects to another controller can be asserted
         private static readonly List<TestAction> OtherControllerRedirects = new List<TestAction>


カオスヘリが移動しないバグを修正

カオスヘリが移動しないバグを修正

--- Inferno/ExtensionMethods/NativeFunctions.cs
+++ Inferno/ExtensionMethods/NativeFunctions.cs
@@ -190,7 +190,7 @@
         /// <param name="speed"></param>
         public static void DriveTo(this Vehicle vehicle, Ped ped, Vector3 waypoint, float speed,DrivingStyle drivingStyle)
         {
-            if(!vehicle.IsSafeExist() || ped.IsSafeExist()) return;
+            if(!vehicle.IsSafeExist() || !ped.IsSafeExist()) return;
             Function.Call(Hash.TASK_VEHICLE_DRIVE_TO_COORD, ped, vehicle, waypoint.X, waypoint.Y, waypoint.Z, speed, 1, vehicle.Model.Hash, 1, (int)drivingStyle, -1);
         }


Swagger Oauth2 added

Swagger Oauth2 added

--- SAEON.Observations.WebAPI/App_Start/SwaggerConfig.cs
+++ SAEON.Observations.WebAPI/App_Start/SwaggerConfig.cs
@@ -116,12 +116,13 @@
                         //    });
                         c.OAuth2("oauth2")
                             .Description("OAuth2 Implicit Grant")
-                            .Flow("hybrid")
+                            .Flow("implicit")
                             .AuthorizationUrl("https://localhost:44311/oauth2/connect/authorize")
                             .TokenUrl("https://localhost:44311/oauth2/connect/token")
                             .Scopes(scopes =>
                             {
-                                scopes.Add("SAEON.Observations.WebAPI", "SAEON Observations Database WebAPI");
+                                scopes.Add("Swagger", "Swagger");
+                                scopes.Add("SAEON.Observations.WebAPI", "SAEON observations WebAPI");
                             });

@@ -294,7 +295,7 @@
                         //    appName: "Swagger UI"
                         ////additionalQueryStringParams: new Dictionary<string, string>() { { "foo", "bar" } }
                         //);
-                        //c.EnableOAuth2Support("SAEON.Observations.WebAPI", "saeon.ac.za", "Swagger UI");
+                        c.EnableOAuth2Support("Swagger", "Swagger", "Swagger", "Swagger UI");

                         // If your API supports ApiKey, you can override the default values.
                         // "apiKeyIn" can either be "query" or "header"


Fix error

Fix error

--- GitMind/ApplicationHandling/LatestVersionService.cs
+++ GitMind/ApplicationHandling/LatestVersionService.cs
@@ -296,7 +296,7 @@
 				if (IsNewVersionInstalled())
 				{
 					Log.Info("Newer version is installed, restart ...");
-					if (restartService.TriggerRestart(workingFolder))
+					if (startInstanceService.StartInstance(workingFolder))
 					{
 						// Newer version is started, close this instance
 						Application.Current.Shutdown(0);


Adjusted initial size of Project Properties dialog and fixed its resize behavior

--- Gum/Gui/Forms/ProjectPropertyGridWindow.Designer.cs
+++ Gum/Gui/Forms/ProjectPropertyGridWindow.Designer.cs
@@ -29,29 +29,21 @@
         private void InitializeComponent()
         {
             this.TopPropertyGrid = new System.Windows.Forms.PropertyGrid();
+            this.AutoSaveCheckBox = new System.Windows.Forms.CheckBox();
             this.GuideListDisplay = new Gum.Gui.Controls.GuideListDisplay();
-            this.AutoSaveCheckBox = new System.Windows.Forms.CheckBox();
             this.SuspendLayout();
             //
             // TopPropertyGrid
             //
+            this.TopPropertyGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
             this.TopPropertyGrid.HelpVisible = false;
             this.TopPropertyGrid.Location = new System.Drawing.Point(12, 35);
             this.TopPropertyGrid.Name = "TopPropertyGrid";
-            this.TopPropertyGrid.Size = new System.Drawing.Size(262, 72);
+            this.TopPropertyGrid.Size = new System.Drawing.Size(238, 110);
             this.TopPropertyGrid.TabIndex = 0;
             this.TopPropertyGrid.ToolbarVisible = false;
             this.TopPropertyGrid.PropertyValueChanged += new System.Windows.Forms.PropertyValueChangedEventHandler(this.TopPropertyGridValueChanged);
-            //
-            // GuideListDisplay
-            //
-            this.GuideListDisplay.GumProjectSave = null;
-            this.GuideListDisplay.Location = new System.Drawing.Point(12, 118);
-            this.GuideListDisplay.Margin = new System.Windows.Forms.Padding(3, 8, 3, 3);
-            this.GuideListDisplay.Name = "GuideListDisplay";
-            this.GuideListDisplay.Padding = new System.Windows.Forms.Padding(0, 8, 0, 0);
-            this.GuideListDisplay.Size = new System.Drawing.Size(262, 142);
-            this.GuideListDisplay.TabIndex = 1;
             //
             // AutoSaveCheckBox
             //
@@ -64,11 +56,24 @@
             this.AutoSaveCheckBox.UseVisualStyleBackColor = true;
             this.AutoSaveCheckBox.CheckedChanged += new System.EventHandler(this.AutoSaveCheckBox_CheckedChanged);
             //
+            // GuideListDisplay
+            //
+            this.GuideListDisplay.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+            | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.GuideListDisplay.GumProjectSave = null;
+            this.GuideListDisplay.Location = new System.Drawing.Point(12, 156);
+            this.GuideListDisplay.Margin = new System.Windows.Forms.Padding(3, 8, 3, 3);
+            this.GuideListDisplay.Name = "GuideListDisplay";
+            this.GuideListDisplay.Padding = new System.Windows.Forms.Padding(0, 8, 0, 0);
+            this.GuideListDisplay.Size = new System.Drawing.Size(238, 188);
+            this.GuideListDisplay.TabIndex = 1;
+            //
             // ProjectPropertyGridWindow
             //
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.ClientSize = new System.Drawing.Size(286, 272);
+            this.ClientSize = new System.Drawing.Size(262, 356);
             this.Controls.Add(this.AutoSaveCheckBox);
             this.Controls.Add(this.GuideListDisplay);
             this.Controls.Add(this.TopPropertyGrid);


Bug fixed: パラメータのみの指定の場合、SQLがエラーとなる問題を解消。

--- Implem.Libraries/DataSources/SqlServer/SqlUpdate.cs
+++ Implem.Libraries/DataSources/SqlServer/SqlUpdate.cs
@@ -73,7 +73,7 @@
                                 prefix: "_sub",
                                 commandCount: commandCount) + ")");
                     }
-                    else
+                    else if (!sqlParam.ColumnBracket.IsNullOrEmpty())
                     {
                         columnNameCollection.Add(
                             sqlParam.ColumnBracket + "=@" + sqlParam.VariableName + commandCount);


Missed the child container prop

Missed the child container prop

--- IocPerformance/Adapters/StashboxContainerAdapter.cs
+++ IocPerformance/Adapters/StashboxContainerAdapter.cs
@@ -30,7 +30,7 @@

         public override bool SupportsPropertyInjection => true;

-        public override bool SupportsChildContainer => false;
+        public override bool SupportsChildContainer => true;

         public override bool SupportsConditional => true;


Updated Grouping Unit Test to reflect desired results

--- KendoGridBinderEx.UnitTests/KendoGridExUnitTests.cs
+++ KendoGridBinderEx.UnitTests/KendoGridExUnitTests.cs
@@ -422,7 +422,7 @@
             var groups = kendoGrid.Groups as List<KendoGroup>;
             Assert.IsNotNull(groups);

-            Assert.AreEqual(10, groups.Count());
+            Assert.AreEqual(9, groups.Count());
             Assert.AreEqual(employees.Count(), kendoGrid.Total);

             var groupBySmith = groups.FirstOrDefault(g => g.value.ToString() == "Smith");


switch pc

switch pc

--- LegendaryClient/Windows/CustomGameLobbyPage.xaml.cs
+++ LegendaryClient/Windows/CustomGameLobbyPage.xaml.cs
@@ -302,30 +302,76 @@
             }
         }

-        private static List<int> bots = new List<int>()
-        {
+        private static List<int> bots = new List<int>(new Int32[]
+        {
             12, 32, 1, 22, 53, 63, 51, 69, 31, 42,
             122, 36, 81, 9, 3, 86, 104, 39, 59, 24,
             30, 10, 96, 89, 236, 99, 54, 90, 11, 21,
             62, 25, 75, 20, 33, 58, 13, 98, 102, 15,
             16, 50, 44, 18, 48, 77, 45, 8, 19, 5,
             115, 26, 143
-        };
-
-        private void AddBotBlueTeam_Click(object sender, RoutedEventArgs e)
+        });
+
+        private int getRandomChampInt()
+        {
+            Random rnd = new Random();
+            int r = rnd.Next(bots.Count);
+            return bots[r];
+        }
+
+        private async void AddBotBlueTeam_Click(object sender, RoutedEventArgs e)
+        {
+            int champint = getRandomChampInt();
+            champions champions = champions.GetChampion(champint);
+            ChampionDTO champDTO = new ChampionDTO();
+            champDTO.Active = true;
+            champDTO.Banned = false;
+            champDTO.BotEnabled = true;
+            champDTO.ChampionId = champint;
+            champDTO.DisplayName = champions.displayName;
+
+            List<ChampionSkinDTO> skinlist = new List<ChampionSkinDTO>();
+            foreach (Dictionary<string, object> Skins in champions.Skins)
+            {
+                ChampionSkinDTO skin = new ChampionSkinDTO();
+                skin.ChampionId = champint;
+                skin.FreeToPlayReward = false;
+                int SkinInt = Convert.ToInt32(Skins["id"]);
+                skin.SkinId = SkinInt;
+                List<ChampionDTO> champs = new List<ChampionDTO>(Client.PlayerChampions);
+                foreach (ChampionDTO x in champs)
+                {
+                    foreach (ChampionSkinDTO myskin in x.ChampionSkins)
+                    {
+                        if (myskin.Owned) { }
+                    }
+                }
+                skin.Owned = true;
+                skinlist.Add(skin);
+            }
+            champDTO.ChampionSkins = skinlist;
+
+            BotParticipant par = new BotParticipant();
+            par.BotSkillLevelName = "Basic";
+            par.BotSkillLevel = 0;
+            par.Champion = champDTO;
+
+            await Client.PVPNet.SelectBotChampion(champint,  par);
+
+
+            await Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() =>
+            {
+
+
+            }));
+        }
+
+        private void AddBotPurpleTeam_Click(object sender, RoutedEventArgs e)
         {
             Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() =>
             {
                 //Needs looked into
             }));
         }
-
-        private void AddBotPurpleTeam_Click(object sender, RoutedEventArgs e)
-        {
-            Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() =>
-            {
-                //Needs looked into
-            }));
-        }
     }
 }


more on Clone workflow

more on Clone workflow

--- Signum.Engine.Extensions/Workflow/WorkflowBuilder.cs
+++ Signum.Engine.Extensions/Workflow/WorkflowBuilder.cs
@@ -280,6 +280,7 @@
                 allConnections.Values.Select(c => new WorkflowConnectionEntity
                 {
                     Name = c.Entity.Name,
+                    BpmnElementId = c.bpmnElementId,
                     Action = c.Entity.Action,
                     Condition = c.Entity.Condition,
                     DecisonResult = c.Entity.DecisonResult,
@@ -288,6 +289,11 @@
                     From = nodes.GetOrThrow(c.Entity.From),
                     To = nodes.GetOrThrow(c.Entity.To),
                 }).SaveList();
+            }
+
+            foreach (var item in nodes.Where(a => a.Key is WorkflowEventEntity e && (e.Type == WorkflowEventType.ConditionalStart || e.Type == WorkflowEventType.TimerStart)))
+            {
+                WorkflowEventTaskLogic.CloneScheduledTasks((WorkflowEventEntity)item.Key, (WorkflowEventEntity)item.Value);
             }

             WorkflowBuilder wb = new WorkflowBuilder(newWorkflow, useCache: false);


Cherry picked Module Extension

Cherry picked Module Extension

--- SoraBot-v2/SoraBot-v2/Extensions/ModuleExtensions.cs
+++ SoraBot-v2/SoraBot-v2/Extensions/ModuleExtensions.cs
@@ -11,5 +11,20 @@
         {
             return await module.Context.Channel.SendMessageAsync("", embed: Utility.ResultFeedback(embedColor, embedEmoji, message).Build());
         }
+
+        public static async Task<IUserMessage> ReplySoraEmbedFailiureResponse(this ModuleBase<SocketCommandContext> module, string message)
+        {
+            return await module.Context.Channel.SendMessageAsync("", embed: Utility.ResultFeedback(Utility.RedFailiureEmbed, Utility.FailiureEmoji, message).Build());
+        }
+
+        public static async Task<IUserMessage> ReplySoraEmbedWarningResponse(this ModuleBase<SocketCommandContext> module, string message)
+        {
+            return await module.Context.Channel.SendMessageAsync("", embed: Utility.ResultFeedback(Utility.YellowWarningEmbed, Utility.WarnEmoji, message).Build());
+        }
+
+        public static async Task<IUserMessage> ReplySoraEmbedSuccessResponse(this ModuleBase<SocketCommandContext> module, string message)
+        {
+            return await module.Context.Channel.SendMessageAsync("", embed: Utility.ResultFeedback(Utility.GreenSuccessEmbed, Utility.SuccessEmoji, message).Build());
+        }
     }
 }


Add required DI services in AddCsla

Add required DI services in AddCsla

--- Source/Csla/Configuration/ConfigurationExtensions.cs
+++ Source/Csla/Configuration/ConfigurationExtensions.cs
@@ -34,10 +34,25 @@
     /// <param name="config">Implement to configure CSLA .NET</param>
     public static ICslaBuilder AddCsla(this IServiceCollection services, Action<CslaConfiguration> config)
     {
+      // Configuration
+      config?.Invoke(CslaConfiguration.Configure());
+
+      // ApplicationContext
       services.TryAddScoped<ApplicationContext>();
       services.TryAddScoped(typeof(Core.IContextManager), typeof(Core.ApplicationContextManager));
+
+      // Data portal services
+      services.TryAddSingleton(typeof(Server.IDataPortalServer), typeof(Csla.Server.DataPortal));
+      services.TryAddSingleton(typeof(Server.Dashboard.IDashboard), typeof(Csla.Server.Dashboard.NullDashboard));
+      services.TryAddTransient<Server.DataPortalSelector>();
+      services.TryAddTransient<Server.SimpleDataPortal>();
+      services.TryAddTransient<Server.FactoryDataPortal>();
+      services.TryAddTransient<Server.DataPortalBroker>();
+
+      // Data portal API
       services.TryAddTransient(typeof(IDataPortal<>), typeof(DataPortal<>));
-      config?.Invoke(CslaConfiguration.Configure());
+      services.TryAddTransient(typeof(IChildDataPortal<>), typeof(DataPortal<>));
+
       return new CslaBuilder(services);
     }


bug fix

bug fix

--- Source/Parsing/Syntax/PStatements/PExpressionNode.cs
+++ Source/Parsing/Syntax/PStatements/PExpressionNode.cs
@@ -910,7 +910,9 @@
             while (this.Index < this.RewrittenStmtTokens.Count)
             {
                 if (counter > 0 &&
-                    this.RewrittenStmtTokens[this.Index].Type == TokenType.LeftParenthesis)
+                    this.RewrittenStmtTokens[this.Index].Type == TokenType.LeftParenthesis &&
+                    (this.RewrittenStmtTokens[this.Index - 1].Type == TokenType.LeftParenthesis ||
+                    this.RewrittenStmtTokens[this.Index - 1].Type == TokenType.Comma))
                 {
                     text = "Container.Create";
                     this.RewrittenStmtTokens.Insert(this.Index, new Token(new TextUnit(text, line)));


Fixed that issue you were talking about fixes #1

--- TestingApplication/TestingApplication/TestProgram.cs
+++ TestingApplication/TestingApplication/TestProgram.cs
@@ -13,6 +13,8 @@
         {
             Console.WriteLine("Hello World\nPress any key to close...");

+            Console.WriteLine("Added some text");
+
             Console.ReadKey();
         }
     }


Highlight uvs for non-black items

Highlight uvs for non-black items

--- UVRefocus/Assets/UVRefocus/Editor/UVRefocusEditor.cs
+++ UVRefocus/Assets/UVRefocus/Editor/UVRefocusEditor.cs
@@ -990,7 +990,7 @@
             Color[] pixels = _sInstanceUVMap.GetPixels();
             for (int index = 0; index < colors.Length; ++index)
             {
-                if (colors[index] == Color.white)
+                if (colors[index] == Color.black)
                 {
                     Vector2 uv = uvs[index];
                     //SetPixelForUV(pixels, ref uv, Color.white);


barefoot dict was missing clownstep reference (for bananium)

--- UnityProject/Assets/Scripts/Managers/SoundManager.cs
+++ UnityProject/Assets/Scripts/Managers/SoundManager.cs
@@ -71,7 +71,9 @@
 		{BareFootstep.sand,
 			 new List<string> {"asteroid1","asteroid2","asteroid3","asteroid4","asteroid5"}},
 		{BareFootstep.water,
-			 new List<string> {"water1", "water2", "water3", "water4"}}
+			 new List<string> {"water1", "water2", "water3", "water4"}},
+		{BareFootstep.clownstep,
+			 new List<string> {"clownstep1","clownstep2" }}
 	};

 	private readonly Dictionary<ClawFootstep, List<string>> ClawFootsteps = new Dictionary<ClawFootstep, List<string>>(){


Consolidated methods

Consolidated methods

--- Utility.Reactive/Extensions/IObservableExtensions.cs
+++ Utility.Reactive/Extensions/IObservableExtensions.cs
@@ -6,12 +6,7 @@
 {
     public static class IObservableExtensions
     {
-        public static IObservable<T> AsBehavior<T>(this IObservable<T> observable, IDisposablesHandler disposablesHandler)
-        {
-            return AsBehavior(observable, disposablesHandler, default(T));
-        }
-
-        public static IObservable<T> AsBehavior<T>(this IObservable<T> observable, IDisposablesHandler disposablesHandler, T defaultValue)
+        public static IObservable<T> AsBehavior<T>(this IObservable<T> observable, IDisposablesHandler disposablesHandler, T defaultValue = default(T))
         {
             var connectable = AsBehavior(observable, defaultValue);
             connectable.Connect().DisposeWith(disposablesHandler);
@@ -19,12 +14,7 @@
             return connectable;
         }

-        public static IConnectableObservable<T> AsBehavior<T>(this IObservable<T> observable)
-        {
-            return AsBehavior(observable, default(T));
-        }
-
-        public static IConnectableObservable<T> AsBehavior<T>(this IObservable<T> observable, T defaultValue)
+        public static IConnectableObservable<T> AsBehavior<T>(this IObservable<T> observable, T defaultValue = default(T))
         {
             return observable.Multicast(new BehaviorSubject<T>(defaultValue));
         }


API Exception change

API Exception change

--- LeagueAPI.PCL.Test/LeagueAPIServiceTests.cs
+++ LeagueAPI.PCL.Test/LeagueAPIServiceTests.cs
@@ -60,7 +60,7 @@
             }
             catch (APIRequestException are)
             {
-                if (are.APIRequestError.Status.StatusCode != 404)
+                if (are.APIRequestError.StatusCode != 404)
                     throw;

                 return;


Add null reference guard for observed exception

--- MatterControlLib/ActionBar/TemperatureWidgetBase.cs
+++ MatterControlLib/ActionBar/TemperatureWidgetBase.cs
@@ -168,11 +168,12 @@
 		private void EnableControls()
 		{
 			bool status =  printer.Connection.IsConnected && !printer.Connection.PrinterIsPrinting;
-			if (isEnabled != status)
+			if (isEnabled != status
+				&& this.PopupContent is GuiWidget popupContent)
 			{
 				isEnabled = status;

-				var flowLayout = this.PopupContent.Children.OfType<FlowLayoutWidget>().FirstOrDefault();
+				var flowLayout = popupContent.Children.OfType<FlowLayoutWidget>().FirstOrDefault();
 				if (flowLayout != null)
 				{
 					foreach (var child in flowLayout.Children.Except(alwaysEnabled))


Bug in OfType<DbObject> fixed

Bug in OfType<DbObject> fixed

--- Linq2Acad/Extensions/DbObjectsExtensions.cs
+++ Linq2Acad/Extensions/DbObjectsExtensions.cs
@@ -26,11 +26,11 @@

       if (source is IAcadEnumerableData)
       {
-        var enumerable = (IAcadEnumerableData)source;
+        var data = (IAcadEnumerableData)source;

-        if (!enumerable.IsEnumerating)
+        if (!data.IsEnumerating)
         {
-          return AcdbEnumerable<T>.Create(enumerable.Transaction, enumerable.IDs, true);
+          return AcdbEnumerable<T>.Create(data.Transaction, data.ContainerID, true);
         }
       }


Automatically include satellite assemblies in mpack

--- Mono.Addins.Setup/Mono.Addins.Setup/SetupService.cs
+++ Mono.Addins.Setup/Mono.Addins.Setup/SetupService.cs
@@ -28,17 +28,17 @@

 using System;
-using System.Xml;
-using System.IO;
 using System.Collections;
 using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Xml;
 using ICSharpCode.SharpZipLib.Zip;
+using Mono.Addins.Database;
 using Mono.Addins.Description;
 using Mono.Addins.Setup.ProgressMonitoring;
-using Microsoft.Win32;
-using System.Diagnostics;
 using Mono.PkgConfig;
-using Mono.Addins.Database;

 namespace Mono.Addins.Setup
 {
@@ -356,7 +356,7 @@
 				return null;
 			}

-			string basePath = Path.GetDirectoryName (filePath);
+			string basePath = Path.GetFullPath (Path.GetDirectoryName (filePath));

 			if (targetDirectory == null)
 				targetDirectory = basePath;
@@ -394,29 +394,40 @@
 			s.PutNextEntry (infoEntry);
 			s.Write (data, 0, data.Length);
 			s.CloseEntry ();
-
+
 			// Now add the add-in files
-
-			ArrayList list = new ArrayList ();
-			if (!conf.AllFiles.Contains (Path.GetFileName (filePath)))
-				list.Add (Path.GetFileName (filePath));
+
+			var files = new HashSet<string> ();
+
+			files.Add (Path.GetFileName (Util.NormalizePath (filePath)));
+
 			foreach (string f in conf.AllFiles) {
-				list.Add (Util.NormalizePath (f));
+				files.Add (Util.NormalizePath (f));
 			}

 			foreach (var prop in conf.Properties) {
 				try {
 					var file = Util.NormalizePath (prop.Value);
-					if (File.Exists (Path.Combine (basePath, file)))
-						list.Add (file);
+					if (File.Exists (Path.Combine (basePath, file))) {
+						files.Add (file);
+					}
 				} catch {
 					// Ignore errors
 				}
 			}
+
+			//add satellite assemblies for assemblies in the list
+			var satelliteFinder = new SatelliteAssemblyFinder ();
+			foreach (var f in files.ToList ()) {
+				foreach (var satellite in satelliteFinder.FindSatellites (Path.Combine (basePath, f))) {
+					var relativeSatellite = satellite.Substring (basePath.Length + 1);
+					files.Add (relativeSatellite);
+				}
+			}

 			monitor.Log ("Creating package " + Path.GetFileName (outFilePath));

-			foreach (string file in list) {
+			foreach (string file in files) {
 				string fp = Path.Combine (basePath, file);
 				using (FileStream fs = File.OpenRead (fp)) {
 					byte[] buffer = new byte [fs.Length];
@@ -433,6 +444,48 @@
 			s.Finish();
 			s.Close();
 			return outFilePath;
+		}
+
+		class SatelliteAssemblyFinder
+		{
+			Dictionary<string, List<string>> cultureSubdirCache = new Dictionary<string, List<string>> ();
+			HashSet<string> cultureNames = new HashSet<string> (StringComparer.OrdinalIgnoreCase);
+
+			public SatelliteAssemblyFinder ()
+			{
+				foreach (var cultureName in CultureInfo.GetCultures (CultureTypes.AllCultures)) {
+					cultureNames.Add (cultureName.Name);
+				}
+			}
+
+			List<string> GetCultureSubdirectories (string directory)
+			{
+				if (!cultureSubdirCache.TryGetValue (directory, out List<string> cultureDirs)) {
+					cultureDirs = Directory.EnumerateDirectories (directory)
+						.Where (d => cultureNames.Contains (Path.GetFileName ((d))))
+						.ToList ();
+
+					cultureSubdirCache [directory] = cultureDirs;
+				}
+				return cultureDirs;
+			}
+
+			public IEnumerable<string> FindSatellites (string assemblyPath)
+			{
+				if (!assemblyPath.EndsWith (".dll", StringComparison.OrdinalIgnoreCase)) {
+					yield break;
+				}
+
+				var satelliteName = Path.GetFileNameWithoutExtension (assemblyPath) + ".resources.dll";
+
+				foreach (var cultureDir in GetCultureSubdirectories (Path.GetDirectoryName (assemblyPath))) {
+					string cultureName = Path.GetFileName (cultureDir);
+					string satellitePath = Path.Combine (cultureDir, satelliteName);
+					if (File.Exists (satellitePath)) {
+						yield return satellitePath;
+					}
+				}
+			}
 		}

 		void CleanDescription (XmlElement parent)


Made clipboard work

Made clipboard work

Credits go to MMR:
http://emmr.webuda.com/how-to-copy-or-cut-a-file-to-the-windows-clipboard.html


Added comments

Added comments

--- MrAdvice.Weaver/Utility/TypeDefinitionExtensions.cs
+++ MrAdvice.Weaver/Utility/TypeDefinitionExtensions.cs
@@ -32,6 +32,12 @@
             }
         }

+        /// <summary>
+        /// Adds a public automatic property.
+        /// </summary>
+        /// <param name="typeDefinition">The type definition.</param>
+        /// <param name="name">The name.</param>
+        /// <param name="type">The type.</param>
         public static void AddPublicAutoProperty(this TypeDefinition typeDefinition, string name, TypeReference type)
         {
             var moduleDefinition = typeDefinition.Module;
@@ -65,6 +71,12 @@
             getterIntructions.Emit(OpCodes.Ret);
         }

+        /// <summary>
+        /// Creates a property method (getter or setter).
+        /// </summary>
+        /// <param name="name">The name.</param>
+        /// <param name="type">The type.</param>
+        /// <returns></returns>
         private static MethodDefinition CreatePropertyMethod(string name, TypeReference type)
         {
             const MethodAttributes methodAttributes = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig;
@@ -72,5 +84,7 @@
             methodDefinition.Body = new MethodBody(methodDefinition) { InitLocals = true };
             return methodDefinition;
         }
+
+
     }
 }


More test work

More test work

--- NForum.Tests.BasicStructure/LatestPostTopicTests.cs
+++ NForum.Tests.BasicStructure/LatestPostTopicTests.cs
@@ -218,6 +218,58 @@
 		}

 		[TestMethod]
+		public void LatestPost3() {
+			ICategoryService categoryService;
+			IForumService forumService;
+			ITopicService topicService;
+			IPostService postService;
+			this.GetTopicService(uow, out categoryService, out forumService, out topicService, out postService);
+
+			Category category = categoryService.Create("Latest test category part 2", "meh", 100);
+			Forum forum = forumService.Create(category, "Latest test forum part 2", "meh", 101);
+
+			Topic first = topicService.Create(forum, "The first one part 2", "bla bla bla");
+
+			Post firstPost = postService.Create(first, "My first post", "The body!");
+			// TODO: Hm...
+			Post secondPost = postService.Create(first, "My second post", "The body!");
+
+			secondPost = postService.Update(secondPost, PostState.Quarantined);
+
+			Post latestPost = topicService.GetLatestPost(first);
+
+			latestPost.Should().NotBeNull("becase 2 posts was created on the topic, one visible");
+			latestPost.Id.Should().Be(firstPost.Id, "the last post created is no longer visible");
+		}
+
+		[TestMethod]
+		public void LatestPost4() {
+			ICategoryService categoryService;
+			IForumService forumService;
+			ITopicService topicService;
+			IPostService postService;
+			this.GetTopicService(uow, out categoryService, out forumService, out topicService, out postService);
+
+			Category category = categoryService.Create("Latest test category part 2", "meh", 100);
+			Forum forum = forumService.Create(category, "Latest test forum part 2", "meh", 101);
+
+			Topic first = topicService.Create(forum, "The first one part 2", "bla bla bla");
+
+			Post firstPost = postService.Create(first, "My first post", "The body!");
+			// TODO: Hm...
+			Post secondPost = postService.Create(first, "My second post", "The body!");
+
+			secondPost = postService.Update(secondPost, PostState.Quarantined);
+
+			secondPost = postService.Update(secondPost, PostState.None);
+
+			Post latestPost = topicService.GetLatestPost(first);
+
+			latestPost.Should().NotBeNull("becase 2 posts was created on the topic, one visible");
+			latestPost.Id.Should().Be(secondPost.Id, "the last post created is again visible");
+		}
+
+		[TestMethod]
 		public void LatestPosts() {
 			return;


Moved creating matrix to a separate method

--- Mapsui.Rendering.Skia-PCL/RasterRenderer.cs
+++ Mapsui.Rendering.Skia-PCL/RasterRenderer.cs
@@ -36,29 +36,7 @@

 		        var priorMatrix = canvas.TotalMatrix;

-		        SKMatrix matrix;
-
-		        {
-		            //The front-end sets up the canvas with a matrix based on screen scaling (e.g. retina).
-		            //We need to retain that effect by combining our matrix with the incoming matrix.
-
-		            //We'll create four matrices in addition to the incoming matrix. They perform the
-		            //zoom scale, focal point offset, user rotation and finally, centering in the screen.
-
-		            var userRotation = SKMatrix.MakeRotationDegrees((float)viewport.Rotation);
-		            var focalPointOffset = SKMatrix.MakeTranslation(
-		                (float)(boundingBox.Left - viewport.Center.X),
-		                (float)(viewport.Center.Y - boundingBox.Top));
-		            var zoomScale = SKMatrix.MakeScale((float)(1.0 / viewport.Resolution), (float)(1.0 / viewport.Resolution));
-		            var centerInScreen = SKMatrix.MakeTranslation((float)(viewport.Width / 2.0), (float)(viewport.Height / 2.0));
-
-		            //We'll concatenate them like so: incomingMatrix * centerInScreen * userRotation * zoomScale * focalPointOffset
-
-		            SKMatrix.Concat(ref matrix, zoomScale, focalPointOffset);
-		            SKMatrix.Concat(ref matrix, userRotation, matrix);
-		            SKMatrix.Concat(ref matrix, centerInScreen, matrix);
-		            SKMatrix.Concat(ref matrix, priorMatrix, matrix);
-		        }
+		        var matrix = CreateRotationMatrix(viewport, boundingBox, priorMatrix);

 		        canvas.SetMatrix(matrix);

@@ -74,13 +52,31 @@
 			}
 		}

-        private static BoundingBox RoundToPixel(BoundingBox boundingBox)
+        private static SKMatrix CreateRotationMatrix(IViewport viewport, BoundingBox boundingBox, SKMatrix priorMatrix)
         {
-            return new BoundingBox(
-                (float)Math.Round(boundingBox.Left),
-                (float)Math.Round(Math.Min(boundingBox.Top, boundingBox.Bottom)),
-                (float)Math.Round(boundingBox.Right),
-                (float)Math.Round(Math.Max(boundingBox.Top, boundingBox.Bottom)));
+            SKMatrix matrix;
+
+            //The front-end sets up the canvas with a matrix based on screen scaling (e.g. retina).
+            //We need to retain that effect by combining our matrix with the incoming matrix.
+
+            //We'll create four matrices in addition to the incoming matrix. They perform the
+            //zoom scale, focal point offset, user rotation and finally, centering in the screen.
+
+            var userRotation = SKMatrix.MakeRotationDegrees((float) viewport.Rotation);
+            var focalPointOffset = SKMatrix.MakeTranslation(
+                (float) (boundingBox.Left - viewport.Center.X),
+                (float) (viewport.Center.Y - boundingBox.Top));
+            var zoomScale = SKMatrix.MakeScale((float) (1.0 / viewport.Resolution), (float) (1.0 / viewport.Resolution));
+            var centerInScreen = SKMatrix.MakeTranslation((float) (viewport.Width / 2.0), (float) (viewport.Height / 2.0));
+
+            //We'll concatenate them like so: incomingMatrix * centerInScreen * userRotation * zoomScale * focalPointOffset
+
+            SKMatrix.Concat(ref matrix, zoomScale, focalPointOffset);
+            SKMatrix.Concat(ref matrix, userRotation, matrix);
+            SKMatrix.Concat(ref matrix, centerInScreen, matrix);
+            SKMatrix.Concat(ref matrix, priorMatrix, matrix);
+
+            return matrix;
         }
     }
 }


removed default constructor

removed default constructor

--- Medidata.ZipkinTracerModule/ZipkinClient.cs
+++ Medidata.ZipkinTracerModule/ZipkinClient.cs
@@ -11,8 +11,6 @@
     {
         internal SpanCollector spanCollector;
         internal SpanTracer spanTracer;
-
-        public ZipkinClient() : this(new ZipkinConfig(), new SpanCollectorBuilder(), new ZipkinEndpoint()) { }

         public ZipkinClient(IZipkinConfig zipkinConfig, ISpanCollectorBuilder spanCollectorBuilder, IZipkinEndpoint zipkinEndpoint)
         {


add important fix to the Massive update example

--- MicroORM_Dapper/MicroORM_Massive/Program.cs
+++ MicroORM_Dapper/MicroORM_Massive/Program.cs
@@ -54,7 +54,7 @@
             Console.WriteLine("The old book: {0}", FormatBook(book));
             book.Title = "A new Title for an existing book";

-            bookTable.Update(book);
+            bookTable.Update(book, book.Id);

             var newBook = bookTable.First(Id:book.Id);
             Console.WriteLine("The updated book: {0}", FormatBook(newBook));


Pivot of the object moved to the bottom

Pivot of the object moved to the bottom


Fixes #7

Fixes #7

Select stairs root when click a child on scene view.


Support for XML serialization of List<string> props


Switched to new ScenarioParser command-line mode

This eliminates the need for hunting for the scenario ID in the output.


Don't tank when we dispose a ConnectionService

--- NET/API/Treehopper.UWP/ConnectionService.cs
+++ NET/API/Treehopper.UWP/ConnectionService.cs
@@ -46,7 +46,7 @@

         public void Dispose()
         {
-            throw new NotImplementedException();
+            // TODO: Clean stuff up
         }

         public void AddBoard()


Disable running tests parallel (#38)

Disable running tests parallel (#38)

--- NTumbleBit.Tests/Properties/AssemblyInfo.cs
+++ NTumbleBit.Tests/Properties/AssemblyInfo.cs
@@ -1,6 +1,7 @@
 using System.Reflection;
 using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
+using Xunit;

 // General Information about an assembly is controlled through the following
 // set of attributes. Change these attribute values to modify the information
@@ -9,6 +10,7 @@
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("NTumbleBit.Tests")]
 [assembly: AssemblyTrademark("")]
+[assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly, DisableTestParallelization = true, MaxParallelThreads = 1)]

 // Setting ComVisible to false makes the types in this assembly not visible
 // to COM components.  If you need to access a type in this assembly from


turn off documentation for tests

turn off documentation for tests

--- OmniSharp.Tests/AutoComplete/CompletionsSpecBase.cs
+++ OmniSharp.Tests/AutoComplete/CompletionsSpecBase.cs
@@ -38,6 +38,7 @@
                     Buffer = editorText,
                     Line = cursorPosition.Line,
                     Column = cursorPosition.Column,
+					WantDocumentationForEveryCompletionResult = false
                 };

             return provider.CreateProvider(request);


Removed non-existing param documentation

--- OpenMetaverse/Assets/AssetTypes/AssetCallingCard.cs
+++ OpenMetaverse/Assets/AssetTypes/AssetCallingCard.cs
@@ -58,7 +58,6 @@
         /// Constuct an asset of type Callingcard
         /// </summary>
         /// <param name="avatarID">UUID of the target avatar</param>
-        /// <param name="pos">Local position of callingcard</param>
         public AssetCallingCard(UUID avatarID)
         {
             AvatarID = avatarID;


Formatting

Formatting

--- PART/Source/Core/Engine/Facades/ClientMethodPlan.cs
+++ PART/Source/Core/Engine/Facades/ClientMethodPlan.cs
@@ -37,8 +37,7 @@

             var ret2 = uuidCaller
                 .MethodExpression(dataProviders, input)
-                .Cascade<string,  PersonIdentifier,   PersonIdentifier,   RegistreringType1>(dataProviders, readCaller, s => s);
-            var ret3 = ret2
+                .Cascade<string,  PersonIdentifier,   PersonIdentifier,   RegistreringType1>(dataProviders, readCaller, s => s)
                 .Cascade<string,  RegistreringType1,  RegistreringType1,  RegistreringType1>(dataProviders, nonCaller, s => s);

             return null;


More Compression Experiments (no new test is better).

--- Platform/Platform.Sandbox/CompressionExperiments.cs
+++ Platform/Platform.Sandbox/CompressionExperiments.cs
@@ -67,16 +67,17 @@
                 //var sw2 = Stopwatch.StartNew();
                 //var responseCompressedArray2 = links.PrecompressSequence2(responseSourceArray); sw2.Stop();

-                // TODO: Можно попробовать искать не максимальный, а первый, который встречается как минимум дважды
-                // TODO: Или использовать не локальный словарь, а глобальный
+                // [+] Можно попробовать искать не максимальный, а первый, который встречается как минимум дважды - медленно, высокое качество, не наивысшее
+                // [+] Или использовать не локальный словарь, а глобальный (т.е. считать один раз, потом только делать замены) - быстро, но качество низкое
+                // Precompress0 - лучшее соотношение скорость / качество. (тоже что и Data.Core.Sequences.Compressor.Precompress)

                 ulong[] responseCompressedArray3 = null;

-                for (var i = 0; i < 1; i++)
+                for (var i = 0; i < 5; i++)
                 {
                     var sw3 = Stopwatch.StartNew();
-                    var compressor = new Compressor(links, sequences);
-                    responseCompressedArray3 = compressor.Precompress0(responseSourceArray); sw3.Stop();
+                    var compressor = new Data.Core.Sequences.Compressor(links, sequences);
+                    responseCompressedArray3 = compressor.Precompress(responseSourceArray); sw3.Stop();
                     Console.WriteLine(sw3.Elapsed);
                 }

@@ -1056,6 +1057,368 @@
                 return final;
             }

+            /// <remarks>
+            /// Original algorithm idea: https://en.wikipedia.org/wiki/Byte_pair_encoding .
+            /// If pair repeats twice it is maximum pair.
+            /// </remarks>
+            public ulong[] Precompress3(ulong[] sequence)
+            {
+                if (sequence.IsNullOrEmpty())
+                    return null;
+
+                if (sequence.Length == 1)
+                    return sequence;
+
+                var oldLength = sequence.Length;
+                var newLength = sequence.Length;
+
+                // Can be faster if source sequence allowed to be changed
+                var copy = new ulong[sequence.Length];
+                Array.Copy(sequence, copy, copy.Length);
+
+                var set = new HashSet<Link>();
+
+                for (var i = 1; i < sequence.Length; i++)
+                {
+                    var pair = new Link(sequence[i - 1], sequence[i]);
+
+                    //UpdateMaxPair(pair, IncrementFrequency(pair));
+                    //if(_maxFrequency >= 2)
+                    //    break;
+
+                    if (!set.Add(pair))
+                    {
+                        _maxPair = pair;
+                        //_maxFrequency = 2;
+                        break;
+                    }
+                }
+
+                while (!_maxPair.IsNull())
+                {
+                    var maxPairSource = _maxPair.Source;
+                    var maxPairTarget = _maxPair.Target;
+                    var maxPairResult = _links.Create(maxPairSource, maxPairTarget);
+
+                    oldLength--;
+                    //var oldLengthMinusTwo = oldLength - 1;
+
+                    // Substitute all usages
+                    int w = 0, r = 0; // (r == read, w == write)
+                    for (; r < oldLength; r++)
+                    {
+                        if (copy[r] == maxPairSource && copy[r + 1] == maxPairTarget)
+                        {
+                            //if (r > 0)
+                            //{
+                            //    var previous = copy[w - 1];
+                            //    DecrementFrequency(new Link(previous, maxPairSource));
+                            //    IncrementFrequency(new Link(previous, maxPairResult));
+                            //}
+                            //if (r < oldLengthMinusTwo)
+                            //{
+                            //    var next = copy[r + 2];
+                            //    DecrementFrequency(new Link(maxPairTarget, next));
+                            //    IncrementFrequency(new Link(maxPairResult, next));
+                            //}
+
+                            copy[w++] = maxPairResult;
+                            r++;
+                            newLength--;
+                        }
+                        else
+                        {
+                            copy[w++] = copy[r];
+                        }
+                    }
+                    copy[w] = copy[r];
+
+                    //_pairsFrequencies.Remove(_maxPair);
+
+                    _maxPair = Link.Null;
+
+                    //ResetMaxPair();
+                    set.Clear();
+                    //_pairsFrequencies = new UnsafeDictionary<Link, ulong>();
+
+                    oldLength = newLength;
+
+                    for (var i = 1; i < newLength; i++)
+                    {
+                        var pair = new Link(copy[i - 1], copy[i]);
+
+                        //UpdateMaxPair(pair, IncrementFrequency(pair));
+                        //if (_maxFrequency >= 2)
+                        //    break;
+
+                        if (!set.Add(pair))
+                        {
+                            _maxPair = pair;
+                            //_maxFrequency = 2;
+                            break;;
+                        }
+                    }
+
+                    // Медленный вариант UpdateMaxPair
+                    //_maxPair = Link.Null;
+                    //_maxFrequency = 1;
+
+                    // TODO: Разобраться почему, если переместить сюда строчку "_pairsFrequencies.Remove(_maxPair);" алгоритм зацикливается
+
+                    //foreach (var pairsFrequency in _pairsFrequencies)
+                    //    UpdateMaxPair(pairsFrequency.Key, pairsFrequency.Value);
+
+                    // Быстрее
+                    //UpdateMaxPair2();
+                }
+
+                var final = new ulong[newLength];
+                Array.Copy(copy, final, newLength);
+
+                return final;
+            }
+
+            /// <remarks>
+            /// Original algorithm idea: https://en.wikipedia.org/wiki/Byte_pair_encoding .
+            /// If pair repeats twice it is maximum pair.
+            /// </remarks>
+            public ulong[] Precompress4(ulong[] sequence)
+            {
+                if (sequence.IsNullOrEmpty())
+                    return null;
+
+                if (sequence.Length == 1)
+                    return sequence;
+
+                var oldLength = sequence.Length;
+                var newLength = sequence.Length;
+
+                // Can be faster if source sequence allowed to be changed
+                var copy = new ulong[sequence.Length];
+                Array.Copy(sequence, copy, copy.Length);
+
+                var set = new HashSet<Link>();
+
+                for (var i = 1; i < sequence.Length; i++)
+                {
+                    var pair = new Link(sequence[i - 1], sequence[i]);
+
+                    //UpdateMaxPair(pair, IncrementFrequency(pair));
+                    //if(_maxFrequency >= 2)
+                    //    break;
+
+                    if (!set.Add(pair))
+                    {
+                        _maxPair = pair;
+                        //_maxFrequency = 2;
+                        break;
+                    }
+                }
+
+                while (!_maxPair.IsNull())
+                {
+                    var maxPairSource = _maxPair.Source;
+                    var maxPairTarget = _maxPair.Target;
+                    var maxPairResult = _links.Create(maxPairSource, maxPairTarget);
+
+                    oldLength--;
+                    var oldLengthMinusTwo = oldLength - 1;
+
+                    _maxPair = Link.Null;
+                    set.Clear();
+
+                    // Substitute all usages
+                    int w = 0, r = 0; // (r == read, w == write)
+                    for (; r < oldLength; r++)
+                    {
+                        if (copy[r] == maxPairSource && copy[r + 1] == maxPairTarget)
+                        {
+                            //if (_maxPair.IsNull())
+                            //{
+                            //    if (r > 0)
+                            //    {
+                            //        var previous = copy[w - 1];
+                            //        set.Remove(new Link(previous, maxPairSource));
+                            //        var pair = new Link(previous, maxPairResult);
+                            //        if (!set.Add(pair)) _maxPair = pair;
+                            //        //DecrementFrequency(new Link(previous, maxPairSource));
+                            //        //IncrementFrequency(new Link(previous, maxPairResult));
+                            //    }
+                            //    if (r < oldLengthMinusTwo)
+                            //    {
+                            //        var next = copy[r + 2];
+                            //        set.Remove(new Link(maxPairTarget, next));
+                            //        var pair = new Link(maxPairResult, next);
+                            //        if (!set.Add(pair)) _maxPair = pair;
+                            //        //DecrementFrequency(new Link(maxPairTarget, next));
+                            //        //IncrementFrequency(new Link(maxPairResult, next));
+                            //    }
+                            //}
+
+                            copy[w++] = maxPairResult;
+                            r++;
+                            newLength--;
+                        }
+                        else
+                        {
+                            //if (_maxPair.IsNull() && w > 0) // 8 sec
+                            //{
+                            //    var pair = new Link(copy[w - 1], copy[w]);
+                            //    if (!set.Add(pair)) _maxPair = pair;
+                            //}
+
+                            if (_maxPair.IsNull()) // 4 sec
+                            {
+                                var pair = new Link(copy[r], copy[r + 1]);
+                                if (!set.Add(pair)) _maxPair = pair;
+                            }
+                            copy[w++] = copy[r];
+
+                            //if (_maxPair.IsNull()) // 8 sec
+                            //{
+                            //    var pair = new Link(copy[w - 1], copy[w]);
+                            //    if (!set.Add(pair)) _maxPair = pair;
+                            //}
+                        }
+                    }
+                    //if (_maxPair.IsNull()) // 8 sec
+                    //{
+                    //    var pair = new Link(copy[w - 1], copy[w]);
+                    //    if (!set.Add(pair)) _maxPair = pair;
+                    //}
+                    copy[w] = copy[r];
+
+                    //_pairsFrequencies.Remove(_maxPair);
+
+                    //_maxPair = Link.Null;
+                    //set.Clear();
+
+                    oldLength = newLength;
+
+                    //for (var i = 1; i < newLength; i++)
+                    //{
+                    //    var pair = new Link(copy[i - 1], copy[i]);
+
+                    //    //UpdateMaxPair(pair, IncrementFrequency(pair));
+                    //    //if (_maxFrequency >= 2)
+                    //    //    break;
+
+                    //    if (!set.Add(pair))
+                    //    {
+                    //        _maxPair = pair;
+                    //        //_maxFrequency = 2;
+                    //        break; ;
+                    //    }
+                    //}
+
+                    // Медленный вариант UpdateMaxPair
+                    //_maxPair = Link.Null;
+                    //_maxFrequency = 1;
+
+                    // TODO: Разобраться почему, если переместить сюда строчку "_pairsFrequencies.Remove(_maxPair);" алгоритм зацикливается
+
+                    //foreach (var pairsFrequency in _pairsFrequencies)
+                    //    UpdateMaxPair(pairsFrequency.Key, pairsFrequency.Value);
+
+                    // Быстрее
+                    //UpdateMaxPair2();
+                }
+
+                var final = new ulong[newLength];
+                Array.Copy(copy, final, newLength);
+
+                return final;
+            }
+
+            /// <remarks>
+            /// Original algorithm idea: https://en.wikipedia.org/wiki/Byte_pair_encoding .
+            /// Global dictionary
+            /// </remarks>
+            public ulong[] Precompress5(ulong[] sequence)
+            {
+                if (sequence.IsNullOrEmpty())
+                    return null;
+
+                if (sequence.Length == 1)
+                    return sequence;
+
+                var oldLength = sequence.Length;
+                var newLength = sequence.Length;
+
+                // Can be faster if source sequence allowed to be changed
+                var copy = new ulong[sequence.Length];
+                copy[0] = sequence[0];
+
+                for (var i = 1; i < sequence.Length; i++)
+                {
+                    copy[i] = sequence[i];
+
+                    var pair = new Link(sequence[i - 1], sequence[i]);
+                    UpdateMaxPair(pair, IncrementFrequency(pair));
+                }
+
+                while (!_maxPair.IsNull())
+                {
+                    var maxPairSource = _maxPair.Source;
+                    var maxPairTarget = _maxPair.Target;
+                    var maxPairResult = _links.Create(maxPairSource, maxPairTarget);
+
+                    oldLength--;
+                    //var oldLengthMinusTwo = oldLength - 1;
+
+                    // Substitute all usages
+                    int w = 0, r = 0; // (r == read, w == write)
+                    for (; r < oldLength; r++)
+                    {
+                        if (copy[r] == maxPairSource && copy[r + 1] == maxPairTarget)
+                        {
+                            //if (r > 0)
+                            //{
+                            //    var previous = copy[w - 1];
+                            //    DecrementFrequency(new Link(previous, maxPairSource));
+                            //    IncrementFrequency(new Link(previous, maxPairResult));
+                            //}
+                            //if (r < oldLengthMinusTwo)
+                            //{
+                            //    var next = copy[r + 2];
+                            //    DecrementFrequency(new Link(maxPairTarget, next));
+                            //    IncrementFrequency(new Link(maxPairResult, next));
+                            //}
+
+                            copy[w++] = maxPairResult;
+                            r++;
+                            newLength--;
+                        }
+                        else
+                        {
+                            copy[w++] = copy[r];
+                        }
+                    }
+                    copy[w] = copy[r];
+
+                    _pairsFrequencies.Remove(_maxPair);
+
+                    oldLength = newLength;
+
+                    // Медленный вариант UpdateMaxPair
+                    //_maxPair = Link.Null;
+                    //_maxFrequency = 1;
+
+                    // TODO: Разобраться почему, если переместить сюда строчку "_pairsFrequencies.Remove(_maxPair);" алгоритм зацикливается
+
+                    //foreach (var pairsFrequency in _pairsFrequencies)
+                    //    UpdateMaxPair(pairsFrequency.Key, pairsFrequency.Value);
+
+                    // Быстрее
+                    UpdateMaxPair2();
+                }
+
+                var final = new ulong[newLength];
+                Array.Copy(copy, final, newLength);
+
+                return final;
+            }
+
             public ulong Compress(ulong[] sequence)
             {
                 var precompressedSequence = Precompress1(sequence);


All features but strikethrough

All features but strikethrough

--- amdl2maml/Converter/TopicParser.cs
+++ amdl2maml/Converter/TopicParser.cs
@@ -20,16 +20,7 @@
         static TopicParser()
         {
             settings = CommonMarkSettings.Default.Clone();
-            settings.AdditionalFeatures = CommonMarkAdditionalFeatures.None
-                | CommonMarkAdditionalFeatures.RespectReferenceCase
-                //| CommonMarkAdditionalFeatures.StrikethroughTilde
-                | CommonMarkAdditionalFeatures.SubscriptTilde
-                | CommonMarkAdditionalFeatures.SuperscriptCaret
-#if TABLES
-                | CommonMarkAdditionalFeatures.GithubStyleTables;
-            settings.TrackSourcePosition = true;
-#endif
-                ;
+            settings.AdditionalFeatures = CommonMarkAdditionalFeatures.All & ~CommonMarkAdditionalFeatures.StrikethroughTilde;
         }

         /// <summary>


fixing html markup for IsSticky

fixing html markup for IsSticky

--- Views/EditorTemplates/Parts.Status.ThreadPart.cshtml
+++ Views/EditorTemplates/Parts.Status.ThreadPart.cshtml
@@ -1,6 +1,6 @@
 @model NGM.Forum.Models.ThreadPart

 <fieldset>
-        @Html.LabelFor(m => m.IsSticky, T("Is Sticky"))
+        <label for="@Html.FieldIdFor(m => m.IsSticky)" class="forcheckbox">@T("Is Sticky")</label>
         @Html.CheckBoxFor(m => m.IsSticky)
 </fieldset>


[Modify] Polish it

[Modify] Polish it

--- websocket-sharp/Server/WebSocketServiceManager.cs
+++ websocket-sharp/Server/WebSocketServiceManager.cs
@@ -62,8 +62,8 @@
     {
       _log = log;

+      _hosts = new Dictionary<string, WebSocketServiceHost> ();
       _keepClean = true;
-      _hosts = new Dictionary<string, WebSocketServiceHost> ();
       _state = ServerState.Ready;
       _sync = ((ICollection) _hosts).SyncRoot;
       _waitTime = TimeSpan.FromSeconds (1);


Added test for ListValueByIndex from Lists

--- Nustache.Core.Tests/Describe_ValueGetter.cs
+++ Nustache.Core.Tests/Describe_ValueGetter.cs
@@ -155,10 +155,16 @@
         [Test]
         public void It_gets_ListValueByIndex_values_from_array()
         {
-            System.String[] target = new[] { "hello", "world" };
+            string[] target = new[] { "hello", "world" };
             Assert.AreEqual("hello", ValueGetter.GetValue(target, "0"));
         }

+        [Test]
+        public void It_gets_ListValueByIndex_values_from_List()
+        {
+            List<string> target = new List<string>() { "hello", "world" };
+            Assert.AreEqual("hello", ValueGetter.GetValue(target, "0"));
+        }

         public class ReadWriteInts
         {


Adjusted component initialization

Adjusted component initialization

--- Sharpex.GameLibrary/SGL.cs
+++ Sharpex.GameLibrary/SGL.cs
@@ -42,7 +42,7 @@
         /// <summary>
         /// Gets the Version of SGL.
         /// </summary>
-        public static string Version { get { return "0.1.537"; } }
+        public static string Version { get { return "0.1.549"; } }
         /// <summary>
         /// Determines, if SGL is initialized.
         /// </summary>
@@ -71,6 +71,7 @@
             _gameInstance = initializer.GameInstance;
             var renderTarget = new RenderTarget(initializer.TargetHandle);
             Components.AddComponent(renderTarget);
+            Components.AddComponent(new EventManager());
             renderTarget.SurfaceControl.SetSize(initializer.Width, initializer.Height);
             initializer.GameInstance.Input = new InputManager(renderTarget.Handle);
             GraphicsDevice = new GraphicsDevice(renderTarget)
@@ -79,17 +80,16 @@
             };
             initializer.GameInstance.Content = new ContentManager();
             initializer.GameInstance.SceneManager = new SceneManager();
+            Components.AddComponent(new GameLoop
+            {
+                TargetFramesPerSecond = initializer.TargetFramesPerSecond
+            });
             Components.AddComponent(Implementations);
             Components.AddComponent(initializer.GameInstance.Content);
             Components.AddComponent(GraphicsDevice);
             Components.AddComponent(initializer.GameInstance);
             Components.AddComponent(initializer.GameInstance.SceneManager);
             Components.AddComponent(initializer.GameInstance.Input);
-            Components.AddComponent(new EventManager());
-            Components.AddComponent(new GameLoop
-                {
-                    TargetFramesPerSecond = initializer.TargetFramesPerSecond
-                });
             Components.Get<GameLoop>().Subscribe(_gameInstance);
         }


Fix tests

Fix tests

--- WalletWasabi.Tests/UnitTests/Crypto/BlindingTests.cs
+++ WalletWasabi.Tests/UnitTests/Crypto/BlindingTests.cs
@@ -19,14 +19,14 @@
 		[Trait("UnitTest", "UnitTest")]
 		public void CanParseUnblindedSignature()
 		{
-			var requester = new Requester();
+			var requester = new SchnorrBlinding.Requester();
 			var r = new Key(Encoders.Hex.DecodeData("31E151628AED2A6ABF7155809CF4F3C762E7160F38B4DA56B784D9045190CFA0"));
 			var key = new Key(Encoders.Hex.DecodeData("B7E151628AED2A6ABF7158809CF4F3C762E7160F38B4DA56A784D9045190CFEF"));
-			var signer = new Signer(key, r);
+			var signer = new SchnorrBlinding.Signer(key);

 			var message = new uint256(Encoders.Hex.DecodeData("243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C89"), false);
 			var blindedMessage = requester.BlindMessage(message, r.PubKey, key.PubKey);
-			var blindSignature = signer.Sign(blindedMessage);
+			var blindSignature = signer.Sign(blindedMessage, r);
 			var unblindedSignature = requester.UnblindSignature(blindSignature);

 			var str = unblindedSignature.ToString();
@@ -47,14 +47,14 @@
 		public void BlindingSignature()
 		{
 			// Test with known values
-			var requester = new Requester();
+			var requester = new SchnorrBlinding.Requester();
 			var r = new Key(Encoders.Hex.DecodeData("31E151628AED2A6ABF7155809CF4F3C762E7160F38B4DA56B784D9045190CFA0"));
 			var key = new Key(Encoders.Hex.DecodeData("B7E151628AED2A6ABF7158809CF4F3C762E7160F38B4DA56A784D9045190CFEF"));
-			var signer = new Signer(key, r);
+			var signer = new SchnorrBlinding.Signer(key);

 			var message = new uint256(Encoders.Hex.DecodeData("243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C89"), false);
 			var blindedMessage = requester.BlindMessage(message, r.PubKey, key.PubKey);
-			var blindSignature = signer.Sign(blindedMessage);
+			var blindSignature = signer.Sign(blindedMessage, r);
 			var unblindedSignature = requester.UnblindSignature(blindSignature);

 			Assert.True(SchnorrBlinding.VerifySignature(message, unblindedSignature, key.PubKey));
@@ -62,13 +62,13 @@
 			Assert.False(SchnorrBlinding.VerifySignature(uint256.One, unblindedSignature, key.PubKey));

 			// Test with unknown values
-			requester = new Requester();
-			signer = new Signer(new Key(), new Key());
+			requester = new SchnorrBlinding.Requester();
+			signer = new SchnorrBlinding.Signer(new Key());

 			message = NBitcoin.Crypto.Hashes.Hash256(Encoders.ASCII.DecodeData("Hello world!"));
-			blindedMessage = requester.BlindMessage(message, signer.R.PubKey, signer.Key.PubKey);
+			blindedMessage = requester.BlindMessage(message, r.PubKey, signer.Key.PubKey);

-			blindSignature = signer.Sign(blindedMessage);
+			blindSignature = signer.Sign(blindedMessage, r);
 			unblindedSignature = requester.UnblindSignature(blindSignature);
 			Assert.True(SchnorrBlinding.VerifySignature(message, unblindedSignature, signer.Key.PubKey));
 			Assert.False(SchnorrBlinding.VerifySignature(uint256.One, unblindedSignature, signer.Key.PubKey));
@@ -76,16 +76,16 @@
 			var newMessage = Encoders.ASCII.DecodeData("Hello, World!");
 			for (var i = 0; i < 1_000; i++)
 			{
-				requester = new Requester();
-				signer = new Signer(new Key());
-				blindedMessage = requester.BlindMessage(newMessage, signer.R.PubKey, signer.Key.PubKey);
-				blindSignature = signer.Sign(blindedMessage);
+				requester = new SchnorrBlinding.Requester();
+				signer = new SchnorrBlinding.Signer(new Key());
+				blindedMessage = requester.BlindMessage(newMessage, r.PubKey, signer.Key.PubKey);
+				blindSignature = signer.Sign(blindedMessage, r);
 				unblindedSignature = requester.UnblindSignature(blindSignature);

 				Assert.True(signer.VerifyUnblindedSignature(unblindedSignature, newMessage));
 			}

-			var ex = Assert.Throws<ArgumentException>(() => signer.Sign(uint256.Zero));
+			var ex = Assert.Throws<ArgumentException>(() => signer.Sign(uint256.Zero, r));
 			Assert.StartsWith("Invalid blinded message.", ex.Message);
 		}

@@ -95,7 +95,7 @@
 			// Generate ECDSA keypairs.
 			var r = new Key();
 			var key = new Key();
-			Signer signer = new Signer(key, r);
+			Signer signer = new Signer(key);

 			// Generate ECDSA requester.
 			// Get the r's pubkey and the key's pubkey.
@@ -110,12 +110,13 @@
 			uint256 blindedMessageHash = requester.BlindMessage(hash, rPubKey, keyPubKey);

 			// Sign the blinded message hash.
-			uint256 blindedSignature = signer.Sign(blindedMessageHash);
+			uint256 blindedSignature = signer.Sign(blindedMessageHash, r);

 			// Unblind the signature.
 			UnblindedSignature unblindedSignature = requester.UnblindSignature(blindedSignature);

 			// verify the original data is signed
+
 			Assert.True(VerifySignature(hash, unblindedSignature, keyPubKey));
 		}

@@ -141,16 +142,16 @@
 			var converter = new UnblindedSignatureJsonConverter();
 			var r = new Key();
 			var key = new Key();
-			var signer = new Signer(key, r);
+			var signer = new SchnorrBlinding.Signer(key);

 			foreach (var i in Enumerable.Range(0, 100))
 			{
-				var requester = new Requester();
+				var requester = new SchnorrBlinding.Requester();

 				var message = new byte[256];
 				Random.NextBytes(message);
 				var blindedMessage = requester.BlindMessage(message, r.PubKey, key.PubKey);
-				var blindSignature = signer.Sign(blindedMessage);
+				var blindSignature = signer.Sign(blindedMessage, r);
 				var unblindedSignature = requester.UnblindSignature(blindSignature);

 				var sb = new StringBuilder();