Tidyed up namespaces.

Tidyed up namespaces.

--- Src/Idioms/IdiomaticAssertion.cs
+++ Src/Idioms/IdiomaticAssertion.cs
@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
+using System.Reflection;

 namespace Ploeh.AutoFixture.Idioms
 {
@@ -9,7 +10,7 @@
     {
         #region IIdiomaticAssertion Members

-        public virtual void Verify(System.Reflection.Assembly assembly)
+        public virtual void Verify(Assembly assembly)
         {
         }

@@ -25,51 +26,51 @@
         {
         }

-        public virtual void Verify(params System.Reflection.MemberInfo[] memberInfos)
+        public virtual void Verify(params MemberInfo[] memberInfos)
         {
         }

-        public virtual void Verify(IEnumerable<System.Reflection.MemberInfo> memberInfos)
+        public virtual void Verify(IEnumerable<MemberInfo> memberInfos)
         {
         }

-        public virtual void Verify(System.Reflection.MemberInfo memberInfo)
+        public virtual void Verify(MemberInfo memberInfo)
         {
         }

-        public virtual void Verify(params System.Reflection.ConstructorInfo[] constructorInfos)
+        public virtual void Verify(params ConstructorInfo[] constructorInfos)
         {
         }

-        public virtual void Verify(IEnumerable<System.Reflection.ConstructorInfo> constructorInfos)
+        public virtual void Verify(IEnumerable<ConstructorInfo> constructorInfos)
         {
         }

-        public virtual void Verify(System.Reflection.ConstructorInfo constructorInfo)
+        public virtual void Verify(ConstructorInfo constructorInfo)
         {
         }

-        public virtual void Verify(params System.Reflection.MethodInfo[] methodInfos)
+        public virtual void Verify(params MethodInfo[] methodInfos)
         {
         }

-        public virtual void Verify(IEnumerable<System.Reflection.MethodInfo> methodInfos)
+        public virtual void Verify(IEnumerable<MethodInfo> methodInfos)
         {
         }

-        public virtual void Verify(System.Reflection.MethodInfo methodInfo)
+        public virtual void Verify(MethodInfo methodInfo)
         {
         }

-        public virtual void Verify(params System.Reflection.PropertyInfo[] propertyInfos)
+        public virtual void Verify(params PropertyInfo[] propertyInfos)
         {
         }

-        public virtual void Verify(IEnumerable<System.Reflection.PropertyInfo> propertyInfos)
+        public virtual void Verify(IEnumerable<PropertyInfo> propertyInfos)
         {
         }

-        public virtual void Verify(System.Reflection.PropertyInfo propertyInfo)
+        public virtual void Verify(PropertyInfo propertyInfo)
         {
         }


Don't fail when VS 2017 isn't installed

Don't fail when VS 2017 isn't installed

`new SetupConfiguration()` was throwing `COMException` with `REGDB_E_CLASSNOTREG`.
`GetSetupInstances` now returns no instances when VS 2017 isn't installed.

--- Src/InstalledVersionUtilities.cs
+++ Src/InstalledVersionUtilities.cs
@@ -4,12 +4,14 @@
 using Microsoft.Win32;
 using Microsoft.VisualStudio.Setup.Configuration;
 using System.Linq;
+using System.Runtime.InteropServices;

 namespace VsixUtil
 {
     public class InstalledVersionUtilities
     {
         readonly static VsVersion[] LegacyVersions = { VsVersion.Vs2010, VsVersion.Vs2012, VsVersion.Vs2013, VsVersion.Vs2015 };
+        const uint REGDB_E_CLASSNOTREG = 0x80040154;

         public static IEnumerable<InstalledVersion> GetInstalledVersions()
         {
@@ -40,7 +42,25 @@

         public static IEnumerable<ISetupInstance2> GetSetupInstances()
         {
-            var setupConfiguration = new SetupConfiguration();
+            SetupConfiguration setupConfiguration;
+            try
+            {
+                setupConfiguration = new SetupConfiguration();
+            }
+            catch (COMException e)
+            {
+                unchecked
+                {
+                    // Return no insances when VS2017 isn't installed.
+                    if (e.ErrorCode == (int)REGDB_E_CLASSNOTREG)
+                    {
+                        yield break;
+                    }
+                }
+
+                throw;
+            }
+
             var instanceEnumerator = setupConfiguration.EnumAllInstances();
             var instances = new ISetupInstance2[3];


Dont work with Tempmacro :(

Dont work with Tempmacro :(

--- Suplanus.Sepla/Helper/Project.cs
+++ Suplanus.Sepla/Helper/Project.cs
@@ -52,6 +52,7 @@
 				PageMacro pageMacroNew = new PageMacro();
 				pageMacroOriginal.Open(pageMacroFile, project);

+				List<Page> tempPages = new List<Page>();
 				foreach (var page in pageMacroOriginal.Pages)
 				{
 					PagePropertyList ppl = page.NameParts;
@@ -59,12 +60,12 @@
 					ppl = page.NameParts;
 					NameService nameServ = new NameService(page);
 					nameServ.EvaluateAndSetAllNames();
+					tempPages.Add(page);
 				}
-

 				var tempMacro = Path.Combine(Path.GetTempPath(), "Suplanus.Sepla.Generator.TempMacro.emp");
-				pageMacroOriginal.Create(tempMacro, pageMacroOriginal.Pages, pageMacroOriginal.Description);
-				pageMacroOriginal.Open(tempMacro, project);
+				pageMacroNew.Create(tempMacro, tempPages.ToArray(), pageMacroOriginal.Description);
+				pageMacroNew.Open(tempMacro, project);

 				// Insert in Project
 				StorableObject[] insertedPages = insert.PageMacro(


Log the file names being uploaded

Log the file names being uploaded

--- Syndll2/ProgrammingOperations.cs
+++ Syndll2/ProgrammingOperations.cs
@@ -53,8 +53,11 @@
             if (!File.Exists(path))
                 throw new FileNotFoundException(string.Format("Could not find a file at {0}", Path.GetFullPath(path)));

+            var fileName = Path.GetFileName(path);
+
             // Read the file into an RDY
             RdyFile rdy;
+            Util.Log("Reading " + fileName);
             using (var stream = File.OpenRead(path))
             {
                 rdy = RdyFile.Read(stream);
@@ -66,7 +69,7 @@
                 // Upload each file referenced separately
                 foreach (var record in rdy.Records)
                 {
-                    // find the file name
+                    // find the new full path
                     var p = Path.GetDirectoryName(path) + Path.DirectorySeparatorChar + record.Data;

                     // recurse to upload each file
@@ -76,6 +79,7 @@
             else
             {
                 // Just upload the single RDY
+                Util.Log("Uploading " + fileName);
                 UploadTableFromRdy(rdy, replace);
             }
         }
@@ -94,8 +98,11 @@
             if (!File.Exists(path))
                 throw new FileNotFoundException(string.Format("Could not find a file at {0}", Path.GetFullPath(path)));

+            var fileName = Path.GetFileName(path);
+
             // Read the file into an RDY
             RdyFile rdy;
+            Util.Log("Reading " + fileName);
             using (var stream = File.OpenRead(path))
             {
                 rdy = await RdyFile.ReadAsync(stream);
@@ -107,7 +114,7 @@
                 // Upload each file referenced separately
                 foreach (var record in rdy.Records)
                 {
-                    // find the file name
+                    // find the new full path
                     var p = Path.GetDirectoryName(path) + Path.DirectorySeparatorChar + record.Data;

                     // recurse to upload each file
@@ -117,6 +124,7 @@
             else
             {
                 // Just upload the single RDY
+                Util.Log("Uploading " + fileName);
                 await UploadTableFromRdyAsync(rdy, replace);
             }
         }


Removes channel factory disposal as it causes stack overflow on mono

--- TGS.Interface/ServerInterface.cs
+++ TGS.Interface/ServerInterface.cs
@@ -284,7 +284,6 @@
 					var cf = I.Value;
 					try
 					{
-						cf.Closed += ChannelFactory_Closed;
 						cf.Close();
 					}
 					catch
@@ -308,16 +307,6 @@
 			}
 			errorMessage = null;
 			return false;
-		}
-
-		/// <summary>
-		/// Disposes a closed <see cref="ChannelFactory"/>
-		/// </summary>
-		/// <param name="sender">The channel factory that was closed</param>
-		/// <param name="e">The event arguments</param>
-		static void ChannelFactory_Closed(object sender, EventArgs e)
-		{
-			(sender as IDisposable).Dispose();
 		}

 		/// <inheritdoc />


Added payload debug logging;

Added payload debug logging;

--- TestFormsApp/TestFormsApp/App.cs
+++ TestFormsApp/TestFormsApp/App.cs
@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Diagnostics;
 using System.Linq;
 using System.Text;
 using GoogleAnalytics;
@@ -24,7 +25,7 @@
                     VerticalOptions = LayoutOptions.Center,
                     Children = {
                         new Label {
-                            XAlign = TextAlignment.Center,
+                            HorizontalTextAlignment = TextAlignment.Center,
                             Text = "Welcome to Xamarin Forms!"
                         },
                        button,
@@ -47,6 +48,22 @@
             config.Debug = true;

             TrackerFactory.Config = config;
+
+            GAServiceManager.Current.PayloadSent += delegate (object s, PayloadSentEventArgs ev)
+            {
+                Debug.WriteLine($"Payload sent! Response:\n{ev.Response}");
+            };
+
+            GAServiceManager.Current.PayloadFailed += delegate (object s, PayloadFailedEventArgs ev)
+            {
+                Debug.WriteLine($"Payload Failed! Error: {ev.Error}");
+            };
+
+            GAServiceManager.Current.PayloadMalformed += delegate (object s, PayloadMalformedEventArgs ev)
+            {
+                Debug.WriteLine($"Payload Malformed! HttpStatusCode: {ev.HttpStatusCode}");
+            };
+

             Tracker tracker;


Removed unused code.

Removed unused code.

--- TestProtocol/CustomConnection.cs
+++ TestProtocol/CustomConnection.cs
@@ -178,7 +178,7 @@
                     {
                         this.Received( message );
                     }
-                    catch( Exception e )
+                    catch( Exception )
                     { }
                 }
             }


Pushed stresser harder

Pushed stresser harder

--- Tests/ConnectionProviderTests.cs
+++ Tests/ConnectionProviderTests.cs
@@ -323,7 +323,7 @@
 			this.provider.Start(MessageTypes);
 			this.provider.ConnectionMade += (sender, e) => (new Thread (() =>
 			{
-				for (int i = 0; i < 10000000; ++i)
+				for (long i = 0; i < 100000000000; ++i)
 					e.Connection.Send (new MockMessage { Content = i.ToString() });
 			})).Start();


TAN Patch for DKB

TAN Patch for DKB

--- libfintx/Helper/Helper.cs
+++ libfintx/Helper/Helper.cs
@@ -137,9 +137,12 @@
                     {
                         var item_ = item;

+                        if (item.Contains("Benutzer."))
+                            item.Replace("Benutzer.", "Benutzer");
+
                         if (item_.Contains("3920"))
                         {
-                            var TAN = Parse_String(item_.ToString(), "Benutzer:", "PIN").Substring(0, 3);
+                            var TAN = Parse_String(item_.ToString(), "Benutzer:", "::").Substring(0, 3);
                             Segment.HIRMS = TAN;

                             var TANf = Parse_String(item_.ToString(), "Benutzer:", "+");


allow a scale parameter to be specified for images that go through the thumbnail handler

--- WebControls/CarrotHttpHandler.cs
+++ WebControls/CarrotHttpHandler.cs
@@ -24,7 +24,6 @@
 			}
 			return bmpNew;
 		}
-

 		public void ProcessRequest(HttpContext context) {
@@ -63,6 +62,7 @@
 				int iThumb = 150;

 				string sImg = context.Request.QueryString["thumb"];
+				string sScale = context.Request.QueryString["scale"];

 				if (context.Request.QueryString["square"] != null) {
 					string sImgPX = context.Request.QueryString["square"];
@@ -80,13 +80,30 @@
 				Bitmap bmpIn = new Bitmap(25, 25);
 				Bitmap bmpThumb = new Bitmap(iThumb, iThumb);

+				int iHeight = iThumb;
+				int iWidth = iThumb;
+
 				if (!string.IsNullOrEmpty(sImg)) {
 					sImg = context.Server.MapPath(sImg);
 					if (File.Exists(sImg)) {
 						bmpIn = new Bitmap(sImg);
-						bmpThumb = ResizeBitmap(bmpIn, iThumb, iThumb);
+
+						if (sScale == "true") {
+							int h = bmpIn.Height;
+							int w = bmpIn.Width;
+
+							if (iHeight > 0) {
+								iWidth = (int)(((float)w / (float)h) * (float)iHeight);
+							} else {
+								iHeight = h;
+								iWidth = w;
+							}
+						}
+
+						bmpThumb = ResizeBitmap(bmpIn, iWidth, iHeight);
 					}
 				}
+

 				if (bmpThumb == null) {
 					context.Response.StatusCode = 404;
@@ -114,8 +131,10 @@

 		}

-	}

+
+	}
+
 }


add disposable pattern; throw if disposed

--- Source/MonoGame.Extended/Collections/ObjectPool.cs
+++ Source/MonoGame.Extended/Collections/ObjectPool.cs
@@ -6,11 +6,12 @@
 namespace MonoGame.Extended.Collections
 {
     // derived from: http://www.codeproject.com/Articles/535735/Implementing-a-Generic-Object-Pool-in-NET
-    public partial class ObjectPool<T> where T : class, IPoolable
+    public partial class ObjectPool<T> : IDisposable where T : class, IPoolable
     {
         private const int DefaultPoolMinimumSize = 0;
         private const int DefaultPoolMaximumSize = 50;

+        private long _isDisposed;
         private int _minimumSize;
         private int _maximumSize;

@@ -18,6 +19,11 @@
         private readonly ConcurrentDictionary<T, bool> _createdObjects = new ConcurrentDictionary<T, bool>();
         private int _adjustSizeInProgress;

+        public bool IsDisposed
+        {
+            get { return Interlocked.Read(ref _isDisposed) == 1; }
+        }
+
         public ObjectPool.Diagnostics Diagnostics { get; } = new ObjectPool.Diagnostics();

         public int AvailableCount
@@ -30,6 +36,11 @@
             get { return _minimumSize; }
             set
             {
+                if (IsDisposed)
+                {
+                    throw new ObjectDisposedException(GetType().FullName);
+                }
+
                 CheckLimits(value, _maximumSize);
                 _minimumSize = value;
                 AdjustSize();
@@ -41,6 +52,11 @@
             get { return _maximumSize; }
             set
             {
+                if (IsDisposed)
+                {
+                    throw new ObjectDisposedException(GetType().FullName);
+                }
+
                 CheckLimits(_minimumSize, value);
                 _maximumSize = value;
                 AdjustSize();
@@ -58,6 +74,49 @@
             AdjustSize();
         }

+        ~ObjectPool()
+        {
+            Dispose();
+        }
+
+        public void Dispose()
+        {
+            var wasDisposed = Interlocked.CompareExchange(ref _isDisposed, 1, 0);
+            if (wasDisposed != 0 || _isDisposed != 1)
+            {
+                return;
+            }
+
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        protected virtual void Dispose(bool isDisposing)
+        {
+            if (!isDisposing)
+            {
+                return;
+            }
+
+            while (_objects.Count > 0)
+            {
+                T poolable;
+                if (_objects.TryDequeue(out poolable))
+                {
+                    DestroyObject(poolable);
+                }
+            }
+
+            foreach (var keyValuePair in _createdObjects)
+            {
+                var poolable = keyValuePair.Key;
+                Diagnostics.DecrementInstancesInUse();
+                DestroyObject(poolable);
+            }
+
+            _createdObjects.Clear();
+        }
+
         private void CheckLimits(int minimumSize, int maximumSize)
         {
             if (minimumSize < 0)
@@ -151,6 +210,11 @@

         public T GetObject()
         {
+            if (IsDisposed)
+            {
+                throw new ObjectDisposedException(GetType().FullName);
+            }
+
             T obj;
             if (_objects.TryDequeue(out obj))
             {
@@ -170,6 +234,11 @@

         public void ReturnObject(T poolable, bool resurrectObject = false)
         {
+            if (IsDisposed)
+            {
+                throw new ObjectDisposedException(GetType().FullName);
+            }
+
             if (AvailableCount >= MaximumSize)
             {
                 Diagnostics.IncrementInstancesOverflow();
@@ -191,14 +260,6 @@
             Diagnostics.IncrementInstancesReturned();
             _objects.Enqueue(poolable);
         }
-
-        ~ObjectPool()
-        {
-            foreach (var item in _objects)
-            {
-                DestroyObject(item);
-            }
-        }
     }
 }


Lazy-load provider dependencies (gets around issue of no master db causing issues with the field name translator, even though that dependency isn't needed on CD)

Fixes #11

--- Source/Synthesis/Configuration/ProviderResolver.cs
+++ Source/Synthesis/Configuration/ProviderResolver.cs
@@ -42,46 +42,83 @@
 			}
 		}

-		// default instance reads values from XML configuration
-		private ProviderResolver()
-		{
-			FieldMappingProvider = LoadFieldMappingProviderFromConfig();
-			GeneratorParametersProvider = LoadGeneratorParametersProviderFromConfig();
-			TemplateInputProvider = LoadTemplateInputProviderFromConfig();
-			TemplateSignatureProvider = LoadTemplateSignatureProviderFromConfig();
-			TypeListProvider = LoadTypeListProviderFromConfig();
-			IndexFieldNameTranslator = LoadFieldNameTranslatorFromConfig();
-		}
-
 		/// <summary>
 		/// Gets the currently configured Field Mapping Provider (maps a Sitecore field type to an implementing .NET class)
 		/// </summary>
-		public IFieldMappingProvider FieldMappingProvider { get; private set; }
+		public IFieldMappingProvider FieldMappingProvider
+		{
+			get
+			{
+				if (_fieldMappingProvider == null) _fieldMappingProvider = LoadFieldMappingProviderFromConfig();
+				return _fieldMappingProvider;
+			}
+		}
+		private IFieldMappingProvider _fieldMappingProvider;

 		/// <summary>
 		/// Gets the currently configured Generator Parameters Provider (configures the Synthesis Generator's parameters)
 		/// </summary>
-		public IGeneratorParametersProvider GeneratorParametersProvider { get; private set; }
+		public IGeneratorParametersProvider GeneratorParametersProvider
+		{
+			get
+			{
+				if (_generatorParametersProvider == null) _generatorParametersProvider = LoadGeneratorParametersProviderFromConfig();
+				return _generatorParametersProvider;
+			}
+		}
+		private IGeneratorParametersProvider _generatorParametersProvider;

 		/// <summary>
 		/// Gets the currently configured Template Input Provider (configures the set of templates and fields that should be acted upon)
 		/// </summary>
-		public ITemplateInputProvider TemplateInputProvider { get; private set; }
+		public ITemplateInputProvider TemplateInputProvider
+		{
+			get
+			{
+				if (_templateInputProvider == null) _templateInputProvider = LoadTemplateInputProviderFromConfig();
+				return _templateInputProvider;
+			}
+		}
+		private ITemplateInputProvider _templateInputProvider;

 		/// <summary>
 		/// Gets the currently configured Template Signature Provider (provides a unique signature for a template's state for later comparison)
 		/// </summary>
-		public ITemplateSignatureProvider TemplateSignatureProvider { get; private set; }
+		public ITemplateSignatureProvider TemplateSignatureProvider
+		{
+			get
+			{
+				if (_templateSignatureProvider == null) _templateSignatureProvider = LoadTemplateSignatureProviderFromConfig();
+				return _templateSignatureProvider;
+			}
+		}
+		private ITemplateSignatureProvider _templateSignatureProvider;

 		/// <summary>
 		/// Gets the currently configured Type List Provider (configures where Synthesis looks for Synthesis types to be defined and for presenters)
 		/// </summary>
-		public ITypeListProvider TypeListProvider { get; private set; }
-
+		public ITypeListProvider TypeListProvider
+		{
+			get
+			{
+				if (_typeListProvider == null) _typeListProvider = LoadTypeListProviderFromConfig();
+				return _typeListProvider;
+			}
+		}
+		private ITypeListProvider _typeListProvider;
+
 		/// <summary>
 		/// Gets the currently configured FieldNameTranslator (converts Sitecore template field names to index field names)
 		/// </summary>
-		public FieldNameTranslator IndexFieldNameTranslator { get; private set; }
+		public FieldNameTranslator IndexFieldNameTranslator
+		{
+			get
+			{
+				if (_fieldNameTranslator == null) _fieldNameTranslator = LoadFieldNameTranslatorFromConfig();
+				return _fieldNameTranslator;
+			}
+		}
+		private FieldNameTranslator _fieldNameTranslator;

 		/// <summary>
 		/// Gets an instance of the Synthesis Generator pre-configured to use the current provider set
@@ -130,7 +167,7 @@
 		{
 			var indexConfiguration = Factory.GetConfigNode("/sitecore/synthesis/providers/indexConfiguration", true);

-// ReSharper disable once PossibleNullReferenceException
+			// ReSharper disable once PossibleNullReferenceException
 			var nameAttribute = indexConfiguration.Attributes["name"];

 			Assert.IsNotNull(nameAttribute, "The index name was missing on the Synthesis index configuration.");


Support for circles and (axis aligned) rectangles

--- NanoGames.Core/Graphics.cs
+++ NanoGames.Core/Graphics.cs
@@ -1,5 +1,7 @@
 // Copyright (c) the authors of NanoGames. All rights reserved.
 // Licensed under the MIT license. See LICENSE.txt in the project root.
+
+using System;

 namespace NanoGames
 {
@@ -17,6 +19,11 @@
         /// The virtual screen height.
         /// </summary>
         public const double Height = 180;
+
+        /// <summary>
+        /// The virtual screen center point.
+        /// </summary>
+        public static readonly Vector Center = new Vector(Width * 0.5, Height * 0.5);

         /// <summary>
         /// A terminal with a null renderer.
@@ -122,5 +129,48 @@

             Print(color, size, position - new Vector(text.Length * size * 0.5, 0), text);
         }
+
+        /// <summary>
+        /// Draws a circle.
+        /// </summary>
+        /// <param name="color">The color.</param>
+        /// <param name="center">The center point.</param>
+        /// <param name="radius">The radius.</param>
+        public void Circle(Color color, Vector center, double radius)
+        {
+            if (radius == 0)
+            {
+                return;
+            }
+
+            int steps = Math.Max(8, (int)Math.Ceiling(Math.Abs(radius) * 2 * Math.PI));
+            for (int i = 0; i < steps; ++i)
+            {
+                var angleA = i * 2 * Math.PI / steps;
+                var angleB = (i + 1) * 2 * Math.PI / steps;
+
+                var vectorA = center + new Vector(radius * Math.Cos(angleA), radius * Math.Sin(angleA));
+                var vectorB = center + new Vector(radius * Math.Cos(angleB), radius * Math.Sin(angleB));
+
+                Line(color, vectorA, vectorB);
+            }
+        }
+
+        /// <summary>
+        /// Draws a rectangle.
+        /// </summary>
+        /// <param name="color">The color.</param>
+        /// <param name="lowerLeft">The lower left point.</param>
+        /// <param name="upperRight">The upper right point.</param>
+        public void Rectangle(Color color, Vector lowerLeft, Vector upperRight)
+        {
+            var lowerRight = new Vector(upperRight.X, lowerLeft.Y);
+            var upperLeft = new Vector(lowerLeft.X, upperRight.Y);
+
+            Line(color, lowerLeft, lowerRight);
+            Line(color, lowerRight, upperRight);
+            Line(color, upperRight, upperLeft);
+            Line(color, upperLeft, lowerLeft);
+        }
     }
 }


Support repeat count for 'dd'

Support repeat count for 'dd'

--- JustEnoughVi/NormalMode.cs
+++ JustEnoughVi/NormalMode.cs
@@ -203,7 +203,7 @@
                     }
                 }

-                SetSelectLines(Editor.CaretLine, Editor.CaretLine);
+                SetSelectLines(Editor.CaretLine, Editor.CaretLine + count + (count > 0 ? -1 : 0));
                 EditActions.ClipboardCut(Editor);
                 EditActions.MoveCaretToLineStart(Editor);
             }


Added IDisposable interface to ISyslogMessageSender

--- SyslogNet.Client/Transport/ISyslogMessageSender.cs
+++ SyslogNet.Client/Transport/ISyslogMessageSender.cs
@@ -1,8 +1,9 @@
+using System;
 using SyslogNet.Client.Serialization;

 namespace SyslogNet.Client.Transport
 {
-	public interface ISyslogMessageSender
+	public interface ISyslogMessageSender : IDisposable
 	{
 		void Send(SyslogMessage message, ISyslogMessageSerializer serializer);
 	}


Simplify block size and hash function count math.

--- TBag.BloomFilters/InvertibleBloomFilter.Generic.cs
+++ TBag.BloomFilters/InvertibleBloomFilter.Generic.cs
@@ -64,16 +64,14 @@
             // validate the params are in range
             if (m < 1) // from overflow in bestM calculation
                 throw new ArgumentOutOfRangeException("The provided capacity and errorRate values would result in an array of length > int.MaxValue. Please reduce either the capacity or the error rate.");
+            _configuration = bloomFilterConfiguration;
+            if (_configuration.SplitByHash)
+            {
+                m = m / (long)k;
+            }
             _data.HashFunctionCount = k;
-            _configuration = bloomFilterConfiguration;
-            uint rows = 1;
-            if (_configuration.SplitByHash)
-            {
-                m = m / (long)k;
-                rows = _data.HashFunctionCount;
-            }
             _data.BlockSize = m;
-            var size = rows * m;
+            var size = _data.BlockSize * _data.HashFunctionCount;
             _data.Counts = new int[size];
             _data.IdSums = new TId[size];
             _data.HashSums = new int[size];


Removing HD content from tests for now

Removing HD content from tests for now

* contentscalefactor was removed, and a lot of test content dimensions were hardwired based on scale factor
* need to go through tests so content doesn't use magic numbers

--- tests/tests/classes/AppDelegate.cs
+++ tests/tests/classes/AppDelegate.cs
@@ -75,10 +75,10 @@
             //director.AnimationInterval = 1.0 / 60;

-            if (sharedWindow.WindowSizeInPixels.Height > 320)
-            {
-                application.ContentSearchPaths.Insert(0,"HD");
-            }
+//            if (sharedWindow.WindowSizeInPixels.Height > 320)
+//            {
+//                application.ContentSearchPaths.Insert(0,"HD");
+//            }

             sharedWindow.AddSceneDirector(sharedDirector);


Ensure we can set double properties with ints.

--- Tests/Perspex.Base.UnitTests/PerspexObjectTests.cs
+++ Tests/Perspex.Base.UnitTests/PerspexObjectTests.cs
@@ -172,6 +172,14 @@
         }

         [Fact]
+        public void SetValue_Of_Integer_On_Double_Property_Works()
+        {
+            Class2 target = new Class2();
+
+            target.SetValue(Class2.FlobProperty, 4);
+        }
+
+        [Fact]
         public void SetValue_Causes_Coercion()
         {
             Class1 target = new Class1();
@@ -615,6 +623,9 @@
             public static readonly PerspexProperty<string> BarProperty =
                 PerspexProperty.Register<Class2, string>("Bar", "bardefault");

+            public static readonly PerspexProperty<double> FlobProperty =
+                PerspexProperty.Register<Class2, double>("Flob");
+
             static Class2()
             {
                 FooProperty.OverrideDefaultValue(typeof(Class2), "foooverride");


Changed assignment of mandatory property

--- PSPortWise/NewPWAccount.cs
+++ PSPortWise/NewPWAccount.cs
@@ -50,16 +50,13 @@
         {
             PWAccount pwAccount = new PWAccount();
             pwAccount.UserName = UserName;
+            pwAccount.DisplayName = DisplayName;
             // Set defaults
             pwAccount.NotificationMappings = new MapItem[0];
             pwAccount.GlobalAccess = new GlobalAccess();
             pwAccount.GlobalAccess.maxRetries = 10;
             pwAccount.Enabled = true;
             pwAccount.ValidFrom = DateTime.Today;
-            if (MyInvocation.BoundParameters.ContainsKey("DisplayName"))
-            {
-                pwAccount.DisplayName = DisplayName;
-            }
             if (MyInvocation.BoundParameters.ContainsKey("EmailAddress"))
             {
                 pwAccount.EmailAddress = EmailAddress;


Bug in assign command logic

Bug in assign command logic

--- TwitchPlaysAssembly/Src/Commands/ModuleCommands.cs
+++ TwitchPlaysAssembly/Src/Commands/ModuleCommands.cs
@@ -129,7 +129,7 @@

 		if (!UserAccess.HasAccess(user, AccessLevel.Mod, true))
 		{
-			if (module.PlayerName != user || !module.ClaimQueue.Any(q => q.UserNickname != targetUser))
+			if (module.PlayerName != user || !module.ClaimQueue.Any(q => q.UserNickname == targetUser))
 			{
 				IRCConnection.SendMessage($"{user}, {module.Code} can only be reassigned if you have it claimed and the other user is in its claim queue.");
 				return;


no message

no message


Null checks in GetIdentityFromID on Equipment.cs


change the red color to indianred according to design reqs

--- WalletWasabi.Gui/Converters/PhaseColorConverter.cs
+++ WalletWasabi.Gui/Converters/PhaseColorConverter.cs
@@ -17,7 +17,7 @@
 			var phaseError = Global.ChaumianClient.State.IsInErrorState;

 			return ((CcjRoundPhase)p <= (CcjRoundPhase)value)
-				? (phaseError? Brushes.Red : Brushes.Green)
+				? (phaseError? Brushes.IndianRed : Brushes.Green)
 				: Brushes.Gray;
 		}


Adding in a method to demonstrate making a PDF landscape

--- Wired.Razor.MvcSample/Controllers/PdfController.cs
+++ Wired.Razor.MvcSample/Controllers/PdfController.cs
@@ -28,6 +28,20 @@
             return new FileContentResult(pdf, "application/pdf");
         }

+        public ActionResult LandscapeControllerlessPdfWithoutLayout()
+        {
+            var generator = new StandaloneGenerator(new Parser(), Server.MapPath("~"));
+            var pdf = generator.GeneratePdf(
+                (writer, document) =>
+                {
+                    document.SetPageSize(iTextSharp.text.PageSize.A4.Rotate());
+                },
+                GetModel(),
+                Server.MapPath("~/Views/Pdf/ControllerlessPdfWithoutLayout.cshtml"));
+
+            return new FileContentResult(pdf, "application/pdf");
+        }
+
         public ActionResult ControllerlessPdfWithLayout()
         {
             var generator = new StandaloneGenerator(new Parser(), Server.MapPath("~"))


Prevent empty command patterns being uneditable after loading

git-svn-id: 53f3c0fc50e56599d49cd3470d1ba0222ad3846f@8453 4a90e977-6436-4932-9605-20e10c2b6fb3

--- WorldModel/WorldModel/GameLoader/ElementLoaders.cs
+++ WorldModel/WorldModel/GameLoader/ElementLoaders.cs
@@ -202,7 +202,10 @@
                     newCommand.Parent = (Element)current;
                 }

-                newCommand.Fields[FieldDefinitions.Pattern] = pattern;
+                if (pattern != null)
+                {
+                    newCommand.Fields[FieldDefinitions.Pattern] = pattern;
+                }

                 string unresolved = data["unresolved"];
                 if (!string.IsNullOrEmpty(unresolved)) newCommand.Fields[FieldDefinitions.Unresolved] = unresolved;


Issue #8 - reset stream position.

Issue #8 - reset stream position.

--- PiczEngine/ImageResizer.cs
+++ PiczEngine/ImageResizer.cs
@@ -99,6 +99,8 @@
                     }
                 }

+                inStream.Position = 0;
+
                 ISupportedImageFormat format = new JpegFormat { Quality = 90 };
                 var size = new Size(width, 0);


Test Monkey Balls

Test Monkey Balls

--- KiaTest/KiaTest/Program.cs
+++ KiaTest/KiaTest/Program.cs
@@ -6,7 +6,10 @@
     {
         static void Main(string[] args)
         {
-            Console.WriteLine("Hello World!");
+            Console.WriteLine("Hello Wold!");
+
+
+            //HELLO SHAFTMAN
         }
     }
 }


Comments

Comments

--- King.Service/Data/Enums.cs
+++ King.Service/Data/Enums.cs
@@ -3,6 +3,13 @@
     /// <summary>
     /// Queue Priority
     /// </summary>
+    /// <remarks>
+    /// This shapes
+    /// - Timing Strategy
+    /// - Concurrency
+    /// - Cost
+    /// - Throughput
+    /// </remarks>
     public enum QueuePriority
     {
         Low = 0,


트레이에서 돌아오지 않는 문제 수정

트레이에서 돌아오지 않는 문제 수정

--- Kisbo/Core/SearchWindow.cs
+++ Kisbo/Core/SearchWindow.cs
@@ -742,8 +742,8 @@
         }
         private void ctlNotify_Click(object sender, EventArgs e)
         {
+            this.Show();
             this.WindowState = FormWindowState.Normal;
-            this.Show();
             this.Focus();
         }
         #endregion


Project Id cannot contains /, close #135

--- KotoriCore.Tests/Kotori.cs
+++ KotoriCore.Tests/Kotori.cs
@@ -1679,6 +1679,13 @@
             await _kotori.UpsertDocumentAsync("dev", "baddrr", Enums.DocumentType.Content, "movie", "matrix", null, c);
         }

+        [TestMethod]
+        [ExpectedException(typeof(KotoriProjectException))]
+        public async Task BadProjectId()
+        {
+            var result = await _kotori.UpsertProjectAsync("dev", "baddrr/2", "MrData");
+        }
+
         enum RawDocument
         {
             Matrix,


Revert "fix(Controls): prevent button anchor changing on enable"

This reverts commit 915fa2fb4dfdfc54d6fb8daaec010c3887adfb0a.

The commit causes unwanted behaviour with the buttons when the
scene is built. Related issue:
https://github.com/thestonefox/VRTK/issues/1469

It would seem it is down to Unity Engine bugs.

--- Assets/VRTK/Source/Scripts/Controls/3D/VRTK_Button.cs
+++ Assets/VRTK/Source/Scripts/Controls/3D/VRTK_Button.cs
@@ -194,7 +194,6 @@
             }

             buttonJoint.connectedBody = (connectedTo != null ? connectedTo.GetComponent<Rigidbody>() : buttonJoint.connectedBody);
-            buttonJoint.autoConfigureConnectedAnchor = false;
         }

         protected virtual void DetectJointLimitsSetup()


Create new app types as they come in

Create new app types as they come in

--- Processors/AppProcessor.cs
+++ Processors/AppProcessor.cs
@@ -64,12 +64,14 @@
                     }
                     else
                     {
-                        // TODO: Create it?
-                        Log.WriteError("App Processor", "AppID {0} - unknown app type: {1}", AppID, currentType);
+                        DbConnection.Execute("INSERT INTO `AppsTypes` (`Name`, `DisplayName`) VALUES(@Name, @DisplayName) ON DUPLICATE KEY UPDATE `Name` = `Name`",
+                            new { Name = currentType, DisplayName = productInfo.KeyValues["common"]["type"].AsString() }); // We don't need to lower display name
+
+                        Log.WriteInfo("App Processor", "Creating new apptype \"{0}\" (AppID {1})", currentType, AppID);

                         IRC.Instance.SendOps("New app type: {0}{1}{2} for app {3}{4}{5}", Colors.BLUE, currentType, Colors.NORMAL, Colors.BLUE, AppID, Colors.NORMAL);

-                        ErrorReporter.Notify(new NotImplementedException(string.Format("Unknown apptype {0} (appid {1})", currentType, AppID)));
+                        newAppType = DbConnection.ExecuteScalar<uint>("SELECT `AppType` FROM `AppsTypes` WHERE `Name` = @Type LIMIT 1", new { Type = currentType });
                     }
                 }


Don't send name changes to steam chat

Don't send name changes to steam chat

--- Processors/AppProcessor.cs
+++ Processors/AppProcessor.cs
@@ -127,24 +127,6 @@
                     );

                     MakeHistory("modified_info", DATABASE_NAME_TYPE, appName, newAppName);
-
-                    // TODO: Testy testy
-                    if (!Settings.IsFullRun
-                    &&  Settings.Current.ChatRooms.Count > 0
-                    &&  !string.Equals(appName, newAppName, StringComparison.OrdinalIgnoreCase)
-                    &&  !newAppName.StartsWith("SteamApp", StringComparison.Ordinal)
-                    &&  !newAppName.StartsWith("ValveTest", StringComparison.Ordinal))
-                    {
-                        Steam.Instance.Friends.SendChatRoomMessage(Settings.Current.ChatRooms[0], EChatEntryType.ChatMsg,
-                            string.Format(
-                                ":retreat: {0} name was changed - {1}\n« {2}\n» {3}",
-                                currentType,
-                                SteamDB.GetAppURL(AppID, "history"),
-                                appName,
-                                newAppName
-                            )
-                        );
-                    }
                 }

                 if (appType.Equals("0"))


Fixed being able to save with '0' as channel

--- KraxbotOSS/FormSettings.cs
+++ KraxbotOSS/FormSettings.cs
@@ -156,7 +156,7 @@
 				// Check so they aren't empty
 		        if (string.IsNullOrEmpty(tbDiscordToken.Text))
 			        error = "Bot Token";
-				else if (string.IsNullOrEmpty(tbDiscordChannel.Text))
+				else if (string.IsNullOrEmpty(tbDiscordChannel.Text) || tbDiscordChannel.Text == "0")
 			        error = "Channel";
 				else if (cbDiscordSteam.SelectedIndex == -1)
 			        error = "Steam Chatroom";


Removed unused field in ArticlePropertyMapper.

--- BGC.Data/Relational/Mappings/ArticlePropertyMapper.cs
+++ BGC.Data/Relational/Mappings/ArticlePropertyMapper.cs
@@ -11,8 +11,6 @@
 {
     internal class ArticlePropertyMapper : RelationalPropertyMapper<ComposerArticle, ArticleRelationalDto>
     {
-        private readonly ComposerPropertyMapper _composerMapper;
-
         protected override Expression<Func<ArticleRelationalDto, bool>> GetComparisonInternal(ComposerArticle entity)
         {
             Expression<Func<ArticleRelationalDto, bool>> result = (dto) => dto.StorageId == entity.StorageId;


Serializer can reject too large collection correctly now.

--- cli/src/MsgPack/Serialization/SerializationExceptions.cs
+++ cli/src/MsgPack/Serialization/SerializationExceptions.cs
@@ -230,5 +230,30 @@
 		{
 			return new SerializationException( String.Format( CultureInfo.CurrentCulture, "The length of array ({0}) does not match to tuple cardinality ({1}).", actualArrayLength, expectedTupleCardinality ) );
 		}
+
+		internal static readonly MethodInfo NewIsIncorrectStreamMethod = FromExpression.ToMethod( ( Exception innerException ) => SerializationExceptions.NewIsIncorrectStream( innerException ) );
+
+		///
+		///		This is intened to MsgPack for CLI internal use. Do not use this type from application directly.
+		///		Returns new exception to notify that the underlying stream is not correct semantically because failed to unpack items count of array/map.
+		///
+		/// <param name="innerException">The inner exception for the debug. The value is implementation specific.</param>
+		/// <returns><see cref="Exception"/> instance. It will not be <c>null</c>.</returns>
+		public static Exception NewIsIncorrectStream( Exception innerException )
+		{
+			return new SerializationException( "Failed to unpack items count of the collection.", innerException );
+		}
+
+		internal static readonly MethodInfo NewIsTooLargeCollectionMethod = FromExpression.ToMethod( () => SerializationExceptions.NewIsTooLargeCollection() );
+
+		///
+		///		This is intened to MsgPack for CLI internal use. Do not use this type from application directly.
+		///		Returns new exception to notify that the unpacking collection is too large to represents in the current runtime environment.
+		///
+		/// <returns><see cref="Exception"/> instance. It will not be <c>null</c>.</returns>
+		public static Exception NewIsTooLargeCollection()
+		{
+			return new MessageNotSupportedException( "The collection which has more than Int32.MaxValue items is not supported." );
+		}
 	}
 }


Fix test error message

Fix test error message

--- cli/test/MsgPack.UnitTest/MessagePackObjectTest.Miscs.cs
+++ cli/test/MsgPack.UnitTest/MessagePackObjectTest.Miscs.cs
@@ -166,7 +166,7 @@
 				{
 					try
 					{
-						Assert.AreEqual( target.AsString(), result );
+						Assert.AreEqual( target.AsString(), result, indicator );
 						continue;
 					}
 					catch ( InvalidOperationException ) { }


Bump version to 0.7.2

Bump version to 0.7.2

--- Properties/AssemblyInfo.cs
+++ Properties/AssemblyInfo.cs
@@ -31,5 +31,5 @@
 // You can specify all the values or you can default the Build and Revision Numbers
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.7.1.0")]
-    [assembly: AssemblyFileVersion("0.7.1.0")]
+[assembly: AssemblyVersion("0.7.2.0")]
+[assembly: AssemblyFileVersion("0.7.2.0")]


- release 4.26.2704

- release 4.26.2704

--- Properties/AssemblyInfo.cs
+++ Properties/AssemblyInfo.cs
@@ -9,7 +9,7 @@
 //      Revision -.Net framework

 //---------------------------- WinForms Viewer -------------------------------------------------
-[assembly: AssemblyInformationalVersion("4.25.2704")]  //Should be equal to the same property of Patagames.Pdf assembly
+[assembly: AssemblyInformationalVersion("4.26.2704")]  //Should be equal to the same property of Patagames.Pdf assembly
 [assembly: AssemblyVersion("4.6.5." +
 #if DOTNET20
 "20"


no message

no message

--- Properties/AssemblyInfo.cs
+++ Properties/AssemblyInfo.cs
@@ -1,16 +1,15 @@
 using System.Reflection;
-using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;

 // General Information about an assembly is controlled through the following
 // set of attributes. Change these attribute values to modify the information
 // associated with an assembly.
 [assembly: AssemblyTitle("MonoWebPublisher")]
-[assembly: AssemblyDescription("")]
+[assembly: AssemblyDescription("MonoWebPublisher")]
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("MonoWebPublisher")]
-[assembly: AssemblyCopyright("Copyright ©  2014")]
+[assembly: AssemblyCopyright("Copyright ©  2014 zji")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]


Update copyright statement to 2014

Update copyright statement to 2014

--- Properties/AssemblyInfo.cs
+++ Properties/AssemblyInfo.cs
@@ -10,7 +10,7 @@
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("Software Punt")]
 [assembly: AssemblyProduct("Tomato")]
-[assembly: AssemblyCopyright("Copyright © Software Punt 2013")]
+[assembly: AssemblyCopyright("Copyright © Software Punt 2014")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]


Version 1.9.9

Version 1.9.9

--- Properties/AssemblyInfo.cs
+++ Properties/AssemblyInfo.cs
@@ -32,4 +32,4 @@
 // You can specify all the values or you can default the Build and Revision Numbers
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.9.8")]
+[assembly: AssemblyVersion("1.9.9")]


Version 1.1.0.0

Version 1.1.0.0

--- Properties/AssemblyInfo.cs
+++ Properties/AssemblyInfo.cs
@@ -29,5 +29,5 @@
 // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
 // übernehmen, indem Sie "*" eingeben:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.6.0")]
-[assembly: AssemblyFileVersion("1.0.6.0")]
+[assembly: AssemblyVersion("1.1.0.0")]
+[assembly: AssemblyFileVersion("1.1.0.0")]


Build script now writes the package name and version into the AssemblyDescription attibute. This allows the package information to be seen in Visual Studio avoiding confusion with the assembly version that remains at the major.

--- Properties/AssemblyInfo.cs
+++ Properties/AssemblyInfo.cs
@@ -1,4 +1,3 @@
 using System.Reflection;

 [assembly: AssemblyTitle("Autofac.Tests.Integration.Mef")]
-[assembly: AssemblyDescription("")]


Incremented the version number.

Incremented the version number.

--- Properties/AssemblyInfo.cs
+++ Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@
 // You can specify all the values or you can default the Build and Revision Numbers
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.3.3.0")]
-[assembly: AssemblyFileVersion("0.3.3.0")]
+[assembly: AssemblyVersion("0.3.4.0")]
+[assembly: AssemblyFileVersion("0.3.4.0")]


Upped the version number.

Upped the version number.

--- Properties/AssemblyInfo.cs
+++ Properties/AssemblyInfo.cs
@@ -32,6 +32,6 @@
 //
 // You can specify all the values or you can default the Revision and Build Numbers
 // by using the '*' as shown below:
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: AssemblyVersion("2.0.0.0")]
+[assembly: AssemblyFileVersion("2.0.0.0")]
 [assembly: NeutralResourcesLanguageAttribute("en-US")]


exception if cannot cast property to/form azure

--- Candor.WindowsAzure/Storage/Table/TableEntityProxy.cs
+++ Candor.WindowsAzure/Storage/Table/TableEntityProxy.cs
@@ -138,7 +138,7 @@
                         propertyInfo.SetValue(propertyObject, entityProperty.Int64Value, null);
                     return;
                 default:
-                    return;
+                    throw new InvalidCastException(String.Format("Cannot cast Azure table value into property '{0}'.", propertyInfo.Name));
             }
         }
         public override IDictionary<string, EntityProperty> WriteEntity(OperationContext operationContext)
@@ -254,7 +254,7 @@
             if (typeConverter.CanConvertTo(typeof(string)) && typeConverter.CanConvertFrom(typeof(string)))
                 return new EntityProperty((string)typeConverter.ConvertTo(value, typeof(string)));

-            return null;
+            throw new InvalidCastException(String.Format("Cannot cast property '{0}' into an EntityProperty to be persisted into Azure. Implement a TypeConverter for conversion to and from a String.", type.FullName));
         }
     }
 }


