<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Presentation Source</title><link>http://blogs.msdn.com/b/dwayneneed/</link><description>Digging into WPF</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Mitigating Airspace Issues In WPF Applications</title><link>http://blogs.msdn.com/b/dwayneneed/archive/2013/02/26/mitigating-airspace-issues-in-wpf-applications.aspx</link><pubDate>Tue, 26 Feb 2013 22:58:09 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10397376</guid><dc:creator>Dwayne Need [MSFT]</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dwayneneed/rsscomments.aspx?WeblogPostID=10397376</wfw:commentRss><comments>http://blogs.msdn.com/b/dwayneneed/archive/2013/02/26/mitigating-airspace-issues-in-wpf-applications.aspx#comments</comments><description>&lt;h1&gt;Introduction&lt;/h1&gt;  &lt;p&gt;WPF offers a modern approach for building Windows applications, but it builds directly on Win32 – the traditional UI infrastructure in Windows. Because Win32 was developed in an era where CPU/GPU horsepower was much more limited than it is today, it utilizes a number of optimizations for rendering. These include using the &lt;a href="http://en.wikipedia.org/wiki/Painter's_algorithm"&gt;“reverse painters algorithm”&lt;/a&gt;, tracking invalid regions for minimal updates, copying pixels around the screen to avoid unnecessary repainting, extensive clipping to avoid overdraw, limited support for alpha blending, and other such restrictions. Most of these optimizations were built for GDI, the standard rendering technology in Windows for many years. DirectX is an entirely different rendering technology, originally intended for PC gaming on Windows, but recently finding more of a presence in desktop applications (consider IE9, for example). DirectX provides access to the power of modern GPUs, and WPF embraced this technology – rather than GDI - in order to build the kind of rich composition framework we envisioned. As a consequence, WPF developed its own transformation, clipping, and composition implementation which is completely different than what Win32 implements.&lt;/p&gt;  &lt;p&gt;In Win32, a “window” is the basic unit of user-interface composition.&amp;#160; Programmatically, a window is referenced by its handle, or HWND.&amp;#160; Windows come in two major flavors: top-level windows and child windows.&amp;#160; Top-level windows are what you normally interact with, they float on the desktop and usually have the standard minimize/maximize/restore/close buttons, a title bar, etc.&amp;#160; This is the primary scenario for WPF; where it is the exclusive content of the client area of a top-level window, which is what you get when you create a WPF Window object.&amp;#160; On the other hand, child windows are a unit of composition for user-interface components within a top-level window.&amp;#160; Child windows can be incredibly useful; they can run on different threads (or even processes), they can have their own state, they can respond to special messages, etc.&amp;#160; A number of technologies build on child windows, such as ActiveX, so incorporating them into your WPF application is a common requirement.&amp;#160; To properly include a child window in a WPF element tree you must derive from HwndHost and implement the logic to construct and destroy the child window, as well as hooking up keyboard processing and handling any special messages. While WPF does not use child windows for most of its user-interface elements because we have our own element tree, there are some exceptions; the WebBrowser control is probably the most widely known example of a WPF control that is actually a hosted child window.&amp;#160; WPF also includes support for hosting Windows Forms components, which are implemented with child windows.&lt;/p&gt;  &lt;p&gt;You can even embed WPF content within a child window by directly creating an HwndSource instance. This is a powerful technique that we will be exploring more in this article, and it is often used in scenarios where WPF is used to develop a plugin for another application.&amp;#160; A note of caution: child windows have a number of exotic settings that WPF does not support well; such as tinkering with child/sibling clips or composited painting. &lt;/p&gt;  &lt;p&gt;The kind of rich user-interface presentation that is enabled by WPF is possible in large part by the way we uniformly compose the element tree.&amp;#160; Composition is what allows WPF to render elements in interesting ways: clipped against opacity masks, distorted via transforms, blended with effects like transparency, processed through pixel shaders, redirected through brushes, projecting onto 3D objects, etc.&amp;#160; But due to the limitations of how child windows were designed to work, composing them is notoriously difficult.&amp;#160; Indeed, when WPF hosts a child window, we skip the composition all together and simply position it over its layout slot and then let it do its own thing.&amp;#160; As you might imagine, without composition many problems can be observed: missing content, incorrect clipping, lack of transparency, z-order issues, etc. We refer to these issues as “airspace” problems – a term coined by &lt;a href="http://blogs.msdn.com/b/nickkramer/archive/2005/07/14/438640.aspx"&gt;Nick Kramer&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In some instances, you may also encounter strange rendering artifacts on the screen; particularly when moving a child window around.&amp;#160; These rendering artifacts are often due to conflicts between GDI and DirectX, along with some limitations or bugs in the DWM. &lt;/p&gt;  &lt;p&gt;This article discusses in some detail all of these issues, and explores some ways of mitigating them.&lt;/p&gt;  &lt;h2&gt;Airspace Problems&lt;/h2&gt;  &lt;p&gt;The most common complaint related to airspace problems we hear about concerns clipping. To be visible on screen, a WPF element tree is always associated with some window; typically a top-level window but it could also be a child window. WPF composes the element tree and renders to that window. Child windows always render on top of, and are always clipped to the bounds of, their parent window. Recall that when hosting a child window within an element tree, all WPF will do is position the child window over its layout slot. It is important to realize the WPF is not rendering the child window. The child window is rendering itself – or, more accurately, the child window is painting to a GDI device context associated with its window without coordinating through WPF. So even though an HwndHost appears to be an element that can be interleaved with other elements in the element tree, the hosted child window is actually placed on top of anything WPF renders. This results in predictable problems: the child window is not clipped by containers like scroll-viewers, and nothing can render over them, not even adorners.&lt;/p&gt;  &lt;p&gt;In fact, there is no good way for WPF to render over of a child window. Some people have experimented with relaxing the clipping behavior of Win32, but this causes much worse problems. It is better to play nicely with Win32 clipping rules, which is why WPF enforces WS_CLIPSIBLINGS and WS_CLIPCHILDREN.&lt;/p&gt;  &lt;p&gt;Since a child window is painting itself, and is not rendered by WPF, it should be clear that WPF doesn’t have access to the contents of the window. For example, if you use a VisualBrush to render an element tree, the contents of any hosted child window will simply be missing. Another example is that you can’t apply a ShaderEffect to a hosted child window because the contents of the window are not actually available to WPF for processing.&lt;/p&gt;  &lt;p&gt;Another common symptom people notice is that even simple things like transparency don’t work either. This is because the Win32 painting model doesn’t generally support transparency, so the child window that is placed on top of the WPF content, has no way to paint itself with partially transparent pixels. Using styles like WS_EX_TRANSPARENT don’t work for reasons that will be discussed later. &lt;/p&gt;  &lt;p&gt;A final nuance is that a hosted child window is created when the HwndHost element detects that it is plugged into an HwndSource. If an HwndHost element is removed from one element tree and then added to another, the hosted child window will be reparented to be within the destination HwndSource parent window. As a consequence, the z-order is reset to the bottom. In addition, while setting the ZIndex property will cause WPF panels to render their children in a different order, the HwndHost will not adjust the corresponding z-order of its hosted child window. Not that it would matter relative to the WPF content it is floating over, but the z-order gets out of sync even relative to other hosted windows.&lt;/p&gt;  &lt;h2&gt;Render Thread Considerations&lt;/h2&gt;  &lt;p&gt;WPF uses a somewhat novel technique of splitting the user-interface responsibilities between a traditional user-interface thread and a dedicated render thread.&amp;#160; The user interface thread (or threads, as there can be more than one) is responsible for processing user input and updating the element tree.&amp;#160; The render thread is responsible for rasterizing the vector graphics described by the element tree and updating the display. This design even allows the render thread to be in a separate process, even a process on on another machine.&amp;#160; This was the infrastructure that allowed WPF to support high-fidelity zooming on Vista that preserved the sharp vector graphics, and the efficient performance over remote-desktop connections that really improved the experience compared to bitmap-based remoting.&amp;#160; Unfortunately, this design required the various OS remoting components to be updated in sync with the WPF releases, and this eventually proved untenable and the features were disabled in &lt;a href="http://blogs.msdn.com/b/jgoldb/archive/2010/02/27/optimizing-visual-studio-2010-and-wpf-applications-for-remote-desktop.aspx"&gt;WPF 3.5 SP1&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Another goal of this design was to allow a degree of independence for rendering tasks so that they wouldn’t be blocked by stalls on the user-interface thread.&amp;#160; The obvious scenario is “independent animations” that the user interface could start and then forget about, and they would animate on the render thread, free from any glitches or stuttering due to processing on the user interface thread.&amp;#160; This would be ideal for transitions, which typically involve a lot of work on the user interface thread to load in new content.&amp;#160; Unfortunately, WPF never got to complete the feature work required for independent animations.&amp;#160; In fact, the only real benefit from the separate render thread is a certain amount of parallelism and that the MediaElement can render frames independent of the user interface thread once playback is started.&amp;#160; More recent incarnations of XAML platforms have better support for independent animations, such as &lt;a href="http://msdn.microsoft.com/en-us/library/gg986857(v=vs.95).aspx"&gt;Silverlight 5&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Unfortunately, this design has its own problems too.&amp;#160; The render data needs to be duplicated for both the user-interface and render threads, and updates have to be sent and received, and object lifetimes have to be carefully coordinated.&amp;#160; This increases both the CPU and memory costs associated with heavy graphics content.&amp;#160; WPF has implemented a number of optimizations for efficient partial updates, but there is still significant room for improvement.&amp;#160; Another problem is that there are some situations where the user-interface thread is expected to synchronously complete a rendering operation.&amp;#160; Two prominent examples are PrintWindow and bottom-to-top painting.&amp;#160; PrintWindow redirects the device context for the window and sends a WM_PAINT to the window, the window is expected to paint its contents to the redirected device context, and when the window proc returns from handling WM_PAINT, the window is restored to its original state.&amp;#160; PrintWindow is unreliable when used on a window with WPF content because the user-interface thread does not actually paint, so the content is missing.&amp;#160; Bottom-to-top painting is configured by specifying the WS_EX_TRANSPARENT style on a child window.&amp;#160; When this style is present, Win32 will paint the siblings beneath the window first, and then paint the window.&amp;#160; This allows the child window to selectively let that content show through, though it can be &lt;a href="http://blogs.msdn.com/b/oldnewthing/archive/2011/10/28/10230811.aspx"&gt;tricky&lt;/a&gt; to implement well. But because WPF doesn’t paint of the user-interface thread, the contents of our window are not reliably available for any sibling over us to use.&amp;#160; There is also the unusual WS_EX_COMPOSITED style that doesn’t work with WPF content either.&lt;/p&gt;  &lt;p&gt;Finally, there are times when the user-interface thread needs to copy bits from the screen and this is problematic with WPF.&amp;#160; An example is when moving a child window without the SWP_NOCOPYBITS flag (note the double negative; this means moving a window with copying bits). To avoid unnecessarily repainting a window when it moves, Win32 will copy the existing content of the window from its old location to its new location, and only repaint what is left behind. But since the old contents that GDI is trying to copy might be updated at anytime by the separate render thread via DirectX, the necessary coordination is missing, and sometimes &lt;a href="http://stackoverflow.com/questions/2589948/how-to-avoid-visual-artifacts-when-hosting-wpf-user-controls-within-a-winforms-m"&gt;garbage is copied&lt;/a&gt;. Another example is when a top-level window over a WPF window has the CS_SAVEBITS style.&amp;#160; With this style, Win32 will copy the bits before it displays the window and then put the bits back when the window is hidden.&amp;#160; Menus and message boxes are the typical windows with this style. As Raymond Chen &lt;a href="http://blogs.msdn.com/b/oldnewthing/archive/2006/04/28/586018.aspx"&gt;discusses&lt;/a&gt;, Win32 tries to detect when something makes the saved bits invalid and will fall back to just repainting the background.&amp;#160; But WPF’s separate rendering thread using DirectX can go undetected, so Win32 may &lt;a href="http://connect.microsoft.com/VisualStudio/feedback/details/657687/wpf-window-redraw-issue-after-showing-messagebox"&gt;put back the old contents&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;The splitting of user-interface processing and rendering across separate threads is unusual in Win32 applications, and doubtless the source of many subtle bugs. If integrating child windows into your WPF application is a primary concern, I strongly recommend disabling WPF hardware acceleration. By disabling hardware acceleration, WPF will render using GDI. This eliminates many issues because GDI can coordinate correctly even from multiple threads. If disabling hardware acceleration is not an option, we will review some mitigations that work around most of the rendering artifacts I know of. Unfortunately these mitigations are not always trivial.&lt;/p&gt;  &lt;h2&gt;DWM Considerations&lt;/h2&gt;  &lt;p&gt;Originally, painting operations for a window were clipped to the visible region of that window and then allowed to update the video memory of the screen directly. This was very efficient, but rules out such effects as transparency and can lead to lagging visual artifacts as updates to the screen were gated by the responsiveness of applications.&lt;/p&gt;  &lt;p&gt;Windows 2000/XP introduced &lt;a href="http://technet.microsoft.com/en-us/query/ms997507"&gt;layered windows&lt;/a&gt; via the WS_EX_LAYERED style. For layered windows, the operating system retains a bitmap of the contents of the window and can compose it on the screen as needed, without waiting for the application to respond, and can apply effects like transparency.&amp;#160; The contents of this bitmap can either be provided by the application directly, or can be filled by “redirecting” the traditional painting operations for the window. &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms633540(v=vs.85).aspx"&gt;SetLayeredWindowAttributes&lt;/a&gt; controls the appearance of windows with redirected content; but it is restricted to simple effects like constant transparency or a color key.&amp;#160; Applications that can provide their own bitmap, rather than using redirection, can use &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms633556(v=vs.85).aspx"&gt;UpdateLayeredWindow&lt;/a&gt; instead.&amp;#160; This API can accept a bitmap with a per-pixel alpha channel, so this is the API that WPF uses when you set the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.window.allowstransparency.aspx"&gt;Window.AllowsTransparency&lt;/a&gt; property to true. Note that this kind of layered window only displays the contents of the bitmap that the application explicitly provides; nothing drawn via GDI or DirectX to a device context for this window or any child windows is shown. This is the root cause of the problem where the WPF &lt;a href="http://social.msdn.microsoft.com/forums/en-US/wpf/thread/61a901d3-3273-4d8e-8e08-9441dc11010f"&gt;WebBrowser control cannot be displayed in a layered window&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;Redirected layered windows provide “output redirection”; where the operating system redirects the output of rendering operations normally destined for the screen into a bitmap; which allows it the flexibility to compose the bitmap in various ways.&amp;#160; However, if the composition is non-trivial, the operating system must also provide some kind of “input redirection” where messages and APIs related to the input coming into an application accounts for the composition effects.&amp;#160; It is also important that APIs related to location, size, and coordinate transforms also account for the composition.&amp;#160; So far, the operating system doesn’t compose layered windows in a way that would require input redirection.&lt;/p&gt;  &lt;p&gt;Windows Vista introduced the Desktop Window Manager which redirects all top-level windows (that aren’t already layered) and then composes the contents of all of the windows onto the desktop.&amp;#160; DWM is capable of composing the window contents in more interesting ways than XP was able to; the &lt;a href="http://windows.microsoft.com/en-US/windows-vista/Using-Windows-Flip-3D"&gt;Flip3D&lt;/a&gt; feature is probably the most dramatic - but note that it disables input to the windows and so it does not need to worry about input redirection. The DWM can also &lt;a href="http://blogs.msdn.com/b/greg_schechter/archive/2006/08/07/690704.aspx"&gt;scale a window&lt;/a&gt; to accommodate higher DPI settings; but this is a simple scale transform and required only modest updates to input processing coordinate transform APIs. The redirection services of the DWM remained limited to top-level windows.&lt;/p&gt;  &lt;p&gt;Difficulties are encountered on Vista if both GDI and DirectX are rendering to the same window. Vista handles this scenario in the DWM by maintaining separate surfaces for the GDI and DirectX content. This mode is called “Vista Blt”, and the DWM chooses what to which to display on the screen based on a heuristic as to which rendered last. The DWM will present from one or the other, or it may even display some content from both. Windows 7 introduced a better mode called “Device Bitmaps”, which allow both GDI and DirectX to be captured into the same backing surface. Unfortunately, Device Bitmaps are not compatible with all APIs and will be disabled if those APIs are called (the primary example is &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa969514(v=vs.85).aspx"&gt;DwmGetCompositionTimingInfo)&lt;/a&gt;, and it has its own &lt;a href="http://support.microsoft.com/kb/2578764"&gt;problems&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Windows 8 introduces Direct Composition, which extends the redirection and composition services of the DWM to &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/hh437353(v=VS.85).aspx#Window_bitmaps"&gt;child windows&lt;/a&gt;.&amp;#160; This is a major development, and finally enables &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/hh437382(v=VS.85).aspx"&gt;child windows to be layered&lt;/a&gt;.&amp;#160; Unfortunately, Direct Composition still uses the DWM as an external compositor, rather than being intimately integrated with the application.&amp;#160; In other words, you configure what you want and the DWM composes it for you.&amp;#160; This precludes certain kinds of composition effects, such as texturing a child window around a 3D model within your application or processing it through a pixel shader.&amp;#160; It is also worth mentioning that even though Direct Composition allows for composition effects that tear away from the input and coordinate APIs, there is still no support for input redirection.&lt;/p&gt;  &lt;p&gt;In the past you could disable the DWM if it didn’t support a particular scenario very well; though that was rarely a good idea.&amp;#160; However, starting with Windows 8, the DWM can no longer be disabled.&amp;#160; &lt;/p&gt;  &lt;h2&gt;Redirection&lt;/h2&gt;  &lt;p&gt;As perhaps hinted at above, the ideal solution to these problems would be to let application frameworks like WPF compose the contents of child windows themselves.&amp;#160; This kind of “internal” compositor would enable far richer composition effects.&amp;#160; However, “input redirection” must also be provided for any such composition system to be used for more than passive “transitions”.&lt;/p&gt;  &lt;p&gt;When developing WPF 4.5, we decided to take on the challenge of implementing a complete redirection solution so that WPF applications could compose the contents of child windows as naturally as any other kind of content.&amp;#160; We explored many techniques, but finally settled on using some form of API interception to shim the problematic GDI, DirectX, and Win32 APIs.&amp;#160; We settled on &lt;a href="http://www.microsoftstore.com/store/msstore/en_US/pd/productID.216531800/search.true"&gt;Detours&lt;/a&gt;, because it is a very robust and complete interception library developed here at Microsoft.&amp;#160; It is important to note that this is an in-process library, nothing we did had impact outside of the WPF process that opted into this new feature.&lt;/p&gt;  &lt;p&gt;Output redirection for DirectX was pretty straight forward.&amp;#160; DirectX is a great API in this regard because all rendering operations effectively occur off-screen until a final swap-chain (or device) “present” is invoked.&amp;#160; Our basic technique was to intercept this present call and implement it by copying the contents to another video surface; which we would then display in WPF via a &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.interop.d3dimage.aspx"&gt;D3DImage&lt;/a&gt;.&amp;#160; We did, however, have to support Direct3D 9, 10, 11, and potentially future versions too.&amp;#160; This was only tenable because the DirectX team has had the foresight to refactor modern Direct3D APIs on top of &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb205075(v=vs.85).aspx"&gt;DXGI&lt;/a&gt; and this is where the important present API exists.&amp;#160; But even with this refactoring, our code has to create intermediate surfaces and such which require a specific Direct3D version.&amp;#160; Again, the DirectX team came through with the ability of DirectX 11 to emulate the device state of previous versions.&amp;#160; The remaining complexity was in handling all possible surface formats and usage restrictions.&amp;#160; We also had a hard time handling D3DSWAPEFFECT_FLIPEX, and eventually just stripped that flag when creating swap chains.&lt;/p&gt;  &lt;p&gt;Output redirection for GDI was more involved.&amp;#160; GDI has a large API surface area, and GDI does not have the equivalent of “present”.&amp;#160; Instead, GDI rendering APIs take effect whenever the driver decides to flush the command stream.&amp;#160; We ended up intercepting 200+ GDI functions, and replaying them to an offscreen DC.&amp;#160; The vast majority of these interception shims were mechanically generated by a tool based on whether they read state, set state, or actually rendered to the device context.&amp;#160; The hardest challenge was dealing with clipping.&amp;#160; We needed to mirror some (but not all) of the clipping state from the real device context onto our redirected device context.&amp;#160; Some of the clipping state is set deep inside the operating system, so detecting when the clips were changed was beyond the reach of our interception library.&amp;#160; Other clipping state needed to be excluded, such as when a child window is partially outside the bounds of its parent, but composed such that those regions are visible.&amp;#160; In such cases we have to somehow get WM_PAINT and related messages to still be generated.&amp;#160; Clipping too much is clearly a problem, but so is clipping too little.&amp;#160; We eventually developed our own extensive clipping model for redirected windows that tried to emulate what Win32 did internally, but this was a continuous source of bugs.&lt;/p&gt;  &lt;p&gt;Input redirection posed another difficult challenge.&amp;#160; Any input device that depends on the location of elements to direct the input stream needs to take the composition effects into account.&amp;#160; WPF has already been plumbed for this, of course, since our elements have always been fully composed our input events are routed appropriately.&amp;#160; But Win32 stubbornly considers windows to be rectangles that are rigidly aligned with the horizontal and vertical axes. This restriction is baked deep into the kernel where the window tree data structures are kept.&amp;#160; The kernel takes raw input from devices like the mouse and performs an initial hit test to decide where the input should go.&amp;#160; Since our solution was in-proc only, we have to retain the restriction that our top-level window obeys these rules.&amp;#160; (Note that with layered windows, WPF can render any shape, and this allows us the apparent freedom to do things like rotate our top-level window.&amp;#160; To see this is action, rotate a ComboBox and the drop down the list.)&amp;#160; &lt;/p&gt;  &lt;p&gt;The kernel will deliver “pointer” input to the thread queue that owns the window (including child windows) it thinks is under the mouse.&amp;#160;&amp;#160; The thread that owns the queue will eventually pick up that input and perform the hit-test processing again and then deliver the appropriate messages, update state, etc. We have to play by those rules, but still find some way to appropriately handle composited child windows. We explored two basic approaches: prevent the kernel from finding any composited child windows, or make sure the kernel finds the correct composited window.&lt;/p&gt;  &lt;p&gt;Child windows can be hidden from the kernel’s input processing in a variety of ways, but specifying the WS_EX_TRANSPARENT style or disabling the window is the easiest.&amp;#160;&amp;#160; The kernel will find the top-level window and deliver the input to that queue.&amp;#160; From there we could perform our own hit testing to find the appropriate child window, and generate our own window messages to send it.&amp;#160; The hardest challenge with this technique is sending all of the correct messages, with the correct payload, in the correct order, at the correct times, and somehow updating all of the correct global state.&amp;#160; By the time you are done, you would have effectively reverse engineered a significant portion of Win32!&amp;#160; Further, since child windows can be running in other threads and processes, we would have to synchronize messages and state across these boundaries.&amp;#160; We soon decided that this would be too difficult.&lt;/p&gt;  &lt;p&gt;Our other option was to ensure that the kernel finds the child window that we know is the right one.&amp;#160; This technique is to eagerly perform a hit-test ourselves, and then move the appropriate window under the mouse position so that the kernel will find it.&amp;#160; All of the messages and state are then handled normally by Win32, including across thread and process boundaries.&amp;#160; For example, say that we hit-test the mouse position through the element tree - taking into account all composition effects - and determine that the lower-right corner of a child window is what is found.&amp;#160; We would then align the entire window hierarchy so that the appropriate child window’s lower-right corner is what the kernel will find when it hit-tests the mouse coordinate.&amp;#160; We needed to do this alignment before the kernel does, so we chose a mouse hook.&amp;#160; We started with a low-level mouse hook, because those are pretty easy and they are invoked early enough.&amp;#160; But low-level mouse hooks will block the kernel until the application responds.&amp;#160; So if your app is busy, mouse processing for everyone is stalled.&amp;#160; A common example of this for developers, is when you are debugging your application, the mouse would stop working!&amp;#160; That is unacceptable, so we changed to using a regular mouse hook.&amp;#160;&amp;#160; This kind of mouse hook is invoked before the thread further handles the mouse input that the kernel gave it.&amp;#160; It turns out this this is sufficient, because Win32 will correctly adapt to changes in the window tree between when the kernel posted the input to the queue and when the queue was processed by the thread.&amp;#160; So as long as the kernel finds some window belonging to our thread so it can deliver the input to our queue for further processing.&amp;#160; Now an unresponsive application will only stall input processing for itself.&amp;#160; There are lots of details to sort out, but this technique worked pretty well.&amp;#160; The major restriction of this technique is that we cannot support any kind of multi-touch, because a window cannot be in two places at the same time.&amp;#160; We decided to accept this limitation for composing child windows, and hope that new multi-touch controls would be written in pure WPF.&lt;/p&gt;  &lt;p&gt;Layered windows (recall that WPF uses the type of layered window where we provide the bitmap of the contents ourselves) remained a problem.&amp;#160; Even though we could redirect the output from child windows within, the OS refused to deliver paint messages to them, so they would simply never bother to paint.&amp;#160; Content like videos would work fine because they typically initiate their own painting instead of waiting for a WM_PAINT message.&amp;#160; We explored a couple of options, including sending our own fake paint messages, or hosting those child windows in their own invisible top-level system-redirected layered windows, but composing their contents in our window.&amp;#160; We will revisit this technique later in this article.&lt;/p&gt;  &lt;p&gt;With this system in place, we were able to successfully integrate child windows - without any airspace limitations - into scenarios that were simply impossible before:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A 3D cube with standard WebBrowser controls on each face, much like Chris Cavanagh’s &lt;a href="http://chriscavanagh.wordpress.com/2008/09/04/youcube/"&gt;YouCube.YouCube&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Simple transition effects, like spinning and fading &lt;/li&gt;    &lt;li&gt;Standard stuff like putting ActiveX controls within a scrollviewer and using an AdornerLayer to adorn them. &lt;/li&gt;    &lt;li&gt;A carrousel control with a mix of WinForms, WPF, ActiveX, and straight-up Win32 controls on it; with a mirror effect and much smoother animation. &lt;/li&gt;    &lt;li&gt;An MDI solution that could host legacy controls in each floating window, with transparency, scaling, and visual brushes. &lt;/li&gt;    &lt;li&gt;A RemoteDesktop ActiveX client running in a layered window. &lt;/li&gt;    &lt;li&gt;Using other video playback controls rather than our troubled MediaElement. &lt;/li&gt;    &lt;li&gt;And many, many more examples. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I hesitate to overstate this, but it was quite possibly the most exciting work I have ever done during my 15 years at Microsoft. I was very proud of the accomplishments of my engineering team in solving one of the most vexing problems that afflicted the otherwise fantastic WPF platform.&lt;/p&gt;  &lt;p&gt;You can imaging my heartbreak when, after an extensive review, we decided we could not actually ship this feature. Our concern was that we had to hack too deeply into the system, and in ways that were too difficult to explain - let alone maintain. Even though we required that developers explicitly turn on this feature for each HwndHost, we felt the kinds of problems they would encounter would be baffling to them and training our support engineers to handle the escalations would be very difficult. Even towards the end of our development, we were struggling with a long bug tail and performance concerns.&lt;/p&gt;  &lt;p&gt;This is exactly the kind of deep system integration that needs to be done by the Win32 platform team, officially sanctioned and supported. With Win8, we are beginning to see some incremental improvements in this space, as noted before in the DirectComposition API. Unfortunately, it is still not possible to build the same kind of rich composited experience we had developed.&lt;/p&gt;  &lt;p&gt;The rest of this article will focus on how external developers like you can build some of this functionality without hacking as deeply as we did. I will leverage the lessons we learned during our development to provide reasonable real-world workarounds to the most common problems. I will build an example MDI framework as a real-world application of the mitigations we will discuss. Please note that this is an example, it is not intended to be a feature-complete solution you can just drop into a project. But it should serve to showcase the problems and workarounds nicely.&lt;/p&gt;  &lt;h2&gt;Subclassing HWNDs&lt;/h2&gt;  &lt;p&gt;Before we dig into mitigating the airspace issues, we should first discuss intercepting window messages. WPF offers several hooks for intercepting the window messages received by the windows we integrate with. &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.interop.hwndsource.addhook(v=VS.100).aspx&amp;quot;"&gt;HwndSource.AddHook&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.interop.hwndhost.messagehook(v=VS.100).aspx"&gt;HwndHost.MessageHook&lt;/a&gt; are examples. However, it is sometimes the case that you need to intercept messages sent to other windows. Win32 programmers have long used a technique called &lt;a href="http://msdn.microsoft.com/en-us/library/ms633570(VS.85).aspx#subclassing_window"&gt;subclassing&lt;/a&gt; to replace the HWND’s window proc with their own, thereby allowing them access to the messages dispatched to the window. This is a very powerful technique, but surprisingly tricky to do from managed code. Since the new window procedure is usually implemented in managed code, but the function pointer is stored in unmanaged memory, you must carefully control the lifetime of the delegate to ensure that the GC doesn’t decide to collect the delegate while a reference is still being held in unmanaged memory. This requirement has led to a popular myth that claims you actually need to pin your delegate in order to also prevent the GC from relocating the delegate. It turns out that this is not actually required, as Chris Brumme - an authority on these matters - explained &lt;a href="http://blogs.msdn.com/b/cbrumme/archive/2003/05/06/51385.aspx"&gt;in his blog&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Along the same lines, managed Delegates can be marshaled to unmanaged code, where they are exposed as unmanaged function pointers. Calls on those pointers will perform an unmanaged to managed transition; a change in calling convention; entry into the correct AppDomain; and any necessary argument marshaling. Clearly the unmanaged function pointer must refer to a fixed address. It would be a disaster if the GC were relocating that! This leads many applications to create a pinning handle for the delegate. This is completely unnecessary. The unmanaged function pointer actually refers to a native code stub that we dynamically generate to perform the transition &amp;amp; marshaling. This stub exists in fixed memory outside of the GC heap.&lt;/p&gt;    &lt;p&gt;However, the application is responsible for somehow extending the lifetime of the delegate until no more calls will occur from unmanaged code. The lifetime of the native code stub is directly related to the lifetime of the delegate. Once the delegate is collected, subsequent calls via the unmanaged function pointer will crash or otherwise corrupt the process. In our recent release, we added a Customer Debug Probe which allows you to cleanly detect this - all too common - bug in your code. If you haven’t started using Customer Debug Probes during development, please take a look!&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Keeping your managed delegate alive as long as native code references the function pointer is actually hard to do in practice because things like AppDomain.Unload can tear down your managed objects quite abruptly. Even more complicated when dealing with subclassing is that someone else could subclass the window after you. Since subclassing just replaces the window procedure with another function pointer, and it is up to that implementation to call the previous one, the pattern does not support unsubclassing from the middle of a “chain” of window procs. A final wrinkle is that finalizers and events like AppDomain.Unloaded run on a separate thread, and this is almost always at odds with the thread-affinity model of Win32 (and WPF).&lt;/p&gt;  &lt;p&gt;Microsoft improved the situation in ComCtl32 v6, with the addition of ”&lt;a href="http://msdn.microsoft.com/en-us/library/bb773183(VS.85).aspx"&gt;safe subclassing&lt;/a&gt;” APIs like SetWindowSubclass. Disappointingly, these new APIs remain relatively unknown. In the code accompanying this article, I have provided a managed class called HwndHook that uses these APIs to allow you to arbitrarily hook the window proc of any window in your process and owned by your thread. This will come in handy mitigating some of the issues we will discover in our MDI solution.&lt;/p&gt;  &lt;h2&gt;Mitigating Rendering Artifacts&lt;/h2&gt;  &lt;p&gt;As mentioned above, when changing the position of a child window, Win32 has an optimization to copy the contents from the old location to the new location, and just repaint the old location. When WPF is rendering with DirectX from our separate render thread, reading the screen contents from GDI on the UI thread is unreliable. The preferred solution is to disable WPF hardware acceleration, which causes WPF to use GDI, and GDI can coordinate appropriately across threads; but that may not be desirable for other reasons.&lt;/p&gt;  &lt;p&gt;Another way to avoid the problem with this rendering artifacts is to disable the problematic optimization that copies the pixels. The key is the WM_WINDOWPOSCHANGING message. This message is sent to a window before it is actually moved or sized, giving it an opportunity to adjust the various parameters; and one of those parameters contains the flags which can be set to include the SWP_NOCOPYBITS flag.&lt;/p&gt;  &lt;p&gt;HwndHost already responds to this message in order to coerce the HWND to have the size and position determined by layout; but it does not currently set this flag. It is easy enough to do this for HwndHost instances you create, by overriding the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.interop.hwndhost.wndproc(v=VS.100).aspx"&gt;WndProc&lt;/a&gt; virtual. But what about existing HwndHost-derived classes like WebBrowser? Since HwndHost exposes the MessageHook event, it is relatively straightforward to add an extension method to add a handler to that event, look for the WM_WINDOWPOSCHANGING message, and set the SWP_NOCOPYBITS flag. You could also you use the HwndHook class introduced above to accomplish the same thing.&lt;/p&gt;  &lt;p&gt;When you include the SWP_NOCOPYBITS flag, Win32 will move the window and then send it paint messages to render the contents in the new location. Painting in Win32 is split into two passes: painting the background, and then painting everything else. The background painting can be done automatically by specifying an appropriate brush when creating the window. Window procedures can also respond to the WM_ERASEBKGND message and do their own painting. Background painting is usually done by filling the window with a solid color. The WM_PAINT message is sent after the WM_ERASEBKND and this is where most of the “look” of an window is painted. This two-pass painting scheme can cause flicker on the screen, since GDI can flush its commands to the screen at any time, as you can see the window being cleared and then repainted.&lt;/p&gt;  &lt;p&gt;This flicker is what is referred to in KB article &lt;a href="http://support.microsoft.com/kb/969728"&gt;969728&lt;/a&gt;. This article recommends clearing the SWP_NOCOPYBITS flag to avoid this flickering for Windows Forms controls. This is, of course, the opposite advice than what I am giving! It is true that clearing this flag will reduce flicker, but it will increase the risk rendering artifacts if you then move around the hosted windows.&lt;/p&gt;  &lt;p&gt;The WebBrowser control, however, is an interesting case in which we can do something about the flicker. When IE8 is installed, it seems to clear the background in response to the WM_ERASEBKND message. However, it also seems to completely paint the entire contents of the window in response to the WM_PAINT message. The flicker can be avoided by simply discarding the WM_ERASEBKND message, and letting WM_PAINT handle everything. It turns out that the window that actually does the painting is buried several levels inside the window that HwndHost is hosting, so some fiddly code is required to wait until the window tree is created and to dig down to the appropriate descendent window. Once we have found the window that does the actual painting, we can use the HwndHook class to intercept the WM_ERASEBKND message and discard it. This technique is shown in the sample code as an attached property to WebBrowser, and it is very specific to IE.&lt;/p&gt;  &lt;p&gt;Note that IE9 has changed the painting behavior such that it no longer flickers, which suggests it is not clearing the background in response to WM_ERASEBKND anymore. Note also that IE9 now supports hardware accelerated rendering, which changes things substantially. This hardware accelerated rendering is controlled by the &lt;a href="http://msdn.microsoft.com/en-us/library/ee330731(v=VS.85).aspx#gpu_rendering"&gt;FEATURE_GPU_RENDERING&lt;/a&gt; key, and is disabled by default. Unfortunately, the only way to enable this setting is by a registry setting, which can be done in the sample application.&amp;#160; I have also included an option for disabling script errors, which are really annoying when using the WebBrowser control.&lt;/p&gt;  &lt;p&gt;Remember - none of this is needed if you disable hardware acceleration for WPF.&lt;/p&gt;  &lt;p&gt;Another interesting discovery was that moving an HwndHost around can cause the old contents to remain on the screen for longer than usual. This can lead to “trails” of old content smearing around the window if you are interactively moving the child window around - say by dragging around an MDI element with a child window inside of it. The reason for this is the when the window moves, Win32 invalidates the region where the window used to be. Invalid regions are updated when the thread gets done processing most other things, but input processing is higher priority, so dragging around the window just keeps accumulating the dirty regions for later. When the WM_PAINT message is eventually sent to our window proc, we just queue a request over to the render thread to update, which is another source of latency. An effective mitigation for this is to paint some content in the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.onrender.aspx"&gt;HwndHost.OnRender&lt;/a&gt; method. Now when the element is moved, WPF knows it needs to immediately update both the old and new positions - without waiting for Win32 to send us a WM_PAINT message.&lt;/p&gt;  &lt;h2&gt;Mitigating Clipping Issues&lt;/h2&gt;  &lt;p&gt;The fact that HwndHost elements are not overlap or clip like other visuals is probably the most noticeable airspace issue people encounter. In Win32, overlap is almost always handled by clipping (there are &lt;a href="http://support.microsoft.com/kb/92526"&gt;exceptions&lt;/a&gt;, such as WS_EX_TRANSPARENT). While in WPF, overlap is almost always handled by overdraw. The Win32 way can be more efficient (though clipping itself can be expensive for complex geometries), while the WPF way allows for effects like transparency. Win32 generally enforces clipping (with a few hints from window styles) while WPF generally makes clipping something you have to explicitly request. To avoid this common class of airspace issues, we need to make WPF and Win32 play by the same overlap/clipping rules.&lt;/p&gt;  &lt;p&gt;If we had a redirection model, we could make the Win32 content play by WPF’s rules by using WPF to compose its bitmap with the rest of the scene. Without a redirection model we need to make WPF play by Win32’s rules, which is what we will investigate here.&lt;/p&gt;  &lt;p&gt;Win32 clipping occurs in the following situations:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Painting operations are clipped to the window being painted.        &lt;br /&gt;&lt;/strong&gt;This is always done for Win32 windows, but WPF actually rarely clips rendering instructions. This is because, in part, the “shape” of an element is not so easy to determine - and is often defined by what the element actually renders. So how can you know what to clip the rendering to? However, all elements have a &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.clip.aspx"&gt;Clip&lt;/a&gt; property that can be used to enforce clipping. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Painting operations are clipped to avoid children.        &lt;br /&gt;&lt;/strong&gt;This means that parent windows cannot (generally - see &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms632600(v=vs.85).aspx"&gt;WS_CLIPCHILDREN&lt;/a&gt;) paint on top of their children. This is also the case in WPF - with the exception that rendering operations for a parent are actually rendered behind the children, rather than clipped. In WPF, &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.documents.adornerlayer.aspx"&gt;AdornerLayers&lt;/a&gt; offer the functionality of rendering over children. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Painting operations are clipped to avoid overlapping siblings.        &lt;br /&gt;&lt;/strong&gt;This means that windows cannot (generally - see &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms632600(v=vs.85).aspx"&gt;WS_CLIPSIBLINGS&lt;/a&gt;) paint on top of their siblings that are higher in z-order. This is also the case in WPF - with the exception that rendering operations for an element are actually rendered behind their siblings according to their z-order. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Painting operations are clipped to the visible regions of ancestors.        &lt;br /&gt;&lt;/strong&gt;This means that child windows cannot paint outside of their parent windows. Surprisingly, this is not a restriction generally enforced by WPF. Again, this is partly because the “shape” of an element is determined by what it renders - and what it renders is often the result of a subtree of simpler elements. However, a panel can set the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.cliptobounds.aspx"&gt;ClipToBounds&lt;/a&gt; property to cause WPF to clip the children to its &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.getlayoutclip.aspx"&gt;layout&lt;/a&gt;. Drawing outside of the bounds of ancestors is an important technique for various effects, such as transitions. There are several panels that will clip their children by default; ScrollViewer is an example where clipping is very important to the core functionality of the control, and airspace problems are particularly noticeable. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The “shape” of a window is either a simple rectangle, or defined by a &lt;a href="http://msdn.microsoft.com/en-us/library/dd145102(v=VS.85).aspx"&gt;region&lt;/a&gt; explicitly set on a window. This shape is used for clipping, as well as for input hit-testing. For example, regions are how top-level windows are given rounded corners (though this region is supplied by the system, not by application code). Note that layered windows - especially the type where the application provides a bitmap with an alpha channel - are slightly different in that the OS will ignore completely transparent pixels when hit-testing. This is not true for any other type of window.&lt;/p&gt;  &lt;p&gt;One could imagine calculating enough information from WPF’s layout and rendering data to determine an appropriate shape for the visible part of a hosted child window, and setting a region to reflect that shape. However, much of what appears to be clipping in WPF due to overlapping content is actually just overdraw. WPF implements the painters algorithm (remember Win32/GDI normally implements the &lt;em&gt;&lt;strong&gt;reverse&lt;/strong&gt;&lt;/em&gt; painters algorithm), and is happy to overdraw content. This would have to be detected and accounted for to be a general solution. Another concern would be performance. WPF can animate the contents of the visual tree, and the effective shape of the visible region of the HwndHost could be constantly changing. I have not pursued this approach because it is complicated to extract the necessary information from WPF in a performant way. It might be an interesting exercise for the interested reader.&lt;/p&gt;  &lt;p&gt;Child windows are always clipped to their parents. This could be used to add clipping behavior to a container, such as a ScrollViewer, that need to clip its contents to the viewport. ScrollViewer could be configured to use a child window as the viewport, and all of the content (including other child windows) would be placed within this intermediate child window and Win32 would naturally enforce the clipping.&lt;/p&gt;  &lt;p&gt;Child windows are also clipped to their siblings, assuming the appropriate window styles are set. If we have two elements that are supposed to overlap each other, we could contain each one within their own intermediate child windows, and then the elements would clip properly against each other. Of course, the shape would be either a simple rectangle or an explicit region, but Win32 would use clipping handle the overlap. This would address the problems if there was a hosted child window within the subtrees, but it disables overdraw so effects like transparency are lost.&lt;/p&gt;  &lt;p&gt;The key to this “intermediate child window” technique is to create a WPF control that will host a child window, and that will in turn host more WPF content within the child window. The contents of such a control would be clipped to the bounds of the child window, and it would clip properly when overlapped with other such controls. WPF actually provides the two major pieces of required functionality in the HwndHost and HwndSource classes; all we basically have to do is plug them together. HwndHost hosts a child window within an element tree, and HwndSource hosts an element tree within a window. Usually HwndSource is used to host a WPF element tree within a top-level window, but it works just as well for a child window.&lt;/p&gt;  &lt;p&gt;The trick is keeping all of the normal WPF features working, so that the inner element tree appears to be fully connected to the outer element tree. We can’t hook together the visual tree, because the elements are not visually connected. However, WPF is designed to support most features between elements connected through the so-called “logical” tree. Once we hook up the logical tree, events route correctly and properties inherit as expected.&lt;/p&gt;  &lt;p&gt;Input events are initiated from their corresponding window messages, such as WM_MOUSEMOVE or WM_KEYDOWN, which Win32 dispatches to particular windows based on who the mouse is over, or who has keyboard focus. Introducing a child window will cause some of these messages to be dispatched directly to the child window, rather than going to the top-level window. The HwndSource that we are using in the child window has all of the logic to respond to these messages and drive the WPF input system, and since the disjoint element trees are logically connected, the input events are routed through the tree as expected.&lt;/p&gt;  &lt;p&gt;Keyboard input is handled differently from mouse input. In well-behaved applications, WPF reacts to keyboard events when the corresponding message is processed through the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.interop.componentdispatcher.aspx"&gt;ComponentDispatcher&lt;/a&gt;. This is supposed to happen before a message is dispatched to any particular window; but that depends on the cooperation of the application’s message pump. Top-level WPF windows will respond to keyboard events from the ComponentDispatcher when focus is anywhere within them, and convert the messages into calls through &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.interop.ikeyboardinputsink.aspx"&gt;IKeyboardInputSink&lt;/a&gt;. HwndHost has a stub implementation of this interface, but it is the responsibility of the class that derives from HwndHost to provide the full implementation. Conveniently, HwndSource also implements this interface, so once again all we have to do is plug the two together. There is one interesting wrinkle, though. The IKeyboardInputSync interface on HwndHost is called in response to keyboard events routing to it, and HwndSource will raise new keyboard events when its IKeyboardInputSync is called. The problem is that once we logically connect the inner element tree to the outer element tree, the keyboard event routes are unified. This means that the keyboard event raised by the inner HwndSource will actually route through the outer HwndHost, which will then call into IKeyboardInputSync again, creating an infinite loop. We work around this strange situation by temporarily severing the logical tree during the calls to IKeyboardInputSync.&lt;/p&gt;  &lt;p&gt;In the sample code accompanying this article, this “intermediate child window” technique is implemented in a class called HwndSourceHost.&lt;/p&gt;  &lt;h2&gt;Mitigating Z-Order Issues&lt;/h2&gt;  &lt;p&gt;Above we showed that the problem of overlapping and clipping WPF content along with Win32 content could be mitigated by introducing intermediate child windows. However, the z-order of these windows still needs to be kept in sync with WPF’s sense of z-order.&lt;/p&gt;  &lt;p&gt;When a WPF panel allows its children to overlap, the “z-order” of the the children becomes important, as this determines which children are in front of others. WPF determines the z-order of visuals it is rendering by the order they are returned from GetVisualChild. Calls to GetVisualChild are often just passed through to a controls underlying UIElementCollection, so adding a removing elements from the UIElementCollection can obviously impact the z-order of the elements.&lt;/p&gt;  &lt;p&gt;When an HwndHost is first connected to an element tree that is rooted beneath an HwndSource, the HwndHost is asked to provide the hosted window. If the HwndHost is removed from the tree, the existing window is not destroyed, it is simply reparented under a non-visible window; and when the HwndHost is added to another element tree, that window is simply reparented under the new HwndSource. When reparenting a child window, it is placed on top of the existing children, which may not correctly reflect the order of the WPF elements in the collection.&lt;/p&gt;  &lt;p&gt;WPF panels also support a more efficient mechanism of using an indirection index to map the index of an element in the collection to the appropriate visual index. The &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.panel.zindex.aspx"&gt;Panel.ZIndex&lt;/a&gt; property is the public exposure of this indirect indexing feature. Simply setting the ZIndex property will cause the panel to adjust the order it returns the children from GetVisualChild. It is probably possible to monitor changes to this property, but it seems incomplete since panels are free to adjust the order they return elements from GetVisualChild however they please.&lt;/p&gt;  &lt;p&gt;Since it does not seem practical to automatically detect changes that might influence the z-order of the elements in a panel, we rely on the application knowing when the z-order of possibly overlapping HwndSourceHost elements have changed. The application can then call the static method HwndSourceHost.UpdateZOrder passing in the panel in which the HwndSourceHost elements are being overlapped. This static method simply enumerates the children by calling GetVisualChild and corrects the Win32 z-order to match. The order of elements returned by GetVisualChild is necessarily the proper z-order, so this is correct, if a slight burden on the application.&lt;/p&gt;  &lt;h2&gt;Redirection Revisited&lt;/h2&gt;  &lt;p&gt;The mitigations presented so far have been pretty straight-forward, but still limit the fidelity of composing hosted Win32 windows within WPF element trees. In fact, we have further constrained the regular WPF portions of the tree to align with the clipping rules of Win32. Effects that require overdraw, such as transparency, are no longer possible. Effects that require rasterizing through an intermediate surface, such as a visual brush or shader effects, are also broken. To provide for those features, we need to use some form of redirection instead.&lt;/p&gt;  &lt;p&gt;In this section, we turn our attention to implementing a simple form of redirection. We will handle output redirection for GDI - and DirectX on Windows 7 and above. We will also handle input redirection for the mouse; recall that keyboard input does not require redirection at all since it is not dependent on the rendered appearance of the elements. We will not be using any form of API interception; instead we will be using the fully supported features of redirected layered windows. The penalty we will pay is primarily in performance; so make sure you investigate the impact on the performance of your scenario on your target hardware.&lt;/p&gt;  &lt;p&gt;The basic idea of this technique is to place each child window we want to redirect within a separate top-level redirected layered window that has its transparency set to 0. This is a standard top-level window with the WS_EX_LAYERED style, and the transparency has been configured with a call to SetLayeredWindowAttributes. It is important to note that this is an officially supported type of window, we are not coercing the system into some unusual state. This top-level window is transparent so that it is not visible on the screen. Since the transparency of this window could change at any time, Win32 continues to redirect and retain the contents of this top-level window even when it is completely transparent. That is the most important feature we are using - that the window is painting, and the contents are captured into a bitmap, even though the window is not visible.&lt;/p&gt;  &lt;p&gt;To display the hosted window in WPF, we copy the content from the invisible top-level window into a bitmap, and display that bitmap as a regular element in the WPF element tree. This makes complete composition possible - overdraw, clips, transforms, shader effects, etc. Even though the top-level window is invisible, Win32 allows access to the content by either calling PrintWindow or just blitting from the GDI device context for the top-level window. Ideally we would copy the contents into a bitmap only when the contents actually change. Unfortunately, I have not found a technique to reliably detect this for both GDI and DirectX content. Instead, we have to resort to updating the bitmap on a timer. As you can imagine, this results in unnecessary work and contributes to the performance penalty of this technique.&lt;/p&gt;  &lt;p&gt;Copying the contents of the bitmap works great for GDI content, but DirectX content is more problematic. In Windows XP, redirected windows did not redirect DirectX content at all. Starting with windows Vista, the DWM (when it is enabled, of course) assumes responsibility for managing the surfaces backing top-level windows. Vista uses the “VistaBlt” mode, in which GDI and DirectX are redirected into separate surfaces, and then combined together to be presented. It is not until Windows 7, with the introduction of device bitmaps, that GDI and DirectX content are redirected into the same surface. GDI methods like PrintWindow, or reading from the GDI device context directly, access the surface that contains the GDI content. Only with device bitmaps (Windows 7 and above) will our technique work for DirectX content. This is important because if you are actually hosting some WPF content within your redirected child window, WPF will render with DirectX unless you disable hardware acceleration. Of course, DirectX content can come from other technologies than WPF; such as XNA, Direct2D, Windows Media Player, etc. Also recall that DirectX surfaces presented with D3DSWAPEFFECT_FLIPEX are handled specially by the DWM; they are not actually combined into the redirected surface but rather are composed on top when the DWM presents the window. These surfaces are not accessible to our redirection technique, so you will have to either configure the component you are hosting to disable this mode or fall back to the clipping techniques discussed previously. One common component that uses D3DSWAPEFFECT_FLIPEX is the Windows Media Player, and I am not aware of any way to disable it. It is very important that you consider all of the requirements you need to satisfy carefully when using this technique, and test thoroughly to avoid being caught by surprise by some limitation.&lt;/p&gt;  &lt;p&gt;For mouse input redirection we use the basic technique of aligning the appropriate point of the child window under the mouse by repositioning the corresponding top-level layered window that contains it. We perform a hit-test in WPF to the image of the hosted window that we are rendering. The image has the same dimensions as the hosted window, and so the offset into the image gives us the appropriate position within the hosted child window that needs to be under the mouse. A little bit of simple math and coordinate transforms can calculate where the containing top-level layered window needs to be. We then move the window, z-order it to the top, and change the transparency to 1 out of 256. This tiny fraction of visibility is enough that Win32 will pass it mouse input, but transparent enough that it is not detectable to the human eye (as far as I can tell). Note that moving around a layered window, and even changing its transparency, is fairly inexpensive since the application does not need to repaint the contents.&lt;/p&gt;  &lt;p&gt;Because we are positioning the windows so that mouse input will get to the right destination, it might be appropriate to use a mouse hook. However, that complicates things if you want to host child windows from other processes (such as a WebBrowser containing an XBAP). For simplicity, and because we are already using a timer for updating the bitmap, we also use a timer to synchronize the position and transparency of the top-level layered windows. This is not perfect, but it works reasonably well. I will leave the implementation of a mouse hook to the interested reader.&lt;/p&gt;  &lt;p&gt;In the sample code accompanying this article, this technique is implemented in the RedirectedHwndHost class.&lt;/p&gt;  &lt;h2&gt;MDI Demo&lt;/h2&gt;  &lt;p&gt;Many people have noted that WPF does not support the Multiple Document Interface (MDI) style of user interfaces out-of-the-box. The reason for this is the age-old rationalization that we believed our time was better spent working on other features. At the time, MDI user interfaces were being deemphasized in favor of other options like tabbed interfaces. MSDN even has this discouraging language on its section on &lt;a href="http://msdn.microsoft.com/en-us/library/ms632591(VS.85).aspx"&gt;Multiple Document Interfaces&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Many new and intermediate users find it difficult to learn to use MDI applications. Therefore, you should consider other models for your user interface. However, you can use MDI for applications which do not easily fit into an existing model.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;We &lt;a href="http://laurenlavoie.com/avalon/70"&gt;posted&lt;/a&gt; our position on the matter way back in 2005. However, MDI continues to be a very popular user interface model in certain types of applications. Since WPF is a very powerful platform, it is fairly straightforward to roll your own MDI solution. Indeed, there are already many MDI solutions for WPF provided by third parties. Some are very simple technology walkthroughs, while others are professional-quality offerings. A quick Bing search shows some of what is available (this is not an exhaustive list!):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://wpfmdi.codeplex.com"&gt;http://wpfmdi.codeplex.comhttp://wpfmdi.codeplex.com&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://avalondock.codeplex.com"&gt;http://avalondock.codeplex.com&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeproject.com/KB/WPF/TabbedMDIInWPF.aspx"&gt;http://www.codeproject.com/KB/WPF/TabbedMDIInWPF.aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeproject.com/KB/WPF/mwiwpf.aspx"&gt;http://www.codeproject.com/KB/WPF/mwiwpf.aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/b/visualstudio/archive/2010/03/23/wpf-in-visual-studio-part-5-window-management.aspx"&gt;http://blogs.msdn.com/b/visualstudio/archive/2010/03/23/wpf-in-visual-studio-part-5-window-management.aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.actiprosoftware.com/pnet/wpf/docking/default.aspx"&gt;http://www.actiprosoftware.com/pnet/wpf/docking/default.aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.divelements.com/net/controls/sanddockwpf"&gt;http://www.divelements.com/net/controls/sanddockwpf&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.devcomponents.com/dotnetbar-wpf/wpf-dock"&gt;http://www.devcomponents.com/dotnetbar-wpf/wpf-dock&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.infragistics.com/dotnet/netadvantage/wpf/xamdockmanager.aspx"&gt;http://www.infragistics.com/dotnet/netadvantage/wpf/xamdockmanager.aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.devzest.com/WpfDocking.aspx"&gt;http://www.devzest.com/WpfDocking.aspx&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Many of these solutions suffer from the airspace issues discussed in this article, so I thought it would be instructive to show how to incorporate the various mitigation techniques in an MDI application. In the demo application on &lt;a title="http://microsoftdwayneneed.codeplex.com" href="http://microsoftdwayneneed.codeplex.com"&gt;http://microsoftdwayneneed.codeplex.com&lt;/a&gt;, I have demonstrated building a proprietary MDI-ish solution primarily because I do not want to endorse any particular third-party offering. While the guidance we are providing is designed to assist all developers in mitigating the airspace issues in WPF applications, it should be of particular use to developers of MDI solutions, and to enterprise developers who are willing to roll their own solutions.&lt;/p&gt;  &lt;p&gt;The demo application lets you interactively adjust many settings to turn on/off the various of the techniques discussed in this article.&amp;#160; However, it is fair to say that there are still some significant problems, especially in the redirection technique.&amp;#160; One particularly vexing problem is that some sequence causes menus to no longer respond to the mouse.&amp;#160; I would normally hold off publishing this whitepaper until I had resolved the issue.&amp;#160; However, I think the bulk of the content of this post will be of interest (maybe even use) to some of you, and don’t want to hold up publishing indefinitely.&amp;#160; It would be great if sufficiently interested and motivated readers would take the information I have presented and run with it.&lt;/p&gt;  &lt;p&gt;&lt;font size="5"&gt;&lt;/font&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10397376" width="1" height="1"&gt;</description></item><item><title>Fun with floating point</title><link>http://blogs.msdn.com/b/dwayneneed/archive/2010/05/07/fun-with-floating-point.aspx</link><pubDate>Fri, 07 May 2010 06:15:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10008957</guid><dc:creator>Dwayne Need [MSFT]</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dwayneneed/rsscomments.aspx?WeblogPostID=10008957</wfw:commentRss><comments>http://blogs.msdn.com/b/dwayneneed/archive/2010/05/07/fun-with-floating-point.aspx#comments</comments><description>&lt;h2&gt;Introduction&lt;/h2&gt;  &lt;p&gt;WPF uses double-precision floating point numbers (double in C#) in much of its public API and it uses single-precision floating point for much of its internal rendering.&amp;#160; So floating point math is something we deal with constantly.&amp;#160; Oddly enough, I actually knew very little about the gory details until I recently tried to write a container that had to use doubles as a key, which required working around the problems with precision in floating point math.&amp;#160; I found the whole exercise to be very interesting, and so I’ll present what I learned here.&lt;/p&gt;  &lt;h2&gt;The Problem&lt;/h2&gt;  &lt;p&gt;Consider this code:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (0.8 - 0.7 == 0.1)
{
    Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Math makes sense.&amp;quot;&lt;/span&gt;);
}&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;style type="text/css"&gt;




