Fixed a bug in AnimatedImageIndexer that would lead to the chosen frame index being too large when setting the time index, even possibly out of bounds.
Added a LINQ method to return a random element from a non-empty sequence and applied in several areas where it was used commonly.

Fixed some calls to LINQ Count() method to use a Length or Count property where possible.
Changed the semantics of interactions to also consider behavior groups when finding eligible interactions to trigger. The set of possible interactions specified by the behavior will be further restricted depending on involved targets to those behaviors in the any group or current behavior group. If this set becomes empty, the interaction is no longer eligible and searches for other matching targets or interactions will continue.
Added a method to force the otherwise lazy Size value of SpriteImage to be evaluated. The delay is small, but doing this up front helps prevent delays in the render loop, and reduces memory allocations during the loop too.
Save some memory in AnimatedImage by not storing individual frame durations if there is a common frame duration, and not storing frames index lookups if the mapping is the identity function. Also the IsAnimated property is now a calculation to save a field.
Fixed some content. Derpy's cloud animation had a couple of off pixels that were preventing them being downscaled. RDs rainboom animations also suffered from this, so these were fixed. Also cropped RDs rainboom animations to reduce size (particularly the trail) and fixed the yellow color streak in the trail that got broken at some point.
Tweak Release Tool to not offer to package output if content changes, as these changes must first be copied to the output directory.
Changed depth to be a byte in BufferToImage delegate. Store depth as a byte in WinFormSpriteInterface.ImageData to reduce size a fraction.
Added caching of image palettes to WinFormSpriteInterface.
Fix ReadExact methods to keep reading from the stream whilst data is available. Stream implementations are free to return less than the requested bytes, even if more are available.
Name the alpha blending threads in WinFormSpriteInterface.
Refactored the main loop in GifDecoder to be easier to break down.
Added Fleetfoot by Bot-chan.
The pixel stack in GifDecoder need only be MaxCodeWords long, not MaxCodeWords + 1. Added a comment about a possible speed improvement for the future.
Moved downscaling code into the Desktop Ponies assembly, and added property on interfaces for specifying a buffer preprocessing function. This means the downscaling can now be applied for the Gtk interface, and well as on the main menu, netting some nice memory savings.

The GifDecoder no longer provides a hash when decoding buffers, instead a generic hash function is provided on the non-generic GifImage which can be called where needed. This also means hashing can be delayed until after downscaling has been applied, which should reduce the hash time a bit as a result.
Changed transparent index to be a nullable byte instead of an int.
Fix a selection of images that could not be downscaled and were causing the highest potential losses in memory savings at runtime.
Rename Horse Power to Bulk Biceps.
In SmartInvoke, if the control is disposed whilst we are invoking, we should ignore the exception. This is because the Begin/End block being used to ensure the wait handle is disposed means the call isn't truly synchronous and thus the control can be disposed in the brief period before EndInvoke is called. If it was disposed, then the call is finished anyway.
Added Dr. Caballeron by Bot-chan.