Bump to version 2.1.1

Bump to version 2.1.1

--- Properties/AssemblyInfo.cs
+++ Properties/AssemblyInfo.cs
@@ -49,5 +49,5 @@
 // You can specify all the values or you can default the Build and Revision Numbers
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("2.1.0.0")]
+[assembly: AssemblyVersion("2.1.1.0")]
 [assembly: AssemblyFileVersion("1.0.0.0")]


Optimize BinaryStringToBitBlockList

Optimize BinaryStringToBitBlockList

This is inspired by the stack trace of #207 where BinaryStringToBitBlockList is mentioned.
Often logic can be written quite concise using Linq.
When asking about raw performance Linq is almost never the answer.

I tried benchmarking the current implementation against this one using BenchmarkDotNet.

```
| Method |       Runtime |        Mean |     Error |    StdDev | Ratio |  Gen 0 | Gen 1 | Gen 2 | Allocated |
|------- |-------------- |------------:|----------:|----------:|------:|-------:|------:|------:|----------:|
|    Old |    .NET 4.7.2 | 11,685.9 ns | 132.05 ns | 123.52 ns |  1.00 | 3.3112 |     - |     - |   10439 B |
|    New |    .NET 4.7.2 |    216.9 ns |   2.66 ns |   2.36 ns |  0.02 | 0.1810 |     - |     - |     570 B |
|        |               |             |           |           |       |        |       |       |           |
|    Old | .NET Core 2.1 | 10,543.3 ns | 153.23 ns | 135.84 ns |  1.00 | 2.9907 |     - |     - |    9456 B |
|    New | .NET Core 2.1 |    205.4 ns |   1.87 ns |   1.75 ns |  0.02 | 0.1805 |     - |     - |     568 B |
|        |               |             |           |           |       |        |       |       |           |
|    Old | .NET Core 3.1 |  9,035.3 ns | 103.41 ns |  96.73 ns |  1.00 | 2.7924 |     - |     - |    8792 B |
|    New | .NET Core 3.1 |    202.3 ns |   1.69 ns |   1.49 ns |  0.02 | 0.1554 |     - |     - |     488 B |
```