.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Believe it or not, the comparison will fail.&amp;#160; This bothers me, because I don’t know how to write code that will work as expected.&amp;#160; (In this simple case, the compiler will actually generate a warning the the code in unreachable.)&lt;/p&gt;

&lt;p&gt;Binging around the internet, I found a great article, which I recommend as a good read: 
  &lt;br /&gt;&lt;a title="http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm" href="http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm"&gt;http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A common approach is to never compare floating point numbers directly, but instead just check that the absolute value of the difference is small enough.&amp;#160; The rub, of course, is that it is very hard to pick the right value for “small enough”.&amp;#160; Especially since floating point numbers cover a huge range – from very, very small to very, very large.&amp;#160; For example, +/- 0.0001 is probably fine for some values, but is probably not great for very, very large numbers and is certainly a bad choice for very, very small numbers where this tolerance is actually larger than the numbers being worked with.&lt;/p&gt;

&lt;p&gt;Another idea is to scale the tolerance with the size of the floating point number.&amp;#160; Basically, this technique uses a tolerance that is a percentage of the value.&amp;#160; This seems like a reasonable idea to me, though might be difficult to implement efficiently.&lt;/p&gt;

&lt;p&gt;Another idea is to consider equal two doubles who only differ in the least-significant bits of their significands, which is the premise of the article above.&lt;/p&gt;

&lt;p&gt;No matter what you do, something to keep in mind is the requirements of the .Net Framework around equality and hashcodes.&amp;#160; You need to ensure that anything that compares as equal will generate the same hashcode.&amp;#160; Failing to do so will lead to subtle errors, such as loosing data in a hashtable.&lt;/p&gt;

&lt;p&gt;Before designing a solution, let’s dig into the details of the floating point format.&lt;/p&gt;

&lt;h2&gt;Background&lt;/h2&gt;

&lt;p&gt;First, read the &lt;a href="http://en.wikipedia.org/wiki/IEEE_754-2008" target="_blank"&gt;wikipedia article&lt;/a&gt; on the IEEE 754-2008 standard.&amp;#160; The two formats we care most about are &lt;a href="http://en.wikipedia.org/wiki/Double_precision_floating-point_format" target="_blank"&gt;binary64&lt;/a&gt; (double in C#) and &lt;a href="http://en.wikipedia.org/wiki/Single_precision_floating-point_format" target="_blank"&gt;binary32&lt;/a&gt; (float in C#).&amp;#160; Of course, the principles of the IEEE standard can be applied to other sizes, such as the fun &lt;a href="http://en.wikipedia.org/wiki/Minifloat" target="_blank"&gt;Minifloat&lt;/a&gt; formats.&lt;/p&gt;

&lt;p&gt;Today, we normally represent numbers in &lt;a href="http://en.wikipedia.org/wiki/Decimal" target="_blank"&gt;decimal&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Positional_notation" target="_blank"&gt;positional notation&lt;/a&gt;.&amp;#160; For example, the number 12.34.&amp;#160; Each digit can be understood to be multiplied by some power (indicated by the position of the digit) of the base of the number system.&amp;#160; Again, using decimal (base 10), we can expand this shorthand representation to be:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002%5B22%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[22]" border="0" alt="clip_image002[22]" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002%5B22%5D_thumb.gif" width="318" height="20" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Exponential_notation" target="_blank"&gt;Exponential notation&lt;/a&gt; can be used as a more compact representation of either very large or very small numbers.&amp;#160; For instance, the number 1,234,000,000,000 could be written a number of ways using exponential notation:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002%5B10%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[10]" border="0" alt="clip_image002[10]" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002%5B10%5D_thumb.gif" width="222" height="20" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002%5B12%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[12]" border="0" alt="clip_image002[12]" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002%5B12%5D_thumb.gif" width="228" height="20" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002%5B14%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[14]" border="0" alt="clip_image002[14]" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002%5B14%5D_thumb.gif" width="228" height="20" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002%5B16%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[16]" border="0" alt="clip_image002[16]" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002%5B16%5D_thumb.gif" width="228" height="20" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This last form is known as &lt;em&gt;normalized&lt;/em&gt; exponential notation, and there is a unique representation of every number in this notation.&amp;#160; Which helps a lot when we try to represent numbers in computers.&lt;/p&gt;

&lt;p&gt;The magnitude of the number is determined by the exponent, and the precision of the number is determined by the coefficient, otherwise know as the &lt;a href="http://en.wikipedia.org/wiki/Significand" target="_blank"&gt;significand&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Base 10 is easy, how about Base 2&lt;/h2&gt;