As seen this implementation is ~50x faster and memory allocations is reduced by ~18x.

--- QRCoder/QRCodeGenerator.cs
+++ QRCoder/QRCodeGenerator.cs
@@ -922,10 +922,16 @@

         private static List<string> BinaryStringToBitBlockList(string bitString)
         {
-            return new List<char>(bitString.ToCharArray()).Select((x, i) => new { Index = i, Value = x })
-                .GroupBy(x => x.Index / 8)
-                .Select(x => String.Join("", x.Select(v => v.Value.ToString()).ToArray()))
-                .ToList();
+            const int blockSize = 8;
+            var numberOfBlocks = (int)Math.Ceiling(bitString.Length / (double)blockSize);
+            var blocklist = new List<string>(numberOfBlocks);
+
+            for (int i = 0; i < bitString.Length; i += blockSize)
+            {
+                blocklist.Add(bitString.Substring(i, blockSize));
+            }
+
+            return blocklist;
         }

         private static List<int> BinaryStringListToDecList(List<string> binaryStringList)


Added some place sselection code

Added some place sselection code

--- CarTracker/CarTracker.Logic/Services/TripProcessor.cs
+++ CarTracker/CarTracker.Logic/Services/TripProcessor.cs
@@ -13,6 +13,7 @@
 using CarTracker.Data;
 using CarTracker.Data.Extensions;
 using CarTracker.Logic.Util;
+using Microsoft.EntityFrameworkCore.Design;

 namespace CarTracker.Logic.Services
 {
@@ -223,6 +224,45 @@

             _db.SaveChanges();
         }
+
+        protected void AddGuessedPlacesToTrip(Trip trip)
+        {
+            var placeTypes = new List<TripPossiblePlaceType>
+            {
+                TripPossiblePlaceType.Destination,
+                TripPossiblePlaceType.Start
+            };
+
+            foreach (var placeType in placeTypes)
+            {
+                var place = GuessPlaceForTrip(trip, placeType);
+            }
+        }
+
+        protected Place GuessPlaceForTrip(Trip trip, TripPossiblePlaceType type)
+        {
+            var possiblePlaces = _db.TripPossiblePlaces.Active()
+                .Where(x => x.PlaceType == type && x.TripId == trip.TripId);
+            var ownerId = trip.Car.OwnerId;
+
+            var guessedPlaceId = _db.PlaceVisits.Where(x => x.OwnerId == ownerId && x.PlaceType == type && x.UserSelected)
+                .Join(possiblePlaces,
+                    pv => pv.PlaceId,
+                    pp => pp.PlaceId,
+                    (pv, pp) => pv)
+                .GroupBy(pv => pv.PlaceId, (placeId, visits) => new
+                {
+                    PlaceId = placeId,
+                    Count = visits.Count()
+                })
+                .OrderBy(x => x.Count).FirstOrDefault();
+
+            if (null != guessedPlaceId)
+            {
+                return _db.Places.First(x => x.PlaceId == guessedPlaceId.PlaceId);
+            }
+            return null;
+        }

     }
 }