&lt;p&gt;Of interest to us, of course, is base 2, since that is what computers use in their normal binary representation of data.&amp;#160; The same principles apply: namely that each digit (0 or 1) is multiplied by some power (indicated by the position of the digit) of the base of the number system (2).&amp;#160; So our original example of 12.25 (base 10) can be written as:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002%5B26%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[26]" border="0" alt="clip_image002[26]" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002%5B26%5D_thumb.gif" width="559" height="20" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A fascinating observation, and one that is exploited in the binary IEEE 754 formats, is that in base 2 normalized exponential notation, the leading digit is always 1.&amp;#160; You will see how this comes in handy in the next section.&lt;/p&gt;

&lt;h2&gt;Binary Representation&lt;/h2&gt;

&lt;p&gt;As stated in the introduction, the IEEE 754-2008 standard defines a number of binary formats.&amp;#160; For now we will consider &lt;a href="http://en.wikipedia.org/wiki/Double_precision_floating-point_format" target="_blank"&gt;binary64&lt;/a&gt; (double in C#).&amp;#160; As the name suggests, this binary format is 64-bits wide, and allocates the bits as follows:&lt;/p&gt;

&lt;p&gt;Sign: 1 bit 
  &lt;br /&gt;Exponent: 11 bits 

  &lt;br /&gt;Significand: 52 bits&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;A picture always helps:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/image_thumb_1.png" width="836" height="55" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The sign bit is simple enough: 0 for positive, 1 for negative.&amp;#160; It is important to note that this is different way of encoding negative numbers than the more typical “&lt;a href="http://en.wikipedia.org/wiki/Two%27s_complement" target="_blank"&gt;two’s complement&lt;/a&gt;” technique.&amp;#160; There are, for example, both a &lt;a href="http://en.wikipedia.org/wiki/%E2%88%920" target="_blank"&gt;positive and a negative zero&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The exponent is a little more complicated.&amp;#160; Being 11 bits, it can encode values between 0 and 2047, inclusive.&amp;#160; (Note that 0 and 2047 both have special meanings, and are not used as exponents.)&amp;#160; The exponent field needs to store both positive and negative values (for very small and very large numbers).&amp;#160; Instead of storing a sign bit, the IEEE 754 standard specifies an &lt;a href="http://en.wikipedia.org/wiki/Exponent_bias" target="_blank"&gt;exponent bias&lt;/a&gt; of 1023.&amp;#160; Before storing a desired exponent value, you add 1023 and store the result.&amp;#160; When reading the exponent field, you subtract 1023 to get the originally intended value.&amp;#160; The result is that the exponent can effectively be between –1022 and 1023, inclusive. &lt;/p&gt;

&lt;p&gt;As mentioned before, both 0 and 2047 (0x7FF) are special values for the exponent field.&amp;#160; A value of 0 indicates that the number is &lt;a href="http://en.wikipedia.org/wiki/Subnormal_numbers" target="_blank"&gt;subnormal&lt;/a&gt;.&amp;#160; Previously we noted that a normalized exponential notation required that there be one non-zero digit before the decimal point, and the rest of the digits after the decimal point – and the whole thing multiplied by the base raised to some exponent.&amp;#160; We also noted that in binary, the digit before the decimal point would always be 1.&amp;#160; There are two cases that break this rule:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Zero 
    &lt;br /&gt;A pure zero obviously cannot have a non-zero digit! &lt;/li&gt;

  &lt;li&gt;Really, really small numbers 
    &lt;br /&gt;Because of the limited range of exponents, numbers even smaller than 1 * 2^-1022 cannot be represented with a leading digit of 1. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For these cases, the exponent field contains 0.&amp;#160; The actual exponent value considered to be –1022 (as if the field contained 1), and the number is assumed to have a leading 0 before the decimal, which means that technically the number is no longer in normalized exponential notation.&amp;#160; However, the representation is still unique because there is no other way to represent these really, really small numbers given the limits of the exponent field.&lt;/p&gt;

&lt;p&gt;The other special value in the exponent field is 2047 (0x7FF).&amp;#160; When the exponent field contains this value, the number is either NaN (Not A Number) or Infinity.&amp;#160; If the significand is 0, then the number is considered to be Infinity.&amp;#160; If the significant is non-zero, then the number is considered to be NaN.&amp;#160; A couple of immediate observations: Infinity can be either positive or negative, and is basically one value larger than the maximum non-infinite value (or one value less than the minimum negative non-infinite value).&amp;#160; There can be many different NaN values – all of the different possible significand values – and this is sometimes used to carry extra information.&amp;#160; The sign bit can be set of cleared for a NaN, it is simply ignored.&amp;#160; Supposedly NaNs can be either &lt;a href="http://en.wikipedia.org/wiki/NaN#Quiet_NaNs" target="_blank"&gt;quiet or signalling&lt;/a&gt;, but the actual format is unclear (at least to me).&lt;/p&gt;

&lt;h2&gt;Representable Values&lt;/h2&gt;

&lt;p&gt;Since a double is 64-bits, we know that there are a finite number of values that can be represented.&amp;#160; Counting all representable values – NaNs, Infinities, positive and negative, subnormals, normals, etc – is a simple calculation: 2&lt;sup&gt;64&lt;/sup&gt; = 18,446,744,073,709,551,616.&lt;/p&gt;

&lt;p&gt;Now that is a lot of numbers!&amp;#160; Visualizing the representation of floating point numbers (not the floating point values) as a signed 64-bit number helps reinforce the intuition behind the format:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/image_5.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/image_thumb.png" width="532" height="176" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Note that the diagram is not to scale.&amp;#160; By that I mean that the vast majority of representable numbers are in the range of Normals.&amp;#160; The Subnormals and the NaNs account for a very small fraction of the representable values.&amp;#160; I try to indicate this with the dashed line.&lt;/p&gt;

&lt;p&gt;This diagram only shows the positive half.&amp;#160; The negative half is exactly the same, with all of the numerical values being negative.&amp;#160; Note that there are both a postitive and a negative 0, and there are both a positive and a negative infinity.&amp;#160; While there are technically both positive and negative NaNs, the sign is ignored.&lt;/p&gt;

&lt;h2&gt;Distribution of floating point values&lt;/h2&gt;

&lt;p&gt;Now that we’ve seen how the representation are distributed between 0, subnormals, normals, infinity, and NaNs, let’s see how the actual floating point values are distributed.&amp;#160; A 64-bit double contains way too many values to reason about, so I will take the liberty of switching to a simplified minifloat format.&amp;#160; I’ve chosen a 6-bit format: 1 sign bit, 3 exponent bits, and 2 significand bits (but remember, we also have an implicit significand bit), and an exponent bias of 2.&amp;#160;&amp;#160; In excel I created the following table:&lt;/p&gt;

&lt;table style="width: 453pt; border-collapse: collapse" border="0" cellspacing="0" cellpadding="0" width="599"&gt;&lt;colgroup&gt;&lt;col style="width: 11pt; mso-width-source: userset; mso-width-alt: 512" width="14" /&gt;&lt;col style="width: 16pt; mso-width-source: userset; mso-width-alt: 768" width="21" /&gt;&lt;col style="width: 50pt; mso-width-source: userset; mso-width-alt: 2413" width="66" /&gt;&lt;col style="width: 56pt; mso-width-source: userset; mso-width-alt: 2742" width="75" /&gt;&lt;col style="width: 29pt; mso-width-source: userset; mso-width-alt: 1389" width="38" /&gt;&lt;col style="width: 53pt; mso-width-source: userset; mso-width-alt: 2560" width="70" /&gt;&lt;col style="width: 38pt; mso-width-source: userset; mso-width-alt: 1865" width="51" /&gt;&lt;col style="width: 37pt; mso-width-source: userset; mso-width-alt: 1792" width="49" /&gt;&lt;col style="width: 67pt; mso-width-source: userset; mso-width-alt: 3254" width="89" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;
    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; width: 11pt; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl76" height="20" width="14"&gt;
        &lt;p align="right"&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;S&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
      &lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; width: 16pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl76" width="21"&gt;
        &lt;p align="right"&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;E2&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
      &lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; width: 16pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl76" width="21"&gt;
        &lt;p align="right"&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;E1&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
      &lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; width: 16pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl76" width="21"&gt;
        &lt;p align="right"&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;E0&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
      &lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; width: 16pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl76" width="21"&gt;
        &lt;p align="right"&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;S0&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
      &lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; width: 16pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl76" width="21"&gt;
        &lt;p align="right"&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;S1&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
      &lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; width: 16pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl76" width="21"&gt;
        &lt;p align="right"&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;S2&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
      &lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; width: 16pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl76" width="21"&gt;
        &lt;p align="right"&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
      &lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; width: 50pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl76" width="66"&gt;
        &lt;p align="right"&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;Exponent&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
      &lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; width: 56pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl77" width="75"&gt;
        &lt;p align="right"&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;Significand&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
      &lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; width: 29pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl77" width="38"&gt;
        &lt;p align="right"&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
      &lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; width: 53pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl76" width="70"&gt;
        &lt;p align="right"&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;As Integer&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
      &lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; width: 38pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl78" width="51"&gt;
        &lt;p align="right"&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;&amp;#160;&amp;#160;&amp;#160; Value&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
      &lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; width: 37pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl78" width="49"&gt;
        &lt;p align="right"&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
      &lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; width: 67pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl76" width="89"&gt;
        &lt;p align="left"&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;Classification&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;5&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl68" align="right"&gt;&lt;font face="Calibri"&gt;1.75&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl68"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;-31&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl69" align="right"&gt;&lt;font face="Calibri"&gt;-56.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl69"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67"&gt;&lt;font face="Calibri"&gt;NaN&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;5&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl68" align="right"&gt;&lt;font face="Calibri"&gt;1.50&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl68"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;-30&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl69" align="right"&gt;&lt;font face="Calibri"&gt;-48.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl69"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67"&gt;&lt;font face="Calibri"&gt;NaN&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;5&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl68" align="right"&gt;&lt;font face="Calibri"&gt;1.25&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl68"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;-29&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl69" align="right"&gt;&lt;font face="Calibri"&gt;-40.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl69"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67"&gt;&lt;font face="Calibri"&gt;NaN&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70" align="right"&gt;&lt;font face="Calibri"&gt;5&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl71" align="right"&gt;&lt;font face="Calibri"&gt;1.00&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl71"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70" align="right"&gt;&lt;font face="Calibri"&gt;-28&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl72" align="right"&gt;&lt;font face="Calibri"&gt;-32.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl72"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70"&gt;&lt;font face="Calibri"&gt;-Infinity&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;4&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.75&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-27&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-28.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;4&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.50&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-26&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-24.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;4&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.25&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-25&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-20.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;4&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.00&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-24&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-16.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;3&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.75&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-23&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-14.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;3&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.50&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-22&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-12.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;3&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.25&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-21&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-10.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;3&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.00&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-20&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-8.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.75&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-19&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-7.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.50&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-18&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-6.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.25&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-17&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-5.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.00&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-16&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-4.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.75&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-15&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-3.500&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.50&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-14&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-3.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.25&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-13&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-2.500&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.00&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-12&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-2.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.75&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-11&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-1.750&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.50&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-10&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-1.500&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.25&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-9&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-1.250&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.00&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-8&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-1.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.75&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-7&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-.875&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.50&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-6&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-.750&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.25&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-5&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-.625&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.00&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-4&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;-.500&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;-Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;-1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl74" align="right"&gt;&lt;font face="Calibri"&gt;0.75&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl74"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;-3&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl75" align="right"&gt;&lt;font face="Calibri"&gt;-.375&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl75"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73"&gt;&lt;font face="Calibri"&gt;-Subnormal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;-1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl74" align="right"&gt;&lt;font face="Calibri"&gt;0.50&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl74"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;-2&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl75" align="right"&gt;&lt;font face="Calibri"&gt;-.250&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl75"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73"&gt;&lt;font face="Calibri"&gt;-Subnormal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;-1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl74" align="right"&gt;&lt;font face="Calibri"&gt;0.25&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl74"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;-1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl75" align="right"&gt;&lt;font face="Calibri"&gt;-.125&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl75"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73"&gt;&lt;font face="Calibri"&gt;-Subnormal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" height="20" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;-1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl74" align="right"&gt;&lt;font face="Calibri"&gt;0.00&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl74"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl75" align="right"&gt;&lt;font face="Calibri"&gt;.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl75"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73"&gt;&lt;font face="Calibri"&gt;-0&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;-1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl74" align="right"&gt;&lt;font face="Calibri"&gt;0.00&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl74"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl75" align="right"&gt;&lt;font face="Calibri"&gt;.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl75"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73"&gt;&lt;font face="Calibri"&gt;+0&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;-1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl74" align="right"&gt;&lt;font face="Calibri"&gt;0.25&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl74"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl75" align="right"&gt;&lt;font face="Calibri"&gt;.125&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl75"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73"&gt;&lt;font face="Calibri"&gt;+Subnormal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;-1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl74" align="right"&gt;&lt;font face="Calibri"&gt;0.50&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl74"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl75" align="right"&gt;&lt;font face="Calibri"&gt;.250&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl75"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73"&gt;&lt;font face="Calibri"&gt;+Subnormal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;-1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl74" align="right"&gt;&lt;font face="Calibri"&gt;0.75&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl74"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73" align="right"&gt;&lt;font face="Calibri"&gt;3&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl75" align="right"&gt;&lt;font face="Calibri"&gt;.375&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl75"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #8db4e3; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl73"&gt;&lt;font face="Calibri"&gt;+Subnormal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.00&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;4&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;.500&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.25&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;5&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;.625&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.50&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;6&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;.750&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;-1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.75&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;7&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;.875&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.00&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;8&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;1.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.25&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;9&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;1.250&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.50&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;10&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;1.500&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.75&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;11&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;1.750&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.00&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;12&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;2.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.25&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;13&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;2.500&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.50&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;14&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;3.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.75&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;15&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;3.500&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.00&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;16&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;4.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.25&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;17&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;5.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.50&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;18&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;6.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.75&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;19&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;7.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;3&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.00&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;20&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;8.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;3&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.25&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;21&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;10.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;3&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.50&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;22&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;12.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;3&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.75&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;23&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;14.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;4&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.00&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;24&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;16.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;4&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.25&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;25&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;20.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;4&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.50&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;26&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;24.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;4&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;1.75&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl66"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" align="right"&gt;&lt;font face="Calibri"&gt;27&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;28.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl65"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: transparent; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0"&gt;&lt;font face="Calibri"&gt;+Normal&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70" align="right"&gt;&lt;font face="Calibri"&gt;5&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl71" align="right"&gt;&lt;font face="Calibri"&gt;1.00&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl71"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70" align="right"&gt;&lt;font face="Calibri"&gt;28&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl72" align="right"&gt;&lt;font face="Calibri"&gt;32.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl72"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #92d050; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl70"&gt;&lt;font face="Calibri"&gt;+Infinity&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;5&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl68" align="right"&gt;&lt;font face="Calibri"&gt;1.25&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl68"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;29&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl69" align="right"&gt;&lt;font face="Calibri"&gt;40.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl69"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67"&gt;&lt;font face="Calibri"&gt;NaN&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;5&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl68" align="right"&gt;&lt;font face="Calibri"&gt;1.50&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl68"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;30&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl69" align="right"&gt;&lt;font face="Calibri"&gt;48.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl69"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67"&gt;&lt;font face="Calibri"&gt;NaN&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; height: 15pt; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" height="20" align="right"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;5&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl68" align="right"&gt;&lt;font face="Calibri"&gt;1.75&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl68"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67" align="right"&gt;&lt;font face="Calibri"&gt;31&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl69" align="right"&gt;&lt;font face="Calibri"&gt;56.000&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl69"&gt;&lt;font face="Calibri"&gt;&amp;#160;&lt;/font&gt;&lt;/td&gt;

      &lt;td style="border-bottom-color: #f0f0f0; background-color: #ffc000; border-top-color: #f0f0f0; border-right-color: #f0f0f0; border-left-color: #f0f0f0" class="xl67"&gt;&lt;font face="Calibri"&gt;NaN&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Which is a pretty nice, compact summary of how the IEEE floating point format works.&amp;#160; However, if we graph the results, we see that the floating point values follow an interesting curve:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/image_7.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/image_thumb_2.png" width="589" height="615" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Again, the horizontal axis is the naive interpretation of the 6 bits as an integer (though the sign is kept as a separate bit, rather than using two’s complement).&amp;#160; The vertical axis is the actual floating point value represented by those bits, according the the IEEE-ish minifloat format we chose.&lt;/p&gt;

&lt;p&gt;As you can see, the distribution is not linear. In fact, and I suppose unsurprisingly, the distribution is exponential.&lt;/p&gt;

&lt;p&gt;Actually, within each exponent band, the distribution is linear, which I have color-coded in the graph above.&amp;#160; The exponent of each band is basically the slope of the line along which the values are evenly distributed.&amp;#160; You can also see that the floating point values close to 0 are densely packed along the vertical axis, while the larger floating point values are spread out along the vertical axis.&amp;#160; The spacing along the horizontal axis is fixed.&lt;/p&gt;

&lt;p&gt;Which leads us back to our problem: presumably errors in floating point math are accumulated in the least significant bits.&amp;#160; But the least significant bits can actually represent quite a range of values, from very small to very large.&amp;#160; For instance, in our minifloat format used above, you can see that the least significant bit caused the smallest representation larger than 0 to be 0.125, while the least significant bit caused the next-to-largest value to change by 4.0 to become the largest value.&lt;/p&gt;

&lt;p&gt;And that is just in our silly minifloat format.&amp;#160; We can do the math for the full 64-bit format.&amp;#160; The least-significant bit in the 64-bit double-precision floating point format can range in value from:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002_thumb.gif" width="274" height="20" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In absolute terms, that is a mind-boggling range of possible errors. &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;Introducing the Binary64 type&lt;/h2&gt;

&lt;p&gt;For experimentation and investigation into the structure of the binary64 format (double in C#) I’ve built the Binary64 class which you can find on &lt;a href="http://microsoftdwayneneed.codeplex.com/" target="_blank"&gt;my codeplex site&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/image_9.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/image_thumb_3.png" width="379" height="353" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The Binary64 struct uses explicit field offsets to overlap a 64-bit double with a 64-bit ulong – the managed equivalent of a union.&amp;#160; The size of this struct is still 64-bits, so is as efficient to pass around as either a double or a uint.&amp;#160; &lt;/p&gt;

&lt;p&gt;A Binary64 can be constructed from either a double or a ulong, and it can be implicitly casted to and from either one.&amp;#160; There are also methods to get the next and previous representable values.&amp;#160; Knowing what we know now, it is clear that these just increment and decrement the ulong – except for handling a few cases, such as positive and negative 0.&lt;/p&gt;

&lt;p&gt;The Binary64 struct also exposes the interesting pieces of a floating point number: the sign, the exponent, and the significand.&amp;#160; I exposed these carefully through types, such as a Binary64Exponent for the exponent, and a Binary64Significand for the significand.&lt;/p&gt;

&lt;p&gt;As a side-note, I also provide extension methods via the DoubleExtensions class to add most of this functionality to the double class.&lt;/p&gt;

&lt;p&gt;And finally, I provide a Round method , which we will discuss next.&lt;/p&gt;

&lt;h2&gt;Investigating the error&lt;/h2&gt;

&lt;p&gt;What exactly was wrong with the 0.8 – 0.7 == 0.1 condition at the start of this article?&amp;#160; Using the Binary64 class, it is easy to investigate.&lt;/p&gt;

&lt;table border="0" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Literal Value&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;0.8&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Binary64 Bits&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;0x3FE999999999999A&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Sign&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;Positive&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Unbiased Exponent&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;0x3FE&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Biased Exponent&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;-1&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Significand&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;0x000999999999999A&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Implicit leading digit?&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;Yes&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Significand Numerator&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;7,205,759,403,792,794&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Significand Denominator&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;4,503,599,627,370,496&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Significand Fraction&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;1.6000000000000000888178419700125&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002%5B1%5D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002[1]" border="0" alt="clip_image002[1]" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002%5B1%5D_thumb.gif" width="593" height="20" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, the actual value is a little more than 0.8 due to the difficulty of encoding this exact value in base 2.&amp;#160; Note that the previous representable value is a little less than 0.8.&lt;/p&gt;

&lt;table border="0" cellspacing="0" cellpadding="2" width="402"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Literal Value&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;0.7&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Binary64 Bits&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;0x3FE6666666666666&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Sign&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;Positive&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Unbiased Exponent&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;0x3FE&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Biased Exponent&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;-1&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Significand&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;0x0006666666666666&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Implicit leading digit?&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;Yes&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Significand Numerator&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;6,305,039,478,318,694&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Significand Denominator&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;4,503,599,627,370,496&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Significand Fraction&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;1.3999999999999999111821580299875&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002%5B3%5D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002[3]" border="0" alt="clip_image002[3]" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002%5B3%5D_thumb.gif" width="593" height="20" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So the actual value is a little less than 0.7 due to the same difficulty of representing this exact number in base 2.&amp;#160; Note that the next representable value is a little more than 0.7.&lt;/p&gt;

&lt;p&gt;Obviously, since we are dealing with two inexact representations, there is an error accumulating in each.&amp;#160; The result of any math operation will likely still contain the error.&amp;#160; Indeed, we can see:&lt;/p&gt;

&lt;table border="0" cellspacing="0" cellpadding="2" width="402"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Literal Value&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;0.8 - 0.7&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Binary64 Bits&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;0x3fb99999999999A0&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Sign&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;Positive&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Unbiased Exponent&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;0x3FB&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Biased Exponent&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;-4&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Significand&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;0x00099999999999A0&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Implicit leading digit?&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;Yes&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Significand Numerator&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;7,205,759,403,792,800&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Significand Denominator&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;4,503,599,627,370,496&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="159"&gt;Significand Fraction&lt;/td&gt;

      &lt;td valign="top" width="241"&gt;1.6000000000000014210854715202004&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002%5B5%5D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002[5]" border="0" alt="clip_image002[5]" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/clip_image002%5B5%5D_thumb.gif" width="593" height="20" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Obviously this is not exactly right either.&amp;#160; But more interestingly, there are 6 representable binary64 values between the result of calculating 0.8-0.7 and the literal 0.1.&amp;#160; Looking at the binary64 representation for each we see that the error has accumulated in the least significant 6 bits:&lt;/p&gt;

&lt;table border="0" cellspacing="0" cellpadding="2" width="449"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td valign="top" width="255"&gt;0.8 - 0.7&lt;/td&gt;

      &lt;td valign="top" width="192"&gt;0x3FB99999999999A0
        &lt;br /&gt;

        &lt;p style="margin: 0in 0in 10pt" class="MsoNormal"&gt;&lt;font face="Calibri"&gt;11111110111001100110011001100110011001100110011001100110&lt;span style="background: yellow; mso-highlight: yellow"&gt;100000&lt;/span&gt;&lt;/font&gt;&lt;span style="mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;; mso-fareast-theme-font: minor-fareast"&gt;
            &lt;p&gt;&lt;/p&gt;
          &lt;/span&gt;&lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="255"&gt;0.1&lt;/td&gt;

      &lt;td valign="top" width="192"&gt;0x3FB999999999999A
        &lt;br /&gt;

        &lt;p style="margin: 0in 0in 10pt" class="MsoNormal"&gt;&lt;font face="Calibri"&gt;11111110111001100110011001100110011001100110011001100110&lt;span style="background: yellow; mso-highlight: yellow"&gt;011010&lt;/span&gt;&lt;/font&gt;&lt;span style="mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;; mso-fareast-theme-font: minor-fareast"&gt;
            &lt;p&gt;&lt;/p&gt;
          &lt;/span&gt;&lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;Proposal: Rounding by reducing precision&lt;/h2&gt;

&lt;p&gt;As we have seen, floating point math is imprecise, and rounding strategies are challenging due to the huge range in the magnitude of error introduced by a single change in the least significant bit.&lt;/p&gt;

&lt;p&gt;I propose performing calculations in higher precision than comparisons.&amp;#160; This is not really a novel idea.&amp;#160; Graphics cards, for instance, have been able to perform calculations in the pipeline at higher precision than available programmatically in pixel shaders.&amp;#160; When reducing precision for comparison, we would obviously discard the least-significant bits first.&lt;/p&gt;

&lt;p&gt;To implement rounding, not just truncation, I use the trick of adding half before truncating.&amp;#160; The Binary64.Round method takes as a parameter the number of insignificant digits.&amp;#160; Based on this it can easily calculate the number of representable floating-point numbers in those insignificant digits, and it adds half of them before clearing those insignificant digits.&lt;/p&gt;

&lt;p&gt;Remember – this kind of rounding is about rounding to the nearest nth-representable value, it isn’t about rounding in any absolute sense.&amp;#160; Just think of it as reducing precision.&lt;/p&gt;

&lt;p&gt;For floating point numbers, the precision of comparison is so important I think it should be part of the type signature.&amp;#160; C++ could use int values in a template signature, but sadly C# cannot do the same with generics.&amp;#160; If it could we could have a sweet template like Binary64Compare&amp;lt;42&amp;gt; to represent a 42-bit significand instead of the standard 52 (ignoring the implicit leading digit).&amp;#160; Such a type would clearly indicate that the 10 least-significant bits are considered to accumulate error and will be rounded away.&lt;/p&gt;

&lt;h2&gt;Introducing the Double42 type&lt;/h2&gt;

&lt;p&gt;Since I want to encode the precision information in the type, and given the limitations of .Net generics, the next best thing we can do is declare concrete types.&amp;#160; For my purposes, I made the assumption that 10 bits of error was a reasonable amount to tolerate.&amp;#160; You can make your own domain-specific choice and implement your own class. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/image_11.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/Funwithfloatingpoint_14F06/image_thumb_4.png" width="283" height="405" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The Double42 struct just containts a double, so it should be as efficient to pass around as a double.&amp;#160; It does not change the value of the double, but performs rounding as needed internally.&amp;#160; &lt;/p&gt;

&lt;p&gt;A Double42 can be constructed from a double , and it can be implicitly casted to and from a double. &lt;/p&gt;

&lt;p&gt;This type is only intended for comparison, in support of the principal of doing calculations in higher precision than comparisons, so it does not offer any mathematical operations.&amp;#160; It implements both IEquatable and IComparable.&lt;/p&gt;

&lt;p&gt;As mentioned in the beginning of this article, Double42 also implements GetHashcode and Equals correctly, so that any two numbers that are “equal” also produce the same hashcode.&lt;/p&gt;

&lt;p&gt;Finally, we get to write the code we wanted in the first place:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;double&lt;/span&gt; a = 0.8 - 0.7;
&lt;span class="kwrd"&gt;if&lt;/span&gt; ((Double42)a == 0.1)
{
    Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Math makes sense.&amp;quot;&lt;/span&gt;);
} &lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The supporting code for this blog entry can be found on my codeplex site: &lt;a href="http://microsoftdwayneneed.codeplex.com"&gt;http://microsoftdwayneneed.codeplex.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10008957" width="1" height="1"&gt;</description></item><item><title>Transparent Windows in WPF</title><link>http://blogs.msdn.com/b/dwayneneed/archive/2008/09/09/transparent-windows-in-wpf.aspx</link><pubDate>Tue, 09 Sep 2008 01:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8935110</guid><dc:creator>Dwayne Need [MSFT]</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dwayneneed/rsscomments.aspx?WeblogPostID=8935110</wfw:commentRss><comments>http://blogs.msdn.com/b/dwayneneed/archive/2008/09/09/transparent-windows-in-wpf.aspx#comments</comments><description>&lt;h3&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;WPF can obviously render transparent elements within its own window, but it also supports rendering the entire window with per-pixel transparency.&amp;nbsp; This feature comes with a few issues, which I'll discuss in this post.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;Layered Windows&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Windows supports transparency at the HWND level through a feature called "&lt;a href="http://msdn.microsoft.com/en-us/library/ms632599(VS.85).aspx#layered"&gt;layered windows&lt;/a&gt;".&amp;nbsp; Layered windows are represented by a bitmap, and the OS renders the bitmap whenever it needs to.&amp;nbsp; There are two layered windows modes currently supported by the OS: System-Redirected Content and Application-Provided Content.&amp;nbsp; In either case, the HWND is given the WS_EX_LAYERED extended style.&amp;nbsp; The mode is determined by which API you use to update the window.&amp;nbsp; Windows only supports the layered feature for top-level windows.&amp;nbsp; This is not a technique that can be used for child window transparency.&lt;/p&gt;
&lt;blockquote&gt;
&lt;h5&gt;&lt;strong&gt;System-Redirected Content&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;This mode is determined by using the &lt;a href="http://msdn.microsoft.com/en-us/library/ms633540(VS.85).aspx"&gt;SetLayeredWindowAttributes&lt;/a&gt; API.&amp;nbsp; The bitmap for the window is allocated by the OS, and every attempt to render into a DC for the window is redirected to render into the bitmap.&amp;nbsp; The window receives WM_PAINT messages like normal, though the frequency of these messages is reduced since the OS does not need to have the application repaint the window as it moves around.&amp;nbsp; This mode provides an excellent level of compatibility with existing code.&amp;nbsp; However, because GDI does not preserve the alpha channel in all of its APIs, this mode does not support per-pixel transparency.&amp;nbsp; Instead, the SetLayeredWindowAttributes API lets you specify a color key and an opacity for the entire window. &lt;br /&gt;&lt;br /&gt;Note: on XP there was a bug where the redirection was not respected by DirectX.&amp;nbsp; This caused DX to render directly to the screen, while the OS assumed the window content was in a bitmap.&amp;nbsp; This caused lots of visual artifacts on the screen.&amp;nbsp; This issue was fixed in Vista.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;h5&gt;&lt;strong&gt;Application-Provided Content&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;This mode is determined by using the &lt;a href="http://msdn.microsoft.com/en-us/library/ms633556(VS.85).aspx"&gt;UpdateLayeredWindow&lt;/a&gt; API.&amp;nbsp; The bitmap for the window is allocated by the application, and is passed to the OS which makes a copy.&amp;nbsp; The window does not receive WM_PAINT messages, since there is no need to ask the application to ever repaint itself.&amp;nbsp; If the application has fresh content, it is responsible for calling UpdateLayeredWindow again.&amp;nbsp; The application is completely responsible for generating its content.&amp;nbsp; This API allows the application to provide a bitmap that has a per-pixel alpha channel.&amp;nbsp; But because the OS does not redirect any GDI painting calls, this mode does not support compatibility with existing code.&amp;nbsp; &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;&lt;strong&gt;WPF Chooses Application-Provided Content&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;WPF chose to only support the Application-Provided Content mode of layered windows.&amp;nbsp; This was chosen primarily because it enabled the broadest range of features, and we didn't want to confuse our API with a mix of modes and features.&amp;nbsp; WPF deeply supports per-pixel transparency in its rendering, so it was a natural fit.&amp;nbsp; Per-pixel transparency naturally allows WPF's anti-aliased rendering to work on the layered window too, which makes the edges look much nicer.&lt;/p&gt;
&lt;p&gt;This choice has a few important ramifications:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h5&gt;&lt;strong&gt;Non-Client Area&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;The "non-client" area of a window is a general reference to the parts of the window that the windowing system normally renders for the application.&amp;nbsp; This includes the title bar, the resize edges, the menu bar, the scroll bars, etc.&amp;nbsp; These parts are drawn by the windowing system to the DC of the window.&amp;nbsp; Because layered windows that use the application-provided content mode do not redirect GDI calls, the windowing system is not able to render into the bitmap that the application is using to represent its content.&amp;nbsp; Further, on Vista, the windowing system uses a complex shader to distort the background behind the non-client area.&amp;nbsp; This distortion cannot simply be encoded into a bitmap anyway.&amp;nbsp; And because the bitmap WPF is going to provide will represent the entire window (including the non-client area), WPF would have to carefully handle the non-client messages.&amp;nbsp; WPF chose to avoid all of this complexity by expanding the client area to fill the entire window by handling the WM_NCCALCSIZE message.&amp;nbsp; No matter what your window styles may suggest, transparent WPF windows do not have any visible non-client area.&amp;nbsp; This is fine for many scenarios where the intent is to create a custom window shape, but it can be annoying for people who just want to "fade in" a normal window.&lt;/p&gt;
&lt;h5&gt;Child Windows&lt;/h5&gt;
&lt;p&gt;Again, because layered windows that use the application-provided content mode do not redirect GDI calls, child windows do not automatically get rendered into the bitmap that the application is going to use to represent its content.&amp;nbsp; You can try to get the child window to paint into a system-memory bitmap, and then blit the bitmap into WPF.&amp;nbsp; The problem with this is knowing when the child window is "dirty".&amp;nbsp; Most implementations use a timer to poll the content from the child window.&amp;nbsp; This is not efficient, but may be suitable for your needs.&amp;nbsp; A popular implementation of this technique is:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.codeplex.com/WPFWin32Renderer"&gt;http://www.codeplex.com/WPFWin32Renderer&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;&lt;strong&gt;Construction Only&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Windows will let you switch a top-level window in and out of the various layered modes.&amp;nbsp; It is a bit tedious, as you have to clear the WS_EX_LAYERED extended style, then set it again, and call the appropriate API to lock in the new mode.&amp;nbsp; For simplicity, WPF chose not to support this ability.&amp;nbsp; You have to decide at construction time whether the window will be layered or not, and the window cannot be changed afterwards.&amp;nbsp; If needed, you can accomplish something similar by creating a new window, and transferring the element tree over to the new window.&amp;nbsp; WPF enforces this constraint rigidly, rejecting any attempt to alter the underlying WS_EX_LAYERED extended window style.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;HwndSource&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;You can specify that you want to use a layered window when you construct the HwndSource by setting the UsesPerPixelOpacity property of the HwndSourceParameters that you pass to the constructor.&amp;nbsp; When this setting is specified, the HwndSource class will set the WS_EX_LAYERED extended window style, prevent the window from being themed, and configures the WPF render target to have a transparent back buffer.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Lucida Console;"&gt;HwndSourceParameters p = new HwndSourceParameters("TestWindow", 100, 100); &lt;br /&gt;p.UsesPerPixelOpacity = true; &lt;br /&gt;p.WindowStyle |= 0x10000000; // WS_VISIBLE &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Lucida Console;"&gt;Ellipse ellipse = new Ellipse(); &lt;br /&gt;ellipse.Width = 100; &lt;br /&gt;ellipse.Height = 100; &lt;br /&gt;ellipse.Fill = Brushes.Red; &lt;br /&gt;ellipse.Opacity = 0.5; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Lucida Console;"&gt;HwndSource hwndSource = new HwndSource(p); &lt;br /&gt;hwndSource.RootVisual = ellipse;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;&lt;strong&gt;Window&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Of course, most people don't use HwndSource directly, but use the Window class instead.&amp;nbsp; The Window class offers its own property called AllowsTransparency.&amp;nbsp; The Window class delays creating the underlying HwndSource until it is shown, so this property is simply passed to the HwndSource constructor at that time.&amp;nbsp; Because the underlying HwndSource expands the client area to fill the entire window, the Window class also requires that the WindowStyle property be set to None to avoid confusion.&lt;/p&gt;
&lt;p&gt;The Window class is a control with a template that renders a background, so if you often want to set the Background property to a brush with transparency.&amp;nbsp; Of course, you can also specify an opacity for the entire window by setting the Opacity property.&lt;/p&gt;
&lt;p&gt;Here is some example XAML markup for create a layered window:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Lucida Console;"&gt;&amp;lt;Window xmlns="&lt;/span&gt;&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&gt;&lt;span style="font-family: Lucida Console;"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;&lt;span style="font-family: Lucida Console;"&gt;&amp;nbsp; Width="100" &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console;"&gt;&amp;nbsp; Height="100" &lt;br /&gt;&amp;nbsp; AllowsTransparency="True" &lt;br /&gt;&amp;nbsp; WindowStyle='None' &lt;br /&gt;&amp;nbsp; Background="Transparent"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Ellipse Width="100" Height="100" Fill="Red" Opacity="0.5"/&amp;gt; &lt;br /&gt;&amp;lt;/Window&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;&lt;strong&gt;Hit Testing&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;There are two important phases to determining where to send mouse events:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h5&gt;&lt;strong&gt;Which HWND is the mouse over?&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;The operating system must respond very quickly to mouse movement.&amp;nbsp; Windows uses a dedicated Raw Input Thread (RIT), running in the kernel, to handle the signals from the mouse hardware.&amp;nbsp; The RIT quickly scans over the HWND hierarchy to see which window the mouse is over.&amp;nbsp; Because the system must be responsive, no application code is invoked.&amp;nbsp; For normal windows, the RIT checks the mouse position against the window's rectangle (or region, if one is set).&amp;nbsp; But for layered windows, the RIT looks in the bitmap that specifies the content for the window and checks the effective transparency at that location (which can be affected by the constant opacity setting, the color key setting, or the per-pixel alpha channel).&amp;nbsp; If the pixel is 100% transparent, the RIT skips the window and keeps looking.&amp;nbsp; Once a window has been located, the mouse move flag is set on the thread that owns the window.&amp;nbsp; This will cause the thread to receive a WM_MOUSEMOVE message the next time it calls GetMessage() and there are no other higher-priority messages.&lt;/p&gt;
&lt;h5&gt;&lt;strong&gt;Which UIElement is the mouse over?&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;WPF only uses an HWND as its outer container.&amp;nbsp; Within the HWND is a rich hierarchy of elements, and WPF determines which element to route the mouse events to via its own hit-testing.&amp;nbsp; In particular, WPF uses the UIElement.InputHitTest method.&amp;nbsp; WPF performs the hit-test against the geometry used for the rendering primitives.&amp;nbsp; If the geometry is filled, with any kind of brush, it is considered solid.&amp;nbsp; Even if the brush is "Transparent", WPF still considers the geometry to be solid, like a piece of glass.&amp;nbsp; On the other hand, if the geometry is not filled with a brush, it is considered hollow.&amp;nbsp; The important point here is that WPF does not check the transparency at the mouse position.&amp;nbsp; WPF hit-testing actually involves many other things - IsHitTestVisible, HitTestCore, Visibility, IsEnabled, etc - but those are best left to another article.&lt;/p&gt;
&lt;p&gt;Also note that WPF routes the mouse events through the visual tree.&amp;nbsp; So mouse events will pass through all of the parent elements on the way to, and from, the destination element.&amp;nbsp; The event route is strictly based on the hierarchy of elements - it does not reflect what ordering of visuals you might see on the screen.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When using a layered window, you need to understand both hit-testing passes.&amp;nbsp; For WPF to receive the mouse messages at all, you must have at least a partially opaque pixel under the mouse.&amp;nbsp; If that condition is met, then the normal WPF rules apply.&lt;/p&gt;
&lt;p&gt;Sometimes people want the top-level window to look transparent, but still receive mouse messages.&amp;nbsp; One technique is to use a nearly-transparent brush for your background.&amp;nbsp; This works pretty well on normal desktops, but will be noticeable on a lower color-depth; such as over terminal services.&amp;nbsp; Another technique is to grab mouse capture, but this is not a passive technique, and it will impact the user interactions with other windows.&amp;nbsp; Finally, you can install a mouse hook, but WPF does not expose any methods for this.&amp;nbsp; You would have to PInvoke to Win32 yourself.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;The performance of WPF's transparent windows is a topic of much concern.&amp;nbsp; WPF is designed to render via DirectX.&amp;nbsp; We do offer a software rendering fallback, but that is intended to provide a full-featured fallback, not for high performance.&amp;nbsp; The layered window APIs, on the other hand, take a GDI HDC parameter.&amp;nbsp; This causes different issues for XP and Vista.&lt;/p&gt;
&lt;blockquote&gt;
&lt;h5&gt;&lt;strong&gt;XP&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;DirectX does provide the &lt;a href="http://msdn.microsoft.com/en-us/library/bb205894(VS.85).aspx"&gt;IDirect3DSurface9::GetDC&lt;/a&gt; method, which can return a DC that references the DirectX surface.&amp;nbsp; Unfortunately there was a restriction in DX9c that would fail this method if it were called on a surface that contained an alpha channel.&amp;nbsp; Of course, the entire point of our layered window API is to enable per-pixel transparency.&amp;nbsp; This restriction was lifted for Vista, but our initial release forced WPF to use its software rendering fallback with rendering to a layered window on XP.&amp;nbsp; We were able to lift this restriction for XP too, which we released as a &lt;a href="http://support.microsoft.com/kb/937106/en-us"&gt;hot fix&lt;/a&gt; (KB 937106).&amp;nbsp; This hot fix was also included in XP SP3, so &lt;a href="http://windowsupdate.microsoft.com"&gt;go get it&lt;/a&gt;!&amp;nbsp; Now, on XP, we can render via DirectX and pass the results of IDirect3DSurface9::GetDC directly to UpdateLayeredWindow.&amp;nbsp; On good video drivers, the resulting copy will remain entirely on the video card, leading to excellent performance.&amp;nbsp; Some video drivers, however, may choose to perform this copy through system memory.&amp;nbsp; The performance on such systems will not be nearly as good, but should still be reasonable for many scenarios.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Experience suggests that a full-screen constantly updating layered window on good XP machine can consume as little as 3% CPU in overhead.&lt;/em&gt;&lt;/p&gt;
&lt;h5&gt;Vista&lt;/h5&gt;
&lt;p&gt;As already noted, Vista supports IDirect3DSurface9::GetDC on surfaces with an alpha channel.&amp;nbsp; The problem on Vista is that GDI is now completey emulated in software via the Canonical Display Device (CDD).&amp;nbsp; The CDD operates on system-memory buffers, so even though we could get a DC to our DX surface, blitting from it would cause the contents to be copied into system memory first.&amp;nbsp; The technique used for this copy was very inefficient.&amp;nbsp; We were able to improve this scenario by using the GetRenderTargetData API to fetch the entire contents into system memory, and then create a DC around the system memory before calling UpdateLayeredWindow.&amp;nbsp; The nature of this technique favors cards with higher GPU-&amp;gt;CPU bandwidth, such as PCIe.&amp;nbsp; We released this as a &lt;a href="http://support.microsoft.com/kb/938660"&gt;hot fix&lt;/a&gt; (KB 938660).&amp;nbsp; This hot fix is also included in Vista SP1, so &lt;a href="http://windowsupdate.microsoft.com"&gt;go get it&lt;/a&gt;!&amp;nbsp; While this technique is still slower on Vista than on XP, it should still be reasonable for many scenarios.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Experience suggests that a full-screen constantly updating layered window on good Vista machine can consume as much as 30% CPU in overhead.&amp;nbsp; For performance improvements, reduce the amount of updates to the window, in either frequency or area.&amp;nbsp; WPF is optimized around dirty rect updates, so if you change just a portion of the window, WPF will be able to update just that portion to the screen.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;&lt;strong&gt;Bugs&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;We discovered a number of issues with WPF's use of layered windows when suspending/resuming, high CPU usage while fast user switching, layered windows not updating across a terminal services connection, minimized layered windows not updating when the desktop was locked, and crashes when changing the system color depth to 8bpp or less.&amp;nbsp; All known issues in these areas have been fixed in our 3.5 SP1 release.&lt;/p&gt;
&lt;p&gt;We also discovered an issue where our call to UpdateLayeredWindow was failing with E_INVALIDARG.&amp;nbsp; The error resulted from the window no longer being in the Application-Provided Content mode.&amp;nbsp; But since WPF only allows the mode to be specified at construction time, and we only accept the Application-Provided Content mode, and we carefully reject attempts to change the relevant style bits at runtime, we were at a loss to explain how the window was changing modes.&amp;nbsp; It turns out that when you call PrintWindow, the OS will switch the window into System-Redirected Content mode so that it can grab a snap shot.&amp;nbsp; Since WPF renders on a separate thread, any use of PrintWindow on a WPF layered window was basically a race condition.&amp;nbsp; And it turns out that the IntelliPoint software was using PrintWindow to grab snapshots of all windows for its display.&amp;nbsp; IntelliPoint is widely installed, so any WPF apps that used layered windows were vulnerable to crashing.&amp;nbsp; While this is a real bug in the OS, we worked around it by simply trying to render again if the call to UpdateLayeredWindow fails in this manner.&amp;nbsp; This work-around is included in our 3.5 SP1 release.&lt;/p&gt;
&lt;p&gt;On XP we also discovered that sometimes transparent windows would show up behind other windows, instead of in front.&amp;nbsp; This was a huge problem since in WPF menus, tooltips, and combo-box drop-downs are all implemented using transparent windows.&amp;nbsp; We eventually tracked this down to a layered window bug in XP, and a &lt;a href="http://support.microsoft.com/kb/943326"&gt;hotfix&lt;/a&gt; was made available.&amp;nbsp; This fix should be included in XP SP3.&amp;nbsp; However, we continue to here some (though much fewer) reports of the problem persisting on patched XP systems.&amp;nbsp; At this point we are unable to reproduce this behavior, so we do not have a fix.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8935110" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dwayneneed/archive/tags/TransparentWindows/">TransparentWindows</category></item><item><title>Implementing A Custom BitmapSource</title><link>http://blogs.msdn.com/b/dwayneneed/archive/2008/06/20/implementing-a-custom-bitmapsource.aspx</link><pubDate>Sat, 21 Jun 2008 00:11:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8627248</guid><dc:creator>Dwayne Need [MSFT]</dc:creator><slash:comments>11</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dwayneneed/rsscomments.aspx?WeblogPostID=8627248</wfw:commentRss><comments>http://blogs.msdn.com/b/dwayneneed/archive/2008/06/20/implementing-a-custom-bitmapsource.aspx#comments</comments><description>&lt;h3&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/WritingACustomBitmapSource_D781/image_12.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="289" alt="image" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/WritingACustomBitmapSource_D781/image_thumb_5.png" width="599" border="0" /&gt;&lt;/a&gt; &lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;Windows Imaging Component&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;WPF uses the Windows Imaging Component (WIC) library to process bitmap data. WIC presents a data flow for bitmap processing that is both simple and powerful. The basic interface for bitmap processing in WIC is IWICBitmapSource. This interface provides a common way of accessing and linking together bitmaps, decoders, format converters, and other bitmap processing components. Components that implement this interface can be connected together in a graph to pull imaging data through.&amp;#160; For example:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/WritingACustomBitmapSource_D781/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="73" alt="WIC Processing Example" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/WritingACustomBitmapSource_D781/image_thumb.png" width="667" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Once the bitmap processing graph is configured, the data flow is initiated by calling CopyPixels on the component at the front of the graph.&amp;#160; CopyPixels instructs the component to produce pixels according to its algorithm - this may involve decoding a portion of a JPEG stored on disk, copying a block of memory, or even analytically computing a complex gradient. The algorithm is completely dependent on the object implementing the interface.&amp;#160; In the most common scenario, bitmap processing components are chained together, as shown in the example above.&amp;#160; In such scenarios, the components typically call CopyPixels on the component it is connected to to get the actual bitmap data, and then performs some computation on the results.&lt;/p&gt;  &lt;p&gt;WIC provides a rich set of components that provide important functionality.&amp;#160; These include encoders and decoders for popular image formats (BMP, GIF, ICO, JPEG, PNG, TIFF, HDPhoto), pixel format converters, color space transforms, clippers, scalers, etc.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;WIC in WPF&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;WPF uses WIC internally to implement various features, and it also exposes much of the WIC API through its imaging classes.&amp;#160; The base class for bitmap processing components in WPF is BitmapSource.&amp;#160; The standard WIC components are exposed as derived classes.&lt;/p&gt;  &lt;p&gt;Many of the WPF imaging classes implement the ISupportInitialize interface.&amp;#160; On instances of these classes, properties can only be set between calls the BeginInit and EndInit.&amp;#160; Setting properties after EndInit is called have no effect.&amp;#160; The non-default constructors typically call BeginInit and EndInit appropriately.&amp;#160; The default constructors do not call these methods, and you must call them yourself.&amp;#160; This allows you to set the properties yourself.&amp;#160; Neglecting to call EndInit will prevent any bitmap processing.&lt;/p&gt;  &lt;p&gt;Some of the WPF imaging classes accept URIs that identify the location of bitmap data.&amp;#160; These URIs can specify data embedded in the application, on the local disk, and on the network.&amp;#160; WPF will download the bitmap data for a network location on a background thread.&amp;#160; This helps prevent the UI thread from blocking while downloading.&amp;#160; The imaging classes that accept URIs also implement the IUriContext interface.&amp;#160; This interface allows a BaseUri to be specified in order to resolve any relative URIs.&amp;#160; In many cases WPF will set the BaseUri automatically.&lt;/p&gt;  &lt;p&gt;WPF implements an aggressive caching policy to avoid duplicate work.&amp;#160; In addition to the standard WinINet cache, both bitmaps and decoders are cached, allowing multiple references to the same Uri to share the same bitmap instance and avoid redundant decoding.&amp;#160; There are flags that can be used to bypass the caches.&lt;/p&gt;  &lt;p&gt;The WPF rasterizer only natively renders bitmaps in Bgr32 and PBgra32 formats.&amp;#160; Even though the WPF imaging classes can process bitmap data with different formats, they are converted to either Bgra32 or PBgra32 before being rendered.&amp;#160; There are certainly scenarios that could benefit from other pixel formats, either for less memory usage (such as black/white formats) or for higher color fidelity (such as 16-bit grayscale); however WPF does not yet provide rendering support for them.&lt;/p&gt;  &lt;p&gt;Finally, most of the WPF imaging classes are sealed.&amp;#160; This design choice was made to ensure a higher quality product, but it interferes with many legitimate scenarios.&amp;#160; We will discuss this more later.&lt;/p&gt;  &lt;p&gt;Let's take a moment to review the imaging classes in WPF:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/WritingACustomBitmapSource_D781/ClassDiagram2_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="1188" alt="ClassDiagram2" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/WritingACustomBitmapSource_D781/ClassDiagram2_thumb.png" width="427" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.aspx"&gt;&lt;strong&gt;BitmapSource&lt;/strong&gt;&lt;/a&gt;     &lt;br /&gt;This is the abstract base class of the WPF bitmap classes.&amp;#160; BitmapSource class does not directly implement the IWICBitmapSource interface.&amp;#160; Instead, it is a class designed to wrap an IWICBitmapSource implementation.&amp;#160; The BitmapSource class has virtual members that provide the same basic functionality as IWICBitmapSource: &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.copypixels.aspx"&gt;CopyPixels&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.format.aspx"&gt;Format&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.pixelwidth.aspx"&gt;PixelWidth&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.pixelheight.aspx"&gt;PixelHeight&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.dpix.aspx"&gt;DpiX&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.dpiy.aspx"&gt;DpiY&lt;/a&gt;, and &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.palette.aspx"&gt;Pallete&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapframe.aspx"&gt;&lt;strong&gt;BitmapFrame&lt;/strong&gt;&lt;/a&gt;     &lt;br /&gt;Represents image data returned by a decoder and accepted by encoders.&amp;#160; You can call one of the static &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapframe.create.aspx"&gt;Create&lt;/a&gt; methods to create an instance from a URI, a Stream, or an existing BitmapSource.&amp;#160; Creating a BitmapFrame will automatically assemble the imaging components needed to decode the data.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.formatconvertedbitmap.aspx"&gt;&lt;strong&gt;FormatConvertedBitmap&lt;/strong&gt;&lt;/a&gt;     &lt;br /&gt;This class wraps the standard WIC pixel format converter (&lt;a href="http://msdn.microsoft.com/en-us/library/ms736026(VS.85).aspx"&gt;IWICImagingFactory::CreateFormatConverter&lt;/a&gt;).&amp;#160; This component provides the means of converting from one pixel format to another, handling dithering and halftoning to indexed formats, palette translation and alpha thresholding. The &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.formatconvertedbitmap.source.aspx"&gt;Source&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.formatconvertedbitmap.destinationformat.aspx"&gt;DestinationFormat&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.formatconvertedbitmap.destinationpalette.aspx"&gt;DestinationPalette&lt;/a&gt;, and &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.formatconvertedbitmap.alphathreshold.aspx"&gt;AlphaThreshold&lt;/a&gt; properties are used to initialize the underlying component via &lt;a href="http://msdn.microsoft.com/en-us/library/ms736046(VS.85).aspx"&gt;IWICFormatConverter::Initialize&lt;/a&gt;.&amp;#160; The dither type is hard-coded to be &lt;a href="http://msdn.microsoft.com/en-us/library/ms737017(VS.85).aspx"&gt;WICBitmapDitherTypeErrorDiffusion&lt;/a&gt;.&amp;#160; The palette translation type is hard-coded to be &lt;a href="http://msdn.microsoft.com/en-us/library/ms737037(VS.85).aspx"&gt;WICBitmapPaletteTypeMedianCut&lt;/a&gt;. The &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.isupportinitialize.aspx"&gt;ISupportInitialize&lt;/a&gt; interface is used to snap the values of the properties when initialization is complete.&amp;#160; Further changes to the properties are ignored.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.colorconvertedbitmap.aspx"&gt;&lt;strong&gt;ColorConvertedBitmap&lt;/strong&gt;&lt;/a&gt;     &lt;br /&gt;This class wraps the standard WIC color transformer (&lt;a href="http://msdn.microsoft.com/en-us/library/ms736010(VS.85).aspx"&gt;IWICImagingFactory::CreateColorTransformer&lt;/a&gt;).&amp;#160; This component transforms the color space of the input bitmap source.&amp;#160; The &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.colorconvertedbitmap.source.aspx"&gt;Source&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.colorconvertedbitmap.sourcecolorcontext.aspx"&gt;SourceColorContext&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.colorconvertedbitmap.destinationcolorcontext.aspx"&gt;DestinationColorContext&lt;/a&gt;, and &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.colorconvertedbitmap.destinationformat.aspx"&gt;DestinationFormat&lt;/a&gt; properties are used to initialize the underlying component via &lt;a href="http://msdn.microsoft.com/en-us/library/ms736157(VS.85).aspx"&gt;IWICColorTransform::Initialize&lt;/a&gt;. The &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.isupportinitialize.aspx"&gt;ISupportInitialize&lt;/a&gt; interface is used to snap the values of the properties when initialization is complete.&amp;#160; Further changes to the properties are ignored.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.transformedbitmap.aspx"&gt;&lt;strong&gt;TransformedBitmap&lt;/strong&gt;&lt;/a&gt;     &lt;br /&gt;This class wraps both the standard WIC scaler (&lt;a href="http://msdn.microsoft.com/en-us/library/ms735584(VS.85).aspx"&gt;IWICImagingFactory::CreateBitmapScaler&lt;/a&gt;) and flip-rotator (&lt;a href="http://msdn.microsoft.com/en-us/library/ms735563(VS.85).aspx"&gt;IWICImagingFactory::CreateBitmapFlipRotator&lt;/a&gt;). The scaler component produces a resized version of the input bitmap source using a resampling or filtering algorithm. The interpolation mode is hard-coded to be &lt;a href="http://msdn.microsoft.com/en-us/library/ms737026(VS.85).aspx"&gt;WICBitmapInterpolationModeFant&lt;/a&gt;.&amp;#160; The flip-rotator component produces a flipped (horizontal or vertical) and/or rotated (by 90 degree increments) version of the input bitmap source. Rotations are done before the flip. The &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.transformedbitmap.transform.aspx"&gt;Transform&lt;/a&gt; property is used to specify both the scale and the rotation to apply to the bitmap source.&amp;#160; Along with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.transformedbitmap.source.aspx"&gt;Source&lt;/a&gt; property, this data is used to initialize to the underlying components via &lt;a href="http://msdn.microsoft.com/en-us/library/ms736469(VS.85).aspx"&gt;IWICBitmapScaler::Initialize&lt;/a&gt; and/or &lt;a href="http://msdn.microsoft.com/en-us/library/ms736800(VS.85).aspx"&gt;IWICBitmapFlipRotator::Initialize&lt;/a&gt;.&amp;#160; The &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.isupportinitialize.aspx"&gt;ISupportInitialize&lt;/a&gt; interface is used to snap the values of the properties when initialization is complete.&amp;#160; Further changes to the properties are ignored.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.croppedbitmap.aspx"&gt;&lt;strong&gt;CroppedBitmap&lt;/strong&gt;&lt;/a&gt;     &lt;br /&gt;This class wraps a standard WIC clipper (&lt;a href="http://msdn.microsoft.com/en-us/library/ms735549(VS.85).aspx"&gt;IWICImagingFactory::CreateBitmapClipper&lt;/a&gt;). This component produces a clipped version of the input bitmap source for a specified rectangular region of interest.&amp;#160; The &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.croppedbitmap.source.aspx"&gt;Source&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.croppedbitmap.sourcerect.aspx"&gt;SourceRect&lt;/a&gt; properties are used to initialize the underlying component via &lt;a href="http://msdn.microsoft.com/en-us/library/ms736929(VS.85).aspx"&gt;IWICBitmapClipper::Initialize&lt;/a&gt;. The &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.isupportinitialize.aspx"&gt;ISupportInitialize&lt;/a&gt; interface is used to snap the values of the properties when initialization is complete.&amp;#160; Further changes to the properties are ignored.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.cachedbitmap.aspx"&gt;&lt;strong&gt;CachedBitmap&lt;/strong&gt;&lt;/a&gt;     &lt;br /&gt;This class represents bitmap data that is cached in system memory.&amp;#160; You can call one of the static &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.create.aspx"&gt;BitmapSource.Create&lt;/a&gt; methods to create an instance from a memory buffer (&lt;a href="http://msdn.microsoft.com/en-us/library/ms735572(VS.85).aspx"&gt;IWICImagingFactory::CreateBitmapFromMemory&lt;/a&gt;).&amp;#160; The contents of the memory are copied into the CachedBitmap instance, and changes to the memory do not change the contents of the cached bitmap.&amp;#160; You can also call the CachedBitmap &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.cachedbitmap.cachedbitmap.aspx"&gt;constructor&lt;/a&gt; and pass an bitmap source to cache (&lt;a href="http://msdn.microsoft.com/en-us/library/ms735575(VS.85).aspx"&gt;IWICImagingFactory::CreateBitmapFromSource&lt;/a&gt;).&amp;#160; The contents of the bitmap source are copied into the CachedBitmap instance, and changes to the bitmap source do not change the contents of the cached bitmap.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.aspx"&gt;&lt;strong&gt;BitmapImage&lt;/strong&gt;&lt;/a&gt;     &lt;br /&gt;This class is the main WPF imaging class for downloading and decoding a bitmap.&amp;#160; The &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.isupportinitialize.aspx"&gt;ISupportInitialize&lt;/a&gt; interface is used to snap the values of the properties when initialization is complete.&amp;#160; Further changes to the properties are ignored. This class is very complex, and offers the following functionality:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Loading from a stream&lt;/strong&gt;       &lt;br /&gt;To load bitmap data from a stream, set the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.streamsource.aspx"&gt;StreamSource&lt;/a&gt; property. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Loading from a Uri&lt;/strong&gt;       &lt;br /&gt;To load bitmap data from a Uri, set the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.urisource.aspx"&gt;UriSource&lt;/a&gt; property.&amp;#160; BitmapImage implements &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.markup.iuricontext.aspx"&gt;IUriContext&lt;/a&gt; to facilitate the handling of relative Uris.&amp;#160; To control how the Uri is fetched from the WinINet cache, set the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.uricachepolicy.aspx"&gt;UriCachePolicy&lt;/a&gt; property.&amp;#160; For convenience in XAML, there is a custom type converter to convert from the &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.cache.httprequestcachelevel.aspx"&gt;HttpRequestCacheLevel&lt;/a&gt; enumeration. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Downloading&lt;/strong&gt;       &lt;br /&gt;BitmapImage will download bitmap data from a network location on a background thread to avoid blocking the UI thread.&amp;#160; The &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.isdownloading.aspx"&gt;IsDownloading&lt;/a&gt; property will indicate if the data is being downloaded.&amp;#160; The &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.downloadcompleted.aspx"&gt;DownloadCompleted&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.downloadfailed.aspx"&gt;DownloadFailed&lt;/a&gt;, and &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.downloadprogress.aspx"&gt;DownloadProgress&lt;/a&gt; events are raised as appropriate.&amp;#160; Note that the DownloadCompleted event is not raised if no downloading occurred. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Decoding&lt;/strong&gt;       &lt;br /&gt;The bitmap data can be of any format, and WIC will search for an appropriate decoder. For efficiency, you can specify the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.decodepixelwidth.aspx"&gt;DecodePixelWidth&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.decodepixelheight.aspx"&gt;DecodePixelHeight&lt;/a&gt; properties.&amp;#160; These properties will control the size of the decoded image in memory.&amp;#160; While downloading is done on a background thread, decoding is done on the UI thread. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Caching&lt;/strong&gt;       &lt;br /&gt;BitmapImage will store the decoded bitmap in system memory.&amp;#160; You can control when this happens by setting the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.cacheoption.aspx"&gt;CacheOption&lt;/a&gt; property.&amp;#160; BitmapImage also maintains a cache of previous BitmapImage instances (via weak references) so that loading the same Uri multiple times will share the same instance.&amp;#160; To avoid this cache, you can include the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapcreateoptions.aspx"&gt;BitmapCreateOptions.IgnoreImageCache&lt;/a&gt; flag in the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.createoptions.aspx"&gt;CreateOptions&lt;/a&gt; property. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Cropping &amp;amp; Rotating&lt;/strong&gt;       &lt;br /&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.sourcerect.aspx"&gt;SourceRect&lt;/a&gt; property can be set to indicate the area of the bitmap to crop, and the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.rotation.aspx"&gt;Rotation&lt;/a&gt; property can be set to specify a rotation to apply.&amp;#160; Certain decoders can implement these operations when decoding. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.interop.interopbitmap.aspx"&gt;&lt;strong&gt;InteropBitmap&lt;/strong&gt;&lt;/a&gt;     &lt;br /&gt;This class wraps standard WIC components for HICONs (&lt;a href="http://msdn.microsoft.com/en-us/library/ms735569(VS.85).aspx"&gt;IWICImagingFactory::CreateBitmapFromHICON&lt;/a&gt;), HBITMAPs (&lt;a href="http://msdn.microsoft.com/en-us/library/ms735565(VS.85).aspx"&gt;IWICImagingFactory::CreateBitmapFromHBITMAP&lt;/a&gt;), and shared memory sections(&lt;a href="http://msdn.microsoft.com/en-us/library/ms736953(VS.85).aspx"&gt;WICCreateBitmapFromSection&lt;/a&gt;).&amp;#160; These bitmap sources are primarily used in interop scenarios. To create a bitmap source for an HICON, call &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.interop.imaging.createbitmapsourcefromhicon.aspx"&gt;Imaging.CreateBitmapSourceFromHIcon&lt;/a&gt;.&amp;#160; To create a bitmap source for an HBITMAP, call &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.interop.imaging.createbitmapsourcefromhbitmap.aspx"&gt;Imaging.CreateBitmapSourceFromHBitmap&lt;/a&gt;.&amp;#160; To create a bitmap source around a shared memory section, call &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.interop.imaging.createbitmapsourcefrommemorysection.aspx"&gt;Imaging.CreateBitmapSourceFromMemorySection&lt;/a&gt;.&amp;#160; In all cases, the Imaging methods return a BitmapSource instance, even though the instance is really an InteropBitmap.&amp;#160; This is generally not a problem since InteropBitmap does not offer any additional API.&amp;#160; One exception is the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.interop.interopbitmap.invalidate.aspx"&gt;Invalidate&lt;/a&gt; method.&amp;#160; This method only works for InteropBitmap instances created around shared memory, and indicates that WPF should reload the bitmap from the data in the shared memory section.&amp;#160; To call this method, you must first up-cast to InteropBitmap.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.writeablebitmap.aspx"&gt;&lt;strong&gt;WriteableBitmap&lt;/strong&gt;&lt;/a&gt;     &lt;br /&gt;This class represents a bitmap that can be written to by the application via the WritePixels method.&amp;#160; In previous versions of WPF, this method would end up allocating a new bitmap on every update.&amp;#160; We have improved this class significantly WPF 3.5 SP1, due out later this summer.&amp;#160; Improvements include efficient double buffering, direct access to the back buffer, dirty rects, sub-byte pixel formats, greater flexibility with array types, and more!&amp;#160; This class is supported in partial trust.&amp;#160; Having addressed the major performance issues, we expect that this class will enable some really cool scenarios.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.rendertargetbitmap.aspx"&gt;&lt;strong&gt;RenderTargetBitmap&lt;/strong&gt;&lt;/a&gt;     &lt;br /&gt;This class represents a bitmap produced by rasterizing WPF visuals.&amp;#160; You specify the bitmap dimensions, pixel format, etc when you construct an instance.&amp;#160; Currently RenderTargetBitmap only supports Pbgra32. Simply call &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.rendertargetbitmap.render.aspx"&gt;Render&lt;/a&gt; and pass the visual you want to rasterize into the bitmap.&amp;#160; You can also call &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.rendertargetbitmap.clear.aspx"&gt;Clear&lt;/a&gt; to clear the bitmap if needed.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;Static Vs Dynamic Bitmaps&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;The WPF imaging classes are primarily designed for static image processing - such as loading bitmaps.&amp;#160; Once a bitmap has been processed, the results are cached in memory.&amp;#160; Any further changes to the imaging components are ignored.&amp;#160; This poses a problem for bitmap data that is asynchronous.&amp;#160; As noted above, WPF downloads bitmap data from network locations on a background thread.&amp;#160; It is possible that when WPF renders and calls through IWICBitmapSource.CopyPixels that the bitmap data will not be available.&amp;#160; The call to CopyPixels is just a no-op, and the empty results are cached.&amp;#160; Even when the download finishes, the bitmap is not updated since there is already a cache of it in memory.&lt;/p&gt;  &lt;p&gt;The problem can be seen with this simple XAML:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;Page xmlns=&amp;quot;&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation""&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/a&gt; xmlns:x=&amp;quot;&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml""&gt;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/a&gt;&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;Image&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Image.Source&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;TransformedBitmap&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;TransformedBitmap.Source&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;BitmapImage UriSource=&amp;quot;&lt;a href="http://www.microsoft.com/presspass/presskits/windowsvista/images/icons/IE.jpg"/"&gt;http://www.microsoft.com/presspass/presskits/windowsvista/images/icons/IE.jpg&amp;quot;/&lt;/a&gt;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/TransformedBitmap.Source&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/TransformedBitmap&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Image.Source&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;/Image&amp;gt;      &lt;br /&gt;&amp;lt;/Page&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The first time you load this XAML, there is a good chance that you won't see the image.&amp;#160; Change the UriSource to some other &amp;quot;fresh&amp;quot; URI to reproduce the problem, because once WPF has downloaded the image data, it will always work (until you restart the app) since there is no background thread download needed anymore.&lt;/p&gt;  &lt;p&gt;The WPF way of doing this would be to listen for the DownloadCompleted event (only if IsDownloading is true) and waiting to hook up the TransformedBitmap until the download completes.&amp;#160; While this is certainly doable by an application, it is rather non-obvious and annoying, and it interferes with expressing the bitmap processing chain declaratively.&lt;/p&gt;  &lt;p&gt;Instead of providing a fully dynamic bitmap processing pipeline, WPF bakes support for common scenarios into the BitmapImage class itself.&amp;#160; There are various properties on BitmapImage you can set, and then BitmapImage will construct the chain of appropriate WIC bitmap sources for you when the download completes.&amp;#160; Indeed, BitmapImage is your one-stop shop for assembling the most common standard WIC components.&amp;#160; Depending on the properties specified, BitmapImage will assemble the following chain:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/WritingACustomBitmapSource_D781/image_4.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="73" alt="image" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/WritingACustomBitmapSource_D781/image_thumb_1.png" width="913" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;WPF is also very careful about running arbitrary code on the render thread.&amp;#160; By caching the result of bitmap processing, the heavy work (such as decoding the bitmap) is performed on the UI thread, and not on the render thread.&lt;/p&gt;  &lt;p&gt;Even though the WPF imaging classes are primarily designed for static image processing, there are a few imaging classes designed for dynamic bitmap scenarios: WriteableBitmap, RenderTargetBitmap, and an InteropBitmap created around a shared memory section.&amp;#160; These classes are specially handled by WPF for dynamic content.&amp;#160; In our forth-comming 3.5 SP1 release, the WriteableBitmap implementation has been substantially improved to provide a reasonably efficient, double-buffered, constant-memory solution for dynamically updating the contents of a bitmap.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;Custom BitmapSources&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;While most of the imaging classes are sealed, WPF does actually support external classes that derive from BitmapSource.&amp;#160; In this case, WPF will create an internal implementation of IWICBitmapSource that simply calls the virtual methods on BitmapSource.&amp;#160; WPF adds some additional virtuals, including overloads of CopyPixels, and some events for downloading and decoding.&amp;#160; All derived classes must override all of these virtuals, regardless of whether or not you need them.&amp;#160; In particular, the derived class must supply an implementation for:&lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;&lt;/ul&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.format.aspx"&gt;virtual PixelFormat Format {get;}&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.pixelwidth.aspx"&gt;virtual int PixelWidth {get;}&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.pixelheight.aspx"&gt;virtual int PixelHeight {get;}&lt;/a&gt; &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.dpix.aspx"&gt;virtual double DpiX {get;}&lt;/a&gt; &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.dpiy.aspx"&gt;virtual double DpiY {get;}&lt;/a&gt; &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.palette.aspx"&gt;virtual BitmapPalette Palette {get;}&lt;/a&gt; &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms616042.aspx"&gt;virtual void CopyPixels(Int32Rect sourceRect, Array pixels, int stride, int offset);&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms616043.aspx"&gt;virtual void CopyPixels(Array pixels, int stride, int offset);&lt;/a&gt; &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms616044.aspx"&gt;virtual void CopyPixels(Int32Rect sourceRect, IntPtr buffer, int bufferSize, int stride);&lt;/a&gt;         &lt;br /&gt;Important note: because your custom bitmap class has to override the CopyPixels method that handles a raw memory pointer it can only run in full trust.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.isdownloading.aspx"&gt;virtual bool IsDownloading {get;}&lt;/a&gt; &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.downloadcompleted.aspx"&gt;virtual event EventHandler DownloadCompleted {add; remove;}&lt;/a&gt; &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.downloadprogress.aspx"&gt;virtual event EventHandler&amp;lt;DownloadProgressEventArgs&amp;gt; DownloadProgress {add; remove;}&lt;/a&gt; &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.downloadfailed.aspx"&gt;virtual event EventHandler&amp;lt;ExceptionEventArgs&amp;gt; DownloadFailed {add; remove}&lt;/a&gt; &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.decodefailed.aspx"&gt;virtual event EventHandler&amp;lt;ExceptionEventArgs&amp;gt; DecodeFailed {add; remove;}&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;Introducing Microsoft.DwayneNeed.Media.Imaging&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;Most code from my blog gets posted to my codeplex site: &lt;a href="http://www.codeplex.com/MicrosoftDwayneNeed"&gt;http://www.codeplex.com/MicrosoftDwayneNeed&lt;/a&gt; Feel free to download it and play with it, or even just link it into an app if you find it useful.&amp;#160; For this blog I have added some custom bitmap classes:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/WritingACustomBitmapSource_D781/image_6.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="373" alt="image" src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/WritingACustomBitmapSource_D781/image_thumb_2.png" width="595" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;CustomBitmap&lt;/strong&gt;    &lt;br /&gt;This class implements the required virtuals from BitmapSource and provides reasonable default values.&amp;#160; For example, the DPI is returned as 96.0, the resolution is 0 x 0, the format is Bgr32, etc.&amp;#160; The three flavors of CopyPixels are sealed and redirected to a single CopyPixelsCore method.&amp;#160; This is the main method you will need to override to implement your logic.&amp;#160; There are some virtual members that make no sense at this level, such as IsDownloading and the various downloading and decoding events.&amp;#160; CustomBitmap simply provides storage for the event handlers and provides a protected method for raising the events.&amp;#160; You will need to call these protected raise methods if you actually implement downloading or decoding functionality.&amp;#160; A BitmapSource inherits from Freezable (eventually), and the freezable contract can be tedious to implement correctly.&amp;#160; CustomBitmap implements CreateInstanceCore by using reflection to create a new instance of itself.&amp;#160; This should be sufficient for most scenarios, and you don't need to provide an implementation in your derived classes unless you want to provide a more performant implementation or if you need to call a non-default constructor.&amp;#160; Further, the four &amp;quot;copy&amp;quot; virtual functions CloneCore, CloneCurrentValueCore, GetAsFrozenCore, and GetCurrentValueAsFrozenCore are all sealed and redirected to a single CopyCore method.&amp;#160; You will need to override this method if you have state that is not stored in DependencyProperties and that needs to be copied to freshly cloned instances.&amp;#160; You will also need to override FreezeCore if your additional state needs to be made readonly when the instance is frozen.&amp;#160; If your state is stored in DependencyProperties, the base Freezable implementation will correctly copy and freeze it as needed.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;ChainedBitmap&lt;/strong&gt;    &lt;br /&gt;This class represents a custom bitmap that will be chained such that it processes the output of another bitmap source. The default implementation of the BitmapSource virtual members is to delegate to the chained bitmap source.&amp;#160; This makes sense for most properties like DpiX, DpiY, PixelWidth, PixelHeight, etc, as in many scenarios these properties are the same for the entire chain of bitmap sources.&amp;#160; However, derived classes should pay special attention to the Format property.&amp;#160; Many bitmap processors only support a limited number of pixel formats, and they should return this for the Format property.&amp;#160; ChainedBitmap will take care of converting the pixel format as needed in the base implementation of CopyPixels.&amp;#160; ChainedBitmap also adds handlers to the download and decode events of the chained bitmap source and raises its own events in response.&amp;#160; This allows a download or decode event to propagate through the chain of bitmap sources.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;ColorKeyBitmap     &lt;br /&gt;&lt;/strong&gt;This class processes a source and produces Bgra32 bits, where all source pixels are opaque except for one color that is transparent.&amp;#160; You can specify this color explicitly be setting the TransparentColor property.&amp;#160; If this property is not set, the color of the pixel at (0,0) will be used as the transparent color.&amp;#160; For simplicity, we only process Bgra32 formatted bitmaps, anything else is converted to Bgra32.&amp;#160; Converting a pixel format that does not have an alpha channel to Bgra32 simply creates an opaque alpha value.&amp;#160; ColorKeyBitmap then changes the alpha channel for pixels that match the transparent color.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SepiaBitmap&lt;/strong&gt;    &lt;br /&gt;This class processes a source and converts the image to a sepia color scheme.&amp;#160; The algorithm is taken from &lt;a title="http://msdn.microsoft.com/en-us/magazine/cc163866.aspx" href="http://msdn.microsoft.com/en-us/magazine/cc163866.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/cc163866.aspx&lt;/a&gt;, and operates in the linear scRGB color space.&amp;#160; For simplicity, we only process Bgr32 or Bgra32 formatted bitmaps, anything else is converted to one of those formats.&amp;#160; Bgr32 and Bgra32 share the same memory layout for the RGB channels.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;GrayscaleBitmap&lt;/strong&gt;    &lt;br /&gt;This class processes a source and converts the image to a grayscale color scheme.&amp;#160; The algorithm is taken from &lt;a title="http://en.wikipedia.org/wiki/Grayscale" href="http://en.wikipedia.org/wiki/Grayscale"&gt;http://en.wikipedia.org/wiki/Grayscale&lt;/a&gt;, and operates in the linear scRGB color space.&amp;#160; For simplicity, we only process Bgr32 or Bgra32 formatted bitmaps, anything else is converted to one of those formats.&amp;#160; Bgr32 and Bgra32 share the same memory layout for the RGB channels.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;Demo&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;I created a simple demo and included it on the &lt;a href="http://www.codeplex.com/MicrosoftDwayneNeed/Release/ProjectReleases.aspx?ReleaseId=14592"&gt;codeplex&lt;/a&gt; site.&amp;#160; It simply allows you to select a URI (I provide a list of images from &lt;a href="http://www.microsoft.com"&gt;www.microsoft.com&lt;/a&gt;, or you can enter your own), and then chain together up to two of the custom bitmap sources.&amp;#160; The app handles the case where the BitmapImage may still be downloading, and defers creating the chain until the content is ready.&amp;#160; Make your own CustomBitmap classes and try them out!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;Stay Tuned...&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;Next we'll turn our attention to addressing the static processing limitations of the built-in WPF imaging classes.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8627248" width="1" height="1"&gt;</description></item><item><title>Blurry Bitmaps</title><link>http://blogs.msdn.com/b/dwayneneed/archive/2007/10/05/blurry-bitmaps.aspx</link><pubDate>Sat, 06 Oct 2007 01:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5301933</guid><dc:creator>Dwayne Need [MSFT]</dc:creator><slash:comments>13</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dwayneneed/rsscomments.aspx?WeblogPostID=5301933</wfw:commentRss><comments>http://blogs.msdn.com/b/dwayneneed/archive/2007/10/05/blurry-bitmaps.aspx#comments</comments><description>&lt;P&gt;&lt;STRONG&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/BlurryBitmaps_E0C1/blurrybitmaps_2.png" mce_href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/BlurryBitmaps_E0C1/blurrybitmaps_2.png"&gt;&lt;IMG id=id style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=375 alt=blurrybitmaps src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/BlurryBitmaps_E0C1/blurrybitmaps_thumb.png" width=750 border=0 mce_src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/BlurryBitmaps_E0C1/blurrybitmaps_thumb.png"&gt;&lt;/A&gt; &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Background: resolution independence&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;WPF was designed from the start to be resolution independent.&amp;nbsp; So instead of designing your UI in terms of pixels, you are encouraged to use a physical measuring unit (like inches).&amp;nbsp; When you specify coordinates in WPF, you are actually using "measure units", which are defined to be 1/96th of an inch.&amp;nbsp; This was chosen because 96 DPI monitor settings are very common.&lt;/P&gt;
&lt;P&gt;When WPF renders to the screen, it takes into account the system DPI, which you can set from the display control panel.&amp;nbsp; Of course, one problem with this is that no one ever sets this correctly.&amp;nbsp; When was the last time you took out a ruler, measured your screen, then divided your resolution by the result?&amp;nbsp; Another reason people don't set the DPI correctly is that Windows doesn't always look good at non-standard DPI settings.&amp;nbsp; This is something we will be improving in the future.&amp;nbsp; Of course, since you have to recalculate the DPI settings everytime you adjust your resolution, it would be best if the hardware could just report it.&amp;nbsp; For these reasons, WPF may not actually be able to draw a real inch on the screen, but it should come reasonably close.&lt;/P&gt;
&lt;P&gt;Another aspect of resolution independence is being able to draw with more precision than pixels.&amp;nbsp; If you recall the GDI APIs, drawing calls specified their coordinates as integers, which match the pixel grid.&amp;nbsp; WPF specifies its coordinates using floating point numbers, so you can easily specify coordinates like (1.2,5.234).&amp;nbsp; This is sometimes referred to as sub-pixel positioning.&amp;nbsp; Of course, what does it mean to render smaller than a pixel, given that each pixel has a single final color?&amp;nbsp; The answer is that we blend all of the contributors to a given pixel.&amp;nbsp; You can think of this as a weighted average, so that if one primitive covers most of a pixel, it will contribute more than other primitives that cover very little of the pixel.&amp;nbsp; But blending loses detail, so this can be very noticeable.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Bitmaps: what size should they be?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Bitmaps are often produced by designers using high-end editing tools.&amp;nbsp; Presume that the goal is to preserve the designer's intent, what size should we display the image at?&amp;nbsp; If the designer made a 96x96 bitmap, on a 96 DPI machine it will be 1 inch by 1 inch.&amp;nbsp; But if you show that bitmap on a super-high-end 300 DPI monitor (I've seen one, its awesome), then the bitmap would be less than a centimeter in each dimension. So, did the designer mean 96 pixels, or one inch?&amp;nbsp; Interestingly, modern image formats allow you to embed the designer's intended DPI into the file.&amp;nbsp; WPF will utilize this information, and scale the bitmap so that it ends up being the desired size.&amp;nbsp; However, here we have a problem - WPF always presumes the designer meant the image to be a certain physical size.&amp;nbsp; Often designers mean for the image to be a certain pixel size - after all, they are carefully assigning colors to each pixel in the image.&amp;nbsp; Its not the designer's intent to be a certain physical size, but the tools they use often stamp some DPI setting into the file anyways (commonly, some standard DPI setting like 72 or 96).&amp;nbsp; WPF sees this DPI information and scales the image to match.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;One problem: pixel scaling&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Bitmaps are difficult because they encode "high frequency" information in the form of per-pixel color information.&amp;nbsp; If the bitmap is displayed at a slightly different size, the result can be very blurry.&amp;nbsp; I won't bore you with lots of examples, but consider this one.&amp;nbsp; Say you have a bitmap that is 3x3 pixels.&amp;nbsp; It looks like this:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/BlurryBitmaps_E0C1/redbar_4.png" mce_href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/BlurryBitmaps_E0C1/redbar_4.png"&gt;&lt;IMG id=id style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=70 alt=redbar src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/BlurryBitmaps_E0C1/redbar_thumb_1.png" width=70 border=0 mce_src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/BlurryBitmaps_E0C1/redbar_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Now, if we scale this just a bit, such that the image will fit into 4x4 pixels, the result suffers from the fact that we can't represent each source pixel equally in the destination grid.&amp;nbsp; In fact, each original pixel "expands" by 1/3.&amp;nbsp; But of course, the final pixel can only have one color, so we have to combine overlapping samples.&amp;nbsp; We can try various blending techniques, but they all have problems.&amp;nbsp; The result will look something like this:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/BlurryBitmaps_E0C1/pinkbar_2.png" mce_href="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/BlurryBitmaps_E0C1/pinkbar_2.png"&gt;&lt;IMG id=id style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=93 alt=pinkbar src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/BlurryBitmaps_E0C1/pinkbar_thumb.png" width=93 border=0 mce_src="http://blogs.msdn.com/blogfiles/dwayneneed/WindowsLiveWriter/BlurryBitmaps_E0C1/pinkbar_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;The human eye can easily detect this artifact, and we tend to associate the result with being out of focus, or blurry.&amp;nbsp; It can be very irritating.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Another problem: pixel alignment&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;As I mentioned in the background section, WPF can render with sub-pixel precision.&amp;nbsp; What happens if you render the original 3x3 bitmap at the correct size, but at pixel coordinates (0.33,0.33)?&amp;nbsp; The solid red line ends up straddling two pixel columns, and the best we can do is to blend the contributions, which will result in nearly the same result as the previously described scale.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;SnapsToDevicePixels&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;WPF anticipated that there would be cases where people wanted to align with the pixel grid instead of using sub-pixel precision.&amp;nbsp; You can set the SnapsToDevicePixels property on any UIElement.&amp;nbsp; This will cause us to try and render to the pixel grid, but there are quite a few cases that don't work - including images.&amp;nbsp; We will be looking to improve this in the future.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Now what?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;All is not lost.&amp;nbsp; Even though WPF wants really badly to be resolution independent, we can force it to be pixel aligned ourselves.&amp;nbsp; In fact, this isn't even very hard.&amp;nbsp; We just need to do two things:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Size ourselves to real pixel sizes. &lt;/LI&gt;
&lt;LI&gt;Position ourselves on pixel boundaries. &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;For sizing, we can easily participate in the measure pass, and return a measure size that is equivalent to the desired pixel size.&amp;nbsp; The transform used to factor in the system DPI is provided for us in CompositionTarget.TransformFromDevice.&amp;nbsp; The pixel size is in "device" coordinates, and we transform from the device into measure units.&amp;nbsp; Easy enough.&lt;/P&gt;
&lt;P&gt;For positioning, we could participate in the arrange pass, and maybe apply a render transform to ourselves to offset appropriately.&amp;nbsp; However, for this example I'm focusing on bitmaps, so I choose to participate in rendering and pass the appropriate offset to by DrawImage call.&amp;nbsp; Either way would work, but the real problem is that we need to know when anything might shift our position.&amp;nbsp; The WPF layout system is very conservative, meaning that it tries to do as little work as possible.&amp;nbsp; Once you have been measured and arranged, you won't get called again unless your individual layout state is invalidated.&amp;nbsp; If some parent decides to shift you around a little bit, you will most likely not be laid out again.&amp;nbsp; I work around this by subscribing to the LayoutUpdated event.&amp;nbsp; Even though this event is an instance event on UIElement, it actually gets raised anytime any layout activity happens.&amp;nbsp; Lucky for us, this is pretty much what we want.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Bitmap class&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The code included below introduces a new class called Bitmap.&amp;nbsp; Bitmap is a replacement for Image, but instead of displaying any image source, it only displays bitmap sources.&amp;nbsp; This lets me access the PixelWidth and PixelHeight properties for determining the appropriate size.&amp;nbsp; The important aspects of this class are:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Derived from UIElement instead of FrameworkElement because I don’t want things like MinWidth, MaxWidth, or even Width. &lt;/LI&gt;
&lt;LI&gt;Bitmap.Source can be set to any BitmapSource. &lt;/LI&gt;
&lt;LI&gt;When measured, it will return the appropriate measure units to display the bitmap’s PixelWidth and PixelHeight &lt;/LI&gt;
&lt;LI&gt;When rendered, it will offset the image it draws to align with the pixel grid &lt;/LI&gt;
&lt;LI&gt;Whenever layout updates, it checks to see if it needs to re-render to align to the pixel grid again. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Its a pretty straight-forward class, check out the source code for the details.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The sample application&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Included in the project is a very simple sample application.&amp;nbsp; I have embedded a number of small bitmaps with high-frequency data in them.&amp;nbsp; Further, I encoded the bitmaps are various designer DPIs.&amp;nbsp; In the app, the top stack panel contains instances of Bitmap.&amp;nbsp; The bottom stack panel contains instances of Image.&amp;nbsp; You can clearly see how Image responds to the bitmap DPI, while Bitmap does not.&amp;nbsp; For fun, you can use the arrow keys which will adjust a render transform on the root.&amp;nbsp; Bitmap will snap to the nearest pixel, while Image will use sub-pixel positioning.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Is there a down side?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Of course.&amp;nbsp; By using the pixel size of the bitmap, the bitmap will look very different on different machines.&amp;nbsp; The 300 DPI super monitor will make your bitmap look very small.&amp;nbsp; Further, since we align to the pixel boundary, animating will cause the bitmap to jump by full pixels.&amp;nbsp; Sub-pixel positioning is very good for animations.&amp;nbsp; Finally, you can get gaps between elements due to rounding to the pixel grid.&amp;nbsp; If you can live with these limitations, then maybe this Bitmap class will be useful to you.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5301933" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-05-30-19-33/ImageSnappingToPixels.zip" length="114398" type="application/x-zip-compressed" /></item><item><title>Multithreaded UI: HostVisual</title><link>http://blogs.msdn.com/b/dwayneneed/archive/2007/04/26/multithreaded-ui-hostvisual.aspx</link><pubDate>Thu, 26 Apr 2007 21:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2289994</guid><dc:creator>Dwayne Need [MSFT]</dc:creator><slash:comments>17</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dwayneneed/rsscomments.aspx?WeblogPostID=2289994</wfw:commentRss><comments>http://blogs.msdn.com/b/dwayneneed/archive/2007/04/26/multithreaded-ui-hostvisual.aspx#comments</comments><description>&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-SIZE: 14pt"&gt;&lt;FONT face=Calibri&gt;Background: The WPF Threading Model&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;In general, objects in WPF can only be accessed from the thread that created them.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Sometimes this restriction is confused with the UI thread, but this is not true, and it is perfectly fine for objects to live on other threads.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;But it is not generally possible to create an object on one thread, and access it from another.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In almost all cases this will result in an InvalidOperationException, stating that &lt;B style="mso-bidi-font-weight: normal"&gt;“The calling thread cannot access this object because a different thread owns it.”&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-SIZE: 14pt"&gt;&lt;FONT face=Calibri&gt;Freezables&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Of course, there are exceptions to this restriction.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;A familiar one is the Freezable class.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Freezable objects can be frozen, at which point they become read-only and we lift the single-thread restriction.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Examples of frozen Freezables include the standard brushes, available from the Brushes class.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;These brushes can be used on any thread at any time.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;This is incredibly useful, and used for all of the graphics primitive resources (pens, brushes, transforms, etc).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;You can even derive your own types from Freezable and play by the same rules.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-SIZE: 14pt"&gt;&lt;FONT face=Calibri&gt;Separate Windows&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Unfortunately, that read-only restriction can be a real problem.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;There are many scenarios where we want to run separate pieces of the UI on separate threads.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If these pieces of UI are independent from each other, you can host them in separate windows, and run the windows on separate threads.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This can be a reasonable solution for some scenarios, especially scenarios where the separate threads can be run in independent top-level windows.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The big restriction for this approach is that the graphics from one cannot be composited with the graphics of the other.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;So while you could use a child window for the other thread’s UI, the system will just render one on top of the other.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;You cannot have transparency, you cannot use one as a brush for 3D content, you can’t draw over it, etc.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-SIZE: 14pt"&gt;&lt;FONT face=Calibri&gt;HostVisual&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;If your scenario doesn’t require interactivity (meaning input), then there is another option that WPF provides: &lt;B style="mso-bidi-font-weight: normal"&gt;HostVisual&lt;/B&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This option leverages the powerful composition engine in WPF that is already capable of aggregating the rendering primitives from multiple threads into one scene.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The element tree owned by the worker thread is rendered into its own composition target (called VisualTarget), and the results are composed into the HostVisual owned by the UI thread.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-SIZE: 14pt"&gt;&lt;FONT face=Calibri&gt;Issue #1: Hosting a Visual in XAML&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The first problem to solve is that the HostVisual class derives from Visual.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; I can't use an existing panel, such as Border, to host this visual.&amp;nbsp; Border derives from Decorator, which is the standard base class for panels that have a single child.&amp;nbsp; Unfortunately, the child is strongly typed to be a UIElement.&amp;nbsp; I have to&amp;nbsp;use a HostVisual, which does not derive from UIElement. &lt;/SPAN&gt;There is no built-in way that I know of to place a Visual as a child of one of the standard elements (such as Border, Grid,&amp;nbsp;Canvas, etc).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;So we make our own:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;TABLE style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BACKGROUND: #ddd9c3; BORDER-TOP: medium none; BORDER-RIGHT: medium none; mso-background-themecolor: background2; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-yfti-tbllook: 1184; mso-background-themeshade: 230; mso-border-alt: solid black .5pt; mso-border-themecolor: text1" class=MsoTableGrid border=1 cellSpacing=0 cellPadding=0 class="MsoTableGrid"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 6.65in; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1" vAlign=top width=638&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[&lt;SPAN style="COLOR: #2b91af"&gt;ContentProperty&lt;/SPAN&gt;(&lt;SPAN style="COLOR: #a31515"&gt;"Child"&lt;/SPAN&gt;)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;VisualWrapper&lt;/SPAN&gt; : &lt;SPAN style="COLOR: #2b91af"&gt;FrameworkElement&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Visual&lt;/SPAN&gt; Child&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;get&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; _child;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;set&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (_child != &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;RemoveVisualChild(_child);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_child = &lt;SPAN style="COLOR: blue"&gt;value&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (_child != &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;AddVisualChild(_child);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;protected&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Visual&lt;/SPAN&gt; GetVisualChild(&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; index)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (_child != &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt; &amp;amp;&amp;amp; index == 0)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; _child;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;else&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;ArgumentOutOfRangeException&lt;/SPAN&gt;(&lt;SPAN style="COLOR: #a31515"&gt;"index"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;protected&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; VisualChildrenCount&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;get&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; _child != &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt; ? 1 : 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Visual&lt;/SPAN&gt; _child;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-SIZE: 14pt"&gt;&lt;FONT face=Calibri&gt;Issue #2: Layout and the Loaded event&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;WPF provides a very convenient event called “Loaded”.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This event basically signals when an element has been fully initialized, measured, arranged, rendered, and plugged into a presentation source (such as a window).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Many elements use this event, including the MediaElement, but sadly this event is not raised for element trees that are not plugged into a presentation source, and displaying an element tree through the HostVisual/VisualTarget doesn’t count.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;So work around this, we make our own presentation source and use it to root the element tree that the worker thread will own.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This immediately leads into another problem: layout is suspended on all elements until resumed by a presentation source.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Unfortunately the official mechanism to do this is internal, so the best we can do is to explicitly measure and arrange the root element.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Thus we have our VisualTargetPresentationSource class:&lt;/FONT&gt;&lt;/P&gt;
&lt;TABLE style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BACKGROUND: #ddd9c3; BORDER-TOP: medium none; BORDER-RIGHT: medium none; mso-background-themecolor: background2; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-yfti-tbllook: 1184; mso-background-themeshade: 230; mso-border-alt: solid black .5pt; mso-border-themecolor: text1" class=MsoTableGrid border=1 cellSpacing=0 cellPadding=0 class="MsoTableGrid"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 6.65in; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1" vAlign=top width=638&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;VisualTargetPresentationSource&lt;/SPAN&gt; : &lt;SPAN style="COLOR: #2b91af"&gt;PresentationSource&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; VisualTargetPresentationSource(&lt;SPAN style="COLOR: #2b91af"&gt;HostVisual&lt;/SPAN&gt; hostVisual)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_visualTarget = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;VisualTarget&lt;/SPAN&gt;(hostVisual);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Visual&lt;/SPAN&gt; RootVisual&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;get&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; _visualTarget.RootVisual;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;set&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Visual&lt;/SPAN&gt; oldRoot = _visualTarget.RootVisual;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Set the root visual of the VisualTarget.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This visual will&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// now be used to visually compose the scene.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_visualTarget.RootVisual = &lt;SPAN style="COLOR: blue"&gt;value&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Tell the PresentationSource that the root visual has&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// changed.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This kicks off a bunch of stuff like the&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Loaded event.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;RootChanged(oldRoot, &lt;SPAN style="COLOR: blue"&gt;value&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Kickoff layout...&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;UIElement&lt;/SPAN&gt; rootElement = &lt;SPAN style="COLOR: blue"&gt;value&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;as&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;UIElement&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (rootElement != &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;rootElement.Measure(&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Size&lt;/SPAN&gt;(&lt;SPAN style="COLOR: #2b91af"&gt;Double&lt;/SPAN&gt;.PositiveInfinity,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Double&lt;/SPAN&gt;.PositiveInfinity));&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;rootElement.Arrange(&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Rect&lt;/SPAN&gt;(rootElement.DesiredSize));&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;protected&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;CompositionTarget&lt;/SPAN&gt; GetCompositionTargetCore()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; _visualTarget;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt; IsDisposed&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;get&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// We don't support disposing this object.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;VisualTarget&lt;/SPAN&gt; _visualTarget;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-SIZE: 14pt"&gt;&lt;FONT face=Calibri&gt;Background Threads&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;It is easy to make threads in C#.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;One trick to be aware of is that you must mark the thread as being a “background” thread, otherwise the application will keep running as long as those threads are alive.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Also remember that parts of WPF require that its threads to be initialized for COM’s “Single Threaded Apartment”. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;All of this is easy enough to do, and you’ll see this code later on:&lt;/FONT&gt;&lt;/P&gt;
&lt;TABLE style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BACKGROUND: #ddd9c3; BORDER-TOP: medium none; BORDER-RIGHT: medium none; mso-background-themecolor: background2; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-yfti-tbllook: 1184; mso-background-themeshade: 230; mso-border-alt: solid black .5pt; mso-border-themecolor: text1" class=MsoTableGrid border=1 cellSpacing=0 cellPadding=0 class="MsoTableGrid"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 6.65in; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1" vAlign=top width=638&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #2b91af; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #2b91af; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Thread&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; thread = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Thread&lt;/SPAN&gt;(/*…*/);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;thread.ApartmentState = &lt;SPAN style="COLOR: #2b91af"&gt;ApartmentState&lt;/SPAN&gt;.STA;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;thread.IsBackground = &lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;;&lt;BR&gt;thread.Start(/*…*/);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-SIZE: 14pt"&gt;&lt;FONT face=Calibri&gt;The Demo&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The demo will be a grid showing 3 movies, each rendered on a different background thread.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The demo is very simple, but hopefully gets the salient points across.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It is certainly possible to communicate from the UI thread to the worker threads, and given that all threads have their own dispatchers this is actually really easy, but this demo does not do that.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Interested readers should consult the documentation for Dispatcher.BeginInvoke.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-SIZE: 14pt"&gt;&lt;FONT face=Calibri&gt;The XAML&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The XAML simply defines a grid with 3 columns and puts a VisualWrapper in each column.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This is where we will be putting the HostVisual from code.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It would be cool &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;to build a class that automatically displays its content on another thread, but we would have to change the parser to support switching threads since the thread an object is created on is the thread that owns that object.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Anyways, the simple XAML is:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;TABLE style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BACKGROUND: #ddd9c3; BORDER-TOP: medium none; BORDER-RIGHT: medium none; mso-background-themecolor: background2; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-yfti-tbllook: 1184; mso-background-themeshade: 230; mso-border-alt: solid black .5pt; mso-border-themecolor: text1" class=MsoTableGrid border=1 cellSpacing=0 cellPadding=0 class="MsoTableGrid"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 6.65in; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1" vAlign=top width=638&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Window&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;x:Class&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;VisualTargetDemo.Window1&lt;/SPAN&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;xmlns&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/SPAN&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;xmlns:x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/SPAN&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;xmlns:local&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;clr-namespace:VisualTargetDemo&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Title&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;VisualTargetDemo&lt;/SPAN&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;SizeToContent&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;WidthAndHeight&lt;/SPAN&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Loaded&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;OnLoaded&lt;/SPAN&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Grid&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Grid.ColumnDefinitions&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;ColumnDefinition&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;*&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;ColumnDefinition&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;*&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;ColumnDefinition&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;*&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Grid.ColumnDefinitions&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;local:VisualWrapper&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Grid.Column&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;0&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;200&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Height&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;100&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;x:Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Player1&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;local:VisualWrapper&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Grid.Column&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;1&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;200&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Height&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;100&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;x:Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Player2&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;local:VisualWrapper&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Grid.Column&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;2&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;200&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Height&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;100&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;x:Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Player3&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Grid&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Window&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-SIZE: 14pt"&gt;&lt;FONT face=Calibri&gt;The Code&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The code is also pretty simple.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For each of the 3 players, it creates a HostVisual on the UI thread, then spins up a background thread, creates a MediaElement, puts it inside a VisualTarget (which points back to the HostVisual), and puts it all inside our hacky VisualTargetPresentationSource.&lt;/FONT&gt;&lt;/P&gt;
&lt;TABLE style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BACKGROUND: #ddd9c3; BORDER-TOP: medium none; BORDER-RIGHT: medium none; mso-background-themecolor: background2; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-yfti-tbllook: 1184; mso-background-themeshade: 230; mso-border-alt: solid black .5pt; mso-border-themecolor: text1" class=MsoTableGrid border=1 cellSpacing=0 cellPadding=0 class="MsoTableGrid"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 6.65in; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1" vAlign=top width=638&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;partial&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Window1&lt;/SPAN&gt; : System.Windows.&lt;SPAN style="COLOR: #2b91af"&gt;Window&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; Window1()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;InitializeComponent();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; OnLoaded(&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR: #2b91af"&gt;RoutedEventArgs&lt;/SPAN&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Player1.Child = CreateMediaElementOnWorkerThread();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Player2.Child = CreateMediaElementOnWorkerThread();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;Player3.Child = CreateMediaElementOnWorkerThread();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;HostVisual&lt;/SPAN&gt; CreateMediaElementOnWorkerThread()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Create the HostVisual that will "contain" the VisualTarget&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// on the worker thread.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;HostVisual&lt;/SPAN&gt; hostVisual = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;HostVisual&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Spin up a worker thread, and pass it the HostVisual that it&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// should be part of.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Thread&lt;/SPAN&gt; thread = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Thread&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;ParameterizedThreadStart&lt;/SPAN&gt;(MediaWorkerThread));&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;thread.ApartmentState = &lt;SPAN style="COLOR: #2b91af"&gt;ApartmentState&lt;/SPAN&gt;.STA;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;thread.IsBackground = &lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;thread.Start(hostVisual);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Wait for the worker thread to spin up and create the VisualTarget.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;s_event.WaitOne();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; hostVisual;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;FrameworkElement&lt;/SPAN&gt; CreateMediaElement()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Create a MediaElement, and give it some video content.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;MediaElement&lt;/SPAN&gt; mediaElement = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;MediaElement&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;mediaElement.BeginInit();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;mediaElement.Source = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Uri&lt;/SPAN&gt;(&lt;SPAN style="COLOR: #a31515"&gt;"http://download.microsoft.com/download/2/C/4/2C433161-F56C-4BAB-BBC5-B8C6F240AFCC/SL_0410_448x256_300kb_2passCBR.wmv?amp;clcid=0x409"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;mediaElement.Width = 200;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;mediaElement.Height = 100;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;mediaElement.EndInit();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; mediaElement;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; MediaWorkerThread(&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt; arg)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Create the VisualTargetPresentationSource and then signal the&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// calling thread, so that it can continue without waiting for us.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;HostVisual&lt;/SPAN&gt; hostVisual = (&lt;SPAN style="COLOR: #2b91af"&gt;HostVisual&lt;/SPAN&gt;)arg;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;VisualTargetPresentationSource&lt;/SPAN&gt; visualTargetPS = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;VisualTargetPresentationSource&lt;/SPAN&gt;(hostVisual);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;s_event.Set();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Create a MediaElement and use it as the root visual for the&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// VisualTarget.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;visualTargetPS.RootVisual = CreateMediaElement();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Run a dispatcher for this worker thread.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This is the central&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// processing loop for WPF.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;System.Windows.Threading.&lt;SPAN style="COLOR: #2b91af"&gt;Dispatcher&lt;/SPAN&gt;.Run();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;AutoResetEvent&lt;/SPAN&gt; s_event = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;AutoResetEvent&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-SIZE: 14pt"&gt;&lt;FONT face=Calibri&gt;Summary&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;In this demo I’ve shown how to use the HostVisual and VisualTarget classes to compose pieces of UI from different threads.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;There are some limitations: namely that the UI owned by the worker threads do not receive input events.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;There were also some annoyances we had to work around along the way, but those proved to be fairly minimal.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The source code for this project is now included in my codeplex&amp;nbsp;site: &lt;/FONT&gt;&lt;A href="http://www.codeplex.com/MicrosoftDwayneNeed"&gt;http://www.codeplex.com/MicrosoftDwayneNeed&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2289994" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dwayneneed/archive/tags/HostVisual/">HostVisual</category><category domain="http://blogs.msdn.com/b/dwayneneed/archive/tags/VisualTarget/">VisualTarget</category><category domain="http://blogs.msdn.com/b/dwayneneed/archive/tags/threading/">threading</category></item></channel></rss>