Fixed the failing unit test

Fixed the failing unit test

--- ComputeClient/Compute.Client.UnitTests/ApiUriTests.cs
+++ ComputeClient/Compute.Client.UnitTests/ApiUriTests.cs
@@ -116,7 +116,7 @@
         public void ReturnsAddVipNodeUri()
         {
             var uri = ApiUris.AddVipNode(_orgId);
-            Assert.AreEqual(ApiUris.MCP2_1_PREFIX + _orgId + "/networkDomainVip/createNode", uri.OriginalString);
+            Assert.AreEqual(ApiUris.MCP2_3_PREFIX + _orgId + "/networkDomainVip/createNode", uri.OriginalString);
         }

         [TestMethod]


Fix premature disposing of StreamWriter in Context.WriteResponse

--- RailPhase/Views/Context.cs
+++ RailPhase/Views/Context.cs
@@ -84,10 +84,9 @@
         /// <seealso cref="ResponseStream"/>
         public void WriteResponse(string response)
         {
-            using (var writer = new StreamWriter(ResponseStream, Response.ContentEncoding))
-            {
-                writer.Write(response);
-            }
+            var writer = new StreamWriter(ResponseStream, Response.ContentEncoding);
+            writer.Write(response);
+            writer.Flush();
         }

         /// <summary>


changing property AnimalID

changing property AnimalID

--- Rambutan/Animals/Animal.cs
+++ Rambutan/Animals/Animal.cs
@@ -46,7 +46,7 @@

         //properties => TODO : Enter checks.

-        public long animalID
+        public long AnimalID
         {
             get
             {


start to add the DocumentDB write

start to add the DocumentDB write

--- RequestTopicExpert/run.csx
+++ RequestTopicExpert/run.csx
@@ -270,8 +270,8 @@
                 // set up another recipent - calendar help
                 Personalization personalization = new Personalization();
                 personalization.AddTo(new Email(SchedulerEmailAddress));
-                personalization.AddTo(new Email(email));
-                personalization.AddTo(new Email(GetExpert(topic,conversation)));
+                personalization.AddTo(new Email(aExpertRequest.ReqestorEmailAddress));
+                personalization.AddTo(new Email(GetExpert(aExpertRequest.Topic,aExpertRequest.ReqestedConversation)));

                 string SendGridKey = ConfigurationManager.AppSettings["SEND_GRID_API_KEY"].ToString();
                 //log.Info($"The retrived key is {SendGridKey}");


Adjust tenant admin check to support an App Only AAD connection

--- Core/OfficeDevPnP.Core/Extensions/TenantExtensions.cs
+++ Core/OfficeDevPnP.Core/Extensions/TenantExtensions.cs
@@ -1027,14 +1027,20 @@
 #if !ONPREMISES
         public static bool IsCurrentUserTenantAdmin(ClientContext clientContext)
         {
+            // In order to support an App Only AAD connection that has Sites.FullControl.All permission
+            // we need to check via the SPO approach first as the Microsoft Graph approach currently
+            // assumes a user is connected and therefore does not work for an App Only AAD connection.
+            if (IsCurrentUserTenantAdminViaSPO(clientContext))
+            {
+                return true;
+			}
+
             if (PnPProvisioningContext.Current != null)
             {
                 return IsCurrentUserTenantAdminViaGraph();
             }
-            else
-            {
-                return IsCurrentUserTenantAdminViaSPO(clientContext);
-            }
+
+            return false;
         }

         private static bool IsCurrentUserTenantAdminViaGraph()


change the message from Edi to Cortana

change the message from Edi to Cortana

--- RequestTopicExpert/run.csx
+++ RequestTopicExpert/run.csx
@@ -18,7 +18,7 @@
 {
     BccEmailAddress = AppSettingsHelper.GetAppSetting("BCC_EMAIL");
     SchedulerEmailAddress = AppSettingsHelper.GetAppSetting("SCHEDULER_EMAIL");
-    FromEmailAddress = AppSettingsHelper.GetAppSetting("FROM_EMAL");
+    FromEmailAddress = AppSettingsHelper.GetAppSetting("FROM_EMAIL");
 }

 static void LoadTopicExperts()
@@ -95,7 +95,7 @@

     Email to = new Email(GetExpert(aExpertRequest.Topic,aExpertRequest.RequestedConversation));

-    string messageContent = $"Edi, can you scheudle a Skype for business call between the people on the to line tomorrow {aExpertRequest.RequestedDayHalf.ToString().ToLower()}?"
+    string messageContent = $"Cortana, can you scheudle a Skype for business call between the people on the to line tomorrow {aExpertRequest.RequestedDayHalf.ToString().ToLower()}?"
         +"\n" + $"The conversation will cover the following, {aExpertRequest.RequestedConversation}";
     Content content = new Content("text/plain", messageContent);


load the LogHelper and initialize

load the LogHelper and initialize

--- RequestTopicExpert/run.csx
+++ RequestTopicExpert/run.csx
@@ -1,5 +1,6 @@
 //https://azure.microsoft.com/en-us/documentation/articles/functions-reference-csharp/
 #load "..\shared\DocumentDBHelper.csx"
+#load "..\sheard\LogHelper.csx"
 using System;
 using System.Net;
 using System.Net.Mail;
@@ -122,7 +123,7 @@
 public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
 {

-
+    LogHelper.Initialize(log);
     // Grab the log and make it a class variable that other methods can use
     logger = log;


Added one day outputcache for all front end actions/views

--- Dabravata/Dabravata.Web/Controllers/BaseController.cs
+++ Dabravata/Dabravata.Web/Controllers/BaseController.cs
@@ -9,6 +9,7 @@

 namespace Dabravata.Web.Controllers
 {
+    [OutputCache(CacheProfile = "OneDayCache")]
     public class BaseController : Controller
     {
         private readonly IUoWData data;


formatting

formatting

--- Demos/XWeather/Droid/Services/AudioRecorderService.cs
+++ Demos/XWeather/Droid/Services/AudioRecorderService.cs
@@ -73,8 +73,10 @@
 			int readResult = 0;
 			DateTime? silenceTime = null;

-			if (os != null) {
-				while (isRecording) {
+			if (os != null)
+			{
+				while (isRecording)
+				{
 					readResult = recorder.Read (data, 0, bufferSize);

 					if (readResult > 0)// Xamarin seems to have normalized this buffer read like most .NET reads, readResult == the # bytes read, so we can't compare to TrackStatus.Success, etc.
@@ -85,30 +87,41 @@
 						{
 							audioDetected = true;
 							silenceTime = null;
-						} else //no audio detected
-						  {
+						}
+						else //no audio detected
+						{
 							//see if we've detected 'near' silence for more than <audioTimeout>
-							if (endOnSilence && silenceTime.HasValue) {
-								if (DateTime.Now.Subtract (silenceTime.Value) > audioTimeout) {
+							if (endOnSilence && silenceTime.HasValue)
+							{
+								if (DateTime.Now.Subtract (silenceTime.Value) > audioTimeout)
+								{
 									StopRecording ();
 								}
-							} else {
+							}
+							else
+							{
 								silenceTime = DateTime.Now;
 							}
 						}

 						//write the data to disk
-						try {
+						try
+						{
 							os.Write (data);
-						} catch (Exception ex) {
+						}
+						catch (Exception ex)
+						{
 							System.Diagnostics.Debug.WriteLine (ex.Message);
 						}
 					}
 				}

-				try {
+				try
+				{
 					os.Close ();
-				} catch (Exception ex) {
+				}
+				catch (Exception ex)
+				{
 					System.Diagnostics.Debug.WriteLine (ex.Message);
 				}

@@ -119,7 +132,8 @@

 		public void StopRecording ()
 		{
-			if (recorder != null) {
+			if (recorder != null)
+			{
 				isRecording = false;

 				recorder.Stop ();
@@ -143,42 +157,57 @@
 			//bool signed = (RECORDER_AUDIO_ENCODING == Android.Media.Encoding. AudioFormat. Encoding.PCM_SIGNED);
 			bool bigEndian = false;// (format.isBigEndian());

-			if (use16Bit) {
-				for (int i = readPoint; i < buffer.Length - leftOver; i += 2) {
+			if (use16Bit)
+			{
+				for (int i = readPoint; i < buffer.Length - leftOver; i += 2)
+				{
 					int value = 0;
 					// deal with endianness
 					int hiByte = (bigEndian ? buffer [i] : buffer [i + 1]);
 					int loByte = (bigEndian ? buffer [i + 1] : buffer [i]);

-					if (signed) {
+					if (signed)
+					{
 						short shortVal = (short)hiByte;
 						shortVal = (short)((shortVal << 8) | (byte)loByte);
 						value = shortVal;
-					} else {
+					}
+					else
+					{
 						value = (hiByte << 8) | loByte;
 					}
 					max = Math.Max (max, value);
 				} // for
-			} else {
+			}
+			else
+			{
 				// 8 bit - no endianness issues, just sign
-				for (int i = readPoint; i < buffer.Length - leftOver; i++) {
+				for (int i = readPoint; i < buffer.Length - leftOver; i++)
+				{
 					int value = 0;

-					if (signed) {
+					if (signed)
+					{
 						value = buffer [i];
-					} else {
+					}
+					else
+					{
 						short shortVal = 0;
 						shortVal = (short)(shortVal | buffer [i]);
 						value = shortVal;
 					}
+
 					max = Math.Max (max, value);
 				} // for
 			} // 8 bit
 			  // express max as float of 0.0 to 1.0 of max value
 			  // of 8 or 16 bits (signed or unsigned)
-			if (signed) {
+			if (signed)
+			{
 				if (use16Bit) { level = (float)max / MAX_16_BITS_SIGNED; } else { level = (float)max / MAX_8_BITS_SIGNED; }
-			} else {
+			}
+			else
+			{
 				if (use16Bit) { level = (float)max / MAX_16_BITS_UNSIGNED; } else { level = (float)max / MAX_8_BITS_UNSIGNED; }
 			}

@@ -221,7 +250,8 @@

 			byte [] data = new byte [bufferSize];

-			try {
+			try
+			{
 				input = new FileInputStream (tempFile);
 				output = new FileOutputStream (permanentFile);
 				totalAudioLen = input.Channel.Size ();
@@ -231,13 +261,16 @@

 				WriteWaveFileHeader (output, totalAudioLen, totalDataLen, longSampleRate, channels, byteRate);

-				while (input.Read (data) != -1) {
+				while (input.Read (data) != -1)
+				{
 					output.Write (data);
 				}

 				input.Close ();
 				output.Close ();
-			} catch (Exception ex) {
+			}
+			catch (Exception ex)
+			{
 				System.Diagnostics.Debug.WriteLine (ex.Message);
 			}
 		}


BUG FIX: ContainerDirectoryTests.Create() - Remove repeated FileSytem property.

--- IronFoundry.Container.Test/ContainerDirectoryTests.cs
+++ IronFoundry.Container.Test/ContainerDirectoryTests.cs
@@ -25,7 +25,6 @@

         public class Create : ContainerDirectoryTests
         {
-            FileSystemManager FileSystem { get; set; }
             IContainerUser ContainerUser { get; set; }

             public Create()


Uses LabelOfEnum() and DetailOfEnum().  -AddExclusiveCommands()

--- Library/Software/WpfApplication/Menu/MainMenu.xaml.cs
+++ Library/Software/WpfApplication/Menu/MainMenu.xaml.cs
@@ -48,10 +48,12 @@
 #endif

             MenuItem item;
+            string label = seed.Label ?? AbnakiReflection.LabelOfEnum(seed.Key);
+
             if (seed.ParentKey == null)
-                item = AddMenuItem(seed.Key, seed.Label, seed.DefaultCheck);
+                item = AddMenuItem(seed.Key, label, seed.DefaultCheck);
             else
-                item = AddItemChild(seed.ParentKey, seed.Key, seed.Label, seed.DefaultCheck);
+                item = AddItemChild(seed.ParentKey, seed.Key, label, seed.DefaultCheck);

             CompleteItem<Tkey>(item, seed);
         }
@@ -66,15 +68,15 @@
             AddCommand<Tkey>(new MenuSeed<Tkey>(childKey, label, defaultCheck) { ParentKey = parentKey });
         }

-        public void AddExclusiveCommands<TKey>(object parentKey, IEnumerable<MenuSeed<TKey>> seeds)
-        {
-            foreach ( var seed in seeds )
-            {
-                seed.MutuallyExclusive = true;
-                seed.ParentKey = parentKey;
-                AddCommand(seed);
-            }
-        }
+        //public void AddExclusiveCommands<TKey>(object parentKey, IEnumerable<MenuSeed<TKey>> seeds)
+        //{
+        //    foreach ( var seed in seeds )
+        //    {
+        //        seed.MutuallyExclusive = true;
+        //        seed.ParentKey = parentKey;
+        //        AddCommand(seed);
+        //    }
+        //}

         void CompleteItem<Tkey>(MenuItem item, MenuSeed<Tkey> seed)
@@ -84,7 +86,9 @@
             else
                 item.Click += ItemClick<Tkey>; // usual

-            item.ToolTip = seed.Tooltip;
+            item.ToolTip = seed.Tooltip ?? AbnakiReflection.DetailOfEnum(item.Tag);
+            //  maybe wrap
+            //  Regex rgx = new Regex("(.{50}\\s)"); string s = rgx.Replace(longMessage,"$1\n");

             if ( seed.Enabled.HasValue )
                 item.IsEnabled = seed.Enabled.Value;


Refactored, +IMainMenu.  Uses SortDescriptions.

--- Library/Software/WpfApplication/Menu/MainMenu.xaml.cs
+++ Library/Software/WpfApplication/Menu/MainMenu.xaml.cs
@@ -13,6 +13,8 @@
 using System.Windows.Navigation;
 using System.Windows.Shapes;

+using Abnaki.Windows.GUI;
+
 namespace Abnaki.Windows.Software.Wpf.Menu
 {
     /// <summary>
@@ -25,31 +27,44 @@
     /// and lets developers avoid time-consuming designer interaction.
     /// In some situations, menu commands are known at run time, not design time.
     /// </remarks>
-    public partial class MainMenu : UserControl
+    public partial class MainMenu : UserControl, IMainMenu
     {
         public MainMenu()
         {
             InitializeComponent();
         }

-        public void AddCommand<Tkey>(Tkey key, string label, bool? defaultCheck = null, string toolTip = null)
+        public void AddCommand<Tkey>(MenuSeed<Tkey> seed)
         {
-            MenuItem item = AddMenuItem(key, label, defaultCheck);
+            MenuItem item;
+            if (seed.ParentKey == null)
+                item = AddMenuItem(seed.Key, seed.Label, seed.DefaultCheck);
+            else
+                item = AddItemChild(seed.ParentKey, seed.Key, seed.Label, seed.DefaultCheck);

-            CompleteItem<Tkey>(item, toolTip);
+            CompleteItem<Tkey>(item, seed);
         }

-        public void AddCommandChild<Tkey>(object parentKey, Tkey childKey, string label, bool? defaultCheck = null, string toolTip = null)
+        public void AddCommand<Tkey>(Tkey key, string label, bool? defaultCheck = null)
         {
-            MenuItem item = AddItemChild(parentKey, childKey, label, defaultCheck);
-
-            CompleteItem<Tkey>(item, toolTip);
+            AddCommand<Tkey>(new MenuSeed<Tkey>(key, label, defaultCheck));
         }

-        void CompleteItem<Tkey>(MenuItem item, string toolTip)
+        public void AddCommandChild<Tkey>(object parentKey, Tkey childKey, string label, bool? defaultCheck = null)
+        {
+            AddCommand<Tkey>(new MenuSeed<Tkey>(childKey, label, defaultCheck) { ParentKey = parentKey });
+        }
+
+        void CompleteItem<Tkey>(MenuItem item, MenuSeed<Tkey> seed)
         {
             item.Click += ItemClick<Tkey>;
-            item.ToolTip = toolTip;
+            item.ToolTip = seed.Tooltip;
+
+            if ( seed.Enabled.HasValue )
+                item.IsEnabled = seed.Enabled.Value;
+
+            item.Items.SortDescriptions.Clear();
+            item.Items.SortDescriptions.Add(new System.ComponentModel.SortDescription("CommandParameter", System.ComponentModel.ListSortDirection.Ascending));
         }

         void ItemClick<Tkey>(object sender, RoutedEventArgs e)
@@ -57,7 +72,11 @@
             MenuItem item = (MenuItem)sender;
             Tkey key = (Tkey)item.Tag;
             bool? isChecked = item.IsCheckable ? (bool?)item.IsChecked : (bool?)null;
-            ButtonBus<Tkey>.Handle(key, isChecked);
+
+            ButtonBus<Tkey>.Handle(key, isChecked); // the whole point
+
+            e.Handled = true;  // otherwise, tunnels down through MenuItem hierarchy
+
         }

         MenuItem AddMenuItem(object key, string label, bool? defaultCheck)
@@ -67,25 +86,54 @@

         MenuItem AddItemChild(object parentKey, object childKey, string label, bool? defaultCheck)
         {
-            MenuItem parentItem = this.RootMenu.Items.Cast<MenuItem>().First(item => parentKey.Equals(item.Tag));
+            MenuItem parentItem = FindItem(parentKey, this.RootMenu.Items);
+
+            return AddMenuItem(parentItem, childKey, label, defaultCheck);
+        }

-            return AddMenuItem(parentItem, childKey, label, defaultCheck);
+        MenuItem FindItem(object tag, ItemCollection items)
+        {
+            MenuItem foundItem = items.Cast<MenuItem>().First(item => tag.Equals(item.Tag));
+            if (foundItem == null )
+            { // recurse
+                foreach ( MenuItem item in items )
+                {
+                    foundItem = FindItem(tag, item.Items);
+                    if (foundItem != null)
+                        break;
+                }
+            }
+            return foundItem;
         }

         MenuItem AddMenuItem(ItemsControl container, object key, string label, bool? defaultCheck)
         {
             MenuItem item = new MenuItem();
             item.Header = label;
+            //AssignTag(item, key);
             item.Tag = key;
+            AssignIntegerSequence(item, key);

             item.IsCheckable = defaultCheck.HasValue;
             if (defaultCheck.HasValue)
                 item.IsChecked = defaultCheck.Value;

             container.Items.Add(item);
+
+            if (container.Items.Count > 1)
+            {  // effect of AssignIntegerSequence()
+                container.Items.Refresh();
+            }
+
             return item;
         }

+        static void AssignIntegerSequence(MenuItem item, object key)
+        {
+            // Nothing special about CommandParameter; it is an available object field.
+            // (int) required for disparate enums via SortDescriptions.
+            item.CommandParameter = (int)key;
+        }
     }

 }


如果元素返回自身将会炸掉

如果元素返回自身将会炸掉

--- LightTextEditorPlus/TextEditorPlus/Layout/TextView.cs
+++ LightTextEditorPlus/TextEditorPlus/Layout/TextView.cs
@@ -22,10 +22,10 @@
         #region 属性

         /// <inheritdoc />
-        protected override int VisualChildrenCount => _layers.Count;
+        protected override int VisualChildrenCount => _layers.Count + 1;

         /// <inheritdoc />
-        protected override Visual GetVisualChild(int index) => _layers[index];
+        protected override Visual GetVisualChild(int index) => index == 0 ? this : _layers[index - 1];

         protected override void OnRender(DrawingContext drawingContext)
         {


Version string in core changed

Version string in core changed

--- LibSVMsharp/Core/libsvm.cs
+++ LibSVMsharp/Core/libsvm.cs
@@ -12,7 +12,7 @@
     /// </summary>
     public static class libsvm
     {
-        public static string VERSION = "3.20";
+        public static string VERSION = "3.23";

         /// <param name="prob">svm_problem</param>
         /// <param name="param">svm_parameter</param>


more robust transition (better ArgumentException)

--- MahApps.Metro/Controls/TransitioningContentControl.cs
+++ MahApps.Metro/Controls/TransitioningContentControl.cs
@@ -22,39 +22,39 @@
     public enum TransitionType
     {
         /// <summary>
-        /// DefaultTransition
+        /// Use the VisualState DefaultTransition
         /// </summary>
         Default,
         /// <summary>
-        /// Normal
+        /// Use the VisualState Normal
         /// </summary>
         Normal,
         /// <summary>
-        /// UpTransition
+        /// Use the VisualState UpTransition
         /// </summary>
         Up,
         /// <summary>
-        /// DownTransition
+        /// Use the VisualState DownTransition
         /// </summary>
         Down,
         /// <summary>
-        /// RightTransition
+        /// Use the VisualState RightTransition
         /// </summary>
         Right,
         /// <summary>
-        /// RightReplaceTransition
+        /// Use the VisualState RightReplaceTransition
         /// </summary>
         RightReplace,
         /// <summary>
-        /// LeftTransition
+        /// Use the VisualState LeftTransition
         /// </summary>
         Left,
         /// <summary>
-        /// LeftReplaceTransition
+        /// Use the VisualState LeftReplaceTransition
         /// </summary>
         LeftReplace,
         /// <summary>
-        /// CustomTransition
+        /// Use a custom VisualState, the name must be CustomTransition
         /// </summary>
         Custom
     }
@@ -231,8 +231,7 @@
                 // revert to default
                 Transition = DefaultTransitionState;

-                throw new ArgumentException(
-                    string.Format(CultureInfo.CurrentCulture, "Temporary removed exception message", invalidTransition));
+                throw new ArgumentException(string.Format("'{0}' Transition could not be found!", invalidTransition), "Transition");
             }
             VisualStateManager.GoToState(this, NormalState, false);
         }
@@ -250,18 +249,19 @@
             // both presenters must be available, otherwise a transition is useless.
             if (CurrentContentPresentationSite != null && PreviousContentPresentationSite != null)
             {
-                if (RestartTransitionOnContentChange) {
+                if (RestartTransitionOnContentChange)
+                {
                     CurrentTransition.Completed -= OnTransitionCompleted;
                 }

                 CurrentContentPresentationSite.Content = newContent;
-
                 PreviousContentPresentationSite.Content = oldContent;

                 // and start a new transition
                 if (!IsTransitioning || RestartTransitionOnContentChange)
                 {
-                    if (RestartTransitionOnContentChange) {
+                    if (RestartTransitionOnContentChange)
+                    {
                         CurrentTransition.Completed += OnTransitionCompleted;
                     }
                     IsTransitioning = true;
@@ -276,19 +276,23 @@
         /// </summary>
         public void ReloadTransition()
         {
-            if (RestartTransitionOnContentChange)
-            {
-                CurrentTransition.Completed -= OnTransitionCompleted;
-            }
-            if (!IsTransitioning || RestartTransitionOnContentChange)
+            // both presenters must be available, otherwise a transition is useless.
+            if (CurrentContentPresentationSite != null && PreviousContentPresentationSite != null)
             {
                 if (RestartTransitionOnContentChange)
                 {
-                    CurrentTransition.Completed += OnTransitionCompleted;
-                }
-                IsTransitioning = true;
-                VisualStateManager.GoToState(this, NormalState, false);
-                VisualStateManager.GoToState(this, GetTransitionName(Transition), true);
+                    CurrentTransition.Completed -= OnTransitionCompleted;
+                }
+                if (!IsTransitioning || RestartTransitionOnContentChange)
+                {
+                    if (RestartTransitionOnContentChange)
+                    {
+                        CurrentTransition.Completed += OnTransitionCompleted;
+                    }
+                    IsTransitioning = true;
+                    VisualStateManager.GoToState(this, NormalState, false);
+                    VisualStateManager.GoToState(this, GetTransitionName(Transition), true);
+                }
             }
         }


Restored missing controller route

Restored missing controller route

--- MiX.Integrate.Shared/Constants/APIControllerRoutes.cs
+++ MiX.Integrate.Shared/Constants/APIControllerRoutes.cs
@@ -24,6 +24,7 @@
 			public const string UPDATE = "api/assets";
 			public const string ADDASSETSTATE = "api/assets/group/{groupId}/state";
 			public const string ADD = "api/assets";
+			public const string GETASSETDIAG = "api/assets/diagnostics/group/{groupId}";
 			public const string GETTRAILERSFORORGANISATION = "api/assets/organisation/{organisationId}/trailers";
 		}


And: Further file checks in MediaPicekr

And: Further file checks in MediaPicekr

--- MonoDroid/Xamarin.Mobile/Media/MediaPickerActivity.cs
+++ MonoDroid/Xamarin.Mobile/Media/MediaPickerActivity.cs
@@ -151,7 +151,7 @@
 					filePath = GetFilePathForUri (this.path);
 				}

-				if (filePath != null)
+				if (filePath != null && File.Exists (filePath))
 				{
 					var mf = new MediaFile (filePath, () => File.OpenRead (filePath));
 					args = new MediaPickedEventArgs (requestCode, false, mf);


wrong endpoint

wrong endpoint

--- NET/API/Treehopper.Desktop/LibUsb/LibUsbConnection.cs
+++ NET/API/Treehopper.Desktop/LibUsb/LibUsbConnection.cs
@@ -74,7 +74,7 @@
 						int len = 0;
 						try
 						{
-							var res = NativeMethods.BulkTransfer(deviceHandle, peripheralResponseEndpoint, buffer, buffer.Length, out len, 1000);
+							var res = NativeMethods.BulkTransfer(deviceHandle, pinReportEndpoint, buffer, buffer.Length, out len, 1000);

 							if (res == LibUsbError.Success)
 								PinEventDataReceived?.Invoke(buffer);


Added print message to try to debug test only failing on build server...

--- Naos.FluentUri.Test/UriExtensionMethodsForCallTest.cs
+++ Naos.FluentUri.Test/UriExtensionMethodsForCallTest.cs
@@ -214,6 +214,7 @@
             catch (WebException ex)
             {
                 // assert
+                Console.WriteLine(ex.Message);
                 Assert.True(ex.Message.Contains("The operation has timed out"));
             }
         }


PR feedback

PR feedback

--- Nodejs/Product/Nodejs/SharedProject/HierarchyIdMap.cs
+++ Nodejs/Product/Nodejs/SharedProject/HierarchyIdMap.cs
@@ -16,7 +16,7 @@
         /// </summary>
         public uint Add(HierarchyNode node)
         {
-            VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
+            Debug.Assert(VisualStudio.Shell.ThreadHelper.CheckAccess());

 #if DEBUG
             foreach (var reference in this.nodes.Values)
@@ -35,7 +35,9 @@
             {
                 idx = this.nodes.Count;
             }
-            this.nodes[idx] = new WeakReference<HierarchyNode>(node);
+
+            var addSuccess = this.nodes.TryAdd(idx, new WeakReference<HierarchyNode>(node));
+            Debug.Assert(addSuccess, "Failed to add a new item");

             return (uint)idx + 1;
         }
@@ -45,22 +47,18 @@
         /// </summary>
         public void Remove(HierarchyNode node)
         {
-            VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
+            Debug.Assert(VisualStudio.Shell.ThreadHelper.CheckAccess());

             Debug.Assert(node != null, "Called with null node");

             var idx = (int)node.ID - 1;

-            var removeCheck = this.nodes.TryGetValue(idx, out var weakRef);
+            var removeCheck = this.nodes.TryRemove(idx, out var weakRef);

             Debug.Assert(removeCheck, "How did we get an id, which we haven't seen before");
             Debug.Assert(weakRef != null, "Double delete is not expected.");
+            Debug.Assert(weakRef.TryGetTarget(out var found) && object.ReferenceEquals(node, found), "The node has the wrong id, or was GC-ed before.");

-            var checkReference = weakRef.TryGetTarget(out var found) && object.ReferenceEquals(node, found);
-
-            Debug.Assert(checkReference, "The node has the wrong id.");
-
-            this.nodes[idx] = null;
             this.freedIds.Push(idx);
         }

@@ -71,18 +69,19 @@
         {
             get
             {
-                VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
+                Debug.Assert(VisualStudio.Shell.ThreadHelper.CheckAccess());

-                var i = (int)itemId - 1;
-                if (0 <= i && i < this.nodes.Count)
+                var idx = (int)itemId - 1;
+                if (0 <= idx && idx < this.nodes.Count)
                 {
-                    var reference = this.nodes[i];
-                    if (reference != null && reference.TryGetTarget(out var node))
+                    if (this.nodes.TryGetValue(idx, out var reference) && reference != null && reference.TryGetTarget(out var node))
                     {
                         Debug.Assert(node != null);
                         return node;
                     }
                 }
+
+                // This is a valid return value, this gets called by VS after we deleted the item
                 return null;
             }
         }


it helps to actually call TestTables to get the new tables created

--- OpenSim/Framework/Data.SQLite/SQLiteInventoryStore.cs
+++ OpenSim/Framework/Data.SQLite/SQLiteInventoryStore.cs
@@ -38,6 +38,8 @@

             MainLog.Instance.Verbose("Inventory", "Sqlite - connecting: " + dbfile);
             SqliteConnection conn = new SqliteConnection(connectionString);
+
+            TestTables(conn);

             SqliteCommand itemsSelectCmd = new SqliteCommand(invItemsSelect, conn);
             invItemsDa = new SqliteDataAdapter(itemsSelectCmd);


don't overlap Select and Deselect, fix deselect prims account

--- OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -7681,15 +7681,23 @@
             #endregion

             ObjectSelect handlerObjectSelect = null;
-
-            for (int i = 0; i < incomingselect.ObjectData.Length; i++)
-            {
-                if (!SelectedObjects.Contains(incomingselect.ObjectData[i].ObjectLocalID))
-                    SelectedObjects.Add(incomingselect.ObjectData[i].ObjectLocalID);
-                handlerObjectSelect = OnObjectSelect;
-                if (handlerObjectSelect != null)
-                {
-                    handlerObjectSelect(incomingselect.ObjectData[i].ObjectLocalID, this);
+            uint objID;
+            lock(SelectedObjects)
+            {
+                for (int i = 0; i < incomingselect.ObjectData.Length; i++)
+                {
+                    objID = incomingselect.ObjectData[i].ObjectLocalID;
+
+                    if (!SelectedObjects.Contains(objID))
+                    {
+                        SelectedObjects.Add(objID);
+
+                        handlerObjectSelect = OnObjectSelect;
+                        if (handlerObjectSelect != null)
+                        {
+                            handlerObjectSelect(objID, this);
+                        }
+                    }
                 }
             }
             return true;
@@ -7709,15 +7717,22 @@
             #endregion

             ObjectDeselect handlerObjectDeselect = null;
-
-            for (int i = 0; i < incomingdeselect.ObjectData.Length; i++)
-            {
-                if (!SelectedObjects.Contains(incomingdeselect.ObjectData[i].ObjectLocalID))
-                    SelectedObjects.Add(incomingdeselect.ObjectData[i].ObjectLocalID);
-                handlerObjectDeselect = OnObjectDeselect;
-                if (handlerObjectDeselect != null)
-                {
-                    OnObjectDeselect(incomingdeselect.ObjectData[i].ObjectLocalID, this);
+            uint objID;
+            lock(SelectedObjects)
+            {
+                for (int i = 0; i < incomingdeselect.ObjectData.Length; i++)
+                {
+                    objID = incomingdeselect.ObjectData[i].ObjectLocalID;
+                    if (SelectedObjects.Contains(objID))
+                    {
+                        SelectedObjects.Remove(objID);
+
+                        handlerObjectDeselect = OnObjectDeselect;
+                        if (handlerObjectDeselect != null)
+                        {
+                            OnObjectDeselect(objID, this);
+                        }
+                    }
                 }
             }
             return true;


physical prims AND other changes in ODE (Teravus) -- note this is experimental!

--- OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs
+++ OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs
@@ -70,6 +70,7 @@
 using AxiomQuaternion = Axiom.Math.Quaternion;
 using BoxShape=XnaDevRu.BulletX.BoxShape;
 #endregion
+

 namespace OpenSim.Region.Physics.BulletXPlugin
 {


update build script

update build script

--- Plugins/SdkboxIAP/Source/SdkboxIAP/SdkboxIAP.Build.cs
+++ Plugins/SdkboxIAP/Source/SdkboxIAP/SdkboxIAP.Build.cs
@@ -17,10 +17,17 @@
  THE SOFTWARE.
  ****************************************************************************/

+using System.IO;
+
 namespace UnrealBuildTool.Rules
 {
 	public class SdkboxIAP : ModuleRules
 	{
+        private string ModulePath
+        {
+            get { return Path.GetDirectoryName( RulesCompiler.GetModuleFilename( this.GetType().Name ) ); }
+        }
+
 		public SdkboxIAP(TargetInfo Target)
 		{
 			PublicIncludePaths.AddRange(
@@ -29,12 +36,12 @@
 				}
 			);

-			PrivateIncludePaths.AddRange(
-				new string[] {
-					"Developer/SdkboxIAP/Private",
-					// ... add other private include paths required here ...
-				}
-			);
+			// PrivateIncludePaths.AddRange(
+			// 	new string[] {
+			// 		"Developer/SdkboxIAP/Private",
+			// 		// ... add other private include paths required here ...
+			// 	}
+			// );

 			PublicDependencyModuleNames.AddRange(
 				new string[]
@@ -69,8 +76,8 @@

 			if (Target.Platform == UnrealTargetPlatform.IOS) {

-                PublicAdditionalLibraries.Add("../../lib/iOS/PluginIAP.a");
-			    PublicAdditionalLibraries.Add("../../lib/iOS/sdkbox.a");
+                PublicAdditionalLibraries.Add(Path.Combine(ModulePath, "../../lib/iOS/PluginIAP.a"));
+			    PublicAdditionalLibraries.Add(Path.Combine(ModulePath, "../../lib/iOS/sdkbox.a"));

                 PublicFrameworks.AddRange(
                     new string[]


#171 172 protect top/bottom properties when modeling subpropertyof relations

--- RDFSharp/Semantics/OWL/Ontology/RDFOntologyChecker.cs
+++ RDFSharp/Semantics/OWL/Ontology/RDFOntologyChecker.cs
@@ -91,7 +91,10 @@
                             && !propertyModel.CheckIsPropertyDisjointWith(motherProperty, childProperty)
                                 //OWL2-DL decidability
                                 && !propertyModel.CheckIsPropertyChain(childProperty)
-                                    && !propertyModel.CheckIsPropertyChain(motherProperty));
+                                    && !propertyModel.CheckIsPropertyChain(motherProperty))
+                                        //OWL2 constraints
+                                        && !childProperty.IsTopProperty()
+                                            && !motherProperty.IsBottomProperty();
         }

         /// <summary>
@@ -103,7 +106,10 @@
         {
             return (!propertyModel.CheckIsSubPropertyOf(motherProperty, childProperty)
                         && !propertyModel.CheckIsEquivalentPropertyOf(motherProperty, childProperty)
-                            && !propertyModel.CheckIsPropertyDisjointWith(motherProperty, childProperty));
+                            && !propertyModel.CheckIsPropertyDisjointWith(motherProperty, childProperty))
+                                //OWL2 constraints
+                                && !childProperty.IsTopProperty()
+                                    && !motherProperty.IsBottomProperty(); ;
         }

         /// <summary>


Basic auth tab switching

Basic auth tab switching

--- RESTLess/Controls/RequestBuilderBasicAuthViewModel.cs
+++ RESTLess/Controls/RequestBuilderBasicAuthViewModel.cs
@@ -1,12 +1,14 @@
 using System;
 using System.Text;
 using Caliburn.Micro;
+
+using RESTLess.Models;
 using RESTLess.Models.Interface;
 using RESTLess.Models.Messages;

 namespace RESTLess.Controls
 {
-    public class RequestBuilderBasicAuthViewModel : Screen, ITabItem
+    public class RequestBuilderBasicAuthViewModel : Screen, ITabItem, IHandle<CreateRequestMessage>
     {
         #region Private members

@@ -15,6 +17,8 @@
         private string usernameTextBox;

         private string passwordTextBox;
+
+        private Request request;

         #endregion

@@ -42,6 +46,16 @@

         #endregion

+        protected override void OnDeactivate(bool close)
+        {
+            if (request != null)
+            {
+                eventAggregator.BeginPublishOnUIThread(new CreateRequestMessage { Request = request });
+            }
+
+            base.OnDeactivate(close);
+        }
+
         public RequestBuilderBasicAuthViewModel(IEventAggregator eventAggregator)
         {
             DisplayName = "Basic Auth";
@@ -56,11 +70,16 @@
             if (!string.IsNullOrEmpty(UsernameTextBox) && !string.IsNullOrEmpty(PasswordTextBox))
             {
                 var basicvalue = "Basic " + Convert.ToBase64String(Encoding.Unicode.GetBytes(UsernameTextBox + ":" + PasswordTextBox));
-                eventAggregator.PublishOnUIThread(new AddHeaderMessage
+                //eventAggregator.PublishOnUIThread(new AddHeaderMessage
+                //{
+                //    Header = "Authorization",
+                //    Value = basicvalue
+                //});
+
+                if (request != null)
                 {
-                    Header = "Authorization",
-                    Value = basicvalue
-                });
+                    request.Headers.Add("Authorization", basicvalue);
+                }
             }
         }

@@ -71,5 +90,14 @@
         }

         #endregion
+
+        #region Handlers
+
+        public void Handle(CreateRequestMessage message)
+        {
+            request = message.Request;
+        }
+
+        #endregion
     }
 }


Ignore oleaut32.dll in Acknowledgements

Ignore oleaut32.dll in Acknowledgements

* FW links oleaut32.dll to libViews.so (as discussed in FWNX-823).
* AcknowledgementsProvider crashes when Assembly.LoadFile opens
oleaut32.dll, saying System.BadImageFormatException: Invalid Image.
* This results in FW not showing any acknowledgements, as reported in
LT-20121.

--- SIL.Core/Acknowledgements/AcknowledgementsProvider.cs
+++ SIL.Core/Acknowledgements/AcknowledgementsProvider.cs
@@ -16,7 +16,7 @@
 		private static readonly string[] Exclusions =
 		{
 			"Interop.WIA.dll", "vshost.exe", "CommandLine.dll",
-			"nunit.framework.dll", ".Tests.dll", ".Tests.exe", "TestApp.dll", "TestApp.exe"
+			"nunit.framework.dll", ".Tests.dll", ".Tests.exe", "TestApp.dll", "TestApp.exe", "oleaut32.dll"

 			// Use this version to see the TestApp dependencies in SIL.Windows.Forms.TestApp.AssemblyInfo.cs
 			//"Interop.WIA.dll", "vshost.exe", "CommandLine.dll",


Fix commit dd1c5a49ec19c72cf259d6fc6da07d7549bd24ef

--- Samples/Connectors/BitStamp/BitStampMessageAdapter.cs
+++ Samples/Connectors/BitStamp/BitStampMessageAdapter.cs
@@ -143,10 +143,10 @@
 					}

 #if !IGNORE_LICENSE
-					var msg = "Crypto".ValidateLicense(component: GetType().Assembly);
+					var msg = "Crypto".ValidateLicense(component: GetType());
 					if (!msg.IsEmpty())
 					{
-						msg = nameof(BitStamp).ValidateLicense(component: GetType().Assembly);
+						msg = nameof(BitStamp).ValidateLicense(component: GetType());

 						if (!msg.IsEmpty())
 							throw new InvalidOperationException(msg);


Use SetAndNotify in example

Use SetAndNotify in example

--- Samples/Stylet.Samples.MasterDetail/ShellViewModel.cs
+++ Samples/Stylet.Samples.MasterDetail/ShellViewModel.cs
@@ -14,11 +14,7 @@
         public EmployeeModel SelectedEmployee
         {
             get { return this._selectedEmployee; }
-            set
-            {
-                this._selectedEmployee = value;
-                this.NotifyOfPropertyChange();
-            }
+            set { SetAndNotify(ref this._selectedEmployee, value) ;}
         }

         public ShellViewModel()


#13474 Additional notes for on-demand request appts

--- SnapMD.VirtualCare.ApiModels/OnDemandIntakeRequest.cs
+++ SnapMD.VirtualCare.ApiModels/OnDemandIntakeRequest.cs
@@ -36,6 +36,10 @@
         /// The concerns.
         /// </value>
         public List<IntakeConcern> Concerns { get; set; }
+        /// <summary>
+        /// Additional textual concerns information.
+        /// </summary>
+        public string AdditionalNotes { get; set; }
         /// <summary>
         /// Gets or sets the phone.
         /// </summary>


Closes #1693 - een lelijke 'savechanges' omzeilt het probleem.

--- Solution/Chiro.Gap.UpdateSvc.Service/UpdateService.cs
+++ Solution/Chiro.Gap.UpdateSvc.Service/UpdateService.cs
@@ -152,7 +152,8 @@
         /// </summary>
         /// <param name="origineel"></param>
         /// <param name="dubbel"></param>
-        /// <remarks>PERSISTEERT NIET!</remarks>
+        /// <remarks>Persisteert enkel om #1693 te voorkomen. Wat erg lelijk is. Maar
+        /// ik kan er voorlopig niet aan doen.</remarks>
         private void DubbelVerwijderen(Persoon origineel, Persoon dubbel)
         {
             // TODO: Dit kan nog wel wat unit tests gebruiken...
@@ -184,9 +185,17 @@
                     l.GroepsWerkJaar.Lid.Any(l2 => Equals(l2.GelieerdePersoon.Persoon, dubbel) && !l2.NonActief)
                 select l).ToList();

-            foreach (var tv in teVerwijderenLeden)
-            {
-                LidVerwijderen(tv);
+            if (teVerwijderenLeden.Any())
+            {
+                foreach (var tv in teVerwijderenLeden)
+                {
+                    LidVerwijderen(tv);
+                }
+                // ik wou dat ik onderstaande savechanges kon vermijden, maar als ik dat niet doe
+                // dan herkoppelt entity framework straks een lid alvorens de verwijdering uit te voeren,
+                // met een key exception tot gevolg. (zie #1693)
+
+                _ledenRepo.SaveChanges();
             }

             foreach (var dubbeleGp in dubbel.GelieerdePersoon.ToList())


Colocando verificação para valor mínimo do valor declarado.

--- Service/CorreiosService.cs
+++ Service/CorreiosService.cs
@@ -46,13 +46,19 @@
             decimal length, width, height;
             GetDimensions(getShippingOptionRequest, out width, out length, out height);

-            decimal valuePackage = getShippingOptionRequest.Items.Sum(item => item.ShoppingCartItem.Product.Price);
+

             EndpointAddress endpointAddress = new EndpointAddress(_correiosSettings.Url);

             WSCorreiosCalcPrecoPrazo.CalcPrecoPrazoWSSoap wsCorreios = new WSCorreiosCalcPrecoPrazo.CalcPrecoPrazoWSSoapClient(binding, endpointAddress);
             return wsCorreios.CalcPrecoPrazo(_correiosSettings.CompanyCode, _correiosSettings.Password, GetSelectecServices(_correiosSettings), getShippingOptionRequest.ZipPostalCodeFrom,
-                getShippingOptionRequest.ShippingAddress.ZipPostalCode, GetWheight(getShippingOptionRequest).ToString(), 1, length, height, width, 0, "N", valuePackage, "N");
+                getShippingOptionRequest.ShippingAddress.ZipPostalCode, GetWheight(getShippingOptionRequest).ToString(), 1, length, height, width, 0, "N", GetDeclaredValue(getShippingOptionRequest), "N");
+        }
+
+        private decimal GetDeclaredValue(GetShippingOptionRequest shippingOptionRequest)
+        {
+            decimal declaredValue = GetConvertedRate(shippingOptionRequest.Items.Sum(item => item.ShoppingCartItem.Product.Price));
+            return declaredValue < 18.0M ? 18.0M : declaredValue;
         }

         private int GetWheight(GetShippingOptionRequest shippingOptionRequest)
@@ -62,10 +68,7 @@
                 throw new NopException($"Correios shipping service. Could not load \"{MEASURE_WEIGHT_SYSTEM_KEYWORD}\" measure weight");

             int weight = Convert.ToInt32(Math.Ceiling(_measureService.ConvertFromPrimaryMeasureWeight(_shippingService.GetTotalWeight(shippingOptionRequest), usedMeasureWeight)));
-            if (weight < 1)
-                weight = 1;
-
-            return weight;
+            return weight < 1 ? 1 : weight;
         }

         private void GetDimensions(GetShippingOptionRequest shippingOptionRequest, out decimal width, out decimal length, out decimal height)


Logging update

Logging update

--- ShipMonitor/ShipMonitor.cs
+++ ShipMonitor/ShipMonitor.cs
@@ -356,6 +356,7 @@
             }
             else
             {
+                Logging.Debug("Current ship ID is " + localId);
                 currentShipId = ship.LocalId;
                 // Location for the current ship is always null, as it's with us
                 ship.starsystem = null;


Use last write time for files instead of created time.

--- SimpleFiles/Models/File.cs
+++ SimpleFiles/Models/File.cs
@@ -19,7 +19,7 @@
             Path = path;
             Size = fileInfo.Length;
             Type = GetMimeTypeFromFile(path);
-            Uploaded = fileInfo.CreationTimeUtc;
+            Uploaded = fileInfo.LastWriteTimeUtc;
         }

         public string Name { get; set; }


Update NetPeer.cs

Update NetPeer.cs

Fixed an issue in the `WaitMessage(int)` when `MessageReceivedEvent` is signaled, yet `ReadMessage()` returns null.

--- Lidgren.Network/NetPeer.cs
+++ Lidgren.Network/NetPeer.cs
@@ -180,15 +180,24 @@
 		/// <summary>
 		/// Read a pending message from any connection, blocking up to maxMillis if needed
 		/// </summary>
-		public NetIncomingMessage WaitMessage(int maxMillis)
-		{
-			var msg = ReadMessage();
-			if (msg != null)
-				return msg; // no need to wait; we already have a message to deliver
-			var msgEvt = MessageReceivedEvent;
-			msgEvt.WaitOne(maxMillis);
-			return ReadMessage();
-		}
+	        public NetIncomingMessage WaitMessage(int maxMillis)
+	        {
+	            NetIncomingMessage msg = ReadMessage();
+
+	            while (msg == null)
+	            {
+	                // This could return true...
+	                if (!MessageReceivedEvent.WaitOne(maxMillis))
+	                {
+	                    return null;
+	                }
+
+	                // ... while this will still returns null. That's why we need to cycle.
+	                msg = ReadMessage();
+	            }
+
+	            return msg;
+        	}

 		/// <summary>
 		/// Read a pending message from any connection, if any


fix define

fix define

--- LiteNetLib/NativeSocket.cs
+++ LiteNetLib/NativeSocket.cs
@@ -86,7 +86,7 @@
                     (address[26] << 16) +
                     (address[25] << 8) +
                     (address[24])));
-#if NETCOREAPP || NETSTANDARD2_0_OR_GREATER
+#if NETCOREAPP || NETSTANDARD2_1_OR_GREATER
                 Address = new IPAddress(new ReadOnlySpan<byte>(address, 8, 16), scope);
 #else
                 byte[] addrBuffer = new byte[16];


Fixed error introduced in earlier commit

Class collections were being reset with each recursive call to LoadStrings() instead of GetAssemblyStrings()

--- Localization/StringDump.cs
+++ Localization/StringDump.cs
@@ -83,12 +83,8 @@
             }
         }

-        private List<StringCollection> LoadStrings(IEnumerable<Type> types)
+        private void LoadStrings(IEnumerable<Type> types)
         {
-            _strings = new Dictionary<string, Dictionary<string, string>>();
-            _stringCollections = new List<StringCollection>();
-            _failedControls = new List<string>();
-
             foreach (var asmType in types)
             {
                 if (!asmType.IsSubclassOf(typeof (Control)))
@@ -172,8 +168,6 @@
                     LoadStrings(new[] {subControl.GetType()});
                 }
             }
-
-            return _stringCollections;
         }

         public void AddControlCollectionTypes(IEnumerable<Type> propertyTypes)
@@ -188,9 +182,15 @@

         public List<StringCollection> GetAssemblyStrings(string path)
         {
+            _strings = new Dictionary<string, Dictionary<string, string>>();
+            _stringCollections = new List<StringCollection>();
+            _failedControls = new List<string>();
+
             var assembly = Assembly.LoadFrom(path);

-            return LoadStrings(assembly.GetTypes());
+            LoadStrings(assembly.GetTypes());
+
+            return _stringCollections;
         }
     }
 }


Set default warp destination values when making a new warp

--- LynnaLab/Core/WarpGroup.cs
+++ LynnaLab/Core/WarpGroup.cs
@@ -228,7 +228,13 @@

             // Default warp destination should use unique data
             data.SetDestData(data.DestGroup.GetNewOrUnusedDestData());
+
+            // Default values (we may be overwriting a previously unused warp)
             data.GetReferencedDestData().Map = 0;
+            data.GetReferencedDestData().Y = 0;
+            data.GetReferencedDestData().X = 0;
+            data.GetReferencedDestData().Parameter = 0;
+            data.GetReferencedDestData().Transition = 1;

             RegenWarpSourceDataList();
             ModifiedEvent.Invoke(this, null);