<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>39582</bug_id>
          
          <creation_ts>2010-05-23 23:27:20 -0700</creation_ts>
          <short_desc>[Cairo] Enhance the performance of shadowed elements by tiling the shadow area</short_desc>
          <delta_ts>2011-02-06 17:22:44 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.sueddeutsche.de/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>40793</dependson>
    
    <dependson>43259</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>alex</cc>
    
    <cc>anton.kochkov</cc>
    
    <cc>ariya.hidayat</cc>
    
    <cc>bunk</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>oliver</cc>
    
    <cc>shaunm</cc>
    
    <cc>simone.tolotti</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bugs</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zecke</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>229614</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-05-23 23:27:20 -0700</bug_when>
    <thetext>-webkit-box-shadow can slow down srcolling or interacting with a page a lot on Gtk. We do the shadow on our own, since Cairo doesn&apos;t provide filters. The current implementation blurs a image in the size of the object (maybe clipped to the viewport, but I guess not). This causes much senseless calcluations, since most lines look the same. We also recalculate the shadow on scrolling, a further performance problem.
And now, that box-shadow is supported by more and more browsers, this feature gets used more regulary. See the link above, an example of a german newspaper.

I have a proposal for this problem. We don&apos;t take the size of the object, but the smallest possible rect to draw the shadow and give it to the blur-filter. We take the resulting image of the filter output and split it into 9 parts (we don&apos;t need 9 images, but we need to calculate the sizes of the parts).

 1 | 2 | 3
-----------
 4 |    | 5
-----------
 6 | 7 | 8

After that we use Image::drawPattern to draw the shadow of the target in the real size. This idea is similar to the CSS property border-image, also see: http://www.css3.info/preview/border-image/

It is neccessary to check sideeffects for inset shadows.

I don&apos;t have the time to implement it atm :-( and hope that someone else could try it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229657</commentid>
    <comment_count>1</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-05-24 02:03:40 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt;
&gt; [...]
&gt;
&gt; It is neccessary to check sideeffects for inset shadows.
&gt; 
&gt; I don&apos;t have the time to implement it atm :-( and hope that someone else could try it.

Hi krit, very nice analysis, I&apos;ve spent sometime checking the problem after the bug 38915 appeared,  I&apos;m not very experienced about this topics but my conclusions after checking it a little bit are:

   - Avoid getters/setters and use arrays directly, I measured 20% win easy patch, but not much real difference in the scrolling
   - Add a skip region, we do not want to blur all the image when we want a shadow, not sure if this is happening now
   - Use alpha-only for shadows instead of all the channels?

I have time checking if we can fix this, so I can try it, do you think last point make senses? I&apos;ve checked the information in the filters page (http://www.w3.org/TR/SVG/filters.html#feGaussianBlur) and if I understand correctly in most cases alpha only is enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229659</commentid>
    <comment_count>2</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-05-24 02:04:54 -0700</bug_when>
    <thetext>*** Bug 38915 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229691</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-05-24 04:13:47 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; (In reply to comment #0)
&gt; &gt;
&gt; &gt; [...]
&gt; &gt;
&gt; &gt; It is neccessary to check sideeffects for inset shadows.
&gt; &gt; 
&gt; &gt; I don&apos;t have the time to implement it atm :-( and hope that someone else could try it.
&gt; 
&gt; Hi krit, very nice analysis, I&apos;ve spent sometime checking the problem after the bug 38915 appeared,  I&apos;m not very experienced about this topics but my conclusions after checking it a little bit are:
&gt; 
&gt;    - Avoid getters/setters and use arrays directly, I measured 20% win easy patch, but not much real difference in the scrolling
&gt;    - Add a skip region, we do not want to blur all the image when we want a shadow, not sure if this is happening now
&gt;    - Use alpha-only for shadows instead of all the channels?
&gt; 
&gt; I have time checking if we can fix this, so I can try it, do you think last point make senses? I&apos;ve checked the information in the filters page (http://www.w3.org/TR/SVG/filters.html#feGaussianBlur) and if I understand correctly in most cases alpha only is enough.

The current implementation does only blur the alpha channel. Otherwise we would be 3-4 times slower :-P

The clipping is one solution, but can have some bad sideeffects. Imagine a rect that you want to blur. We create an ImageBuffer, large enough, so that we have enough place for the rect itself and the resulting blurred edges on the sides. If we clip the rect and the image to the viewPort size, the actual visible size of the screen, the edge on the bottom (if the rect is clipped on the bottom) gets also blured. Of course that can be fixed and it will be more efficient than the current implementation, but to make the shadowImage as small as possible and therefore the number of pixels that need to get blurred as small as possible would be the fastest way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229694</commentid>
    <comment_count>4</comment_count>
      <attachid>56870</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-05-24 04:22:54 -0700</bug_when>
    <thetext>Created attachment 56870
Test Case large box with box-shadow 

Not sure why, but my attachements are not added when I create a bug.

This is a simple div-box with -webkit-box-shadow

note, that every pixel (at least every pixel you can see of the box) gets blurred. That is unnecessary, since most pixels are overlayed by the box, and also don&apos;t change it&apos;s value after the blurring.
Some stutters are noticeable on srolling down and up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230225</commentid>
    <comment_count>5</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-05-25 05:05:44 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt;
&gt; [...]
&gt; 
&gt; The clipping is one solution, but can have some bad sideeffects. Imagine a rect 
&gt; that you want to blur. We create an ImageBuffer, large enough, so that we have 
&gt; enough place for the rect itself and the resulting blurred edges on the sides. 
&gt; If we clip the rect and the image to the viewPort size, the actual visible size 
&gt; of the screen, the edge on the bottom (if the rect is clipped on the bottom) 
&gt; gets also blured. Of course that can be fixed and it will be more efficient 
&gt; than the current implementation, but to make the shadowImage as small as 
&gt; possible and therefore the number of pixels that need to get blurred as small 
&gt; as possible would be the fastest way.

I understand, thanks for the comments, I&apos;ll try your proposal to create a smaller image and use it as a patter then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236804</commentid>
    <comment_count>6</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-06-11 06:41:29 -0700</bug_when>
    <thetext>I&apos;ve done some tests these days checking the proposed solution but it has one issue that I think can not be solved generally. Basically when blur deviation is big enough the blur converts the squares in a kind-of blur ellipse and we can not use it to do the tiling anymore, that means that the blurred rect size will depend on the deviation and the piece of shadow we get for the tiling could not be correct (rounded corners could not be reduced easily either). Or another option would be to do this when devitation is under a value. Not sure what function describes that relationship between the deviation and the size. What do you think Dirk?

I was thinking that instead of reducing the shape we could reduce the blurring area. Currently, as Dirk said, it is being used the whole size of the boxes, we can clip it with the viewport, and we could even use a part of the surface depending on the offsets of the shadows and the deviation, doing 4 blur operations:

    1
---------
 |    |
4|    |2
 |    |
------|
   3  |

Or just 2 in case the offset is big enough compared to the offset, this could be used for other shapes.

Anyway, checking the solution I found a couple of things that could help us:

1- The one proposed before, use the data instead the getters and setters in the blur function, I meassured 20% performance win with this. http://pastebin.com/NNR005sm

2- In case of alpha-only, avoid getpremultiplied/putpremultiplied and use the alpha information directly from the imagedata, maybe we would have to add API to get this data. Those parts of the process represent almost 40% of the time with the patch of the point 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236821</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-06-11 07:42:15 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I&apos;ve done some tests these days checking the proposed solution but it has one issue that I think can not be solved generally. Basically when blur deviation is big enough the blur converts the squares in a kind-of blur ellipse and we can not use it to do the tiling anymore, that means that the blurred rect size will depend on the deviation and the piece of shadow we get for the tiling could not be correct (rounded corners could not be reduced easily either). Or another option would be to do this when devitation is under a value. Not sure what function describes that relationship between the deviation and the size. What do you think Dirk?
This is not the normal case and we can&apos;t do anything against it, if the user takes this huge deviations. Rounded corners would need bigger pieces for 1,3,6,8 but shouldn&apos;t be a problem to determine the sizes.
We should also have a algorihm to determine the size of a blurred object already. We need it to get the smallest size for the temporary ImageBuffer right now.

&gt; 
&gt; I was thinking that instead of reducing the shape we could reduce the blurring area. Currently, as Dirk said, it is being used the whole size of the boxes, we can clip it with the viewport, and we could even use a part of the surface depending on the offsets of the shadows and the deviation, doing 4 blur operations:
&gt; 
&gt;     1
&gt; ---------
&gt;  |    |
&gt; 4|    |2
&gt;  |    |
&gt; ------|
&gt;    3  |
&gt; 
&gt; Or just 2 in case the offset is big enough compared to the offset, this could be used for other shapes.
How can this be faster than using a smaller shape area? You just need to determine the size of the rounded corners after the blurring, and calculate the size size of the shape, so that you have at least 1 pixel for the straight edge for every side. The most blurring operations have a kernel-size &lt; 20 px, so that in most cases the resulting tempImageBuffer won&apos;t be bigger than ~ 100x100 pixel (I bet the avarage case will be smaller than 30x30 pixel).
After that, you cut the tempImage into different pieces and fill the area of the original shadow with different patterns. Just like CSS&apos;s border-image is doing it (http://www.css3.info/preview/border-image/). You even don&apos;t need to rewrite the code, we already have the code. See Image::drawPattern(...)

&gt; 
&gt; Anyway, checking the solution I found a couple of things that could help us:
&gt; 
&gt; 1- The one proposed before, use the data instead the getters and setters in the blur function, I meassured 20% performance win with this. http://pastebin.com/NNR005sm
Sounds reasonable, but I&apos;m not sure if there were security reasons not to do it that way. Oliver can you take a look at this please?

&gt; 
&gt; 2- In case of alpha-only, avoid getpremultiplied/putpremultiplied and use the alpha information directly from the imagedata, maybe we would have to add API to get this data. Those parts of the process represent almost 40% of the time with the patch of the point 1.
Cairo stores all values in cairo_surface_t as premultiplied. That means, getpremultiplied/putpremultiplied are just copying the values from the surface to the CanvasPixelArray. How do you want to get the values without using  getpremultiplied/putpremultiplied? I just know one way, implementing it for cairo again instead of reusing already existing code and optimize the realy relevant part: making the blurred area as small as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239882</commentid>
    <comment_count>8</comment_count>
      <attachid>59100</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-06-18 05:48:20 -0700</bug_when>
    <thetext>Created attachment 59100
Patch showing an option to avoid get and put

After talking to krit about the issues I found I&apos;ve created another bug in order to fix the kernel_size calculations (bug 40793), with that patch we could check the size of the minimum rectangle using the blurRadius. Anyway I also wanted to show the idea of how to avoid the pre/put process, this patch is just a rough test I did to check if it makes sense. In that case we would have to clean the code, do this just in case the image is an alpha image and review the API of ImageBuffer for all the platforms. It used both optimizations: arrays and avoid initial put/get operations of the result buffer doing the operations directly with the result buffers data. As krit said we would have to check also the security issues, probably check carefully all the input variables.

I&apos;ve tested this patch with identi.ca and it makes the difference in my computer, it is not perfect though (try it and give some feedback), oprofile graphics show we are saving almost 40% of the time (over the 20% we win with the array change).

I would say that if this patch makes sense we can use this one and create the tiling proposal over it, that way we would have a faster solution for these cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258275</commentid>
    <comment_count>9</comment_count>
      <attachid>63077</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-07-30 10:35:15 -0700</bug_when>
    <thetext>Created attachment 63077
Proposed patch

This is the tiling operation implemented, I&apos;m not adding the review until the submit the other 3 patches that are still pending. I&apos;m going to upload a bundle with all the patches to simplify the testing of all the patch-set. Comments are more than welcome, the patch maybe need a little review but you can check the idea ;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258278</commentid>
    <comment_count>10</comment_count>
      <attachid>63079</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-07-30 10:36:56 -0700</bug_when>
    <thetext>Created attachment 63079
Updated patch for gauss operations without put and get</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258281</commentid>
    <comment_count>11</comment_count>
      <attachid>63080</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-07-30 10:38:53 -0700</bug_when>
    <thetext>Created attachment 63080
Patch-set with all the patches, for testing purposes

With all the patches the identi.ca webpage performs well in my laptop, oprofile does not report the blur operation as one of the main issues. Check it and send feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261349</commentid>
    <comment_count>12</comment_count>
      <attachid>63741</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-06 10:50:03 -0700</bug_when>
    <thetext>Created attachment 63741
Proposed patch

Finished the complete specific calculation and added some doc to the method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261363</commentid>
    <comment_count>13</comment_count>
      <attachid>63741</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-08-06 11:10:12 -0700</bug_when>
    <thetext>Comment on attachment 63741
Proposed patch

&gt; diff --git a/WebCore/platform/graphics/cairo/FontCairo.cpp b/WebCore/platform/graphics/cairo/FontCairo.cpp
&gt; index d14b371..e0d6c2c 100644
&gt; --- a/WebCore/platform/graphics/cairo/FontCairo.cpp
&gt; +++ b/WebCore/platform/graphics/cairo/FontCairo.cpp
&gt; @@ -114,7 +114,7 @@ void Font::drawGlyphs(GraphicsContext* context, const SimpleFontData* font, cons
&gt;              cairo_restore(shadowCr);
&gt;          }
&gt;          cairo_translate(cr, 0.0, -extents.height);
&gt; -        context-&gt;createPlatformShadow(shadowBuffer.release(), shadowColor, shadowRect, radius);
&gt; +        context-&gt;createPlatformShadow(shadowBuffer.release(), shadowColor, shadowRect, radius, true);

This is a great example of why boolean parameters are bad. I&apos;ve no idea what &apos;true&apos; means when reading this code.
An enum is better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262092</commentid>
    <comment_count>14</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-09 04:44:21 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt;              cairo_restore(shadowCr);
&gt; &gt;          }
&gt; &gt;          cairo_translate(cr, 0.0, -extents.height);
&gt; &gt; -        context-&gt;createPlatformShadow(shadowBuffer.release(), shadowColor, shadowRect, radius);
&gt; &gt; +        context-&gt;createPlatformShadow(shadowBuffer.release(), shadowColor, shadowRect, radius, true);
&gt; 
&gt; This is a great example of why boolean parameters are bad. I&apos;ve no idea what &apos;true&apos; means when reading this code.
&gt; An enum is better.

I agree, I&apos;ll replace it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262634</commentid>
    <comment_count>15</comment_count>
      <attachid>64004</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-10 05:38:18 -0700</bug_when>
    <thetext>Created attachment 64004
Proposed patch

Replaced the boolean with the enum as suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263230</commentid>
    <comment_count>16</comment_count>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-08-11 07:04:08 -0700</bug_when>
    <thetext>Adding myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263660</commentid>
    <comment_count>17</comment_count>
      <attachid>64196</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-12 02:04:37 -0700</bug_when>
    <thetext>Created attachment 64196
Proposed patch for pixel operations

This patch converts all the operations with array objects in operations with char arrays, avoiding the copy of the data from ImageBuffers to ImageDatas. Even with the tiling patch we need this to get a good performance.

I&apos;ve tried to create the APIs required for the patch in the other ports but probably they are not correct, actually not sure if what we are doing is possible in Qt for instance, namely, get a reference to the pixel information inside a QPixmap, maybe we need a copy in that case. The other option I guess would be to do the operation inside the ImageBuffer class of each port.

Comments more than welcome ;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263665</commentid>
    <comment_count>18</comment_count>
      <attachid>64196</attachid>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-08-12 02:10:34 -0700</bug_when>
    <thetext>Comment on attachment 64196
Proposed patch for pixel operations

&gt; +        void dirty();

Probably better to use explicit verb, e.g. &quot;markDirty&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263684</commentid>
    <comment_count>19</comment_count>
      <attachid>64199</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-12 02:53:15 -0700</bug_when>
    <thetext>Created attachment 64199
Patch-set with all the patches, for testing purposes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263734</commentid>
    <comment_count>20</comment_count>
      <attachid>64004</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-12 05:31:19 -0700</bug_when>
    <thetext>Comment on attachment 64004
Proposed patch

A great patch, but maybe a bit more complicated than it should be.

&gt; +#if PLATFORM(CAIRO)
&gt; +    // Decide if the shadow buffer should be blitted or released (required for tiling)
&gt; +    enum ResultBufferOp {
&gt; +        Blit,
&gt; +        Release
&gt; +    };
&gt; +#endif
Can you add a better naming schema? I have no idea what ResultBufferOp means and Blit or Relase are not very helpful (I even don&apos;t know what Blit means :-P)

&gt; +/*
&gt; +  This function uses tiling to improve the performance of the shadow
&gt; +  drawing of rounded rectangles. The code basically does the following
&gt; +  steps:
&gt; +
&gt; +     1. Calculate the minimum rectangle size required to create the
&gt; +     tiles
&gt; +
&gt; +     2. If that size is smaller than the real rectangle render the new
&gt; +     small rectangle and its shadow, in other case render the shadow
&gt; +     of the real rectangle.
&gt; +
&gt; +     3. Calculate the sizes and positions of the tiles and their
&gt; +     destinations and use drawPattern to render the final shadow. The
&gt; +     code divides the rendering in 8 tiles:
&gt; +
&gt; +        1 | 2 | 3
&gt; +       -----------
&gt; +        4 |   | 5
&gt; +       -----------
&gt; +        6 | 7 | 8
&gt; +
&gt; +     The corners are directly copied from the small rectangle to the
&gt; +     real one and the side tiles are 1 pixel width, we use them as
&gt; +     tiles to cover the destination side. The corner tiles are bigger
&gt; +     than just the side of the rounded corner, we need to increase it
&gt; +     because the modifications caused by the corner over the blur
&gt; +     effect.
&gt; + */
&gt; +void GraphicsContext::drawFastShadow(GraphicsContext* context, GraphicsContextPrivate* gcp, const IntRect&amp; r, const FloatSize&amp; topLeftRadius, const FloatSize&amp; topRightRadius, const FloatSize&amp; bottomLeftRadius, const FloatSize&amp; bottomRightRadius, ColorSpace colorSpace)
&gt; +{
&gt; +#if ENABLE(FILTERS)
&gt; +    FloatSize shadowSize;
&gt; +    FloatSize shadowOffset;
...
&gt; +        destRect.setX(shadowRect.x() + rect.width() - topRightRadius.width());
&gt; +        destRect.setY(shadowRect.y() + rect.height() - bottomRightRadius.height());
&gt; +        destRect.setWidth(tileRect.width());
&gt; +        destRect.setHeight(tileRect.height());
&gt; +        phase.setX(destRect.x() - tileRect.x());
&gt; +        phase.setY(destRect.y() - tileRect.y());
&gt; +
&gt; +        shadowBuffer-&gt;image()-&gt;drawPattern(context, tileRect, patternTransform,
&gt; +                                           phase, colorSpace, CompositeSourceOver, destRect);
&gt; +
&gt; +        // bottom left corner
&gt; +        tileRect.setX(0);
&gt; +        tileRect.setY(smallBufferSize.height() - 2 * radius - bottomRightRadius.height());
&gt; +        tileRect.setWidth(2 * radius + bottomLeftRadius.width());
&gt; +        tileRect.setHeight(2 * radius + bottomLeftRadius.height());
&gt; +        destRect.setX(shadowRect.x());
&gt; +        destRect.setY(shadowRect.y() + rect.height() - bottomRightRadius.height());
&gt; +        destRect.setWidth(tileRect.width());
&gt; +        destRect.setHeight(tileRect.height());
&gt; +        phase.setX(destRect.x() - tileRect.x());
&gt; +        phase.setY(destRect.y() - tileRect.y());
&gt; +
&gt; +        shadowBuffer-&gt;image()-&gt;drawPattern(context, tileRect, patternTransform,
&gt; +                                           phase, colorSpace, CompositeSourceOver, destRect);
&gt; +
&gt; +    } else {
&gt; +        // Create suitably-sized ImageBuffer to hold the shadow.
&gt; +        OwnPtr&lt;ImageBuffer&gt; shadowBuffer = ImageBuffer::create(shadowBufferSize);
&gt; +
&gt; +        // Draw shadow into a new ImageBuffer.
&gt; +        cairo_t* shadowContext = shadowBuffer-&gt;context()-&gt;platformContext();
&gt; +        copyContextProperties(cr, shadowContext);
&gt; +        cairo_translate(shadowContext, -rect.x() + radius, -rect.y() + radius);
&gt; +        cairo_new_path(shadowContext);
&gt; +        cairo_append_path(shadowContext, path);
&gt; +
&gt; +        setPlatformFill(context, shadowContext, gcp);
&gt; +
&gt; +        context-&gt;createPlatformShadow(shadowBuffer.release(), shadowColor, shadowRect, radius, Blit);
&gt; +    }
&gt; +#endif
&gt; +}
This is pretty hard to understand. first,there shouldn&apos;t be that much code in an if clause. I suggest to test for the else, move the content of the else in this if and return earlier. the rest don&apos;t need to be checked again:

&gt; +    if (...) {
&gt; +        // Create suitably-sized ImageBuffer to hold the shadow.
&gt; +        OwnPtr&lt;ImageBuffer&gt; shadowBuffer = ImageBuffer::create(shadowBufferSize);
&gt; +
&gt; +        // Draw shadow into a new ImageBuffer.
&gt; +        cairo_t* shadowContext = shadowBuffer-&gt;context()-&gt;platformContext();
&gt; +        copyContextProperties(cr, shadowContext);
&gt; +        cairo_translate(shadowContext, -rect.x() + radius, -rect.y() + radius);
&gt; +        cairo_new_path(shadowContext);
&gt; +        cairo_append_path(shadowContext, path);
&gt; +
&gt; +        setPlatformFill(context, shadowContext, gcp);
&gt; +
&gt; +        context-&gt;createPlatformShadow(shadowBuffer.release(), shadowColor, shadowRect, radius, Blit);
&gt;          return;
&gt; +    }
&gt; ....



&gt; +        tileRect.setX(0);
&gt; +        tileRect.setY(smallBufferSize.height() - 2 * radius - bottomRightRadius.height());
&gt; +        tileRect.setWidth(2 * radius + bottomLeftRadius.width());
&gt; +        tileRect.setHeight(2 * radius + bottomLeftRadius.height());
This should be set at once:
   tileRect = FloatRect(0, smallBufferSize.height() - 2 * radius - bottomRightRadius.height(), ...)
Of course you can use multiple line for that.

You should use the logic of FloatRect/Size/Point much more in your code. and also it&apos;s funtcions. E.g. inflateX and inflateY extends the rect. Please use them to enlarge your rect to respect the blurring.
Don&apos;t mix up the enlargement of your rects with the offset. You can apply the blur radius to the with and position of the rects and move the rect by the shadowOffset.
Some multiplications are done multiple times (radius * 2) can you store them in a new variable like radiusTwice and so on?

It&apos;s great that you try to reuse the drawPattern code.

WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:1303
 +          if (offsetHeight &gt; min (bottomLeftRadius.height(), bottomRightRadius.height()))
no space between min (

WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:1296
 +      if (offsetWidth &gt; 0)
use if (offsetWidth)
The same in other lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263737</commentid>
    <comment_count>21</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-12 05:35:23 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 64196 [details])
&gt; &gt; +        void dirty();
&gt; 
&gt; Probably better to use explicit verb, e.g. &quot;markDirty&quot;.

Good point, I&apos;ll change it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263741</commentid>
    <comment_count>22</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-12 05:42:56 -0700</bug_when>
    <thetext>
Thanks for the detailed review.

(In reply to comment #20)
&gt;
&gt; [...]
&gt;
&gt; Can you add a better naming schema? I have no idea what ResultBufferOp means and Blit or Relase are not very helpful (I even don&apos;t know what Blit means :-P)
&gt; 

Yeah, naming is always the hardest, it tried to be Result Buffer Operation, I know, it sucks :). http://en.wikipedia.org/wiki/Bit_blit. I&apos;ll try to get something better.

&gt;
&gt; [...]
&gt;
&gt; &gt; +}
&gt; This is pretty hard to understand. first,there shouldn&apos;t be that much code in an if clause. I suggest to test for the else, move the content of the else in this if and return earlier. the rest don&apos;t need to be checked again:
&gt; 
&gt; &gt; +        tileRect.setX(0);
&gt; &gt; +        tileRect.setY(smallBufferSize.height() - 2 * radius - bottomRightRadius.height());
&gt; &gt; +        tileRect.setWidth(2 * radius + bottomLeftRadius.width());
&gt; &gt; +        tileRect.setHeight(2 * radius + bottomLeftRadius.height());
&gt; This should be set at once:
&gt;    tileRect = FloatRect(0, smallBufferSize.height() - 2 * radius - bottomRightRadius.height(), ...)
&gt; Of course you can use multiple line for that.
&gt; 
&gt; You should use the logic of FloatRect/Size/Point much more in your code. and also it&apos;s funtcions. E.g. inflateX and inflateY extends the rect. Please use them to enlarge your rect to respect the blurring.
&gt; Don&apos;t mix up the enlargement of your rects with the offset. You can apply the blur radius to the with and position of the rects and move the rect by the shadowOffset.
&gt; Some multiplications are done multiple times (radius * 2) can you store them in a new variable like radiusTwice and so on?
&gt; 
&gt; It&apos;s great that you try to reuse the drawPattern code.
&gt; 
&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:1303
&gt;  +          if (offsetHeight &gt; min (bottomLeftRadius.height(), bottomRightRadius.height()))
&gt; no space between min (
&gt; 
&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:1296
&gt;  +      if (offsetWidth &gt; 0)
&gt; use if (offsetWidth)
&gt; The same in other lines.

I agree, good points, I&apos;ll check them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266037</commentid>
    <comment_count>23</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-18 04:03:33 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 64004 [details])
&gt;
&gt; [...]
&gt;
&gt; A great patch, but maybe a bit more complicated than it should be.
&gt; This should be set at once:
&gt;    tileRect = FloatRect(0, smallBufferSize.height() - 2 * radius - bottomRightRadius.height(), ...)
&gt; Of course you can use multiple line for that.
&gt;

I just used the sets because with FloatRect we are creating a new object each time, but not sure which option is better wrt performance or if it make sense, I agree with you creating the objects is clearer, I¡ll change them.

&gt; You should use the logic of FloatRect/Size/Point much more in your code. and also it&apos;s funtcions. E.g. inflateX and inflateY extends the rect. Please use them to enlarge your rect to respect the blurring.

I think in this case (if it is the case I&apos;m checking :) is not an inflate but a size change, we do not want to move the location.

&gt; Don&apos;t mix up the enlargement of your rects with the offset. You can apply the blur radius to the with and position of the rects and move the rect by the shadowOffset.
&gt; 

Yeah, I&apos;ll review all the calculations to make them clearer

&gt; 
&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:1296
&gt;  +      if (offsetWidth &gt; 0)
&gt; use if (offsetWidth)

In this case we have to use &gt; 0 because it is not just a boolean check, in the else we want to check the case where offsetWidth is less than 0.

Thanks for the comments, I&apos;ll try to have a patch ready, I will also use the new drawPattern added by Hyatt to avoid the copies of the image.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266293</commentid>
    <comment_count>24</comment_count>
      <attachid>64747</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-18 12:05:25 -0700</bug_when>
    <thetext>Created attachment 64747
Proposed patch

Include all the suggestions. Still not for review until we land the other two patches blocking this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266312</commentid>
    <comment_count>25</comment_count>
      <attachid>64754</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-18 12:25:31 -0700</bug_when>
    <thetext>Created attachment 64754
Proposed patch for pixel operations

Added ariya&apos;s suggestions for this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266314</commentid>
    <comment_count>26</comment_count>
      <attachid>64755</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-18 12:27:50 -0700</bug_when>
    <thetext>Created attachment 64755
Patch-set with all the patches, for testing purposes

Updated patchset.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266626</commentid>
    <comment_count>27</comment_count>
      <attachid>64827</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-19 04:08:23 -0700</bug_when>
    <thetext>Created attachment 64827
Proposed patch

Rebased and fixed problem with big offsets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268575</commentid>
    <comment_count>28</comment_count>
      <attachid>65277</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-24 08:52:33 -0700</bug_when>
    <thetext>Created attachment 65277
Proposed patch

After checking the options about the offset with Ariya he proposed using the blur radius and fill with the solid color the other parts of the figure. With this modification we do not need to calculate the offset anymore so we can land this patch. Adding review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268597</commentid>
    <comment_count>29</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-24 09:29:57 -0700</bug_when>
    <thetext>I&apos;ve added a new bug with the FEGaussianBlur pixel operations patch: bug 44528. It does not depend on this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269257</commentid>
    <comment_count>30</comment_count>
    <who name="simontol">simone.tolotti</who>
    <bug_when>2010-08-25 08:35:33 -0700</bug_when>
    <thetext>I&apos;m experiencing pretty the same issue on http://www.google.com/reader, using webkitGTK browsers (Epiphany or Midori on Linux)  scrolling is very slow.
No issue with QTwebkit browsers (Arora, Rekonq, Konqueror+webkit).
Do I have to open a new bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269265</commentid>
    <comment_count>31</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-25 08:50:20 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; I&apos;m experiencing pretty the same issue on http://www.google.com/reader, using webkitGTK browsers (Epiphany or Midori on Linux)  scrolling is very slow.
&gt; No issue with QTwebkit browsers (Arora, Rekonq, Konqueror+webkit).
&gt; Do I have to open a new bug?

It is this issue, there are shadows in the style, a new bug is not necessary, thanks for reporting it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271475</commentid>
    <comment_count>32</comment_count>
      <attachid>65927</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-30 09:55:49 -0700</bug_when>
    <thetext>Created attachment 65927
Proposed patch

Update the patch with the current HEAD.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272069</commentid>
    <comment_count>33</comment_count>
      <attachid>66044</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-31 06:36:05 -0700</bug_when>
    <thetext>Created attachment 66044
Proposed patch

Some improvements thanks to mrobinson&apos;s review the pixel tests he added:
  - Fixed issues with the tiles destination
  - Fixed problems when there are transformations
  - Fixed pointers ownership, no need to the resultRelease function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272120</commentid>
    <comment_count>34</comment_count>
      <attachid>66059</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-31 09:03:42 -0700</bug_when>
    <thetext>Created attachment 66059
Proposed patch

- Fixed Changelog
- Clean smallBufferSize calculation
- Removed leak of the cairo path</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272124</commentid>
    <comment_count>35</comment_count>
      <attachid>66061</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-31 09:09:18 -0700</bug_when>
    <thetext>Created attachment 66061
Proposed patch

Upload the real last version :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272139</commentid>
    <comment_count>36</comment_count>
      <attachid>66061</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-31 09:25:43 -0700</bug_when>
    <thetext>Comment on attachment 66061
Proposed patch

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:1285
&gt; +
I think I prefer to switch this calculation around a bit to make it clearer. Consider:

// Find the extra space needed from the curve of the corners.
int extraWidthFromCornerRadii = max(topLeftRadius.width(), bottomLeftRadius.width()) + tileWidth + radiusTwice + max(topRightRadius.width(), bottomRightRadius.width();
int extraHeightFromCornerRadii = max(topLeftRadius.height(), topRightRadius.height()) + tileWidth + radiusTwice + max(bottomLeftRadius.height(), bottomRightRadius.height();

// The length of a side of the buffer is the enough space for two blur radii,
// the radii of the corners, and then 1 pixel to draw the side tiles.
IntSize smallBufferSize = IntSize((blurRadius * 2) + 1 + extraWidthFromCornerRadii,
                                  (blurRadius * 2) + 1 + extraHeightFromCornerRadii));

Notice that I renamed radius to blurRadius.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272151</commentid>
    <comment_count>37</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-31 09:51:57 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; // Find the extra space needed from the curve of the corners.
&gt; int extraWidthFromCornerRadii = max(topLeftRadius.width(), bottomLeftRadius.width()) + tileWidth + radiusTwice + max(topRightRadius.width(), bottomRightRadius.width();
&gt; int extraHeightFromCornerRadii = max(topLeftRadius.height(), topRightRadius.height()) + tileWidth + radiusTwice + max(bottomLeftRadius.height(), bottomRightRadius.height();
&gt; 
&gt; // The length of a side of the buffer is the enough space for two blur radii,
&gt; // the radii of the corners, and then 1 pixel to draw the side tiles.
&gt; IntSize smallBufferSize = IntSize((blurRadius * 2) + 1 + extraWidthFromCornerRadii,
&gt;                                   (blurRadius * 2) + 1 + extraHeightFromCornerRadii));
&gt; 
&gt; Notice that I renamed radius to blurRadius.

I like it, I&apos;m going to add it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272454</commentid>
    <comment_count>38</comment_count>
      <attachid>66129</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-08-31 16:01:22 -0700</bug_when>
    <thetext>Created attachment 66129
Proposed patch

Some more reviews of the code style, now fillRect also uses the function. At this point we are not supporting rotations, we will check how to fix aliasing problems in those cases in a following bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272467</commentid>
    <comment_count>39</comment_count>
      <attachid>66129</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-31 16:18:49 -0700</bug_when>
    <thetext>Comment on attachment 66129
Proposed patch

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:630
&gt; +    if ((transform.isIdentityOrTranslationOrFlipped())) {
&gt; +        cairo_t* cr = context-&gt;platformContext();;
Avoid multiple braces and muliple semicolons.

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:633
&gt; +        FloatSize corner(0, 0);
No need for (0, 0), just use FloatSize corner;

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:1330
&gt; +    OwnPtr&lt;ImageBuffer&gt; smallBuffer = ImageBuffer::create(smallBufferSize);
You should check if we realy got an imagebuffer.

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:1340
&gt; +    OwnPtr&lt;ImageBuffer&gt; shadowBuffer = ImageBuffer::create(smallBufferSize);
dito

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:1378
&gt; +    shadowBuffer-&gt;drawPattern(this, tileRect, patternTransform,
can be in one line

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:1388
&gt; +    shadowBuffer-&gt;drawPattern(this, tileRect, patternTransform,
&gt; +                              phase, colorSpace, CompositeSourceOver, destRect);
dito

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:1397
&gt; +    shadowBuffer-&gt;drawPattern(this, tileRect, patternTransform,
&gt; +                              phase, colorSpace, CompositeSourceOver, destRect);
dito

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:1405
&gt; +    shadowBuffer-&gt;drawPattern(this, tileRect, patternTransform,
&gt; +                              phase, colorSpace, CompositeSourceOver, destRect);
dito

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:1413
&gt; +    shadowBuffer-&gt;drawPattern(this, tileRect, patternTransform,
&gt; +                              phase, colorSpace, CompositeSourceOver, destRect);
dito

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:1421
&gt; +    shadowBuffer-&gt;drawPattern(this, tileRect, patternTransform,
&gt; +                              phase, colorSpace, CompositeSourceOver, destRect);
dito

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:1429
&gt; +    shadowBuffer-&gt;drawPattern(this, tileRect, patternTransform,
&gt; +                              phase, colorSpace, CompositeSourceOver, destRect);
dito</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272673</commentid>
    <comment_count>40</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-09-01 00:29:13 -0700</bug_when>
    <thetext>Thanks for the review :)

(In reply to comment #39)
&gt; (From update of attachment 66129 [details])
&gt; &gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:630
&gt; &gt; +    if ((transform.isIdentityOrTranslationOrFlipped())) {
&gt; &gt; +        cairo_t* cr = context-&gt;platformContext();;
&gt; Avoid multiple braces and muliple semicolons.
&gt; 
&gt; &gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:633
&gt; &gt; +        FloatSize corner(0, 0);
&gt; No need for (0, 0), just use FloatSize corner;
&gt; 
&gt; &gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:1330
&gt; &gt; +    OwnPtr&lt;ImageBuffer&gt; smallBuffer = ImageBuffer::create(smallBufferSize);
&gt; You should check if we realy got an imagebuffer.
&gt; 

Good catch this one, there are more places int he code without this check, I&apos;ll change it in the patch and create a new bug for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272680</commentid>
    <comment_count>41</comment_count>
      <attachid>66175</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-09-01 00:53:43 -0700</bug_when>
    <thetext>Created attachment 66175
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272695</commentid>
    <comment_count>42</comment_count>
      <attachid>66179</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-09-01 01:33:23 -0700</bug_when>
    <thetext>Created attachment 66179
Proposed patch

I reviewed the commens, I&apos;ll add the pixel tests to the patch when committing to avoid git/svn binary problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272798</commentid>
    <comment_count>43</comment_count>
      <attachid>66179</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-01 07:38:09 -0700</bug_when>
    <thetext>Comment on attachment 66179
Proposed patch

View in context: https://bugs.webkit.org/attachment.cgi?id=66179&amp;action=prettypatch

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:628
&gt; +    // drawTiledShadow still does not work with rotations
Please add a period to the end of this sentence before landing.

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:1442
&gt; +    // drawTiledShadow still does not work with rotations
Same here.

This looks good to me. Eventually much of this should be separated out into another class. We should share ContextShadow. I think I&apos;ll start on that today. We need to ensure that shadows for non-rectangular shapes are fast as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272837</commentid>
    <comment_count>44</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-09-01 09:19:03 -0700</bug_when>
    <thetext>landed r66607

Thanks everybody for the help adding all the patches ;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272868</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-01 10:07:04 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/66608 might have broken SnowLeopard Intel Release (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346413</commentid>
    <comment_count>46</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-06 17:22:44 -0800</bug_when>
    <thetext>*** Bug 53888 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>56870</attachid>
            <date>2010-05-24 04:22:54 -0700</date>
            <delta_ts>2010-05-24 04:22:54 -0700</delta_ts>
            <desc>Test Case large box with box-shadow </desc>
            <filename>shadowBox.html</filename>
            <type>text/html</type>
            <size>160</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8dGl0bGU+LXdlYmtpdC1ib3gtc2hhZG93IG9uIGJpZyBk
aXY8L3RpdGxlPgo8ZGl2IHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6MjAwMHB4Oy13ZWJraXQt
Ym94LXNoYWRvdzojQ0NDIDBweCAwcHggMTBweDsiPjwvZGl2Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59100</attachid>
            <date>2010-06-18 05:48:20 -0700</date>
            <delta_ts>2010-07-30 10:36:56 -0700</delta_ts>
            <desc>Patch showing an option to avoid get and put</desc>
            <filename>optim_blur.patch</filename>
            <type>text/plain</type>
            <size>5138</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCA5ZjliYTdlLi44YzMy
ZGFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC04MCw2ICs4
MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+
IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAgICAg
IFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IElu
dFJlY3QmKSBjb25zdDsKIAorICAgICAgICB1bnNpZ25lZCBjaGFyKiBkYXRhKCkgY29uc3Q7Cisg
ICAgICAgIHZvaWQgZGlydHkoKSBjb25zdDsKKwogICAgICAgICB2b2lkIHB1dFVubXVsdGlwbGll
ZEltYWdlRGF0YShJbWFnZURhdGEqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50KTsKICAgICAgICAgdm9pZCBwdXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKEltYWdlRGF0YSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQpOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCmluZGV4IGMyOThlMTguLjYyMWM5YTQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
by5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvLmNwcApAQCAtMTQwLDYgKzE0MCwxNiBAQCB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRy
YW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQogICAgIGNh
aXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUgKG1fZGF0YS5tX3N1cmZhY2UsIDAsIDAs
IG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwogfQogCit1bnNpZ25lZCBjaGFyKiBJ
bWFnZUJ1ZmZlcjo6ZGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEobV9kYXRhLm1fc3VyZmFjZSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRp
cnR5KCkgY29uc3QKK3sKKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHkgKG1fZGF0YS5tX3N1
cmZhY2UpOworfQorCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVsdGlwbGllZD4KIFBhc3NSZWZQdHI8
SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VC
dWZmZXJEYXRhJiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogewpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggNjFh
ZWE5MC4uMGNkYTM2YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgRkVHYXVzc2lh
bkJsdXI6OnNldFN0ZERldmlhdGlvblkoZmxvYXQgeSkKICAgICBtX3kgPSB5OwogfQogCi1zdGF0
aWMgdm9pZCBib3hCbHVyKENhbnZhc1BpeGVsQXJyYXkqJiBzcmNQaXhlbEFycmF5LCBDYW52YXNQ
aXhlbEFycmF5KiYgZHN0UGl4ZWxBcnJheSwKK3N0YXRpYyB2b2lkIGJveEJsdXIodW5zaWduZWQg
Y2hhciogc3JjUGl4ZWxBcnJheSwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgZHgsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQg
ZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSkKIHsKICAgICBp
bnQgZHhMZWZ0ID0gZHggLyAyOwpAQCAtODIsMTYgKzgyLDE2IEBAIHN0YXRpYyB2b2lkIGJveEJs
dXIoQ2FudmFzUGl4ZWxBcnJheSomIHNyY1BpeGVsQXJyYXksIENhbnZhc1BpeGVsQXJyYXkqJiBk
c3RQaXhlCiAgICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwKICAgICAgICAgICAgIGludCBt
YXhLZXJuZWxTaXplID0gc3RkOjptaW4oZHhSaWdodCwgZWZmZWN0V2lkdGgpOwogICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyArK2kpCi0gICAgICAgICAgICAg
ICAgc3VtICs9IHNyY1BpeGVsQXJyYXktPmdldChsaW5lICsgaSAqIHN0cmlkZSArIGNoYW5uZWwp
OworICAgICAgICAgICAgICAgIHN1bSArPSBzcmNQaXhlbEFycmF5W2xpbmUgKyBpICogc3RyaWRl
ICsgY2hhbm5lbF07CiAKICAgICAgICAgICAgIC8vIEJsdXJyaW5nCiAgICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IGVmZmVjdFdpZHRoOyArK3gpIHsKICAgICAgICAgICAgICAgICBpbnQg
cGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGUgKyBjaGFubmVsOwotICAgICAgICAg
ICAgICAgIGRzdFBpeGVsQXJyYXktPnNldChwaXhlbEJ5dGVPZmZzZXQsIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KHN1bSAvIGR4KSk7CisgICAgICAgICAgICAgICAgZHN0UGl4ZWxBcnJheVtw
aXhlbEJ5dGVPZmZzZXRdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc3VtIC8gZHgpOwog
ICAgICAgICAgICAgICAgIGlmICh4ID49IGR4TGVmdCkKLSAgICAgICAgICAgICAgICAgICAgc3Vt
IC09IHNyY1BpeGVsQXJyYXktPmdldChwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGUp
OworICAgICAgICAgICAgICAgICAgICBzdW0gLT0gc3JjUGl4ZWxBcnJheVtwaXhlbEJ5dGVPZmZz
ZXQgLSBkeExlZnQgKiBzdHJpZGVdOwogICAgICAgICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8
IGVmZmVjdFdpZHRoKQotICAgICAgICAgICAgICAgICAgICBzdW0gKz0gc3JjUGl4ZWxBcnJheS0+
Z2V0KHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGUpOworICAgICAgICAgICAgICAg
ICAgICBzdW0gKz0gc3JjUGl4ZWxBcnJheVtwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3Ry
aWRlXTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChhbHBoYUltYWdlKSAvLyBTb3Vy
Y2UgaW1hZ2UgaXMgYmxhY2ssIGl0IGp1c3QgaGFzIGRpZmZlcmVudCBhbHBoYSB2YWx1ZXMKICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTExOSw4ICsxMTksOSBAQCB2b2lkIEZFR2F1c3NpYW5C
bHVyOjphcHBseShGaWx0ZXIqIGZpbHRlcikKICAgICBzZHkgPSBtYXgoc2R5LCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oMSkpOwogCiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IGNhbGN1
bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKTsKLSAgICBSZWZQdHI8
SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEobV9pbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCkpOwotICAgIENhbnZhc1BpeGVsQXJyYXkq
IHNyY1BpeGVsQXJyYXkoc3JjSW1hZ2VEYXRhLT5kYXRhKCkpOworICAgIC8qIEZJWE1FOiBmbHVz
aCBpbWFnZT8gKi8KKyAgICAvKiBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEobV9pbi0+
cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVj
dCkpOyAqLworICAgIC8qIENhbnZhc1BpeGVsQXJyYXkqIHNyY1BpeGVsQXJyYXkoc3JjSW1hZ2VE
YXRhLT5kYXRhKCkpOyAqLwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVz
dWx0SW1hZ2UoKS0+c2l6ZSgpKTsKICAgICBSZWZQdHI8SW1hZ2VEYXRhPiB0bXBJbWFnZURhdGEg
PSBJbWFnZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgp
KTsKQEAgLTEyOCwxMSArMTI5LDEzIEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OmFwcGx5KEZpbHRl
ciogZmlsdGVyKQogCiAgICAgaW50IHN0cmlkZSA9IDQgKiBpbWFnZVJlY3Qud2lkdGgoKTsKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICBib3hCbHVyKHNyY1BpeGVs
QXJyYXksIHRtcFBpeGVsQXJyYXksIHNkeCwgNCwgc3RyaWRlLCBpbWFnZVJlY3Qud2lkdGgoKSwg
aW1hZ2VSZWN0LmhlaWdodCgpLCBpc0FscGhhSW1hZ2UoKSk7Ci0gICAgICAgIGJveEJsdXIodG1w
UGl4ZWxBcnJheSwgc3JjUGl4ZWxBcnJheSwgc2R5LCBzdHJpZGUsIDQsIGltYWdlUmVjdC5oZWln
aHQoKSwgaW1hZ2VSZWN0LndpZHRoKCksIGlzQWxwaGFJbWFnZSgpKTsKKyAgICAgICAgYm94Qmx1
cihtX2luLT5yZXN1bHRJbWFnZSgpLT5kYXRhKCksIHRtcFBpeGVsQXJyYXktPmRhdGEoKS0+ZGF0
YSgpLCBzZHgsIDQsIHN0cmlkZSwgaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQo
KSwgaXNBbHBoYUltYWdlKCkpOworICAgICAgICBib3hCbHVyKHRtcFBpeGVsQXJyYXktPmRhdGEo
KS0+ZGF0YSgpLCAoaSAhPSAyKSA/IG1faW4tPnJlc3VsdEltYWdlKCktPmRhdGEoKSA6IHJlc3Vs
dEltYWdlKCktPmRhdGEoKSwgc2R5LCBzdHJpZGUsIDQsIGltYWdlUmVjdC5oZWlnaHQoKSwgaW1h
Z2VSZWN0LndpZHRoKCksIGlzQWxwaGFJbWFnZSgpKTsKICAgICB9CiAKLSAgICByZXN1bHRJbWFn
ZSgpLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNyY0ltYWdlRGF0YS5nZXQoKSwgaW1hZ2VS
ZWN0LCBJbnRQb2ludCgpKTsKKyAgICByZXN1bHRJbWFnZSgpLT5kaXJ0eSgpOworCisgICAgLyog
cmVzdWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShzcmNJbWFnZURhdGEuZ2V0
KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7ICovCiB9CiAKIHZvaWQgRkVHYXVzc2lhbkJsdXI6
OmR1bXAoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63077</attachid>
            <date>2010-07-30 10:35:15 -0700</date>
            <delta_ts>2010-08-06 10:50:03 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0004-tiling_shadow.patch</filename>
            <type>text/plain</type>
            <size>18815</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">RnJvbSA5YzdlNzY0NTc3ZThkZWQ3NzFiMjJiODFiNDQ3MTY4Y2JmYzE5MTY5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+
CkRhdGU6IFR1ZSwgMjcgSnVsIDIwMTAgMTc6NTc6MTcgKzAyMDAKU3ViamVjdDogW1BBVENIIDQv
NV0gMjAxMC0wNy0yNyAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KCiAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIE5lZWQgYSBzaG9ydCBk
ZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCgogICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9P
UFMhKQoKICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgogICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcDoKICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CiAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CiAgICAgICAgKFdlYkNvcmU6OmRyYXdQYXRoU2hh
ZG93KToKICAgICAgICAoV2ViQ29yZTo6ZHJhd0JvcmRlcmxlc3NSZWN0U2hhZG93KToKICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjcmVhdGVQbGF0Zm9ybVNoYWRvdyk6CiAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zhc3RTaGFkb3cpOgogICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CiAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcDoKICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6OmRyYXcpOgogICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuaDoKICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZWxlYXNlUmVzdWx0
SW1hZ2UpOgotLS0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmgg
ICAgICAgIHwgICAgNyArLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fp
cm8uY3BwICAgICAgfCAgICAyICstCiAuLi4vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwICAgICAgICB8ICAyMTUgKysrKysrKysrKysrKysrKysrKy0KIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAgICAgIHwgICAgMiArLQogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oICAgfCAgICAxICsKIDUg
ZmlsZXMgY2hhbmdlZCwgMjE3IGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQoKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGVmODdjMTQuLjAy
YmFjYTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApA
QCAtMjc3LDcgKzI3Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRB
bHBoYShmbG9hdCk7CiAjaWYgUExBVEZPUk0oQ0FJUk8pCiAgICAgICAgIGZsb2F0IGdldEFscGhh
KCk7Ci0gICAgICAgIHZvaWQgY3JlYXRlUGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1
ZmZlcj4gYnVmZmVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0UmVjdCYg
c2hhZG93UmVjdCwgZmxvYXQgcmFkaXVzKTsKKyAgICAgICAgUGFzc093blB0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlUGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBj
b25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxv
YXQgcmFkaXVzLCBib29sIGJsaXQpOwogICAgICAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVTaGFk
b3dCdWZmZXJEaW1lbnNpb25zKEludFNpemUmIHNoYWRvd0J1ZmZlclNpemUsIEZsb2F0UmVjdCYg
c2hhZG93UmVjdCwgZmxvYXQmIHJhZGl1cywgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBGbG9hdFNpemUmIHNoYWRvd1NpemUsIGZsb2F0IHNoYWRvd0JsdXIpOwogI2VuZGlmCiAK
QEAgLTQxOSw2ICs0MTksMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIEdyYXBo
aWNzQ29udGV4dFByaXZhdGUqIG1fY29tbW9uOwogICAgICAgICBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUqIG1fZGF0YTsgLy8gRGVwcmVjYXRlZDsgbV9jb21tbW9uIGNhbiBqdXN0IGJl
IGRvd25jYXN0ZWQuIFRvIGJlIHJlbW92ZWQuCisKKyNpZiBQTEFURk9STShDQUlSTykKKyAgICAg
ICAgdm9pZCBkcmF3RmFzdFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNz
Q29udGV4dFByaXZhdGUqIGdjcCwgY29uc3QgSW50UmVjdCYgciwgY29uc3QgRmxvYXRTaXplJiB0
b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9h
dFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRp
dXMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSk7CisjZW5kaWYKKwogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRm9udENhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvLmNwcAppbmRleCBkMTRiMzcxLi5lMGQ2YzJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBGb250
OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnQsIGNvbnMKICAgICAgICAgICAgIGNhaXJvX3Jlc3RvcmUoc2hhZG93Q3IpOwogICAg
ICAgICB9CiAgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjciwgMC4wLCAtZXh0ZW50cy5oZWlnaHQp
OwotICAgICAgICBjb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVs
ZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKKyAgICAgICAgY29udGV4
dC0+Y3JlYXRlUGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29s
b3IsIHNoYWRvd1JlY3QsIHJhZGl1cywgdHJ1ZSk7CiAjZWxzZQogICAgICAgICBjYWlyb190cmFu
c2xhdGUoY3IsIHNoYWRvd1NpemUud2lkdGgoKSwgc2hhZG93U2l6ZS5oZWlnaHQoKSk7CiAgICAg
ICAgIGNhaXJvX3Nob3dfZ2x5cGhzKGNyLCBnbHlwaHMsIG51bUdseXBocyk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwCmluZGV4IDM0M2E1YmEuLjIyNWQ5MjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC0yMjEsNyAr
MjIxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGRyYXdQYXRoU2hhZG93KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgR3JhcGhpY3NDb250ZXh0UHJpdmEKICAgICBpZiAoc3Ryb2tlU2hhZG93KQog
ICAgICAgICBzZXRQbGF0Zm9ybVN0cm9rZShjb250ZXh0LCBzaGFkb3dDb250ZXh0LCBnY3ApOwog
Ci0gICAgY29udGV4dC0+Y3JlYXRlUGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2Uo
KSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cyk7CisgICAgY29udGV4dC0+Y3JlYXRl
UGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRv
d1JlY3QsIHJhZGl1cywgdHJ1ZSk7CiAjZW5kaWYKIH0KIApAQCAtNjI1LDcgKzYyNSw3IEBAIHN0
YXRpYyB2b2lkIGRyYXdCb3JkZXJsZXNzUmVjdFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYKICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQg
PSBzaGFkb3dCdWZmZXItPmNvbnRleHQoKTsKICAgICBzaGFkb3dDb250ZXh0LT5maWxsUmVjdChG
bG9hdFJlY3QoRmxvYXRQb2ludChyYWRpdXMsIHJhZGl1cyksIHJlY3Quc2l6ZSgpKSwgcmVjdENv
bG9yLCBEZXZpY2VDb2xvclNwYWNlKTsKIAotICAgIGNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU2hh
ZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRp
dXMpOworICAgIGNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxl
YXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMsIHRydWUpOwogI2VuZGlmCiB9
CiAKQEAgLTkxNCw3ICs5MTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
aGFkb3coRmxvYXRTaXplIGNvbnN0JiBzaXplLCBmbG9hdCwgQ29sb3IgY29ucwogICAgIH0KIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVBsYXRmb3JtU2hhZG93KFBhc3NPd25QdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBjb25zdCBGbG9h
dFJlY3QmIHNoYWRvd1JlY3QsIGZsb2F0IHJhZGl1cykKK1Bhc3NPd25QdHI8SW1hZ2VCdWZmZXI+
IEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1
ZmZlcj4gYnVmZmVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0UmVjdCYg
c2hhZG93UmVjdCwgZmxvYXQgcmFkaXVzLCBib29sIGJsaXQpCiB7CiAjaWYgRU5BQkxFKEZJTFRF
UlMpCiAgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwpAQCAtOTI5LDcgKzkyOSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVQbGF0Zm9ybVNoYWRvdyhQYXNzT3duUHRyPEltYWdl
QnVmZmVyPiBidWZmZXIsIGNvbnN0CiAgICAgaWYgKCFyYWRpdXMgfHwgKCFzZHggJiYgIXNkeSkp
IHsKICAgICAgICAgc2V0Q29sb3IoY3IsIHNoYWRvd0NvbG9yKTsKICAgICAgICAgY2Fpcm9fbWFz
a19zdXJmYWNlKGNyLCBidWZmZXItPmltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCksIHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgLy8gY3JlYXRlIGZpbHRlcgpAQCAtOTQ0LDgg
Kzk0NCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUGxhdGZvcm1TaGFkb3coUGFz
c093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdAogCiAgICAgLy8gTWFzayB0aGUgZmls
dGVyIHdpdGggdGhlIHNoYWRvdyBjb2xvciBhbmQgZHJhdyBpdCB0byB0aGUgY29udGV4dC4KICAg
ICAvLyBNYXNraW5nIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGp1c3QgYmx1ciB0aGUgYWxwaGEgY2hh
bm5lbC4KLSAgICBzZXRDb2xvcihjciwgc2hhZG93Q29sb3IpOwotICAgIGNhaXJvX21hc2tfc3Vy
ZmFjZShjciwgYmx1ci0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKSwgc2hhZG93UmVjdC54KCksIHNoYWRvd1JlY3QueSgpKTsKKyAgICBpZiAoYmxp
dCkgeworICAgICAgICBzZXRDb2xvcihjciwgc2hhZG93Q29sb3IpOworICAgICAgICBjYWlyb19t
YXNrX3N1cmZhY2UoY3IsIGJsdXItPnJlc3VsdEltYWdlKCktPmltYWdlKCktPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCksIHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIHNldENvbG9yKGNyLCBzaGFk
b3dDb2xvcik7ICovCisgICAgICAgIC8qIGNhaXJvX21hc2tfc3VyZmFjZShjciwgYmx1ci0+cmVz
dWx0SW1hZ2UoKS0+aW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSwgc2hhZG93
UmVjdC54KCksIHNoYWRvd1JlY3QueSgpKTsgKi8KKyAgICAgICAgcmV0dXJuIGJsdXItPnJlbGVh
c2VSZXN1bHRJbWFnZSgpOworICAgIH0KICNlbmRpZgogfQogCkBAIC0xMjE0LDYgKzEyMjEsMTk4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0RWxsaXBzZUluUmVjdChjb25zdCBJbnRS
ZWN0JiByKQogICAgIGNsaXBPdXQocCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
RmFzdFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dFByaXZh
dGUqIGdjcCwgY29uc3QgSW50UmVjdCYgciwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVz
LCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRv
bUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSkKK3sKKyNpZiBFTkFCTEUoRklMVEVSUykKKyAgICBGbG9hdFNpemUgc2hh
ZG93U2l6ZTsKKyAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OworICAgIGZsb2F0IHNoYWRvd0Js
dXI7CisgICAgQ29sb3Igc2hhZG93Q29sb3I7CisgICAgaWYgKCFjb250ZXh0LT5nZXRTaGFkb3co
c2hhZG93U2l6ZSwgc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcikpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIENhbGN1bGF0ZSBmaWx0ZXIgdmFsdWVzIHRvIGNyZWF0ZSBh
cHByb3ByaWF0ZSBzaGFkb3cuCisgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKTsKKyAgICBjYWlyb19wYXRoX3QqIHBhdGggPSBjYWlyb19jb3B5X3BhdGgoY3IpOwor
ICAgIGRvdWJsZSB4MCwgeDEsIHkwLCB5MTsKKyAgICBjYWlyb19maWxsX2V4dGVudHMoY3IsICZ4
MCwgJnkwLCAmeDEsICZ5MSk7CisgICAgRmxvYXRSZWN0IHJlY3QoeDAsIHkwLCB4MSAtIHgwLCB5
MSAtIHkwKTsKKworICAgIEludFNpemUgc2hhZG93QnVmZmVyU2l6ZTsKKyAgICBGbG9hdFJlY3Qg
c2hhZG93UmVjdDsKKyAgICBmbG9hdCByYWRpdXMgPSAwOworICAgIEdyYXBoaWNzQ29udGV4dDo6
Y2FsY3VsYXRlU2hhZG93QnVmZmVyRGltZW5zaW9ucyhzaGFkb3dCdWZmZXJTaXplLCBzaGFkb3dS
ZWN0LCByYWRpdXMsIHJlY3QsIHNoYWRvd1NpemUsIHNoYWRvd0JsdXIpOworCisgICAgLy8gc2l6
ZSBvZiB0aGUgdGlsaW5nIGZvciB0aGUgc2lkZXMKKyAgICBpbnQgdGlsZVdpZHRoID0gMTsKKyAg
ICBpbnQgc2hhZG93U2lkZSA9IChyYWRpdXMgKiAyKSArIHRpbGVXaWR0aDsKKyAgICBJbnRTaXpl
IHNtYWxsQnVmZmVyU2l6ZTsKKyAgICAvLyBGSVhNRTogbWF4IG9mIHRoZSByb3VuZGVkIGNvcm5l
cnMgYW5kIHNwcmVhZAorICAgIGZsb2F0IHRpbGVTaXplID0gbWF4KGFicyhzaGFkb3dPZmZzZXQu
d2lkdGgoKSksIGFicyhzaGFkb3dPZmZzZXQuaGVpZ2h0KCkpKSArIHRvcExlZnRSYWRpdXMud2lk
dGgoKTsKKworICAgIHNtYWxsQnVmZmVyU2l6ZS5zZXRXaWR0aChtYXgodGlsZVNpemUgKiAyLCAo
cmFkaXVzICogMikgKyBtYXgodG9wTGVmdFJhZGl1cy53aWR0aCgpLCBib3R0b21MZWZ0UmFkaXVz
LndpZHRoKCkpICsgc2hhZG93U2lkZSArIG1heCh0b3BSaWdodFJhZGl1cy53aWR0aCgpLCBib3R0
b21SaWdodFJhZGl1cy53aWR0aCgpKSkpOworICAgIHNtYWxsQnVmZmVyU2l6ZS5zZXRIZWlnaHQo
bWF4KHRpbGVTaXplICogMiwgKHJhZGl1cyAqIDIpICsgbWF4KHRvcExlZnRSYWRpdXMuaGVpZ2h0
KCksIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpKSArIHNoYWRvd1NpZGUgKyBtYXgoYm90dG9tTGVm
dFJhZGl1cy5oZWlnaHQoKSwgYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpKSk7CisKKyAgICBp
ZiAoKChzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSA8IHNoYWRvd0J1ZmZlclNpemUud2lkdGgoKSkg
JiYgKHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSA8IHNoYWRvd0J1ZmZlclNpemUuaGVpZ2h0KCkp
KSAmJiAocmFkaXVzID4gMCkpIHsKKyAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzbWFsbEJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc21hbGxCdWZmZXJTaXplKTsKKworICAgICAgICBJ
bnRSZWN0IHNtYWxsID0gSW50UmVjdChyYWRpdXMsIHJhZGl1cywgc21hbGxCdWZmZXJTaXplLndp
ZHRoKCkgLSAocmFkaXVzICogMiksIHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSAtIChyYWRpdXMg
KiAyKSk7CisKKyAgICAgICAgLy8gRHJhdyBzaGFkb3cgaW50byBhIG5ldyBJbWFnZUJ1ZmZlci4K
KyAgICAgICAgY2Fpcm9fdCogc21hbGxCdWZmZXJDb250ZXh0ID0gc21hbGxCdWZmZXItPmNvbnRl
eHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgICAgIGNvcHlDb250ZXh0UHJvcGVydGllcyhj
ciwgc21hbGxCdWZmZXJDb250ZXh0KTsKKyAgICAgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJv
Q29udGV4dChzbWFsbEJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwgUGF0aDo6
Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShzbWFsbCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRp
dXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7CisgICAgICAgIHNldFBs
YXRmb3JtRmlsbChjb250ZXh0LCBzbWFsbEJ1ZmZlckNvbnRleHQsIGdjcCk7CisKKyAgICAgICAg
T3duUHRyPEltYWdlQnVmZmVyPiBzaGFkb3dCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNt
YWxsQnVmZmVyU2l6ZSk7CisKKyAgICAgICAgc21hbGwuc2V0V2lkdGgoc21hbGxCdWZmZXJTaXpl
LndpZHRoKCkgKyAocmFkaXVzICogMikpOworICAgICAgICBzbWFsbC5zZXRIZWlnaHQoc21hbGxC
dWZmZXJTaXplLmhlaWdodCgpICsgKHJhZGl1cyAqIDIpKTsKKworICAgICAgICBPd25QdHI8SW1h
Z2VCdWZmZXI+IGFscGhhU2hhZG93QnVmZmVyID0gY29udGV4dC0+Y3JlYXRlUGxhdGZvcm1TaGFk
b3coc21hbGxCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc21hbGwsIHJhZGl1cywgZmFs
c2UpOworCisgICAgICAgIC8vIE5vIHNoYWRvdworICAgICAgICBpZiAoIWFscGhhU2hhZG93QnVm
ZmVyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhaXJvX3QqIHNoYWRvd0NvbnRl
eHQgPSBzaGFkb3dCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgICAg
IHNldENvbG9yKHNoYWRvd0NvbnRleHQsIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgY2Fpcm9fbWFz
a19zdXJmYWNlKHNoYWRvd0NvbnRleHQsIGFscGhhU2hhZG93QnVmZmVyLT5pbWFnZSgpLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpLCAwLCAwKTsKKworICAgICAgICAvLyB0b3Agc2lkZQor
ICAgICAgICBmbG9hdCB0aWxlSGVpZ2h0ID0gcmFkaXVzICsgdGlsZVNpemU7CisgICAgICAgIEZs
b2F0UmVjdCB0aWxlUmVjdCA9IEZsb2F0UmVjdChyYWRpdXMgKyB0b3BMZWZ0UmFkaXVzLndpZHRo
KCkgKyByYWRpdXMsIDAsIHRpbGVXaWR0aCwgdGlsZUhlaWdodCk7CisgICAgICAgIEFmZmluZVRy
YW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtOworICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBG
bG9hdFJlY3Qoc2hhZG93UmVjdC54KCkgKyB0b3BMZWZ0UmFkaXVzLndpZHRoKCkgKyAyICogcmFk
aXVzLCBzaGFkb3dSZWN0LnkoKSwgc2hhZG93UmVjdC53aWR0aCgpIC0gdG9wTGVmdFJhZGl1cy53
aWR0aCgpIC0gdG9wUmlnaHRSYWRpdXMud2lkdGgoKSAtIHJhZGl1cyAqIDQsIHRpbGVIZWlnaHQp
OworICAgICAgICBGbG9hdFBvaW50IHBoYXNlID0gRmxvYXRQb2ludChkZXN0UmVjdC54KCkgLSB0
aWxlUmVjdC54KCksIGRlc3RSZWN0LnkoKSAtIHRpbGVSZWN0LnkoKSk7CisKKyAgICAgICAgcGF0
dGVyblRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICAgICAgc2hhZG93QnVmZmVyLT5pbWFn
ZSgpLT5kcmF3UGF0dGVybihjb250ZXh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSwgY29sb3JTcGFj
ZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAgICAgIC8vIHJpZ2h0IHNp
ZGUKKyAgICAgICAgdGlsZVJlY3Quc2V0WChzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSAtIHRpbGVI
ZWlnaHQpOworICAgICAgICB0aWxlUmVjdC5zZXRZKHJhZGl1cyArIHRvcFJpZ2h0UmFkaXVzLmhl
aWdodCgpICsgcmFkaXVzKTsKKyAgICAgICAgdGlsZVJlY3Quc2V0V2lkdGgodGlsZUhlaWdodCk7
CisgICAgICAgIHRpbGVSZWN0LnNldEhlaWdodCh0aWxlV2lkdGgpOworICAgICAgICBkZXN0UmVj
dC5zZXRYKHNoYWRvd1JlY3QueCgpICsgMiAqIHJhZGl1cyArIHJlY3Qud2lkdGgoKSAtIHRpbGVI
ZWlnaHQpOworICAgICAgICBkZXN0UmVjdC5zZXRZKHNoYWRvd1JlY3QueSgpICsgdG9wUmlnaHRS
YWRpdXMuaGVpZ2h0KCkgKyAyICogcmFkaXVzKTsKKyAgICAgICAgZGVzdFJlY3Quc2V0V2lkdGgo
dGlsZUhlaWdodCk7CisgICAgICAgIGRlc3RSZWN0LnNldEhlaWdodChzaGFkb3dSZWN0LmhlaWdo
dCgpIC0gdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkgLSBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQo
KSAtIHJhZGl1cyAqIDQpOworICAgICAgICBwaGFzZS5zZXRYKGRlc3RSZWN0LngoKSAtIHRpbGVS
ZWN0LngoKSk7CisgICAgICAgIHBoYXNlLnNldFkoZGVzdFJlY3QueSgpIC0gdGlsZVJlY3QueSgp
KTsKKworICAgICAgICBzaGFkb3dCdWZmZXItPmltYWdlKCktPmRyYXdQYXR0ZXJuKGNvbnRleHQs
IHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBk
ZXN0UmVjdCk7CisKKyAgICAgICAgLy8gYm90dG9tIHNpZGUKKyAgICAgICAgdGlsZVJlY3Quc2V0
WChyYWRpdXMgKyBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCkgKyByYWRpdXMpOworICAgICAgICB0
aWxlUmVjdC5zZXRZKHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSAtIHRpbGVIZWlnaHQpOworICAg
ICAgICB0aWxlUmVjdC5zZXRXaWR0aCh0aWxlV2lkdGgpOworICAgICAgICB0aWxlUmVjdC5zZXRI
ZWlnaHQodGlsZUhlaWdodCk7CisgICAgICAgIGRlc3RSZWN0LnNldFgoc2hhZG93UmVjdC54KCkg
KyBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpICsgMiAqIHJhZGl1cyk7CisgICAgICAgIGRlc3RS
ZWN0LnNldFkoc2hhZG93UmVjdC55KCkgKyAyICogcmFkaXVzICsgcmVjdC5oZWlnaHQoKSAtIHRp
bGVIZWlnaHQpOworICAgICAgICBkZXN0UmVjdC5zZXRXaWR0aChzaGFkb3dSZWN0LndpZHRoKCkg
LSBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCkgLSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpIC0g
cmFkaXVzICogNCk7CisgICAgICAgIGRlc3RSZWN0LnNldEhlaWdodCh0aWxlSGVpZ2h0KTsKKyAg
ICAgICAgcGhhc2Uuc2V0WChkZXN0UmVjdC54KCkgLSB0aWxlUmVjdC54KCkpOworICAgICAgICBw
aGFzZS5zZXRZKGRlc3RSZWN0LnkoKSAtIHRpbGVSZWN0LnkoKSk7CisKKyAgICAgICAgc2hhZG93
QnVmZmVyLT5pbWFnZSgpLT5kcmF3UGF0dGVybihjb250ZXh0LCB0aWxlUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFz
ZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAgICAg
IC8vIGxlZnQgc2lkZQorICAgICAgICB0aWxlUmVjdC5zZXRYKDApOworICAgICAgICB0aWxlUmVj
dC5zZXRZKHJhZGl1cyArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkgKyByYWRpdXMpOworICAgICAg
ICB0aWxlUmVjdC5zZXRXaWR0aCh0aWxlSGVpZ2h0KTsKKyAgICAgICAgdGlsZVJlY3Quc2V0SGVp
Z2h0KHRpbGVXaWR0aCk7CisgICAgICAgIGRlc3RSZWN0LnNldFgoc2hhZG93UmVjdC54KCkpOwor
ICAgICAgICBkZXN0UmVjdC5zZXRZKHNoYWRvd1JlY3QueSgpICsgdG9wTGVmdFJhZGl1cy5oZWln
aHQoKSArIDIgKiByYWRpdXMpOworICAgICAgICBkZXN0UmVjdC5zZXRXaWR0aCh0aWxlSGVpZ2h0
KTsKKyAgICAgICAgZGVzdFJlY3Quc2V0SGVpZ2h0KHNoYWRvd1JlY3QuaGVpZ2h0KCkgLSB0b3BM
ZWZ0UmFkaXVzLmhlaWdodCgpIC0gYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSAtIHJhZGl1cyAq
IDQpOworICAgICAgICBwaGFzZS5zZXRYKGRlc3RSZWN0LngoKSAtIHRpbGVSZWN0LngoKSk7Cisg
ICAgICAgIHBoYXNlLnNldFkoZGVzdFJlY3QueSgpIC0gdGlsZVJlY3QueSgpKTsKKworICAgICAg
ICBzaGFkb3dCdWZmZXItPmltYWdlKCktPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHRpbGVSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisK
KyAgICAgICAgLy8gdG9wIGxlZnQgY29ybmVyCisgICAgICAgIHRpbGVSZWN0LnNldFgoMCk7Cisg
ICAgICAgIHRpbGVSZWN0LnNldFkoMCk7CisgICAgICAgIHRpbGVSZWN0LnNldFdpZHRoKDIgKiBy
YWRpdXMgKyB0b3BMZWZ0UmFkaXVzLndpZHRoKCkpOworICAgICAgICB0aWxlUmVjdC5zZXRIZWln
aHQoMiAqIHJhZGl1cyArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkpOworICAgICAgICBkZXN0UmVj
dC5zZXRYKHNoYWRvd1JlY3QueCgpKTsKKyAgICAgICAgZGVzdFJlY3Quc2V0WShzaGFkb3dSZWN0
LnkoKSk7CisgICAgICAgIGRlc3RSZWN0LnNldFdpZHRoKHRpbGVSZWN0LndpZHRoKCkpOworICAg
ICAgICBkZXN0UmVjdC5zZXRIZWlnaHQodGlsZVJlY3QuaGVpZ2h0KCkpOworICAgICAgICBwaGFz
ZS5zZXRYKGRlc3RSZWN0LngoKSAtIHRpbGVSZWN0LngoKSk7CisgICAgICAgIHBoYXNlLnNldFko
ZGVzdFJlY3QueSgpIC0gdGlsZVJlY3QueSgpKTsKKworICAgICAgICBzaGFkb3dCdWZmZXItPmlt
YWdlKCktPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNw
YWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAgICAgICAgLy8gdG9wIHJp
Z2h0IGNvcm5lcgorICAgICAgICB0aWxlUmVjdC5zZXRYKHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgp
IC0gMiAqIHJhZGl1cyAtIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkpOworICAgICAgICB0aWxlUmVj
dC5zZXRZKDApOworICAgICAgICB0aWxlUmVjdC5zZXRXaWR0aCgyICogcmFkaXVzICsgdG9wUmln
aHRSYWRpdXMud2lkdGgoKSk7CisgICAgICAgIHRpbGVSZWN0LnNldEhlaWdodCgyICogcmFkaXVz
ICsgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkpOworICAgICAgICBkZXN0UmVjdC5zZXRYKHNoYWRv
d1JlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gdG9wUmlnaHRSYWRpdXMud2lkdGgoKSk7CisgICAg
ICAgIGRlc3RSZWN0LnNldFkoc2hhZG93UmVjdC55KCkpOworICAgICAgICBkZXN0UmVjdC5zZXRX
aWR0aCh0aWxlUmVjdC53aWR0aCgpKTsKKyAgICAgICAgZGVzdFJlY3Quc2V0SGVpZ2h0KHRpbGVS
ZWN0LmhlaWdodCgpKTsKKyAgICAgICAgcGhhc2Uuc2V0WChkZXN0UmVjdC54KCkgLSB0aWxlUmVj
dC54KCkpOworICAgICAgICBwaGFzZS5zZXRZKGRlc3RSZWN0LnkoKSAtIHRpbGVSZWN0LnkoKSk7
CisKKyAgICAgICAgc2hhZG93QnVmZmVyLT5pbWFnZSgpLT5kcmF3UGF0dGVybihjb250ZXh0LCB0
aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwaGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVz
dFJlY3QpOworCisgICAgICAgIC8vIGJvdHRvbSByaWdodCBjb3JuZXIKKyAgICAgICAgdGlsZVJl
Y3Quc2V0WChzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSAtIDIgKiByYWRpdXMgLSBib3R0b21SaWdo
dFJhZGl1cy53aWR0aCgpKTsKKyAgICAgICAgdGlsZVJlY3Quc2V0WShzbWFsbEJ1ZmZlclNpemUu
aGVpZ2h0KCkgLSAyICogcmFkaXVzIC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpOworICAg
ICAgICB0aWxlUmVjdC5zZXRXaWR0aCgyICogcmFkaXVzICsgYm90dG9tUmlnaHRSYWRpdXMud2lk
dGgoKSk7CisgICAgICAgIHRpbGVSZWN0LnNldEhlaWdodCgyICogcmFkaXVzICsgYm90dG9tUmln
aHRSYWRpdXMuaGVpZ2h0KCkpOworICAgICAgICBkZXN0UmVjdC5zZXRYKHNoYWRvd1JlY3QueCgp
ICsgcmVjdC53aWR0aCgpIC0gdG9wUmlnaHRSYWRpdXMud2lkdGgoKSk7CisgICAgICAgIGRlc3RS
ZWN0LnNldFkoc2hhZG93UmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC0gYm90dG9tUmlnaHRSYWRp
dXMuaGVpZ2h0KCkpOworICAgICAgICBkZXN0UmVjdC5zZXRXaWR0aCh0aWxlUmVjdC53aWR0aCgp
KTsKKyAgICAgICAgZGVzdFJlY3Quc2V0SGVpZ2h0KHRpbGVSZWN0LmhlaWdodCgpKTsKKyAgICAg
ICAgcGhhc2Uuc2V0WChkZXN0UmVjdC54KCkgLSB0aWxlUmVjdC54KCkpOworICAgICAgICBwaGFz
ZS5zZXRZKGRlc3RSZWN0LnkoKSAtIHRpbGVSZWN0LnkoKSk7CisKKyAgICAgICAgc2hhZG93QnVm
ZmVyLT5pbWFnZSgpLT5kcmF3UGF0dGVybihjb250ZXh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSwg
Y29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAgICAgIC8v
IGJvdHRvbSBsZWZ0IGNvcm5lcgorICAgICAgICB0aWxlUmVjdC5zZXRYKDApOworICAgICAgICB0
aWxlUmVjdC5zZXRZKHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSAtIDIgKiByYWRpdXMgLSBib3R0
b21SaWdodFJhZGl1cy5oZWlnaHQoKSk7CisgICAgICAgIHRpbGVSZWN0LnNldFdpZHRoKDIgKiBy
YWRpdXMgKyBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCkpOworICAgICAgICB0aWxlUmVjdC5zZXRI
ZWlnaHQoMiAqIHJhZGl1cyArIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkpOworICAgICAgICBk
ZXN0UmVjdC5zZXRYKHNoYWRvd1JlY3QueCgpKTsKKyAgICAgICAgZGVzdFJlY3Quc2V0WShzaGFk
b3dSZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkgLSBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSk7
CisgICAgICAgIGRlc3RSZWN0LnNldFdpZHRoKHRpbGVSZWN0LndpZHRoKCkpOworICAgICAgICBk
ZXN0UmVjdC5zZXRIZWlnaHQodGlsZVJlY3QuaGVpZ2h0KCkpOworICAgICAgICBwaGFzZS5zZXRY
KGRlc3RSZWN0LngoKSAtIHRpbGVSZWN0LngoKSk7CisgICAgICAgIHBoYXNlLnNldFkoZGVzdFJl
Y3QueSgpIC0gdGlsZVJlY3QueSgpKTsKKworICAgICAgICBzaGFkb3dCdWZmZXItPmltYWdlKCkt
PmRyYXdQYXR0ZXJuKGNvbnRleHQsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBD
b21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBDcmVhdGUgc3VpdGFibHktc2l6ZWQgSW1hZ2VCdWZmZXIgdG8gaG9sZCB0aGUgc2hhZG93Lgor
ICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNoYWRvd0J1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoc2hhZG93QnVmZmVyU2l6ZSk7CisKKyAgICAgICAgLy8gRHJhdyBzaGFkb3cgaW50byBh
IG5ldyBJbWFnZUJ1ZmZlci4KKyAgICAgICAgY2Fpcm9fdCogc2hhZG93Q29udGV4dCA9IHNoYWRv
d0J1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICAgICAgY29weUNvbnRl
eHRQcm9wZXJ0aWVzKGNyLCBzaGFkb3dDb250ZXh0KTsKKyAgICAgICAgY2Fpcm9fdHJhbnNsYXRl
KHNoYWRvd0NvbnRleHQsIC1yZWN0LngoKSArIHJhZGl1cywgLXJlY3QueSgpICsgcmFkaXVzKTsK
KyAgICAgICAgY2Fpcm9fbmV3X3BhdGgoc2hhZG93Q29udGV4dCk7CisgICAgICAgIGNhaXJvX2Fw
cGVuZF9wYXRoKHNoYWRvd0NvbnRleHQsIHBhdGgpOworCisgICAgICAgIHNldFBsYXRmb3JtRmls
bChjb250ZXh0LCBzaGFkb3dDb250ZXh0LCBnY3ApOworCisgICAgICAgIGNvbnRleHQtPmNyZWF0
ZVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFk
b3dSZWN0LCByYWRpdXMsIHRydWUpOworICAgIH0KKyNlbmRpZgorfQorCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEludFNpemUm
IHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21M
ZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTEy
MjIsOCArMTQyMSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNv
bnN0IEludFJlY3QmIHIsIGNvbnN0IEludFNpemUmIHRvcExlZnQsCiAgICAgY2Fpcm9fdCogY3Ig
PSBtX2RhdGEtPmNyOwogICAgIGNhaXJvX3NhdmUoY3IpOwogICAgIGFwcGVuZFdlYkNvcmVQYXRo
VG9DYWlyb0NvbnRleHQoY3IsIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUociwgdG9wTGVm
dCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CisgICAgLy8gRklYTUU6IGF2
b2lkIGNyZWF0aW5nIHRoaXMgcGF0aCBpZiB3ZSBhcmUgZ29pbmcgdG8gZG8gaXQgZmFzdAogICAg
IHNldENvbG9yKGNyLCBjb2xvcik7Ci0gICAgZHJhd1BhdGhTaGFkb3codGhpcywgbV9jb21tb24s
IHRydWUsIGZhbHNlKTsKKworICAgIGRyYXdGYXN0U2hhZG93KHRoaXMsIG1fY29tbW9uLCByLCB0
b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQsIGNvbG9yU3BhY2UpOwog
ICAgIGNhaXJvX2ZpbGwoY3IpOwogICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAKaW5kZXggNTQxNGM3OS4u
ZjE0ZjI3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUNhaXJvLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fp
cm8uY3BwCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG8KICAgICAg
ICAgY2Fpcm9fcmVjdGFuZ2xlKHNoYWRvd0NvbnRleHQsIDAsIDAsIGRzdFJlY3Qud2lkdGgoKSwg
ZHN0UmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIGNhaXJvX2ZpbGwoc2hhZG93Q29udGV4dCk7CiAK
LSAgICAgICAgY29udGV4dC0+Y3JlYXRlUGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVh
c2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cyk7CisgICAgICAgIGNvbnRleHQt
PmNyZWF0ZVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9y
LCBzaGFkb3dSZWN0LCByYWRpdXMsIHRydWUpOwogICAgIH0KICNlbmRpZgogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggM2I4YjVh
My4uYmI0MzI4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaApAQCAtNjUsNiArNjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgLy8gVGhlIHJlc3VsdCBpcyBib3VuZGVkIGJ5IHRoZSBzaXplIG9mIHRoZSBmaWx0ZXIg
cHJpbWl0aXZlIHRvIHNhdmUgcmVzb3VyY2VzCiAgICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJ
bWFnZSgpIHsgcmV0dXJuIG1fZWZmZWN0QnVmZmVyLmdldCgpOyB9CisgICAgICAgIFBhc3NPd25Q
dHI8SW1hZ2VCdWZmZXIqPiByZWxlYXNlUmVzdWx0SW1hZ2UoKSB7IHJldHVybiBtX2VmZmVjdEJ1
ZmZlci5yZWxlYXNlKCk7IH0KICAgICAgICAgdm9pZCBzZXRFZmZlY3RCdWZmZXIoUGFzc093blB0
cjxJbWFnZUJ1ZmZlcj4gZWZmZWN0QnVmZmVyKSB7IG1fZWZmZWN0QnVmZmVyID0gZWZmZWN0QnVm
ZmVyOyB9CiAKICAgICAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1
YnJlZ2lvbnMoRmlsdGVyKiwgRmlsdGVyRWZmZWN0KiwgRmlsdGVyRWZmZWN0Kik7Ci0tIAoxLjcu
MS4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63079</attachid>
            <date>2010-07-30 10:36:56 -0700</date>
            <delta_ts>2010-08-12 02:04:37 -0700</delta_ts>
            <desc>Updated patch for gauss operations without put and get</desc>
            <filename>0005-gaus_array.patch</filename>
            <type>text/plain</type>
            <size>7291</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">RnJvbSA3MDY3ZGYwOWIzNjJiMjkwMWJjNjAyYTExMDg1NWQ5MTQ4ZWI3NWRkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+
CkRhdGU6IFR1ZSwgMjcgSnVsIDIwMTAgMTk6MDM6MjQgKzAyMDAKU3ViamVjdDogW1BBVENIIDUv
NV0gMjAxMC0wNy0yNyAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KCiAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIE5lZWQgYSBzaG9ydCBk
ZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCgogICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9P
UFMhKQoKICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CiAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDoKICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRhdGEpOgogICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6ZGlydHkpOgogICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHA6CiAgICAgICAgKFdlYkNvcmU6OmJveEJsdXIpOgogICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6YXBwbHkpOgotLS0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuaCAgICAgICAgICAgIHwgICAgMyArKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwICAgfCAgIDEwICsrKysrKwogLi4uL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwICAgfCAgIDM1ICsrKysrKysrKysrLS0t
LS0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygt
KQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCBjYjVkNjNmLi5j
MjhiZGU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC04NSw2
ICs4NSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFzc1JlZlB0cjxJbWFnZURh
dGE+IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAg
ICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0
IEludFJlY3QmKSBjb25zdDsKIAorICAgICAgICB1bnNpZ25lZCBjaGFyKiBkYXRhKCkgY29uc3Q7
CisgICAgICAgIHZvaWQgZGlydHkoKSBjb25zdDsKKwogICAgICAgICB2b2lkIHB1dFVubXVsdGlw
bGllZEltYWdlRGF0YShJbWFnZURhdGEqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50KTsKICAgICAgICAgdm9pZCBwdXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKEltYWdlRGF0YSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQpOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCmluZGV4IGMyOThlMTguLjYyMWM5YTQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcApAQCAtMTQwLDYgKzE0MCwxNiBAQCB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9y
bVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQogICAg
IGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUgKG1fZGF0YS5tX3N1cmZhY2UsIDAs
IDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwogfQogCit1bnNpZ25lZCBjaGFy
KiBJbWFnZUJ1ZmZlcjo6ZGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2RhdGEobV9kYXRhLm1fc3VyZmFjZSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6
OmRpcnR5KCkgY29uc3QKK3sKKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHkgKG1fZGF0YS5t
X3N1cmZhY2UpOworfQorCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVsdGlwbGllZD4KIFBhc3NSZWZQ
dHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW1h
Z2VCdWZmZXJEYXRhJiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogewpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXgg
ZTQwOWVhZi4uODNmMDg0MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgRkVHYXVz
c2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblkoZmxvYXQgeSkKICAgICBtX3N0ZFkgPSB5OwogfQog
Ci1zdGF0aWMgdm9pZCBib3hCbHVyKENhbnZhc1BpeGVsQXJyYXkqJiBzcmNQaXhlbEFycmF5LCBD
YW52YXNQaXhlbEFycmF5KiYgZHN0UGl4ZWxBcnJheSwKK3N0YXRpYyB2b2lkIGJveEJsdXIodW5z
aWduZWQgY2hhciogc3JjUGl4ZWxBcnJheSwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwK
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0
LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0
SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UpCiB7CiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBlZmZl
Y3RIZWlnaHQ7ICsreSkgewpAQCAtODEsMTYgKzgxLDE2IEBAIHN0YXRpYyB2b2lkIGJveEJsdXIo
Q2FudmFzUGl4ZWxBcnJheSomIHNyY1BpeGVsQXJyYXksIENhbnZhc1BpeGVsQXJyYXkqJiBkc3RQ
aXhlCiAgICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwKICAgICAgICAgICAgIGludCBtYXhL
ZXJuZWxTaXplID0gc3RkOjptaW4oZHhSaWdodCwgZWZmZWN0V2lkdGgpOwogICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyArK2kpCi0gICAgICAgICAgICAgICAg
c3VtICs9IHNyY1BpeGVsQXJyYXktPmdldChsaW5lICsgaSAqIHN0cmlkZSArIGNoYW5uZWwpOwor
ICAgICAgICAgICAgICAgIHN1bSArPSBzcmNQaXhlbEFycmF5W2xpbmUgKyBpICogc3RyaWRlICsg
Y2hhbm5lbF07CiAKICAgICAgICAgICAgIC8vIEJsdXJyaW5nCiAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IGVmZmVjdFdpZHRoOyArK3gpIHsKICAgICAgICAgICAgICAgICBpbnQgcGl4
ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGUgKyBjaGFubmVsOwotICAgICAgICAgICAg
ICAgIGRzdFBpeGVsQXJyYXktPnNldChwaXhlbEJ5dGVPZmZzZXQsIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KHN1bSAvIGR4KSk7CisgICAgICAgICAgICAgICAgZHN0UGl4ZWxBcnJheVtwaXhl
bEJ5dGVPZmZzZXRdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc3VtIC8gZHgpOwogICAg
ICAgICAgICAgICAgIGlmICh4ID49IGR4TGVmdCkKLSAgICAgICAgICAgICAgICAgICAgc3VtIC09
IHNyY1BpeGVsQXJyYXktPmdldChwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGUpOwor
ICAgICAgICAgICAgICAgICAgICBzdW0gLT0gc3JjUGl4ZWxBcnJheVtwaXhlbEJ5dGVPZmZzZXQg
LSBkeExlZnQgKiBzdHJpZGVdOwogICAgICAgICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8IGVm
ZmVjdFdpZHRoKQotICAgICAgICAgICAgICAgICAgICBzdW0gKz0gc3JjUGl4ZWxBcnJheS0+Z2V0
KHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGUpOworICAgICAgICAgICAgICAgICAg
ICBzdW0gKz0gc3JjUGl4ZWxBcnJheVtwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRl
XTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChhbHBoYUltYWdlKSAvLyBTb3VyY2Ug
aW1hZ2UgaXMgYmxhY2ssIGl0IGp1c3QgaGFzIGRpZmZlcmVudCBhbHBoYSB2YWx1ZXMKICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTEzOCwxMCArMTM4LDEyIEBAIHZvaWQgRkVHYXVzc2lhbkJs
dXI6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogICAgIHNldElzQWxwaGFJbWFnZShtX2luLT5pc0Fs
cGhhSW1hZ2UoKSk7CiAKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gY2FsY3VsYXRl
RHJhd2luZ0ludFJlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpOwotICAgIFJlZlB0cjxJbWFn
ZURhdGE+IHNyY0ltYWdlRGF0YShtX2luLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KSk7CiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50
UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKKyAgICAvLyBGSVhNRTogZmx1c2ggaW1h
Z2U/CiAKICAgICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKSB7CisgICAgICAgIC8vIEZJWE1FOiBy
ZW1vdmUgZ2V0cHJlbXVsdGlwbGllZCBvcGVyYXRpb24gYWxzbyBpbiB0aGlzIGNhc2UKKyAgICAg
ICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhKG1faW4tPnJlc3VsdEltYWdlKCktPmdl
dFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpKTsKICAgICAgICAgcmVz
dWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShzcmNJbWFnZURhdGEuZ2V0KCks
IGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNTQs
MzMgKzE1NiwzNCBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjphcHBseShGaWx0ZXIqIGZpbHRlcikK
ICAgICBpZiAobV9zdGRZKQogICAgICAgICBrZXJuZWxTaXplWSA9IG1heCgyVSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGZsb29yKG1fc3RkWSAqIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhl
aWdodCgpICogZ0dhdXNzaWFuS2VybmVsRmFjdG9yICsgMC41ZikpKTsKIAotICAgIENhbnZhc1Bp
eGVsQXJyYXkqIHNyY1BpeGVsQXJyYXkoc3JjSW1hZ2VEYXRhLT5kYXRhKCkpOwogICAgIFJlZlB0
cjxJbWFnZURhdGE+IHRtcEltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53
aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOwogICAgIENhbnZhc1BpeGVsQXJyYXkqIHRtcFBp
eGVsQXJyYXkodG1wSW1hZ2VEYXRhLT5kYXRhKCkpOworICAgIHVuc2lnbmVkIGNoYXIqIHJlc3Vs
dCA9IG1faW4tPnJlc3VsdEltYWdlKCktPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBjaGFyKiB0bXAg
PSB0bXBQaXhlbEFycmF5LT5kYXRhKCktPmRhdGEoKTsKIAogICAgIGludCBzdHJpZGUgPSA0ICog
aW1hZ2VSZWN0LndpZHRoKCk7CiAgICAgaW50IGR4TGVmdCwgZHhSaWdodCwgZHlMZWZ0LCBkeVJp
Z2h0OwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7CiAgICAgICAgIGlmIChrZXJu
ZWxTaXplWCkgewogICAgICAgICAgICAga2VybmVsUG9zaXRpb24oaSwga2VybmVsU2l6ZVgsIGR4
TGVmdCwgZHhSaWdodCk7Ci0gICAgICAgICAgICBib3hCbHVyKHNyY1BpeGVsQXJyYXksIHRtcFBp
eGVsQXJyYXksIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgaW1hZ2VS
ZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSwgaXNBbHBoYUltYWdlKCkpOworICAgICAg
ICAgICAgYm94Qmx1cihyZXN1bHQsIHRtcCwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwg
NCwgc3RyaWRlLCBpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpLCBpc0FscGhh
SW1hZ2UoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBDYW52YXNQaXhlbEFycmF5
KiBhdXhQaXhlbEFycmF5ID0gdG1wUGl4ZWxBcnJheTsKLSAgICAgICAgICAgIHRtcFBpeGVsQXJy
YXkgPSBzcmNQaXhlbEFycmF5OwotICAgICAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGF1eFBpeGVs
QXJyYXk7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBhdXggPSB0bXA7CisgICAgICAgICAg
ICB0bXAgPSByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQgPSBhdXg7CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAoa2VybmVsU2l6ZVkpIHsKICAgICAgICAgICAgIGtlcm5lbFBvc2l0aW9uKGks
IGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQpOwotICAgICAgICAgICAgYm94Qmx1cih0bXBQ
aXhlbEFycmF5LCBzcmNQaXhlbEFycmF5LCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0LCBz
dHJpZGUsIDQsIGltYWdlUmVjdC5oZWlnaHQoKSwgaW1hZ2VSZWN0LndpZHRoKCksIGlzQWxwaGFJ
bWFnZSgpKTsKKyAgICAgICAgICAgIGJveEJsdXIodG1wLCAoaSAhPSAyKSA/IHJlc3VsdCA6IHJl
c3VsdEltYWdlKCktPmRhdGEoKSwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRl
LCA0LCBpbWFnZVJlY3QuaGVpZ2h0KCksIGltYWdlUmVjdC53aWR0aCgpLCBpc0FscGhhSW1hZ2Uo
KSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBDYW52YXNQaXhlbEFycmF5KiBhdXhQ
aXhlbEFycmF5ID0gdG1wUGl4ZWxBcnJheTsKLSAgICAgICAgICAgIHRtcFBpeGVsQXJyYXkgPSBz
cmNQaXhlbEFycmF5OwotICAgICAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGF1eFBpeGVsQXJyYXk7
CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBhdXggPSB0bXA7CisgICAgICAgICAgICB0bXAg
PSByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQgPSBhdXg7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICByZXN1bHRJbWFnZSgpLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNyY0ltYWdlRGF0
YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICByZXN1bHRJbWFnZSgpLT5kaXJ0
eSgpOwogfQogCiB2b2lkIEZFR2F1c3NpYW5CbHVyOjpkdW1wKCkKLS0gCjEuNy4xLjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>63080</attachid>
            <date>2010-07-30 10:38:53 -0700</date>
            <delta_ts>2010-08-12 02:53:15 -0700</delta_ts>
            <desc>Patch-set with all the patches, for testing purposes</desc>
            <filename>tiling_blur.tar.gz</filename>
            <type>application/x-gzip</type>
            <size>14454</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">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
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63741</attachid>
            <date>2010-08-06 10:50:03 -0700</date>
            <delta_ts>2010-08-10 05:38:18 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>tiling_shadow.patch</filename>
            <type>text/plain</type>
            <size>22744</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">RnJvbSA5ODkwNGQzMTQ3N2M2OWU3ZDIxZTMwYTRjOGE0OWEwOGJjZmVjZWVhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+
CkRhdGU6IFR1ZSwgMjcgSnVsIDIwMTAgMTc6NTc6MTcgKzAyMDAKU3ViamVjdDogW1BBVENIIDEv
Ml0gMjAxMC0wOC0wMiAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KCiAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFtHdGtdIHZlcnkgc2xv
dyBwYWdlIHNjcm9sbGluZyBvbiBiaWcgLXdlYmtpdC1ib3gtc2hhZG93IGFyZWFzCiAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NTgyCgogICAgICAgIEFk
ZCBhIG5ldyBkcmF3RmFzdFNoYWRvdyBtZXRob2QgdG8gcmVuZGVyIGEgYmlnIHNoYWRvdyBkb2lu
ZwogICAgICAgIHRpbGluZyBvZiBwYXJ0cyBvZiBhIHNtYWxsZXIgc2hhZG93LiBXZSBjcmVhdGUg
dGhlIG1pbmltdW0gc2hhZG93CiAgICAgICAgcmVxdWlyZWQgdG8gZ2V0IHRoZSB0aWxlcyB3ZSB3
aWxsIHVzZSB0byByZW5kZXIgdGhlIHJlYWwgc2hhZG93CiAgICAgICAgYW5kIHdlIHVzZSBkcmF3
UGF0dGVybiB3aXRoIHRob3NlIHRpbGVzIHRvIGNyZWF0ZSB0aGUgc2hhZG93LgoKICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgogICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcDoKICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJh
d0dseXBocyk6CiAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5jcHA6CiAgICAgICAgKFdlYkNvcmU6OmRyYXdQYXRoU2hhZG93KToKICAgICAgICAo
V2ViQ29yZTo6ZHJhd0JvcmRlcmxlc3NSZWN0U2hhZG93KToKICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpjcmVhdGVQbGF0Zm9ybVNoYWRvdyk6CiAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd0Zhc3RTaGFkb3cpOgogICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CiAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUNhaXJvLmNwcDoKICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcp
OgogICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZWxlYXNlUmVzdWx0SW1hZ2UpOgotLS0KIFdl
YkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNiAr
KwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCAgICAgICAgfCAg
ICA3ICstCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAgICAg
ICB8ICAgIDIgKy0KIC4uLi9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAg
ICAgICAgIHwgIDI2NCArKysrKysrKysrKysrKysrKysrLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcCAgICAgfCAgICAyICstCiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggICB8ICAgIDEgKwogNiBmaWxlcyBjaGFu
Z2VkLCAyOTIgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwM2E5Mjc1Li5kNzhiOTk4
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI5IEBACisyMDEwLTA4LTAyICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBp
Z2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFtHdGtdIHZlcnkgc2xvdyBwYWdlIHNjcm9sbGluZyBvbiBiaWcgLXdlYmtpdC1ib3gtc2hh
ZG93IGFyZWFzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zOTU4MgorCisgICAgICAgIEFkZCBhIG5ldyBkcmF3RmFzdFNoYWRvdyBtZXRob2QgdG8gcmVu
ZGVyIGEgYmlnIHNoYWRvdyBkb2luZworICAgICAgICB0aWxpbmcgb2YgcGFydHMgb2YgYSBzbWFs
bGVyIHNoYWRvdy4gV2UgY3JlYXRlIHRoZSBtaW5pbXVtIHNoYWRvdworICAgICAgICByZXF1aXJl
ZCB0byBnZXQgdGhlIHRpbGVzIHdlIHdpbGwgdXNlIHRvIHJlbmRlciB0aGUgcmVhbCBzaGFkb3cK
KyAgICAgICAgYW5kIHdlIHVzZSBkcmF3UGF0dGVybiB3aXRoIHRob3NlIHRpbGVzIHRvIGNyZWF0
ZSB0aGUgc2hhZG93LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmRyYXdQYXRoU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdCb3JkZXJsZXNzUmVj
dFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVBsYXRm
b3JtU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zhc3RT
aGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnJlbGVhc2VSZXN1bHRJbWFnZSk6CisKIDIwMTAtMDctMTUgIEFsZWphbmRybyBH
LiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApp
bmRleCA2ZmRkOGE3Li4zNGI1NDNlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKQEAgLTI4MCw3ICsyODAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQpOwogI2lmIFBMQVRGT1JNKENBSVJPKQogICAgICAg
ICBmbG9hdCBnZXRBbHBoYSgpOwotICAgICAgICB2b2lkIGNyZWF0ZVBsYXRmb3JtU2hhZG93KFBh
c3NPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBj
b25zdCBGbG9hdFJlY3QmIHNoYWRvd1JlY3QsIGZsb2F0IHJhZGl1cyk7CisgICAgICAgIFBhc3NP
d25QdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZVBsYXRmb3JtU2hhZG93KFBhc3NPd25QdHI8SW1hZ2VC
dWZmZXI+IGJ1ZmZlciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBjb25zdCBGbG9hdFJlY3Qm
IHNoYWRvd1JlY3QsIGZsb2F0IHJhZGl1cywgYm9vbCBibGl0KTsKICAgICAgICAgc3RhdGljIHZv
aWQgY2FsY3VsYXRlU2hhZG93QnVmZmVyRGltZW5zaW9ucyhJbnRTaXplJiBzaGFkb3dCdWZmZXJT
aXplLCBGbG9hdFJlY3QmIHNoYWRvd1JlY3QsIGZsb2F0JiByYWRpdXMsIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgRmxvYXRTaXplJiBzaGFkb3dTaXplLCBmbG9hdCBzaGFkb3dC
bHVyKTsKICNlbmRpZgogCkBAIC00MjIsNiArNDIyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBtX2NvbW1vbjsKICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGE7IC8vIERlcHJlY2F0ZWQ7IG1fY29t
bW1vbiBjYW4ganVzdCBiZSBkb3duY2FzdGVkLiBUbyBiZSByZW1vdmVkLgorCisjaWYgUExBVEZP
Uk0oQ0FJUk8pCisgICAgICAgIHZvaWQgZHJhd0Zhc3RTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBnY3AsIGNvbnN0IEludFJlY3QmIHIsIGNv
bnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiB0b3BSaWdodFJh
ZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUm
IGJvdHRvbVJpZ2h0UmFkaXVzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpOworI2VuZGlmCisKICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKaW5kZXggZDE0YjM3MS4uZTBkNmMyYyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcApAQCAtMTE0LDcgKzEx
NCw3IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zCiAgICAgICAgICAgICBjYWlyb19yZXN0b3Jl
KHNoYWRvd0NyKTsKICAgICAgICAgfQogICAgICAgICBjYWlyb190cmFuc2xhdGUoY3IsIDAuMCwg
LWV4dGVudHMuaGVpZ2h0KTsKLSAgICAgICAgY29udGV4dC0+Y3JlYXRlUGxhdGZvcm1TaGFkb3co
c2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cyk7
CisgICAgICAgIGNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxl
YXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMsIHRydWUpOwogI2Vsc2UKICAg
ICAgICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCBzaGFkb3dTaXplLndpZHRoKCksIHNoYWRvd1NpemUu
aGVpZ2h0KCkpOwogICAgICAgICBjYWlyb19zaG93X2dseXBocyhjciwgZ2x5cGhzLCBudW1HbHlw
aHMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dENhaXJvLmNwcAppbmRleCBjYmJkYjc5Li43ZGZlYWU3IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkcmF3UGF0aFNoYWRv
dyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dFByaXZhCiAgICAgaWYg
KHN0cm9rZVNoYWRvdykKICAgICAgICAgc2V0UGxhdGZvcm1TdHJva2UoY29udGV4dCwgc2hhZG93
Q29udGV4dCwgZ2NwKTsKIAotICAgIGNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU2hhZG93KHNoYWRv
d0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOworICAg
IGNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNo
YWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMsIHRydWUpOwogI2VuZGlmCiB9CiAKQEAgLTY0
Miw3ICs2NDIsNyBAQCBzdGF0aWMgdm9pZCBkcmF3Qm9yZGVybGVzc1JlY3RTaGFkb3coR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmCiAgICAgR3JhcGhpY3NDb250ZXh0
KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93QnVmZmVyLT5jb250ZXh0KCk7CiAgICAgc2hhZG93Q29u
dGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQocmFkaXVzLCByYWRpdXMpLCByZWN0
LnNpemUoKSksIHJlY3RDb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7CiAKLSAgICBjb250ZXh0LT5j
cmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwg
c2hhZG93UmVjdCwgcmFkaXVzKTsKKyAgICBjb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhz
aGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzLCB0
cnVlKTsKICNlbmRpZgogfQogCkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU2hhZG93KEZsb2F0U2l6ZSBjb25zdCYgc2l6ZSwgZmxvYXQsIENvbG9y
IGNvbnMKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVQbGF0Zm9ybVNo
YWRvdyhQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIsIGNvbnN0IENvbG9yJiBzaGFkb3dD
b2xvciwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBmbG9hdCByYWRpdXMpCitQYXNzT3du
UHRyPEltYWdlQnVmZmVyPiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVBsYXRmb3JtU2hhZG93KFBh
c3NPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBj
b25zdCBGbG9hdFJlY3QmIHNoYWRvd1JlY3QsIGZsb2F0IHJhZGl1cywgYm9vbCBibGl0KQogewog
I2lmIEVOQUJMRShGSUxURVJTKQogICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKQEAgLTk0
Niw3ICs5NDYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUGxhdGZvcm1TaGFkb3co
UGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdAogICAgIGlmICghcmFkaXVzIHx8
ICghc2R4ICYmICFzZHkpKSB7CiAgICAgICAgIHNldENvbG9yKGNyLCBzaGFkb3dDb2xvcik7CiAg
ICAgICAgIGNhaXJvX21hc2tfc3VyZmFjZShjciwgYnVmZmVyLT5pbWFnZSgpLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpLCBzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkpOwotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIC8vIGNyZWF0ZSBm
aWx0ZXIKQEAgLTk2MSw4ICs5NjEsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVBs
YXRmb3JtU2hhZG93KFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QKIAogICAg
IC8vIE1hc2sgdGhlIGZpbHRlciB3aXRoIHRoZSBzaGFkb3cgY29sb3IgYW5kIGRyYXcgaXQgdG8g
dGhlIGNvbnRleHQuCiAgICAgLy8gTWFza2luZyBtYWtlcyBpdCBwb3NzaWJsZSB0byBqdXN0IGJs
dXIgdGhlIGFscGhhIGNoYW5uZWwuCi0gICAgc2V0Q29sb3IoY3IsIHNoYWRvd0NvbG9yKTsKLSAg
ICBjYWlyb19tYXNrX3N1cmZhY2UoY3IsIGJsdXItPnJlc3VsdEltYWdlKCktPmltYWdlKCktPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCksIHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0Lnko
KSk7CisgICAgaWYgKGJsaXQpIHsKKyAgICAgICAgc2V0Q29sb3IoY3IsIHNoYWRvd0NvbG9yKTsK
KyAgICAgICAgY2Fpcm9fbWFza19zdXJmYWNlKGNyLCBibHVyLT5yZXN1bHRJbWFnZSgpLT5pbWFn
ZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpLCBzaGFkb3dSZWN0LngoKSwgc2hhZG93
UmVjdC55KCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1
cm4gYmx1ci0+cmVsZWFzZVJlc3VsdEltYWdlKCk7CisgICAgfQogI2VuZGlmCiB9CiAKQEAgLTEy
MzEsNiArMTIzNiwyNTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRFbGxpcHNlSW5S
ZWN0KGNvbnN0IEludFJlY3QmIHIpCiAgICAgY2xpcE91dChwKTsKIH0KIAorLyoKKyAgVGhpcyBm
dW5jdGlvbiB1c2VzIHRpbGluZyB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgc2hh
ZG93CisgIGRyYXdpbmcgb2Ygcm91bmRlZCByZWN0YW5nbGVzLiBUaGUgY29kZSBiYXNpY2FsbHkg
ZG9lcyB0aGUgZm9sbG93aW5nCisgIHN0ZXBzOgorCisgICAgIDEuIENhbGN1bGF0ZSB0aGUgbWlu
aW11bSByZWN0YW5nbGUgc2l6ZSByZXF1aXJlZCB0byBjcmVhdGUgdGhlCisgICAgIHRpbGVzCisK
KyAgICAgMi4gSWYgdGhhdCBzaXplIGlzIHNtYWxsZXIgdGhhbiB0aGUgcmVhbCByZWN0YW5nbGUg
cmVuZGVyIHRoZSBuZXcKKyAgICAgc21hbGwgcmVjdGFuZ2xlIGFuZCBpdHMgc2hhZG93LCBpbiBv
dGhlciBjYXNlIHJlbmRlciB0aGUgc2hhZG93CisgICAgIG9mIHRoZSByZWFsIHJlY3RhbmdsZS4K
KworICAgICAzLiBDYWxjdWxhdGUgdGhlIHNpemVzIGFuZCBwb3NpdGlvbnMgb2YgdGhlIHRpbGVz
IGFuZCB0aGVpcgorICAgICBkZXN0aW5hdGlvbnMgYW5kIHVzZSBkcmF3UGF0dGVybiB0byByZW5k
ZXIgdGhlIGZpbmFsIHNoYWRvdy4gVGhlCisgICAgIGNvZGUgZGl2aWRlcyB0aGUgcmVuZGVyaW5n
IGluIDggdGlsZXM6CisKKyAgICAgICAgMSB8IDIgfCAzCisgICAgICAgLS0tLS0tLS0tLS0KKyAg
ICAgICAgNCB8ICAgfCA1CisgICAgICAgLS0tLS0tLS0tLS0KKyAgICAgICAgNiB8IDcgfCA4CisK
KyAgICAgVGhlIGNvcm5lcnMgYXJlIGRpcmVjdGx5IGNvcGllZCBmcm9tIHRoZSBzbWFsbCByZWN0
YW5nbGUgdG8gdGhlCisgICAgIHJlYWwgb25lIGFuZCB0aGUgc2lkZSB0aWxlcyBhcmUgMSBwaXhl
bCB3aWR0aCwgd2UgdXNlIHRoZW0gYXMKKyAgICAgdGlsZXMgdG8gY292ZXIgdGhlIGRlc3RpbmF0
aW9uIHNpZGUuIFRoZSBjb3JuZXIgdGlsZXMgYXJlIGJpZ2dlcgorICAgICB0aGFuIGp1c3QgdGhl
IHNpZGUgb2YgdGhlIHJvdW5kZWQgY29ybmVyLCB3ZSBuZWVkIHRvIGluY3JlYXNlIGl0CisgICAg
IGJlY2F1c2UgdGhlIG1vZGlmaWNhdGlvbnMgY2F1c2VkIGJ5IHRoZSBjb3JuZXIgb3ZlciB0aGUg
Ymx1cgorICAgICBlZmZlY3QuCisgKi8KK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmFzdFNo
YWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dFByaXZhdGUqIGdj
cCwgY29uc3QgSW50UmVjdCYgciwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25z
dCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRS
YWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSkKK3sKKyNpZiBFTkFCTEUoRklMVEVSUykKKyAgICBGbG9hdFNpemUgc2hhZG93U2l6
ZTsKKyAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OworICAgIGZsb2F0IHNoYWRvd0JsdXI7Cisg
ICAgQ29sb3Igc2hhZG93Q29sb3I7CisgICAgaWYgKCFjb250ZXh0LT5nZXRTaGFkb3coc2hhZG93
U2l6ZSwgc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcikpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIENhbGN1bGF0ZSBmaWx0ZXIgdmFsdWVzIHRvIGNyZWF0ZSBhcHByb3By
aWF0ZSBzaGFkb3cuCisgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKKyAgICBjYWlyb19wYXRoX3QqIHBhdGggPSBjYWlyb19jb3B5X3BhdGgoY3IpOworICAgIGRv
dWJsZSB4MCwgeDEsIHkwLCB5MTsKKyAgICBjYWlyb19maWxsX2V4dGVudHMoY3IsICZ4MCwgJnkw
LCAmeDEsICZ5MSk7CisgICAgRmxvYXRSZWN0IHJlY3QoeDAsIHkwLCB4MSAtIHgwLCB5MSAtIHkw
KTsKKworICAgIEludFNpemUgc2hhZG93QnVmZmVyU2l6ZTsKKyAgICBGbG9hdFJlY3Qgc2hhZG93
UmVjdDsKKyAgICBmbG9hdCByYWRpdXMgPSAwOworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2FsY3Vs
YXRlU2hhZG93QnVmZmVyRGltZW5zaW9ucyhzaGFkb3dCdWZmZXJTaXplLCBzaGFkb3dSZWN0LCBy
YWRpdXMsIHJlY3QsIHNoYWRvd1NpemUsIHNoYWRvd0JsdXIpOworCisgICAgLy8gc2l6ZSBvZiB0
aGUgdGlsaW5nIGZvciB0aGUgc2lkZXMKKyAgICBpbnQgdGlsZVdpZHRoID0gMTsKKyAgICBpbnQg
c2hhZG93U2lkZSA9IChyYWRpdXMgKiAyKSArIHRpbGVXaWR0aDsKKyAgICBJbnRTaXplIHNtYWxs
QnVmZmVyU2l6ZTsKKworICAgIGZsb2F0IG9mZnNldFdpZHRoID0gc2hhZG93T2Zmc2V0LndpZHRo
KCk7CisgICAgaWYgKG9mZnNldFdpZHRoID4gMCkKKyAgICAgICAgb2Zmc2V0V2lkdGggKz0gbWF4
KHRvcFJpZ2h0UmFkaXVzLndpZHRoKCksIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkpOworICAg
IGVsc2UgaWYgKG9mZnNldFdpZHRoIDwgMCkKKyAgICAgICAgb2Zmc2V0V2lkdGggPSAtb2Zmc2V0
V2lkdGggKyBtYXgodG9wTGVmdFJhZGl1cy53aWR0aCgpLCBib3R0b21MZWZ0UmFkaXVzLndpZHRo
KCkpOworCisgICAgZmxvYXQgb2Zmc2V0SGVpZ2h0ID0gc2hhZG93T2Zmc2V0LmhlaWdodCgpOwor
ICAgIGlmIChvZmZzZXRIZWlnaHQgPiAwKSB7CisgICAgICAgIGlmIChvZmZzZXRIZWlnaHQgPiBt
aW4gKGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCksIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgp
KSkKKyAgICAgICAgICAgIG9mZnNldFdpZHRoID0gbWF4KG9mZnNldFdpZHRoLCAyICogcmFkaXVz
ICsgbWF4KGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCksIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgo
KSkpOworICAgICAgICBvZmZzZXRIZWlnaHQgKz0gbWF4KGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0
KCksIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpKTsKKyAgICB9IGVsc2UgaWYgKG9mZnNldEhl
aWdodCA8IDApIHsKKyAgICAgICAgaWYgKGFicyhvZmZzZXRIZWlnaHQpID4gbWluICh0b3BMZWZ0
UmFkaXVzLmhlaWdodCgpLCB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSkpCisgICAgICAgICAgICBv
ZmZzZXRXaWR0aCA9IG1heChvZmZzZXRXaWR0aCwgMiAqIHJhZGl1cyArIG1heCh0b3BSaWdodFJh
ZGl1cy53aWR0aCgpLCB0b3BMZWZ0UmFkaXVzLndpZHRoKCkpKTsKKyAgICAgICAgb2Zmc2V0SGVp
Z2h0ID0gLW9mZnNldEhlaWdodCArIG1heCh0b3BMZWZ0UmFkaXVzLmhlaWdodCgpLCB0b3BSaWdo
dFJhZGl1cy5oZWlnaHQoKSk7CisgICAgfQorCisgICAgaWYgKHNoYWRvd09mZnNldC53aWR0aCgp
ID4gMCkgeworICAgICAgICBpZiAoc2hhZG93T2Zmc2V0LndpZHRoKCkgPiBtaW4gKGJvdHRvbUxl
ZnRSYWRpdXMud2lkdGgoKSwgdG9wTGVmdFJhZGl1cy53aWR0aCgpKSkKKyAgICAgICAgICAgIG9m
ZnNldEhlaWdodCA9IG1heChvZmZzZXRIZWlnaHQsIDIgKiByYWRpdXMgKyBtYXgoYm90dG9tTGVm
dFJhZGl1cy5oZWlnaHQoKSwgdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSkpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChhYnMoc2hhZG93T2Zmc2V0LndpZHRoKCkpID4gbWluIChib3R0b21SaWdo
dFJhZGl1cy53aWR0aCgpLCB0b3BSaWdodFJhZGl1cy53aWR0aCgpKSkKKyAgICAgICAgICAgIG9m
ZnNldEhlaWdodCA9IG1heChvZmZzZXRIZWlnaHQsIDIgKiByYWRpdXMgKyBtYXgoYm90dG9tUmln
aHRSYWRpdXMuaGVpZ2h0KCksIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpKSk7CisgICAgfQorCisg
ICAgc21hbGxCdWZmZXJTaXplLnNldFdpZHRoKG1heChvZmZzZXRXaWR0aCAqIDIsIChyYWRpdXMg
KiAyKSArIG1heCh0b3BMZWZ0UmFkaXVzLndpZHRoKCksIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgo
KSkgKyBzaGFkb3dTaWRlICsgbWF4KHRvcFJpZ2h0UmFkaXVzLndpZHRoKCksIGJvdHRvbVJpZ2h0
UmFkaXVzLndpZHRoKCkpKSk7CisgICAgc21hbGxCdWZmZXJTaXplLnNldEhlaWdodChtYXgob2Zm
c2V0SGVpZ2h0ICogMiwgKHJhZGl1cyAqIDIpICsgbWF4KHRvcExlZnRSYWRpdXMuaGVpZ2h0KCks
IHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpKSArIHNoYWRvd1NpZGUgKyBtYXgoYm90dG9tTGVmdFJh
ZGl1cy5oZWlnaHQoKSwgYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpKSk7CisKKyAgICBpZiAo
KChzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSA8IHNoYWRvd0J1ZmZlclNpemUud2lkdGgoKSkgJiYg
KHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSA8IHNoYWRvd0J1ZmZlclNpemUuaGVpZ2h0KCkpKSAm
JiAocmFkaXVzID4gMCkpIHsKKyAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzbWFsbEJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc21hbGxCdWZmZXJTaXplKTsKKworICAgICAgICBJbnRS
ZWN0IHNtYWxsID0gSW50UmVjdChyYWRpdXMsIHJhZGl1cywgc21hbGxCdWZmZXJTaXplLndpZHRo
KCkgLSAocmFkaXVzICogMiksIHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSAtIChyYWRpdXMgKiAy
KSk7CisKKyAgICAgICAgLy8gRHJhdyBzaGFkb3cgaW50byBhIG5ldyBJbWFnZUJ1ZmZlci4KKyAg
ICAgICAgY2Fpcm9fdCogc21hbGxCdWZmZXJDb250ZXh0ID0gc21hbGxCdWZmZXItPmNvbnRleHQo
KS0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgICAgIGNvcHlDb250ZXh0UHJvcGVydGllcyhjciwg
c21hbGxCdWZmZXJDb250ZXh0KTsKKyAgICAgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29u
dGV4dChzbWFsbEJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwgUGF0aDo6Y3Jl
YXRlUm91bmRlZFJlY3RhbmdsZShzbWFsbCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMs
IGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7CisgICAgICAgIHNldFBsYXRm
b3JtRmlsbChjb250ZXh0LCBzbWFsbEJ1ZmZlckNvbnRleHQsIGdjcCk7CisKKyAgICAgICAgT3du
UHRyPEltYWdlQnVmZmVyPiBzaGFkb3dCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNtYWxs
QnVmZmVyU2l6ZSk7CisKKyAgICAgICAgc21hbGwuc2V0V2lkdGgoc21hbGxCdWZmZXJTaXplLndp
ZHRoKCkgKyAocmFkaXVzICogMikpOworICAgICAgICBzbWFsbC5zZXRIZWlnaHQoc21hbGxCdWZm
ZXJTaXplLmhlaWdodCgpICsgKHJhZGl1cyAqIDIpKTsKKworICAgICAgICBPd25QdHI8SW1hZ2VC
dWZmZXI+IGFscGhhU2hhZG93QnVmZmVyID0gY29udGV4dC0+Y3JlYXRlUGxhdGZvcm1TaGFkb3co
c21hbGxCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc21hbGwsIHJhZGl1cywgZmFsc2Up
OworCisgICAgICAgIC8vIE5vIHNoYWRvdworICAgICAgICBpZiAoIWFscGhhU2hhZG93QnVmZmVy
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhaXJvX3QqIHNoYWRvd0NvbnRleHQg
PSBzaGFkb3dCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgICAgIHNl
dENvbG9yKHNoYWRvd0NvbnRleHQsIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgY2Fpcm9fbWFza19z
dXJmYWNlKHNoYWRvd0NvbnRleHQsIGFscGhhU2hhZG93QnVmZmVyLT5pbWFnZSgpLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpLCAwLCAwKTsKKworICAgICAgICAvLyB0b3Agc2lkZQorICAg
ICAgICBmbG9hdCB0aWxlSGVpZ2h0ID0gcmFkaXVzICsgb2Zmc2V0SGVpZ2h0OworICAgICAgICBG
bG9hdFJlY3QgdGlsZVJlY3QgPSBGbG9hdFJlY3QocmFkaXVzICsgdG9wTGVmdFJhZGl1cy53aWR0
aCgpICsgcmFkaXVzLCAwLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOworICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybTsKKyAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0g
RmxvYXRSZWN0KHNoYWRvd1JlY3QueCgpICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpICsgMiAqIHJh
ZGl1cywgc2hhZG93UmVjdC55KCksIHNoYWRvd1JlY3Qud2lkdGgoKSAtIHRvcExlZnRSYWRpdXMu
d2lkdGgoKSAtIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkgLSByYWRpdXMgKiA0LCB0aWxlSGVpZ2h0
KTsKKyAgICAgICAgRmxvYXRQb2ludCBwaGFzZSA9IEZsb2F0UG9pbnQoZGVzdFJlY3QueCgpIC0g
dGlsZVJlY3QueCgpLCBkZXN0UmVjdC55KCkgLSB0aWxlUmVjdC55KCkpOworCisgICAgICAgIHBh
dHRlcm5UcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgICAgIHNoYWRvd0J1ZmZlci0+aW1h
Z2UoKS0+ZHJhd1BhdHRlcm4oY29udGV4dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2UsIGNvbG9yU3Bh
Y2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsKKworICAgICAgICAvLyBib3R0b20g
c2lkZQorICAgICAgICB0aWxlUmVjdC5zZXRYKHJhZGl1cyArIGJvdHRvbUxlZnRSYWRpdXMud2lk
dGgoKSArIHJhZGl1cyk7CisgICAgICAgIHRpbGVSZWN0LnNldFkoc21hbGxCdWZmZXJTaXplLmhl
aWdodCgpIC0gdGlsZUhlaWdodCk7CisgICAgICAgIHRpbGVSZWN0LnNldFdpZHRoKHRpbGVXaWR0
aCk7CisgICAgICAgIHRpbGVSZWN0LnNldEhlaWdodCh0aWxlSGVpZ2h0KTsKKyAgICAgICAgZGVz
dFJlY3Quc2V0WChzaGFkb3dSZWN0LngoKSArIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkgKyAy
ICogcmFkaXVzKTsKKyAgICAgICAgZGVzdFJlY3Quc2V0WShzaGFkb3dSZWN0LnkoKSArIDIgKiBy
YWRpdXMgKyByZWN0LmhlaWdodCgpIC0gdGlsZUhlaWdodCk7CisgICAgICAgIGRlc3RSZWN0LnNl
dFdpZHRoKHNoYWRvd1JlY3Qud2lkdGgoKSAtIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSAtIGJv
dHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkgLSByYWRpdXMgKiA0KTsKKyAgICAgICAgZGVzdFJlY3Qu
c2V0SGVpZ2h0KHRpbGVIZWlnaHQpOworICAgICAgICBwaGFzZS5zZXRYKGRlc3RSZWN0LngoKSAt
IHRpbGVSZWN0LngoKSk7CisgICAgICAgIHBoYXNlLnNldFkoZGVzdFJlY3QueSgpIC0gdGlsZVJl
Y3QueSgpKTsKKworICAgICAgICBzaGFkb3dCdWZmZXItPmltYWdlKCktPmRyYXdQYXR0ZXJuKGNv
bnRleHQsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VP
dmVyLCBkZXN0UmVjdCk7CisKKyAgICAgICAgLy8gcmlnaHQgc2lkZQorICAgICAgICB0aWxlSGVp
Z2h0ID0gcmFkaXVzICsgb2Zmc2V0V2lkdGg7CisgICAgICAgIHRpbGVSZWN0LnNldFgoc21hbGxC
dWZmZXJTaXplLndpZHRoKCkgLSB0aWxlSGVpZ2h0KTsKKyAgICAgICAgdGlsZVJlY3Quc2V0WShy
YWRpdXMgKyB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSArIHJhZGl1cyk7CisgICAgICAgIHRpbGVS
ZWN0LnNldFdpZHRoKHRpbGVIZWlnaHQpOworICAgICAgICB0aWxlUmVjdC5zZXRIZWlnaHQodGls
ZVdpZHRoKTsKKyAgICAgICAgZGVzdFJlY3Quc2V0WChzaGFkb3dSZWN0LngoKSArIDIgKiByYWRp
dXMgKyByZWN0LndpZHRoKCkgLSB0aWxlSGVpZ2h0KTsKKyAgICAgICAgZGVzdFJlY3Quc2V0WShz
aGFkb3dSZWN0LnkoKSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpICsgMiAqIHJhZGl1cyk7Cisg
ICAgICAgIGRlc3RSZWN0LnNldFdpZHRoKHRpbGVIZWlnaHQpOworICAgICAgICBkZXN0UmVjdC5z
ZXRIZWlnaHQoc2hhZG93UmVjdC5oZWlnaHQoKSAtIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpIC0g
Ym90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkgLSByYWRpdXMgKiA0KTsKKyAgICAgICAgcGhhc2Uu
c2V0WChkZXN0UmVjdC54KCkgLSB0aWxlUmVjdC54KCkpOworICAgICAgICBwaGFzZS5zZXRZKGRl
c3RSZWN0LnkoKSAtIHRpbGVSZWN0LnkoKSk7CisKKyAgICAgICAgc2hhZG93QnVmZmVyLT5pbWFn
ZSgpLT5kcmF3UGF0dGVybihjb250ZXh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSwgY29sb3JTcGFj
ZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAgICAgIC8vIGxlZnQgc2lk
ZQorICAgICAgICB0aWxlUmVjdC5zZXRYKDApOworICAgICAgICB0aWxlUmVjdC5zZXRZKHJhZGl1
cyArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkgKyByYWRpdXMpOworICAgICAgICB0aWxlUmVjdC5z
ZXRXaWR0aCh0aWxlSGVpZ2h0KTsKKyAgICAgICAgdGlsZVJlY3Quc2V0SGVpZ2h0KHRpbGVXaWR0
aCk7CisgICAgICAgIGRlc3RSZWN0LnNldFgoc2hhZG93UmVjdC54KCkpOworICAgICAgICBkZXN0
UmVjdC5zZXRZKHNoYWRvd1JlY3QueSgpICsgdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSArIDIgKiBy
YWRpdXMpOworICAgICAgICBkZXN0UmVjdC5zZXRXaWR0aCh0aWxlSGVpZ2h0KTsKKyAgICAgICAg
ZGVzdFJlY3Quc2V0SGVpZ2h0KHNoYWRvd1JlY3QuaGVpZ2h0KCkgLSB0b3BMZWZ0UmFkaXVzLmhl
aWdodCgpIC0gYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSAtIHJhZGl1cyAqIDQpOworICAgICAg
ICBwaGFzZS5zZXRYKGRlc3RSZWN0LngoKSAtIHRpbGVSZWN0LngoKSk7CisgICAgICAgIHBoYXNl
LnNldFkoZGVzdFJlY3QueSgpIC0gdGlsZVJlY3QueSgpKTsKKworICAgICAgICBzaGFkb3dCdWZm
ZXItPmltYWdlKCktPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLCBj
b2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAgICAgICAgLy8g
dG9wIGxlZnQgY29ybmVyCisgICAgICAgIHRpbGVSZWN0LnNldFgoMCk7CisgICAgICAgIHRpbGVS
ZWN0LnNldFkoMCk7CisgICAgICAgIHRpbGVSZWN0LnNldFdpZHRoKDIgKiByYWRpdXMgKyB0b3BM
ZWZ0UmFkaXVzLndpZHRoKCkpOworICAgICAgICB0aWxlUmVjdC5zZXRIZWlnaHQoMiAqIHJhZGl1
cyArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkpOworICAgICAgICBkZXN0UmVjdC5zZXRYKHNoYWRv
d1JlY3QueCgpKTsKKyAgICAgICAgZGVzdFJlY3Quc2V0WShzaGFkb3dSZWN0LnkoKSk7CisgICAg
ICAgIGRlc3RSZWN0LnNldFdpZHRoKHRpbGVSZWN0LndpZHRoKCkpOworICAgICAgICBkZXN0UmVj
dC5zZXRIZWlnaHQodGlsZVJlY3QuaGVpZ2h0KCkpOworICAgICAgICBwaGFzZS5zZXRYKGRlc3RS
ZWN0LngoKSAtIHRpbGVSZWN0LngoKSk7CisgICAgICAgIHBoYXNlLnNldFkoZGVzdFJlY3QueSgp
IC0gdGlsZVJlY3QueSgpKTsKKworICAgICAgICBzaGFkb3dCdWZmZXItPmltYWdlKCktPmRyYXdQ
YXR0ZXJuKGNvbnRleHQsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3Np
dGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAgICAgICAgLy8gdG9wIHJpZ2h0IGNvcm5lcgor
ICAgICAgICB0aWxlUmVjdC5zZXRYKHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgpIC0gMiAqIHJhZGl1
cyAtIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkpOworICAgICAgICB0aWxlUmVjdC5zZXRZKDApOwor
ICAgICAgICB0aWxlUmVjdC5zZXRXaWR0aCgyICogcmFkaXVzICsgdG9wUmlnaHRSYWRpdXMud2lk
dGgoKSk7CisgICAgICAgIHRpbGVSZWN0LnNldEhlaWdodCgyICogcmFkaXVzICsgdG9wUmlnaHRS
YWRpdXMuaGVpZ2h0KCkpOworICAgICAgICBkZXN0UmVjdC5zZXRYKHNoYWRvd1JlY3QueCgpICsg
cmVjdC53aWR0aCgpIC0gdG9wUmlnaHRSYWRpdXMud2lkdGgoKSk7CisgICAgICAgIGRlc3RSZWN0
LnNldFkoc2hhZG93UmVjdC55KCkpOworICAgICAgICBkZXN0UmVjdC5zZXRXaWR0aCh0aWxlUmVj
dC53aWR0aCgpKTsKKyAgICAgICAgZGVzdFJlY3Quc2V0SGVpZ2h0KHRpbGVSZWN0LmhlaWdodCgp
KTsKKyAgICAgICAgcGhhc2Uuc2V0WChkZXN0UmVjdC54KCkgLSB0aWxlUmVjdC54KCkpOworICAg
ICAgICBwaGFzZS5zZXRZKGRlc3RSZWN0LnkoKSAtIHRpbGVSZWN0LnkoKSk7CisKKyAgICAgICAg
c2hhZG93QnVmZmVyLT5pbWFnZSgpLT5kcmF3UGF0dGVybihjb250ZXh0LCB0aWxlUmVjdCwgcGF0
dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwaGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisg
ICAgICAgIC8vIGJvdHRvbSByaWdodCBjb3JuZXIKKyAgICAgICAgdGlsZVJlY3Quc2V0WChzbWFs
bEJ1ZmZlclNpemUud2lkdGgoKSAtIDIgKiByYWRpdXMgLSBib3R0b21SaWdodFJhZGl1cy53aWR0
aCgpKTsKKyAgICAgICAgdGlsZVJlY3Quc2V0WShzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgLSAy
ICogcmFkaXVzIC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpOworICAgICAgICB0aWxlUmVj
dC5zZXRXaWR0aCgyICogcmFkaXVzICsgYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSk7CisgICAg
ICAgIHRpbGVSZWN0LnNldEhlaWdodCgyICogcmFkaXVzICsgYm90dG9tUmlnaHRSYWRpdXMuaGVp
Z2h0KCkpOworICAgICAgICBkZXN0UmVjdC5zZXRYKHNoYWRvd1JlY3QueCgpICsgcmVjdC53aWR0
aCgpIC0gdG9wUmlnaHRSYWRpdXMud2lkdGgoKSk7CisgICAgICAgIGRlc3RSZWN0LnNldFkoc2hh
ZG93UmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkp
OworICAgICAgICBkZXN0UmVjdC5zZXRXaWR0aCh0aWxlUmVjdC53aWR0aCgpKTsKKyAgICAgICAg
ZGVzdFJlY3Quc2V0SGVpZ2h0KHRpbGVSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgcGhhc2Uuc2V0
WChkZXN0UmVjdC54KCkgLSB0aWxlUmVjdC54KCkpOworICAgICAgICBwaGFzZS5zZXRZKGRlc3RS
ZWN0LnkoKSAtIHRpbGVSZWN0LnkoKSk7CisKKyAgICAgICAgc2hhZG93QnVmZmVyLT5pbWFnZSgp
LT5kcmF3UGF0dGVybihjb250ZXh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSwgY29sb3JTcGFjZSwg
Q29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAgICAgIC8vIGJvdHRvbSBsZWZ0
IGNvcm5lcgorICAgICAgICB0aWxlUmVjdC5zZXRYKDApOworICAgICAgICB0aWxlUmVjdC5zZXRZ
KHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSAtIDIgKiByYWRpdXMgLSBib3R0b21SaWdodFJhZGl1
cy5oZWlnaHQoKSk7CisgICAgICAgIHRpbGVSZWN0LnNldFdpZHRoKDIgKiByYWRpdXMgKyBib3R0
b21MZWZ0UmFkaXVzLndpZHRoKCkpOworICAgICAgICB0aWxlUmVjdC5zZXRIZWlnaHQoMiAqIHJh
ZGl1cyArIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkpOworICAgICAgICBkZXN0UmVjdC5zZXRY
KHNoYWRvd1JlY3QueCgpKTsKKyAgICAgICAgZGVzdFJlY3Quc2V0WShzaGFkb3dSZWN0LnkoKSAr
IHJlY3QuaGVpZ2h0KCkgLSBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSk7CisgICAgICAgIGRl
c3RSZWN0LnNldFdpZHRoKHRpbGVSZWN0LndpZHRoKCkpOworICAgICAgICBkZXN0UmVjdC5zZXRI
ZWlnaHQodGlsZVJlY3QuaGVpZ2h0KCkpOworICAgICAgICBwaGFzZS5zZXRYKGRlc3RSZWN0Lngo
KSAtIHRpbGVSZWN0LngoKSk7CisgICAgICAgIHBoYXNlLnNldFkoZGVzdFJlY3QueSgpIC0gdGls
ZVJlY3QueSgpKTsKKworICAgICAgICBzaGFkb3dCdWZmZXItPmltYWdlKCktPmRyYXdQYXR0ZXJu
KGNvbnRleHQsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3Vy
Y2VPdmVyLCBkZXN0UmVjdCk7CisKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDcmVhdGUgc3Vp
dGFibHktc2l6ZWQgSW1hZ2VCdWZmZXIgdG8gaG9sZCB0aGUgc2hhZG93LgorICAgICAgICBPd25Q
dHI8SW1hZ2VCdWZmZXI+IHNoYWRvd0J1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2hhZG93
QnVmZmVyU2l6ZSk7CisKKyAgICAgICAgLy8gRHJhdyBzaGFkb3cgaW50byBhIG5ldyBJbWFnZUJ1
ZmZlci4KKyAgICAgICAgY2Fpcm9fdCogc2hhZG93Q29udGV4dCA9IHNoYWRvd0J1ZmZlci0+Y29u
dGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICAgICAgY29weUNvbnRleHRQcm9wZXJ0aWVz
KGNyLCBzaGFkb3dDb250ZXh0KTsKKyAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKHNoYWRvd0NvbnRl
eHQsIC1yZWN0LngoKSArIHJhZGl1cywgLXJlY3QueSgpICsgcmFkaXVzKTsKKyAgICAgICAgY2Fp
cm9fbmV3X3BhdGgoc2hhZG93Q29udGV4dCk7CisgICAgICAgIGNhaXJvX2FwcGVuZF9wYXRoKHNo
YWRvd0NvbnRleHQsIHBhdGgpOworCisgICAgICAgIHNldFBsYXRmb3JtRmlsbChjb250ZXh0LCBz
aGFkb3dDb250ZXh0LCBnY3ApOworCisgICAgICAgIGNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU2hh
ZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRp
dXMsIHRydWUpOworICAgIH0KKyNlbmRpZgorfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNv
bnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJ
bnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTEyNDAsNyArMTQ5MCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYg
ciwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwKICAgICBjYWlyb19zYXZlKGNyKTsKICAgICBhcHBl
bmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFu
Z2xlKHIsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCkpOwogICAg
IHNldENvbG9yKGNyLCBjb2xvcik7Ci0gICAgZHJhd1BhdGhTaGFkb3codGhpcywgbV9jb21tb24s
IHRydWUsIGZhbHNlKTsKKyAgICBkcmF3RmFzdFNoYWRvdyh0aGlzLCBtX2NvbW1vbiwgciwgdG9w
TGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0LCBjb2xvclNwYWNlKTsKICAg
ICBjYWlyb19maWxsKGNyKTsKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCmluZGV4IDU0MTRjNzkuLmYx
NGYyN2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VD
YWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJv
LmNwcApAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvCiAgICAgICAg
IGNhaXJvX3JlY3RhbmdsZShzaGFkb3dDb250ZXh0LCAwLCAwLCBkc3RSZWN0LndpZHRoKCksIGRz
dFJlY3QuaGVpZ2h0KCkpOwogICAgICAgICBjYWlyb19maWxsKHNoYWRvd0NvbnRleHQpOwogCi0g
ICAgICAgIGNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNl
KCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOworICAgICAgICBjb250ZXh0LT5j
cmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwg
c2hhZG93UmVjdCwgcmFkaXVzLCB0cnVlKTsKICAgICB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDNiOGI1YTMu
LmJiNDMyOGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmgKQEAgLTY1LDYgKzY1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIC8vIFRoZSByZXN1bHQgaXMgYm91bmRlZCBieSB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyIHBy
aW1pdGl2ZSB0byBzYXZlIHJlc291cmNlcwogICAgICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1h
Z2UoKSB7IHJldHVybiBtX2VmZmVjdEJ1ZmZlci5nZXQoKTsgfQorICAgICAgICBQYXNzT3duUHRy
PEltYWdlQnVmZmVyKj4gcmVsZWFzZVJlc3VsdEltYWdlKCkgeyByZXR1cm4gbV9lZmZlY3RCdWZm
ZXIucmVsZWFzZSgpOyB9CiAgICAgICAgIHZvaWQgc2V0RWZmZWN0QnVmZmVyKFBhc3NPd25QdHI8
SW1hZ2VCdWZmZXI+IGVmZmVjdEJ1ZmZlcikgeyBtX2VmZmVjdEJ1ZmZlciA9IGVmZmVjdEJ1ZmZl
cjsgfQogCiAgICAgICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVVbmlvbk9mQ2hpbGRFZmZlY3RTdWJy
ZWdpb25zKEZpbHRlciosIEZpbHRlckVmZmVjdCosIEZpbHRlckVmZmVjdCopOwotLSAKMS43LjIK
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64004</attachid>
            <date>2010-08-10 05:38:18 -0700</date>
            <delta_ts>2010-08-18 12:05:25 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>tiling_shadow.patch</filename>
            <type>text/plain</type>
            <size>23168</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">RnJvbSAzNjUzMWRhMzgyNGVhZTIyOWRjYzIyYTgzZDhhN2VjNjZkMTRhOGM5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+
CkRhdGU6IFR1ZSwgMjcgSnVsIDIwMTAgMTc6NTc6MTcgKzAyMDAKU3ViamVjdDogW1BBVENIIDEv
Ml0gMjAxMC0wOC0wMiAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KCiAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFtHdGtdIHZlcnkgc2xv
dyBwYWdlIHNjcm9sbGluZyBvbiBiaWcgLXdlYmtpdC1ib3gtc2hhZG93IGFyZWFzCiAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NTgyCgogICAgICAgIEFk
ZCBhIG5ldyBkcmF3RmFzdFNoYWRvdyBtZXRob2QgdG8gcmVuZGVyIGEgYmlnIHNoYWRvdyBkb2lu
ZwogICAgICAgIHRpbGluZyBvZiBwYXJ0cyBvZiBhIHNtYWxsZXIgc2hhZG93LiBXZSBjcmVhdGUg
dGhlIG1pbmltdW0gc2hhZG93CiAgICAgICAgcmVxdWlyZWQgdG8gZ2V0IHRoZSB0aWxlcyB3ZSB3
aWxsIHVzZSB0byByZW5kZXIgdGhlIHJlYWwgc2hhZG93CiAgICAgICAgYW5kIHdlIHVzZSBkcmF3
UGF0dGVybiB3aXRoIHRob3NlIHRpbGVzIHRvIGNyZWF0ZSB0aGUgc2hhZG93LgoKICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgogICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcDoKICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJh
d0dseXBocyk6CiAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5jcHA6CiAgICAgICAgKFdlYkNvcmU6OmRyYXdQYXRoU2hhZG93KToKICAgICAgICAo
V2ViQ29yZTo6ZHJhd0JvcmRlcmxlc3NSZWN0U2hhZG93KToKICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpjcmVhdGVQbGF0Zm9ybVNoYWRvdyk6CiAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd0Zhc3RTaGFkb3cpOgogICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CiAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUNhaXJvLmNwcDoKICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcp
OgogICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZWxlYXNlUmVzdWx0SW1hZ2UpOgotLS0KIFdl
YkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNiAr
KwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCAgICAgICAgfCAg
IDE1ICstCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAgICAg
ICB8ICAgIDIgKy0KIC4uLi9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAg
ICAgICAgIHwgIDI2NCArKysrKysrKysrKysrKysrKysrLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcCAgICAgfCAgICAyICstCiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggICB8ICAgIDEgKwogNiBmaWxlcyBjaGFu
Z2VkLCAzMDAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkZDAwODQ1Li5mODM1YWQy
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI5IEBACisyMDEwLTA4LTAyICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBp
Z2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFtHdGtdIHZlcnkgc2xvdyBwYWdlIHNjcm9sbGluZyBvbiBiaWcgLXdlYmtpdC1ib3gtc2hh
ZG93IGFyZWFzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zOTU4MgorCisgICAgICAgIEFkZCBhIG5ldyBkcmF3RmFzdFNoYWRvdyBtZXRob2QgdG8gcmVu
ZGVyIGEgYmlnIHNoYWRvdyBkb2luZworICAgICAgICB0aWxpbmcgb2YgcGFydHMgb2YgYSBzbWFs
bGVyIHNoYWRvdy4gV2UgY3JlYXRlIHRoZSBtaW5pbXVtIHNoYWRvdworICAgICAgICByZXF1aXJl
ZCB0byBnZXQgdGhlIHRpbGVzIHdlIHdpbGwgdXNlIHRvIHJlbmRlciB0aGUgcmVhbCBzaGFkb3cK
KyAgICAgICAgYW5kIHdlIHVzZSBkcmF3UGF0dGVybiB3aXRoIHRob3NlIHRpbGVzIHRvIGNyZWF0
ZSB0aGUgc2hhZG93LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmRyYXdQYXRoU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdCb3JkZXJsZXNzUmVj
dFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVBsYXRm
b3JtU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zhc3RT
aGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnJlbGVhc2VSZXN1bHRJbWFnZSk6CisKIDIwMTAtMDctMTUgIEFsZWphbmRybyBH
LiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApp
bmRleCBjMjliYjRmLi43ZmJkNmJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKQEAgLTE0Niw2ICsxNDYsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBJbnRlcnBvbGF0aW9uSGlnaAogICAgIH07CiAKKyNpZiBQTEFURk9STShDQUlSTykK
KyAgICAvLyBEZWNpZGUgaWYgdGhlIHNoYWRvdyBidWZmZXIgc2hvdWxkIGJlIGJsaXR0ZWQgb3Ig
cmVsZWFzZWQgKHJlcXVpcmVkIGZvciB0aWxpbmcpCisgICAgZW51bSBSZXN1bHRCdWZmZXJPcCB7
CisgICAgICAgIEJsaXQsCisgICAgICAgIFJlbGVhc2UKKyAgICB9OworI2VuZGlmCisKICAgICBj
bGFzcyBHcmFwaGljc0NvbnRleHQgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoK
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CkBAIC0y
ODEsNyArMjg5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldEFscGhh
KGZsb2F0KTsKICNpZiBQTEFURk9STShDQUlSTykKICAgICAgICAgZmxvYXQgZ2V0QWxwaGEoKTsK
LSAgICAgICAgdm9pZCBjcmVhdGVQbGF0Zm9ybVNoYWRvdyhQYXNzT3duUHRyPEltYWdlQnVmZmVy
PiBidWZmZXIsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgY29uc3QgRmxvYXRSZWN0JiBzaGFk
b3dSZWN0LCBmbG9hdCByYWRpdXMpOworICAgICAgICBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBj
cmVhdGVQbGF0Zm9ybVNoYWRvdyhQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIsIGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvciwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBmbG9hdCBy
YWRpdXMsIFJlc3VsdEJ1ZmZlck9wIG9wZXJhdGlvbik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNh
bGN1bGF0ZVNoYWRvd0J1ZmZlckRpbWVuc2lvbnMoSW50U2l6ZSYgc2hhZG93QnVmZmVyU2l6ZSwg
RmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBmbG9hdCYgcmFkaXVzLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93U2l6ZSwgZmxvYXQgc2hhZG93Qmx1cik7
CiAjZW5kaWYKIApAQCAtNDI4LDYgKzQzNiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogbV9jb21tb247CiAgICAgICAgIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZSogbV9kYXRhOyAvLyBEZXByZWNhdGVkOyBtX2NvbW1tb24g
Y2FuIGp1c3QgYmUgZG93bmNhc3RlZC4gVG8gYmUgcmVtb3ZlZC4KKworI2lmIFBMQVRGT1JNKENB
SVJPKQorICAgICAgICB2b2lkIGRyYXdGYXN0U2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogZ2NwLCBjb25zdCBJbnRSZWN0JiByLCBjb25zdCBG
bG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMs
IGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0
b21SaWdodFJhZGl1cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKTsKKyNlbmRpZgorCiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9Gb250Q2Fpcm8uY3BwCmluZGV4IGQxNGIzNzEuLmM4YWQzMTYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKQEAgLTExNCw3ICsxMTQsNyBA
QCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udCwgY29ucwogICAgICAgICAgICAgY2Fpcm9fcmVzdG9yZShzaGFk
b3dDcik7CiAgICAgICAgIH0KICAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCAwLjAsIC1leHRl
bnRzLmhlaWdodCk7Ci0gICAgICAgIGNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU2hhZG93KHNoYWRv
d0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOworICAg
ICAgICBjb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgp
LCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzLCBCbGl0KTsKICNlbHNlCiAgICAgICAg
IGNhaXJvX3RyYW5zbGF0ZShjciwgc2hhZG93U2l6ZS53aWR0aCgpLCBzaGFkb3dTaXplLmhlaWdo
dCgpKTsKICAgICAgICAgY2Fpcm9fc2hvd19nbHlwaHMoY3IsIGdseXBocywgbnVtR2x5cGhzKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHAKaW5kZXggY2JiZGI3OS4uZjEwZGE2MCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAK
QEAgLTIyOSw3ICsyMjksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHJhd1BhdGhTaGFkb3coR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRQcml2YQogICAgIGlmIChzdHJv
a2VTaGFkb3cpCiAgICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlKGNvbnRleHQsIHNoYWRvd0NvbnRl
eHQsIGdjcCk7CiAKLSAgICBjb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZm
ZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKKyAgICBjb250
ZXh0LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dD
b2xvciwgc2hhZG93UmVjdCwgcmFkaXVzLCBCbGl0KTsKICNlbmRpZgogfQogCkBAIC02NDIsNyAr
NjQyLDcgQEAgc3RhdGljIHZvaWQgZHJhd0JvcmRlcmxlc3NSZWN0U2hhZG93KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JgogICAgIEdyYXBoaWNzQ29udGV4dCogc2hh
ZG93Q29udGV4dCA9IHNoYWRvd0J1ZmZlci0+Y29udGV4dCgpOwogICAgIHNoYWRvd0NvbnRleHQt
PmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KHJhZGl1cywgcmFkaXVzKSwgcmVjdC5zaXpl
KCkpLCByZWN0Q29sb3IsIERldmljZUNvbG9yU3BhY2UpOwogCi0gICAgY29udGV4dC0+Y3JlYXRl
UGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRv
d1JlY3QsIHJhZGl1cyk7CisgICAgY29udGV4dC0+Y3JlYXRlUGxhdGZvcm1TaGFkb3coc2hhZG93
QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cywgQmxpdCk7
CiAjZW5kaWYKIH0KIApAQCAtOTMxLDcgKzkzMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybVNoYWRvdyhGbG9hdFNpemUgY29uc3QmIHNpemUsIGZsb2F0LCBDb2xvciBjb25z
CiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUGxhdGZvcm1TaGFkb3co
UGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3Is
IGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQgcmFkaXVzKQorUGFzc093blB0cjxJ
bWFnZUJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVQbGF0Zm9ybVNoYWRvdyhQYXNzT3du
UHRyPEltYWdlQnVmZmVyPiBidWZmZXIsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgY29uc3Qg
RmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBmbG9hdCByYWRpdXMsIFJlc3VsdEJ1ZmZlck9wIG9wZXJh
dGlvbikKIHsKICNpZiBFTkFCTEUoRklMVEVSUykKICAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+
Y3I7CkBAIC05NDYsNyArOTQ2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVBsYXRm
b3JtU2hhZG93KFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QKICAgICBpZiAo
IXJhZGl1cyB8fCAoIXNkeCAmJiAhc2R5KSkgewogICAgICAgICBzZXRDb2xvcihjciwgc2hhZG93
Q29sb3IpOwogICAgICAgICBjYWlyb19tYXNrX3N1cmZhY2UoY3IsIGJ1ZmZlci0+aW1hZ2UoKS0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSwgc2hhZG93UmVjdC54KCksIHNoYWRvd1JlY3Qu
eSgpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICAv
LyBjcmVhdGUgZmlsdGVyCkBAIC05NjEsOCArOTYxLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjcmVhdGVQbGF0Zm9ybVNoYWRvdyhQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIsIGNv
bnN0CiAKICAgICAvLyBNYXNrIHRoZSBmaWx0ZXIgd2l0aCB0aGUgc2hhZG93IGNvbG9yIGFuZCBk
cmF3IGl0IHRvIHRoZSBjb250ZXh0LgogICAgIC8vIE1hc2tpbmcgbWFrZXMgaXQgcG9zc2libGUg
dG8ganVzdCBibHVyIHRoZSBhbHBoYSBjaGFubmVsLgotICAgIHNldENvbG9yKGNyLCBzaGFkb3dD
b2xvcik7Ci0gICAgY2Fpcm9fbWFza19zdXJmYWNlKGNyLCBibHVyLT5yZXN1bHRJbWFnZSgpLT5p
bWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpLCBzaGFkb3dSZWN0LngoKSwgc2hh
ZG93UmVjdC55KCkpOworICAgIGlmIChvcGVyYXRpb24gPT0gQmxpdCkgeworICAgICAgICBzZXRD
b2xvcihjciwgc2hhZG93Q29sb3IpOworICAgICAgICBjYWlyb19tYXNrX3N1cmZhY2UoY3IsIGJs
dXItPnJlc3VsdEltYWdlKCktPmltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCks
IHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0gZWxzZSB7CisgICAgICAgIHJldHVybiBibHVyLT5yZWxlYXNlUmVzdWx0SW1hZ2UoKTsKKyAg
ICB9CiAjZW5kaWYKIH0KIApAQCAtMTIzMSw2ICsxMjM2LDI1MSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcE91dEVsbGlwc2VJblJlY3QoY29uc3QgSW50UmVjdCYgcikKICAgICBjbGlwT3V0
KHApOwogfQogCisvKgorICBUaGlzIGZ1bmN0aW9uIHVzZXMgdGlsaW5nIHRvIGltcHJvdmUgdGhl
IHBlcmZvcm1hbmNlIG9mIHRoZSBzaGFkb3cKKyAgZHJhd2luZyBvZiByb3VuZGVkIHJlY3Rhbmds
ZXMuIFRoZSBjb2RlIGJhc2ljYWxseSBkb2VzIHRoZSBmb2xsb3dpbmcKKyAgc3RlcHM6CisKKyAg
ICAgMS4gQ2FsY3VsYXRlIHRoZSBtaW5pbXVtIHJlY3RhbmdsZSBzaXplIHJlcXVpcmVkIHRvIGNy
ZWF0ZSB0aGUKKyAgICAgdGlsZXMKKworICAgICAyLiBJZiB0aGF0IHNpemUgaXMgc21hbGxlciB0
aGFuIHRoZSByZWFsIHJlY3RhbmdsZSByZW5kZXIgdGhlIG5ldworICAgICBzbWFsbCByZWN0YW5n
bGUgYW5kIGl0cyBzaGFkb3csIGluIG90aGVyIGNhc2UgcmVuZGVyIHRoZSBzaGFkb3cKKyAgICAg
b2YgdGhlIHJlYWwgcmVjdGFuZ2xlLgorCisgICAgIDMuIENhbGN1bGF0ZSB0aGUgc2l6ZXMgYW5k
IHBvc2l0aW9ucyBvZiB0aGUgdGlsZXMgYW5kIHRoZWlyCisgICAgIGRlc3RpbmF0aW9ucyBhbmQg
dXNlIGRyYXdQYXR0ZXJuIHRvIHJlbmRlciB0aGUgZmluYWwgc2hhZG93LiBUaGUKKyAgICAgY29k
ZSBkaXZpZGVzIHRoZSByZW5kZXJpbmcgaW4gOCB0aWxlczoKKworICAgICAgICAxIHwgMiB8IDMK
KyAgICAgICAtLS0tLS0tLS0tLQorICAgICAgICA0IHwgICB8IDUKKyAgICAgICAtLS0tLS0tLS0t
LQorICAgICAgICA2IHwgNyB8IDgKKworICAgICBUaGUgY29ybmVycyBhcmUgZGlyZWN0bHkgY29w
aWVkIGZyb20gdGhlIHNtYWxsIHJlY3RhbmdsZSB0byB0aGUKKyAgICAgcmVhbCBvbmUgYW5kIHRo
ZSBzaWRlIHRpbGVzIGFyZSAxIHBpeGVsIHdpZHRoLCB3ZSB1c2UgdGhlbSBhcworICAgICB0aWxl
cyB0byBjb3ZlciB0aGUgZGVzdGluYXRpb24gc2lkZS4gVGhlIGNvcm5lciB0aWxlcyBhcmUgYmln
Z2VyCisgICAgIHRoYW4ganVzdCB0aGUgc2lkZSBvZiB0aGUgcm91bmRlZCBjb3JuZXIsIHdlIG5l
ZWQgdG8gaW5jcmVhc2UgaXQKKyAgICAgYmVjYXVzZSB0aGUgbW9kaWZpY2F0aW9ucyBjYXVzZWQg
YnkgdGhlIGNvcm5lciBvdmVyIHRoZSBibHVyCisgICAgIGVmZmVjdC4KKyAqLwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdGYXN0U2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgR3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZSogZ2NwLCBjb25zdCBJbnRSZWN0JiByLCBjb25zdCBGbG9hdFNp
emUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0
IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdo
dFJhZGl1cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworI2lmIEVOQUJMRShGSUxURVJTKQor
ICAgIEZsb2F0U2l6ZSBzaGFkb3dTaXplOworICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Cisg
ICAgZmxvYXQgc2hhZG93Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAgICBpZiAoIWNv
bnRleHQtPmdldFNoYWRvdyhzaGFkb3dTaXplLCBzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNo
YWRvd0NvbG9yKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ2FsY3VsYXRlIGZpbHRlciB2
YWx1ZXMgdG8gY3JlYXRlIGFwcHJvcHJpYXRlIHNoYWRvdy4KKyAgICBjYWlyb190KiBjciA9IGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIGNhaXJvX3BhdGhfdCogcGF0aCA9IGNhaXJv
X2NvcHlfcGF0aChjcik7CisgICAgZG91YmxlIHgwLCB4MSwgeTAsIHkxOworICAgIGNhaXJvX2Zp
bGxfZXh0ZW50cyhjciwgJngwLCAmeTAsICZ4MSwgJnkxKTsKKyAgICBGbG9hdFJlY3QgcmVjdCh4
MCwgeTAsIHgxIC0geDAsIHkxIC0geTApOworCisgICAgSW50U2l6ZSBzaGFkb3dCdWZmZXJTaXpl
OworICAgIEZsb2F0UmVjdCBzaGFkb3dSZWN0OworICAgIGZsb2F0IHJhZGl1cyA9IDA7CisgICAg
R3JhcGhpY3NDb250ZXh0OjpjYWxjdWxhdGVTaGFkb3dCdWZmZXJEaW1lbnNpb25zKHNoYWRvd0J1
ZmZlclNpemUsIHNoYWRvd1JlY3QsIHJhZGl1cywgcmVjdCwgc2hhZG93U2l6ZSwgc2hhZG93Qmx1
cik7CisKKyAgICAvLyBzaXplIG9mIHRoZSB0aWxpbmcgZm9yIHRoZSBzaWRlcworICAgIGludCB0
aWxlV2lkdGggPSAxOworICAgIGludCBzaGFkb3dTaWRlID0gKHJhZGl1cyAqIDIpICsgdGlsZVdp
ZHRoOworICAgIEludFNpemUgc21hbGxCdWZmZXJTaXplOworCisgICAgZmxvYXQgb2Zmc2V0V2lk
dGggPSBzaGFkb3dPZmZzZXQud2lkdGgoKTsKKyAgICBpZiAob2Zmc2V0V2lkdGggPiAwKQorICAg
ICAgICBvZmZzZXRXaWR0aCArPSBtYXgodG9wUmlnaHRSYWRpdXMud2lkdGgoKSwgYm90dG9tUmln
aHRSYWRpdXMud2lkdGgoKSk7CisgICAgZWxzZSBpZiAob2Zmc2V0V2lkdGggPCAwKQorICAgICAg
ICBvZmZzZXRXaWR0aCA9IC1vZmZzZXRXaWR0aCArIG1heCh0b3BMZWZ0UmFkaXVzLndpZHRoKCks
IGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSk7CisKKyAgICBmbG9hdCBvZmZzZXRIZWlnaHQgPSBz
aGFkb3dPZmZzZXQuaGVpZ2h0KCk7CisgICAgaWYgKG9mZnNldEhlaWdodCA+IDApIHsKKyAgICAg
ICAgaWYgKG9mZnNldEhlaWdodCA+IG1pbiAoYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSwgYm90
dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpKQorICAgICAgICAgICAgb2Zmc2V0V2lkdGggPSBtYXgo
b2Zmc2V0V2lkdGgsIDIgKiByYWRpdXMgKyBtYXgoYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSwg
Ym90dG9tTGVmdFJhZGl1cy53aWR0aCgpKSk7CisgICAgICAgIG9mZnNldEhlaWdodCArPSBtYXgo
Ym90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSwgYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpOwor
ICAgIH0gZWxzZSBpZiAob2Zmc2V0SGVpZ2h0IDwgMCkgeworICAgICAgICBpZiAoYWJzKG9mZnNl
dEhlaWdodCkgPiBtaW4gKHRvcExlZnRSYWRpdXMuaGVpZ2h0KCksIHRvcFJpZ2h0UmFkaXVzLmhl
aWdodCgpKSkKKyAgICAgICAgICAgIG9mZnNldFdpZHRoID0gbWF4KG9mZnNldFdpZHRoLCAyICog
cmFkaXVzICsgbWF4KHRvcFJpZ2h0UmFkaXVzLndpZHRoKCksIHRvcExlZnRSYWRpdXMud2lkdGgo
KSkpOworICAgICAgICBvZmZzZXRIZWlnaHQgPSAtb2Zmc2V0SGVpZ2h0ICsgbWF4KHRvcExlZnRS
YWRpdXMuaGVpZ2h0KCksIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBp
ZiAoc2hhZG93T2Zmc2V0LndpZHRoKCkgPiAwKSB7CisgICAgICAgIGlmIChzaGFkb3dPZmZzZXQu
d2lkdGgoKSA+IG1pbiAoYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpLCB0b3BMZWZ0UmFkaXVzLndp
ZHRoKCkpKQorICAgICAgICAgICAgb2Zmc2V0SGVpZ2h0ID0gbWF4KG9mZnNldEhlaWdodCwgMiAq
IHJhZGl1cyArIG1heChib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpLCB0b3BMZWZ0UmFkaXVzLmhl
aWdodCgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGFicyhzaGFkb3dPZmZzZXQud2lk
dGgoKSkgPiBtaW4gKGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCksIHRvcFJpZ2h0UmFkaXVzLndp
ZHRoKCkpKQorICAgICAgICAgICAgb2Zmc2V0SGVpZ2h0ID0gbWF4KG9mZnNldEhlaWdodCwgMiAq
IHJhZGl1cyArIG1heChib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSwgdG9wUmlnaHRSYWRpdXMu
aGVpZ2h0KCkpKTsKKyAgICB9CisKKyAgICBzbWFsbEJ1ZmZlclNpemUuc2V0V2lkdGgobWF4KG9m
ZnNldFdpZHRoICogMiwgKHJhZGl1cyAqIDIpICsgbWF4KHRvcExlZnRSYWRpdXMud2lkdGgoKSwg
Ym90dG9tTGVmdFJhZGl1cy53aWR0aCgpKSArIHNoYWRvd1NpZGUgKyBtYXgodG9wUmlnaHRSYWRp
dXMud2lkdGgoKSwgYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSkpKTsKKyAgICBzbWFsbEJ1ZmZl
clNpemUuc2V0SGVpZ2h0KG1heChvZmZzZXRIZWlnaHQgKiAyLCAocmFkaXVzICogMikgKyBtYXgo
dG9wTGVmdFJhZGl1cy5oZWlnaHQoKSwgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkpICsgc2hhZG93
U2lkZSArIG1heChib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpLCBib3R0b21SaWdodFJhZGl1cy5o
ZWlnaHQoKSkpKTsKKworICAgIGlmICgoKHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgpIDwgc2hhZG93
QnVmZmVyU2l6ZS53aWR0aCgpKSAmJiAoc21hbGxCdWZmZXJTaXplLmhlaWdodCgpIDwgc2hhZG93
QnVmZmVyU2l6ZS5oZWlnaHQoKSkpICYmIChyYWRpdXMgPiAwKSkgeworICAgICAgICBPd25QdHI8
SW1hZ2VCdWZmZXI+IHNtYWxsQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzbWFsbEJ1ZmZl
clNpemUpOworCisgICAgICAgIEludFJlY3Qgc21hbGwgPSBJbnRSZWN0KHJhZGl1cywgcmFkaXVz
LCBzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSAtIChyYWRpdXMgKiAyKSwgc21hbGxCdWZmZXJTaXpl
LmhlaWdodCgpIC0gKHJhZGl1cyAqIDIpKTsKKworICAgICAgICAvLyBEcmF3IHNoYWRvdyBpbnRv
IGEgbmV3IEltYWdlQnVmZmVyLgorICAgICAgICBjYWlyb190KiBzbWFsbEJ1ZmZlckNvbnRleHQg
PSBzbWFsbEJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICAgICAgY29w
eUNvbnRleHRQcm9wZXJ0aWVzKGNyLCBzbWFsbEJ1ZmZlckNvbnRleHQpOworICAgICAgICBhcHBl
bmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KHNtYWxsQnVmZmVyLT5jb250ZXh0KCktPnBsYXRm
b3JtQ29udGV4dCgpLCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHNtYWxsLCB0b3BMZWZ0
UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRp
dXMpKTsKKyAgICAgICAgc2V0UGxhdGZvcm1GaWxsKGNvbnRleHQsIHNtYWxsQnVmZmVyQ29udGV4
dCwgZ2NwKTsKKworICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNoYWRvd0J1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoc21hbGxCdWZmZXJTaXplKTsKKworICAgICAgICBzbWFsbC5zZXRX
aWR0aChzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSArIChyYWRpdXMgKiAyKSk7CisgICAgICAgIHNt
YWxsLnNldEhlaWdodChzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgKyAocmFkaXVzICogMikpOwor
CisgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYWxwaGFTaGFkb3dCdWZmZXIgPSBjb250ZXh0
LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhzbWFsbEJ1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9y
LCBzbWFsbCwgcmFkaXVzLCBSZWxlYXNlKTsKKworICAgICAgICAvLyBObyBzaGFkb3cKKyAgICAg
ICAgaWYgKCFhbHBoYVNoYWRvd0J1ZmZlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBjYWlyb190KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93QnVmZmVyLT5jb250ZXh0KCktPnBsYXRm
b3JtQ29udGV4dCgpOworICAgICAgICBzZXRDb2xvcihzaGFkb3dDb250ZXh0LCBzaGFkb3dDb2xv
cik7CisgICAgICAgIGNhaXJvX21hc2tfc3VyZmFjZShzaGFkb3dDb250ZXh0LCBhbHBoYVNoYWRv
d0J1ZmZlci0+aW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSwgMCwgMCk7CisK
KyAgICAgICAgLy8gdG9wIHNpZGUKKyAgICAgICAgZmxvYXQgdGlsZUhlaWdodCA9IHJhZGl1cyAr
IG9mZnNldEhlaWdodDsKKyAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gRmxvYXRSZWN0KHJh
ZGl1cyArIHRvcExlZnRSYWRpdXMud2lkdGgoKSArIHJhZGl1cywgMCwgdGlsZVdpZHRoLCB0aWxl
SGVpZ2h0KTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm07CisgICAg
ICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IEZsb2F0UmVjdChzaGFkb3dSZWN0LngoKSArIHRvcExl
ZnRSYWRpdXMud2lkdGgoKSArIDIgKiByYWRpdXMsIHNoYWRvd1JlY3QueSgpLCBzaGFkb3dSZWN0
LndpZHRoKCkgLSB0b3BMZWZ0UmFkaXVzLndpZHRoKCkgLSB0b3BSaWdodFJhZGl1cy53aWR0aCgp
IC0gcmFkaXVzICogNCwgdGlsZUhlaWdodCk7CisgICAgICAgIEZsb2F0UG9pbnQgcGhhc2UgPSBG
bG9hdFBvaW50KGRlc3RSZWN0LngoKSAtIHRpbGVSZWN0LngoKSwgZGVzdFJlY3QueSgpIC0gdGls
ZVJlY3QueSgpKTsKKworICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOwor
ICAgICAgICBzaGFkb3dCdWZmZXItPmltYWdlKCktPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHRpbGVS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVj
dCk7CisKKyAgICAgICAgLy8gYm90dG9tIHNpZGUKKyAgICAgICAgdGlsZVJlY3Quc2V0WChyYWRp
dXMgKyBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCkgKyByYWRpdXMpOworICAgICAgICB0aWxlUmVj
dC5zZXRZKHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSAtIHRpbGVIZWlnaHQpOworICAgICAgICB0
aWxlUmVjdC5zZXRXaWR0aCh0aWxlV2lkdGgpOworICAgICAgICB0aWxlUmVjdC5zZXRIZWlnaHQo
dGlsZUhlaWdodCk7CisgICAgICAgIGRlc3RSZWN0LnNldFgoc2hhZG93UmVjdC54KCkgKyBib3R0
b21SaWdodFJhZGl1cy53aWR0aCgpICsgMiAqIHJhZGl1cyk7CisgICAgICAgIGRlc3RSZWN0LnNl
dFkoc2hhZG93UmVjdC55KCkgKyAyICogcmFkaXVzICsgcmVjdC5oZWlnaHQoKSAtIHRpbGVIZWln
aHQpOworICAgICAgICBkZXN0UmVjdC5zZXRXaWR0aChzaGFkb3dSZWN0LndpZHRoKCkgLSBib3R0
b21MZWZ0UmFkaXVzLndpZHRoKCkgLSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpIC0gcmFkaXVz
ICogNCk7CisgICAgICAgIGRlc3RSZWN0LnNldEhlaWdodCh0aWxlSGVpZ2h0KTsKKyAgICAgICAg
cGhhc2Uuc2V0WChkZXN0UmVjdC54KCkgLSB0aWxlUmVjdC54KCkpOworICAgICAgICBwaGFzZS5z
ZXRZKGRlc3RSZWN0LnkoKSAtIHRpbGVSZWN0LnkoKSk7CisKKyAgICAgICAgc2hhZG93QnVmZmVy
LT5pbWFnZSgpLT5kcmF3UGF0dGVybihjb250ZXh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSwgY29s
b3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAgICAgIC8vIHJp
Z2h0IHNpZGUKKyAgICAgICAgdGlsZUhlaWdodCA9IHJhZGl1cyArIG9mZnNldFdpZHRoOworICAg
ICAgICB0aWxlUmVjdC5zZXRYKHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgpIC0gdGlsZUhlaWdodCk7
CisgICAgICAgIHRpbGVSZWN0LnNldFkocmFkaXVzICsgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkg
KyByYWRpdXMpOworICAgICAgICB0aWxlUmVjdC5zZXRXaWR0aCh0aWxlSGVpZ2h0KTsKKyAgICAg
ICAgdGlsZVJlY3Quc2V0SGVpZ2h0KHRpbGVXaWR0aCk7CisgICAgICAgIGRlc3RSZWN0LnNldFgo
c2hhZG93UmVjdC54KCkgKyAyICogcmFkaXVzICsgcmVjdC53aWR0aCgpIC0gdGlsZUhlaWdodCk7
CisgICAgICAgIGRlc3RSZWN0LnNldFkoc2hhZG93UmVjdC55KCkgKyB0b3BSaWdodFJhZGl1cy5o
ZWlnaHQoKSArIDIgKiByYWRpdXMpOworICAgICAgICBkZXN0UmVjdC5zZXRXaWR0aCh0aWxlSGVp
Z2h0KTsKKyAgICAgICAgZGVzdFJlY3Quc2V0SGVpZ2h0KHNoYWRvd1JlY3QuaGVpZ2h0KCkgLSB0
b3BSaWdodFJhZGl1cy5oZWlnaHQoKSAtIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpIC0gcmFk
aXVzICogNCk7CisgICAgICAgIHBoYXNlLnNldFgoZGVzdFJlY3QueCgpIC0gdGlsZVJlY3QueCgp
KTsKKyAgICAgICAgcGhhc2Uuc2V0WShkZXN0UmVjdC55KCkgLSB0aWxlUmVjdC55KCkpOworCisg
ICAgICAgIHNoYWRvd0J1ZmZlci0+aW1hZ2UoKS0+ZHJhd1BhdHRlcm4oY29udGV4dCwgdGlsZVJl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGhhc2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0
KTsKKworICAgICAgICAvLyBsZWZ0IHNpZGUKKyAgICAgICAgdGlsZVJlY3Quc2V0WCgwKTsKKyAg
ICAgICAgdGlsZVJlY3Quc2V0WShyYWRpdXMgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpICsgcmFk
aXVzKTsKKyAgICAgICAgdGlsZVJlY3Quc2V0V2lkdGgodGlsZUhlaWdodCk7CisgICAgICAgIHRp
bGVSZWN0LnNldEhlaWdodCh0aWxlV2lkdGgpOworICAgICAgICBkZXN0UmVjdC5zZXRYKHNoYWRv
d1JlY3QueCgpKTsKKyAgICAgICAgZGVzdFJlY3Quc2V0WShzaGFkb3dSZWN0LnkoKSArIHRvcExl
ZnRSYWRpdXMuaGVpZ2h0KCkgKyAyICogcmFkaXVzKTsKKyAgICAgICAgZGVzdFJlY3Quc2V0V2lk
dGgodGlsZUhlaWdodCk7CisgICAgICAgIGRlc3RSZWN0LnNldEhlaWdodChzaGFkb3dSZWN0Lmhl
aWdodCgpIC0gdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSAtIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0
KCkgLSByYWRpdXMgKiA0KTsKKyAgICAgICAgcGhhc2Uuc2V0WChkZXN0UmVjdC54KCkgLSB0aWxl
UmVjdC54KCkpOworICAgICAgICBwaGFzZS5zZXRZKGRlc3RSZWN0LnkoKSAtIHRpbGVSZWN0Lnko
KSk7CisKKyAgICAgICAgc2hhZG93QnVmZmVyLT5pbWFnZSgpLT5kcmF3UGF0dGVybihjb250ZXh0
LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwaGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3Zlciwg
ZGVzdFJlY3QpOworCisgICAgICAgIC8vIHRvcCBsZWZ0IGNvcm5lcgorICAgICAgICB0aWxlUmVj
dC5zZXRYKDApOworICAgICAgICB0aWxlUmVjdC5zZXRZKDApOworICAgICAgICB0aWxlUmVjdC5z
ZXRXaWR0aCgyICogcmFkaXVzICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpKTsKKyAgICAgICAgdGls
ZVJlY3Quc2V0SGVpZ2h0KDIgKiByYWRpdXMgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpKTsKKyAg
ICAgICAgZGVzdFJlY3Quc2V0WChzaGFkb3dSZWN0LngoKSk7CisgICAgICAgIGRlc3RSZWN0LnNl
dFkoc2hhZG93UmVjdC55KCkpOworICAgICAgICBkZXN0UmVjdC5zZXRXaWR0aCh0aWxlUmVjdC53
aWR0aCgpKTsKKyAgICAgICAgZGVzdFJlY3Quc2V0SGVpZ2h0KHRpbGVSZWN0LmhlaWdodCgpKTsK
KyAgICAgICAgcGhhc2Uuc2V0WChkZXN0UmVjdC54KCkgLSB0aWxlUmVjdC54KCkpOworICAgICAg
ICBwaGFzZS5zZXRZKGRlc3RSZWN0LnkoKSAtIHRpbGVSZWN0LnkoKSk7CisKKyAgICAgICAgc2hh
ZG93QnVmZmVyLT5pbWFnZSgpLT5kcmF3UGF0dGVybihjb250ZXh0LCB0aWxlUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
aGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAg
ICAgIC8vIHRvcCByaWdodCBjb3JuZXIKKyAgICAgICAgdGlsZVJlY3Quc2V0WChzbWFsbEJ1ZmZl
clNpemUud2lkdGgoKSAtIDIgKiByYWRpdXMgLSB0b3BSaWdodFJhZGl1cy53aWR0aCgpKTsKKyAg
ICAgICAgdGlsZVJlY3Quc2V0WSgwKTsKKyAgICAgICAgdGlsZVJlY3Quc2V0V2lkdGgoMiAqIHJh
ZGl1cyArIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkpOworICAgICAgICB0aWxlUmVjdC5zZXRIZWln
aHQoMiAqIHJhZGl1cyArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpKTsKKyAgICAgICAgZGVzdFJl
Y3Quc2V0WChzaGFkb3dSZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIHRvcFJpZ2h0UmFkaXVzLndp
ZHRoKCkpOworICAgICAgICBkZXN0UmVjdC5zZXRZKHNoYWRvd1JlY3QueSgpKTsKKyAgICAgICAg
ZGVzdFJlY3Quc2V0V2lkdGgodGlsZVJlY3Qud2lkdGgoKSk7CisgICAgICAgIGRlc3RSZWN0LnNl
dEhlaWdodCh0aWxlUmVjdC5oZWlnaHQoKSk7CisgICAgICAgIHBoYXNlLnNldFgoZGVzdFJlY3Qu
eCgpIC0gdGlsZVJlY3QueCgpKTsKKyAgICAgICAgcGhhc2Uuc2V0WShkZXN0UmVjdC55KCkgLSB0
aWxlUmVjdC55KCkpOworCisgICAgICAgIHNoYWRvd0J1ZmZlci0+aW1hZ2UoKS0+ZHJhd1BhdHRl
cm4oY29udGV4dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNv
dXJjZU92ZXIsIGRlc3RSZWN0KTsKKworICAgICAgICAvLyBib3R0b20gcmlnaHQgY29ybmVyCisg
ICAgICAgIHRpbGVSZWN0LnNldFgoc21hbGxCdWZmZXJTaXplLndpZHRoKCkgLSAyICogcmFkaXVz
IC0gYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSk7CisgICAgICAgIHRpbGVSZWN0LnNldFkoc21h
bGxCdWZmZXJTaXplLmhlaWdodCgpIC0gMiAqIHJhZGl1cyAtIGJvdHRvbVJpZ2h0UmFkaXVzLmhl
aWdodCgpKTsKKyAgICAgICAgdGlsZVJlY3Quc2V0V2lkdGgoMiAqIHJhZGl1cyArIGJvdHRvbVJp
Z2h0UmFkaXVzLndpZHRoKCkpOworICAgICAgICB0aWxlUmVjdC5zZXRIZWlnaHQoMiAqIHJhZGl1
cyArIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpKTsKKyAgICAgICAgZGVzdFJlY3Quc2V0WChz
aGFkb3dSZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkpOwor
ICAgICAgICBkZXN0UmVjdC5zZXRZKHNoYWRvd1JlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAtIGJv
dHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpKTsKKyAgICAgICAgZGVzdFJlY3Quc2V0V2lkdGgodGls
ZVJlY3Qud2lkdGgoKSk7CisgICAgICAgIGRlc3RSZWN0LnNldEhlaWdodCh0aWxlUmVjdC5oZWln
aHQoKSk7CisgICAgICAgIHBoYXNlLnNldFgoZGVzdFJlY3QueCgpIC0gdGlsZVJlY3QueCgpKTsK
KyAgICAgICAgcGhhc2Uuc2V0WShkZXN0UmVjdC55KCkgLSB0aWxlUmVjdC55KCkpOworCisgICAg
ICAgIHNoYWRvd0J1ZmZlci0+aW1hZ2UoKS0+ZHJhd1BhdHRlcm4oY29udGV4dCwgdGlsZVJlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGhhc2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsK
KworICAgICAgICAvLyBib3R0b20gbGVmdCBjb3JuZXIKKyAgICAgICAgdGlsZVJlY3Quc2V0WCgw
KTsKKyAgICAgICAgdGlsZVJlY3Quc2V0WShzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgLSAyICog
cmFkaXVzIC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpOworICAgICAgICB0aWxlUmVjdC5z
ZXRXaWR0aCgyICogcmFkaXVzICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpKTsKKyAgICAgICAg
dGlsZVJlY3Quc2V0SGVpZ2h0KDIgKiByYWRpdXMgKyBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgp
KTsKKyAgICAgICAgZGVzdFJlY3Quc2V0WChzaGFkb3dSZWN0LngoKSk7CisgICAgICAgIGRlc3RS
ZWN0LnNldFkoc2hhZG93UmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC0gYm90dG9tUmlnaHRSYWRp
dXMuaGVpZ2h0KCkpOworICAgICAgICBkZXN0UmVjdC5zZXRXaWR0aCh0aWxlUmVjdC53aWR0aCgp
KTsKKyAgICAgICAgZGVzdFJlY3Quc2V0SGVpZ2h0KHRpbGVSZWN0LmhlaWdodCgpKTsKKyAgICAg
ICAgcGhhc2Uuc2V0WChkZXN0UmVjdC54KCkgLSB0aWxlUmVjdC54KCkpOworICAgICAgICBwaGFz
ZS5zZXRZKGRlc3RSZWN0LnkoKSAtIHRpbGVSZWN0LnkoKSk7CisKKyAgICAgICAgc2hhZG93QnVm
ZmVyLT5pbWFnZSgpLT5kcmF3UGF0dGVybihjb250ZXh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSwg
Y29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gQ3JlYXRlIHN1aXRhYmx5LXNpemVkIEltYWdlQnVmZmVyIHRvIGhvbGQg
dGhlIHNoYWRvdy4KKyAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzaGFkb3dCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNoYWRvd0J1ZmZlclNpemUpOworCisgICAgICAgIC8vIERyYXcg
c2hhZG93IGludG8gYSBuZXcgSW1hZ2VCdWZmZXIuCisgICAgICAgIGNhaXJvX3QqIHNoYWRvd0Nv
bnRleHQgPSBzaGFkb3dCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAg
ICAgIGNvcHlDb250ZXh0UHJvcGVydGllcyhjciwgc2hhZG93Q29udGV4dCk7CisgICAgICAgIGNh
aXJvX3RyYW5zbGF0ZShzaGFkb3dDb250ZXh0LCAtcmVjdC54KCkgKyByYWRpdXMsIC1yZWN0Lnko
KSArIHJhZGl1cyk7CisgICAgICAgIGNhaXJvX25ld19wYXRoKHNoYWRvd0NvbnRleHQpOworICAg
ICAgICBjYWlyb19hcHBlbmRfcGF0aChzaGFkb3dDb250ZXh0LCBwYXRoKTsKKworICAgICAgICBz
ZXRQbGF0Zm9ybUZpbGwoY29udGV4dCwgc2hhZG93Q29udGV4dCwgZ2NwKTsKKworICAgICAgICBj
b250ZXh0LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFk
b3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzLCBCbGl0KTsKKyAgICB9CisjZW5kaWYKK30KKwog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByLCBj
b25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50
U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQsIGNvbnN0IENvbG9y
JiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCkBAIC0xMjQwLDcgKzE0OTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEludFNpemUmIHRvcExlZnQsCiAgICAg
Y2Fpcm9fc2F2ZShjcik7CiAgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwg
UGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShyLCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9t
TGVmdCwgYm90dG9tUmlnaHQpKTsKICAgICBzZXRDb2xvcihjciwgY29sb3IpOwotICAgIGRyYXdQ
YXRoU2hhZG93KHRoaXMsIG1fY29tbW9uLCB0cnVlLCBmYWxzZSk7CisgICAgZHJhd0Zhc3RTaGFk
b3codGhpcywgbV9jb21tb24sIHIsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0
b21SaWdodCwgY29sb3JTcGFjZSk7CiAgICAgY2Fpcm9fZmlsbChjcik7CiAgICAgY2Fpcm9fcmVz
dG9yZShjcik7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQ2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNh
aXJvLmNwcAppbmRleCA1NDE0Yzc5Li5hNDk4YWE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIEJp
dG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkc3QsIGNvbnN0IEZsbwogICAgICAgICBjYWlyb19yZWN0YW5nbGUoc2hhZG93Q29udGV4dCwg
MCwgMCwgZHN0UmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpKTsKICAgICAgICAgY2Fpcm9f
ZmlsbChzaGFkb3dDb250ZXh0KTsKIAotICAgICAgICBjb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVNo
YWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFk
aXVzKTsKKyAgICAgICAgY29udGV4dC0+Y3JlYXRlUGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVy
LnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cywgQmxpdCk7CiAgICAg
fQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuaAppbmRleCAzYjhiNWEzLi5iYjQzMjhiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC02NSw2ICs2NSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAvLyBUaGUgcmVzdWx0IGlzIGJvdW5kZWQgYnkg
dGhlIHNpemUgb2YgdGhlIGZpbHRlciBwcmltaXRpdmUgdG8gc2F2ZSByZXNvdXJjZXMKICAgICAg
ICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlKCkgeyByZXR1cm4gbV9lZmZlY3RCdWZmZXIuZ2V0
KCk7IH0KKyAgICAgICAgUGFzc093blB0cjxJbWFnZUJ1ZmZlcio+IHJlbGVhc2VSZXN1bHRJbWFn
ZSgpIHsgcmV0dXJuIG1fZWZmZWN0QnVmZmVyLnJlbGVhc2UoKTsgfQogICAgICAgICB2b2lkIHNl
dEVmZmVjdEJ1ZmZlcihQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBlZmZlY3RCdWZmZXIpIHsgbV9l
ZmZlY3RCdWZmZXIgPSBlZmZlY3RCdWZmZXI7IH0KIAogICAgICAgICBGbG9hdFJlY3QgY2FsY3Vs
YXRlVW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqLCBGaWx0ZXJFZmZlY3QqLCBG
aWx0ZXJFZmZlY3QqKTsKLS0gCjEuNy4yCgo=
</data>
<flag name="review"
          id="52728"
          type_id="1"
          status="-"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64196</attachid>
            <date>2010-08-12 02:04:37 -0700</date>
            <delta_ts>2010-08-18 12:25:31 -0700</delta_ts>
            <desc>Proposed patch for pixel operations</desc>
            <filename>blur-pixelop.patch</filename>
            <type>text/plain</type>
            <size>14572</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IGNmNjI5NGM0YTEzOWI4OGMxZjVmYzc2M2Q0NzgyY2RiMzc0OWVjZjAKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgVHVlIEp1bCAyNyAx
OTowMzoyNCAyMDEwICswMjAwCgogICAgMjAxMC0wOC0xMiAgQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KICAgIAogICAgICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KICAgIAogICAgICAgICAgICBbR3RrXSB2ZXJ5IHNsb3cgcGFnZSBzY3JvbGxpbmcgb24g
YmlnIC13ZWJraXQtYm94LXNoYWRvdyBhcmVhcwogICAgICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk1ODIKICAgIAogICAgICAgICAgICBVc2UgYXJyYXlz
IHRvIGRvIHRoZSBwaXhlbCBvcGVyYXRpb25zIGluIHRoZSBnYXVzc2lhbiBibHVyIGZpbHRlciwK
ICAgICAgICAgICAgdGhpcyB3YXkgd2UgYXZvaWQgdGhlIHNldCBhbmQgZ2V0IGluIHRoZSBvYmpl
Y3RzIG9mIGVhY2ggdmFsdWUuIFdlCiAgICAgICAgICAgIGFsc28gYXZvaWQgdGhlIGNvcGllcyBv
ZiB0aGUgSW1hZ2VzQnVmZmVycyBpbnRvIHRoZSBJbWFnZURhdGFzCiAgICAgICAgICAgIGFkZGlu
ZyBuZXcgQVBJIHRvIHRoZSBJbWFnZUJ1ZmZlciB0byBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGRh
dGEKICAgICAgICAgICAgaW5zaWRlIHRoZSBidWZmZXIuCiAgICAKICAgICAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgogICAgICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOgogICAgICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmRhdGEpOgogICAgICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRpcnR5
KToKICAgICAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoK
ICAgICAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkYXRhKToKICAgICAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpkaXJ0eSk6CiAgICAgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CiAgICAgICAgICAgIChXZWJDb3JlOjpib3hC
bHVyKToKICAgICAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjphcHBseSk6CiAgICAg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHA6CiAg
ICAgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZGF0YSk6CiAgICAgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6ZGlydHkpOgogICAgICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0ltYWdlQnVmZmVyUXQuY3BwOgogICAgICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmRhdGEpOgogICAgICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRpcnR5KToKICAgICAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CiAgICAg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZGF0YSk6CiAgICAgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6ZGlydHkpOgogICAgICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0ltYWdlQnVmZmVyV2luY2UuY3BwOgogICAgICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OmRhdGEpOgogICAgICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRpcnR5KToKICAg
ICAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcDoKICAgICAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkYXRhKToKICAgICAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpkaXJ0eSk6CgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0ODVjZTZlLi4xMWQxYTAzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisy
MDEwLTA4LTEyICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHdGtdIHZlcnkgc2xv
dyBwYWdlIHNjcm9sbGluZyBvbiBiaWcgLXdlYmtpdC1ib3gtc2hhZG93IGFyZWFzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTU4MgorCisgICAgICAg
IFVzZSBhcnJheXMgdG8gZG8gdGhlIHBpeGVsIG9wZXJhdGlvbnMgaW4gdGhlIGdhdXNzaWFuIGJs
dXIgZmlsdGVyLAorICAgICAgICB0aGlzIHdheSB3ZSBhdm9pZCB0aGUgc2V0IGFuZCBnZXQgaW4g
dGhlIG9iamVjdHMgb2YgZWFjaCB2YWx1ZS4gV2UKKyAgICAgICAgYWxzbyBhdm9pZCB0aGUgY29w
aWVzIG9mIHRoZSBJbWFnZXNCdWZmZXJzIGludG8gdGhlIEltYWdlRGF0YXMKKyAgICAgICAgYWRk
aW5nIG5ldyBBUEkgdG8gdGhlIEltYWdlQnVmZmVyIHRvIGdldCBhIHJlZmVyZW5jZSB0byB0aGUg
ZGF0YQorICAgICAgICBpbnNpZGUgdGhlIGJ1ZmZlci4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZGlydHkpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRpcnR5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmJveEJsdXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVz
c2lhbkJsdXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFn
ZUJ1ZmZlckhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkaXJ0eSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZGlydHkpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpkaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1h
Z2VCdWZmZXJXaW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZGlydHkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRpcnR5KToK
KwogMjAxMC0wOC0wMiAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAppbmRleCBhNTRjNzIxLi41Zjg1ZmUwIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC04NSw2ICs4NSw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldFVubXVsdGlwbGllZEltYWdl
RGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAgICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRh
PiBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmKSBjb25zdDsKIAorICAg
ICAgICB1bnNpZ25lZCBjaGFyKiBkYXRhKCkgY29uc3Q7CisgICAgICAgIHZvaWQgZGlydHkoKTsK
KwogICAgICAgICB2b2lkIHB1dFVubXVsdGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KTsKICAgICAg
ICAgdm9pZCBwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdlRGF0YSosIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpOwogICAgICAgICAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
by5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8u
Y3BwCmluZGV4IDFhNDNlNTQuLjY5Y2E5OWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtMTQwLDYgKzE0MCwxNyBA
QCB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVj
dG9yPGludD4mIGxvb2tVcFRhYmxlKQogICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0
YW5nbGUgKG1fZGF0YS5tX3N1cmZhY2UsIDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVp
Z2h0KCkpOwogfQogCit1bnNpZ25lZCBjaGFyKiBJbWFnZUJ1ZmZlcjo6ZGF0YSgpIGNvbnN0Cit7
CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX2RhdGEubV9zdXJmYWNlKTsKKyAgICByZXR1cm4g
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2RhdGEubV9zdXJmYWNlKTsKK30KKwordm9p
ZCBJbWFnZUJ1ZmZlcjo6ZGlydHkoKQoreworICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eSAo
bV9kYXRhLm1fc3VyZmFjZSk7Cit9CisKIHRlbXBsYXRlIDxNdWx0aXBseSBtdWx0aXBsaWVkPgog
UGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBj
b25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUpCiB7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAppbmRleCBmZWI4
Y2VjLi43OGFmYzg3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0cuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDRy5jcHAKQEAgLTEyNCw2ICsxMjQsMTYgQEAgSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFn
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CiB9CiAKK3Vuc2lnbmVkIGNoYXIq
IEltYWdlQnVmZmVyOjpkYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLm1fZGF0YTsK
K30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6ZGlydHkoKQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRl
ZAorfQorCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVsdGlwbGllZD4KIFBhc3NSZWZQdHI8SW1hZ2VE
YXRhPiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXJE
YXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUpCiB7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRleCAxZjRl
NDE1Li5mZGU1NGEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBGRUdhdXNzaWFu
Qmx1cjo6c2V0U3RkRGV2aWF0aW9uWShmbG9hdCB5KQogICAgIG1fc3RkWSA9IHk7CiB9CiAKLXN0
YXRpYyB2b2lkIGJveEJsdXIoQ2FudmFzUGl4ZWxBcnJheSomIHNyY1BpeGVsQXJyYXksIENhbnZh
c1BpeGVsQXJyYXkqJiBkc3RQaXhlbEFycmF5LAorc3RhdGljIHZvaWQgYm94Qmx1cih1bnNpZ25l
ZCBjaGFyKiBzcmNQaXhlbEFycmF5LCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LAogICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGlu
dCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWln
aHQsIGJvb2wgYWxwaGFJbWFnZSkKIHsKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGVmZmVjdEhl
aWdodDsgKyt5KSB7CkBAIC04MSwxNiArODEsMTYgQEAgc3RhdGljIHZvaWQgYm94Qmx1cihDYW52
YXNQaXhlbEFycmF5KiYgc3JjUGl4ZWxBcnJheSwgQ2FudmFzUGl4ZWxBcnJheSomIGRzdFBpeGUK
ICAgICAgICAgICAgIC8vIEZpbGwgdGhlIGtlcm5lbAogICAgICAgICAgICAgaW50IG1heEtlcm5l
bFNpemUgPSBzdGQ6Om1pbihkeFJpZ2h0LCBlZmZlY3RXaWR0aCk7CiAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1heEtlcm5lbFNpemU7ICsraSkKLSAgICAgICAgICAgICAgICBzdW0g
Kz0gc3JjUGl4ZWxBcnJheS0+Z2V0KGxpbmUgKyBpICogc3RyaWRlICsgY2hhbm5lbCk7CisgICAg
ICAgICAgICAgICAgc3VtICs9IHNyY1BpeGVsQXJyYXlbbGluZSArIGkgKiBzdHJpZGUgKyBjaGFu
bmVsXTsKIAogICAgICAgICAgICAgLy8gQmx1cnJpbmcKICAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgewogICAgICAgICAgICAgICAgIGludCBwaXhlbEJ5
dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZSArIGNoYW5uZWw7Ci0gICAgICAgICAgICAgICAg
ZHN0UGl4ZWxBcnJheS0+c2V0KHBpeGVsQnl0ZU9mZnNldCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oc3VtIC8gZHgpKTsKKyAgICAgICAgICAgICAgICBkc3RQaXhlbEFycmF5W3BpeGVsQnl0
ZU9mZnNldF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzdW0gLyBkeCk7CiAgICAgICAg
ICAgICAgICAgaWYgKHggPj0gZHhMZWZ0KQotICAgICAgICAgICAgICAgICAgICBzdW0gLT0gc3Jj
UGl4ZWxBcnJheS0+Z2V0KHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZSk7CisgICAg
ICAgICAgICAgICAgICAgIHN1bSAtPSBzcmNQaXhlbEFycmF5W3BpeGVsQnl0ZU9mZnNldCAtIGR4
TGVmdCAqIHN0cmlkZV07CiAgICAgICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0IDwgZWZmZWN0
V2lkdGgpCi0gICAgICAgICAgICAgICAgICAgIHN1bSArPSBzcmNQaXhlbEFycmF5LT5nZXQocGl4
ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZSk7CisgICAgICAgICAgICAgICAgICAgIHN1
bSArPSBzcmNQaXhlbEFycmF5W3BpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGVdOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGFscGhhSW1hZ2UpIC8vIFNvdXJjZSBpbWFn
ZSBpcyBibGFjaywgaXQganVzdCBoYXMgZGlmZmVyZW50IGFscGhhIHZhbHVlcwogICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTM4LDEwICsxMzgsMTAgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6
YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAgICAgc2V0SXNBbHBoYUltYWdlKG1faW4tPmlzQWxwaGFJ
bWFnZSgpKTsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3
aW5nSW50UmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0
YT4gc3JjSW1hZ2VEYXRhKG1faW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpKTsKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2lu
dCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwogCiAgICAgaWYgKCFtX3N0ZFggJiYgIW1fc3Rk
WSkgeworICAgICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEobV9pbi0+cmVzdWx0
SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCkpOwog
ICAgICAgICByZXN1bHRJbWFnZSgpLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNyY0ltYWdl
RGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTE1NCwxMCArMTU0LDEyIEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OmFwcGx5KEZpbHRl
ciogZmlsdGVyKQogICAgIGlmIChtX3N0ZFkpCiAgICAgICAgIGtlcm5lbFNpemVZID0gbWF4KDJV
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmxvb3IobV9zdGRZICogZmlsdGVyLT5maWx0ZXJSZXNv
bHV0aW9uKCkuaGVpZ2h0KCkgKiBnR2F1c3NpYW5LZXJuZWxGYWN0b3IgKyAwLjVmKSkpOwogCi0g
ICAgQ2FudmFzUGl4ZWxBcnJheSogc3JjUGl4ZWxBcnJheShzcmNJbWFnZURhdGEtPmRhdGEoKSk7
CiAgICAgUmVmUHRyPEltYWdlRGF0YT4gdG1wSW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUo
aW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CiAgICAgQ2FudmFzUGl4ZWxB
cnJheSogdG1wUGl4ZWxBcnJheSh0bXBJbWFnZURhdGEtPmRhdGEoKSk7CiAKKyAgICB1bnNpZ25l
ZCBjaGFyKiByZXN1bHQgPSBtX2luLT5yZXN1bHRJbWFnZSgpLT5kYXRhKCk7CisgICAgdW5zaWdu
ZWQgY2hhciogdG1wID0gdG1wUGl4ZWxBcnJheS0+ZGF0YSgpLT5kYXRhKCk7CisKICAgICBpbnQg
c3RyaWRlID0gNCAqIGltYWdlUmVjdC53aWR0aCgpOwogICAgIGludCBkeExlZnQgPSAwOwogICAg
IGludCBkeFJpZ2h0ID0gMDsKQEAgLTE2NiwyNCArMTY4LDI0IEBAIHZvaWQgRkVHYXVzc2lhbkJs
dXI6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytp
KSB7CiAgICAgICAgIGlmIChrZXJuZWxTaXplWCkgewogICAgICAgICAgICAga2VybmVsUG9zaXRp
b24oaSwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCk7Ci0gICAgICAgICAgICBib3hCbHVy
KHNyY1BpeGVsQXJyYXksIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4Umln
aHQsIDQsIHN0cmlkZSwgaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSwgaXNB
bHBoYUltYWdlKCkpOworICAgICAgICAgICAgYm94Qmx1cihyZXN1bHQsIHRtcCwga2VybmVsU2l6
ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VS
ZWN0LmhlaWdodCgpLCBpc0FscGhhSW1hZ2UoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBDYW52YXNQaXhlbEFycmF5KiBhdXhQaXhlbEFycmF5ID0gdG1wUGl4ZWxBcnJheTsKLSAg
ICAgICAgICAgIHRtcFBpeGVsQXJyYXkgPSBzcmNQaXhlbEFycmF5OwotICAgICAgICAgICAgc3Jj
UGl4ZWxBcnJheSA9IGF1eFBpeGVsQXJyYXk7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBh
dXggPSB0bXA7CisgICAgICAgICAgICB0bXAgPSByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQg
PSBhdXg7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoa2VybmVsU2l6ZVkpIHsKICAgICAgICAg
ICAgIGtlcm5lbFBvc2l0aW9uKGksIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQpOwotICAg
ICAgICAgICAgYm94Qmx1cih0bXBQaXhlbEFycmF5LCBzcmNQaXhlbEFycmF5LCBrZXJuZWxTaXpl
WSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIGltYWdlUmVjdC5oZWlnaHQoKSwgaW1hZ2VS
ZWN0LndpZHRoKCksIGlzQWxwaGFJbWFnZSgpKTsKKyAgICAgICAgICAgIGJveEJsdXIodG1wLCAo
aSAhPSAyKSA/IHJlc3VsdCA6IHJlc3VsdEltYWdlKCktPmRhdGEoKSwga2VybmVsU2l6ZVksIGR5
TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBpbWFnZVJlY3QuaGVpZ2h0KCksIGltYWdlUmVjdC53
aWR0aCgpLCBpc0FscGhhSW1hZ2UoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBD
YW52YXNQaXhlbEFycmF5KiBhdXhQaXhlbEFycmF5ID0gdG1wUGl4ZWxBcnJheTsKLSAgICAgICAg
ICAgIHRtcFBpeGVsQXJyYXkgPSBzcmNQaXhlbEFycmF5OwotICAgICAgICAgICAgc3JjUGl4ZWxB
cnJheSA9IGF1eFBpeGVsQXJyYXk7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBhdXggPSB0
bXA7CisgICAgICAgICAgICB0bXAgPSByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQgPSBhdXg7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXN1bHRJbWFnZSgpLT5wdXRQcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhKHNyY0ltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKKyAg
ICByZXN1bHRJbWFnZSgpLT5kaXJ0eSgpOwogfQogCiB2b2lkIEZFR2F1c3NpYW5CbHVyOjpkdW1w
KCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZm
ZXJIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVy
SGFpa3UuY3BwCmluZGV4IGM1ZGU0ODUuLmRjYjZkMWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcApAQCAtMjA2LDYgKzIw
NiwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29udmVydFRvSW50ZXJuYWxEYXRhKGNvbnN0IHVp
bnQ4KiBzb3VyY2VSb3dzLCB1bnNpZ25lZCBzb3VyYwogICAgIH0KIH0KIAordW5zaWduZWQgY2hh
ciogSW1hZ2VCdWZmZXI6OmRhdGEoKSBjb25zdAoreworICAgIG1fZGF0YS5tX3ZpZXcuU3luYygp
OworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIgKj4oaW1hZ2VEYXRh
Lm1fYml0bWFwLkJpdHMoKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRpcnR5KCkKK3sKKyAg
ICAvLyBOb3QgSW1wbGVtZW50ZWQKK30KKwogc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBn
ZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXJEYXRhJiBp
bWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbGllZCkKIHsKICAg
ICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0ltYWdlQnVmZmVyUXQuY3BwCmluZGV4IDc2MWE0ZmUuLmY5NmE5NDEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcApAQCAtMTQ0LDYgKzE0NCwy
MyBAQCB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qg
VmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQogICAgICAgICBtX2RhdGEubV9wYWludGVyLT5iZWdp
bigmbV9kYXRhLm1fcGl4bWFwKTsKIH0KIAordW5zaWduZWQgY2hhciogSW1hZ2VCdWZmZXI6OmRh
dGEoKSBjb25zdAoreworICAgIFFJbWFnZSBpbWFnZSA9IG1fZGF0YS5tX3BpeG1hcC50b0ltYWdl
KCkuY29udmVydFRvRm9ybWF0KFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsK
KyNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNywgMCkKKyAgICB1bnNpZ25l
ZCBjaGFyKiBiaXRzID0gaW1hZ2UuY29uc3RCaXRzKCk7CisjZWxzZQorICAgIHVuc2lnbmVkIGNo
YXIqIGJpdHMgPSBpbWFnZS5iaXRzKCk7CisjZW5kaWYKKworICAgIHJldHVybiBiaXRzOworfQor
Cit2b2lkIEltYWdlQnVmZmVyOjpkaXJ0eSgpCit7CisgICAgLy8gTm90IEltcGxlbWVudGVkCit9
CisKIHRlbXBsYXRlIDxNdWx0aXBseSBtdWx0aXBsaWVkPgogUGFzc1JlZlB0cjxJbWFnZURhdGE+
IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEm
IGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKaW5kZXggZWFhOTFlYy4uNWEw
ZWNiNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVm
ZmVyU2tpYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVm
ZmVyU2tpYS5jcHAKQEAgLTEyMyw2ICsxMjMsMTggQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZv
cm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+JiBsb29rVXBUYWJsZSkKICAg
ICB9CiB9CiAKKwordW5zaWduZWQgY2hhciogSW1hZ2VCdWZmZXI6OmRhdGEoKSBjb25zdAorewor
ICAgIGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPnN5bmNTb2Z0d2FyZUNhbnZhcygpOwor
ICAgIHJldHVybiBtX2RhdGEubV9kYXRhOworfQorCit2b2lkIEltYWdlQnVmZmVyOjpkaXJ0eSgp
Cit7CisgICAgLy8gTm90IEltcGxlbWVudGVkCit9CisKIHRlbXBsYXRlIDxNdWx0aXBseSBtdWx0
aXBsaWVkPgogUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBTa0JpdG1hcCYgYml0bWFwLCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5jZS5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luY2UuY3BwCmluZGV4IDFhMjVmNGYuLmVh
MDFkMjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VC
dWZmZXJXaW5jZS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFn
ZUJ1ZmZlcldpbmNlLmNwcApAQCAtMTAzLDYgKzEwMywxNiBAQCBJbWFnZSogSW1hZ2VCdWZmZXI6
OmltYWdlKCkgY29uc3QKICAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKIH0KIAordW5zaWduZWQg
Y2hhciogSW1hZ2VCdWZmZXI6OmRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4obV9kYXRhLm1fYml0bWFwLT5ieXRlcygpKTsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlcjo6ZGlydHkoKQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQorCiB0ZW1w
bGF0ZSA8Ym9vbCBwcmVtdWx0aXBsaWVkPiBQYXNzUmVmUHRyPEltYWdlRGF0YT4KIHN0YXRpYyBn
ZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgU2hhcmVkQml0bWFwKiBiaXRt
YXApCiB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVm
ZmVyV3guY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNw
cAppbmRleCA3NzVlMDE4Li43ODU5ZWIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAKQEAgLTY2LDYgKzY2LDE4IEBAIFBhc3NSZWZQdHI8SW1h
Z2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRS
ZWN0JiByZWN0CiAgICAgcmV0dXJuIDA7CiB9CiAKKwordW5zaWduZWQgY2hhciogSW1hZ2VCdWZm
ZXI6OmRhdGEoKSBjb25zdAoreworICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAw
OworfQorCit2b2lkIEltYWdlQnVmZmVyOjpkaXJ0eSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwogdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdl
RGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64199</attachid>
            <date>2010-08-12 02:53:15 -0700</date>
            <delta_ts>2010-08-18 12:27:50 -0700</delta_ts>
            <desc>Patch-set with all the patches, for testing purposes</desc>
            <filename>blur_patchset.tar.gz</filename>
            <type>text/plain</type>
            <size>16590</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">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
kAEA
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64747</attachid>
            <date>2010-08-18 12:05:25 -0700</date>
            <delta_ts>2010-08-19 04:08:23 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>tiling_shadow.patch</filename>
            <type>text/plain</type>
            <size>21409</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDc2ZDgzZjFmMGM5NjI3ZDhhMWM2NjRmNTBhYjJjNThiMjcyMWNhYzAKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgVHVlIEp1bCAyNyAx
Nzo1NzoxNyAyMDEwICswMjAwCgogICAgMjAxMC0wOC0wMiAgQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KICAgIAogICAgICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KICAgIAogICAgICAgICAgICBbR3RrXSB2ZXJ5IHNsb3cgcGFnZSBzY3JvbGxpbmcgb24g
YmlnIC13ZWJraXQtYm94LXNoYWRvdyBhcmVhcwogICAgICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk1ODIKICAgIAogICAgICAgICAgICBBZGQgYSBuZXcg
ZHJhd0Zhc3RTaGFkb3cgbWV0aG9kIHRvIHJlbmRlciBhIGJpZyBzaGFkb3cgZG9pbmcKICAgICAg
ICAgICAgdGlsaW5nIG9mIHBhcnRzIG9mIGEgc21hbGxlciBzaGFkb3cuIFdlIGNyZWF0ZSB0aGUg
bWluaW11bSBzaGFkb3cKICAgICAgICAgICAgcmVxdWlyZWQgdG8gZ2V0IHRoZSB0aWxlcyB3ZSB3
aWxsIHVzZSB0byByZW5kZXIgdGhlIHJlYWwgc2hhZG93CiAgICAgICAgICAgIGFuZCB3ZSB1c2Ug
ZHJhd1BhdHRlcm4gd2l0aCB0aG9zZSB0aWxlcyB0byBjcmVhdGUgdGhlIHNoYWRvdy4KICAgIAog
ICAgICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgogICAgICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHA6CiAgICAgICAgICAg
IChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKICAgICAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CiAgICAgICAgICAgIChXZWJDb3Jl
OjpkcmF3UGF0aFNoYWRvdyk6CiAgICAgICAgICAgIChXZWJDb3JlOjpkcmF3Qm9yZGVybGVzc1Jl
Y3RTaGFkb3cpOgogICAgICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjcmVhdGVQ
bGF0Zm9ybVNoYWRvdyk6CiAgICAgICAgICAgIChXZWJDb3JlOjpnZXRQaGFzZSk6CiAgICAgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGYXN0U2hhZG93KToKICAgICAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKICAgICAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcDoKICAgICAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKICAgICAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgogICAgICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpyZWxlYXNlUmVzdWx0SW1hZ2UpOgoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjIyOWE1MC4uMDA0YjYxNSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
MSBAQAorMjAxMC0wOC0wMiAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR3RrXSB2
ZXJ5IHNsb3cgcGFnZSBzY3JvbGxpbmcgb24gYmlnIC13ZWJraXQtYm94LXNoYWRvdyBhcmVhcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk1ODIKKwor
ICAgICAgICBBZGQgYSBuZXcgZHJhd0Zhc3RTaGFkb3cgbWV0aG9kIHRvIHJlbmRlciBhIGJpZyBz
aGFkb3cgZG9pbmcKKyAgICAgICAgdGlsaW5nIG9mIHBhcnRzIG9mIGEgc21hbGxlciBzaGFkb3cu
IFdlIGNyZWF0ZSB0aGUgbWluaW11bSBzaGFkb3cKKyAgICAgICAgcmVxdWlyZWQgdG8gZ2V0IHRo
ZSB0aWxlcyB3ZSB3aWxsIHVzZSB0byByZW5kZXIgdGhlIHJlYWwgc2hhZG93CisgICAgICAgIGFu
ZCB3ZSB1c2UgZHJhd1BhdHRlcm4gd2l0aCB0aG9zZSB0aWxlcyB0byBjcmVhdGUgdGhlIHNoYWRv
dy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3UGF0
aFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3Qm9yZGVybGVzc1JlY3RTaGFkb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseVBsYXRmb3JtU2hhZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUGxhdGZvcm1TaGFkb3cp
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0UGhhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3RmFzdFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVsZWFzZVJlc3VsdEltYWdlKToKKwogMjAx
MC0wNy0xNSAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGU2OTMyNGEuLjE0MmY5MzUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMjk0LDcgKzI5NCw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRBbHBoYShmbG9hdCk7CiAjaWYgUExB
VEZPUk0oQ0FJUk8pCiAgICAgICAgIGZsb2F0IGdldEFscGhhKCk7Ci0gICAgICAgIHZvaWQgY3Jl
YXRlUGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBD
b2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQgcmFk
aXVzKTsKKyAgICAgICAgdm9pZCBhcHBseVBsYXRmb3JtU2hhZG93KFBhc3NPd25QdHI8SW1hZ2VC
dWZmZXI+IGJ1ZmZlciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBjb25zdCBGbG9hdFJlY3Qm
IHNoYWRvd1JlY3QsIGZsb2F0IHJhZGl1cyk7CisgICAgICAgIFBhc3NPd25QdHI8SW1hZ2VCdWZm
ZXI+IGNyZWF0ZVBsYXRmb3JtU2hhZG93KFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciwg
Y29uc3QgRmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBmbG9hdCByYWRpdXMpOwogICAgICAgICBzdGF0
aWMgdm9pZCBjYWxjdWxhdGVTaGFkb3dCdWZmZXJEaW1lbnNpb25zKEludFNpemUmIHNoYWRvd0J1
ZmZlclNpemUsIEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQmIHJhZGl1cywgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBGbG9hdFNpemUmIHNoYWRvd1NpemUsIGZsb2F0IHNo
YWRvd0JsdXIpOwogI2VuZGlmCiAKQEAgLTQ0MCw2ICs0NDEsMTEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFByaXZhdGUqIG1fY29tbW9uOwogICAgICAg
ICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIG1fZGF0YTsgLy8gRGVwcmVjYXRlZDsg
bV9jb21tbW9uIGNhbiBqdXN0IGJlIGRvd25jYXN0ZWQuIFRvIGJlIHJlbW92ZWQuCisKKyNpZiBQ
TEFURk9STShDQUlSTykKKyAgICAgICAgdm9pZCBkcmF3RmFzdFNoYWRvdyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dFByaXZhdGUqIGdjcCwgY29uc3QgSW50UmVjdCYg
ciwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJp
Z2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0
U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSk7CisjZW5kaWYK
KwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAppbmRleCBkMTRiMzcxLi4xZjVjNzU5IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0xMTQs
NyArMTE0LDcgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnMKICAgICAgICAgICAgIGNhaXJvX3Jl
c3RvcmUoc2hhZG93Q3IpOwogICAgICAgICB9CiAgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjciwg
MC4wLCAtZXh0ZW50cy5oZWlnaHQpOwotICAgICAgICBjb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVNo
YWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFk
aXVzKTsKKyAgICAgICAgY29udGV4dC0+YXBwbHlQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIu
cmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKICNlbHNlCiAgICAg
ICAgIGNhaXJvX3RyYW5zbGF0ZShjciwgc2hhZG93U2l6ZS53aWR0aCgpLCBzaGFkb3dTaXplLmhl
aWdodCgpKTsKICAgICAgICAgY2Fpcm9fc2hvd19nbHlwaHMoY3IsIGdseXBocywgbnVtR2x5cGhz
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAKaW5kZXggN2U0OTk4My4uZDQzOTEyYiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHAKQEAgLTIyOSw3ICsyMjksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHJhd1BhdGhTaGFkb3co
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRQcml2YQogICAgIGlmIChz
dHJva2VTaGFkb3cpCiAgICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlKGNvbnRleHQsIHNoYWRvd0Nv
bnRleHQsIGdjcCk7CiAKLSAgICBjb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFkb3dC
dWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKKyAgICBj
b250ZXh0LT5hcHBseVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRv
d0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOwogI2VuZGlmCiB9CiAKQEAgLTY0Miw3ICs2NDIs
NyBAQCBzdGF0aWMgdm9pZCBkcmF3Qm9yZGVybGVzc1JlY3RTaGFkb3coR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmCiAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dD
b250ZXh0ID0gc2hhZG93QnVmZmVyLT5jb250ZXh0KCk7CiAgICAgc2hhZG93Q29udGV4dC0+Zmls
bFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQocmFkaXVzLCByYWRpdXMpLCByZWN0LnNpemUoKSks
IHJlY3RDb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7CiAKLSAgICBjb250ZXh0LT5jcmVhdGVQbGF0
Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVj
dCwgcmFkaXVzKTsKKyAgICBjb250ZXh0LT5hcHBseVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZl
ci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOwogI2VuZGlmCiB9
CiAKQEAgLTkyMywxMSArOTIzLDIyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVNoYWRvdyhGbG9hdFNpemUgY29uc3QmIHNpemUsIGZsb2F0LCBDb2xvciBjb25zCiAgICAgfQog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUGxhdGZvcm1TaGFkb3coUGFzc093blB0
cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZs
b2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQgcmFkaXVzKQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmFwcGx5UGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25z
dCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQg
cmFkaXVzKQogewogI2lmIEVOQUJMRShGSUxURVJTKQorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4g
YWxwaGFTaGFkb3dCdWZmZXIgPSBjcmVhdGVQbGF0Zm9ybVNoYWRvdyhidWZmZXIsIHNoYWRvd1Jl
Y3QsIHJhZGl1cyk7CisgICAgaWYgKCFhbHBoYVNoYWRvd0J1ZmZlcikKKyAgICAgICAgYWxwaGFT
aGFkb3dCdWZmZXIgPSBidWZmZXI7CisKICAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7Cisg
ICAgc2V0Q29sb3IoY3IsIHNoYWRvd0NvbG9yKTsKKyAgICBjYWlyb19tYXNrX3N1cmZhY2UoY3Is
IGFscGhhU2hhZG93QnVmZmVyLT5tX2RhdGEubV9zdXJmYWNlLCBzaGFkb3dSZWN0LngoKSwgc2hh
ZG93UmVjdC55KCkpOworI2VuZGlmCit9CiAKK1Bhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IEdyYXBo
aWNzQ29udGV4dDo6Y3JlYXRlUGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4g
YnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd1JlY3QsIGZsb2F0IHJhZGl1cykKK3sKKyNp
ZiBFTkFCTEUoRklMVEVSUykKICAgICBGbG9hdFBvaW50IGJsdXJSYWRpdXMgPSBGbG9hdFBvaW50
KHJhZGl1cywgcmFkaXVzKTsKIAogICAgIC8vIGNhbGN1bGF0ZSB0aGUgc3RhbmRhcmQgZGV2aWF0
aW9uCkBAIC05MzUsMTEgKzk0Niw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVQbGF0
Zm9ybVNoYWRvdyhQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIsIGNvbnN0CiAgICAgRkVH
YXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVN0ZERldmlhdGlvbihibHVyUmFkaXVzLCBGbG9hdFNpemUo
MSwgMSksIHNkeCwgc2R5KTsKIAogICAgIC8vIGRyYXcgdGhlIHNoYWRvdyB3aXRob3V0IGJsdXJy
aW5nLCBpZiByYWRpdXMgaXMgemVybwotICAgIGlmICghcmFkaXVzIHx8ICghc2R4ICYmICFzZHkp
KSB7Ci0gICAgICAgIHNldENvbG9yKGNyLCBzaGFkb3dDb2xvcik7Ci0gICAgICAgIGNhaXJvX21h
c2tfc3VyZmFjZShjciwgYnVmZmVyLT5tX2RhdGEubV9zdXJmYWNlLCBzaGFkb3dSZWN0LngoKSwg
c2hhZG93UmVjdC55KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcmFkaXVz
IHx8ICghc2R4ICYmICFzZHkpKQorICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIGNyZWF0ZSBm
aWx0ZXIKICAgICBSZWZQdHI8RmlsdGVyPiBmaWx0ZXIgPSBJbWFnZUJ1ZmZlckZpbHRlcjo6Y3Jl
YXRlKCk7CkBAIC05NTEsMTAgKzk1OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVQ
bGF0Zm9ybVNoYWRvdyhQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIsIGNvbnN0CiAgICAg
Ymx1ci0+c2V0U2NhbGVkU3ViUmVnaW9uKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNoYWRvd1Jl
Y3Quc2l6ZSgpKSk7CiAgICAgYmx1ci0+YXBwbHkoZmlsdGVyLmdldCgpKTsKIAotICAgIC8vIE1h
c2sgdGhlIGZpbHRlciB3aXRoIHRoZSBzaGFkb3cgY29sb3IgYW5kIGRyYXcgaXQgdG8gdGhlIGNv
bnRleHQuCi0gICAgLy8gTWFza2luZyBtYWtlcyBpdCBwb3NzaWJsZSB0byBqdXN0IGJsdXIgdGhl
IGFscGhhIGNoYW5uZWwuCi0gICAgc2V0Q29sb3IoY3IsIHNoYWRvd0NvbG9yKTsKLSAgICBjYWly
b19tYXNrX3N1cmZhY2UoY3IsIGJsdXItPnJlc3VsdEltYWdlKCktPm1fZGF0YS5tX3N1cmZhY2Us
IHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgcmV0dXJuIGJsdXItPnJlbGVh
c2VSZXN1bHRJbWFnZSgpOwogI2VuZGlmCiB9CiAKQEAgLTEyMjMsNiArMTIyOCwyMTcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRFbGxpcHNlSW5SZWN0KGNvbnN0IEludFJlY3QmIHIp
CiAgICAgY2xpcE91dChwKTsKIH0KIAorc3RhdGljIGlubGluZSBGbG9hdFBvaW50IGdldFBoYXNl
KGNvbnN0IEZsb2F0UmVjdCYgZGVzdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlKQoreworICAgIEZs
b2F0UG9pbnQgcGhhc2UgPSBkZXN0LmxvY2F0aW9uKCk7CisgICAgcGhhc2UubW92ZSgtdGlsZS54
KCksIC10aWxlLnkoKSk7CisKKyAgICByZXR1cm4gcGhhc2U7Cit9CisKKy8qCisgIFRoaXMgZnVu
Y3Rpb24gdXNlcyB0aWxpbmcgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIHNoYWRv
dworICBkcmF3aW5nIG9mIHJvdW5kZWQgcmVjdGFuZ2xlcy4gVGhlIGNvZGUgYmFzaWNhbGx5IGRv
ZXMgdGhlIGZvbGxvd2luZworICBzdGVwczoKKworICAgICAxLiBDYWxjdWxhdGUgdGhlIG1pbmlt
dW0gcmVjdGFuZ2xlIHNpemUgcmVxdWlyZWQgdG8gY3JlYXRlIHRoZQorICAgICB0aWxlcworCisg
ICAgIDIuIElmIHRoYXQgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIHJlYWwgcmVjdGFuZ2xlIHJl
bmRlciB0aGUgbmV3CisgICAgIHNtYWxsIHJlY3RhbmdsZSBhbmQgaXRzIHNoYWRvdywgaW4gb3Ro
ZXIgY2FzZSByZW5kZXIgdGhlIHNoYWRvdworICAgICBvZiB0aGUgcmVhbCByZWN0YW5nbGUuCisK
KyAgICAgMy4gQ2FsY3VsYXRlIHRoZSBzaXplcyBhbmQgcG9zaXRpb25zIG9mIHRoZSB0aWxlcyBh
bmQgdGhlaXIKKyAgICAgZGVzdGluYXRpb25zIGFuZCB1c2UgZHJhd1BhdHRlcm4gdG8gcmVuZGVy
IHRoZSBmaW5hbCBzaGFkb3cuIFRoZQorICAgICBjb2RlIGRpdmlkZXMgdGhlIHJlbmRlcmluZyBp
biA4IHRpbGVzOgorCisgICAgICAgIDEgfCAyIHwgMworICAgICAgIC0tLS0tLS0tLS0tCisgICAg
ICAgIDQgfCAgIHwgNQorICAgICAgIC0tLS0tLS0tLS0tCisgICAgICAgIDYgfCA3IHwgOAorCisg
ICAgIFRoZSBjb3JuZXJzIGFyZSBkaXJlY3RseSBjb3BpZWQgZnJvbSB0aGUgc21hbGwgcmVjdGFu
Z2xlIHRvIHRoZQorICAgICByZWFsIG9uZSBhbmQgdGhlIHNpZGUgdGlsZXMgYXJlIDEgcGl4ZWwg
d2lkdGgsIHdlIHVzZSB0aGVtIGFzCisgICAgIHRpbGVzIHRvIGNvdmVyIHRoZSBkZXN0aW5hdGlv
biBzaWRlLiBUaGUgY29ybmVyIHRpbGVzIGFyZSBiaWdnZXIKKyAgICAgdGhhbiBqdXN0IHRoZSBz
aWRlIG9mIHRoZSByb3VuZGVkIGNvcm5lciwgd2UgbmVlZCB0byBpbmNyZWFzZSBpdAorICAgICBi
ZWNhdXNlIHRoZSBtb2RpZmljYXRpb25zIGNhdXNlZCBieSB0aGUgY29ybmVyIG92ZXIgdGhlIGJs
dXIKKyAgICAgZWZmZWN0LgorICovCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zhc3RTaGFk
b3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBnY3As
IGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3Qg
RmxvYXRTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFk
aXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UpCit7CisjaWYgRU5BQkxFKEZJTFRFUlMpCisgICAgRmxvYXRTaXplIHNoYWRvd1NpemU7
CisgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKKyAgICBmbG9hdCBzaGFkb3dCbHVyOworICAg
IENvbG9yIHNoYWRvd0NvbG9yOworICAgIGlmICghY29udGV4dC0+Z2V0U2hhZG93KHNoYWRvd1Np
emUsIHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBDYWxjdWxhdGUgZmlsdGVyIHZhbHVlcyB0byBjcmVhdGUgYXBwcm9wcmlh
dGUgc2hhZG93LgorICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
CisgICAgY2Fpcm9fcGF0aF90KiBwYXRoID0gY2Fpcm9fY29weV9wYXRoKGNyKTsKKyAgICBkb3Vi
bGUgeDAsIHgxLCB5MCwgeTE7CisgICAgY2Fpcm9fZmlsbF9leHRlbnRzKGNyLCAmeDAsICZ5MCwg
JngxLCAmeTEpOworICAgIEZsb2F0UmVjdCByZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7
CisKKyAgICBJbnRTaXplIHNoYWRvd0J1ZmZlclNpemU7CisgICAgRmxvYXRSZWN0IHNoYWRvd1Jl
Y3Q7CisgICAgZmxvYXQgcmFkaXVzID0gMDsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNhbGN1bGF0
ZVNoYWRvd0J1ZmZlckRpbWVuc2lvbnMoc2hhZG93QnVmZmVyU2l6ZSwgc2hhZG93UmVjdCwgcmFk
aXVzLCByZWN0LCBzaGFkb3dTaXplLCBzaGFkb3dCbHVyKTsKKworICAgIC8vIHNpemUgb2YgdGhl
IHRpbGluZyBmb3IgdGhlIHNpZGVzCisgICAgaW50IHRpbGVXaWR0aCA9IDE7CisgICAgZmxvYXQg
cmFkaXVzVHdpY2UgPSByYWRpdXMgKiAyOworICAgIGludCBzaGFkb3dTaWRlID0gcmFkaXVzVHdp
Y2UgKyB0aWxlV2lkdGg7CisgICAgSW50U2l6ZSBzbWFsbEJ1ZmZlclNpemU7CisKKyAgICBmbG9h
dCBvZmZzZXRXaWR0aCA9IHNoYWRvd09mZnNldC53aWR0aCgpOworICAgIGlmIChvZmZzZXRXaWR0
aCA+IDApCisgICAgICAgIG9mZnNldFdpZHRoICs9IG1heCh0b3BSaWdodFJhZGl1cy53aWR0aCgp
LCBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpKTsKKyAgICBlbHNlIGlmIChvZmZzZXRXaWR0aCA8
IDApCisgICAgICAgIG9mZnNldFdpZHRoID0gLW9mZnNldFdpZHRoICsgbWF4KHRvcExlZnRSYWRp
dXMud2lkdGgoKSwgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpKTsKKworICAgIGZsb2F0IG9mZnNl
dEhlaWdodCA9IHNoYWRvd09mZnNldC5oZWlnaHQoKTsKKyAgICBpZiAob2Zmc2V0SGVpZ2h0ID4g
MCkgeworICAgICAgICBpZiAob2Zmc2V0SGVpZ2h0ID4gbWluKGJvdHRvbUxlZnRSYWRpdXMuaGVp
Z2h0KCksIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpKSkKKyAgICAgICAgICAgIG9mZnNldFdp
ZHRoID0gbWF4KG9mZnNldFdpZHRoLCByYWRpdXNUd2ljZSArIG1heChib3R0b21SaWdodFJhZGl1
cy53aWR0aCgpLCBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCkpKTsKKyAgICAgICAgb2Zmc2V0SGVp
Z2h0ICs9IG1heChib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpLCBib3R0b21SaWdodFJhZGl1cy5o
ZWlnaHQoKSk7CisgICAgfSBlbHNlIGlmIChvZmZzZXRIZWlnaHQgPCAwKSB7CisgICAgICAgIGlm
IChhYnMob2Zmc2V0SGVpZ2h0KSA+IG1pbih0b3BMZWZ0UmFkaXVzLmhlaWdodCgpLCB0b3BSaWdo
dFJhZGl1cy5oZWlnaHQoKSkpCisgICAgICAgICAgICBvZmZzZXRXaWR0aCA9IG1heChvZmZzZXRX
aWR0aCwgcmFkaXVzVHdpY2UgKyBtYXgodG9wUmlnaHRSYWRpdXMud2lkdGgoKSwgdG9wTGVmdFJh
ZGl1cy53aWR0aCgpKSk7CisgICAgICAgIG9mZnNldEhlaWdodCA9IC1vZmZzZXRIZWlnaHQgKyBt
YXgodG9wTGVmdFJhZGl1cy5oZWlnaHQoKSwgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkpOworICAg
IH0KKworICAgIGlmIChzaGFkb3dPZmZzZXQud2lkdGgoKSA+IDApIHsKKyAgICAgICAgaWYgKHNo
YWRvd09mZnNldC53aWR0aCgpID4gbWluKGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSwgdG9wTGVm
dFJhZGl1cy53aWR0aCgpKSkKKyAgICAgICAgICAgIG9mZnNldEhlaWdodCA9IG1heChvZmZzZXRI
ZWlnaHQsIHJhZGl1c1R3aWNlICsgbWF4KGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCksIHRvcExl
ZnRSYWRpdXMuaGVpZ2h0KCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoYWJzKHNoYWRv
d09mZnNldC53aWR0aCgpKSA+IG1pbihib3R0b21SaWdodFJhZGl1cy53aWR0aCgpLCB0b3BSaWdo
dFJhZGl1cy53aWR0aCgpKSkKKyAgICAgICAgICAgIG9mZnNldEhlaWdodCA9IG1heChvZmZzZXRI
ZWlnaHQsIHJhZGl1c1R3aWNlICsgbWF4KGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpLCB0b3BS
aWdodFJhZGl1cy5oZWlnaHQoKSkpOworICAgIH0KKworICAgIHNtYWxsQnVmZmVyU2l6ZS5zZXRX
aWR0aChtYXgob2Zmc2V0V2lkdGggKiAyLCByYWRpdXNUd2ljZSArIG1heCh0b3BMZWZ0UmFkaXVz
LndpZHRoKCksIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSkgKyBzaGFkb3dTaWRlICsgbWF4KHRv
cFJpZ2h0UmFkaXVzLndpZHRoKCksIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkpKSk7CisgICAg
c21hbGxCdWZmZXJTaXplLnNldEhlaWdodChtYXgob2Zmc2V0SGVpZ2h0ICogMiwgcmFkaXVzVHdp
Y2UgKyBtYXgodG9wTGVmdFJhZGl1cy5oZWlnaHQoKSwgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkp
ICsgc2hhZG93U2lkZSArIG1heChib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpLCBib3R0b21SaWdo
dFJhZGl1cy5oZWlnaHQoKSkpKTsKKworICAgIGlmICgoc21hbGxCdWZmZXJTaXplLndpZHRoKCkg
PiBzaGFkb3dCdWZmZXJTaXplLndpZHRoKCkpIHx8IChzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkg
PiBzaGFkb3dCdWZmZXJTaXplLmhlaWdodCgpKSB8fCAocmFkaXVzIDw9IDApKSB7CisgICAgICAg
IC8vIENyZWF0ZSBzdWl0YWJseS1zaXplZCBJbWFnZUJ1ZmZlciB0byBob2xkIHRoZSBzaGFkb3cu
CisgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc2hhZG93QnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaGFkb3dCdWZmZXJTaXplKTsKKworICAgICAgICAvLyBEcmF3IHNoYWRvdyBpbnRv
IGEgbmV3IEltYWdlQnVmZmVyLgorICAgICAgICBjYWlyb190KiBzaGFkb3dDb250ZXh0ID0gc2hh
ZG93QnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOworICAgICAgICBjb3B5Q29u
dGV4dFByb3BlcnRpZXMoY3IsIHNoYWRvd0NvbnRleHQpOworICAgICAgICBjYWlyb190cmFuc2xh
dGUoc2hhZG93Q29udGV4dCwgLXJlY3QueCgpICsgcmFkaXVzLCAtcmVjdC55KCkgKyByYWRpdXMp
OworICAgICAgICBjYWlyb19uZXdfcGF0aChzaGFkb3dDb250ZXh0KTsKKyAgICAgICAgY2Fpcm9f
YXBwZW5kX3BhdGgoc2hhZG93Q29udGV4dCwgcGF0aCk7CisKKyAgICAgICAgc2V0UGxhdGZvcm1G
aWxsKGNvbnRleHQsIHNoYWRvd0NvbnRleHQsIGdjcCk7CisKKyAgICAgICAgY29udGV4dC0+YXBw
bHlQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hh
ZG93UmVjdCwgcmFkaXVzKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgT3duUHRy
PEltYWdlQnVmZmVyPiBzbWFsbEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc21hbGxCdWZm
ZXJTaXplKTsKKworICAgIEludFJlY3Qgc21hbGxSZWN0ID0gSW50UmVjdChyYWRpdXMsIHJhZGl1
cywgc21hbGxCdWZmZXJTaXplLndpZHRoKCkgLSByYWRpdXNUd2ljZSwgc21hbGxCdWZmZXJTaXpl
LmhlaWdodCgpIC0gcmFkaXVzVHdpY2UpOworCisgICAgLy8gRHJhdyBzaGFkb3cgaW50byBhIG5l
dyBJbWFnZUJ1ZmZlci4KKyAgICBjYWlyb190KiBzbWFsbEJ1ZmZlckNvbnRleHQgPSBzbWFsbEJ1
ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBjb3B5Q29udGV4dFByb3Bl
cnRpZXMoY3IsIHNtYWxsQnVmZmVyQ29udGV4dCk7CisgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0Nh
aXJvQ29udGV4dChzbWFsbEJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwgUGF0
aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShzbWFsbFJlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJp
Z2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cykpOworICAgIHNl
dFBsYXRmb3JtRmlsbChjb250ZXh0LCBzbWFsbEJ1ZmZlckNvbnRleHQsIGdjcCk7CisKKyAgICBP
d25QdHI8SW1hZ2VCdWZmZXI+IHNoYWRvd0J1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc21h
bGxCdWZmZXJTaXplKTsKKworICAgIHNtYWxsUmVjdC5zZXRTaXplKHNtYWxsQnVmZmVyU2l6ZSk7
CisKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGFscGhhU2hhZG93QnVmZmVyID0gY29udGV4dC0+
Y3JlYXRlUGxhdGZvcm1TaGFkb3coc21hbGxCdWZmZXIucmVsZWFzZSgpLCBzbWFsbFJlY3QsIHJh
ZGl1cyk7CisKKyAgICAvLyBObyBzaGFkb3cKKyAgICBpZiAoIWFscGhhU2hhZG93QnVmZmVyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb190KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93QnVm
ZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOworICAgIHNldENvbG9yKHNoYWRvd0Nv
bnRleHQsIHNoYWRvd0NvbG9yKTsKKyAgICBjYWlyb19tYXNrX3N1cmZhY2Uoc2hhZG93Q29udGV4
dCwgYWxwaGFTaGFkb3dCdWZmZXItPm1fZGF0YS5tX3N1cmZhY2UsIDAsIDApOworCisgICAgLy8g
dG9wIHNpZGUKKyAgICBmbG9hdCB0aWxlSGVpZ2h0ID0gcmFkaXVzICsgb2Zmc2V0SGVpZ2h0Owor
ICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IEZsb2F0UmVjdChyYWRpdXNUd2ljZSArIHRvcExlZnRS
YWRpdXMud2lkdGgoKSwgMCwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsKKyAgICBGbG9hdFJlY3Qg
ZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpLCBz
aGFkb3dSZWN0LnkoKSk7CisgICAgZGVzdFJlY3Quc2V0V2lkdGgoc2hhZG93UmVjdC53aWR0aCgp
IC0gdG9wTGVmdFJhZGl1cy53aWR0aCgpIC0gdG9wUmlnaHRSYWRpdXMud2lkdGgoKSAtIHJhZGl1
cyAqIDQpOworICAgIEZsb2F0UG9pbnQgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJl
Y3QpOworICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtOworICAgIHBhdHRlcm5U
cmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0dGVybihj
b250ZXh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVj
dCk7CisKKyAgICAvLyBib3R0b20gc2lkZQorICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KHJhZGl1
c1R3aWNlICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpLCBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0
KCkgLSB0aWxlSGVpZ2h0LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOworICAgIGRlc3RSZWN0ID0g
dGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55
KCkgKyByYWRpdXNUd2ljZSArIHJlY3QuaGVpZ2h0KCkgLSBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0
KCkpOworICAgIGRlc3RSZWN0LnNldFdpZHRoKHNoYWRvd1JlY3Qud2lkdGgoKSAtIGJvdHRvbUxl
ZnRSYWRpdXMud2lkdGgoKSAtIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkgLSByYWRpdXMgKiA0
KTsKKyAgICBwaGFzZSA9IGdldFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7CisgICAgc2hhZG93
QnVmZmVyLT5kcmF3UGF0dGVybihjb250ZXh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3Np
dGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAgICB0aWxlSGVpZ2h0ID0gcmFkaXVzICsgb2Zm
c2V0V2lkdGg7CisKKyAgICAvLyByaWdodCBzaWRlCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3Qo
c21hbGxCdWZmZXJTaXplLndpZHRoKCkgLSB0aWxlSGVpZ2h0LCByYWRpdXNUd2ljZSArIHRvcFJp
Z2h0UmFkaXVzLmhlaWdodCgpLCB0aWxlSGVpZ2h0LCB0aWxlV2lkdGgpOworICAgIGRlc3RSZWN0
ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSArIHJhZGl1c1R3
aWNlICsgcmVjdC53aWR0aCgpIC0gc21hbGxCdWZmZXJTaXplLndpZHRoKCksIHNoYWRvd1JlY3Qu
eSgpKTsKKyAgICBkZXN0UmVjdC5zZXRIZWlnaHQoc2hhZG93UmVjdC5oZWlnaHQoKSAtIHRvcFJp
Z2h0UmFkaXVzLmhlaWdodCgpIC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkgLSByYWRpdXMg
KiA0KTsKKyAgICBwaGFzZSA9IGdldFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7CisgICAgc2hh
ZG93QnVmZmVyLT5kcmF3UGF0dGVybihjb250ZXh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21w
b3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAgICAvLyBsZWZ0IHNpZGUKKyAgICB0aWxl
UmVjdCA9IEZsb2F0UmVjdCgwLCByYWRpdXNUd2ljZSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCks
IHRpbGVIZWlnaHQsIHRpbGVXaWR0aCk7CisgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBk
ZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgZGVzdFJl
Y3Quc2V0SGVpZ2h0KHNoYWRvd1JlY3QuaGVpZ2h0KCkgLSB0b3BSaWdodFJhZGl1cy5oZWlnaHQo
KSAtIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpIC0gcmFkaXVzICogNCk7CisgICAgcGhhc2Ug
PSBGbG9hdFBvaW50KGRlc3RSZWN0LngoKSAtIHRpbGVSZWN0LngoKSwgZGVzdFJlY3QueSgpIC0g
dGlsZVJlY3QueSgpKTsKKyAgICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGhhc2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsKKworICAg
IC8vIHRvcCBsZWZ0IGNvcm5lcgorICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIHJhZGl1
c1R3aWNlICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCByYWRpdXNUd2ljZSArIHRvcExlZnRSYWRp
dXMuaGVpZ2h0KCkpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92
ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkpOworICAgIHBoYXNlID0gZ2V0UGhhc2Uo
ZGVzdFJlY3QsIHRpbGVSZWN0KTsKKyAgICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKGNvbnRl
eHQsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGhhc2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsK
KworICAgIC8vIHRvcCByaWdodCBjb3JuZXIKKyAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdChzbWFs
bEJ1ZmZlclNpemUud2lkdGgoKSAtIHJhZGl1c1R3aWNlIC0gdG9wUmlnaHRSYWRpdXMud2lkdGgo
KSwgMCwgcmFkaXVzVHdpY2UgKyB0b3BSaWdodFJhZGl1cy53aWR0aCgpLCByYWRpdXNUd2ljZSAr
IHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpKTsKKyAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OworICAg
IGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSBzbWFsbEJ1ZmZl
clNpemUud2lkdGgoKSArIHJhZGl1c1R3aWNlLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgcGhhc2Ug
PSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIHNoYWRvd0J1ZmZlci0+ZHJhd1Bh
dHRlcm4oY29udGV4dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwaGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3Zlciwg
ZGVzdFJlY3QpOworCisgICAgLy8gYm90dG9tIHJpZ2h0IGNvcm5lcgorICAgIHRpbGVSZWN0ID0g
RmxvYXRSZWN0KHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgpIC0gcmFkaXVzVHdpY2UgLSBib3R0b21S
aWdodFJhZGl1cy53aWR0aCgpLCBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgLSByYWRpdXNUd2lj
ZSAtIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpLCByYWRpdXNUd2ljZSArIGJvdHRvbVJpZ2h0
UmFkaXVzLndpZHRoKCksIHJhZGl1c1R3aWNlICsgYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkp
OworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0
LngoKSArIHJlY3Qud2lkdGgoKSAtIHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgpICsgcmFkaXVzVHdp
Y2UsIHNoYWRvd1JlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAtIHNtYWxsQnVmZmVyU2l6ZS5oZWln
aHQoKSArIHJhZGl1c1R3aWNlKTsKKyAgICBwaGFzZSA9IGdldFBoYXNlKGRlc3RSZWN0LCB0aWxl
UmVjdCk7CisgICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0dGVybihjb250ZXh0LCB0aWxlUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLCBj
b2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAgICAvLyBib3R0
b20gbGVmdCBjb3JuZXIKKyAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCgwLCBzbWFsbEJ1ZmZlclNp
emUuaGVpZ2h0KCkgLSByYWRpdXNUd2ljZSAtIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpLCBy
YWRpdXNUd2ljZSArIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSwgcmFkaXVzVHdpY2UgKyBib3R0
b21MZWZ0UmFkaXVzLmhlaWdodCgpKTsKKyAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OworICAgIGRl
c3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCksIHNoYWRvd1JlY3QueSgpICsgcmVjdC5oZWlnaHQo
KSAtIHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSArIHJhZGl1c1R3aWNlKTsKKyAgICBwaGFzZSA9
IGdldFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7CisgICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0
dGVybihjb250ZXh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBk
ZXN0UmVjdCk7CisKKyNlbmRpZgorfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IElu
dFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRTaXpl
JiBib3R0b21SaWdodCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Up
CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTEyMzIsNyArMTQ0OCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgciwgY29u
c3QgSW50U2l6ZSYgdG9wTGVmdCwKICAgICBjYWlyb19zYXZlKGNyKTsKICAgICBhcHBlbmRXZWJD
b3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHIs
IHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCkpOwogICAgIHNldENv
bG9yKGNyLCBjb2xvcik7Ci0gICAgZHJhd1BhdGhTaGFkb3codGhpcywgbV9jb21tb24sIHRydWUs
IGZhbHNlKTsKKyAgICBkcmF3RmFzdFNoYWRvdyh0aGlzLCBtX2NvbW1vbiwgciwgdG9wTGVmdCwg
dG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0LCBjb2xvclNwYWNlKTsKICAgICBjYWly
b19maWxsKGNyKTsKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCmluZGV4IDAwNjhiOTQuLmMzNDRhNDkg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcApA
QCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvCiAgICAgICAgIGNhaXJv
X3JlY3RhbmdsZShzaGFkb3dDb250ZXh0LCAwLCAwLCBkc3RSZWN0LndpZHRoKCksIGRzdFJlY3Qu
aGVpZ2h0KCkpOwogICAgICAgICBjYWlyb19maWxsKHNoYWRvd0NvbnRleHQpOwogCi0gICAgICAg
IGNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNo
YWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOworICAgICAgICBjb250ZXh0LT5hcHBseVBs
YXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dS
ZWN0LCByYWRpdXMpOwogICAgIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggM2I4YjVhMy4uYmI0MzI4YiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5o
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApA
QCAtNjUsNiArNjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gVGhlIHJl
c3VsdCBpcyBib3VuZGVkIGJ5IHRoZSBzaXplIG9mIHRoZSBmaWx0ZXIgcHJpbWl0aXZlIHRvIHNh
dmUgcmVzb3VyY2VzCiAgICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSgpIHsgcmV0dXJu
IG1fZWZmZWN0QnVmZmVyLmdldCgpOyB9CisgICAgICAgIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXIq
PiByZWxlYXNlUmVzdWx0SW1hZ2UoKSB7IHJldHVybiBtX2VmZmVjdEJ1ZmZlci5yZWxlYXNlKCk7
IH0KICAgICAgICAgdm9pZCBzZXRFZmZlY3RCdWZmZXIoUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4g
ZWZmZWN0QnVmZmVyKSB7IG1fZWZmZWN0QnVmZmVyID0gZWZmZWN0QnVmZmVyOyB9CiAKICAgICAg
ICAgRmxvYXRSZWN0IGNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVy
KiwgRmlsdGVyRWZmZWN0KiwgRmlsdGVyRWZmZWN0Kik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64754</attachid>
            <date>2010-08-18 12:25:31 -0700</date>
            <delta_ts>2010-08-24 09:30:43 -0700</delta_ts>
            <desc>Proposed patch for pixel operations</desc>
            <filename>blur_data.patch</filename>
            <type>text/plain</type>
            <size>14764</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDkyM2EwMDllNWRiZDJmZDFlMzE4OGZiMzI2NTNjZGMyZmNkNTdlMmUKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgVHVlIEp1bCAyNyAx
OTowMzoyNCAyMDEwICswMjAwCgogICAgMjAxMC0wOC0xMiAgQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KICAgIAogICAgICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KICAgIAogICAgICAgICAgICBbR3RrXSB2ZXJ5IHNsb3cgcGFnZSBzY3JvbGxpbmcgb24g
YmlnIC13ZWJraXQtYm94LXNoYWRvdyBhcmVhcwogICAgICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk1ODIKICAgIAogICAgICAgICAgICBVc2UgYXJyYXlz
IHRvIGRvIHRoZSBwaXhlbCBvcGVyYXRpb25zIGluIHRoZSBnYXVzc2lhbiBibHVyIGZpbHRlciwK
ICAgICAgICAgICAgdGhpcyB3YXkgd2UgYXZvaWQgdGhlIHNldCBhbmQgZ2V0IGluIHRoZSBvYmpl
Y3RzIG9mIGVhY2ggdmFsdWUuIFdlCiAgICAgICAgICAgIGFsc28gYXZvaWQgdGhlIGNvcGllcyBv
ZiB0aGUgSW1hZ2VzQnVmZmVycyBpbnRvIHRoZSBJbWFnZURhdGFzCiAgICAgICAgICAgIGFkZGlu
ZyBuZXcgQVBJIHRvIHRoZSBJbWFnZUJ1ZmZlciB0byBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGRh
dGEKICAgICAgICAgICAgaW5zaWRlIHRoZSBidWZmZXIuCiAgICAKICAgICAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgogICAgICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOgogICAgICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmRhdGEpOgogICAgICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1hcmtE
aXJ0eSk6CiAgICAgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHA6CiAgICAgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZGF0YSk6CiAgICAgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWFya0RpcnR5KToKICAgICAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoKICAgICAgICAgICAgKFdlYkNv
cmU6OmJveEJsdXIpOgogICAgICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmFwcGx5
KToKICAgICAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1
LmNwcDoKICAgICAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkYXRhKToKICAgICAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptYXJrRGlydHkpOgogICAgICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwOgogICAgICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmRhdGEpOgogICAgICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1h
cmtEaXJ0eSk6CiAgICAgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZl
clNraWEuY3BwOgogICAgICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRhdGEpOgogICAg
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1hcmtEaXJ0eSk6CiAgICAgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5jZS5jcHA6CiAgICAgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZGF0YSk6CiAgICAgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6bWFya0RpcnR5KToKICAgICAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9J
bWFnZUJ1ZmZlcld4LmNwcDoKICAgICAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkYXRh
KToKICAgICAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptYXJrRGlydHkpOgoKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWFlNmYy
ZC4uMjVkNTdiMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxMC0wOC0xMiAgQWxlamFuZHJvIEcuIENhc3Ry
byAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbR3RrXSB2ZXJ5IHNsb3cgcGFnZSBzY3JvbGxpbmcgb24gYmlnIC13ZWJr
aXQtYm94LXNoYWRvdyBhcmVhcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Mzk1ODIKKworICAgICAgICBVc2UgYXJyYXlzIHRvIGRvIHRoZSBwaXhlbCBv
cGVyYXRpb25zIGluIHRoZSBnYXVzc2lhbiBibHVyIGZpbHRlciwKKyAgICAgICAgdGhpcyB3YXkg
d2UgYXZvaWQgdGhlIHNldCBhbmQgZ2V0IGluIHRoZSBvYmplY3RzIG9mIGVhY2ggdmFsdWUuIFdl
CisgICAgICAgIGFsc28gYXZvaWQgdGhlIGNvcGllcyBvZiB0aGUgSW1hZ2VzQnVmZmVycyBpbnRv
IHRoZSBJbWFnZURhdGFzCisgICAgICAgIGFkZGluZyBuZXcgQVBJIHRvIHRoZSBJbWFnZUJ1ZmZl
ciB0byBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGRhdGEKKyAgICAgICAgaW5zaWRlIHRoZSBidWZm
ZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6Om1hcmtEaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWFya0RpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmJveEJsdXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmFwcGx5KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjptYXJrRGlydHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0lt
YWdlQnVmZmVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1hcmtEaXJ0eSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1h
cmtEaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJX
aW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWFya0RpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptYXJrRGlydHkpOgor
CiAyMDEwLTA4LTAyICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oCmluZGV4IDNjMDUwOGUuLmUyMWY1NGYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTgzLDYgKzgzLDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VE
YXRhKGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+
IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogCisgICAg
ICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEoKSBjb25zdDsKKyAgICAgICAgdm9pZCBtYXJrRGlydHko
KTsKKwogICAgICAgICB2b2lkIHB1dFVubXVsdGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqLCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KTsKICAg
ICAgICAgdm9pZCBwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdlRGF0YSosIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpOwogICAgICAgICAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm8uY3BwCmluZGV4IGRiNjYyNzYuLjliY2QzYmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtMTQ5LDYgKzE0OSwx
NyBAQCB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qg
VmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQogICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9y
ZWN0YW5nbGUgKG1fZGF0YS5tX3N1cmZhY2UsIDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUu
aGVpZ2h0KCkpOwogfQogCit1bnNpZ25lZCBjaGFyKiBJbWFnZUJ1ZmZlcjo6ZGF0YSgpIGNvbnN0
Cit7CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX2RhdGEubV9zdXJmYWNlKTsKKyAgICByZXR1
cm4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2RhdGEubV9zdXJmYWNlKTsKK30KKwor
dm9pZCBJbWFnZUJ1ZmZlcjo6bWFya0RpcnR5KCkKK3sKKyAgICBjYWlyb19zdXJmYWNlX21hcmtf
ZGlydHkgKG1fZGF0YS5tX3N1cmZhY2UpOworfQorCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVsdGlw
bGllZD4KIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYg
cmVjdCwgY29uc3QgSW1hZ2VCdWZmZXJEYXRhJiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQog
ewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKaW5k
ZXggZWNiY2Y2MC4uOGYzNWU2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC0xNzcsNiArMTc3LDE2IEBAIHZvaWQgSW1hZ2VCdWZmZXI6
OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNv
bnN0CiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCwgLXJlY3QueCgp
LCAtcmVjdC55KCkgLSByZWN0LmhlaWdodCgpKTsKIH0KIAordW5zaWduZWQgY2hhciogSW1hZ2VC
dWZmZXI6OmRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEubV9kYXRhOworfQorCit2
b2lkIEltYWdlQnVmZmVyOjptYXJrRGlydHkoKQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAor
fQorCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVsdGlwbGllZD4KIFBhc3NSZWZQdHI8SW1hZ2VEYXRh
PiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXJEYXRh
JiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUpCiB7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRleCAxZjRlNDE1
Li5kNWVjMTFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBGRUdhdXNzaWFuQmx1
cjo6c2V0U3RkRGV2aWF0aW9uWShmbG9hdCB5KQogICAgIG1fc3RkWSA9IHk7CiB9CiAKLXN0YXRp
YyB2b2lkIGJveEJsdXIoQ2FudmFzUGl4ZWxBcnJheSomIHNyY1BpeGVsQXJyYXksIENhbnZhc1Bp
eGVsQXJyYXkqJiBkc3RQaXhlbEFycmF5LAorc3RhdGljIHZvaWQgYm94Qmx1cih1bnNpZ25lZCBj
aGFyKiBzcmNQaXhlbEFycmF5LCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LAogICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBz
dHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQs
IGJvb2wgYWxwaGFJbWFnZSkKIHsKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGVmZmVjdEhlaWdo
dDsgKyt5KSB7CkBAIC04MSwxNiArODEsMTYgQEAgc3RhdGljIHZvaWQgYm94Qmx1cihDYW52YXNQ
aXhlbEFycmF5KiYgc3JjUGl4ZWxBcnJheSwgQ2FudmFzUGl4ZWxBcnJheSomIGRzdFBpeGUKICAg
ICAgICAgICAgIC8vIEZpbGwgdGhlIGtlcm5lbAogICAgICAgICAgICAgaW50IG1heEtlcm5lbFNp
emUgPSBzdGQ6Om1pbihkeFJpZ2h0LCBlZmZlY3RXaWR0aCk7CiAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG1heEtlcm5lbFNpemU7ICsraSkKLSAgICAgICAgICAgICAgICBzdW0gKz0g
c3JjUGl4ZWxBcnJheS0+Z2V0KGxpbmUgKyBpICogc3RyaWRlICsgY2hhbm5lbCk7CisgICAgICAg
ICAgICAgICAgc3VtICs9IHNyY1BpeGVsQXJyYXlbbGluZSArIGkgKiBzdHJpZGUgKyBjaGFubmVs
XTsKIAogICAgICAgICAgICAgLy8gQmx1cnJpbmcKICAgICAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgewogICAgICAgICAgICAgICAgIGludCBwaXhlbEJ5dGVP
ZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZSArIGNoYW5uZWw7Ci0gICAgICAgICAgICAgICAgZHN0
UGl4ZWxBcnJheS0+c2V0KHBpeGVsQnl0ZU9mZnNldCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oc3VtIC8gZHgpKTsKKyAgICAgICAgICAgICAgICBkc3RQaXhlbEFycmF5W3BpeGVsQnl0ZU9m
ZnNldF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzdW0gLyBkeCk7CiAgICAgICAgICAg
ICAgICAgaWYgKHggPj0gZHhMZWZ0KQotICAgICAgICAgICAgICAgICAgICBzdW0gLT0gc3JjUGl4
ZWxBcnJheS0+Z2V0KHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZSk7CisgICAgICAg
ICAgICAgICAgICAgIHN1bSAtPSBzcmNQaXhlbEFycmF5W3BpeGVsQnl0ZU9mZnNldCAtIGR4TGVm
dCAqIHN0cmlkZV07CiAgICAgICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0IDwgZWZmZWN0V2lk
dGgpCi0gICAgICAgICAgICAgICAgICAgIHN1bSArPSBzcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxC
eXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSAr
PSBzcmNQaXhlbEFycmF5W3BpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGVdOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGFscGhhSW1hZ2UpIC8vIFNvdXJjZSBpbWFnZSBp
cyBibGFjaywgaXQganVzdCBoYXMgZGlmZmVyZW50IGFscGhhIHZhbHVlcwogICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTM4LDEwICsxMzgsMTAgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6YXBw
bHkoRmlsdGVyKiBmaWx0ZXIpCiAgICAgc2V0SXNBbHBoYUltYWdlKG1faW4tPmlzQWxwaGFJbWFn
ZSgpKTsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5n
SW50UmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4g
c3JjSW1hZ2VEYXRhKG1faW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEoZWZmZWN0RHJhd2luZ1JlY3QpKTsKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgp
LCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwogCiAgICAgaWYgKCFtX3N0ZFggJiYgIW1fc3RkWSkg
eworICAgICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEobV9pbi0+cmVzdWx0SW1h
Z2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCkpOwogICAg
ICAgICByZXN1bHRJbWFnZSgpLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNyY0ltYWdlRGF0
YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTE1NCwxMCArMTU0LDEyIEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OmFwcGx5KEZpbHRlciog
ZmlsdGVyKQogICAgIGlmIChtX3N0ZFkpCiAgICAgICAgIGtlcm5lbFNpemVZID0gbWF4KDJVLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZmxvb3IobV9zdGRZICogZmlsdGVyLT5maWx0ZXJSZXNvbHV0
aW9uKCkuaGVpZ2h0KCkgKiBnR2F1c3NpYW5LZXJuZWxGYWN0b3IgKyAwLjVmKSkpOwogCi0gICAg
Q2FudmFzUGl4ZWxBcnJheSogc3JjUGl4ZWxBcnJheShzcmNJbWFnZURhdGEtPmRhdGEoKSk7CiAg
ICAgUmVmUHRyPEltYWdlRGF0YT4gdG1wSW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1h
Z2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CiAgICAgQ2FudmFzUGl4ZWxBcnJh
eSogdG1wUGl4ZWxBcnJheSh0bXBJbWFnZURhdGEtPmRhdGEoKSk7CiAKKyAgICB1bnNpZ25lZCBj
aGFyKiByZXN1bHQgPSBtX2luLT5yZXN1bHRJbWFnZSgpLT5kYXRhKCk7CisgICAgdW5zaWduZWQg
Y2hhciogdG1wID0gdG1wUGl4ZWxBcnJheS0+ZGF0YSgpLT5kYXRhKCk7CisKICAgICBpbnQgc3Ry
aWRlID0gNCAqIGltYWdlUmVjdC53aWR0aCgpOwogICAgIGludCBkeExlZnQgPSAwOwogICAgIGlu
dCBkeFJpZ2h0ID0gMDsKQEAgLTE2NiwyNCArMTY4LDI0IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6
OmFwcGx5KEZpbHRlciogZmlsdGVyKQogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7
CiAgICAgICAgIGlmIChrZXJuZWxTaXplWCkgewogICAgICAgICAgICAga2VybmVsUG9zaXRpb24o
aSwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCk7Ci0gICAgICAgICAgICBib3hCbHVyKHNy
Y1BpeGVsQXJyYXksIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQs
IDQsIHN0cmlkZSwgaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSwgaXNBbHBo
YUltYWdlKCkpOworICAgICAgICAgICAgYm94Qmx1cihyZXN1bHQsIHRtcCwga2VybmVsU2l6ZVgs
IGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0
LmhlaWdodCgpLCBpc0FscGhhSW1hZ2UoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBDYW52YXNQaXhlbEFycmF5KiBhdXhQaXhlbEFycmF5ID0gdG1wUGl4ZWxBcnJheTsKLSAgICAg
ICAgICAgIHRtcFBpeGVsQXJyYXkgPSBzcmNQaXhlbEFycmF5OwotICAgICAgICAgICAgc3JjUGl4
ZWxBcnJheSA9IGF1eFBpeGVsQXJyYXk7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBhdXgg
PSB0bXA7CisgICAgICAgICAgICB0bXAgPSByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQgPSBh
dXg7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoa2VybmVsU2l6ZVkpIHsKICAgICAgICAgICAg
IGtlcm5lbFBvc2l0aW9uKGksIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQpOwotICAgICAg
ICAgICAgYm94Qmx1cih0bXBQaXhlbEFycmF5LCBzcmNQaXhlbEFycmF5LCBrZXJuZWxTaXplWSwg
ZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIGltYWdlUmVjdC5oZWlnaHQoKSwgaW1hZ2VSZWN0
LndpZHRoKCksIGlzQWxwaGFJbWFnZSgpKTsKKyAgICAgICAgICAgIGJveEJsdXIodG1wLCAoaSAh
PSAyKSA/IHJlc3VsdCA6IHJlc3VsdEltYWdlKCktPmRhdGEoKSwga2VybmVsU2l6ZVksIGR5TGVm
dCwgZHlSaWdodCwgc3RyaWRlLCA0LCBpbWFnZVJlY3QuaGVpZ2h0KCksIGltYWdlUmVjdC53aWR0
aCgpLCBpc0FscGhhSW1hZ2UoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBDYW52
YXNQaXhlbEFycmF5KiBhdXhQaXhlbEFycmF5ID0gdG1wUGl4ZWxBcnJheTsKLSAgICAgICAgICAg
IHRtcFBpeGVsQXJyYXkgPSBzcmNQaXhlbEFycmF5OwotICAgICAgICAgICAgc3JjUGl4ZWxBcnJh
eSA9IGF1eFBpeGVsQXJyYXk7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBhdXggPSB0bXA7
CisgICAgICAgICAgICB0bXAgPSByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQgPSBhdXg7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICByZXN1bHRJbWFnZSgpLT5wdXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKHNyY0ltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICBy
ZXN1bHRJbWFnZSgpLT5tYXJrRGlydHkoKTsKIH0KIAogdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZHVt
cCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVm
ZmVySGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZl
ckhhaWt1LmNwcAppbmRleCBjNWRlNDg1Li5lZGVmMmViIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAKQEAgLTIwNiw2ICsy
MDYsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbnZlcnRUb0ludGVybmFsRGF0YShjb25zdCB1
aW50OCogc291cmNlUm93cywgdW5zaWduZWQgc291cmMKICAgICB9CiB9CiAKK3Vuc2lnbmVkIGNo
YXIqIEltYWdlQnVmZmVyOjpkYXRhKCkgY29uc3QKK3sKKyAgICBtX2RhdGEubV92aWV3LlN5bmMo
KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyICo+KGltYWdlRGF0
YS5tX2JpdG1hcC5CaXRzKCkpOworfQorCit2b2lkIEltYWdlQnVmZmVyOjptYXJrRGlydHkoKQor
eworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQorCiBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZURh
dGE+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRh
dGEmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBsaWVkKQog
ewogICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiByZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAKaW5kZXggMTFjYTM3Ny4uYWMwYjcwMCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCkBAIC0xNzMsNiAr
MTczLDIzIEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShj
b25zdCBWZWN0b3I8aW50PiYgbG9va1VwVGFibGUpCiAgICAgICAgIG1fZGF0YS5tX3BhaW50ZXIt
PmJlZ2luKCZtX2RhdGEubV9waXhtYXApOwogfQogCit1bnNpZ25lZCBjaGFyKiBJbWFnZUJ1ZmZl
cjo6ZGF0YSgpIGNvbnN0Cit7CisgICAgUUltYWdlIGltYWdlID0gbV9kYXRhLm1fcGl4bWFwLnRv
SW1hZ2UoKS5jb252ZXJ0VG9Gb3JtYXQoUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxp
ZWQpOworI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA3LCAwKQorICAgIHVu
c2lnbmVkIGNoYXIqIGJpdHMgPSBpbWFnZS5jb25zdEJpdHMoKTsKKyNlbHNlCisgICAgdW5zaWdu
ZWQgY2hhciogYml0cyA9IGltYWdlLmJpdHMoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGJpdHM7
Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6Om1hcmtEaXJ0eSgpCit7CisgICAgLy8gTm90IEltcGxl
bWVudGVkCit9CisKIHRlbXBsYXRlIDxNdWx0aXBseSBtdWx0aXBsaWVkPgogUGFzc1JlZlB0cjxJ
bWFnZURhdGE+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbWFnZUJ1
ZmZlckRhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKaW5kZXggMTlj
ZjBmMC4uYmQ5MzQ4YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ltYWdlQnVmZmVyU2tpYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ltYWdlQnVmZmVyU2tpYS5jcHAKQEAgLTEzOCw2ICsxMzgsMTggQEAgdm9pZCBJbWFnZUJ1ZmZl
cjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+JiBsb29rVXBU
YWJsZSkKICAgICB9CiB9CiAKKwordW5zaWduZWQgY2hhciogSW1hZ2VCdWZmZXI6OmRhdGEoKSBj
b25zdAoreworICAgIGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPnN5bmNTb2Z0d2FyZUNh
bnZhcygpOworICAgIHJldHVybiBtX2RhdGEubV9kYXRhOworfQorCit2b2lkIEltYWdlQnVmZmVy
OjptYXJrRGlydHkoKQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQorCiB0ZW1wbGF0ZSA8
TXVsdGlwbHkgbXVsdGlwbGllZD4KIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEo
Y29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luY2UuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcAppbmRl
eCAxYTI1ZjRmLi4wZjYzZWM4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL0ltYWdlQnVmZmVyV2luY2UuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5jZS5jcHAKQEAgLTEwMyw2ICsxMDMsMTYgQEAgSW1hZ2Uq
IEltYWdlQnVmZmVyOjppbWFnZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CiB9
CiAKK3Vuc2lnbmVkIGNoYXIqIEltYWdlQnVmZmVyOjpkYXRhKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1fZGF0YS5tX2JpdG1hcC0+Ynl0ZXMoKSk7
Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6Om1hcmtEaXJ0eSgpCit7CisgICAgLy8gTm90IEltcGxl
bWVudGVkCit9CisKIHRlbXBsYXRlIDxib29sIHByZW11bHRpcGxpZWQ+IFBhc3NSZWZQdHI8SW1h
Z2VEYXRhPgogc3RhdGljIGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBT
aGFyZWRCaXRtYXAqIGJpdG1hcCkKIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4
L0ltYWdlQnVmZmVyV3guY3BwCmluZGV4IDI1MjJjYmQuLjgyYWE4NGYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcApAQCAtNjYsNiArNjYsMTgg
QEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QKICAgICByZXR1cm4gMDsKIH0KIAorCit1bnNpZ25l
ZCBjaGFyKiBJbWFnZUJ1ZmZlcjo6ZGF0YSgpIGNvbnN0Cit7CisgICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6Om1hcmtEaXJ0eSgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0
aXBsaWVkSW1hZ2VEYXRhKEltYWdlRGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>64755</attachid>
            <date>2010-08-18 12:27:50 -0700</date>
            <delta_ts>2010-08-24 09:31:02 -0700</delta_ts>
            <desc>Patch-set with all the patches, for testing purposes</desc>
            <filename>blur_patchset.tar.gz</filename>
            <type>application/x-gzip</type>
            <size>15462</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">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
c3h+p8//A60Hh/wAkAEA
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64827</attachid>
            <date>2010-08-19 04:08:23 -0700</date>
            <delta_ts>2010-08-24 08:52:33 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>tiling_shadow.patch</filename>
            <type>text/plain</type>
            <size>21160</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IGEwYjViNWE2MzQzMzJjMjMyNWYxZDI3OTVmZDhhNzQ1Y2E0ZDEwZDAKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgVHVlIEp1bCAyNyAx
Nzo1NzoxNyAyMDEwICswMjAwCgogICAgMjAxMC0wOC0wMiAgQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KICAgIAogICAgICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KICAgIAogICAgICAgICAgICBbR3RrXSB2ZXJ5IHNsb3cgcGFnZSBzY3JvbGxpbmcgb24g
YmlnIC13ZWJraXQtYm94LXNoYWRvdyBhcmVhcwogICAgICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk1ODIKICAgIAogICAgICAgICAgICBBZGQgYSBuZXcg
ZHJhd0Zhc3RTaGFkb3cgbWV0aG9kIHRvIHJlbmRlciBhIGJpZyBzaGFkb3cgZG9pbmcKICAgICAg
ICAgICAgdGlsaW5nIG9mIHBhcnRzIG9mIGEgc21hbGxlciBzaGFkb3cuIFdlIGNyZWF0ZSB0aGUg
bWluaW11bSBzaGFkb3cKICAgICAgICAgICAgcmVxdWlyZWQgdG8gZ2V0IHRoZSB0aWxlcyB3ZSB3
aWxsIHVzZSB0byByZW5kZXIgdGhlIHJlYWwgc2hhZG93CiAgICAgICAgICAgIGFuZCB3ZSB1c2Ug
ZHJhd1BhdHRlcm4gd2l0aCB0aG9zZSB0aWxlcyB0byBjcmVhdGUgdGhlIHNoYWRvdy4KICAgIAog
ICAgICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgogICAgICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHA6CiAgICAgICAgICAg
IChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKICAgICAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CiAgICAgICAgICAgIChXZWJDb3Jl
OjpkcmF3UGF0aFNoYWRvdyk6CiAgICAgICAgICAgIChXZWJDb3JlOjpkcmF3Qm9yZGVybGVzc1Jl
Y3RTaGFkb3cpOgogICAgICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjcmVhdGVQ
bGF0Zm9ybVNoYWRvdyk6CiAgICAgICAgICAgIChXZWJDb3JlOjpnZXRQaGFzZSk6CiAgICAgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGYXN0U2hhZG93KToKICAgICAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKICAgICAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcDoKICAgICAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKICAgICAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgogICAgICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpyZWxlYXNlUmVzdWx0SW1hZ2UpOgoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjU3ZjMwYS4uOTA5NGVjOSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwz
NCBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAgIFtH
dGtdIHZlcnkgc2xvdyBwYWdlIHNjcm9sbGluZyBvbiBiaWcgLXdlYmtpdC1ib3gtc2hhZG93IGFy
ZWFzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTU4
MgorCisgICAgICAgIEFkZCBhIG5ldyBkcmF3RmFzdFNoYWRvdyBtZXRob2QgdG8gcmVuZGVyIGEg
YmlnIHNoYWRvdyBkb2luZworICAgICAgICB0aWxpbmcgb2YgcGFydHMgb2YgYSBzbWFsbGVyIHNo
YWRvdy4gV2UgY3JlYXRlIHRoZSBtaW5pbXVtIHNoYWRvdworICAgICAgICByZXF1aXJlZCB0byBn
ZXQgdGhlIHRpbGVzIHdlIHdpbGwgdXNlIHRvIHJlbmRlciB0aGUgcmVhbCBzaGFkb3cKKyAgICAg
ICAgYW5kIHdlIHVzZSBkcmF3UGF0dGVybiB3aXRoIHRob3NlIHRpbGVzIHRvIGNyZWF0ZSB0aGUg
c2hhZG93LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRy
YXdQYXRoU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdCb3JkZXJsZXNzUmVjdFNoYWRv
dyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5UGxhdGZvcm1TaGFk
b3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjcmVhdGVQbGF0Zm9ybVNo
YWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQaGFzZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdGYXN0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpk
cmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5o
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZWxlYXNlUmVzdWx0SW1hZ2UpOgor
CisyMDEwLTA4LTAyICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIEFkZCB0aGUgc2hh
ZG93IG9mZnNldCBhcyBhIHBhcmFtZXRlciB0byB0aGUgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFk
b3cKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMjU5
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGU2
OTMyNGEuLjE0MmY5MzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaApAQCAtMjk0LDcgKzI5NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCBzZXRBbHBoYShmbG9hdCk7CiAjaWYgUExBVEZPUk0oQ0FJUk8pCiAgICAgICAgIGZsb2F0
IGdldEFscGhhKCk7Ci0gICAgICAgIHZvaWQgY3JlYXRlUGxhdGZvcm1TaGFkb3coUGFzc093blB0
cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZs
b2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQgcmFkaXVzKTsKKyAgICAgICAgdm9pZCBhcHBseVBs
YXRmb3JtU2hhZG93KFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QgQ29sb3Im
IHNoYWRvd0NvbG9yLCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd1JlY3QsIGZsb2F0IHJhZGl1cyk7
CisgICAgICAgIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZVBsYXRmb3JtU2hhZG93KFBh
c3NPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dSZWN0
LCBmbG9hdCByYWRpdXMpOwogICAgICAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVTaGFkb3dCdWZm
ZXJEaW1lbnNpb25zKEludFNpemUmIHNoYWRvd0J1ZmZlclNpemUsIEZsb2F0UmVjdCYgc2hhZG93
UmVjdCwgZmxvYXQmIHJhZGl1cywgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBG
bG9hdFNpemUmIHNoYWRvd1NpemUsIGZsb2F0IHNoYWRvd0JsdXIpOwogI2VuZGlmCiAKQEAgLTQ0
MCw2ICs0NDEsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dFByaXZhdGUqIG1fY29tbW9uOwogICAgICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUqIG1fZGF0YTsgLy8gRGVwcmVjYXRlZDsgbV9jb21tbW9uIGNhbiBqdXN0IGJlIGRvd25j
YXN0ZWQuIFRvIGJlIHJlbW92ZWQuCisKKyNpZiBQTEFURk9STShDQUlSTykKKyAgICAgICAgdm9p
ZCBkcmF3RmFzdFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4
dFByaXZhdGUqIGdjcCwgY29uc3QgSW50UmVjdCYgciwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0
UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUm
IGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSk7CisjZW5kaWYKKwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9u
dENhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNw
cAppbmRleCBkMTRiMzcxLi4xZjVjNzU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBGb250OjpkcmF3
R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnQsIGNvbnMKICAgICAgICAgICAgIGNhaXJvX3Jlc3RvcmUoc2hhZG93Q3IpOwogICAgICAgICB9
CiAgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjciwgMC4wLCAtZXh0ZW50cy5oZWlnaHQpOwotICAg
ICAgICBjb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgp
LCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKKyAgICAgICAgY29udGV4dC0+YXBw
bHlQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hh
ZG93UmVjdCwgcmFkaXVzKTsKICNlbHNlCiAgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjciwgc2hh
ZG93U2l6ZS53aWR0aCgpLCBzaGFkb3dTaXplLmhlaWdodCgpKTsKICAgICAgICAgY2Fpcm9fc2hv
d19nbHlwaHMoY3IsIGdseXBocywgbnVtR2x5cGhzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggNjJj
OTQ4Ni4uMjE2OWEyYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTIyOSw3ICsyMjksNyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgZHJhd1BhdGhTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBH
cmFwaGljc0NvbnRleHRQcml2YQogICAgIGlmIChzdHJva2VTaGFkb3cpCiAgICAgICAgIHNldFBs
YXRmb3JtU3Ryb2tlKGNvbnRleHQsIHNoYWRvd0NvbnRleHQsIGdjcCk7CiAKLSAgICBjb250ZXh0
LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xv
ciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKKyAgICBjb250ZXh0LT5hcHBseVBsYXRmb3JtU2hhZG93
KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMp
OwogI2VuZGlmCiB9CiAKQEAgLTY0Miw3ICs2NDIsNyBAQCBzdGF0aWMgdm9pZCBkcmF3Qm9yZGVy
bGVzc1JlY3RTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
CiAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93QnVmZmVyLT5jb250
ZXh0KCk7CiAgICAgc2hhZG93Q29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQo
cmFkaXVzLCByYWRpdXMpLCByZWN0LnNpemUoKSksIHJlY3RDb2xvciwgRGV2aWNlQ29sb3JTcGFj
ZSk7CiAKLSAgICBjb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVs
ZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKKyAgICBjb250ZXh0LT5h
cHBseVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBz
aGFkb3dSZWN0LCByYWRpdXMpOwogI2VuZGlmCiB9CiAKQEAgLTkyMywyMCArOTIzLDMwIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhGbG9hdFNpemUgY29uc3QmIHNp
emUsIGZsb2F0LCBDb2xvciBjb25zCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y3JlYXRlUGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25z
dCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQg
cmFkaXVzKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5UGxhdGZvcm1TaGFkb3coUGFzc093
blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0
IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQgcmFkaXVzKQogewogI2lmIEVOQUJMRShGSUxU
RVJTKQorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYWxwaGFTaGFkb3dCdWZmZXIgPSBjcmVhdGVQ
bGF0Zm9ybVNoYWRvdyhidWZmZXIsIHNoYWRvd1JlY3QsIHJhZGl1cyk7CisgICAgaWYgKCFhbHBo
YVNoYWRvd0J1ZmZlcikKKyAgICAgICAgYWxwaGFTaGFkb3dCdWZmZXIgPSBidWZmZXI7CisKICAg
ICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgc2V0Q29sb3IoY3IsIHNoYWRvd0NvbG9y
KTsKKyAgICBjYWlyb19tYXNrX3N1cmZhY2UoY3IsIGFscGhhU2hhZG93QnVmZmVyLT5tX2RhdGEu
bV9zdXJmYWNlLCBzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkpOworI2VuZGlmCit9CisK
K1Bhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUGxhdGZvcm1T
aGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIHNo
YWRvd1JlY3QsIGZsb2F0IHJhZGl1cykKK3sKKyNpZiBFTkFCTEUoRklMVEVSUykKKyAgICBGbG9h
dFBvaW50IGJsdXJSYWRpdXMgPSBGbG9hdFBvaW50KHJhZGl1cywgcmFkaXVzKTsKIAogICAgIC8v
IGNhbGN1bGF0ZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uCiAgICAgZmxvYXQgc2QgPSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlU3RkRGV2aWF0aW9uKHJhZGl1cyk7CiAKICAgICAvLyBkcmF3IHRo
ZSBzaGFkb3cgd2l0aG91dCBibHVycmluZywgaWYgcmFkaXVzIGlzIHplcm8KLSAgICBpZiAoIXJh
ZGl1cyB8fCAhc2QpIHsKLSAgICAgICAgc2V0Q29sb3IoY3IsIHNoYWRvd0NvbG9yKTsKLSAgICAg
ICAgY2Fpcm9fbWFza19zdXJmYWNlKGNyLCBidWZmZXItPm1fZGF0YS5tX3N1cmZhY2UsIHNoYWRv
d1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKCFyYWRpdXMgfHwgIXNkKQorICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIGNyZWF0ZSBm
aWx0ZXIKICAgICBSZWZQdHI8RmlsdGVyPiBmaWx0ZXIgPSBJbWFnZUJ1ZmZlckZpbHRlcjo6Y3Jl
YXRlKCk7CkBAIC05NDgsMTAgKzk1OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVQ
bGF0Zm9ybVNoYWRvdyhQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIsIGNvbnN0CiAgICAg
Ymx1ci0+c2V0U2NhbGVkU3ViUmVnaW9uKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNoYWRvd1Jl
Y3Quc2l6ZSgpKSk7CiAgICAgYmx1ci0+YXBwbHkoZmlsdGVyLmdldCgpKTsKIAotICAgIC8vIE1h
c2sgdGhlIGZpbHRlciB3aXRoIHRoZSBzaGFkb3cgY29sb3IgYW5kIGRyYXcgaXQgdG8gdGhlIGNv
bnRleHQuCi0gICAgLy8gTWFza2luZyBtYWtlcyBpdCBwb3NzaWJsZSB0byBqdXN0IGJsdXIgdGhl
IGFscGhhIGNoYW5uZWwuCi0gICAgc2V0Q29sb3IoY3IsIHNoYWRvd0NvbG9yKTsKLSAgICBjYWly
b19tYXNrX3N1cmZhY2UoY3IsIGJsdXItPnJlc3VsdEltYWdlKCktPm1fZGF0YS5tX3N1cmZhY2Us
IHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgcmV0dXJuIGJsdXItPnJlbGVh
c2VSZXN1bHRJbWFnZSgpOwogI2VuZGlmCiB9CiAKQEAgLTEyMjAsNiArMTIyNywyMTcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRFbGxpcHNlSW5SZWN0KGNvbnN0IEludFJlY3QmIHIp
CiAgICAgY2xpcE91dChwKTsKIH0KIAorc3RhdGljIGlubGluZSBGbG9hdFBvaW50IGdldFBoYXNl
KGNvbnN0IEZsb2F0UmVjdCYgZGVzdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlKQoreworICAgIEZs
b2F0UG9pbnQgcGhhc2UgPSBkZXN0LmxvY2F0aW9uKCk7CisgICAgcGhhc2UubW92ZSgtdGlsZS54
KCksIC10aWxlLnkoKSk7CisKKyAgICByZXR1cm4gcGhhc2U7Cit9CisKKy8qCisgIFRoaXMgZnVu
Y3Rpb24gdXNlcyB0aWxpbmcgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIHNoYWRv
dworICBkcmF3aW5nIG9mIHJvdW5kZWQgcmVjdGFuZ2xlcy4gVGhlIGNvZGUgYmFzaWNhbGx5IGRv
ZXMgdGhlIGZvbGxvd2luZworICBzdGVwczoKKworICAgICAxLiBDYWxjdWxhdGUgdGhlIG1pbmlt
dW0gcmVjdGFuZ2xlIHNpemUgcmVxdWlyZWQgdG8gY3JlYXRlIHRoZQorICAgICB0aWxlcworCisg
ICAgIDIuIElmIHRoYXQgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIHJlYWwgcmVjdGFuZ2xlIHJl
bmRlciB0aGUgbmV3CisgICAgIHNtYWxsIHJlY3RhbmdsZSBhbmQgaXRzIHNoYWRvdywgaW4gb3Ro
ZXIgY2FzZSByZW5kZXIgdGhlIHNoYWRvdworICAgICBvZiB0aGUgcmVhbCByZWN0YW5nbGUuCisK
KyAgICAgMy4gQ2FsY3VsYXRlIHRoZSBzaXplcyBhbmQgcG9zaXRpb25zIG9mIHRoZSB0aWxlcyBh
bmQgdGhlaXIKKyAgICAgZGVzdGluYXRpb25zIGFuZCB1c2UgZHJhd1BhdHRlcm4gdG8gcmVuZGVy
IHRoZSBmaW5hbCBzaGFkb3cuIFRoZQorICAgICBjb2RlIGRpdmlkZXMgdGhlIHJlbmRlcmluZyBp
biA4IHRpbGVzOgorCisgICAgICAgIDEgfCAyIHwgMworICAgICAgIC0tLS0tLS0tLS0tCisgICAg
ICAgIDQgfCAgIHwgNQorICAgICAgIC0tLS0tLS0tLS0tCisgICAgICAgIDYgfCA3IHwgOAorCisg
ICAgIFRoZSBjb3JuZXJzIGFyZSBkaXJlY3RseSBjb3BpZWQgZnJvbSB0aGUgc21hbGwgcmVjdGFu
Z2xlIHRvIHRoZQorICAgICByZWFsIG9uZSBhbmQgdGhlIHNpZGUgdGlsZXMgYXJlIDEgcGl4ZWwg
d2lkdGgsIHdlIHVzZSB0aGVtIGFzCisgICAgIHRpbGVzIHRvIGNvdmVyIHRoZSBkZXN0aW5hdGlv
biBzaWRlLiBUaGUgY29ybmVyIHRpbGVzIGFyZSBiaWdnZXIKKyAgICAgdGhhbiBqdXN0IHRoZSBz
aWRlIG9mIHRoZSByb3VuZGVkIGNvcm5lciwgd2UgbmVlZCB0byBpbmNyZWFzZSBpdAorICAgICBi
ZWNhdXNlIHRoZSBtb2RpZmljYXRpb25zIGNhdXNlZCBieSB0aGUgY29ybmVyIG92ZXIgdGhlIGJs
dXIKKyAgICAgZWZmZWN0LgorICovCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zhc3RTaGFk
b3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBnY3As
IGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3Qg
RmxvYXRTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFk
aXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UpCit7CisjaWYgRU5BQkxFKEZJTFRFUlMpCisgICAgRmxvYXRTaXplIHNoYWRvd1NpemU7
CisgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKKyAgICBmbG9hdCBzaGFkb3dCbHVyOworICAg
IENvbG9yIHNoYWRvd0NvbG9yOworICAgIGlmICghY29udGV4dC0+Z2V0U2hhZG93KHNoYWRvd1Np
emUsIHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBDYWxjdWxhdGUgZmlsdGVyIHZhbHVlcyB0byBjcmVhdGUgYXBwcm9wcmlh
dGUgc2hhZG93LgorICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
CisgICAgY2Fpcm9fcGF0aF90KiBwYXRoID0gY2Fpcm9fY29weV9wYXRoKGNyKTsKKyAgICBkb3Vi
bGUgeDAsIHgxLCB5MCwgeTE7CisgICAgY2Fpcm9fZmlsbF9leHRlbnRzKGNyLCAmeDAsICZ5MCwg
JngxLCAmeTEpOworICAgIEZsb2F0UmVjdCByZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7
CisKKyAgICBJbnRTaXplIHNoYWRvd0J1ZmZlclNpemU7CisgICAgRmxvYXRSZWN0IHNoYWRvd1Jl
Y3Q7CisgICAgZmxvYXQgcmFkaXVzID0gMDsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNhbGN1bGF0
ZVNoYWRvd0J1ZmZlckRpbWVuc2lvbnMoc2hhZG93QnVmZmVyU2l6ZSwgc2hhZG93UmVjdCwgcmFk
aXVzLCByZWN0LCBzaGFkb3dTaXplLCBzaGFkb3dCbHVyKTsKKworICAgIC8vIHNpemUgb2YgdGhl
IHRpbGluZyBmb3IgdGhlIHNpZGVzCisgICAgaW50IHRpbGVXaWR0aCA9IDE7CisgICAgZmxvYXQg
cmFkaXVzVHdpY2UgPSByYWRpdXMgKiAyOworICAgIGludCBzaGFkb3dTaWRlID0gcmFkaXVzVHdp
Y2UgKyB0aWxlV2lkdGg7CisgICAgSW50U2l6ZSBzbWFsbEJ1ZmZlclNpemU7CisKKyAgICBmbG9h
dCBvZmZzZXRXaWR0aCA9IHNoYWRvd09mZnNldC53aWR0aCgpOworICAgIGlmIChvZmZzZXRXaWR0
aCA+IDApCisgICAgICAgIG9mZnNldFdpZHRoICs9IG1heCh0b3BSaWdodFJhZGl1cy53aWR0aCgp
LCBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpKTsKKyAgICBlbHNlIGlmIChvZmZzZXRXaWR0aCA8
IDApCisgICAgICAgIG9mZnNldFdpZHRoID0gLW9mZnNldFdpZHRoICsgbWF4KHRvcExlZnRSYWRp
dXMud2lkdGgoKSwgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpKTsKKworICAgIGZsb2F0IG9mZnNl
dEhlaWdodCA9IHNoYWRvd09mZnNldC5oZWlnaHQoKTsKKyAgICBpZiAob2Zmc2V0SGVpZ2h0ID4g
MCkgeworICAgICAgICBpZiAob2Zmc2V0SGVpZ2h0ID4gcmFkaXVzKQorICAgICAgICAgICAgb2Zm
c2V0V2lkdGggPSBtYXgob2Zmc2V0V2lkdGgsIHJhZGl1c1R3aWNlICsgbWF4KGJvdHRvbVJpZ2h0
UmFkaXVzLndpZHRoKCksIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSkpOworICAgICAgICBvZmZz
ZXRIZWlnaHQgKz0gbWF4KGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCksIGJvdHRvbVJpZ2h0UmFk
aXVzLmhlaWdodCgpKTsKKyAgICB9IGVsc2UgaWYgKG9mZnNldEhlaWdodCA8IDApIHsKKyAgICAg
ICAgaWYgKGFicyhvZmZzZXRIZWlnaHQpID4gcmFkaXVzKQorICAgICAgICAgICAgb2Zmc2V0V2lk
dGggPSBtYXgob2Zmc2V0V2lkdGgsIHJhZGl1c1R3aWNlICsgbWF4KHRvcFJpZ2h0UmFkaXVzLndp
ZHRoKCksIHRvcExlZnRSYWRpdXMud2lkdGgoKSkpOworICAgICAgICBvZmZzZXRIZWlnaHQgPSAt
b2Zmc2V0SGVpZ2h0ICsgbWF4KHRvcExlZnRSYWRpdXMuaGVpZ2h0KCksIHRvcFJpZ2h0UmFkaXVz
LmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBpZiAoc2hhZG93T2Zmc2V0LndpZHRoKCkgPiAwKSB7
CisgICAgICAgIGlmIChzaGFkb3dPZmZzZXQud2lkdGgoKSA+IHJhZGl1cykKKyAgICAgICAgICAg
IG9mZnNldEhlaWdodCA9IG1heChvZmZzZXRIZWlnaHQsIHJhZGl1c1R3aWNlICsgbWF4KGJvdHRv
bUxlZnRSYWRpdXMuaGVpZ2h0KCksIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkpKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBpZiAoYWJzKHNoYWRvd09mZnNldC53aWR0aCgpKSA+IHJhZGl1cykKKyAg
ICAgICAgICAgIG9mZnNldEhlaWdodCA9IG1heChvZmZzZXRIZWlnaHQsIHJhZGl1c1R3aWNlICsg
bWF4KGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpLCB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSkp
OworICAgIH0KKworICAgIHNtYWxsQnVmZmVyU2l6ZS5zZXRXaWR0aChtYXgob2Zmc2V0V2lkdGgg
KiAyLCByYWRpdXNUd2ljZSArIG1heCh0b3BMZWZ0UmFkaXVzLndpZHRoKCksIGJvdHRvbUxlZnRS
YWRpdXMud2lkdGgoKSkgKyBzaGFkb3dTaWRlICsgbWF4KHRvcFJpZ2h0UmFkaXVzLndpZHRoKCks
IGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkpKSk7CisgICAgc21hbGxCdWZmZXJTaXplLnNldEhl
aWdodChtYXgob2Zmc2V0SGVpZ2h0ICogMiwgcmFkaXVzVHdpY2UgKyBtYXgodG9wTGVmdFJhZGl1
cy5oZWlnaHQoKSwgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkpICsgc2hhZG93U2lkZSArIG1heChi
b3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpLCBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSkpKTsK
KworICAgIGlmICgoc21hbGxCdWZmZXJTaXplLndpZHRoKCkgPiBzaGFkb3dCdWZmZXJTaXplLndp
ZHRoKCkpIHx8IChzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgPiBzaGFkb3dCdWZmZXJTaXplLmhl
aWdodCgpKSB8fCAocmFkaXVzIDw9IDApKSB7CisgICAgICAgIC8vIENyZWF0ZSBzdWl0YWJseS1z
aXplZCBJbWFnZUJ1ZmZlciB0byBob2xkIHRoZSBzaGFkb3cuCisgICAgICAgIE93blB0cjxJbWFn
ZUJ1ZmZlcj4gc2hhZG93QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaGFkb3dCdWZmZXJT
aXplKTsKKworICAgICAgICAvLyBEcmF3IHNoYWRvdyBpbnRvIGEgbmV3IEltYWdlQnVmZmVyLgor
ICAgICAgICBjYWlyb190KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93QnVmZmVyLT5jb250ZXh0KCkt
PnBsYXRmb3JtQ29udGV4dCgpOworICAgICAgICBjb3B5Q29udGV4dFByb3BlcnRpZXMoY3IsIHNo
YWRvd0NvbnRleHQpOworICAgICAgICBjYWlyb190cmFuc2xhdGUoc2hhZG93Q29udGV4dCwgLXJl
Y3QueCgpICsgcmFkaXVzLCAtcmVjdC55KCkgKyByYWRpdXMpOworICAgICAgICBjYWlyb19uZXdf
cGF0aChzaGFkb3dDb250ZXh0KTsKKyAgICAgICAgY2Fpcm9fYXBwZW5kX3BhdGgoc2hhZG93Q29u
dGV4dCwgcGF0aCk7CisKKyAgICAgICAgc2V0UGxhdGZvcm1GaWxsKGNvbnRleHQsIHNoYWRvd0Nv
bnRleHQsIGdjcCk7CisKKyAgICAgICAgY29udGV4dC0+YXBwbHlQbGF0Zm9ybVNoYWRvdyhzaGFk
b3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKKwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzbWFsbEJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc21hbGxCdWZmZXJTaXplKTsKKworICAgIEludFJl
Y3Qgc21hbGxSZWN0ID0gSW50UmVjdChyYWRpdXMsIHJhZGl1cywgc21hbGxCdWZmZXJTaXplLndp
ZHRoKCkgLSByYWRpdXNUd2ljZSwgc21hbGxCdWZmZXJTaXplLmhlaWdodCgpIC0gcmFkaXVzVHdp
Y2UpOworCisgICAgLy8gRHJhdyBzaGFkb3cgaW50byBhIG5ldyBJbWFnZUJ1ZmZlci4KKyAgICBj
YWlyb190KiBzbWFsbEJ1ZmZlckNvbnRleHQgPSBzbWFsbEJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0
Zm9ybUNvbnRleHQoKTsKKyAgICBjb3B5Q29udGV4dFByb3BlcnRpZXMoY3IsIHNtYWxsQnVmZmVy
Q29udGV4dCk7CisgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChzbWFsbEJ1ZmZl
ci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwgUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3Rh
bmdsZShzbWFsbFJlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0
UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cykpOworICAgIHNldFBsYXRmb3JtRmlsbChjb250ZXh0
LCBzbWFsbEJ1ZmZlckNvbnRleHQsIGdjcCk7CisKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNo
YWRvd0J1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc21hbGxCdWZmZXJTaXplKTsKKworICAg
IHNtYWxsUmVjdC5zZXRTaXplKHNtYWxsQnVmZmVyU2l6ZSk7CisKKyAgICBPd25QdHI8SW1hZ2VC
dWZmZXI+IGFscGhhU2hhZG93QnVmZmVyID0gY29udGV4dC0+Y3JlYXRlUGxhdGZvcm1TaGFkb3co
c21hbGxCdWZmZXIucmVsZWFzZSgpLCBzbWFsbFJlY3QsIHJhZGl1cyk7CisKKyAgICAvLyBObyBz
aGFkb3cKKyAgICBpZiAoIWFscGhhU2hhZG93QnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBjYWlyb190KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93QnVmZmVyLT5jb250ZXh0KCktPnBsYXRm
b3JtQ29udGV4dCgpOworICAgIHNldENvbG9yKHNoYWRvd0NvbnRleHQsIHNoYWRvd0NvbG9yKTsK
KyAgICBjYWlyb19tYXNrX3N1cmZhY2Uoc2hhZG93Q29udGV4dCwgYWxwaGFTaGFkb3dCdWZmZXIt
Pm1fZGF0YS5tX3N1cmZhY2UsIDAsIDApOworCisgICAgLy8gdG9wIHNpZGUKKyAgICBmbG9hdCB0
aWxlSGVpZ2h0ID0gcmFkaXVzICsgb2Zmc2V0SGVpZ2h0OworICAgIEZsb2F0UmVjdCB0aWxlUmVj
dCA9IEZsb2F0UmVjdChyYWRpdXNUd2ljZSArIHRvcExlZnRSYWRpdXMud2lkdGgoKSwgMCwgdGls
ZVdpZHRoLCB0aWxlSGVpZ2h0KTsKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSB0aWxlUmVjdDsK
KyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAg
ZGVzdFJlY3Quc2V0V2lkdGgoc2hhZG93UmVjdC53aWR0aCgpIC0gdG9wTGVmdFJhZGl1cy53aWR0
aCgpIC0gdG9wUmlnaHRSYWRpdXMud2lkdGgoKSAtIHJhZGl1cyAqIDQpOworICAgIEZsb2F0UG9p
bnQgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIEFmZmluZVRyYW5z
Zm9ybSBwYXR0ZXJuVHJhbnNmb3JtOworICAgIHBhdHRlcm5UcmFuc2Zvcm0ubWFrZUlkZW50aXR5
KCk7CisgICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0dGVybihjb250ZXh0LCB0aWxlUmVjdCwgcGF0
dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xv
clNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAgICAvLyBib3R0b20g
c2lkZQorICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KHJhZGl1c1R3aWNlICsgYm90dG9tTGVmdFJh
ZGl1cy53aWR0aCgpLCBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgLSB0aWxlSGVpZ2h0LCB0aWxl
V2lkdGgsIHRpbGVIZWlnaHQpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJl
Y3QubW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkgKyByYWRpdXNUd2ljZSArIHJl
Y3QuaGVpZ2h0KCkgLSBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkpOworICAgIGRlc3RSZWN0LnNl
dFdpZHRoKHNoYWRvd1JlY3Qud2lkdGgoKSAtIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSAtIGJv
dHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkgLSByYWRpdXMgKiA0KTsKKyAgICBwaGFzZSA9IGdldFBo
YXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7CisgICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0dGVybihj
b250ZXh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVj
dCk7CisKKyAgICB0aWxlSGVpZ2h0ID0gcmFkaXVzICsgb2Zmc2V0V2lkdGg7CisKKyAgICAvLyBy
aWdodCBzaWRlCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3Qoc21hbGxCdWZmZXJTaXplLndpZHRo
KCkgLSB0aWxlSGVpZ2h0LCByYWRpdXNUd2ljZSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpLCB0
aWxlSGVpZ2h0LCB0aWxlV2lkdGgpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVz
dFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSArIHJhZGl1c1R3aWNlICsgcmVjdC53aWR0aCgpIC0g
c21hbGxCdWZmZXJTaXplLndpZHRoKCksIHNoYWRvd1JlY3QueSgpKTsKKyAgICBkZXN0UmVjdC5z
ZXRIZWlnaHQoc2hhZG93UmVjdC5oZWlnaHQoKSAtIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpIC0g
Ym90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkgLSByYWRpdXMgKiA0KTsKKyAgICBwaGFzZSA9IGdl
dFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7CisgICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0dGVy
bihjb250ZXh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0
UmVjdCk7CisKKyAgICAvLyBsZWZ0IHNpZGUKKyAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCgwLCBy
YWRpdXNUd2ljZSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCksIHRpbGVIZWlnaHQsIHRpbGVXaWR0
aCk7CisgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1Jl
Y3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgZGVzdFJlY3Quc2V0SGVpZ2h0KHNoYWRvd1Jl
Y3QuaGVpZ2h0KCkgLSB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSAtIGJvdHRvbVJpZ2h0UmFkaXVz
LmhlaWdodCgpIC0gcmFkaXVzICogNCk7CisgICAgcGhhc2UgPSBGbG9hdFBvaW50KGRlc3RSZWN0
LngoKSAtIHRpbGVSZWN0LngoKSwgZGVzdFJlY3QueSgpIC0gdGlsZVJlY3QueSgpKTsKKyAgICBz
aGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2UsIGNvbG9yU3BhY2UsIENv
bXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsKKworICAgIC8vIHRvcCBsZWZ0IGNvcm5lcgor
ICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIHJhZGl1c1R3aWNlICsgdG9wTGVmdFJhZGl1
cy53aWR0aCgpLCByYWRpdXNUd2ljZSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkpOworICAgIGRl
c3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSwgc2hh
ZG93UmVjdC55KCkpOworICAgIHBoYXNlID0gZ2V0UGhhc2UoZGVzdFJlY3QsIHRpbGVSZWN0KTsK
KyAgICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHRpbGVSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2UsIGNvbG9yU3Bh
Y2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsKKworICAgIC8vIHRvcCByaWdodCBj
b3JuZXIKKyAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdChzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSAt
IHJhZGl1c1R3aWNlIC0gdG9wUmlnaHRSYWRpdXMud2lkdGgoKSwgMCwgcmFkaXVzVHdpY2UgKyB0
b3BSaWdodFJhZGl1cy53aWR0aCgpLCByYWRpdXNUd2ljZSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdo
dCgpKTsKKyAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OworICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93
UmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSBzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSArIHJhZGl1
c1R3aWNlLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwg
dGlsZVJlY3QpOworICAgIHNoYWRvd0J1ZmZlci0+ZHJhd1BhdHRlcm4oY29udGV4dCwgdGlsZVJl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFz
ZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAgLy8g
Ym90dG9tIHJpZ2h0IGNvcm5lcgorICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KHNtYWxsQnVmZmVy
U2l6ZS53aWR0aCgpIC0gcmFkaXVzVHdpY2UgLSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpLCBz
bWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgLSByYWRpdXNUd2ljZSAtIGJvdHRvbVJpZ2h0UmFkaXVz
LmhlaWdodCgpLCByYWRpdXNUd2ljZSArIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCksIHJhZGl1
c1R3aWNlICsgYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpOworICAgIGRlc3RSZWN0ID0gdGls
ZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSArIHJlY3Qud2lkdGgoKSAt
IHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgpICsgcmFkaXVzVHdpY2UsIHNoYWRvd1JlY3QueSgpICsg
cmVjdC5oZWlnaHQoKSAtIHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSArIHJhZGl1c1R3aWNlKTsK
KyAgICBwaGFzZSA9IGdldFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7CisgICAgc2hhZG93QnVm
ZmVyLT5kcmF3UGF0dGVybihjb250ZXh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVT
b3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAgICAvLyBib3R0b20gbGVmdCBjb3JuZXIKKyAgICB0
aWxlUmVjdCA9IEZsb2F0UmVjdCgwLCBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgLSByYWRpdXNU
d2ljZSAtIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpLCByYWRpdXNUd2ljZSArIGJvdHRvbUxl
ZnRSYWRpdXMud2lkdGgoKSwgcmFkaXVzVHdpY2UgKyBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgp
KTsKKyAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OworICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVj
dC54KCksIHNoYWRvd1JlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAtIHNtYWxsQnVmZmVyU2l6ZS5o
ZWlnaHQoKSArIHJhZGl1c1R3aWNlKTsKKyAgICBwaGFzZSA9IGdldFBoYXNlKGRlc3RSZWN0LCB0
aWxlUmVjdCk7CisgICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0dGVybihjb250ZXh0LCB0aWxlUmVj
dCwgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNl
LCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyNlbmRpZgor
fQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3Qm
IHIsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25z
dCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKQEAgLTEyMjksNyArMTQ0Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgciwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwK
ICAgICBjYWlyb19zYXZlKGNyKTsKICAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0
KGNyLCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHIsIHRvcExlZnQsIHRvcFJpZ2h0LCBi
b3R0b21MZWZ0LCBib3R0b21SaWdodCkpOwogICAgIHNldENvbG9yKGNyLCBjb2xvcik7Ci0gICAg
ZHJhd1BhdGhTaGFkb3codGhpcywgbV9jb21tb24sIHRydWUsIGZhbHNlKTsKKyAgICBkcmF3RmFz
dFNoYWRvdyh0aGlzLCBtX2NvbW1vbiwgciwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQs
IGJvdHRvbVJpZ2h0LCBjb2xvclNwYWNlKTsKICAgICBjYWlyb19maWxsKGNyKTsKICAgICBjYWly
b19yZXN0b3JlKGNyKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQ2Fpcm8uY3BwCmluZGV4IDAwNjhiOTQuLmMzNDRhNDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcApAQCAtMTU0LDcgKzE1NCw3IEBAIHZv
aWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdCwgY29uc3QgRmxvCiAgICAgICAgIGNhaXJvX3JlY3RhbmdsZShzaGFkb3dDb250
ZXh0LCAwLCAwLCBkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkpOwogICAgICAgICBj
YWlyb19maWxsKHNoYWRvd0NvbnRleHQpOwogCi0gICAgICAgIGNvbnRleHQtPmNyZWF0ZVBsYXRm
b3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0
LCByYWRpdXMpOworICAgICAgICBjb250ZXh0LT5hcHBseVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1
ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOwogICAgIH0K
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmgKaW5kZXggM2I4YjVhMy4uYmI0MzI4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtNjUsNiArNjUsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gVGhlIHJlc3VsdCBpcyBib3VuZGVkIGJ5IHRo
ZSBzaXplIG9mIHRoZSBmaWx0ZXIgcHJpbWl0aXZlIHRvIHNhdmUgcmVzb3VyY2VzCiAgICAgICAg
IEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSgpIHsgcmV0dXJuIG1fZWZmZWN0QnVmZmVyLmdldCgp
OyB9CisgICAgICAgIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXIqPiByZWxlYXNlUmVzdWx0SW1hZ2Uo
KSB7IHJldHVybiBtX2VmZmVjdEJ1ZmZlci5yZWxlYXNlKCk7IH0KICAgICAgICAgdm9pZCBzZXRF
ZmZlY3RCdWZmZXIoUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gZWZmZWN0QnVmZmVyKSB7IG1fZWZm
ZWN0QnVmZmVyID0gZWZmZWN0QnVmZmVyOyB9CiAKICAgICAgICAgRmxvYXRSZWN0IGNhbGN1bGF0
ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiwgRmlsdGVyRWZmZWN0KiwgRmls
dGVyRWZmZWN0Kik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65277</attachid>
            <date>2010-08-24 08:52:33 -0700</date>
            <delta_ts>2010-08-30 09:55:49 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>tiling_shadow.patch</filename>
            <type>text/plain</type>
            <size>19765</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDYyMzJmYjZkNDA4ZmNmNDZlY2I4NWM2NGQyMWVhNWEyMGVhNjIyN2YKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgVHVlIEp1bCAyNyAx
Nzo1NzoxNyAyMDEwICswMjAwCgogICAgMjAxMC0wOC0wMiAgQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KICAgIAogICAgICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KICAgIAogICAgICAgICAgICBbR3RrXSB2ZXJ5IHNsb3cgcGFnZSBzY3JvbGxpbmcgb24g
YmlnIC13ZWJraXQtYm94LXNoYWRvdyBhcmVhcwogICAgICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk1ODIKICAgIAogICAgICAgICAgICBBZGQgYSBuZXcg
ZHJhd0Zhc3RTaGFkb3cgbWV0aG9kIHRvIHJlbmRlciBhIGJpZyBzaGFkb3cgZG9pbmcKICAgICAg
ICAgICAgdGlsaW5nIG9mIHBhcnRzIG9mIGEgc21hbGxlciBzaGFkb3cuIFdlIGNyZWF0ZSB0aGUg
bWluaW11bSBzaGFkb3cKICAgICAgICAgICAgcmVxdWlyZWQgdG8gZ2V0IHRoZSB0aWxlcyB3ZSB3
aWxsIHVzZSB0byByZW5kZXIgdGhlIHJlYWwgc2hhZG93CiAgICAgICAgICAgIGFuZCB3ZSB1c2Ug
ZHJhd1BhdHRlcm4gd2l0aCB0aG9zZSB0aWxlcyB0byBjcmVhdGUgdGhlIHNoYWRvdy4KICAgIAog
ICAgICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgogICAgICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHA6CiAgICAgICAgICAg
IChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKICAgICAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CiAgICAgICAgICAgIChXZWJDb3Jl
OjpkcmF3UGF0aFNoYWRvdyk6CiAgICAgICAgICAgIChXZWJDb3JlOjpkcmF3Qm9yZGVybGVzc1Jl
Y3RTaGFkb3cpOgogICAgICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjcmVhdGVQ
bGF0Zm9ybVNoYWRvdyk6CiAgICAgICAgICAgIChXZWJDb3JlOjpnZXRQaGFzZSk6CiAgICAgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGYXN0U2hhZG93KToKICAgICAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKICAgICAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcDoKICAgICAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKICAgICAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgogICAgICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpyZWxlYXNlUmVzdWx0SW1hZ2UpOgoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmFjOTNjMy4uYjg4ZjUzYyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
MSBAQAorMjAxMC0wOC0wMiAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR3RrXSB2
ZXJ5IHNsb3cgcGFnZSBzY3JvbGxpbmcgb24gYmlnIC13ZWJraXQtYm94LXNoYWRvdyBhcmVhcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk1ODIKKwor
ICAgICAgICBBZGQgYSBuZXcgZHJhd0Zhc3RTaGFkb3cgbWV0aG9kIHRvIHJlbmRlciBhIGJpZyBz
aGFkb3cgZG9pbmcKKyAgICAgICAgdGlsaW5nIG9mIHBhcnRzIG9mIGEgc21hbGxlciBzaGFkb3cu
IFdlIGNyZWF0ZSB0aGUgbWluaW11bSBzaGFkb3cKKyAgICAgICAgcmVxdWlyZWQgdG8gZ2V0IHRo
ZSB0aWxlcyB3ZSB3aWxsIHVzZSB0byByZW5kZXIgdGhlIHJlYWwgc2hhZG93CisgICAgICAgIGFu
ZCB3ZSB1c2UgZHJhd1BhdHRlcm4gd2l0aCB0aG9zZSB0aWxlcyB0byBjcmVhdGUgdGhlIHNoYWRv
dy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3UGF0
aFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3Qm9yZGVybGVzc1JlY3RTaGFkb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseVBsYXRmb3JtU2hhZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUGxhdGZvcm1TaGFkb3cp
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0UGhhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3RmFzdFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVsZWFzZVJlc3VsdEltYWdlKToKKwogMjAx
MC0wOC0yNCAgQW5kcmVhcyBLbGluZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFRvciBBcm5lIFZlc3Riw7guCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBlYWQyY2E1Li4yODc2NmQ3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTI5Nyw3ICsyOTcsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQpOwogI2lm
IFBMQVRGT1JNKENBSVJPKQogICAgICAgICBmbG9hdCBnZXRBbHBoYSgpOwotICAgICAgICB2b2lk
IGNyZWF0ZVBsYXRmb3JtU2hhZG93KFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29u
c3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd1JlY3QsIGZsb2F0
IHJhZGl1cyk7CisgICAgICAgIHZvaWQgYXBwbHlQbGF0Zm9ybVNoYWRvdyhQYXNzT3duUHRyPElt
YWdlQnVmZmVyPiBidWZmZXIsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgY29uc3QgRmxvYXRS
ZWN0JiBzaGFkb3dSZWN0LCBmbG9hdCByYWRpdXMpOworICAgICAgICBQYXNzT3duUHRyPEltYWdl
QnVmZmVyPiBjcmVhdGVQbGF0Zm9ybVNoYWRvdyhQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBidWZm
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQgcmFkaXVzKTsKICAgICAgICAg
c3RhdGljIHZvaWQgY2FsY3VsYXRlU2hhZG93QnVmZmVyRGltZW5zaW9ucyhJbnRTaXplJiBzaGFk
b3dCdWZmZXJTaXplLCBGbG9hdFJlY3QmIHNoYWRvd1JlY3QsIGZsb2F0JiByYWRpdXMsIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlUmVjdCwgY29uc3QgRmxvYXRTaXplJiBzaGFkb3dTaXplLCBmbG9h
dCBzaGFkb3dCbHVyKTsKICNlbmRpZgogCkBAIC00NDQsNiArNDQ1LDExIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBtX2NvbW1vbjsKICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGE7IC8vIERlcHJlY2F0
ZWQ7IG1fY29tbW1vbiBjYW4ganVzdCBiZSBkb3duY2FzdGVkLiBUbyBiZSByZW1vdmVkLgorCisj
aWYgUExBVEZPUk0oQ0FJUk8pCisgICAgICAgIHZvaWQgZHJhd0Zhc3RTaGFkb3coR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBnY3AsIGNvbnN0IEludFJl
Y3QmIHIsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiB0
b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBG
bG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpOworI2Vu
ZGlmCisKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKaW5kZXggZjZkOGYzZC4uMGExZTE3NSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcApAQCAt
MTEzLDcgKzExMyw3IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zCiAgICAgICAgICAgICBjYWly
b19yZXN0b3JlKHNoYWRvd0NyKTsKICAgICAgICAgfQogICAgICAgICBjYWlyb190cmFuc2xhdGUo
Y3IsIDAuMCwgLWV4dGVudHMuaGVpZ2h0KTsKLSAgICAgICAgY29udGV4dC0+Y3JlYXRlUGxhdGZv
cm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3Qs
IHJhZGl1cyk7CisgICAgICAgIGNvbnRleHQtPmFwcGx5UGxhdGZvcm1TaGFkb3coc2hhZG93QnVm
ZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cyk7CiAjZWxzZQog
ICAgICAgICBjYWlyb190cmFuc2xhdGUoY3IsIHNoYWRvd1NpemUud2lkdGgoKSwgc2hhZG93U2l6
ZS5oZWlnaHQoKSk7CiAgICAgICAgIGNhaXJvX3Nob3dfZ2x5cGhzKGNyLCBnbHlwaHMsIG51bUds
eXBocyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dENhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDNhNjY3YWMuLjY4N2IyYWMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fp
cm8uY3BwCkBAIC0yMjgsNyArMjI4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGRyYXdQYXRoU2hh
ZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgR3JhcGhpY3NDb250ZXh0UHJpdmEKICAgICBp
ZiAoc3Ryb2tlU2hhZG93KQogICAgICAgICBzZXRQbGF0Zm9ybVN0cm9rZShjb250ZXh0LCBzaGFk
b3dDb250ZXh0LCBnY3ApOwogCi0gICAgY29udGV4dC0+Y3JlYXRlUGxhdGZvcm1TaGFkb3coc2hh
ZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cyk7Cisg
ICAgY29udGV4dC0+YXBwbHlQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBz
aGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKICNlbmRpZgogfQogCkBAIC02NDAsNyAr
NjQwLDcgQEAgc3RhdGljIHZvaWQgZHJhd0JvcmRlcmxlc3NSZWN0U2hhZG93KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JgogICAgIEdyYXBoaWNzQ29udGV4dCogc2hh
ZG93Q29udGV4dCA9IHNoYWRvd0J1ZmZlci0+Y29udGV4dCgpOwogICAgIHNoYWRvd0NvbnRleHQt
PmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KHJhZGl1cywgcmFkaXVzKSwgcmVjdC5zaXpl
KCkpLCByZWN0Q29sb3IsIERldmljZUNvbG9yU3BhY2UpOwogCi0gICAgY29udGV4dC0+Y3JlYXRl
UGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRv
d1JlY3QsIHJhZGl1cyk7CisgICAgY29udGV4dC0+YXBwbHlQbGF0Zm9ybVNoYWRvdyhzaGFkb3dC
dWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKICNlbmRp
ZgogfQogCkBAIC05MjEsMjAgKzkyMSwzMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TaGFkb3coRmxvYXRTaXplIGNvbnN0JiBzaXplLCBmbG9hdCwgQ29sb3IgY29ucwogICAg
IH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVBsYXRmb3JtU2hhZG93KFBhc3NP
d25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBjb25z
dCBGbG9hdFJlY3QmIHNoYWRvd1JlY3QsIGZsb2F0IHJhZGl1cykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjphcHBseVBsYXRmb3JtU2hhZG93KFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciwg
Y29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd1JlY3QsIGZs
b2F0IHJhZGl1cykKIHsKICNpZiBFTkFCTEUoRklMVEVSUykKKyAgICBPd25QdHI8SW1hZ2VCdWZm
ZXI+IGFscGhhU2hhZG93QnVmZmVyID0gY3JlYXRlUGxhdGZvcm1TaGFkb3coYnVmZmVyLCBzaGFk
b3dSZWN0LCByYWRpdXMpOworICAgIGlmICghYWxwaGFTaGFkb3dCdWZmZXIpCisgICAgICAgIGFs
cGhhU2hhZG93QnVmZmVyID0gYnVmZmVyOworCiAgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNy
OworICAgIHNldENvbG9yKGNyLCBzaGFkb3dDb2xvcik7CisgICAgY2Fpcm9fbWFza19zdXJmYWNl
KGNyLCBhbHBoYVNoYWRvd0J1ZmZlci0+bV9kYXRhLm1fc3VyZmFjZSwgc2hhZG93UmVjdC54KCks
IHNoYWRvd1JlY3QueSgpKTsKKyNlbmRpZgorfQorCitQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBH
cmFwaGljc0NvbnRleHQ6OmNyZWF0ZVBsYXRmb3JtU2hhZG93KFBhc3NPd25QdHI8SW1hZ2VCdWZm
ZXI+IGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBmbG9hdCByYWRpdXMpCit7
CisjaWYgRU5BQkxFKEZJTFRFUlMpCisgICAgRmxvYXRQb2ludCBibHVyUmFkaXVzID0gRmxvYXRQ
b2ludChyYWRpdXMsIHJhZGl1cyk7CiAKICAgICAvLyBjYWxjdWxhdGUgdGhlIHN0YW5kYXJkIGRl
dmlhdGlvbgogICAgIGZsb2F0IHNkID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVN0ZERldmlh
dGlvbihyYWRpdXMpOwogCiAgICAgLy8gZHJhdyB0aGUgc2hhZG93IHdpdGhvdXQgYmx1cnJpbmcs
IGlmIHJhZGl1cyBpcyB6ZXJvCi0gICAgaWYgKCFyYWRpdXMgfHwgIXNkKSB7Ci0gICAgICAgIHNl
dENvbG9yKGNyLCBzaGFkb3dDb2xvcik7Ci0gICAgICAgIGNhaXJvX21hc2tfc3VyZmFjZShjciwg
YnVmZmVyLT5tX2RhdGEubV9zdXJmYWNlLCBzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcmFkaXVzIHx8ICFzZCkKKyAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICAvLyBjcmVhdGUgZmlsdGVyCiAgICAgUmVmUHRyPEZpbHRlcj4g
ZmlsdGVyID0gSW1hZ2VCdWZmZXJGaWx0ZXI6OmNyZWF0ZSgpOwpAQCAtOTQ2LDEwICs5NTYsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJ
bWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdAogICAgIGJsdXItPnNldFNjYWxlZFN1YlJlZ2lvbihG
bG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaGFkb3dSZWN0LnNpemUoKSkpOwogICAgIGJsdXItPmFw
cGx5KGZpbHRlci5nZXQoKSk7CiAKLSAgICAvLyBNYXNrIHRoZSBmaWx0ZXIgd2l0aCB0aGUgc2hh
ZG93IGNvbG9yIGFuZCBkcmF3IGl0IHRvIHRoZSBjb250ZXh0LgotICAgIC8vIE1hc2tpbmcgbWFr
ZXMgaXQgcG9zc2libGUgdG8ganVzdCBibHVyIHRoZSBhbHBoYSBjaGFubmVsLgotICAgIHNldENv
bG9yKGNyLCBzaGFkb3dDb2xvcik7Ci0gICAgY2Fpcm9fbWFza19zdXJmYWNlKGNyLCBibHVyLT5y
ZXN1bHRJbWFnZSgpLT5tX2RhdGEubV9zdXJmYWNlLCBzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVj
dC55KCkpOworICAgIHJldHVybiBibHVyLT5yZWxlYXNlUmVzdWx0SW1hZ2UoKTsKICNlbmRpZgog
fQogCkBAIC0xMjE4LDYgKzEyMjUsMTkyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0
RWxsaXBzZUluUmVjdChjb25zdCBJbnRSZWN0JiByKQogICAgIGNsaXBPdXQocCk7CiB9CiAKK3N0
YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBnZXRQaGFzZShjb25zdCBGbG9hdFJlY3QmIGRlc3QsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZSkKK3sKKyAgICBGbG9hdFBvaW50IHBoYXNlID0gZGVzdC5sb2Nh
dGlvbigpOworICAgIHBoYXNlLm1vdmUoLXRpbGUueCgpLCAtdGlsZS55KCkpOworCisgICAgcmV0
dXJuIHBoYXNlOworfQorCisvKgorICBUaGlzIGZ1bmN0aW9uIHVzZXMgdGlsaW5nIHRvIGltcHJv
dmUgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBzaGFkb3cKKyAgZHJhd2luZyBvZiByb3VuZGVkIHJl
Y3RhbmdsZXMuIFRoZSBjb2RlIGJhc2ljYWxseSBkb2VzIHRoZSBmb2xsb3dpbmcKKyAgc3RlcHM6
CisKKyAgICAgMS4gQ2FsY3VsYXRlIHRoZSBtaW5pbXVtIHJlY3RhbmdsZSBzaXplIHJlcXVpcmVk
IHRvIGNyZWF0ZSB0aGUKKyAgICAgdGlsZXMKKworICAgICAyLiBJZiB0aGF0IHNpemUgaXMgc21h
bGxlciB0aGFuIHRoZSByZWFsIHJlY3RhbmdsZSByZW5kZXIgdGhlIG5ldworICAgICBzbWFsbCBy
ZWN0YW5nbGUgYW5kIGl0cyBzaGFkb3csIGluIG90aGVyIGNhc2UgcmVuZGVyIHRoZSBzaGFkb3cK
KyAgICAgb2YgdGhlIHJlYWwgcmVjdGFuZ2xlLgorCisgICAgIDMuIENhbGN1bGF0ZSB0aGUgc2l6
ZXMgYW5kIHBvc2l0aW9ucyBvZiB0aGUgdGlsZXMgYW5kIHRoZWlyCisgICAgIGRlc3RpbmF0aW9u
cyBhbmQgdXNlIGRyYXdQYXR0ZXJuIHRvIHJlbmRlciB0aGUgZmluYWwgc2hhZG93LiBUaGUKKyAg
ICAgY29kZSBkaXZpZGVzIHRoZSByZW5kZXJpbmcgaW4gOCB0aWxlczoKKworICAgICAgICAxIHwg
MiB8IDMKKyAgICAgICAtLS0tLS0tLS0tLQorICAgICAgICA0IHwgICB8IDUKKyAgICAgICAtLS0t
LS0tLS0tLQorICAgICAgICA2IHwgNyB8IDgKKworICAgICBUaGUgY29ybmVycyBhcmUgZGlyZWN0
bHkgY29waWVkIGZyb20gdGhlIHNtYWxsIHJlY3RhbmdsZSB0byB0aGUKKyAgICAgcmVhbCBvbmUg
YW5kIHRoZSBzaWRlIHRpbGVzIGFyZSAxIHBpeGVsIHdpZHRoLCB3ZSB1c2UgdGhlbSBhcworICAg
ICB0aWxlcyB0byBjb3ZlciB0aGUgZGVzdGluYXRpb24gc2lkZS4gVGhlIGNvcm5lciB0aWxlcyBh
cmUgYmlnZ2VyCisgICAgIHRoYW4ganVzdCB0aGUgc2lkZSBvZiB0aGUgcm91bmRlZCBjb3JuZXIs
IHdlIG5lZWQgdG8gaW5jcmVhc2UgaXQKKyAgICAgYmVjYXVzZSB0aGUgbW9kaWZpY2F0aW9ucyBj
YXVzZWQgYnkgdGhlIGNvcm5lciBvdmVyIHRoZSBibHVyCisgICAgIGVmZmVjdC4KKyAqLwordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGYXN0U2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogZ2NwLCBjb25zdCBJbnRSZWN0JiByLCBjb25zdCBG
bG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMs
IGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0
b21SaWdodFJhZGl1cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworI2lmIEVOQUJMRShGSUxU
RVJTKQorICAgIEZsb2F0U2l6ZSBzaGFkb3dTaXplOworICAgIGZsb2F0IHNoYWRvd0JsdXI7Cisg
ICAgQ29sb3Igc2hhZG93Q29sb3I7CisgICAgaWYgKCFjb250ZXh0LT5nZXRTaGFkb3coc2hhZG93
U2l6ZSwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBDYWxjdWxhdGUgZmlsdGVyIHZhbHVlcyB0byBjcmVhdGUgYXBwcm9wcmlhdGUgc2hhZG93Lgor
ICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgY2Fpcm9f
cGF0aF90KiBwYXRoID0gY2Fpcm9fY29weV9wYXRoKGNyKTsKKyAgICBkb3VibGUgeDAsIHgxLCB5
MCwgeTE7CisgICAgY2Fpcm9fZmlsbF9leHRlbnRzKGNyLCAmeDAsICZ5MCwgJngxLCAmeTEpOwor
ICAgIEZsb2F0UmVjdCByZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7CisKKyAgICBJbnRT
aXplIHNoYWRvd0J1ZmZlclNpemU7CisgICAgRmxvYXRSZWN0IHNoYWRvd1JlY3Q7CisgICAgZmxv
YXQgcmFkaXVzID0gMDsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNhbGN1bGF0ZVNoYWRvd0J1ZmZl
ckRpbWVuc2lvbnMoc2hhZG93QnVmZmVyU2l6ZSwgc2hhZG93UmVjdCwgcmFkaXVzLCByZWN0LCBz
aGFkb3dTaXplLCBzaGFkb3dCbHVyKTsKKworICAgIC8vIHNpemUgb2YgdGhlIHRpbGluZyBmb3Ig
dGhlIHNpZGVzCisgICAgaW50IHRpbGVXaWR0aCA9IDE7CisgICAgZmxvYXQgcmFkaXVzVHdpY2Ug
PSByYWRpdXMgKiAyOworICAgIGludCBzaGFkb3dTaWRlID0gcmFkaXVzVHdpY2UgKyB0aWxlV2lk
dGg7CisgICAgSW50U2l6ZSBzbWFsbEJ1ZmZlclNpemU7CisKKyAgICBzbWFsbEJ1ZmZlclNpemUu
c2V0V2lkdGgocmFkaXVzVHdpY2UgKyBtYXgodG9wTGVmdFJhZGl1cy53aWR0aCgpLCBib3R0b21M
ZWZ0UmFkaXVzLndpZHRoKCkpICsgc2hhZG93U2lkZSArIG1heCh0b3BSaWdodFJhZGl1cy53aWR0
aCgpLCBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpKSk7CisgICAgc21hbGxCdWZmZXJTaXplLnNl
dEhlaWdodChyYWRpdXNUd2ljZSArIG1heCh0b3BMZWZ0UmFkaXVzLmhlaWdodCgpLCB0b3BSaWdo
dFJhZGl1cy5oZWlnaHQoKSkgKyBzaGFkb3dTaWRlICsgbWF4KGJvdHRvbUxlZnRSYWRpdXMuaGVp
Z2h0KCksIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpKSk7CisKKyAgICBpZiAoKHNtYWxsQnVm
ZmVyU2l6ZS53aWR0aCgpID4gc2hhZG93QnVmZmVyU2l6ZS53aWR0aCgpKSB8fCAoc21hbGxCdWZm
ZXJTaXplLmhlaWdodCgpID4gc2hhZG93QnVmZmVyU2l6ZS5oZWlnaHQoKSkgfHwgKHJhZGl1cyA8
PSAwKSkgeworICAgICAgICAvLyBDcmVhdGUgc3VpdGFibHktc2l6ZWQgSW1hZ2VCdWZmZXIgdG8g
aG9sZCB0aGUgc2hhZG93LgorICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNoYWRvd0J1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2hhZG93QnVmZmVyU2l6ZSk7CisKKyAgICAgICAgLy8g
RHJhdyBzaGFkb3cgaW50byBhIG5ldyBJbWFnZUJ1ZmZlci4KKyAgICAgICAgY2Fpcm9fdCogc2hh
ZG93Q29udGV4dCA9IHNoYWRvd0J1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsK
KyAgICAgICAgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNyLCBzaGFkb3dDb250ZXh0KTsKKyAgICAg
ICAgY2Fpcm9fdHJhbnNsYXRlKHNoYWRvd0NvbnRleHQsIC1yZWN0LngoKSArIHJhZGl1cywgLXJl
Y3QueSgpICsgcmFkaXVzKTsKKyAgICAgICAgY2Fpcm9fbmV3X3BhdGgoc2hhZG93Q29udGV4dCk7
CisgICAgICAgIGNhaXJvX2FwcGVuZF9wYXRoKHNoYWRvd0NvbnRleHQsIHBhdGgpOworCisgICAg
ICAgIHNldFBsYXRmb3JtRmlsbChjb250ZXh0LCBzaGFkb3dDb250ZXh0LCBnY3ApOworCisgICAg
ICAgIGNvbnRleHQtPmFwcGx5UGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwg
c2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cyk7CisKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc21hbGxCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHNtYWxsQnVmZmVyU2l6ZSk7CisKKyAgICBJbnRSZWN0IHNtYWxsUmVjdCA9IEludFJl
Y3QocmFkaXVzLCByYWRpdXMsIHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgpIC0gcmFkaXVzVHdpY2Us
IHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSAtIHJhZGl1c1R3aWNlKTsKKworICAgIC8vIERyYXcg
c2hhZG93IGludG8gYSBuZXcgSW1hZ2VCdWZmZXIuCisgICAgY2Fpcm9fdCogc21hbGxCdWZmZXJD
b250ZXh0ID0gc21hbGxCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAg
Y29weUNvbnRleHRQcm9wZXJ0aWVzKGNyLCBzbWFsbEJ1ZmZlckNvbnRleHQpOworICAgIGFwcGVu
ZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQoc21hbGxCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZv
cm1Db250ZXh0KCksIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoc21hbGxSZWN0LCB0b3BM
ZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRS
YWRpdXMpKTsKKyAgICBzZXRQbGF0Zm9ybUZpbGwoY29udGV4dCwgc21hbGxCdWZmZXJDb250ZXh0
LCBnY3ApOworCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzaGFkb3dCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNtYWxsQnVmZmVyU2l6ZSk7CisKKyAgICBzbWFsbFJlY3Quc2V0U2l6ZShz
bWFsbEJ1ZmZlclNpemUpOworCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBhbHBoYVNoYWRvd0J1
ZmZlciA9IGNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU2hhZG93KHNtYWxsQnVmZmVyLnJlbGVhc2Uo
KSwgc21hbGxSZWN0LCByYWRpdXMpOworCisgICAgLy8gTm8gc2hhZG93CisgICAgaWYgKCFhbHBo
YVNoYWRvd0J1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgc2hhZG93UmVjdC5pbmZsYXRl
KC1yYWRpdXNUd2ljZSk7CisgICAgZmlsbFJlY3RTb3VyY2VPdmVyKGNyLCBzaGFkb3dSZWN0LCBz
aGFkb3dDb2xvcik7CisgICAgc2hhZG93UmVjdC5pbmZsYXRlKHJhZGl1c1R3aWNlKTsKKworICAg
IGNhaXJvX3QqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3dCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZv
cm1Db250ZXh0KCk7CisgICAgc2V0Q29sb3Ioc2hhZG93Q29udGV4dCwgc2hhZG93Q29sb3IpOwor
ICAgIGNhaXJvX21hc2tfc3VyZmFjZShzaGFkb3dDb250ZXh0LCBhbHBoYVNoYWRvd0J1ZmZlci0+
bV9kYXRhLm1fc3VyZmFjZSwgMCwgMCk7CisKKyAgICAvLyB0b3Agc2lkZQorICAgIEZsb2F0UmVj
dCB0aWxlUmVjdCA9IEZsb2F0UmVjdChyYWRpdXNUd2ljZSArIHRvcExlZnRSYWRpdXMud2lkdGgo
KSwgMCwgdGlsZVdpZHRoLCByYWRpdXNUd2ljZSk7CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0g
dGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55
KCkpOworICAgIGRlc3RSZWN0LnNldFdpZHRoKHNoYWRvd1JlY3Qud2lkdGgoKSAtIHRvcExlZnRS
YWRpdXMud2lkdGgoKSAtIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkgLSByYWRpdXMgKiA0KTsKKyAg
ICBGbG9hdFBvaW50IHBoYXNlID0gZ2V0UGhhc2UoZGVzdFJlY3QsIHRpbGVSZWN0KTsKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybTsKKyAgICBwYXR0ZXJuVHJhbnNmb3JtLm1h
a2VJZGVudGl0eSgpOworICAgIHNoYWRvd0J1ZmZlci0+ZHJhd1BhdHRlcm4oY29udGV4dCwgdGls
ZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
aGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAg
Ly8gYm90dG9tIHNpZGUKKyAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdChyYWRpdXNUd2ljZSArIGJv
dHRvbUxlZnRSYWRpdXMud2lkdGgoKSwgc21hbGxCdWZmZXJTaXplLmhlaWdodCgpIC0gcmFkaXVz
VHdpY2UsIHRpbGVXaWR0aCwgcmFkaXVzVHdpY2UpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7
CisgICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkgKyByYWRp
dXNUd2ljZSArIHJlY3QuaGVpZ2h0KCkgLSBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkpOworICAg
IGRlc3RSZWN0LnNldFdpZHRoKHNoYWRvd1JlY3Qud2lkdGgoKSAtIGJvdHRvbUxlZnRSYWRpdXMu
d2lkdGgoKSAtIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkgLSByYWRpdXMgKiA0KTsKKyAgICBw
aGFzZSA9IGdldFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7CisgICAgc2hhZG93QnVmZmVyLT5k
cmF3UGF0dGVybihjb250ZXh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VP
dmVyLCBkZXN0UmVjdCk7CisKKyAgICAvLyByaWdodCBzaWRlCisgICAgdGlsZVJlY3QgPSBGbG9h
dFJlY3Qoc21hbGxCdWZmZXJTaXplLndpZHRoKCkgLSByYWRpdXNUd2ljZSwgcmFkaXVzVHdpY2Ug
KyB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSwgcmFkaXVzVHdpY2UsIHRpbGVXaWR0aCk7CisgICAg
ZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpICsg
cmFkaXVzVHdpY2UgKyByZWN0LndpZHRoKCkgLSBzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSwgc2hh
ZG93UmVjdC55KCkpOworICAgIGRlc3RSZWN0LnNldEhlaWdodChzaGFkb3dSZWN0LmhlaWdodCgp
IC0gdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkgLSBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSAt
IHJhZGl1cyAqIDQpOworICAgIHBoYXNlID0gZ2V0UGhhc2UoZGVzdFJlY3QsIHRpbGVSZWN0KTsK
KyAgICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHRpbGVSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2UsIGNvbG9yU3Bh
Y2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsKKworICAgIC8vIGxlZnQgc2lkZQor
ICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KDAsIHJhZGl1c1R3aWNlICsgdG9wTGVmdFJhZGl1cy5o
ZWlnaHQoKSwgcmFkaXVzVHdpY2UsIHRpbGVXaWR0aCk7CisgICAgZGVzdFJlY3QgPSB0aWxlUmVj
dDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7Cisg
ICAgZGVzdFJlY3Quc2V0SGVpZ2h0KHNoYWRvd1JlY3QuaGVpZ2h0KCkgLSB0b3BSaWdodFJhZGl1
cy5oZWlnaHQoKSAtIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpIC0gcmFkaXVzICogNCk7Cisg
ICAgcGhhc2UgPSBGbG9hdFBvaW50KGRlc3RSZWN0LngoKSAtIHRpbGVSZWN0LngoKSwgZGVzdFJl
Y3QueSgpIC0gdGlsZVJlY3QueSgpKTsKKyAgICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKGNv
bnRleHQsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGhhc2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0
KTsKKworICAgIC8vIHRvcCBsZWZ0IGNvcm5lcgorICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KDAs
IDAsIHJhZGl1c1R3aWNlICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCByYWRpdXNUd2ljZSArIHRv
cExlZnRSYWRpdXMuaGVpZ2h0KCkpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVz
dFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkpOworICAgIHBoYXNlID0g
Z2V0UGhhc2UoZGVzdFJlY3QsIHRpbGVSZWN0KTsKKyAgICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0
ZXJuKGNvbnRleHQsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGhhc2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRl
c3RSZWN0KTsKKworICAgIC8vIHRvcCByaWdodCBjb3JuZXIKKyAgICB0aWxlUmVjdCA9IEZsb2F0
UmVjdChzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSAtIHJhZGl1c1R3aWNlIC0gdG9wUmlnaHRSYWRp
dXMud2lkdGgoKSwgMCwgcmFkaXVzVHdpY2UgKyB0b3BSaWdodFJhZGl1cy53aWR0aCgpLCByYWRp
dXNUd2ljZSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpKTsKKyAgICBkZXN0UmVjdCA9IHRpbGVS
ZWN0OworICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSBz
bWFsbEJ1ZmZlclNpemUud2lkdGgoKSArIHJhZGl1c1R3aWNlLCBzaGFkb3dSZWN0LnkoKSk7Cisg
ICAgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIHNoYWRvd0J1ZmZl
ci0+ZHJhd1BhdHRlcm4oY29udGV4dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291
cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAgLy8gYm90dG9tIHJpZ2h0IGNvcm5lcgorICAgIHRp
bGVSZWN0ID0gRmxvYXRSZWN0KHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgpIC0gcmFkaXVzVHdpY2Ug
LSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpLCBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgLSBy
YWRpdXNUd2ljZSAtIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpLCByYWRpdXNUd2ljZSArIGJv
dHRvbVJpZ2h0UmFkaXVzLndpZHRoKCksIHJhZGl1c1R3aWNlICsgYm90dG9tUmlnaHRSYWRpdXMu
aGVpZ2h0KCkpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShz
aGFkb3dSZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgpICsg
cmFkaXVzVHdpY2UsIHNoYWRvd1JlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAtIHNtYWxsQnVmZmVy
U2l6ZS5oZWlnaHQoKSArIHJhZGl1c1R3aWNlKTsKKyAgICBwaGFzZSA9IGdldFBoYXNlKGRlc3RS
ZWN0LCB0aWxlUmVjdCk7CisgICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0dGVybihjb250ZXh0LCB0
aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAg
ICAvLyBib3R0b20gbGVmdCBjb3JuZXIKKyAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCgwLCBzbWFs
bEJ1ZmZlclNpemUuaGVpZ2h0KCkgLSByYWRpdXNUd2ljZSAtIGJvdHRvbVJpZ2h0UmFkaXVzLmhl
aWdodCgpLCByYWRpdXNUd2ljZSArIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSwgcmFkaXVzVHdp
Y2UgKyBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpKTsKKyAgICBkZXN0UmVjdCA9IHRpbGVSZWN0
OworICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCksIHNoYWRvd1JlY3QueSgpICsgcmVj
dC5oZWlnaHQoKSAtIHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSArIHJhZGl1c1R3aWNlKTsKKyAg
ICBwaGFzZSA9IGdldFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7CisgICAgc2hhZG93QnVmZmVy
LT5kcmF3UGF0dGVybihjb250ZXh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3Vy
Y2VPdmVyLCBkZXN0UmVjdCk7CisKKyNlbmRpZgorfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEludFNpemUmIHRvcExlZnQs
IGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25z
dCBJbnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTEyMjcsNyArMTQy
MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVj
dCYgciwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwKICAgICBjYWlyb19zYXZlKGNyKTsKICAgICBh
cHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVj
dGFuZ2xlKHIsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCkpOwog
ICAgIHNldENvbG9yKGNyLCBjb2xvcik7Ci0gICAgZHJhd1BhdGhTaGFkb3codGhpcywgbV9jb21t
b24sIHRydWUsIGZhbHNlKTsKKyAgICBkcmF3RmFzdFNoYWRvdyh0aGlzLCBtX2NvbW1vbiwgciwg
dG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0LCBjb2xvclNwYWNlKTsK
ICAgICBjYWlyb19maWxsKGNyKTsKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCmluZGV4IGQ1ZWIwZTcu
LmJkMDViMDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNh
aXJvLmNwcApAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvCiAgICAg
ICAgIGNhaXJvX3JlY3RhbmdsZShzaGFkb3dDb250ZXh0LCAwLCAwLCBkc3RSZWN0LndpZHRoKCks
IGRzdFJlY3QuaGVpZ2h0KCkpOwogICAgICAgICBjYWlyb19maWxsKHNoYWRvd0NvbnRleHQpOwog
Ci0gICAgICAgIGNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxl
YXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOworICAgICAgICBjb250ZXh0
LT5hcHBseVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9y
LCBzaGFkb3dSZWN0LCByYWRpdXMpOwogICAgIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggM2I4YjVhMy4uYmI0
MzI4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuaApAQCAtNjUsNiArNjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
Ly8gVGhlIHJlc3VsdCBpcyBib3VuZGVkIGJ5IHRoZSBzaXplIG9mIHRoZSBmaWx0ZXIgcHJpbWl0
aXZlIHRvIHNhdmUgcmVzb3VyY2VzCiAgICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSgp
IHsgcmV0dXJuIG1fZWZmZWN0QnVmZmVyLmdldCgpOyB9CisgICAgICAgIFBhc3NPd25QdHI8SW1h
Z2VCdWZmZXIqPiByZWxlYXNlUmVzdWx0SW1hZ2UoKSB7IHJldHVybiBtX2VmZmVjdEJ1ZmZlci5y
ZWxlYXNlKCk7IH0KICAgICAgICAgdm9pZCBzZXRFZmZlY3RCdWZmZXIoUGFzc093blB0cjxJbWFn
ZUJ1ZmZlcj4gZWZmZWN0QnVmZmVyKSB7IG1fZWZmZWN0QnVmZmVyID0gZWZmZWN0QnVmZmVyOyB9
CiAKICAgICAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lv
bnMoRmlsdGVyKiwgRmlsdGVyRWZmZWN0KiwgRmlsdGVyRWZmZWN0Kik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65927</attachid>
            <date>2010-08-30 09:55:49 -0700</date>
            <delta_ts>2010-08-31 06:36:05 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>tiling_shadow.patch</filename>
            <type>text/plain</type>
            <size>18372</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Y2U0ZWVmZS4uM2NhNjc4MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOC0wMiAgQWxlamFuZHJvIEcu
IENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbR3RrXSB2ZXJ5IHNsb3cgcGFnZSBzY3JvbGxpbmcgb24gYmln
IC13ZWJraXQtYm94LXNoYWRvdyBhcmVhcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mzk1ODIKKworICAgICAgICBBZGQgYSBuZXcgZHJhd0Zhc3RTaGFk
b3cgbWV0aG9kIHRvIHJlbmRlciBhIGJpZyBzaGFkb3cgZG9pbmcKKyAgICAgICAgdGlsaW5nIG9m
IHBhcnRzIG9mIGEgc21hbGxlciBzaGFkb3cuIFdlIGNyZWF0ZSB0aGUgbWluaW11bSBzaGFkb3cK
KyAgICAgICAgcmVxdWlyZWQgdG8gZ2V0IHRoZSB0aWxlcyB3ZSB3aWxsIHVzZSB0byByZW5kZXIg
dGhlIHJlYWwgc2hhZG93CisgICAgICAgIGFuZCB3ZSB1c2UgZHJhd1BhdHRlcm4gd2l0aCB0aG9z
ZSB0aWxlcyB0byBjcmVhdGUgdGhlIHNoYWRvdy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpkcmF3UGF0aFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpk
cmF3Qm9yZGVybGVzc1JlY3RTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjphcHBseVBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6Y3JlYXRlUGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UGhhc2Up
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RmFzdFNoYWRvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
cmVsZWFzZVJlc3VsdEltYWdlKToKKwogMjAxMC0wOC0zMCAgQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24u
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCA5M2Vm
ODkwLi41MGJjMGVlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgKQEAgLTI5Nyw3ICsyOTcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZv
aWQgc2V0QWxwaGEoZmxvYXQpOwogI2lmIFBMQVRGT1JNKENBSVJPKQogICAgICAgICBmbG9hdCBn
ZXRBbHBoYSgpOwotICAgICAgICB2b2lkIGNyZWF0ZVBsYXRmb3JtU2hhZG93KFBhc3NPd25QdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBjb25zdCBGbG9h
dFJlY3QmIHNoYWRvd1JlY3QsIGZsb2F0IHJhZGl1cyk7CisgICAgICAgIHZvaWQgYXBwbHlQbGF0
Zm9ybVNoYWRvdyhQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIsIGNvbnN0IENvbG9yJiBz
aGFkb3dDb2xvciwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBmbG9hdCByYWRpdXMpOwor
ICAgICAgICBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVQbGF0Zm9ybVNoYWRvdyhQYXNz
T3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwg
ZmxvYXQgcmFkaXVzKTsKKwogICAgICAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVTaGFkb3dCdWZm
ZXJEaW1lbnNpb25zKEludFNpemUmIHNoYWRvd0J1ZmZlclNpemUsIEZsb2F0UmVjdCYgc2hhZG93
UmVjdCwgZmxvYXQmIHJhZGl1cywgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBG
bG9hdFNpemUmIHNoYWRvd09mZnNldCwgZmxvYXQgc2hhZG93Qmx1cik7CiAjZW5kaWYKIApAQCAt
NDQ0LDYgKzQ0NiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgR3JhcGhpY3ND
b250ZXh0UHJpdmF0ZSogbV9jb21tb247CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZSogbV9kYXRhOyAvLyBEZXByZWNhdGVkOyBtX2NvbW1tb24gY2FuIGp1c3QgYmUgZG93
bmNhc3RlZC4gVG8gYmUgcmVtb3ZlZC4KKworI2lmIFBMQVRGT1JNKENBSVJPKQorICAgICAgICB2
b2lkIGRyYXdGYXN0U2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgR3JhcGhpY3NDb250
ZXh0UHJpdmF0ZSogZ2NwLCBjb25zdCBJbnRSZWN0JiByLCBjb25zdCBGbG9hdFNpemUmIHRvcExl
ZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6
ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdodFJhZGl1cywg
Q29sb3JTcGFjZSBjb2xvclNwYWNlKTsKKyNlbmRpZgorCiAgICAgfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8u
Y3BwCmluZGV4IDViZmEzZmIuLmNkNWQzNjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKQEAgLTExMyw3ICsxMTMsNyBAQCB2b2lkIEZvbnQ6OmRy
YXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udCwgY29ucwogICAgICAgICAgICAgY2Fpcm9fcmVzdG9yZShzaGFkb3dDcik7CiAgICAgICAg
IH0KICAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCAwLjAsIC1leHRlbnRzLmhlaWdodCk7Ci0g
ICAgICAgIGNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNl
KCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOworICAgICAgICBjb250ZXh0LT5h
cHBseVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBz
aGFkb3dSZWN0LCByYWRpdXMpOwogI2Vsc2UKICAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCBz
aGFkb3dPZmZzZXQud2lkdGgoKSwgc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKICAgICAgICAgY2Fp
cm9fc2hvd19nbHlwaHMoY3IsIGdseXBocywgbnVtR2x5cGhzKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5k
ZXggNjgzYzE0NC4uNjc4MzVlYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTIyOCw3ICsyMjgsNyBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgZHJhd1BhdGhTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBHcmFwaGljc0NvbnRleHRQcml2YQogICAgIGlmIChzdHJva2VTaGFkb3cpCiAgICAgICAg
IHNldFBsYXRmb3JtU3Ryb2tlKGNvbnRleHQsIHNoYWRvd0NvbnRleHQsIGdjcCk7CiAKLSAgICBj
b250ZXh0LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFk
b3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKKyAgICBjb250ZXh0LT5hcHBseVBsYXRmb3Jt
U2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCBy
YWRpdXMpOwogI2VuZGlmCiB9CiAKQEAgLTY0MCw3ICs2NDAsNyBAQCBzdGF0aWMgdm9pZCBkcmF3
Qm9yZGVybGVzc1JlY3RTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmCiAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93QnVmZmVy
LT5jb250ZXh0KCk7CiAgICAgc2hhZG93Q29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0
UG9pbnQocmFkaXVzLCByYWRpdXMpLCByZWN0LnNpemUoKSksIHJlY3RDb2xvciwgRGV2aWNlQ29s
b3JTcGFjZSk7CiAKLSAgICBjb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZm
ZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKKyAgICBjb250
ZXh0LT5hcHBseVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0Nv
bG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOwogI2VuZGlmCiB9CiAKQEAgLTkyMSwyMCArOTIxLDMw
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhGbG9hdFNpemUgY29u
c3QmIHNpemUsIGZsb2F0LCBDb2xvciBjb25zCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y3JlYXRlUGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVy
LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwg
ZmxvYXQgcmFkaXVzKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5UGxhdGZvcm1TaGFkb3co
UGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3Is
IGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQgcmFkaXVzKQogewogI2lmIEVOQUJM
RShGSUxURVJTKQorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYWxwaGFTaGFkb3dCdWZmZXIgPSBj
cmVhdGVQbGF0Zm9ybVNoYWRvdyhidWZmZXIsIHNoYWRvd1JlY3QsIHJhZGl1cyk7CisgICAgaWYg
KCFhbHBoYVNoYWRvd0J1ZmZlcikKKyAgICAgICAgYWxwaGFTaGFkb3dCdWZmZXIgPSBidWZmZXI7
CisKICAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgc2V0Q29sb3IoY3IsIHNoYWRv
d0NvbG9yKTsKKyAgICBjYWlyb19tYXNrX3N1cmZhY2UoY3IsIGFscGhhU2hhZG93QnVmZmVyLT5t
X2RhdGEubV9zdXJmYWNlLCBzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkpOworI2VuZGlm
Cit9CisKK1Bhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUGxh
dGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIHNoYWRvd1JlY3QsIGZsb2F0IHJhZGl1cykKK3sKKyNpZiBFTkFCTEUoRklMVEVSUykKKyAg
ICBGbG9hdFBvaW50IGJsdXJSYWRpdXMgPSBGbG9hdFBvaW50KHJhZGl1cywgcmFkaXVzKTsKIAog
ICAgIC8vIGNhbGN1bGF0ZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uCiAgICAgZmxvYXQgc2QgPSBG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlU3RkRGV2aWF0aW9uKHJhZGl1cyk7CiAKICAgICAvLyBk
cmF3IHRoZSBzaGFkb3cgd2l0aG91dCBibHVycmluZywgaWYgcmFkaXVzIGlzIHplcm8KLSAgICBp
ZiAoIXJhZGl1cyB8fCAhc2QpIHsKLSAgICAgICAgc2V0Q29sb3IoY3IsIHNoYWRvd0NvbG9yKTsK
LSAgICAgICAgY2Fpcm9fbWFza19zdXJmYWNlKGNyLCBidWZmZXItPm1fZGF0YS5tX3N1cmZhY2Us
IHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKCFyYWRpdXMgfHwgIXNkKQorICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIGNy
ZWF0ZSBmaWx0ZXIKICAgICBSZWZQdHI8RmlsdGVyPiBmaWx0ZXIgPSBJbWFnZUJ1ZmZlckZpbHRl
cjo6Y3JlYXRlKCk7CkBAIC05NDYsMTAgKzk1Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
cmVhdGVQbGF0Zm9ybVNoYWRvdyhQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIsIGNvbnN0
CiAgICAgYmx1ci0+c2V0U2NhbGVkU3ViUmVnaW9uKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNo
YWRvd1JlY3Quc2l6ZSgpKSk7CiAgICAgYmx1ci0+YXBwbHkoZmlsdGVyLmdldCgpKTsKIAotICAg
IC8vIE1hc2sgdGhlIGZpbHRlciB3aXRoIHRoZSBzaGFkb3cgY29sb3IgYW5kIGRyYXcgaXQgdG8g
dGhlIGNvbnRleHQuCi0gICAgLy8gTWFza2luZyBtYWtlcyBpdCBwb3NzaWJsZSB0byBqdXN0IGJs
dXIgdGhlIGFscGhhIGNoYW5uZWwuCi0gICAgc2V0Q29sb3IoY3IsIHNoYWRvd0NvbG9yKTsKLSAg
ICBjYWlyb19tYXNrX3N1cmZhY2UoY3IsIGJsdXItPnJlc3VsdEltYWdlKCktPm1fZGF0YS5tX3N1
cmZhY2UsIHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgcmV0dXJuIGJsdXIt
PnJlbGVhc2VSZXN1bHRJbWFnZSgpOwogI2VuZGlmCiB9CiAKQEAgLTEyMTgsNiArMTIyNSwxOTIg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRFbGxpcHNlSW5SZWN0KGNvbnN0IEludFJl
Y3QmIHIpCiAgICAgY2xpcE91dChwKTsKIH0KIAorc3RhdGljIGlubGluZSBGbG9hdFBvaW50IGdl
dFBoYXNlKGNvbnN0IEZsb2F0UmVjdCYgZGVzdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlKQorewor
ICAgIEZsb2F0UG9pbnQgcGhhc2UgPSBkZXN0LmxvY2F0aW9uKCk7CisgICAgcGhhc2UubW92ZSgt
dGlsZS54KCksIC10aWxlLnkoKSk7CisKKyAgICByZXR1cm4gcGhhc2U7Cit9CisKKy8qCisgIFRo
aXMgZnVuY3Rpb24gdXNlcyB0aWxpbmcgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhl
IHNoYWRvdworICBkcmF3aW5nIG9mIHJvdW5kZWQgcmVjdGFuZ2xlcy4gVGhlIGNvZGUgYmFzaWNh
bGx5IGRvZXMgdGhlIGZvbGxvd2luZworICBzdGVwczoKKworICAgICAxLiBDYWxjdWxhdGUgdGhl
IG1pbmltdW0gcmVjdGFuZ2xlIHNpemUgcmVxdWlyZWQgdG8gY3JlYXRlIHRoZQorICAgICB0aWxl
cworCisgICAgIDIuIElmIHRoYXQgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIHJlYWwgcmVjdGFu
Z2xlIHJlbmRlciB0aGUgbmV3CisgICAgIHNtYWxsIHJlY3RhbmdsZSBhbmQgaXRzIHNoYWRvdywg
aW4gb3RoZXIgY2FzZSByZW5kZXIgdGhlIHNoYWRvdworICAgICBvZiB0aGUgcmVhbCByZWN0YW5n
bGUuCisKKyAgICAgMy4gQ2FsY3VsYXRlIHRoZSBzaXplcyBhbmQgcG9zaXRpb25zIG9mIHRoZSB0
aWxlcyBhbmQgdGhlaXIKKyAgICAgZGVzdGluYXRpb25zIGFuZCB1c2UgZHJhd1BhdHRlcm4gdG8g
cmVuZGVyIHRoZSBmaW5hbCBzaGFkb3cuIFRoZQorICAgICBjb2RlIGRpdmlkZXMgdGhlIHJlbmRl
cmluZyBpbiA4IHRpbGVzOgorCisgICAgICAgIDEgfCAyIHwgMworICAgICAgIC0tLS0tLS0tLS0t
CisgICAgICAgIDQgfCAgIHwgNQorICAgICAgIC0tLS0tLS0tLS0tCisgICAgICAgIDYgfCA3IHwg
OAorCisgICAgIFRoZSBjb3JuZXJzIGFyZSBkaXJlY3RseSBjb3BpZWQgZnJvbSB0aGUgc21hbGwg
cmVjdGFuZ2xlIHRvIHRoZQorICAgICByZWFsIG9uZSBhbmQgdGhlIHNpZGUgdGlsZXMgYXJlIDEg
cGl4ZWwgd2lkdGgsIHdlIHVzZSB0aGVtIGFzCisgICAgIHRpbGVzIHRvIGNvdmVyIHRoZSBkZXN0
aW5hdGlvbiBzaWRlLiBUaGUgY29ybmVyIHRpbGVzIGFyZSBiaWdnZXIKKyAgICAgdGhhbiBqdXN0
IHRoZSBzaWRlIG9mIHRoZSByb3VuZGVkIGNvcm5lciwgd2UgbmVlZCB0byBpbmNyZWFzZSBpdAor
ICAgICBiZWNhdXNlIHRoZSBtb2RpZmljYXRpb25zIGNhdXNlZCBieSB0aGUgY29ybmVyIG92ZXIg
dGhlIGJsdXIKKyAgICAgZWZmZWN0LgorICovCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zh
c3RTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRQcml2YXRl
KiBnY3AsIGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywg
Y29uc3QgRmxvYXRTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21M
ZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UpCit7CisjaWYgRU5BQkxFKEZJTFRFUlMpCisgICAgRmxvYXRTaXplIHNoYWRv
d1NpemU7CisgICAgZmxvYXQgc2hhZG93Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAg
ICBpZiAoIWNvbnRleHQtPmdldFNoYWRvdyhzaGFkb3dTaXplLCBzaGFkb3dCbHVyLCBzaGFkb3dD
b2xvcikpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIENhbGN1bGF0ZSBmaWx0ZXIgdmFsdWVz
IHRvIGNyZWF0ZSBhcHByb3ByaWF0ZSBzaGFkb3cuCisgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBjYWlyb19wYXRoX3QqIHBhdGggPSBjYWlyb19jb3B5
X3BhdGgoY3IpOworICAgIGRvdWJsZSB4MCwgeDEsIHkwLCB5MTsKKyAgICBjYWlyb19maWxsX2V4
dGVudHMoY3IsICZ4MCwgJnkwLCAmeDEsICZ5MSk7CisgICAgRmxvYXRSZWN0IHJlY3QoeDAsIHkw
LCB4MSAtIHgwLCB5MSAtIHkwKTsKKworICAgIEludFNpemUgc2hhZG93QnVmZmVyU2l6ZTsKKyAg
ICBGbG9hdFJlY3Qgc2hhZG93UmVjdDsKKyAgICBmbG9hdCByYWRpdXMgPSAwOworICAgIEdyYXBo
aWNzQ29udGV4dDo6Y2FsY3VsYXRlU2hhZG93QnVmZmVyRGltZW5zaW9ucyhzaGFkb3dCdWZmZXJT
aXplLCBzaGFkb3dSZWN0LCByYWRpdXMsIHJlY3QsIHNoYWRvd1NpemUsIHNoYWRvd0JsdXIpOwor
CisgICAgLy8gc2l6ZSBvZiB0aGUgdGlsaW5nIGZvciB0aGUgc2lkZXMKKyAgICBpbnQgdGlsZVdp
ZHRoID0gMTsKKyAgICBmbG9hdCByYWRpdXNUd2ljZSA9IHJhZGl1cyAqIDI7CisgICAgaW50IHNo
YWRvd1NpZGUgPSByYWRpdXNUd2ljZSArIHRpbGVXaWR0aDsKKyAgICBJbnRTaXplIHNtYWxsQnVm
ZmVyU2l6ZTsKKworICAgIHNtYWxsQnVmZmVyU2l6ZS5zZXRXaWR0aChyYWRpdXNUd2ljZSArIG1h
eCh0b3BMZWZ0UmFkaXVzLndpZHRoKCksIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSkgKyBzaGFk
b3dTaWRlICsgbWF4KHRvcFJpZ2h0UmFkaXVzLndpZHRoKCksIGJvdHRvbVJpZ2h0UmFkaXVzLndp
ZHRoKCkpKTsKKyAgICBzbWFsbEJ1ZmZlclNpemUuc2V0SGVpZ2h0KHJhZGl1c1R3aWNlICsgbWF4
KHRvcExlZnRSYWRpdXMuaGVpZ2h0KCksIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpKSArIHNoYWRv
d1NpZGUgKyBtYXgoYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSwgYm90dG9tUmlnaHRSYWRpdXMu
aGVpZ2h0KCkpKTsKKworICAgIGlmICgoc21hbGxCdWZmZXJTaXplLndpZHRoKCkgPiBzaGFkb3dC
dWZmZXJTaXplLndpZHRoKCkpIHx8IChzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgPiBzaGFkb3dC
dWZmZXJTaXplLmhlaWdodCgpKSB8fCAocmFkaXVzIDw9IDApKSB7CisgICAgICAgIC8vIENyZWF0
ZSBzdWl0YWJseS1zaXplZCBJbWFnZUJ1ZmZlciB0byBob2xkIHRoZSBzaGFkb3cuCisgICAgICAg
IE93blB0cjxJbWFnZUJ1ZmZlcj4gc2hhZG93QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aGFkb3dCdWZmZXJTaXplKTsKKworICAgICAgICAvLyBEcmF3IHNoYWRvdyBpbnRvIGEgbmV3IElt
YWdlQnVmZmVyLgorICAgICAgICBjYWlyb190KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93QnVmZmVy
LT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOworICAgICAgICBjb3B5Q29udGV4dFByb3Bl
cnRpZXMoY3IsIHNoYWRvd0NvbnRleHQpOworICAgICAgICBjYWlyb190cmFuc2xhdGUoc2hhZG93
Q29udGV4dCwgLXJlY3QueCgpICsgcmFkaXVzLCAtcmVjdC55KCkgKyByYWRpdXMpOworICAgICAg
ICBjYWlyb19uZXdfcGF0aChzaGFkb3dDb250ZXh0KTsKKyAgICAgICAgY2Fpcm9fYXBwZW5kX3Bh
dGgoc2hhZG93Q29udGV4dCwgcGF0aCk7CisKKyAgICAgICAgc2V0UGxhdGZvcm1GaWxsKGNvbnRl
eHQsIHNoYWRvd0NvbnRleHQsIGdjcCk7CisKKyAgICAgICAgY29udGV4dC0+YXBwbHlQbGF0Zm9y
bVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwg
cmFkaXVzKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgT3duUHRyPEltYWdlQnVm
ZmVyPiBzbWFsbEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc21hbGxCdWZmZXJTaXplKTsK
KworICAgIEludFJlY3Qgc21hbGxSZWN0ID0gSW50UmVjdChyYWRpdXMsIHJhZGl1cywgc21hbGxC
dWZmZXJTaXplLndpZHRoKCkgLSByYWRpdXNUd2ljZSwgc21hbGxCdWZmZXJTaXplLmhlaWdodCgp
IC0gcmFkaXVzVHdpY2UpOworCisgICAgLy8gRHJhdyBzaGFkb3cgaW50byBhIG5ldyBJbWFnZUJ1
ZmZlci4KKyAgICBjYWlyb190KiBzbWFsbEJ1ZmZlckNvbnRleHQgPSBzbWFsbEJ1ZmZlci0+Y29u
dGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBjb3B5Q29udGV4dFByb3BlcnRpZXMoY3Is
IHNtYWxsQnVmZmVyQ29udGV4dCk7CisgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4
dChzbWFsbEJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwgUGF0aDo6Y3JlYXRl
Um91bmRlZFJlY3RhbmdsZShzbWFsbFJlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVz
LCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cykpOworICAgIHNldFBsYXRmb3Jt
RmlsbChjb250ZXh0LCBzbWFsbEJ1ZmZlckNvbnRleHQsIGdjcCk7CisKKyAgICBPd25QdHI8SW1h
Z2VCdWZmZXI+IHNoYWRvd0J1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc21hbGxCdWZmZXJT
aXplKTsKKworICAgIHNtYWxsUmVjdC5zZXRTaXplKHNtYWxsQnVmZmVyU2l6ZSk7CisKKyAgICBP
d25QdHI8SW1hZ2VCdWZmZXI+IGFscGhhU2hhZG93QnVmZmVyID0gY29udGV4dC0+Y3JlYXRlUGxh
dGZvcm1TaGFkb3coc21hbGxCdWZmZXIucmVsZWFzZSgpLCBzbWFsbFJlY3QsIHJhZGl1cyk7CisK
KyAgICAvLyBObyBzaGFkb3cKKyAgICBpZiAoIWFscGhhU2hhZG93QnVmZmVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBzaGFkb3dSZWN0LmluZmxhdGUoLXJhZGl1c1R3aWNlKTsKKyAgICBmaWxs
UmVjdFNvdXJjZU92ZXIoY3IsIHNoYWRvd1JlY3QsIHNoYWRvd0NvbG9yKTsKKyAgICBzaGFkb3dS
ZWN0LmluZmxhdGUocmFkaXVzVHdpY2UpOworCisgICAgY2Fpcm9fdCogc2hhZG93Q29udGV4dCA9
IHNoYWRvd0J1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBzZXRDb2xv
cihzaGFkb3dDb250ZXh0LCBzaGFkb3dDb2xvcik7CisgICAgY2Fpcm9fbWFza19zdXJmYWNlKHNo
YWRvd0NvbnRleHQsIGFscGhhU2hhZG93QnVmZmVyLT5tX2RhdGEubV9zdXJmYWNlLCAwLCAwKTsK
KworICAgIC8vIHRvcCBzaWRlCisgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gRmxvYXRSZWN0KHJh
ZGl1c1R3aWNlICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCAwLCB0aWxlV2lkdGgsIHJhZGl1c1R3
aWNlKTsKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5t
b3ZlKHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgZGVzdFJlY3Quc2V0V2lk
dGgoc2hhZG93UmVjdC53aWR0aCgpIC0gdG9wTGVmdFJhZGl1cy53aWR0aCgpIC0gdG9wUmlnaHRS
YWRpdXMud2lkdGgoKSAtIHJhZGl1cyAqIDQpOworICAgIEZsb2F0UG9pbnQgcGhhc2UgPSBnZXRQ
aGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJh
bnNmb3JtOworICAgIHBhdHRlcm5UcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgc2hhZG93
QnVmZmVyLT5kcmF3UGF0dGVybihjb250ZXh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3Np
dGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAgICAvLyBib3R0b20gc2lkZQorICAgIHRpbGVS
ZWN0ID0gRmxvYXRSZWN0KHJhZGl1c1R3aWNlICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpLCBz
bWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgLSByYWRpdXNUd2ljZSwgdGlsZVdpZHRoLCByYWRpdXNU
d2ljZSk7CisgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRv
d1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSArIHJhZGl1c1R3aWNlICsgcmVjdC5oZWlnaHQoKSAt
IHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSk7CisgICAgZGVzdFJlY3Quc2V0V2lkdGgoc2hhZG93
UmVjdC53aWR0aCgpIC0gYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpIC0gYm90dG9tUmlnaHRSYWRp
dXMud2lkdGgoKSAtIHJhZGl1cyAqIDQpOworICAgIHBoYXNlID0gZ2V0UGhhc2UoZGVzdFJlY3Qs
IHRpbGVSZWN0KTsKKyAgICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHRpbGVS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhh
c2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsKKworICAgIC8v
IHJpZ2h0IHNpZGUKKyAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdChzbWFsbEJ1ZmZlclNpemUud2lk
dGgoKSAtIHJhZGl1c1R3aWNlLCByYWRpdXNUd2ljZSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgp
LCByYWRpdXNUd2ljZSwgdGlsZVdpZHRoKTsKKyAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OworICAg
IGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCkgKyByYWRpdXNUd2ljZSArIHJlY3Qud2lkdGgo
KSAtIHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgZGVzdFJl
Y3Quc2V0SGVpZ2h0KHNoYWRvd1JlY3QuaGVpZ2h0KCkgLSB0b3BSaWdodFJhZGl1cy5oZWlnaHQo
KSAtIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpIC0gcmFkaXVzICogNCk7CisgICAgcGhhc2Ug
PSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIHNoYWRvd0J1ZmZlci0+ZHJhd1Bh
dHRlcm4oY29udGV4dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwaGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3Zlciwg
ZGVzdFJlY3QpOworCisgICAgLy8gbGVmdCBzaWRlCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3Qo
MCwgcmFkaXVzVHdpY2UgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpLCByYWRpdXNUd2ljZSwgdGls
ZVdpZHRoKTsKKyAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OworICAgIGRlc3RSZWN0Lm1vdmUoc2hh
ZG93UmVjdC54KCksIHNoYWRvd1JlY3QueSgpKTsKKyAgICBkZXN0UmVjdC5zZXRIZWlnaHQoc2hh
ZG93UmVjdC5oZWlnaHQoKSAtIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpIC0gYm90dG9tUmlnaHRS
YWRpdXMuaGVpZ2h0KCkgLSByYWRpdXMgKiA0KTsKKyAgICBwaGFzZSA9IEZsb2F0UG9pbnQoZGVz
dFJlY3QueCgpIC0gdGlsZVJlY3QueCgpLCBkZXN0UmVjdC55KCkgLSB0aWxlUmVjdC55KCkpOwor
ICAgIHNoYWRvd0J1ZmZlci0+ZHJhd1BhdHRlcm4oY29udGV4dCwgdGlsZVJlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSwgY29sb3JTcGFj
ZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAgLy8gdG9wIGxlZnQgY29y
bmVyCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3QoMCwgMCwgcmFkaXVzVHdpY2UgKyB0b3BMZWZ0
UmFkaXVzLndpZHRoKCksIHJhZGl1c1R3aWNlICsgdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSk7Cisg
ICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgp
LCBzaGFkb3dSZWN0LnkoKSk7CisgICAgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJl
Y3QpOworICAgIHNoYWRvd0J1ZmZlci0+ZHJhd1BhdHRlcm4oY29udGV4dCwgdGlsZVJlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSwgY29s
b3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAgLy8gdG9wIHJp
Z2h0IGNvcm5lcgorICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KHNtYWxsQnVmZmVyU2l6ZS53aWR0
aCgpIC0gcmFkaXVzVHdpY2UgLSB0b3BSaWdodFJhZGl1cy53aWR0aCgpLCAwLCByYWRpdXNUd2lj
ZSArIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCksIHJhZGl1c1R3aWNlICsgdG9wUmlnaHRSYWRpdXMu
aGVpZ2h0KCkpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShz
aGFkb3dSZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgpICsg
cmFkaXVzVHdpY2UsIHNoYWRvd1JlY3QueSgpKTsKKyAgICBwaGFzZSA9IGdldFBoYXNlKGRlc3RS
ZWN0LCB0aWxlUmVjdCk7CisgICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0dGVybihjb250ZXh0LCB0
aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAg
ICAvLyBib3R0b20gcmlnaHQgY29ybmVyCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3Qoc21hbGxC
dWZmZXJTaXplLndpZHRoKCkgLSByYWRpdXNUd2ljZSAtIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRo
KCksIHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSAtIHJhZGl1c1R3aWNlIC0gYm90dG9tUmlnaHRS
YWRpdXMuaGVpZ2h0KCksIHJhZGl1c1R3aWNlICsgYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSwg
cmFkaXVzVHdpY2UgKyBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSk7CisgICAgZGVzdFJlY3Qg
PSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpICsgcmVjdC53aWR0
aCgpIC0gc21hbGxCdWZmZXJTaXplLndpZHRoKCkgKyByYWRpdXNUd2ljZSwgc2hhZG93UmVjdC55
KCkgKyByZWN0LmhlaWdodCgpIC0gc21hbGxCdWZmZXJTaXplLmhlaWdodCgpICsgcmFkaXVzVHdp
Y2UpOworICAgIHBoYXNlID0gZ2V0UGhhc2UoZGVzdFJlY3QsIHRpbGVSZWN0KTsKKyAgICBzaGFk
b3dCdWZmZXItPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2UsIGNvbG9yU3BhY2UsIENvbXBv
c2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsKKworICAgIC8vIGJvdHRvbSBsZWZ0IGNvcm5lcgor
ICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KDAsIHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSAtIHJh
ZGl1c1R3aWNlIC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCksIHJhZGl1c1R3aWNlICsgYm90
dG9tTGVmdFJhZGl1cy53aWR0aCgpLCByYWRpdXNUd2ljZSArIGJvdHRvbUxlZnRSYWRpdXMuaGVp
Z2h0KCkpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShzaGFk
b3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC0gc21hbGxCdWZmZXJT
aXplLmhlaWdodCgpICsgcmFkaXVzVHdpY2UpOworICAgIHBoYXNlID0gZ2V0UGhhc2UoZGVzdFJl
Y3QsIHRpbGVSZWN0KTsKKyAgICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGhhc2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsKKworI2Vu
ZGlmCit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50
UmVjdCYgciwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQs
IGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0LCBj
b25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQpAQCAtMTIyNyw3ICsxNDIwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByLCBjb25zdCBJbnRTaXplJiB0b3BM
ZWZ0LAogICAgIGNhaXJvX3NhdmUoY3IpOwogICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0Nv
bnRleHQoY3IsIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUociwgdG9wTGVmdCwgdG9wUmln
aHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CiAgICAgc2V0Q29sb3IoY3IsIGNvbG9yKTsK
LSAgICBkcmF3UGF0aFNoYWRvdyh0aGlzLCBtX2NvbW1vbiwgdHJ1ZSwgZmFsc2UpOworICAgIGRy
YXdGYXN0U2hhZG93KHRoaXMsIG1fY29tbW9uLCByLCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9t
TGVmdCwgYm90dG9tUmlnaHQsIGNvbG9yU3BhY2UpOwogICAgIGNhaXJvX2ZpbGwoY3IpOwogICAg
IGNhaXJvX3Jlc3RvcmUoY3IpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VDYWlyby5jcHAKaW5kZXggM2IwMmFkOC4uOTA0ZTgxOSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCkBAIC0xNTMsNyArMTUzLDcg
QEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG8KICAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKHNoYWRv
d0NvbnRleHQsIDAsIDAsIGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSk7CiAgICAg
ICAgIGNhaXJvX2ZpbGwoc2hhZG93Q29udGV4dCk7CiAKLSAgICAgICAgY29udGV4dC0+Y3JlYXRl
UGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRv
d1JlY3QsIHJhZGl1cyk7CisgICAgICAgIGNvbnRleHQtPmFwcGx5UGxhdGZvcm1TaGFkb3coc2hh
ZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cyk7CiAg
ICAgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaAppbmRleCAzYjhiNWEzLi5iYjQzMjhiIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC02NSw2ICs2NSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAvLyBUaGUgcmVzdWx0IGlzIGJvdW5kZWQg
YnkgdGhlIHNpemUgb2YgdGhlIGZpbHRlciBwcmltaXRpdmUgdG8gc2F2ZSByZXNvdXJjZXMKICAg
ICAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlKCkgeyByZXR1cm4gbV9lZmZlY3RCdWZmZXIu
Z2V0KCk7IH0KKyAgICAgICAgUGFzc093blB0cjxJbWFnZUJ1ZmZlcio+IHJlbGVhc2VSZXN1bHRJ
bWFnZSgpIHsgcmV0dXJuIG1fZWZmZWN0QnVmZmVyLnJlbGVhc2UoKTsgfQogICAgICAgICB2b2lk
IHNldEVmZmVjdEJ1ZmZlcihQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBlZmZlY3RCdWZmZXIpIHsg
bV9lZmZlY3RCdWZmZXIgPSBlZmZlY3RCdWZmZXI7IH0KIAogICAgICAgICBGbG9hdFJlY3QgY2Fs
Y3VsYXRlVW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqLCBGaWx0ZXJFZmZlY3Qq
LCBGaWx0ZXJFZmZlY3QqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66044</attachid>
            <date>2010-08-31 06:36:05 -0700</date>
            <delta_ts>2010-08-31 09:03:42 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>tiling_shadow.patch</filename>
            <type>text/plain</type>
            <size>19569</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IGQ1MDZmNTUxZDIwYWM1MDE3NmM4OTMyNzQxN2Q1ZTQyNTIyN2Q4NjcKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgVHVlIEF1ZyAzMSAx
MjoyMDo0MSAyMDEwICswMjAwCgogICAgMjAxMC0wOC0zMCAgQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KICAgIAogICAgICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KICAgIAogICAgICAgICAgICBbR3RrXSB2ZXJ5IHNsb3cgcGFnZSBzY3JvbGxpbmcgb24g
YmlnIC13ZWJraXQtYm94LXNoYWRvdyBhcmVhcwogICAgICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk1ODIKICAgIAogICAgICAgICAgICBBZGQgYSBuZXcg
ZHJhd0Zhc3RTaGFkb3cgbWV0aG9kIHRvIHJlbmRlciBhIGJpZyBzaGFkb3cgZG9pbmcKICAgICAg
ICAgICAgdGlsaW5nIG9mIHBhcnRzIG9mIGEgc21hbGxlciBzaGFkb3cuIFdlIGNyZWF0ZSB0aGUg
bWluaW11bSBzaGFkb3cKICAgICAgICAgICAgcmVxdWlyZWQgdG8gZ2V0IHRoZSB0aWxlcyB3ZSB3
aWxsIHVzZSB0byByZW5kZXIgdGhlIHJlYWwgc2hhZG93CiAgICAgICAgICAgIGFuZCB3ZSB1c2Ug
ZHJhd1BhdHRlcm4gd2l0aCB0aG9zZSB0aWxlcyB0byBjcmVhdGUgdGhlIHNoYWRvdy4KICAgIAog
ICAgICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgogICAgICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHA6CiAgICAgICAgICAg
IChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKICAgICAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CiAgICAgICAgICAgIChXZWJDb3Jl
OjpkcmF3UGF0aFNoYWRvdyk6CiAgICAgICAgICAgIChXZWJDb3JlOjpkcmF3Qm9yZGVybGVzc1Jl
Y3RTaGFkb3cpOgogICAgICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseVBs
YXRmb3JtU2hhZG93KToKICAgICAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3Jl
YXRlUGxhdGZvcm1TaGFkb3cpOgogICAgICAgICAgICAoV2ViQ29yZTo6Z2V0UGhhc2UpOgogICAg
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRTaGFkb3cpOgogICAg
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgogICAg
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwOgogICAgICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgogICAgICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CiAgICAgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnJlbGVhc2VSZXN1bHRJbWFnZSk6CgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5YzBiYjYxLi4yMDNlYjY3IDEwMDY0
NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDMxIEBACisyMDEwLTA4LTMwICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtH
dGtdIHZlcnkgc2xvdyBwYWdlIHNjcm9sbGluZyBvbiBiaWcgLXdlYmtpdC1ib3gtc2hhZG93IGFy
ZWFzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTU4
MgorCisgICAgICAgIEFkZCBhIG5ldyBkcmF3RmFzdFNoYWRvdyBtZXRob2QgdG8gcmVuZGVyIGEg
YmlnIHNoYWRvdyBkb2luZworICAgICAgICB0aWxpbmcgb2YgcGFydHMgb2YgYSBzbWFsbGVyIHNo
YWRvdy4gV2UgY3JlYXRlIHRoZSBtaW5pbXVtIHNoYWRvdworICAgICAgICByZXF1aXJlZCB0byBn
ZXQgdGhlIHRpbGVzIHdlIHdpbGwgdXNlIHRvIHJlbmRlciB0aGUgcmVhbCBzaGFkb3cKKyAgICAg
ICAgYW5kIHdlIHVzZSBkcmF3UGF0dGVybiB3aXRoIHRob3NlIHRpbGVzIHRvIGNyZWF0ZSB0aGUg
c2hhZG93LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRy
YXdQYXRoU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdCb3JkZXJsZXNzUmVjdFNoYWRv
dyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5UGxhdGZvcm1TaGFk
b3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjcmVhdGVQbGF0Zm9ybVNo
YWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQaGFzZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdGYXN0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpk
cmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5o
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZWxlYXNlUmVzdWx0SW1hZ2UpOgor
CiAyMDEwLTA4LTMxICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKaW5kZXggOTNlZjg5MC4uOWNlMmJmZSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC00MCw2ICs0MCw3IEBACiAjaWYgUExB
VEZPUk0oQ0cpCiB0eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQ7CiAjZWxpZiBQTEFURk9STShDQUlSTykKKyNpbmNsdWRlICJQbGF0Zm9ybVJlZlB0ckNhaXJv
LmgiCiB0eXBlZGVmIHN0cnVjdCBfY2Fpcm8gUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7CiAjZWxp
ZiBQTEFURk9STShPUEVOVkcpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yOTcsNyArMjk4LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldEFscGhhKGZsb2F0KTsKICNp
ZiBQTEFURk9STShDQUlSTykKICAgICAgICAgZmxvYXQgZ2V0QWxwaGEoKTsKLSAgICAgICAgdm9p
ZCBjcmVhdGVQbGF0Zm9ybVNoYWRvdyhQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIsIGNv
bnN0IENvbG9yJiBzaGFkb3dDb2xvciwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBmbG9h
dCByYWRpdXMpOworICAgICAgICB2b2lkIGFwcGx5UGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJ
bWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0
UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQgcmFkaXVzKTsKKyAgICAgICAgUGxhdGZvcm1SZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiBjcmVhdGVTaGFkb3dNYXNrKFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+
LCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCByYWRpdXMpOworCiAgICAgICAgIHN0YXRpYyB2b2lk
IGNhbGN1bGF0ZVNoYWRvd0J1ZmZlckRpbWVuc2lvbnMoSW50U2l6ZSYgc2hhZG93QnVmZmVyU2l6
ZSwgRmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBmbG9hdCYgcmFkaXVzLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dC
bHVyKTsKICNlbmRpZgogCkBAIC00NDQsNiArNDQ3LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBtX2NvbW1vbjsKICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGE7IC8vIERlcHJlY2F0ZWQ7IG1fY29t
bW1vbiBjYW4ganVzdCBiZSBkb3duY2FzdGVkLiBUbyBiZSByZW1vdmVkLgorCisjaWYgUExBVEZP
Uk0oQ0FJUk8pCisgICAgICAgIHZvaWQgZHJhd1RpbGVkU2hhZG93KGNvbnN0IEludFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiB0b3BS
aWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBGbG9h
dFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpOworI2VuZGlm
CisKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKaW5kZXggNWJmYTNmYi4uY2Q1ZDM2MiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcApAQCAtMTEz
LDcgKzExMyw3IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zCiAgICAgICAgICAgICBjYWlyb19y
ZXN0b3JlKHNoYWRvd0NyKTsKICAgICAgICAgfQogICAgICAgICBjYWlyb190cmFuc2xhdGUoY3Is
IDAuMCwgLWV4dGVudHMuaGVpZ2h0KTsKLSAgICAgICAgY29udGV4dC0+Y3JlYXRlUGxhdGZvcm1T
aGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJh
ZGl1cyk7CisgICAgICAgIGNvbnRleHQtPmFwcGx5UGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVy
LnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cyk7CiAjZWxzZQogICAg
ICAgICBjYWlyb190cmFuc2xhdGUoY3IsIHNoYWRvd09mZnNldC53aWR0aCgpLCBzaGFkb3dPZmZz
ZXQuaGVpZ2h0KCkpOwogICAgICAgICBjYWlyb19zaG93X2dseXBocyhjciwgZ2x5cGhzLCBudW1H
bHlwaHMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRleCA2ODNjMTQ0Li43ZTg2YTg1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAj
aW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVJlZlB0ckNhaXJvLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJT
b3VyY2VHcmFwaGljLmgiCiAKQEAgLTIyOCw3ICsyMjksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
ZHJhd1BhdGhTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRQ
cml2YQogICAgIGlmIChzdHJva2VTaGFkb3cpCiAgICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlKGNv
bnRleHQsIHNoYWRvd0NvbnRleHQsIGdjcCk7CiAKLSAgICBjb250ZXh0LT5jcmVhdGVQbGF0Zm9y
bVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwg
cmFkaXVzKTsKKyAgICBjb250ZXh0LT5hcHBseVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5y
ZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOwogI2VuZGlmCiB9CiAK
QEAgLTY0MCw3ICs2NDEsNyBAQCBzdGF0aWMgdm9pZCBkcmF3Qm9yZGVybGVzc1JlY3RTaGFkb3co
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmCiAgICAgR3JhcGhpY3ND
b250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93QnVmZmVyLT5jb250ZXh0KCk7CiAgICAgc2hh
ZG93Q29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQocmFkaXVzLCByYWRpdXMp
LCByZWN0LnNpemUoKSksIHJlY3RDb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7CiAKLSAgICBjb250
ZXh0LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dD
b2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKKyAgICBjb250ZXh0LT5hcHBseVBsYXRmb3JtU2hh
ZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRp
dXMpOwogI2VuZGlmCiB9CiAKQEAgLTkyMSwyMCArOTIyLDI1IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhGbG9hdFNpemUgY29uc3QmIHNpemUsIGZsb2F0LCBDb2xv
ciBjb25zCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUGxhdGZvcm1T
aGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBDb2xvciYgc2hhZG93
Q29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQgcmFkaXVzKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFwcGx5UGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZl
cj4gYnVmZmVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgc2hh
ZG93UmVjdCwgZmxvYXQgcmFkaXVzKQogewogI2lmIEVOQUJMRShGSUxURVJTKQotICAgIGNhaXJv
X3QqIGNyID0gbV9kYXRhLT5jcjsKKyAgICBzZXRDb2xvcihtX2RhdGEtPmNyLCBzaGFkb3dDb2xv
cik7CisgICAgUGxhdGZvcm1SZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzaGFkb3dNYXNrKGNyZWF0
ZVNoYWRvd01hc2soYnVmZmVyLCBzaGFkb3dSZWN0LCByYWRpdXMpKTsKKyAgICBjYWlyb19tYXNr
X3N1cmZhY2UobV9kYXRhLT5jciwgc2hhZG93TWFzay5nZXQoKSwgc2hhZG93UmVjdC54KCksIHNo
YWRvd1JlY3QueSgpKTsKKyNlbmRpZgorfQogCi0gICAgLy8gY2FsY3VsYXRlIHRoZSBzdGFuZGFy
ZCBkZXZpYXRpb24KLSAgICBmbG9hdCBzZCA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVTdGRE
ZXZpYXRpb24ocmFkaXVzKTsKK1BsYXRmb3JtUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gR3JhcGhp
Y3NDb250ZXh0OjpjcmVhdGVTaGFkb3dNYXNrKFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZl
ciwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBmbG9hdCByYWRpdXMpCit7CisjaWYgRU5B
QkxFKEZJTFRFUlMpCisgICAgaWYgKCFyYWRpdXMpCisgICAgICAgIHJldHVybiBidWZmZXItPm1f
ZGF0YS5tX3N1cmZhY2U7CiAKLSAgICAvLyBkcmF3IHRoZSBzaGFkb3cgd2l0aG91dCBibHVycmlu
ZywgaWYgcmFkaXVzIGlzIHplcm8KLSAgICBpZiAoIXJhZGl1cyB8fCAhc2QpIHsKLSAgICAgICAg
c2V0Q29sb3IoY3IsIHNoYWRvd0NvbG9yKTsKLSAgICAgICAgY2Fpcm9fbWFza19zdXJmYWNlKGNy
LCBidWZmZXItPm1fZGF0YS5tX3N1cmZhY2UsIHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0Lnko
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgRmxvYXRQb2ludCBibHVyUmFkaXVzID0g
RmxvYXRQb2ludChyYWRpdXMsIHJhZGl1cyk7CisgICAgZmxvYXQgc2QgPSBGRUdhdXNzaWFuQmx1
cjo6Y2FsY3VsYXRlU3RkRGV2aWF0aW9uKHJhZGl1cyk7CisgICAgaWYgKCFzZCkKKyAgICAgICAg
cmV0dXJuIGJ1ZmZlci0+bV9kYXRhLm1fc3VyZmFjZTsKIAogICAgIC8vIGNyZWF0ZSBmaWx0ZXIK
ICAgICBSZWZQdHI8RmlsdGVyPiBmaWx0ZXIgPSBJbWFnZUJ1ZmZlckZpbHRlcjo6Y3JlYXRlKCk7
CkBAIC05NDUsMTQgKzk1MSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUGxhdGZv
cm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdAogICAgIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGJsdXIgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHNvdXJjZS5nZXQo
KSwgc2QsIHNkKTsKICAgICBibHVyLT5zZXRTY2FsZWRTdWJSZWdpb24oRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgc2hhZG93UmVjdC5zaXplKCkpKTsKICAgICBibHVyLT5hcHBseShmaWx0ZXIuZ2V0
KCkpOwotCi0gICAgLy8gTWFzayB0aGUgZmlsdGVyIHdpdGggdGhlIHNoYWRvdyBjb2xvciBhbmQg
ZHJhdyBpdCB0byB0aGUgY29udGV4dC4KLSAgICAvLyBNYXNraW5nIG1ha2VzIGl0IHBvc3NpYmxl
IHRvIGp1c3QgYmx1ciB0aGUgYWxwaGEgY2hhbm5lbC4KLSAgICBzZXRDb2xvcihjciwgc2hhZG93
Q29sb3IpOwotICAgIGNhaXJvX21hc2tfc3VyZmFjZShjciwgYmx1ci0+cmVzdWx0SW1hZ2UoKS0+
bV9kYXRhLm1fc3VyZmFjZSwgc2hhZG93UmVjdC54KCksIHNoYWRvd1JlY3QueSgpKTsKKyAgICBy
ZXR1cm4gYmx1ci0+cmVzdWx0SW1hZ2UoKS0+bV9kYXRhLm1fc3VyZmFjZTsKICNlbmRpZgogfQog
CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKIHsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwpAQCAtMTIxOCw2ICsxMjIxLDE5MCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcE91dEVsbGlwc2VJblJlY3QoY29uc3QgSW50UmVjdCYgcikKICAgICBjbGlwT3V0
KHApOwogfQogCitzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgZ2V0UGhhc2UoY29uc3QgRmxvYXRS
ZWN0JiBkZXN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGUpCit7CisgICAgRmxvYXRQb2ludCBwaGFz
ZSA9IGRlc3QubG9jYXRpb24oKTsKKyAgICBwaGFzZS5tb3ZlKC10aWxlLngoKSwgLXRpbGUueSgp
KTsKKworICAgIHJldHVybiBwaGFzZTsKK30KKworLyoKKyAgVGhpcyBmdW5jdGlvbiB1c2VzIHRp
bGluZyB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgc2hhZG93CisgIGRyYXdpbmcg
b2Ygcm91bmRlZCByZWN0YW5nbGVzLiBUaGUgY29kZSBiYXNpY2FsbHkgZG9lcyB0aGUgZm9sbG93
aW5nCisgIHN0ZXBzOgorCisgICAgIDEuIENhbGN1bGF0ZSB0aGUgbWluaW11bSByZWN0YW5nbGUg
c2l6ZSByZXF1aXJlZCB0byBjcmVhdGUgdGhlCisgICAgIHRpbGVzCisKKyAgICAgMi4gSWYgdGhh
dCBzaXplIGlzIHNtYWxsZXIgdGhhbiB0aGUgcmVhbCByZWN0YW5nbGUgcmVuZGVyIHRoZSBuZXcK
KyAgICAgc21hbGwgcmVjdGFuZ2xlIGFuZCBpdHMgc2hhZG93LCBpbiBvdGhlciBjYXNlIHJlbmRl
ciB0aGUgc2hhZG93CisgICAgIG9mIHRoZSByZWFsIHJlY3RhbmdsZS4KKworICAgICAzLiBDYWxj
dWxhdGUgdGhlIHNpemVzIGFuZCBwb3NpdGlvbnMgb2YgdGhlIHRpbGVzIGFuZCB0aGVpcgorICAg
ICBkZXN0aW5hdGlvbnMgYW5kIHVzZSBkcmF3UGF0dGVybiB0byByZW5kZXIgdGhlIGZpbmFsIHNo
YWRvdy4gVGhlCisgICAgIGNvZGUgZGl2aWRlcyB0aGUgcmVuZGVyaW5nIGluIDggdGlsZXM6CisK
KyAgICAgICAgMSB8IDIgfCAzCisgICAgICAgLS0tLS0tLS0tLS0KKyAgICAgICAgNCB8ICAgfCA1
CisgICAgICAgLS0tLS0tLS0tLS0KKyAgICAgICAgNiB8IDcgfCA4CisKKyAgICAgVGhlIGNvcm5l
cnMgYXJlIGRpcmVjdGx5IGNvcGllZCBmcm9tIHRoZSBzbWFsbCByZWN0YW5nbGUgdG8gdGhlCisg
ICAgIHJlYWwgb25lIGFuZCB0aGUgc2lkZSB0aWxlcyBhcmUgMSBwaXhlbCB3aWR0aCwgd2UgdXNl
IHRoZW0gYXMKKyAgICAgdGlsZXMgdG8gY292ZXIgdGhlIGRlc3RpbmF0aW9uIHNpZGUuIFRoZSBj
b3JuZXIgdGlsZXMgYXJlIGJpZ2dlcgorICAgICB0aGFuIGp1c3QgdGhlIHNpZGUgb2YgdGhlIHJv
dW5kZWQgY29ybmVyLCB3ZSBuZWVkIHRvIGluY3JlYXNlIGl0CisgICAgIGJlY2F1c2UgdGhlIG1v
ZGlmaWNhdGlvbnMgY2F1c2VkIGJ5IHRoZSBjb3JuZXIgb3ZlciB0aGUgYmx1cgorICAgICBlZmZl
Y3QuCisgKi8KK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRTaGFkb3coY29uc3QgSW50
UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNp
emUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNv
bnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkK
K3sKKyNpZiBFTkFCTEUoRklMVEVSUykKKyAgICBGbG9hdFNpemUgc2hhZG93U2l6ZTsKKyAgICBm
bG9hdCBzaGFkb3dCbHVyOworICAgIENvbG9yIHNoYWRvd0NvbG9yOworICAgIGlmICghZ2V0U2hh
ZG93KHNoYWRvd1NpemUsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gQ2FsY3VsYXRlIGZpbHRlciB2YWx1ZXMgdG8gY3JlYXRlIGFwcHJvcHJpYXRl
IHNoYWRvdy4KKyAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dCgpOworICAgIGNhaXJv
X3BhdGhfdCogcGF0aCA9IGNhaXJvX2NvcHlfcGF0aChjcik7CisKKyAgICBJbnRTaXplIHNoYWRv
d0J1ZmZlclNpemU7CisgICAgRmxvYXRSZWN0IHNoYWRvd1JlY3Q7CisgICAgZmxvYXQgcmFkaXVz
ID0gMDsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNhbGN1bGF0ZVNoYWRvd0J1ZmZlckRpbWVuc2lv
bnMoc2hhZG93QnVmZmVyU2l6ZSwgc2hhZG93UmVjdCwgcmFkaXVzLCByZWN0LCBzaGFkb3dTaXpl
LCBzaGFkb3dCbHVyKTsKKworICAgIC8vIHNpemUgb2YgdGhlIHRpbGluZyBmb3IgdGhlIHNpZGVz
CisgICAgaW50IHRpbGVXaWR0aCA9IDE7CisgICAgZmxvYXQgcmFkaXVzVHdpY2UgPSByYWRpdXMg
KiAyOworICAgIGludCBzaGFkb3dTaWRlID0gcmFkaXVzVHdpY2UgKyB0aWxlV2lkdGg7CisgICAg
SW50U2l6ZSBzbWFsbEJ1ZmZlclNpemU7CisKKyAgICBzbWFsbEJ1ZmZlclNpemUuc2V0V2lkdGgo
cmFkaXVzVHdpY2UgKyBtYXgodG9wTGVmdFJhZGl1cy53aWR0aCgpLCBib3R0b21MZWZ0UmFkaXVz
LndpZHRoKCkpICsgc2hhZG93U2lkZSArIG1heCh0b3BSaWdodFJhZGl1cy53aWR0aCgpLCBib3R0
b21SaWdodFJhZGl1cy53aWR0aCgpKSk7CisgICAgc21hbGxCdWZmZXJTaXplLnNldEhlaWdodChy
YWRpdXNUd2ljZSArIG1heCh0b3BMZWZ0UmFkaXVzLmhlaWdodCgpLCB0b3BSaWdodFJhZGl1cy5o
ZWlnaHQoKSkgKyBzaGFkb3dTaWRlICsgbWF4KGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCksIGJv
dHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpKSk7CisKKyAgICBpZiAoKHNtYWxsQnVmZmVyU2l6ZS53
aWR0aCgpID4gc2hhZG93QnVmZmVyU2l6ZS53aWR0aCgpKSB8fCAoc21hbGxCdWZmZXJTaXplLmhl
aWdodCgpID4gc2hhZG93QnVmZmVyU2l6ZS5oZWlnaHQoKSkgfHwgKHJhZGl1cyA8PSAwKSkgewor
ICAgICAgICAvLyBDcmVhdGUgc3VpdGFibHktc2l6ZWQgSW1hZ2VCdWZmZXIgdG8gaG9sZCB0aGUg
c2hhZG93LgorICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNoYWRvd0J1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoc2hhZG93QnVmZmVyU2l6ZSk7CisKKyAgICAgICAgLy8gRHJhdyBzaGFk
b3cgaW50byBhIG5ldyBJbWFnZUJ1ZmZlci4KKyAgICAgICAgY2Fpcm9fdCogc2hhZG93Q29udGV4
dCA9IHNoYWRvd0J1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICAgICAg
Y29weUNvbnRleHRQcm9wZXJ0aWVzKGNyLCBzaGFkb3dDb250ZXh0KTsKKyAgICAgICAgY2Fpcm9f
dHJhbnNsYXRlKHNoYWRvd0NvbnRleHQsIC1yZWN0LngoKSArIHJhZGl1cywgLXJlY3QueSgpICsg
cmFkaXVzKTsKKyAgICAgICAgY2Fpcm9fbmV3X3BhdGgoc2hhZG93Q29udGV4dCk7CisgICAgICAg
IGNhaXJvX2FwcGVuZF9wYXRoKHNoYWRvd0NvbnRleHQsIHBhdGgpOworCisgICAgICAgIHNldFBs
YXRmb3JtRmlsbCh0aGlzLCBzaGFkb3dDb250ZXh0LCBtX2NvbW1vbik7CisKKyAgICAgICAgYXBw
bHlQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hh
ZG93UmVjdCwgcmFkaXVzKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgT3duUHRy
PEltYWdlQnVmZmVyPiBzbWFsbEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc21hbGxCdWZm
ZXJTaXplKTsKKworICAgIEludFJlY3Qgc21hbGxSZWN0ID0gSW50UmVjdChyYWRpdXMsIHJhZGl1
cywgc21hbGxCdWZmZXJTaXplLndpZHRoKCkgLSByYWRpdXNUd2ljZSwgc21hbGxCdWZmZXJTaXpl
LmhlaWdodCgpIC0gcmFkaXVzVHdpY2UpOworCisgICAgLy8gRHJhdyBzaGFkb3cgaW50byBhIG5l
dyBJbWFnZUJ1ZmZlci4KKyAgICBjYWlyb190KiBzbWFsbEJ1ZmZlckNvbnRleHQgPSBzbWFsbEJ1
ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBjb3B5Q29udGV4dFByb3Bl
cnRpZXMoY3IsIHNtYWxsQnVmZmVyQ29udGV4dCk7CisgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0Nh
aXJvQ29udGV4dChzbWFsbEJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwgUGF0
aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShzbWFsbFJlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJp
Z2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cykpOworICAgIHNl
dFBsYXRmb3JtRmlsbCh0aGlzLCBzbWFsbEJ1ZmZlckNvbnRleHQsIG1fY29tbW9uKTsKKworICAg
IE93blB0cjxJbWFnZUJ1ZmZlcj4gc2hhZG93QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
bWFsbEJ1ZmZlclNpemUpOworCisgICAgc21hbGxSZWN0LnNldFNpemUoc21hbGxCdWZmZXJTaXpl
KTsKKworICAgIFBsYXRmb3JtUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc2hhZG93TWFzayhjcmVh
dGVTaGFkb3dNYXNrKHNtYWxsQnVmZmVyLnJlbGVhc2UoKSwgc21hbGxSZWN0LCByYWRpdXMpKTsK
KworICAgIC8vIEZpbGwgdGhlIGludGVybmFsIHBhcnQgb2YgdGhlIHNoYWRvdy4KKyAgICBzaGFk
b3dSZWN0LmluZmxhdGUoLXJhZGl1c1R3aWNlKTsKKyAgICBjYWlyb19zYXZlKGNyKTsKKyAgICBh
cHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVj
dGFuZ2xlKHNoYWRvd1JlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21M
ZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cykpOworICAgIHNldENvbG9yKGNyLCBzaGFkb3dD
b2xvcik7CisgICAgY2Fpcm9fZmlsbChjcik7CisgICAgY2Fpcm9fcmVzdG9yZShjcik7CisgICAg
c2hhZG93UmVjdC5pbmZsYXRlKHJhZGl1c1R3aWNlKTsKKworICAgIGNhaXJvX3QqIHNoYWRvd0Nv
bnRleHQgPSBzaGFkb3dCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAg
c2V0Q29sb3Ioc2hhZG93Q29udGV4dCwgc2hhZG93Q29sb3IpOworICAgIGNhaXJvX21hc2tfc3Vy
ZmFjZShzaGFkb3dDb250ZXh0LCBzaGFkb3dNYXNrLmdldCgpLCAwLCAwKTsKKworICAgIC8vIHRv
cCBzaWRlCisgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gRmxvYXRSZWN0KHJhZGl1c1R3aWNlICsg
dG9wTGVmdFJhZGl1cy53aWR0aCgpLCAwLCB0aWxlV2lkdGgsIHJhZGl1c1R3aWNlKTsKKyAgICBG
bG9hdFJlY3QgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1Jl
Y3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgZGVzdFJlY3Quc2V0V2lkdGgoc2hhZG93UmVj
dC53aWR0aCgpIC0gdG9wTGVmdFJhZGl1cy53aWR0aCgpIC0gdG9wUmlnaHRSYWRpdXMud2lkdGgo
KSAtIHJhZGl1cyAqIDQpOworICAgIEZsb2F0UG9pbnQgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVj
dCwgdGlsZVJlY3QpOworICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtOworICAg
IHBhdHRlcm5UcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgc2hhZG93QnVmZmVyLT5kcmF3
UGF0dGVybih0aGlzLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBk
ZXN0UmVjdCk7CisKKyAgICAvLyBib3R0b20gc2lkZQorICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0
KHJhZGl1c1R3aWNlICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpLCBzbWFsbEJ1ZmZlclNpemUu
aGVpZ2h0KCkgLSByYWRpdXNUd2ljZSwgdGlsZVdpZHRoLCByYWRpdXNUd2ljZSk7CisgICAgZGVz
dFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpLCBzaGFk
b3dSZWN0LnkoKSArIHJhZGl1c1R3aWNlICsgcmVjdC5oZWlnaHQoKSAtIHNtYWxsQnVmZmVyU2l6
ZS5oZWlnaHQoKSk7CisgICAgZGVzdFJlY3Quc2V0V2lkdGgoc2hhZG93UmVjdC53aWR0aCgpIC0g
Ym90dG9tTGVmdFJhZGl1cy53aWR0aCgpIC0gYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSAtIHJh
ZGl1cyAqIDQpOworICAgIHBoYXNlID0gZ2V0UGhhc2UoZGVzdFJlY3QsIHRpbGVSZWN0KTsKKyAg
ICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKHRoaXMsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2UsIGNvbG9yU3BhY2UsIENv
bXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsKKworICAgIC8vIHJpZ2h0IHNpZGUKKyAgICB0
aWxlUmVjdCA9IEZsb2F0UmVjdChzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSAtIHJhZGl1c1R3aWNl
LCByYWRpdXNUd2ljZSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpLCByYWRpdXNUd2ljZSwgdGls
ZVdpZHRoKTsKKyAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OworICAgIGRlc3RSZWN0Lm1vdmUoc2hh
ZG93UmVjdC54KCkgKyByYWRpdXNUd2ljZSArIHJlY3Qud2lkdGgoKSAtIHNtYWxsQnVmZmVyU2l6
ZS53aWR0aCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgZGVzdFJlY3Quc2V0SGVpZ2h0KHNoYWRv
d1JlY3QuaGVpZ2h0KCkgLSB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSAtIGJvdHRvbVJpZ2h0UmFk
aXVzLmhlaWdodCgpIC0gcmFkaXVzICogNCk7CisgICAgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVj
dCwgdGlsZVJlY3QpOworICAgIHNoYWRvd0J1ZmZlci0+ZHJhd1BhdHRlcm4odGhpcywgdGlsZVJl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFz
ZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAgLy8g
bGVmdCBzaWRlCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3QoMCwgcmFkaXVzVHdpY2UgKyB0b3BM
ZWZ0UmFkaXVzLmhlaWdodCgpLCByYWRpdXNUd2ljZSwgdGlsZVdpZHRoKTsKKyAgICBkZXN0UmVj
dCA9IHRpbGVSZWN0OworICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCksIHNoYWRvd1Jl
Y3QueSgpKTsKKyAgICBkZXN0UmVjdC5zZXRIZWlnaHQoc2hhZG93UmVjdC5oZWlnaHQoKSAtIHRv
cExlZnRSYWRpdXMuaGVpZ2h0KCkgLSBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpIC0gcmFkaXVz
ICogNCk7CisgICAgcGhhc2UgPSBGbG9hdFBvaW50KGRlc3RSZWN0LngoKSAtIHRpbGVSZWN0Lngo
KSwgZGVzdFJlY3QueSgpIC0gdGlsZVJlY3QueSgpKTsKKyAgICBzaGFkb3dCdWZmZXItPmRyYXdQ
YXR0ZXJuKHRoaXMsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGhhc2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRl
c3RSZWN0KTsKKworICAgIC8vIHRvcCBsZWZ0IGNvcm5lcgorICAgIHRpbGVSZWN0ID0gRmxvYXRS
ZWN0KDAsIDAsIHJhZGl1c1R3aWNlICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCByYWRpdXNUd2lj
ZSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7Cisg
ICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkpOworICAgIHBo
YXNlID0gZ2V0UGhhc2UoZGVzdFJlY3QsIHRpbGVSZWN0KTsKKyAgICBzaGFkb3dCdWZmZXItPmRy
YXdQYXR0ZXJuKHRoaXMsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGhhc2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIs
IGRlc3RSZWN0KTsKKworICAgIC8vIHRvcCByaWdodCBjb3JuZXIKKyAgICB0aWxlUmVjdCA9IEZs
b2F0UmVjdChzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSAtIHJhZGl1c1R3aWNlIC0gdG9wUmlnaHRS
YWRpdXMud2lkdGgoKSwgMCwgcmFkaXVzVHdpY2UgKyB0b3BSaWdodFJhZGl1cy53aWR0aCgpLCBy
YWRpdXNUd2ljZSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpKTsKKyAgICBkZXN0UmVjdCA9IHRp
bGVSZWN0OworICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCkgKyByZWN0LndpZHRoKCkg
LSBzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSArIHJhZGl1c1R3aWNlLCBzaGFkb3dSZWN0LnkoKSk7
CisgICAgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIHNoYWRvd0J1
ZmZlci0+ZHJhd1BhdHRlcm4odGhpcywgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291
cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAgLy8gYm90dG9tIHJpZ2h0IGNvcm5lcgorICAgIHRp
bGVSZWN0ID0gRmxvYXRSZWN0KHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgpIC0gcmFkaXVzVHdpY2Ug
LSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpLCBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgLSBy
YWRpdXNUd2ljZSAtIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpLCByYWRpdXNUd2ljZSArIGJv
dHRvbVJpZ2h0UmFkaXVzLndpZHRoKCksIHJhZGl1c1R3aWNlICsgYm90dG9tUmlnaHRSYWRpdXMu
aGVpZ2h0KCkpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShz
aGFkb3dSZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgpICsg
cmFkaXVzVHdpY2UsIHNoYWRvd1JlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAtIHNtYWxsQnVmZmVy
U2l6ZS5oZWlnaHQoKSArIHJhZGl1c1R3aWNlKTsKKyAgICBwaGFzZSA9IGdldFBoYXNlKGRlc3RS
ZWN0LCB0aWxlUmVjdCk7CisgICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0dGVybih0aGlzLCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBo
YXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAgICAv
LyBib3R0b20gbGVmdCBjb3JuZXIKKyAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCgwLCBzbWFsbEJ1
ZmZlclNpemUuaGVpZ2h0KCkgLSByYWRpdXNUd2ljZSAtIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0
KCksIHJhZGl1c1R3aWNlICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpLCByYWRpdXNUd2ljZSAr
IGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7Cisg
ICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkgKyByZWN0Lmhl
aWdodCgpIC0gc21hbGxCdWZmZXJTaXplLmhlaWdodCgpICsgcmFkaXVzVHdpY2UpOworICAgIHBo
YXNlID0gZ2V0UGhhc2UoZGVzdFJlY3QsIHRpbGVSZWN0KTsKKyAgICBzaGFkb3dCdWZmZXItPmRy
YXdQYXR0ZXJuKHRoaXMsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGhhc2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIs
IGRlc3RSZWN0KTsKKworI2VuZGlmCit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91
bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgciwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3Qg
SW50U2l6ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNp
emUmIGJvdHRvbVJpZ2h0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtMTIyNyw3ICsxNDE0LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByLCBj
b25zdCBJbnRTaXplJiB0b3BMZWZ0LAogICAgIGNhaXJvX3NhdmUoY3IpOwogICAgIGFwcGVuZFdl
YkNvcmVQYXRoVG9DYWlyb0NvbnRleHQoY3IsIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUo
ciwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CiAgICAgc2V0
Q29sb3IoY3IsIGNvbG9yKTsKLSAgICBkcmF3UGF0aFNoYWRvdyh0aGlzLCBtX2NvbW1vbiwgdHJ1
ZSwgZmFsc2UpOworICAgIGRyYXdUaWxlZFNoYWRvdyhyLCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90
dG9tTGVmdCwgYm90dG9tUmlnaHQsIGNvbG9yU3BhY2UpOwogICAgIGNhaXJvX2ZpbGwoY3IpOwog
ICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VDYWlyby5jcHAKaW5kZXggM2IwMmFkOC4uOTA0ZTgxOSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCkBAIC0xNTMsNyArMTUz
LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG8KICAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKHNo
YWRvd0NvbnRleHQsIDAsIDAsIGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSk7CiAg
ICAgICAgIGNhaXJvX2ZpbGwoc2hhZG93Q29udGV4dCk7CiAKLSAgICAgICAgY29udGV4dC0+Y3Jl
YXRlUGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNo
YWRvd1JlY3QsIHJhZGl1cyk7CisgICAgICAgIGNvbnRleHQtPmFwcGx5UGxhdGZvcm1TaGFkb3co
c2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cyk7
CiAgICAgfQogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66059</attachid>
            <date>2010-08-31 09:03:42 -0700</date>
            <delta_ts>2010-08-31 09:09:18 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>tiling_shadow.patch</filename>
            <type>text/plain</type>
            <size>19325</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IGE3NzQ5NGQwMjAwNjVlMmFkMjE3ZGE2MWEzNjY3Mjc1MTFkYmI0MzcKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgVHVlIEF1ZyAzMSAx
MjoyMDo0MSAyMDEwICswMjAwCgogICAgMjAxMC0wOC0zMCAgQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KICAgIAogICAgICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KICAgIAogICAgICAgICAgICBbR3RrXSB2ZXJ5IHNsb3cgcGFnZSBzY3JvbGxpbmcgb24g
YmlnIC13ZWJraXQtYm94LXNoYWRvdyBhcmVhcwogICAgICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk1ODIKICAgIAogICAgICAgICAgICBBZGQgYSBuZXcg
ZHJhd0Zhc3RTaGFkb3cgbWV0aG9kIHRvIHJlbmRlciBhIGJpZyBzaGFkb3cgZG9pbmcKICAgICAg
ICAgICAgdGlsaW5nIG9mIHBhcnRzIG9mIGEgc21hbGxlciBzaGFkb3cuIFdlIGNyZWF0ZSB0aGUg
bWluaW11bSBzaGFkb3cKICAgICAgICAgICAgcmVxdWlyZWQgdG8gZ2V0IHRoZSB0aWxlcyB3ZSB3
aWxsIHVzZSB0byByZW5kZXIgdGhlIHJlYWwgc2hhZG93CiAgICAgICAgICAgIGFuZCB3ZSB1c2Ug
ZHJhd1BhdHRlcm4gd2l0aCB0aG9zZSB0aWxlcyB0byBjcmVhdGUgdGhlIHNoYWRvdy4KICAgIAog
ICAgICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgogICAgICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHA6CiAgICAgICAgICAg
IChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKICAgICAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CiAgICAgICAgICAgIChXZWJDb3Jl
OjpkcmF3UGF0aFNoYWRvdyk6CiAgICAgICAgICAgIChXZWJDb3JlOjpkcmF3Qm9yZGVybGVzc1Jl
Y3RTaGFkb3cpOgogICAgICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseVBs
YXRmb3JtU2hhZG93KToKICAgICAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3Jl
YXRlU2hhZG93TWFzayk6CiAgICAgICAgICAgIChXZWJDb3JlOjpnZXRQaGFzZSk6CiAgICAgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZFNoYWRvdyk6CiAgICAgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CiAgICAgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHA6CiAgICAgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5YzBiYjYxLi4yYzNjNzMzIDEwMDY0NAot
LS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI5IEBACisyMDEwLTA4LTMwICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHdGtd
IHZlcnkgc2xvdyBwYWdlIHNjcm9sbGluZyBvbiBiaWcgLXdlYmtpdC1ib3gtc2hhZG93IGFyZWFz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTU4Mgor
CisgICAgICAgIEFkZCBhIG5ldyBkcmF3RmFzdFNoYWRvdyBtZXRob2QgdG8gcmVuZGVyIGEgYmln
IHNoYWRvdyBkb2luZworICAgICAgICB0aWxpbmcgb2YgcGFydHMgb2YgYSBzbWFsbGVyIHNoYWRv
dy4gV2UgY3JlYXRlIHRoZSBtaW5pbXVtIHNoYWRvdworICAgICAgICByZXF1aXJlZCB0byBnZXQg
dGhlIHRpbGVzIHdlIHdpbGwgdXNlIHRvIHJlbmRlciB0aGUgcmVhbCBzaGFkb3cKKyAgICAgICAg
YW5kIHdlIHVzZSBkcmF3UGF0dGVybiB3aXRoIHRob3NlIHRpbGVzIHRvIGNyZWF0ZSB0aGUgc2hh
ZG93LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdQ
YXRoU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdCb3JkZXJsZXNzUmVjdFNoYWRvdyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5UGxhdGZvcm1TaGFkb3cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjcmVhdGVTaGFkb3dNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OmdldFBoYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd1RpbGVkU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToK
KwogMjAxMC0wOC0zMSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCmluZGV4IDkzZWY4OTAuLjljZTJiZmUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtNDAsNiArNDAsNyBAQAogI2lmIFBM
QVRGT1JNKENHKQogdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0IFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0OwogI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisjaW5jbHVkZSAiUGxhdGZvcm1SZWZQdHJDYWly
by5oIgogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwogI2Vs
aWYgUExBVEZPUk0oT1BFTlZHKQogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjk3LDcgKzI5OCw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRBbHBoYShmbG9hdCk7CiAj
aWYgUExBVEZPUk0oQ0FJUk8pCiAgICAgICAgIGZsb2F0IGdldEFscGhhKCk7Ci0gICAgICAgIHZv
aWQgY3JlYXRlUGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBj
b25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxv
YXQgcmFkaXVzKTsKKyAgICAgICAgdm9pZCBhcHBseVBsYXRmb3JtU2hhZG93KFBhc3NPd25QdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBjb25zdCBGbG9h
dFJlY3QmIHNoYWRvd1JlY3QsIGZsb2F0IHJhZGl1cyk7CisgICAgICAgIFBsYXRmb3JtUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gY3JlYXRlU2hhZG93TWFzayhQYXNzT3duUHRyPEltYWdlQnVmZmVy
PiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgcmFkaXVzKTsKKwogICAgICAgICBzdGF0aWMgdm9p
ZCBjYWxjdWxhdGVTaGFkb3dCdWZmZXJEaW1lbnNpb25zKEludFNpemUmIHNoYWRvd0J1ZmZlclNp
emUsIEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQmIHJhZGl1cywgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNldCwgZmxvYXQgc2hhZG93
Qmx1cik7CiAjZW5kaWYKIApAQCAtNDQ0LDYgKzQ0NywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogbV9jb21tb247CiAgICAgICAgIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogbV9kYXRhOyAvLyBEZXByZWNhdGVkOyBtX2Nv
bW1tb24gY2FuIGp1c3QgYmUgZG93bmNhc3RlZC4gVG8gYmUgcmVtb3ZlZC4KKworI2lmIFBMQVRG
T1JNKENBSVJPKQorICAgICAgICB2b2lkIGRyYXdUaWxlZFNoYWRvdyhjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9w
UmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxv
YXRTaXplJiBib3R0b21SaWdodFJhZGl1cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKTsKKyNlbmRp
ZgorCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCmluZGV4IDViZmEzZmIuLmNkNWQzNjIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKQEAgLTEx
Myw3ICsxMTMsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29ucwogICAgICAgICAgICAgY2Fpcm9f
cmVzdG9yZShzaGFkb3dDcik7CiAgICAgICAgIH0KICAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKGNy
LCAwLjAsIC1leHRlbnRzLmhlaWdodCk7Ci0gICAgICAgIGNvbnRleHQtPmNyZWF0ZVBsYXRmb3Jt
U2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCBy
YWRpdXMpOworICAgICAgICBjb250ZXh0LT5hcHBseVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZl
ci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOwogI2Vsc2UKICAg
ICAgICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCBzaGFkb3dPZmZzZXQud2lkdGgoKSwgc2hhZG93T2Zm
c2V0LmhlaWdodCgpKTsKICAgICAgICAgY2Fpcm9fc2hvd19nbHlwaHMoY3IsIGdseXBocywgbnVt
R2x5cGhzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggNjgzYzE0NC4uOTNiNTc5OSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5jcHAKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
I2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1SZWZQdHJDYWlyby5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAi
U291cmNlR3JhcGhpYy5oIgogCkBAIC0yMjgsNyArMjI5LDcgQEAgc3RhdGljIGlubGluZSB2b2lk
IGRyYXdQYXRoU2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgR3JhcGhpY3NDb250ZXh0
UHJpdmEKICAgICBpZiAoc3Ryb2tlU2hhZG93KQogICAgICAgICBzZXRQbGF0Zm9ybVN0cm9rZShj
b250ZXh0LCBzaGFkb3dDb250ZXh0LCBnY3ApOwogCi0gICAgY29udGV4dC0+Y3JlYXRlUGxhdGZv
cm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3Qs
IHJhZGl1cyk7CisgICAgY29udGV4dC0+YXBwbHlQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIu
cmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKICNlbmRpZgogfQog
CkBAIC02NDAsNyArNjQxLDcgQEAgc3RhdGljIHZvaWQgZHJhd0JvcmRlcmxlc3NSZWN0U2hhZG93
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JgogICAgIEdyYXBoaWNz
Q29udGV4dCogc2hhZG93Q29udGV4dCA9IHNoYWRvd0J1ZmZlci0+Y29udGV4dCgpOwogICAgIHNo
YWRvd0NvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KHJhZGl1cywgcmFkaXVz
KSwgcmVjdC5zaXplKCkpLCByZWN0Q29sb3IsIERldmljZUNvbG9yU3BhY2UpOwogCi0gICAgY29u
dGV4dC0+Y3JlYXRlUGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93
Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cyk7CisgICAgY29udGV4dC0+YXBwbHlQbGF0Zm9ybVNo
YWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFk
aXVzKTsKICNlbmRpZgogfQogCkBAIC05MjEsMjAgKzkyMiwyNSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coRmxvYXRTaXplIGNvbnN0JiBzaXplLCBmbG9hdCwgQ29s
b3IgY29ucwogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVBsYXRmb3Jt
U2hhZG93KFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QgQ29sb3ImIHNoYWRv
d0NvbG9yLCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd1JlY3QsIGZsb2F0IHJhZGl1cykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjphcHBseVBsYXRmb3JtU2hhZG93KFBhc3NPd25QdHI8SW1hZ2VCdWZm
ZXI+IGJ1ZmZlciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBjb25zdCBGbG9hdFJlY3QmIHNo
YWRvd1JlY3QsIGZsb2F0IHJhZGl1cykKIHsKICNpZiBFTkFCTEUoRklMVEVSUykKLSAgICBjYWly
b190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgc2V0Q29sb3IobV9kYXRhLT5jciwgc2hhZG93Q29s
b3IpOworICAgIFBsYXRmb3JtUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc2hhZG93TWFzayhjcmVh
dGVTaGFkb3dNYXNrKGJ1ZmZlciwgc2hhZG93UmVjdCwgcmFkaXVzKSk7CisgICAgY2Fpcm9fbWFz
a19zdXJmYWNlKG1fZGF0YS0+Y3IsIHNoYWRvd01hc2suZ2V0KCksIHNoYWRvd1JlY3QueCgpLCBz
aGFkb3dSZWN0LnkoKSk7CisjZW5kaWYKK30KIAotICAgIC8vIGNhbGN1bGF0ZSB0aGUgc3RhbmRh
cmQgZGV2aWF0aW9uCi0gICAgZmxvYXQgc2QgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlU3Rk
RGV2aWF0aW9uKHJhZGl1cyk7CitQbGF0Zm9ybVJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEdyYXBo
aWNzQ29udGV4dDo6Y3JlYXRlU2hhZG93TWFzayhQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBidWZm
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQgcmFkaXVzKQoreworI2lmIEVO
QUJMRShGSUxURVJTKQorICAgIGlmICghcmFkaXVzKQorICAgICAgICByZXR1cm4gYnVmZmVyLT5t
X2RhdGEubV9zdXJmYWNlOwogCi0gICAgLy8gZHJhdyB0aGUgc2hhZG93IHdpdGhvdXQgYmx1cnJp
bmcsIGlmIHJhZGl1cyBpcyB6ZXJvCi0gICAgaWYgKCFyYWRpdXMgfHwgIXNkKSB7Ci0gICAgICAg
IHNldENvbG9yKGNyLCBzaGFkb3dDb2xvcik7Ci0gICAgICAgIGNhaXJvX21hc2tfc3VyZmFjZShj
ciwgYnVmZmVyLT5tX2RhdGEubV9zdXJmYWNlLCBzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55
KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEZsb2F0UG9pbnQgYmx1clJhZGl1cyA9
IEZsb2F0UG9pbnQocmFkaXVzLCByYWRpdXMpOworICAgIGZsb2F0IHNkID0gRkVHYXVzc2lhbkJs
dXI6OmNhbGN1bGF0ZVN0ZERldmlhdGlvbihyYWRpdXMpOworICAgIGlmICghc2QpCisgICAgICAg
IHJldHVybiBidWZmZXItPm1fZGF0YS5tX3N1cmZhY2U7CiAKICAgICAvLyBjcmVhdGUgZmlsdGVy
CiAgICAgUmVmUHRyPEZpbHRlcj4gZmlsdGVyID0gSW1hZ2VCdWZmZXJGaWx0ZXI6OmNyZWF0ZSgp
OwpAQCAtOTQ1LDE0ICs5NTEsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVBsYXRm
b3JtU2hhZG93KFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QKICAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBibHVyID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzb3VyY2UuZ2V0
KCksIHNkLCBzZCk7CiAgICAgYmx1ci0+c2V0U2NhbGVkU3ViUmVnaW9uKEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIHNoYWRvd1JlY3Quc2l6ZSgpKSk7CiAgICAgYmx1ci0+YXBwbHkoZmlsdGVyLmdl
dCgpKTsKLQotICAgIC8vIE1hc2sgdGhlIGZpbHRlciB3aXRoIHRoZSBzaGFkb3cgY29sb3IgYW5k
IGRyYXcgaXQgdG8gdGhlIGNvbnRleHQuCi0gICAgLy8gTWFza2luZyBtYWtlcyBpdCBwb3NzaWJs
ZSB0byBqdXN0IGJsdXIgdGhlIGFscGhhIGNoYW5uZWwuCi0gICAgc2V0Q29sb3IoY3IsIHNoYWRv
d0NvbG9yKTsKLSAgICBjYWlyb19tYXNrX3N1cmZhY2UoY3IsIGJsdXItPnJlc3VsdEltYWdlKCkt
Pm1fZGF0YS5tX3N1cmZhY2UsIHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAg
cmV0dXJuIGJsdXItPnJlc3VsdEltYWdlKCktPm1fZGF0YS5tX3N1cmZhY2U7CiAjZW5kaWYKIH0K
IAorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKQEAgLTEyMTgsNiArMTIyMSwxODkgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBPdXRFbGxpcHNlSW5SZWN0KGNvbnN0IEludFJlY3QmIHIpCiAgICAgY2xpcE91
dChwKTsKIH0KIAorc3RhdGljIGlubGluZSBGbG9hdFBvaW50IGdldFBoYXNlKGNvbnN0IEZsb2F0
UmVjdCYgZGVzdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlKQoreworICAgIEZsb2F0UG9pbnQgcGhh
c2UgPSBkZXN0LmxvY2F0aW9uKCk7CisgICAgcGhhc2UubW92ZSgtdGlsZS54KCksIC10aWxlLnko
KSk7CisKKyAgICByZXR1cm4gcGhhc2U7Cit9CisKKy8qCisgIFRoaXMgZnVuY3Rpb24gdXNlcyB0
aWxpbmcgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIHNoYWRvdworICBkcmF3aW5n
IG9mIHJvdW5kZWQgcmVjdGFuZ2xlcy4gVGhlIGNvZGUgYmFzaWNhbGx5IGRvZXMgdGhlIGZvbGxv
d2luZworICBzdGVwczoKKworICAgICAxLiBDYWxjdWxhdGUgdGhlIG1pbmltdW0gcmVjdGFuZ2xl
IHNpemUgcmVxdWlyZWQgdG8gY3JlYXRlIHRoZQorICAgICB0aWxlcworCisgICAgIDIuIElmIHRo
YXQgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIHJlYWwgcmVjdGFuZ2xlIHJlbmRlciB0aGUgbmV3
CisgICAgIHNtYWxsIHJlY3RhbmdsZSBhbmQgaXRzIHNoYWRvdywgaW4gb3RoZXIgY2FzZSByZW5k
ZXIgdGhlIHNoYWRvdworICAgICBvZiB0aGUgcmVhbCByZWN0YW5nbGUuCisKKyAgICAgMy4gQ2Fs
Y3VsYXRlIHRoZSBzaXplcyBhbmQgcG9zaXRpb25zIG9mIHRoZSB0aWxlcyBhbmQgdGhlaXIKKyAg
ICAgZGVzdGluYXRpb25zIGFuZCB1c2UgZHJhd1BhdHRlcm4gdG8gcmVuZGVyIHRoZSBmaW5hbCBz
aGFkb3cuIFRoZQorICAgICBjb2RlIGRpdmlkZXMgdGhlIHJlbmRlcmluZyBpbiA4IHRpbGVzOgor
CisgICAgICAgIDEgfCAyIHwgMworICAgICAgIC0tLS0tLS0tLS0tCisgICAgICAgIDQgfCAgIHwg
NQorICAgICAgIC0tLS0tLS0tLS0tCisgICAgICAgIDYgfCA3IHwgOAorCisgICAgIFRoZSBjb3Ju
ZXJzIGFyZSBkaXJlY3RseSBjb3BpZWQgZnJvbSB0aGUgc21hbGwgcmVjdGFuZ2xlIHRvIHRoZQor
ICAgICByZWFsIG9uZSBhbmQgdGhlIHNpZGUgdGlsZXMgYXJlIDEgcGl4ZWwgd2lkdGgsIHdlIHVz
ZSB0aGVtIGFzCisgICAgIHRpbGVzIHRvIGNvdmVyIHRoZSBkZXN0aW5hdGlvbiBzaWRlLiBUaGUg
Y29ybmVyIHRpbGVzIGFyZSBiaWdnZXIKKyAgICAgdGhhbiBqdXN0IHRoZSBzaWRlIG9mIHRoZSBy
b3VuZGVkIGNvcm5lciwgd2UgbmVlZCB0byBpbmNyZWFzZSBpdAorICAgICBiZWNhdXNlIHRoZSBt
b2RpZmljYXRpb25zIGNhdXNlZCBieSB0aGUgY29ybmVyIG92ZXIgdGhlIGJsdXIKKyAgICAgZWZm
ZWN0LgorICovCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkU2hhZG93KGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxvYXRT
aXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBj
b25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Up
Cit7CisjaWYgRU5BQkxFKEZJTFRFUlMpCisgICAgRmxvYXRTaXplIHNoYWRvd1NpemU7CisgICAg
ZmxvYXQgc2hhZG93Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAgICBpZiAoIWdldFNo
YWRvdyhzaGFkb3dTaXplLCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcikpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIENhbGN1bGF0ZSBmaWx0ZXIgdmFsdWVzIHRvIGNyZWF0ZSBhcHByb3ByaWF0
ZSBzaGFkb3cuCisgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIElu
dFNpemUgc2hhZG93QnVmZmVyU2l6ZTsKKyAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdDsKKyAgICBm
bG9hdCByYWRpdXMgPSAwOworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2FsY3VsYXRlU2hhZG93QnVm
ZmVyRGltZW5zaW9ucyhzaGFkb3dCdWZmZXJTaXplLCBzaGFkb3dSZWN0LCByYWRpdXMsIHJlY3Qs
IHNoYWRvd1NpemUsIHNoYWRvd0JsdXIpOworCisgICAgLy8gc2l6ZSBvZiB0aGUgdGlsaW5nIGZv
ciB0aGUgc2lkZXMKKyAgICBpbnQgdGlsZVdpZHRoID0gMTsKKyAgICBmbG9hdCByYWRpdXNUd2lj
ZSA9IHJhZGl1cyAqIDI7CisgICAgSW50U2l6ZSBzbWFsbEJ1ZmZlclNpemU7CisKKyAgICBzbWFs
bEJ1ZmZlclNpemUuc2V0V2lkdGgocmFkaXVzVHdpY2UgKyBtYXgodG9wTGVmdFJhZGl1cy53aWR0
aCgpLCBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCkpICsgdGlsZVdpZHRoICsgcmFkaXVzVHdpY2Ug
KyBtYXgodG9wUmlnaHRSYWRpdXMud2lkdGgoKSwgYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSkp
OworICAgIHNtYWxsQnVmZmVyU2l6ZS5zZXRIZWlnaHQocmFkaXVzVHdpY2UgKyBtYXgodG9wTGVm
dFJhZGl1cy5oZWlnaHQoKSwgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkpICsgdGlsZVdpZHRoICsg
cmFkaXVzVHdpY2UgKyBtYXgoYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSwgYm90dG9tUmlnaHRS
YWRpdXMuaGVpZ2h0KCkpKTsKKworICAgIGlmICgoc21hbGxCdWZmZXJTaXplLndpZHRoKCkgPiBz
aGFkb3dCdWZmZXJTaXplLndpZHRoKCkpIHx8IChzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgPiBz
aGFkb3dCdWZmZXJTaXplLmhlaWdodCgpKSB8fCAocmFkaXVzIDw9IDApKSB7CisgICAgICAgIC8v
IENyZWF0ZSBzdWl0YWJseS1zaXplZCBJbWFnZUJ1ZmZlciB0byBob2xkIHRoZSBzaGFkb3cuCisg
ICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc2hhZG93QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaGFkb3dCdWZmZXJTaXplKTsKKworICAgICAgICAvLyBEcmF3IHNoYWRvdyBpbnRvIGEg
bmV3IEltYWdlQnVmZmVyLgorICAgICAgICBjYWlyb190KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93
QnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOworICAgICAgICBjb3B5Q29udGV4
dFByb3BlcnRpZXMoY3IsIHNoYWRvd0NvbnRleHQpOworICAgICAgICBjYWlyb190cmFuc2xhdGUo
c2hhZG93Q29udGV4dCwgLXJlY3QueCgpICsgcmFkaXVzLCAtcmVjdC55KCkgKyByYWRpdXMpOwor
ICAgICAgICBjYWlyb19uZXdfcGF0aChzaGFkb3dDb250ZXh0KTsKKyAgICAgICAgY2Fpcm9fcGF0
aF90KiBwYXRoID0gY2Fpcm9fY29weV9wYXRoKGNyKTsKKyAgICAgICAgY2Fpcm9fYXBwZW5kX3Bh
dGgoc2hhZG93Q29udGV4dCwgcGF0aCk7CisKKyAgICAgICAgc2V0UGxhdGZvcm1GaWxsKHRoaXMs
IHNoYWRvd0NvbnRleHQsIG1fY29tbW9uKTsKKworICAgICAgICBhcHBseVBsYXRmb3JtU2hhZG93
KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMp
OworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNt
YWxsQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzbWFsbEJ1ZmZlclNpemUpOworCisgICAg
SW50UmVjdCBzbWFsbFJlY3QgPSBJbnRSZWN0KHJhZGl1cywgcmFkaXVzLCBzbWFsbEJ1ZmZlclNp
emUud2lkdGgoKSAtIHJhZGl1c1R3aWNlLCBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgLSByYWRp
dXNUd2ljZSk7CisKKyAgICAvLyBEcmF3IHNoYWRvdyBpbnRvIGEgbmV3IEltYWdlQnVmZmVyLgor
ICAgIGNhaXJvX3QqIHNtYWxsQnVmZmVyQ29udGV4dCA9IHNtYWxsQnVmZmVyLT5jb250ZXh0KCkt
PnBsYXRmb3JtQ29udGV4dCgpOworICAgIGNvcHlDb250ZXh0UHJvcGVydGllcyhjciwgc21hbGxC
dWZmZXJDb250ZXh0KTsKKyAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KHNtYWxs
QnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLCBQYXRoOjpjcmVhdGVSb3VuZGVk
UmVjdGFuZ2xlKHNtYWxsUmVjdCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRv
bUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7CisgICAgc2V0UGxhdGZvcm1GaWxsKHRo
aXMsIHNtYWxsQnVmZmVyQ29udGV4dCwgbV9jb21tb24pOworCisgICAgT3duUHRyPEltYWdlQnVm
ZmVyPiBzaGFkb3dCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNtYWxsQnVmZmVyU2l6ZSk7
CisKKyAgICBzbWFsbFJlY3Quc2V0U2l6ZShzbWFsbEJ1ZmZlclNpemUpOworCisgICAgUGxhdGZv
cm1SZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzaGFkb3dNYXNrKGNyZWF0ZVNoYWRvd01hc2soc21h
bGxCdWZmZXIucmVsZWFzZSgpLCBzbWFsbFJlY3QsIHJhZGl1cykpOworCisgICAgLy8gRmlsbCB0
aGUgaW50ZXJuYWwgcGFydCBvZiB0aGUgc2hhZG93LgorICAgIHNoYWRvd1JlY3QuaW5mbGF0ZSgt
cmFkaXVzVHdpY2UpOworICAgIGNhaXJvX3NhdmUoY3IpOworICAgIGFwcGVuZFdlYkNvcmVQYXRo
VG9DYWlyb0NvbnRleHQoY3IsIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoc2hhZG93UmVj
dCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRv
bVJpZ2h0UmFkaXVzKSk7CisgICAgc2V0Q29sb3IoY3IsIHNoYWRvd0NvbG9yKTsKKyAgICBjYWly
b19maWxsKGNyKTsKKyAgICBjYWlyb19yZXN0b3JlKGNyKTsKKyAgICBzaGFkb3dSZWN0LmluZmxh
dGUocmFkaXVzVHdpY2UpOworCisgICAgY2Fpcm9fdCogc2hhZG93Q29udGV4dCA9IHNoYWRvd0J1
ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBzZXRDb2xvcihzaGFkb3dD
b250ZXh0LCBzaGFkb3dDb2xvcik7CisgICAgY2Fpcm9fbWFza19zdXJmYWNlKHNoYWRvd0NvbnRl
eHQsIHNoYWRvd01hc2suZ2V0KCksIDAsIDApOworCisgICAgLy8gdG9wIHNpZGUKKyAgICBGbG9h
dFJlY3QgdGlsZVJlY3QgPSBGbG9hdFJlY3QocmFkaXVzVHdpY2UgKyB0b3BMZWZ0UmFkaXVzLndp
ZHRoKCksIDAsIHRpbGVXaWR0aCwgcmFkaXVzVHdpY2UpOworICAgIEZsb2F0UmVjdCBkZXN0UmVj
dCA9IHRpbGVSZWN0OworICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCksIHNoYWRvd1Jl
Y3QueSgpKTsKKyAgICBkZXN0UmVjdC5zZXRXaWR0aChzaGFkb3dSZWN0LndpZHRoKCkgLSB0b3BM
ZWZ0UmFkaXVzLndpZHRoKCkgLSB0b3BSaWdodFJhZGl1cy53aWR0aCgpIC0gcmFkaXVzICogNCk7
CisgICAgRmxvYXRQb2ludCBwaGFzZSA9IGdldFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7Cisg
ICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm07CisgICAgcGF0dGVyblRyYW5zZm9y
bS5tYWtlSWRlbnRpdHkoKTsKKyAgICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKHRoaXMsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGhhc2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsKKworICAg
IC8vIGJvdHRvbSBzaWRlCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3QocmFkaXVzVHdpY2UgKyBi
b3R0b21MZWZ0UmFkaXVzLndpZHRoKCksIHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSAtIHJhZGl1
c1R3aWNlLCB0aWxlV2lkdGgsIHJhZGl1c1R3aWNlKTsKKyAgICBkZXN0UmVjdCA9IHRpbGVSZWN0
OworICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCksIHNoYWRvd1JlY3QueSgpICsgcmFk
aXVzVHdpY2UgKyByZWN0LmhlaWdodCgpIC0gc21hbGxCdWZmZXJTaXplLmhlaWdodCgpKTsKKyAg
ICBkZXN0UmVjdC5zZXRXaWR0aChzaGFkb3dSZWN0LndpZHRoKCkgLSBib3R0b21MZWZ0UmFkaXVz
LndpZHRoKCkgLSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpIC0gcmFkaXVzICogNCk7CisgICAg
cGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIHNoYWRvd0J1ZmZlci0+
ZHJhd1BhdHRlcm4odGhpcywgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwaGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3Zl
ciwgZGVzdFJlY3QpOworCisgICAgLy8gcmlnaHQgc2lkZQorICAgIHRpbGVSZWN0ID0gRmxvYXRS
ZWN0KHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgpIC0gcmFkaXVzVHdpY2UsIHJhZGl1c1R3aWNlICsg
dG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCksIHJhZGl1c1R3aWNlLCB0aWxlV2lkdGgpOworICAgIGRl
c3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSArIHJh
ZGl1c1R3aWNlICsgcmVjdC53aWR0aCgpIC0gc21hbGxCdWZmZXJTaXplLndpZHRoKCksIHNoYWRv
d1JlY3QueSgpKTsKKyAgICBkZXN0UmVjdC5zZXRIZWlnaHQoc2hhZG93UmVjdC5oZWlnaHQoKSAt
IHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpIC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkgLSBy
YWRpdXMgKiA0KTsKKyAgICBwaGFzZSA9IGdldFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7Cisg
ICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0dGVybih0aGlzLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBD
b21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAgICAvLyBsZWZ0IHNpZGUKKyAgICB0
aWxlUmVjdCA9IEZsb2F0UmVjdCgwLCByYWRpdXNUd2ljZSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0
KCksIHJhZGl1c1R3aWNlLCB0aWxlV2lkdGgpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7Cisg
ICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkpOworICAgIGRl
c3RSZWN0LnNldEhlaWdodChzaGFkb3dSZWN0LmhlaWdodCgpIC0gdG9wTGVmdFJhZGl1cy5oZWln
aHQoKSAtIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkgLSByYWRpdXMgKiA0KTsKKyAgICBwaGFz
ZSA9IEZsb2F0UG9pbnQoZGVzdFJlY3QueCgpIC0gdGlsZVJlY3QueCgpLCBkZXN0UmVjdC55KCkg
LSB0aWxlUmVjdC55KCkpOworICAgIHNoYWRvd0J1ZmZlci0+ZHJhd1BhdHRlcm4odGhpcywgdGls
ZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
aGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAg
Ly8gdG9wIGxlZnQgY29ybmVyCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3QoMCwgMCwgcmFkaXVz
VHdpY2UgKyB0b3BMZWZ0UmFkaXVzLndpZHRoKCksIHJhZGl1c1R3aWNlICsgdG9wTGVmdFJhZGl1
cy5oZWlnaHQoKSk7CisgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3Zl
KHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgcGhhc2UgPSBnZXRQaGFzZShk
ZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIHNoYWRvd0J1ZmZlci0+ZHJhd1BhdHRlcm4odGhpcywg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwaGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisg
ICAgLy8gdG9wIHJpZ2h0IGNvcm5lcgorICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KHNtYWxsQnVm
ZmVyU2l6ZS53aWR0aCgpIC0gcmFkaXVzVHdpY2UgLSB0b3BSaWdodFJhZGl1cy53aWR0aCgpLCAw
LCByYWRpdXNUd2ljZSArIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCksIHJhZGl1c1R3aWNlICsgdG9w
UmlnaHRSYWRpdXMuaGVpZ2h0KCkpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVz
dFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIHNtYWxsQnVmZmVyU2l6
ZS53aWR0aCgpICsgcmFkaXVzVHdpY2UsIHNoYWRvd1JlY3QueSgpKTsKKyAgICBwaGFzZSA9IGdl
dFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7CisgICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0dGVy
bih0aGlzLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVj
dCk7CisKKyAgICAvLyBib3R0b20gcmlnaHQgY29ybmVyCisgICAgdGlsZVJlY3QgPSBGbG9hdFJl
Y3Qoc21hbGxCdWZmZXJTaXplLndpZHRoKCkgLSByYWRpdXNUd2ljZSAtIGJvdHRvbVJpZ2h0UmFk
aXVzLndpZHRoKCksIHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSAtIHJhZGl1c1R3aWNlIC0gYm90
dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCksIHJhZGl1c1R3aWNlICsgYm90dG9tUmlnaHRSYWRpdXMu
d2lkdGgoKSwgcmFkaXVzVHdpY2UgKyBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSk7CisgICAg
ZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpICsg
cmVjdC53aWR0aCgpIC0gc21hbGxCdWZmZXJTaXplLndpZHRoKCkgKyByYWRpdXNUd2ljZSwgc2hh
ZG93UmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC0gc21hbGxCdWZmZXJTaXplLmhlaWdodCgpICsg
cmFkaXVzVHdpY2UpOworICAgIHBoYXNlID0gZ2V0UGhhc2UoZGVzdFJlY3QsIHRpbGVSZWN0KTsK
KyAgICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKHRoaXMsIHRpbGVSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2UsIGNvbG9yU3BhY2Us
IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsKKworICAgIC8vIGJvdHRvbSBsZWZ0IGNv
cm5lcgorICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KDAsIHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQo
KSAtIHJhZGl1c1R3aWNlIC0gYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSwgcmFkaXVzVHdpY2Ug
KyBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCksIHJhZGl1c1R3aWNlICsgYm90dG9tTGVmdFJhZGl1
cy5oZWlnaHQoKSk7CisgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3Zl
KHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkgLSBzbWFsbEJ1
ZmZlclNpemUuaGVpZ2h0KCkgKyByYWRpdXNUd2ljZSk7CisgICAgcGhhc2UgPSBnZXRQaGFzZShk
ZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIHNoYWRvd0J1ZmZlci0+ZHJhd1BhdHRlcm4odGhpcywg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwaGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisj
ZW5kaWYKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJ
bnRSZWN0JiByLCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdo
dCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQs
IGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCkBAIC0xMjI3LDcgKzE0MTMsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEludFNpemUmIHRv
cExlZnQsCiAgICAgY2Fpcm9fc2F2ZShjcik7CiAgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJv
Q29udGV4dChjciwgUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShyLCB0b3BMZWZ0LCB0b3BS
aWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpKTsKICAgICBzZXRDb2xvcihjciwgY29sb3Ip
OwotICAgIGRyYXdQYXRoU2hhZG93KHRoaXMsIG1fY29tbW9uLCB0cnVlLCBmYWxzZSk7CisgICAg
ZHJhd1RpbGVkU2hhZG93KHIsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21S
aWdodCwgY29sb3JTcGFjZSk7CiAgICAgY2Fpcm9fZmlsbChjcik7CiAgICAgY2Fpcm9fcmVzdG9y
ZShjcik7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQ2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJv
LmNwcAppbmRleCAzYjAyYWQ4Li45MDRlODE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIEJpdG1h
cEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
c3QsIGNvbnN0IEZsbwogICAgICAgICBjYWlyb19yZWN0YW5nbGUoc2hhZG93Q29udGV4dCwgMCwg
MCwgZHN0UmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpKTsKICAgICAgICAgY2Fpcm9fZmls
bChzaGFkb3dDb250ZXh0KTsKIAotICAgICAgICBjb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVNoYWRv
dyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVz
KTsKKyAgICAgICAgY29udGV4dC0+YXBwbHlQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVs
ZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKICAgICB9CiAjZW5kaWYK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66061</attachid>
            <date>2010-08-31 09:09:18 -0700</date>
            <delta_ts>2010-08-31 16:01:22 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>tiling_shadow.patch</filename>
            <type>text/plain</type>
            <size>19360</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IGQ3OTcwNTI5ZTVkNDZlNWNlZDdhZDM5OWY5NGMwOTBkOTVkMTUyZDUKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgVHVlIEF1ZyAzMSAx
MjoyMDo0MSAyMDEwICswMjAwCgogICAgMjAxMC0wOC0zMCAgQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KICAgIAogICAgICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KICAgIAogICAgICAgICAgICBbR3RrXSB2ZXJ5IHNsb3cgcGFnZSBzY3JvbGxpbmcgb24g
YmlnIC13ZWJraXQtYm94LXNoYWRvdyBhcmVhcwogICAgICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk1ODIKICAgIAogICAgICAgICAgICBBZGQgYSBuZXcg
ZHJhd0Zhc3RTaGFkb3cgbWV0aG9kIHRvIHJlbmRlciBhIGJpZyBzaGFkb3cgZG9pbmcKICAgICAg
ICAgICAgdGlsaW5nIG9mIHBhcnRzIG9mIGEgc21hbGxlciBzaGFkb3cuIFdlIGNyZWF0ZSB0aGUg
bWluaW11bSBzaGFkb3cKICAgICAgICAgICAgcmVxdWlyZWQgdG8gZ2V0IHRoZSB0aWxlcyB3ZSB3
aWxsIHVzZSB0byByZW5kZXIgdGhlIHJlYWwgc2hhZG93CiAgICAgICAgICAgIGFuZCB3ZSB1c2Ug
ZHJhd1BhdHRlcm4gd2l0aCB0aG9zZSB0aWxlcyB0byBjcmVhdGUgdGhlIHNoYWRvdy4KICAgIAog
ICAgICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgogICAgICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHA6CiAgICAgICAgICAg
IChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKICAgICAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CiAgICAgICAgICAgIChXZWJDb3Jl
OjpkcmF3UGF0aFNoYWRvdyk6CiAgICAgICAgICAgIChXZWJDb3JlOjpkcmF3Qm9yZGVybGVzc1Jl
Y3RTaGFkb3cpOgogICAgICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseVBs
YXRmb3JtU2hhZG93KToKICAgICAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3Jl
YXRlU2hhZG93TWFzayk6CiAgICAgICAgICAgIChXZWJDb3JlOjpnZXRQaGFzZSk6CiAgICAgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZFNoYWRvdyk6CiAgICAgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CiAgICAgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHA6CiAgICAgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5YzBiYjYxLi4yYzNjNzMzIDEwMDY0NAot
LS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI5IEBACisyMDEwLTA4LTMwICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHdGtd
IHZlcnkgc2xvdyBwYWdlIHNjcm9sbGluZyBvbiBiaWcgLXdlYmtpdC1ib3gtc2hhZG93IGFyZWFz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTU4Mgor
CisgICAgICAgIEFkZCBhIG5ldyBkcmF3RmFzdFNoYWRvdyBtZXRob2QgdG8gcmVuZGVyIGEgYmln
IHNoYWRvdyBkb2luZworICAgICAgICB0aWxpbmcgb2YgcGFydHMgb2YgYSBzbWFsbGVyIHNoYWRv
dy4gV2UgY3JlYXRlIHRoZSBtaW5pbXVtIHNoYWRvdworICAgICAgICByZXF1aXJlZCB0byBnZXQg
dGhlIHRpbGVzIHdlIHdpbGwgdXNlIHRvIHJlbmRlciB0aGUgcmVhbCBzaGFkb3cKKyAgICAgICAg
YW5kIHdlIHVzZSBkcmF3UGF0dGVybiB3aXRoIHRob3NlIHRpbGVzIHRvIGNyZWF0ZSB0aGUgc2hh
ZG93LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdQ
YXRoU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdCb3JkZXJsZXNzUmVjdFNoYWRvdyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5UGxhdGZvcm1TaGFkb3cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjcmVhdGVTaGFkb3dNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OmdldFBoYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd1RpbGVkU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToK
KwogMjAxMC0wOC0zMSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCmluZGV4IDkzZWY4OTAuLjljZTJiZmUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtNDAsNiArNDAsNyBAQAogI2lmIFBM
QVRGT1JNKENHKQogdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0IFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0OwogI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisjaW5jbHVkZSAiUGxhdGZvcm1SZWZQdHJDYWly
by5oIgogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwogI2Vs
aWYgUExBVEZPUk0oT1BFTlZHKQogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjk3LDcgKzI5OCw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRBbHBoYShmbG9hdCk7CiAj
aWYgUExBVEZPUk0oQ0FJUk8pCiAgICAgICAgIGZsb2F0IGdldEFscGhhKCk7Ci0gICAgICAgIHZv
aWQgY3JlYXRlUGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBj
b25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxv
YXQgcmFkaXVzKTsKKyAgICAgICAgdm9pZCBhcHBseVBsYXRmb3JtU2hhZG93KFBhc3NPd25QdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBjb25zdCBGbG9h
dFJlY3QmIHNoYWRvd1JlY3QsIGZsb2F0IHJhZGl1cyk7CisgICAgICAgIFBsYXRmb3JtUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gY3JlYXRlU2hhZG93TWFzayhQYXNzT3duUHRyPEltYWdlQnVmZmVy
PiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgcmFkaXVzKTsKKwogICAgICAgICBzdGF0aWMgdm9p
ZCBjYWxjdWxhdGVTaGFkb3dCdWZmZXJEaW1lbnNpb25zKEludFNpemUmIHNoYWRvd0J1ZmZlclNp
emUsIEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQmIHJhZGl1cywgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNldCwgZmxvYXQgc2hhZG93
Qmx1cik7CiAjZW5kaWYKIApAQCAtNDQ0LDYgKzQ0NywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogbV9jb21tb247CiAgICAgICAgIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogbV9kYXRhOyAvLyBEZXByZWNhdGVkOyBtX2Nv
bW1tb24gY2FuIGp1c3QgYmUgZG93bmNhc3RlZC4gVG8gYmUgcmVtb3ZlZC4KKworI2lmIFBMQVRG
T1JNKENBSVJPKQorICAgICAgICB2b2lkIGRyYXdUaWxlZFNoYWRvdyhjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9w
UmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxv
YXRTaXplJiBib3R0b21SaWdodFJhZGl1cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKTsKKyNlbmRp
ZgorCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCmluZGV4IDViZmEzZmIuLmNkNWQzNjIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKQEAgLTEx
Myw3ICsxMTMsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29ucwogICAgICAgICAgICAgY2Fpcm9f
cmVzdG9yZShzaGFkb3dDcik7CiAgICAgICAgIH0KICAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKGNy
LCAwLjAsIC1leHRlbnRzLmhlaWdodCk7Ci0gICAgICAgIGNvbnRleHQtPmNyZWF0ZVBsYXRmb3Jt
U2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCBy
YWRpdXMpOworICAgICAgICBjb250ZXh0LT5hcHBseVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZl
ci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOwogI2Vsc2UKICAg
ICAgICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCBzaGFkb3dPZmZzZXQud2lkdGgoKSwgc2hhZG93T2Zm
c2V0LmhlaWdodCgpKTsKICAgICAgICAgY2Fpcm9fc2hvd19nbHlwaHMoY3IsIGdseXBocywgbnVt
R2x5cGhzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggNjgzYzE0NC4uMzBiZDFjZCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5jcHAKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
I2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1SZWZQdHJDYWlyby5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAi
U291cmNlR3JhcGhpYy5oIgogCkBAIC0yMjgsNyArMjI5LDcgQEAgc3RhdGljIGlubGluZSB2b2lk
IGRyYXdQYXRoU2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgR3JhcGhpY3NDb250ZXh0
UHJpdmEKICAgICBpZiAoc3Ryb2tlU2hhZG93KQogICAgICAgICBzZXRQbGF0Zm9ybVN0cm9rZShj
b250ZXh0LCBzaGFkb3dDb250ZXh0LCBnY3ApOwogCi0gICAgY29udGV4dC0+Y3JlYXRlUGxhdGZv
cm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3Qs
IHJhZGl1cyk7CisgICAgY29udGV4dC0+YXBwbHlQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIu
cmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKICNlbmRpZgogfQog
CkBAIC02NDAsNyArNjQxLDcgQEAgc3RhdGljIHZvaWQgZHJhd0JvcmRlcmxlc3NSZWN0U2hhZG93
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JgogICAgIEdyYXBoaWNz
Q29udGV4dCogc2hhZG93Q29udGV4dCA9IHNoYWRvd0J1ZmZlci0+Y29udGV4dCgpOwogICAgIHNo
YWRvd0NvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KHJhZGl1cywgcmFkaXVz
KSwgcmVjdC5zaXplKCkpLCByZWN0Q29sb3IsIERldmljZUNvbG9yU3BhY2UpOwogCi0gICAgY29u
dGV4dC0+Y3JlYXRlUGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93
Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cyk7CisgICAgY29udGV4dC0+YXBwbHlQbGF0Zm9ybVNo
YWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFk
aXVzKTsKICNlbmRpZgogfQogCkBAIC05MjEsMjAgKzkyMiwyNSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coRmxvYXRTaXplIGNvbnN0JiBzaXplLCBmbG9hdCwgQ29s
b3IgY29ucwogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVBsYXRmb3Jt
U2hhZG93KFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QgQ29sb3ImIHNoYWRv
d0NvbG9yLCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd1JlY3QsIGZsb2F0IHJhZGl1cykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjphcHBseVBsYXRmb3JtU2hhZG93KFBhc3NPd25QdHI8SW1hZ2VCdWZm
ZXI+IGJ1ZmZlciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBjb25zdCBGbG9hdFJlY3QmIHNo
YWRvd1JlY3QsIGZsb2F0IHJhZGl1cykKIHsKICNpZiBFTkFCTEUoRklMVEVSUykKLSAgICBjYWly
b190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgc2V0Q29sb3IobV9kYXRhLT5jciwgc2hhZG93Q29s
b3IpOworICAgIFBsYXRmb3JtUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc2hhZG93TWFzayhjcmVh
dGVTaGFkb3dNYXNrKGJ1ZmZlciwgc2hhZG93UmVjdCwgcmFkaXVzKSk7CisgICAgY2Fpcm9fbWFz
a19zdXJmYWNlKG1fZGF0YS0+Y3IsIHNoYWRvd01hc2suZ2V0KCksIHNoYWRvd1JlY3QueCgpLCBz
aGFkb3dSZWN0LnkoKSk7CisjZW5kaWYKK30KIAotICAgIC8vIGNhbGN1bGF0ZSB0aGUgc3RhbmRh
cmQgZGV2aWF0aW9uCi0gICAgZmxvYXQgc2QgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlU3Rk
RGV2aWF0aW9uKHJhZGl1cyk7CitQbGF0Zm9ybVJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEdyYXBo
aWNzQ29udGV4dDo6Y3JlYXRlU2hhZG93TWFzayhQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBidWZm
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQgcmFkaXVzKQoreworI2lmIEVO
QUJMRShGSUxURVJTKQorICAgIGlmICghcmFkaXVzKQorICAgICAgICByZXR1cm4gYnVmZmVyLT5t
X2RhdGEubV9zdXJmYWNlOwogCi0gICAgLy8gZHJhdyB0aGUgc2hhZG93IHdpdGhvdXQgYmx1cnJp
bmcsIGlmIHJhZGl1cyBpcyB6ZXJvCi0gICAgaWYgKCFyYWRpdXMgfHwgIXNkKSB7Ci0gICAgICAg
IHNldENvbG9yKGNyLCBzaGFkb3dDb2xvcik7Ci0gICAgICAgIGNhaXJvX21hc2tfc3VyZmFjZShj
ciwgYnVmZmVyLT5tX2RhdGEubV9zdXJmYWNlLCBzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55
KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEZsb2F0UG9pbnQgYmx1clJhZGl1cyA9
IEZsb2F0UG9pbnQocmFkaXVzLCByYWRpdXMpOworICAgIGZsb2F0IHNkID0gRkVHYXVzc2lhbkJs
dXI6OmNhbGN1bGF0ZVN0ZERldmlhdGlvbihyYWRpdXMpOworICAgIGlmICghc2QpCisgICAgICAg
IHJldHVybiBidWZmZXItPm1fZGF0YS5tX3N1cmZhY2U7CiAKICAgICAvLyBjcmVhdGUgZmlsdGVy
CiAgICAgUmVmUHRyPEZpbHRlcj4gZmlsdGVyID0gSW1hZ2VCdWZmZXJGaWx0ZXI6OmNyZWF0ZSgp
OwpAQCAtOTQ1LDE0ICs5NTEsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVBsYXRm
b3JtU2hhZG93KFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QKICAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBibHVyID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzb3VyY2UuZ2V0
KCksIHNkLCBzZCk7CiAgICAgYmx1ci0+c2V0U2NhbGVkU3ViUmVnaW9uKEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIHNoYWRvd1JlY3Quc2l6ZSgpKSk7CiAgICAgYmx1ci0+YXBwbHkoZmlsdGVyLmdl
dCgpKTsKLQotICAgIC8vIE1hc2sgdGhlIGZpbHRlciB3aXRoIHRoZSBzaGFkb3cgY29sb3IgYW5k
IGRyYXcgaXQgdG8gdGhlIGNvbnRleHQuCi0gICAgLy8gTWFza2luZyBtYWtlcyBpdCBwb3NzaWJs
ZSB0byBqdXN0IGJsdXIgdGhlIGFscGhhIGNoYW5uZWwuCi0gICAgc2V0Q29sb3IoY3IsIHNoYWRv
d0NvbG9yKTsKLSAgICBjYWlyb19tYXNrX3N1cmZhY2UoY3IsIGJsdXItPnJlc3VsdEltYWdlKCkt
Pm1fZGF0YS5tX3N1cmZhY2UsIHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAg
cmV0dXJuIGJsdXItPnJlc3VsdEltYWdlKCktPm1fZGF0YS5tX3N1cmZhY2U7CiAjZW5kaWYKIH0K
IAorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKQEAgLTEyMTgsNiArMTIyMSwxOTAgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBPdXRFbGxpcHNlSW5SZWN0KGNvbnN0IEludFJlY3QmIHIpCiAgICAgY2xpcE91
dChwKTsKIH0KIAorc3RhdGljIGlubGluZSBGbG9hdFBvaW50IGdldFBoYXNlKGNvbnN0IEZsb2F0
UmVjdCYgZGVzdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlKQoreworICAgIEZsb2F0UG9pbnQgcGhh
c2UgPSBkZXN0LmxvY2F0aW9uKCk7CisgICAgcGhhc2UubW92ZSgtdGlsZS54KCksIC10aWxlLnko
KSk7CisKKyAgICByZXR1cm4gcGhhc2U7Cit9CisKKy8qCisgIFRoaXMgZnVuY3Rpb24gdXNlcyB0
aWxpbmcgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIHNoYWRvdworICBkcmF3aW5n
IG9mIHJvdW5kZWQgcmVjdGFuZ2xlcy4gVGhlIGNvZGUgYmFzaWNhbGx5IGRvZXMgdGhlIGZvbGxv
d2luZworICBzdGVwczoKKworICAgICAxLiBDYWxjdWxhdGUgdGhlIG1pbmltdW0gcmVjdGFuZ2xl
IHNpemUgcmVxdWlyZWQgdG8gY3JlYXRlIHRoZQorICAgICB0aWxlcworCisgICAgIDIuIElmIHRo
YXQgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIHJlYWwgcmVjdGFuZ2xlIHJlbmRlciB0aGUgbmV3
CisgICAgIHNtYWxsIHJlY3RhbmdsZSBhbmQgaXRzIHNoYWRvdywgaW4gb3RoZXIgY2FzZSByZW5k
ZXIgdGhlIHNoYWRvdworICAgICBvZiB0aGUgcmVhbCByZWN0YW5nbGUuCisKKyAgICAgMy4gQ2Fs
Y3VsYXRlIHRoZSBzaXplcyBhbmQgcG9zaXRpb25zIG9mIHRoZSB0aWxlcyBhbmQgdGhlaXIKKyAg
ICAgZGVzdGluYXRpb25zIGFuZCB1c2UgZHJhd1BhdHRlcm4gdG8gcmVuZGVyIHRoZSBmaW5hbCBz
aGFkb3cuIFRoZQorICAgICBjb2RlIGRpdmlkZXMgdGhlIHJlbmRlcmluZyBpbiA4IHRpbGVzOgor
CisgICAgICAgIDEgfCAyIHwgMworICAgICAgIC0tLS0tLS0tLS0tCisgICAgICAgIDQgfCAgIHwg
NQorICAgICAgIC0tLS0tLS0tLS0tCisgICAgICAgIDYgfCA3IHwgOAorCisgICAgIFRoZSBjb3Ju
ZXJzIGFyZSBkaXJlY3RseSBjb3BpZWQgZnJvbSB0aGUgc21hbGwgcmVjdGFuZ2xlIHRvIHRoZQor
ICAgICByZWFsIG9uZSBhbmQgdGhlIHNpZGUgdGlsZXMgYXJlIDEgcGl4ZWwgd2lkdGgsIHdlIHVz
ZSB0aGVtIGFzCisgICAgIHRpbGVzIHRvIGNvdmVyIHRoZSBkZXN0aW5hdGlvbiBzaWRlLiBUaGUg
Y29ybmVyIHRpbGVzIGFyZSBiaWdnZXIKKyAgICAgdGhhbiBqdXN0IHRoZSBzaWRlIG9mIHRoZSBy
b3VuZGVkIGNvcm5lciwgd2UgbmVlZCB0byBpbmNyZWFzZSBpdAorICAgICBiZWNhdXNlIHRoZSBt
b2RpZmljYXRpb25zIGNhdXNlZCBieSB0aGUgY29ybmVyIG92ZXIgdGhlIGJsdXIKKyAgICAgZWZm
ZWN0LgorICovCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkU2hhZG93KGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxvYXRT
aXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBj
b25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Up
Cit7CisjaWYgRU5BQkxFKEZJTFRFUlMpCisgICAgRmxvYXRTaXplIHNoYWRvd1NpemU7CisgICAg
ZmxvYXQgc2hhZG93Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAgICBpZiAoIWdldFNo
YWRvdyhzaGFkb3dTaXplLCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcikpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIENhbGN1bGF0ZSBmaWx0ZXIgdmFsdWVzIHRvIGNyZWF0ZSBhcHByb3ByaWF0
ZSBzaGFkb3cuCisgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIElu
dFNpemUgc2hhZG93QnVmZmVyU2l6ZTsKKyAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdDsKKyAgICBm
bG9hdCByYWRpdXMgPSAwOworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2FsY3VsYXRlU2hhZG93QnVm
ZmVyRGltZW5zaW9ucyhzaGFkb3dCdWZmZXJTaXplLCBzaGFkb3dSZWN0LCByYWRpdXMsIHJlY3Qs
IHNoYWRvd1NpemUsIHNoYWRvd0JsdXIpOworCisgICAgLy8gc2l6ZSBvZiB0aGUgdGlsaW5nIGZv
ciB0aGUgc2lkZXMKKyAgICBpbnQgdGlsZVdpZHRoID0gMTsKKyAgICBmbG9hdCByYWRpdXNUd2lj
ZSA9IHJhZGl1cyAqIDI7CisgICAgSW50U2l6ZSBzbWFsbEJ1ZmZlclNpemU7CisKKyAgICBzbWFs
bEJ1ZmZlclNpemUuc2V0V2lkdGgocmFkaXVzVHdpY2UgKyBtYXgodG9wTGVmdFJhZGl1cy53aWR0
aCgpLCBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCkpICsgdGlsZVdpZHRoICsgcmFkaXVzVHdpY2Ug
KyBtYXgodG9wUmlnaHRSYWRpdXMud2lkdGgoKSwgYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSkp
OworICAgIHNtYWxsQnVmZmVyU2l6ZS5zZXRIZWlnaHQocmFkaXVzVHdpY2UgKyBtYXgodG9wTGVm
dFJhZGl1cy5oZWlnaHQoKSwgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkpICsgdGlsZVdpZHRoICsg
cmFkaXVzVHdpY2UgKyBtYXgoYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSwgYm90dG9tUmlnaHRS
YWRpdXMuaGVpZ2h0KCkpKTsKKworICAgIGlmICgoc21hbGxCdWZmZXJTaXplLndpZHRoKCkgPiBz
aGFkb3dCdWZmZXJTaXplLndpZHRoKCkpIHx8IChzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgPiBz
aGFkb3dCdWZmZXJTaXplLmhlaWdodCgpKSB8fCAocmFkaXVzIDw9IDApKSB7CisgICAgICAgIC8v
IENyZWF0ZSBzdWl0YWJseS1zaXplZCBJbWFnZUJ1ZmZlciB0byBob2xkIHRoZSBzaGFkb3cuCisg
ICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc2hhZG93QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaGFkb3dCdWZmZXJTaXplKTsKKworICAgICAgICAvLyBEcmF3IHNoYWRvdyBpbnRvIGEg
bmV3IEltYWdlQnVmZmVyLgorICAgICAgICBjYWlyb190KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93
QnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOworICAgICAgICBjb3B5Q29udGV4
dFByb3BlcnRpZXMoY3IsIHNoYWRvd0NvbnRleHQpOworICAgICAgICBjYWlyb190cmFuc2xhdGUo
c2hhZG93Q29udGV4dCwgLXJlY3QueCgpICsgcmFkaXVzLCAtcmVjdC55KCkgKyByYWRpdXMpOwor
ICAgICAgICBjYWlyb19uZXdfcGF0aChzaGFkb3dDb250ZXh0KTsKKyAgICAgICAgY2Fpcm9fcGF0
aF90KiBwYXRoID0gY2Fpcm9fY29weV9wYXRoKGNyKTsKKyAgICAgICAgY2Fpcm9fYXBwZW5kX3Bh
dGgoc2hhZG93Q29udGV4dCwgcGF0aCk7CisgICAgICAgIGNhaXJvX3BhdGhfZGVzdHJveShwYXRo
KTsKKworICAgICAgICBzZXRQbGF0Zm9ybUZpbGwodGhpcywgc2hhZG93Q29udGV4dCwgbV9jb21t
b24pOworCisgICAgICAgIGFwcGx5UGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2Uo
KSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cyk7CisKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc21hbGxCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNtYWxsQnVmZmVyU2l6ZSk7CisKKyAgICBJbnRSZWN0IHNtYWxsUmVjdCA9IElu
dFJlY3QocmFkaXVzLCByYWRpdXMsIHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgpIC0gcmFkaXVzVHdp
Y2UsIHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSAtIHJhZGl1c1R3aWNlKTsKKworICAgIC8vIERy
YXcgc2hhZG93IGludG8gYSBuZXcgSW1hZ2VCdWZmZXIuCisgICAgY2Fpcm9fdCogc21hbGxCdWZm
ZXJDb250ZXh0ID0gc21hbGxCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7Cisg
ICAgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNyLCBzbWFsbEJ1ZmZlckNvbnRleHQpOworICAgIGFw
cGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQoc21hbGxCdWZmZXItPmNvbnRleHQoKS0+cGxh
dGZvcm1Db250ZXh0KCksIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoc21hbGxSZWN0LCB0
b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmln
aHRSYWRpdXMpKTsKKyAgICBzZXRQbGF0Zm9ybUZpbGwodGhpcywgc21hbGxCdWZmZXJDb250ZXh0
LCBtX2NvbW1vbik7CisKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNoYWRvd0J1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoc21hbGxCdWZmZXJTaXplKTsKKworICAgIHNtYWxsUmVjdC5zZXRT
aXplKHNtYWxsQnVmZmVyU2l6ZSk7CisKKyAgICBQbGF0Zm9ybVJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+IHNoYWRvd01hc2soY3JlYXRlU2hhZG93TWFzayhzbWFsbEJ1ZmZlci5yZWxlYXNlKCksIHNt
YWxsUmVjdCwgcmFkaXVzKSk7CisKKyAgICAvLyBGaWxsIHRoZSBpbnRlcm5hbCBwYXJ0IG9mIHRo
ZSBzaGFkb3cuCisgICAgc2hhZG93UmVjdC5pbmZsYXRlKC1yYWRpdXNUd2ljZSk7CisgICAgY2Fp
cm9fc2F2ZShjcik7CisgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwgUGF0
aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShzaGFkb3dSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BS
aWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpKTsKKyAgICBz
ZXRDb2xvcihjciwgc2hhZG93Q29sb3IpOworICAgIGNhaXJvX2ZpbGwoY3IpOworICAgIGNhaXJv
X3Jlc3RvcmUoY3IpOworICAgIHNoYWRvd1JlY3QuaW5mbGF0ZShyYWRpdXNUd2ljZSk7CisKKyAg
ICBjYWlyb190KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93QnVmZmVyLT5jb250ZXh0KCktPnBsYXRm
b3JtQ29udGV4dCgpOworICAgIHNldENvbG9yKHNoYWRvd0NvbnRleHQsIHNoYWRvd0NvbG9yKTsK
KyAgICBjYWlyb19tYXNrX3N1cmZhY2Uoc2hhZG93Q29udGV4dCwgc2hhZG93TWFzay5nZXQoKSwg
MCwgMCk7CisKKyAgICAvLyB0b3Agc2lkZQorICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IEZsb2F0
UmVjdChyYWRpdXNUd2ljZSArIHRvcExlZnRSYWRpdXMud2lkdGgoKSwgMCwgdGlsZVdpZHRoLCBy
YWRpdXNUd2ljZSk7CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVz
dFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkpOworICAgIGRlc3RSZWN0
LnNldFdpZHRoKHNoYWRvd1JlY3Qud2lkdGgoKSAtIHRvcExlZnRSYWRpdXMud2lkdGgoKSAtIHRv
cFJpZ2h0UmFkaXVzLndpZHRoKCkgLSByYWRpdXMgKiA0KTsKKyAgICBGbG9hdFBvaW50IHBoYXNl
ID0gZ2V0UGhhc2UoZGVzdFJlY3QsIHRpbGVSZWN0KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0
dGVyblRyYW5zZm9ybTsKKyAgICBwYXR0ZXJuVHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOworICAg
IHNoYWRvd0J1ZmZlci0+ZHJhd1BhdHRlcm4odGhpcywgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSwgY29sb3JTcGFjZSwgQ29t
cG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAgLy8gYm90dG9tIHNpZGUKKyAgICB0
aWxlUmVjdCA9IEZsb2F0UmVjdChyYWRpdXNUd2ljZSArIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgo
KSwgc21hbGxCdWZmZXJTaXplLmhlaWdodCgpIC0gcmFkaXVzVHdpY2UsIHRpbGVXaWR0aCwgcmFk
aXVzVHdpY2UpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShz
aGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkgKyByYWRpdXNUd2ljZSArIHJlY3QuaGVpZ2h0
KCkgLSBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkpOworICAgIGRlc3RSZWN0LnNldFdpZHRoKHNo
YWRvd1JlY3Qud2lkdGgoKSAtIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSAtIGJvdHRvbVJpZ2h0
UmFkaXVzLndpZHRoKCkgLSByYWRpdXMgKiA0KTsKKyAgICBwaGFzZSA9IGdldFBoYXNlKGRlc3RS
ZWN0LCB0aWxlUmVjdCk7CisgICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0dGVybih0aGlzLCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBo
YXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAgICAv
LyByaWdodCBzaWRlCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3Qoc21hbGxCdWZmZXJTaXplLndp
ZHRoKCkgLSByYWRpdXNUd2ljZSwgcmFkaXVzVHdpY2UgKyB0b3BSaWdodFJhZGl1cy5oZWlnaHQo
KSwgcmFkaXVzVHdpY2UsIHRpbGVXaWR0aCk7CisgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAg
ICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpICsgcmFkaXVzVHdpY2UgKyByZWN0LndpZHRo
KCkgLSBzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSwgc2hhZG93UmVjdC55KCkpOworICAgIGRlc3RS
ZWN0LnNldEhlaWdodChzaGFkb3dSZWN0LmhlaWdodCgpIC0gdG9wUmlnaHRSYWRpdXMuaGVpZ2h0
KCkgLSBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSAtIHJhZGl1cyAqIDQpOworICAgIHBoYXNl
ID0gZ2V0UGhhc2UoZGVzdFJlY3QsIHRpbGVSZWN0KTsKKyAgICBzaGFkb3dCdWZmZXItPmRyYXdQ
YXR0ZXJuKHRoaXMsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGhhc2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRl
c3RSZWN0KTsKKworICAgIC8vIGxlZnQgc2lkZQorICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KDAs
IHJhZGl1c1R3aWNlICsgdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSwgcmFkaXVzVHdpY2UsIHRpbGVX
aWR0aCk7CisgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRv
d1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgZGVzdFJlY3Quc2V0SGVpZ2h0KHNoYWRv
d1JlY3QuaGVpZ2h0KCkgLSB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpIC0gYm90dG9tTGVmdFJhZGl1
cy5oZWlnaHQoKSAtIHJhZGl1cyAqIDQpOworICAgIHBoYXNlID0gRmxvYXRQb2ludChkZXN0UmVj
dC54KCkgLSB0aWxlUmVjdC54KCksIGRlc3RSZWN0LnkoKSAtIHRpbGVSZWN0LnkoKSk7CisgICAg
c2hhZG93QnVmZmVyLT5kcmF3UGF0dGVybih0aGlzLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBDb21w
b3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAgICAvLyB0b3AgbGVmdCBjb3JuZXIKKyAg
ICB0aWxlUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCByYWRpdXNUd2ljZSArIHRvcExlZnRSYWRpdXMu
d2lkdGgoKSwgcmFkaXVzVHdpY2UgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpKTsKKyAgICBkZXN0
UmVjdCA9IHRpbGVSZWN0OworICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCksIHNoYWRv
d1JlY3QueSgpKTsKKyAgICBwaGFzZSA9IGdldFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7Cisg
ICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0dGVybih0aGlzLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBD
b21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAgICAvLyB0b3AgcmlnaHQgY29ybmVy
CisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3Qoc21hbGxCdWZmZXJTaXplLndpZHRoKCkgLSByYWRp
dXNUd2ljZSAtIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCksIDAsIHJhZGl1c1R3aWNlICsgdG9wUmln
aHRSYWRpdXMud2lkdGgoKSwgcmFkaXVzVHdpY2UgKyB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSk7
CisgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3Qu
eCgpICsgcmVjdC53aWR0aCgpIC0gc21hbGxCdWZmZXJTaXplLndpZHRoKCkgKyByYWRpdXNUd2lj
ZSwgc2hhZG93UmVjdC55KCkpOworICAgIHBoYXNlID0gZ2V0UGhhc2UoZGVzdFJlY3QsIHRpbGVS
ZWN0KTsKKyAgICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKHRoaXMsIHRpbGVSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2UsIGNvbG9y
U3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsKKworICAgIC8vIGJvdHRvbSBy
aWdodCBjb3JuZXIKKyAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdChzbWFsbEJ1ZmZlclNpemUud2lk
dGgoKSAtIHJhZGl1c1R3aWNlIC0gYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSwgc21hbGxCdWZm
ZXJTaXplLmhlaWdodCgpIC0gcmFkaXVzVHdpY2UgLSBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQo
KSwgcmFkaXVzVHdpY2UgKyBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpLCByYWRpdXNUd2ljZSAr
IGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpKTsKKyAgICBkZXN0UmVjdCA9IHRpbGVSZWN0Owor
ICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSBzbWFsbEJ1
ZmZlclNpemUud2lkdGgoKSArIHJhZGl1c1R3aWNlLCBzaGFkb3dSZWN0LnkoKSArIHJlY3QuaGVp
Z2h0KCkgLSBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgKyByYWRpdXNUd2ljZSk7CisgICAgcGhh
c2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIHNoYWRvd0J1ZmZlci0+ZHJh
d1BhdHRlcm4odGhpcywgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwaGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3Zlciwg
ZGVzdFJlY3QpOworCisgICAgLy8gYm90dG9tIGxlZnQgY29ybmVyCisgICAgdGlsZVJlY3QgPSBG
bG9hdFJlY3QoMCwgc21hbGxCdWZmZXJTaXplLmhlaWdodCgpIC0gcmFkaXVzVHdpY2UgLSBib3R0
b21MZWZ0UmFkaXVzLmhlaWdodCgpLCByYWRpdXNUd2ljZSArIGJvdHRvbUxlZnRSYWRpdXMud2lk
dGgoKSwgcmFkaXVzVHdpY2UgKyBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpKTsKKyAgICBkZXN0
UmVjdCA9IHRpbGVSZWN0OworICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCksIHNoYWRv
d1JlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAtIHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSArIHJh
ZGl1c1R3aWNlKTsKKyAgICBwaGFzZSA9IGdldFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7Cisg
ICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0dGVybih0aGlzLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlLCBjb2xvclNwYWNlLCBD
b21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyNlbmRpZgorfQorCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEludFNp
emUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0
b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQ29sb3ImIGNvbG9yLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAg
LTEyMjcsNyArMTQxNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3Qo
Y29uc3QgSW50UmVjdCYgciwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwKICAgICBjYWlyb19zYXZl
KGNyKTsKICAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBQYXRoOjpjcmVh
dGVSb3VuZGVkUmVjdGFuZ2xlKHIsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0
b21SaWdodCkpOwogICAgIHNldENvbG9yKGNyLCBjb2xvcik7Ci0gICAgZHJhd1BhdGhTaGFkb3co
dGhpcywgbV9jb21tb24sIHRydWUsIGZhbHNlKTsKKyAgICBkcmF3VGlsZWRTaGFkb3cociwgdG9w
TGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0LCBjb2xvclNwYWNlKTsKICAg
ICBjYWlyb19maWxsKGNyKTsKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCmluZGV4IDNiMDJhZDguLjkw
NGU4MTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VD
YWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJv
LmNwcApAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvCiAgICAgICAg
IGNhaXJvX3JlY3RhbmdsZShzaGFkb3dDb250ZXh0LCAwLCAwLCBkc3RSZWN0LndpZHRoKCksIGRz
dFJlY3QuaGVpZ2h0KCkpOwogICAgICAgICBjYWlyb19maWxsKHNoYWRvd0NvbnRleHQpOwogCi0g
ICAgICAgIGNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNl
KCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOworICAgICAgICBjb250ZXh0LT5h
cHBseVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBz
aGFkb3dSZWN0LCByYWRpdXMpOwogICAgIH0KICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66129</attachid>
            <date>2010-08-31 16:01:22 -0700</date>
            <delta_ts>2010-09-01 00:53:26 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>tiling_shadow.patch</filename>
            <type>text/plain</type>
            <size>21059</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDZjZTk0YmYyNjgzZTY1Y2JhNGNkZDc0MzgxMWJmOWU4OTA3ZWM5YjcKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgVHVlIEF1ZyAzMSAx
ODoyMTo0NyAyMDEwICswMjAwCgogICAgMjAxMC0wOC0zMSAgQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KICAgIAogICAgICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KICAgIAogICAgICAgICAgICBbR3RrXSB2ZXJ5IHNsb3cgcGFnZSBzY3JvbGxpbmcgb24g
YmlnIC13ZWJraXQtYm94LXNoYWRvdyBhcmVhcwogICAgICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk1ODIKICAgIAogICAgICAgICAgICBBZGQgYSBuZXcg
ZHJhd0Zhc3RTaGFkb3cgbWV0aG9kIHRvIHJlbmRlciBhIGJpZyBzaGFkb3cgZG9pbmcKICAgICAg
ICAgICAgdGlsaW5nIG9mIHBhcnRzIG9mIGEgc21hbGxlciBzaGFkb3cuIFdlIGNyZWF0ZSB0aGUg
bWluaW11bSBzaGFkb3cKICAgICAgICAgICAgcmVxdWlyZWQgdG8gZ2V0IHRoZSB0aWxlcyB3ZSB3
aWxsIHVzZSB0byByZW5kZXIgdGhlIHJlYWwgc2hhZG93CiAgICAgICAgICAgIGFuZCB3ZSB1c2Ug
ZHJhd1BhdHRlcm4gd2l0aCB0aG9zZSB0aWxlcyB0byBjcmVhdGUgdGhlIHNoYWRvdy4KICAgIAog
ICAgICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgogICAgICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHA6CiAgICAgICAgICAg
IChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKICAgICAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CiAgICAgICAgICAgIChXZWJDb3Jl
OjpkcmF3UGF0aFNoYWRvdyk6CiAgICAgICAgICAgIChXZWJDb3JlOjpkcmF3Qm9yZGVybGVzc1Jl
Y3RTaGFkb3cpOgogICAgICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseVBs
YXRmb3JtU2hhZG93KToKICAgICAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3Jl
YXRlU2hhZG93TWFzayk6CiAgICAgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KToKICAgICAgICAgICAgKFdlYkNvcmU6OmdldFBoYXNlKToKICAgICAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkU2hhZG93KToKICAgICAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKICAgICAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcDoKICAgICAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcEltYWdlOjpkcmF3KToKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDE5NjU5NmYuLmQ3YzRlNTYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAK
KzIwMTAtMDgtMzEgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0d0a10gdmVyeSBz
bG93IHBhZ2Ugc2Nyb2xsaW5nIG9uIGJpZyAtd2Via2l0LWJveC1zaGFkb3cgYXJlYXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NTgyCisKKyAgICAg
ICAgQWRkIGEgbmV3IGRyYXdGYXN0U2hhZG93IG1ldGhvZCB0byByZW5kZXIgYSBiaWcgc2hhZG93
IGRvaW5nCisgICAgICAgIHRpbGluZyBvZiBwYXJ0cyBvZiBhIHNtYWxsZXIgc2hhZG93LiBXZSBj
cmVhdGUgdGhlIG1pbmltdW0gc2hhZG93CisgICAgICAgIHJlcXVpcmVkIHRvIGdldCB0aGUgdGls
ZXMgd2Ugd2lsbCB1c2UgdG8gcmVuZGVyIHRoZSByZWFsIHNoYWRvdworICAgICAgICBhbmQgd2Ug
dXNlIGRyYXdQYXR0ZXJuIHdpdGggdGhvc2UgdGlsZXMgdG8gY3JlYXRlIHRoZSBzaGFkb3cuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1BhdGhTaGFk
b3cpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0JvcmRlcmxlc3NSZWN0U2hhZG93KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseVBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlU2hhZG93TWFzayk6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRQaGFzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxl
ZFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVk
UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisKIDIwMTAtMDgtMzEgIEFs
ZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aAppbmRleCA5M2VmODkwLi5jYjQzZjAxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpZiBQTEFURk9STShDRykKIHR5
cGVkZWYgc3RydWN0IENHQ29udGV4dCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKICNlbGlmIFBM
QVRGT1JNKENBSVJPKQorI2luY2x1ZGUgIlBsYXRmb3JtUmVmUHRyQ2Fpcm8uaCIKIHR5cGVkZWYg
c3RydWN0IF9jYWlybyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKICNlbGlmIFBMQVRGT1JNKE9Q
RU5WRykKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI5Nyw4ICsyOTgsMTEgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldEFscGhhKGZsb2F0KTsKICNpZiBQTEFURk9STShD
QUlSTykKICAgICAgICAgZmxvYXQgZ2V0QWxwaGEoKTsKLSAgICAgICAgdm9pZCBjcmVhdGVQbGF0
Zm9ybVNoYWRvdyhQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIsIGNvbnN0IENvbG9yJiBz
aGFkb3dDb2xvciwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBmbG9hdCByYWRpdXMpOwor
ICAgICAgICB2b2lkIGFwcGx5UGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4g
YnVmZmVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93
UmVjdCwgZmxvYXQgcmFkaXVzKTsKKyAgICAgICAgUGxhdGZvcm1SZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBjcmVhdGVTaGFkb3dNYXNrKFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCByYWRpdXMpOworCiAgICAgICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVNo
YWRvd0J1ZmZlckRpbWVuc2lvbnMoSW50U2l6ZSYgc2hhZG93QnVmZmVyU2l6ZSwgRmxvYXRSZWN0
JiBzaGFkb3dSZWN0LCBmbG9hdCYgcmFkaXVzLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dCbHVyKTsKKyAgICAg
ICAgdm9pZCBkcmF3VGlsZWRTaGFkb3coY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRT
aXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25z
dCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmln
aHRSYWRpdXMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSk7CiAjZW5kaWYKIAogICAgICAgICB2b2lk
IHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcik7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKaW5kZXggNWJmYTNmYi4uY2Q1ZDM2
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8u
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcApA
QCAtMTEzLDcgKzExMyw3IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zCiAgICAgICAgICAgICBj
YWlyb19yZXN0b3JlKHNoYWRvd0NyKTsKICAgICAgICAgfQogICAgICAgICBjYWlyb190cmFuc2xh
dGUoY3IsIDAuMCwgLWV4dGVudHMuaGVpZ2h0KTsKLSAgICAgICAgY29udGV4dC0+Y3JlYXRlUGxh
dGZvcm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1Jl
Y3QsIHJhZGl1cyk7CisgICAgICAgIGNvbnRleHQtPmFwcGx5UGxhdGZvcm1TaGFkb3coc2hhZG93
QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cyk7CiAjZWxz
ZQogICAgICAgICBjYWlyb190cmFuc2xhdGUoY3IsIHNoYWRvd09mZnNldC53aWR0aCgpLCBzaGFk
b3dPZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICBjYWlyb19zaG93X2dseXBocyhjciwgZ2x5cGhz
LCBudW1HbHlwaHMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRleCA2ODNjMTQ0Li5mZjhjMWFmIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVJlZlB0ckNhaXJvLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNs
dWRlICJTb3VyY2VHcmFwaGljLmgiCiAKQEAgLTIyOCw3ICsyMjksNyBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgZHJhd1BhdGhTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0Nv
bnRleHRQcml2YQogICAgIGlmIChzdHJva2VTaGFkb3cpCiAgICAgICAgIHNldFBsYXRmb3JtU3Ry
b2tlKGNvbnRleHQsIHNoYWRvd0NvbnRleHQsIGdjcCk7CiAKLSAgICBjb250ZXh0LT5jcmVhdGVQ
bGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93
UmVjdCwgcmFkaXVzKTsKKyAgICBjb250ZXh0LT5hcHBseVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1
ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOwogI2VuZGlm
CiB9CiAKQEAgLTYyMyw2ICs2MjQsMjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHN0YXRpYyB2b2lkIGRyYXdCb3JkZXJsZXNzUmVjdFNo
YWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIHJlY3RDb2xvcikKIHsKICNpZiBFTkFCTEUoRklMVEVSUykKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNmb3JtID0gY29udGV4dC0+Z2V0Q1RNKCk7CisgICAgLy8gZHJhd1RpbGVk
U2hhZG93IHN0aWxsIGRvZXMgbm90IHdvcmsgd2l0aCByb3RhdGlvbnMKKyAgICBpZiAoKHRyYW5z
Zm9ybS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSkgeworICAgICAgICBjYWly
b190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOzsKKyAgICAgICAgY2Fpcm9fc2F2
ZShjcik7CisgICAgICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQoY3IsIFBhdGg6
OmNyZWF0ZVJlY3RhbmdsZShyZWN0KSk7CisgICAgICAgIEZsb2F0U2l6ZSBjb3JuZXIoMCwgMCk7
CisgICAgICAgIEludFJlY3Qgc2hhZG93UmVjdChyZWN0KTsKKyAgICAgICAgY29udGV4dC0+ZHJh
d1RpbGVkU2hhZG93KHNoYWRvd1JlY3QsIGNvcm5lciwgY29ybmVyLCBjb3JuZXIsIGNvcm5lciwg
RGV2aWNlQ29sb3JTcGFjZSk7CisgICAgICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwogICAgIGZsb2F0
IHNoYWRvd0JsdXI7CiAgICAgQ29sb3Igc2hhZG93Q29sb3I7CkBAIC02NDAsNyArNjU1LDcgQEAg
c3RhdGljIHZvaWQgZHJhd0JvcmRlcmxlc3NSZWN0U2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JgogICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4
dCA9IHNoYWRvd0J1ZmZlci0+Y29udGV4dCgpOwogICAgIHNoYWRvd0NvbnRleHQtPmZpbGxSZWN0
KEZsb2F0UmVjdChGbG9hdFBvaW50KHJhZGl1cywgcmFkaXVzKSwgcmVjdC5zaXplKCkpLCByZWN0
Q29sb3IsIERldmljZUNvbG9yU3BhY2UpOwogCi0gICAgY29udGV4dC0+Y3JlYXRlUGxhdGZvcm1T
aGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJh
ZGl1cyk7CisgICAgY29udGV4dC0+YXBwbHlQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVs
ZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKICNlbmRpZgogfQogCkBA
IC05MjEsMjAgKzkzNiwyNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFk
b3coRmxvYXRTaXplIGNvbnN0JiBzaXplLCBmbG9hdCwgQ29sb3IgY29ucwogICAgIH0KIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVBsYXRmb3JtU2hhZG93KFBhc3NPd25QdHI8SW1h
Z2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBjb25zdCBGbG9hdFJl
Y3QmIHNoYWRvd1JlY3QsIGZsb2F0IHJhZGl1cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBs
eVBsYXRmb3JtU2hhZG93KFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QgQ29s
b3ImIHNoYWRvd0NvbG9yLCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd1JlY3QsIGZsb2F0IHJhZGl1
cykKIHsKICNpZiBFTkFCTEUoRklMVEVSUykKLSAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7
CisgICAgc2V0Q29sb3IobV9kYXRhLT5jciwgc2hhZG93Q29sb3IpOworICAgIFBsYXRmb3JtUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gc2hhZG93TWFzayhjcmVhdGVTaGFkb3dNYXNrKGJ1ZmZlciwg
c2hhZG93UmVjdCwgcmFkaXVzKSk7CisgICAgY2Fpcm9fbWFza19zdXJmYWNlKG1fZGF0YS0+Y3Is
IHNoYWRvd01hc2suZ2V0KCksIHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisjZW5k
aWYKK30KIAotICAgIC8vIGNhbGN1bGF0ZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uCi0gICAgZmxv
YXQgc2QgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlU3RkRGV2aWF0aW9uKHJhZGl1cyk7CitQ
bGF0Zm9ybVJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlU2hh
ZG93TWFzayhQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYg
c2hhZG93UmVjdCwgZmxvYXQgcmFkaXVzKQoreworI2lmIEVOQUJMRShGSUxURVJTKQorICAgIGlm
ICghcmFkaXVzKQorICAgICAgICByZXR1cm4gYnVmZmVyLT5tX2RhdGEubV9zdXJmYWNlOwogCi0g
ICAgLy8gZHJhdyB0aGUgc2hhZG93IHdpdGhvdXQgYmx1cnJpbmcsIGlmIHJhZGl1cyBpcyB6ZXJv
Ci0gICAgaWYgKCFyYWRpdXMgfHwgIXNkKSB7Ci0gICAgICAgIHNldENvbG9yKGNyLCBzaGFkb3dD
b2xvcik7Ci0gICAgICAgIGNhaXJvX21hc2tfc3VyZmFjZShjciwgYnVmZmVyLT5tX2RhdGEubV9z
dXJmYWNlLCBzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIEZsb2F0UG9pbnQgYmx1clJhZGl1cyA9IEZsb2F0UG9pbnQocmFkaXVzLCBy
YWRpdXMpOworICAgIGZsb2F0IHNkID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVN0ZERldmlh
dGlvbihyYWRpdXMpOworICAgIGlmICghc2QpCisgICAgICAgIHJldHVybiBidWZmZXItPm1fZGF0
YS5tX3N1cmZhY2U7CiAKICAgICAvLyBjcmVhdGUgZmlsdGVyCiAgICAgUmVmUHRyPEZpbHRlcj4g
ZmlsdGVyID0gSW1hZ2VCdWZmZXJGaWx0ZXI6OmNyZWF0ZSgpOwpAQCAtOTQ1LDE0ICs5NjUsMTEg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVBsYXRmb3JtU2hhZG93KFBhc3NPd25QdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QKICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBibHVy
ID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzb3VyY2UuZ2V0KCksIHNkLCBzZCk7CiAgICAgYmx1
ci0+c2V0U2NhbGVkU3ViUmVnaW9uKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNoYWRvd1JlY3Qu
c2l6ZSgpKSk7CiAgICAgYmx1ci0+YXBwbHkoZmlsdGVyLmdldCgpKTsKLQotICAgIC8vIE1hc2sg
dGhlIGZpbHRlciB3aXRoIHRoZSBzaGFkb3cgY29sb3IgYW5kIGRyYXcgaXQgdG8gdGhlIGNvbnRl
eHQuCi0gICAgLy8gTWFza2luZyBtYWtlcyBpdCBwb3NzaWJsZSB0byBqdXN0IGJsdXIgdGhlIGFs
cGhhIGNoYW5uZWwuCi0gICAgc2V0Q29sb3IoY3IsIHNoYWRvd0NvbG9yKTsKLSAgICBjYWlyb19t
YXNrX3N1cmZhY2UoY3IsIGJsdXItPnJlc3VsdEltYWdlKCktPm1fZGF0YS5tX3N1cmZhY2UsIHNo
YWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgcmV0dXJuIGJsdXItPnJlc3VsdElt
YWdlKCktPm1fZGF0YS5tX3N1cmZhY2U7CiAjZW5kaWYKIH0KIAorCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAg
LTEyMTgsNiArMTIzNSwyMDEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRFbGxpcHNl
SW5SZWN0KGNvbnN0IEludFJlY3QmIHIpCiAgICAgY2xpcE91dChwKTsKIH0KIAorc3RhdGljIGlu
bGluZSBGbG9hdFBvaW50IGdldFBoYXNlKGNvbnN0IEZsb2F0UmVjdCYgZGVzdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlKQoreworICAgIEZsb2F0UG9pbnQgcGhhc2UgPSBkZXN0LmxvY2F0aW9uKCk7
CisgICAgcGhhc2UubW92ZSgtdGlsZS54KCksIC10aWxlLnkoKSk7CisKKyAgICByZXR1cm4gcGhh
c2U7Cit9CisKKy8qCisgIFRoaXMgZnVuY3Rpb24gdXNlcyB0aWxpbmcgdG8gaW1wcm92ZSB0aGUg
cGVyZm9ybWFuY2Ugb2YgdGhlIHNoYWRvdworICBkcmF3aW5nIG9mIHJvdW5kZWQgcmVjdGFuZ2xl
cy4gVGhlIGNvZGUgYmFzaWNhbGx5IGRvZXMgdGhlIGZvbGxvd2luZworICBzdGVwczoKKworICAg
ICAxLiBDYWxjdWxhdGUgdGhlIG1pbmltdW0gcmVjdGFuZ2xlIHNpemUgcmVxdWlyZWQgdG8gY3Jl
YXRlIHRoZQorICAgICB0aWxlcworCisgICAgIDIuIElmIHRoYXQgc2l6ZSBpcyBzbWFsbGVyIHRo
YW4gdGhlIHJlYWwgcmVjdGFuZ2xlIHJlbmRlciB0aGUgbmV3CisgICAgIHNtYWxsIHJlY3Rhbmds
ZSBhbmQgaXRzIHNoYWRvdyBpbiBhIG5ldyBzdXJmYWNlLCBpbiBvdGhlciBjYXNlCisgICAgIHJl
bmRlciB0aGUgc2hhZG93IG9mIHRoZSByZWFsIHJlY3RhbmdsZSBpbiB0aGUgZGVzdGluYXRpb24K
KyAgICAgc3VyZmFjZS4KKworICAgICAzLiBDYWxjdWxhdGUgdGhlIHNpemVzIGFuZCBwb3NpdGlv
bnMgb2YgdGhlIHRpbGVzIGFuZCB0aGVpcgorICAgICBkZXN0aW5hdGlvbnMgYW5kIHVzZSBkcmF3
UGF0dGVybiB0byByZW5kZXIgdGhlIGZpbmFsIHNoYWRvdy4gVGhlCisgICAgIGNvZGUgZGl2aWRl
cyB0aGUgcmVuZGVyaW5nIGluIDggdGlsZXM6CisKKyAgICAgICAgMSB8IDIgfCAzCisgICAgICAg
LS0tLS0tLS0tLS0KKyAgICAgICAgNCB8ICAgfCA1CisgICAgICAgLS0tLS0tLS0tLS0KKyAgICAg
ICAgNiB8IDcgfCA4CisKKyAgICAgVGhlIGNvcm5lcnMgYXJlIGRpcmVjdGx5IGNvcGllZCBmcm9t
IHRoZSBzbWFsbCByZWN0YW5nbGUgdG8gdGhlCisgICAgIHJlYWwgb25lIGFuZCB0aGUgc2lkZSB0
aWxlcyBhcmUgMSBwaXhlbCB3aWR0aCwgd2UgdXNlIHRoZW0gYXMKKworICAgICB0aWxlcyB0byBj
b3ZlciB0aGUgZGVzdGluYXRpb24gc2lkZS4gVGhlIGNvcm5lciB0aWxlcyBhcmUgYmlnZ2VyCisg
ICAgIHRoYW4ganVzdCB0aGUgc2lkZSBvZiB0aGUgcm91bmRlZCBjb3JuZXIsIHdlIG5lZWQgdG8g
aW5jcmVhc2UgaXQKKyAgICAgYmVjYXVzZSB0aGUgbW9kaWZpY2F0aW9ucyBjYXVzZWQgYnkgdGhl
IGNvcm5lciBvdmVyIHRoZSBibHVyCisgICAgIGVmZmVjdC4gV2UgZmlsbCB0aGUgY2VudHJhbCBw
YXJ0IHdpdGggc29saWQgY29sb3IgdG8gY29tcGxldGUgdGhlCisgICAgIHNoYWRvdy4KKyAqLwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZFNoYWRvdyhjb25zdCBJbnRSZWN0JiByZWN0
LCBjb25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmln
aHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRT
aXplJiBib3R0b21SaWdodFJhZGl1cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworI2lmIEVO
QUJMRShGSUxURVJTKQorICAgIEZsb2F0U2l6ZSBzaGFkb3dTaXplOworICAgIGZsb2F0IHNoYWRv
d0JsdXI7CisgICAgQ29sb3Igc2hhZG93Q29sb3I7CisgICAgaWYgKCFnZXRTaGFkb3coc2hhZG93
U2l6ZSwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBDYWxjdWxhdGUgZmlsdGVyIHZhbHVlcyB0byBjcmVhdGUgYXBwcm9wcmlhdGUgc2hhZG93Lgor
ICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKKworICAgIEludFNpemUgc2hhZG93QnVmZmVy
U2l6ZTsKKyAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdDsKKyAgICBmbG9hdCBibHVyUmFkaXVzID0g
MDsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNhbGN1bGF0ZVNoYWRvd0J1ZmZlckRpbWVuc2lvbnMo
c2hhZG93QnVmZmVyU2l6ZSwgc2hhZG93UmVjdCwgYmx1clJhZGl1cywgcmVjdCwgc2hhZG93U2l6
ZSwgc2hhZG93Qmx1cik7CisKKyAgICAvLyBTaXplIG9mIHRoZSB0aWxpbmcgc2lkZS4KKyAgICBp
bnQgc2lkZVRpbGVXaWR0aCA9IDE7CisgICAgZmxvYXQgcmFkaXVzVHdpY2UgPSBibHVyUmFkaXVz
ICogMjsKKworICAgIC8vIEZpbmQgdGhlIGV4dHJhIHNwYWNlIG5lZWRlZCBmcm9tIHRoZSBjdXJ2
ZSBvZiB0aGUgY29ybmVycy4KKyAgICBpbnQgZXh0cmFXaWR0aEZyb21Db3JuZXJSYWRpaSA9IHJh
ZGl1c1R3aWNlICsgbWF4KHRvcExlZnRSYWRpdXMud2lkdGgoKSwgYm90dG9tTGVmdFJhZGl1cy53
aWR0aCgpKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXNUd2lj
ZSArIG1heCh0b3BSaWdodFJhZGl1cy53aWR0aCgpLCBib3R0b21SaWdodFJhZGl1cy53aWR0aCgp
KTsKKyAgICBpbnQgZXh0cmFIZWlnaHRGcm9tQ29ybmVyUmFkaWkgPSByYWRpdXNUd2ljZSArIG1h
eCh0b3BMZWZ0UmFkaXVzLmhlaWdodCgpLCB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSkgKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1c1R3aWNlICsgbWF4KGJvdHRv
bUxlZnRSYWRpdXMuaGVpZ2h0KCksIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpKTsKKworICAg
IC8vIFRoZSBsZW5ndGggb2YgYSBzaWRlIG9mIHRoZSBidWZmZXIgaXMgdGhlIGVub3VnaCBzcGFj
ZSBmb3IgZm91ciBibHVyIHJhZGlpLAorICAgIC8vIHRoZSByYWRpaSBvZiB0aGUgY29ybmVycywg
YW5kIHRoZW4gMSBwaXhlbCB0byBkcmF3IHRoZSBzaWRlIHRpbGVzLgorICAgIEludFNpemUgc21h
bGxCdWZmZXJTaXplID0gSW50U2l6ZShzaWRlVGlsZVdpZHRoICsgZXh0cmFXaWR0aEZyb21Db3Ju
ZXJSYWRpaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVRpbGVX
aWR0aCArIGV4dHJhSGVpZ2h0RnJvbUNvcm5lclJhZGlpKTsKKworICAgIGlmICgoc21hbGxCdWZm
ZXJTaXplLndpZHRoKCkgPiBzaGFkb3dCdWZmZXJTaXplLndpZHRoKCkpIHx8IChzbWFsbEJ1ZmZl
clNpemUuaGVpZ2h0KCkgPiBzaGFkb3dCdWZmZXJTaXplLmhlaWdodCgpKSB8fCAoYmx1clJhZGl1
cyA8PSAwKSkgeworICAgICAgICAvLyBDcmVhdGUgc3VpdGFibHktc2l6ZWQgSW1hZ2VCdWZmZXIg
dG8gaG9sZCB0aGUgc2hhZG93LgorICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNoYWRvd0J1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2hhZG93QnVmZmVyU2l6ZSk7CisKKyAgICAgICAg
Ly8gRHJhdyBzaGFkb3cgaW50byBhIG5ldyBJbWFnZUJ1ZmZlci4KKyAgICAgICAgY2Fpcm9fdCog
c2hhZG93Q29udGV4dCA9IHNoYWRvd0J1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQo
KTsKKyAgICAgICAgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNyLCBzaGFkb3dDb250ZXh0KTsKKyAg
ICAgICAgY2Fpcm9fdHJhbnNsYXRlKHNoYWRvd0NvbnRleHQsIC1yZWN0LngoKSArIGJsdXJSYWRp
dXMsIC1yZWN0LnkoKSArIGJsdXJSYWRpdXMpOworICAgICAgICBjYWlyb19uZXdfcGF0aChzaGFk
b3dDb250ZXh0KTsKKyAgICAgICAgY2Fpcm9fcGF0aF90KiBwYXRoID0gY2Fpcm9fY29weV9wYXRo
KGNyKTsKKyAgICAgICAgY2Fpcm9fYXBwZW5kX3BhdGgoc2hhZG93Q29udGV4dCwgcGF0aCk7Cisg
ICAgICAgIGNhaXJvX3BhdGhfZGVzdHJveShwYXRoKTsKKworICAgICAgICBzZXRQbGF0Zm9ybUZp
bGwodGhpcywgc2hhZG93Q29udGV4dCwgbV9jb21tb24pOworCisgICAgICAgIGFwcGx5UGxhdGZv
cm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3Qs
IGJsdXJSYWRpdXMpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBPd25QdHI8SW1h
Z2VCdWZmZXI+IHNtYWxsQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzbWFsbEJ1ZmZlclNp
emUpOworCisgICAgSW50UmVjdCBzbWFsbFJlY3QgPSBJbnRSZWN0KGJsdXJSYWRpdXMsIGJsdXJS
YWRpdXMsIHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgpIC0gcmFkaXVzVHdpY2UsIHNtYWxsQnVmZmVy
U2l6ZS5oZWlnaHQoKSAtIHJhZGl1c1R3aWNlKTsKKworICAgIC8vIERyYXcgc2hhZG93IGludG8g
YSBuZXcgSW1hZ2VCdWZmZXIuCisgICAgY2Fpcm9fdCogc21hbGxCdWZmZXJDb250ZXh0ID0gc21h
bGxCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgY29weUNvbnRleHRQ
cm9wZXJ0aWVzKGNyLCBzbWFsbEJ1ZmZlckNvbnRleHQpOworICAgIGFwcGVuZFdlYkNvcmVQYXRo
VG9DYWlyb0NvbnRleHQoc21hbGxCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCks
IFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoc21hbGxSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0
b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpKTsKKyAg
ICBzZXRQbGF0Zm9ybUZpbGwodGhpcywgc21hbGxCdWZmZXJDb250ZXh0LCBtX2NvbW1vbik7CisK
KyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNoYWRvd0J1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoc21hbGxCdWZmZXJTaXplKTsKKworICAgIHNtYWxsUmVjdC5zZXRTaXplKHNtYWxsQnVmZmVy
U2l6ZSk7CisKKyAgICBQbGF0Zm9ybVJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHNoYWRvd01hc2so
Y3JlYXRlU2hhZG93TWFzayhzbWFsbEJ1ZmZlci5yZWxlYXNlKCksIHNtYWxsUmVjdCwgYmx1clJh
ZGl1cykpOworCisgICAgY2Fpcm9fdCogc2hhZG93Q29udGV4dCA9IHNoYWRvd0J1ZmZlci0+Y29u
dGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBzZXRDb2xvcihzaGFkb3dDb250ZXh0LCBz
aGFkb3dDb2xvcik7CisgICAgY2Fpcm9fbWFza19zdXJmYWNlKHNoYWRvd0NvbnRleHQsIHNoYWRv
d01hc2suZ2V0KCksIDAsIDApOworCisgICAgLy8gRmlsbCB0aGUgaW50ZXJuYWwgcGFydCBvZiB0
aGUgc2hhZG93LgorICAgIHNoYWRvd1JlY3QuaW5mbGF0ZSgtcmFkaXVzVHdpY2UpOworICAgIGlm
ICghc2hhZG93UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgY2Fpcm9fc2F2ZShjcik7CisgICAg
ICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQoY3IsIFBhdGg6OmNyZWF0ZVJvdW5k
ZWRSZWN0YW5nbGUoc2hhZG93UmVjdCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJv
dHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7CisgICAgICAgIHNldENvbG9yKGNy
LCBzaGFkb3dDb2xvcik7CisgICAgICAgIGNhaXJvX2ZpbGwoY3IpOworICAgICAgICBjYWlyb19y
ZXN0b3JlKGNyKTsKKyAgICB9CisgICAgc2hhZG93UmVjdC5pbmZsYXRlKHJhZGl1c1R3aWNlKTsK
KworICAgIC8vIERyYXcgdG9wIHNpZGUuCisgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gRmxvYXRS
ZWN0KHJhZGl1c1R3aWNlICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCAwLCBzaWRlVGlsZVdpZHRo
LCByYWRpdXNUd2ljZSk7CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAg
ZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkpOworICAgIGRlc3RS
ZWN0LnNldFdpZHRoKHNoYWRvd1JlY3Qud2lkdGgoKSAtIHRvcExlZnRSYWRpdXMud2lkdGgoKSAt
IHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkgLSBibHVyUmFkaXVzICogNCk7CisgICAgRmxvYXRQb2lu
dCBwaGFzZSA9IGdldFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7CisgICAgQWZmaW5lVHJhbnNm
b3JtIHBhdHRlcm5UcmFuc2Zvcm07CisgICAgcGF0dGVyblRyYW5zZm9ybS5tYWtlSWRlbnRpdHko
KTsKKyAgICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKHRoaXMsIHRpbGVSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2UsIGNvbG9yU3Bh
Y2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsKKworICAgIC8vIERyYXcgdGhlIGJv
dHRvbSBzaWRlLgorICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KHJhZGl1c1R3aWNlICsgYm90dG9t
TGVmdFJhZGl1cy53aWR0aCgpLCBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgLSByYWRpdXNUd2lj
ZSwgc2lkZVRpbGVXaWR0aCwgcmFkaXVzVHdpY2UpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7
CisgICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkgKyByYWRp
dXNUd2ljZSArIHJlY3QuaGVpZ2h0KCkgLSBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkpOworICAg
IGRlc3RSZWN0LnNldFdpZHRoKHNoYWRvd1JlY3Qud2lkdGgoKSAtIGJvdHRvbUxlZnRSYWRpdXMu
d2lkdGgoKSAtIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkgLSBibHVyUmFkaXVzICogNCk7Cisg
ICAgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIHNoYWRvd0J1ZmZl
ci0+ZHJhd1BhdHRlcm4odGhpcywgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNl
T3ZlciwgZGVzdFJlY3QpOworCisgICAgLy8gRHJhdyB0aGUgcmlnaHQgc2lkZS4KKyAgICB0aWxl
UmVjdCA9IEZsb2F0UmVjdChzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSAtIHJhZGl1c1R3aWNlLCBy
YWRpdXNUd2ljZSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpLCByYWRpdXNUd2ljZSwgc2lkZVRp
bGVXaWR0aCk7CisgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNo
YWRvd1JlY3QueCgpICsgcmFkaXVzVHdpY2UgKyByZWN0LndpZHRoKCkgLSBzbWFsbEJ1ZmZlclNp
emUud2lkdGgoKSwgc2hhZG93UmVjdC55KCkpOworICAgIGRlc3RSZWN0LnNldEhlaWdodChzaGFk
b3dSZWN0LmhlaWdodCgpIC0gdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkgLSBib3R0b21SaWdodFJh
ZGl1cy5oZWlnaHQoKSAtIGJsdXJSYWRpdXMgKiA0KTsKKyAgICBwaGFzZSA9IGdldFBoYXNlKGRl
c3RSZWN0LCB0aWxlUmVjdCk7CisgICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0dGVybih0aGlzLCB0
aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAg
ICAvLyBEcmF3IHRoZSBsZWZ0IHNpZGUuCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3QoMCwgcmFk
aXVzVHdpY2UgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpLCByYWRpdXNUd2ljZSwgc2lkZVRpbGVX
aWR0aCk7CisgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRv
d1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgZGVzdFJlY3Quc2V0SGVpZ2h0KHNoYWRv
d1JlY3QuaGVpZ2h0KCkgLSB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpIC0gYm90dG9tTGVmdFJhZGl1
cy5oZWlnaHQoKSAtIGJsdXJSYWRpdXMgKiA0KTsKKyAgICBwaGFzZSA9IEZsb2F0UG9pbnQoZGVz
dFJlY3QueCgpIC0gdGlsZVJlY3QueCgpLCBkZXN0UmVjdC55KCkgLSB0aWxlUmVjdC55KCkpOwor
ICAgIHNoYWRvd0J1ZmZlci0+ZHJhd1BhdHRlcm4odGhpcywgdGlsZVJlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSwgY29sb3JTcGFjZSwg
Q29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAgLy8gRHJhdyB0aGUgdG9wIGxl
ZnQgY29ybmVyLgorICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIHJhZGl1c1R3aWNlICsg
dG9wTGVmdFJhZGl1cy53aWR0aCgpLCByYWRpdXNUd2ljZSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0
KCkpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShzaGFkb3dS
ZWN0LngoKSwgc2hhZG93UmVjdC55KCkpOworICAgIHBoYXNlID0gZ2V0UGhhc2UoZGVzdFJlY3Qs
IHRpbGVSZWN0KTsKKyAgICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKHRoaXMsIHRpbGVSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2Us
IGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsKKworICAgIC8vIERy
YXcgdGhlIHRvcCByaWdodCBjb3JuZXIuCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3Qoc21hbGxC
dWZmZXJTaXplLndpZHRoKCkgLSByYWRpdXNUd2ljZSAtIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCks
IDAsIHJhZGl1c1R3aWNlICsgdG9wUmlnaHRSYWRpdXMud2lkdGgoKSwgcmFkaXVzVHdpY2UgKyB0
b3BSaWdodFJhZGl1cy5oZWlnaHQoKSk7CisgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBk
ZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gc21hbGxCdWZmZXJT
aXplLndpZHRoKCkgKyByYWRpdXNUd2ljZSwgc2hhZG93UmVjdC55KCkpOworICAgIHBoYXNlID0g
Z2V0UGhhc2UoZGVzdFJlY3QsIHRpbGVSZWN0KTsKKyAgICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0
ZXJuKHRoaXMsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGhhc2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RS
ZWN0KTsKKworICAgIC8vIERyYXcgdGhlIGJvdHRvbSByaWdodCBjb3JuZXIuCisgICAgdGlsZVJl
Y3QgPSBGbG9hdFJlY3Qoc21hbGxCdWZmZXJTaXplLndpZHRoKCkgLSByYWRpdXNUd2ljZSAtIGJv
dHRvbVJpZ2h0UmFkaXVzLndpZHRoKCksIHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSAtIHJhZGl1
c1R3aWNlIC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCksIHJhZGl1c1R3aWNlICsgYm90dG9t
UmlnaHRSYWRpdXMud2lkdGgoKSwgcmFkaXVzVHdpY2UgKyBib3R0b21SaWdodFJhZGl1cy5oZWln
aHQoKSk7CisgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRv
d1JlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gc21hbGxCdWZmZXJTaXplLndpZHRoKCkgKyByYWRp
dXNUd2ljZSwgc2hhZG93UmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC0gc21hbGxCdWZmZXJTaXpl
LmhlaWdodCgpICsgcmFkaXVzVHdpY2UpOworICAgIHBoYXNlID0gZ2V0UGhhc2UoZGVzdFJlY3Qs
IHRpbGVSZWN0KTsKKyAgICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKHRoaXMsIHRpbGVSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2Us
IGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsKKworICAgIC8vIERy
YXcgdGhlIGJvdHRvbSBsZWZ0IGNvcm5lci4KKyAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCgwLCBz
bWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgLSByYWRpdXNUd2ljZSAtIGJvdHRvbUxlZnRSYWRpdXMu
aGVpZ2h0KCksIHJhZGl1c1R3aWNlICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpLCByYWRpdXNU
d2ljZSArIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkpOworICAgIGRlc3RSZWN0ID0gdGlsZVJl
Y3Q7CisgICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkgKyBy
ZWN0LmhlaWdodCgpIC0gc21hbGxCdWZmZXJTaXplLmhlaWdodCgpICsgcmFkaXVzVHdpY2UpOwor
ICAgIHBoYXNlID0gZ2V0UGhhc2UoZGVzdFJlY3QsIHRpbGVSZWN0KTsKKyAgICBzaGFkb3dCdWZm
ZXItPmRyYXdQYXR0ZXJuKHRoaXMsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJj
ZU92ZXIsIGRlc3RSZWN0KTsKKyNlbmRpZgorfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNv
bnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJ
bnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTEyMjcsNyArMTQzOSwx
MiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3Qm
IHIsIGNvbnN0IEludFNpemUmIHRvcExlZnQsCiAgICAgY2Fpcm9fc2F2ZShjcik7CiAgICAgYXBw
ZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwgUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3Rh
bmdsZShyLCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpKTsKICAg
ICBzZXRDb2xvcihjciwgY29sb3IpOwotICAgIGRyYXdQYXRoU2hhZG93KHRoaXMsIG1fY29tbW9u
LCB0cnVlLCBmYWxzZSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IHRoaXMtPmdl
dENUTSgpOworICAgIC8vIGRyYXdUaWxlZFNoYWRvdyBzdGlsbCBkb2VzIG5vdCB3b3JrIHdpdGgg
cm90YXRpb25zCisgICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxp
cHBlZCgpKQorICAgICAgICBkcmF3VGlsZWRTaGFkb3cociwgdG9wTGVmdCwgdG9wUmlnaHQsIGJv
dHRvbUxlZnQsIGJvdHRvbVJpZ2h0LCBjb2xvclNwYWNlKTsKKyAgICBlbHNlCisgICAgICAgIGRy
YXdQYXRoU2hhZG93KHRoaXMsIG1fY29tbW9uLCB0cnVlLCBmYWxzZSk7CiAgICAgY2Fpcm9fZmls
bChjcik7CiAgICAgY2Fpcm9fcmVzdG9yZShjcik7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAppbmRleCAzYjAyYWQ4Li45MDRlODE5IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAKQEAgLTE1
Myw3ICsxNTMsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsbwogICAgICAgICBjYWlyb19yZWN0
YW5nbGUoc2hhZG93Q29udGV4dCwgMCwgMCwgZHN0UmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdo
dCgpKTsKICAgICAgICAgY2Fpcm9fZmlsbChzaGFkb3dDb250ZXh0KTsKIAotICAgICAgICBjb250
ZXh0LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dD
b2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKKyAgICAgICAgY29udGV4dC0+YXBwbHlQbGF0Zm9y
bVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwg
cmFkaXVzKTsKICAgICB9CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66175</attachid>
            <date>2010-09-01 00:53:43 -0700</date>
            <delta_ts>2010-09-01 01:33:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39582-20100901095334.patch</filename>
            <type>text/plain</type>
            <size>112471</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L2JveC1zaGFkb3cvYmFz
aWMtc2hhZG93cy1leHBlY3RlZC5jaGVja3N1bSBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9m
YXN0L2JveC1zaGFkb3cvYmFzaWMtc2hhZG93cy1leHBlY3RlZC5jaGVja3N1bQppbmRleCA3NThl
ZjcwMDE4Yzk3YjQ4MjkxNWMyZjYwY2NhNzQ3ZWEzNjBmZTVhLi4wMzI5MTZlNTkzYTExZjc4YzQ5
NzNlNTAzZWQ0MWNjZmRmZGVlYWUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvZmFzdC9ib3gtc2hhZG93L2Jhc2ljLXNoYWRvd3MtZXhwZWN0ZWQuY2hlY2tzdW0KKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYm94LXNoYWRvdy9iYXNpYy1zaGFkb3dzLWV4
cGVjdGVkLmNoZWNrc3VtCkBAIC0xICsxIEBACi0xNGU5NWFhZTk0MTY4ODA3ZWEzZTFmYjY2MjNh
ZWE1NApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzZkYWFjMWY3ZTZhZjE1MzRhNWQ4M2E4
MDg1NzNhNWM2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYm94LXNoYWRvdy9iYXNpYy1zaGFkb3dzLWV4cGVjdGVk
LnBuZyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L2JveC1zaGFkb3cvYmFzaWMtc2hh
ZG93cy1leHBlY3RlZC5wbmcKaW5kZXggYjNlNDUyMjQ1YWZhMWEyOTMyOTBkMzExMjgzYWFlYTk0
ODlmOTIzMC4uYmY0ZWQ2NjA0NWEzMTcyMjM0Njk2YzZlYjhmODk5NDcwZTE1NDhkMSAxMDA2NDQK
R0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDE5NjcxCnpjbWVIdmNUfCZJd2BaKVZmSGI4eTV1fTNA
S3t7JGNJKlFjTHIxIyFpMDJRUzdBfm4pJD0lR1ZZMWYpeXZBaVZ7VQp6LWVDXiFkKyt6WC08XkJj
eC0pQkx7K1JXdT5xKnY9QytEMih2JihQKV9DNXhfUWgxNGJoeGByJTA+UEQqZit8NUUKeipLaT9f
dExuRnxmOytga0RLRWp4Tz99eXlQe19zUS1fSCM+KEdVbk5MPmxAYCopPHQ2PjF8NDNHSWVsTCtA
MGFxCnpAcCZQSF9SNExvZlZpOWFDNFNAQ3pPQzZPbHlyIURzfWJVc3V2YGc7QTdkMXpnfTQ+XyNG
YmxkTnktWG9ENTQqTgp6MmhSemd7Rz10QGMjRm1OLTQ5cGdkfDk4PEZfMmlGK2N6ZV4jNFJIMkNU
YClFVkZBe2tNK1JFV2smPE8+dmdaJWIKenh9UDRDYiVrJCtCek5ad1lkTTQjeWtmY3FtZV90dUdw
LUZAenVjOGowNHVrWntKKGFzUjhVQjQ7MjlAY0hNNmpBCnpTYSZzYDNBZ0hFejZPREtlNWgrVGlB
RUBmIUpwT3xXbSZjeWk2d3tZMVgjUD1oZEA0T0RPKU5nKShQPCsmekxTdAp6blgocS1fM1Q3cz95
Vn43KDQhfWZ1MFZYV3lIJUwoUUhtfCEtbE0wWG0hTmx+SCZuI1BhYVBjSyNwfFRKdlB2SVYKelJZ
WDFGZmsxcU1TUWF4WUVCVE5wa3BfYmRySXF6YyZEI1Y3UlJPSUxYRjZMKWg2cjZAXlNYQWhsc1pe
Kl4xT1lgCnomXmZBNFUjS0ltQnB8Pz9zNDMkOEdxPTVuZGRob0VwUVVkQEFPbVNBIXRkWVMxcTNM
fjlzfnkqcDdzQDBSbmI4cAp6Ql8xZU0xQH0wRCRVekQjdGdCSndea19PYWM1Q1lmdXQ7MUJXYipF
dGsxVn5nLTgraHhIQGI0MmdnMVZSa0Y0IWMKenVaYXZ6NHt6R254S0F3JElNMDUlVkRMNzFuRz4q
X3RSVGwmWGpJX1lvUnlXT09MOzJzUTEmSlNHRDFqVXM+bkB+CnooQ0NaXnNNYWRWVn0we2c/SHoz
R3liKD9pSTJrMC1FbEhnZTlfbDY4MkpfZCROaFA7QCtZR2k8R2g9OCFeSml9YQp6Um4oQUAld0VH
RkJWRSVidHtVdCR2KHFgPWxFcjg8Q1BpWj5Qe1RrM1NBemhFSXwkfmBfc2VYRkZITDQ9U21zT3cK
endaU2RoNkwrJmBwZFhgcjVDbGRXOTg4UWgqQXdPVG18OFlGYVUwKk1gbkYoJSR0ZGteTzQqOypB
Mnlnbmd1VSNSCnpxKzZuNlNlclVvTyt7SkM+bS1JdWg2RCFHbjEqP0NpI2koVD8lM3Z0ZTl0PWlq
dUQ8JXY5RDNPa1lkPG0jSmhwVgp6ZShJRndERk9EJHBJUH5wNWZfMSpyNmBCNHM1PSpvPV5pIXc8
UTI0UnZ7Mi10XnIqVkpifmB1TDgrcUBKQU5jV00Kejl1QHBhWEl3KFJ5TTA3PFQyS190RERJMCty
dG4oM15fQ3gtbDh4VFM0S0dDS1piWklRQHs3T2I9WW4tZHcqXn1mCnolfkBFZUVHUCtQVmomKyo5
ZElkQWdiTTFjO1lWV1pEP1A3Vmg8YWEpcFVLTH40c0glTD1nYkFKZUNTeFB1aER2OAp6O19zLT8h
YFRAZVAmfj0rV1g1OThGPyg9d2pUNEpwVD50X1J1YVI4TExeKTNCKFA5JERkR094Z1VCa05PYUls
bkwKem5CKlFxPyZmVzFtNTVEK0o0KWo+alRAfSN5eDZlX3o3Y0d1cyRnJTM7Z1JkZDJ1JSVOSUhR
ZE9hNElXbUtrM0M+CnpYTGhqTHYjVHIoWj1LY3N6Tz5RSmtXSkt1MVpJRzdxdigtTkJBcFIqVzta
NjQhfn1vWmtzN3J3alk5KEVuQnc+Nwp6bEhsPVZ1QHZQM3VsNX1KY3NudW1oK1gjdkZQcHVUaT9n
RXtobyt2N3M4aDQlVl4qTndPeSNBP0czT2oyPVBUNiMKemF5cDR4Q2wlZnBjUkE+K1pWUCl5P1F1
QFFlI058bWdAfWlWRHdNRV81VnAzfSk3bU9WNnxOSmFwcTBvKDZLVmV8Cnoja2FCUSp4MCh+TCla
c3Z0LTQ2aDI7dHE7d0JJWVh1QyRiJTRBc0Fme2VCbFdJZ3tpWEZvdFAjc0JVZ2U/WWdYPgp6U2ds
dihmYT11JFAre19AdS1keThaP1VlKyUzZkpNQGBST1A5bG8qfW1DPjQ2QVVrJUo/dXkzJmJpOU9w
OWRSOSkKelEqWj11bXlxUGh6ZyQmMXJPb0IxbXdyWUBTaUJAWmFrWjR+Q0ludnkyQnk3SFdiSHhj
Tk1CKmxpbCk5V093SSlaCnpCeGRSPmZETTI7SjQ9LWohfihITER8YnBhdzBiYWQkWVh2LTcoUWVI
YzQleT9jNFJxITdXdTI9WWc8cUgmVnwlVQp6YSs4T1pPVzJsVGl2KWVgcSFDYVBSVjYjJjRIZFZA
RVFUWHo5Y3VjOEIpNmpuPzZLM2piI0VTMV5GdHR9QUlNdjcKeiphb31lYU4mJEAtVmRqOTBBQ1NG
QU0+Z2o/MV95ISh7Vz5fbTZoRXR6OF9nSlVvbnJHdWdkJSlJSElTMzNpTFJlCnoxR3x4JT19KHkh
Z1cyaW14WURMVU08LT96TztldFozWHA9b2JjUUwob1dpK3F3biU1S2lUSDhmMEBJe01Fem1iYgp6
aD5KdE44d0IoKSN4V2V7Pn1RX0p5amQmd19AfDIrLUNXPiEwTElqYEk+XkYyVnNKQHZaTHBgTXQk
ODl+aEUqbnsKenluWWJXIXpnMzcxfHJtZU55RjBRUH5VTTU7eSVHPmplczslSWYpNSV7Tm1FPkpC
Pjt5bHAmfEEkMEozZWdEfDRmCnpeej5qT1pVZnh8SkteeUhjYUhIMiZfKEhhYTJJMG96andYdygw
OWw8Un17eSR6Y3Ikb1k2Xnk1MUtZQjZWSnF0WAp6cGYpemtHSFhhdzVDWnYkenJsaD94b0MxREZs
JXMqVXdSPERIbUc2RXBtYig8RFA1QmspMVU2SVNOITVLTyVldWcKejQ/ZERYbz0zIWk0Kn59SUtK
Pn1GJmY5ZSF6eDIrVS13bDRpaXdgfV5kTmA/Mys2IVF9c2hVQm9zSTJvfWNWSjxvCnpPQ1M2R2M+
ZTd4OVQ5cD90bWVuMk81b1IqNGNFPCZ0Vl8hVFBJSj1EPyNSe15IRDNCJHA/em5Ddko9S3B7O3w4
KQp6PX1ufko2NUgtNU98YkpMPEtQMXAoYW1oc144TDJwYDY/N09fJVlGelotdVE+YGhuKl9TejZp
MDUwJX1vQk5LOS0KelJiVFAha2VSUl9mb0pTdmdRcCUpe0UjbHlFZDRHMXZeLWhFeUVpe1pOdkJF
MyNsP0RFNChXdDNYN2c7PEl8JmAqCnoxUj5lcWw5bXd7JXw4KkwlQFRnKz1LQ3ozU2ZKNkZjXyVs
KF4hUVduIUMxY3ZWRzJSbztpMkF3KUIrVE4kLSh6Ygp6NjJtKUZgUTY5aFEreXoxK0dUZ0lsIW11
RjU8YFJ9aHZLQT1eJEQ9a2x+PFcpYkhwRWc5fXU5YnFifD9zSUVib18KekJ8Un48Sm5pMnE0YlI2
bFRCKThNPV5CfHxYZEJzNjJrc0YzbUhAVT50Ri1rY3RDV3ZJQG97ayZecygtQzRxNygmCnp1VV8z
YGAmbjVGNWlxO2BxVVQySzhMSDxmQzhtNFhNUktES1EyS3YkPEtEan1lVHklKVE2ZUlUTm5kP2t1
ITFfbwp6Xy1OdTQhRFlPekBuRmcwSih7ZS0xYihyNWc2YiQtc0dnUjRecnJBYVojN01pYmwtOUpg
TWArRHk+c283X15STloKel5He1QrQ2E4UmhWZTNOYk01JCspcE90NDgjQWhhYnpyfUJUPikqcz9X
bVZ9MCFGb2d9QUh7ZmRhQzk9Z3AkbWhOCnozeVl7SGtOKEIhdDc0WFZ0cj8hYmU3PUE2O2dUZnFk
Q3QqJndkb2BvP3tpZjdzYSp3TDhNU1NuOWVYdyZgTUs1awp6ZkorQz1pYE0kRUtgKjdoK3tJWGVK
fmQjeHglSG9NIVp8cDswZUNRUmhDJXpqJmg+PGtjXmBlPmBfYE58Z2tkayYKejZHd0lgTmtWck80
RzM9Ti1WVHhxNGJOZGVfNEBpYTFYbzNDcUIhOFg/cCswKVI1Xkd3V0BEOERaalJ5a3cmfkFVCnpC
KTZQUVQqVllsNyYod0pAWjtwNjEoRSk7c2NGWEw9NmxHWGxLJkR3eWh+QnAkPj5RPVl3NUZ4TWko
ajskZTI0Nwp6WThJMyVOLXxtMFMkeFZ7NHNJKkw2SiY3S2k0KV51Q0MtcX5CS0ZwWEdzVn4kR0At
OzQxdnBKaShqSlRIRkhEJCQKejRXO0x3UlRucW9HekVBTzZvfGU7RFZoSj97V1hBTUp9R3c0P0U7
RXVpTU5Yc1g0JGk5UGkzWkM7R2E4SSpibnMqCnp1SDNiaGhHSjVPUVEtazhASG1Cd2kwO0tRKnhM
TUE9Nzwle2pVZShEPWxpc1dYK1JpWGImS3difE1YNnUqNVlsLQp6YEw7O1p1Zl9YdGlPJDI1JHNV
K1FrLTMxYD5DVj1jVnJ2RlQyMnVRQDVISEY5NVNVVkFmallUfk8jSy1CRn4xPGEKekJqaGshZSVr
fF5oPWxRRzR+e2VTMjhlaUhiI0U/X0VIWkVjdDVmX2dMQz0tKXNzOENgWiFme0VufVQ+UTNmYypH
Cno4VlQ4S2JuK3t2enhheGBUMk1gRFBlenRVZj8haEdeQXdvcVJAPyotYXQ0akNIK1J3NlVKPWtN
ZkdGYEErP2hORAp6RFhETGJBN0JDQiQ2fE4/al5CRWItYnU5PDlpNURIb287Ukl7NHk1XlZhe2wj
S2deTlQxVnA2SVNNOTtvaHZ6VFgKekA8alZUe29kbiFKQ3hjRkZqT0g1dTBWY2FTWl8yZCFBYj1U
KnxnSGhVVE4oe0BRQEl8bDBXSEhTYCNkTHJGISNRCnohRVRjbSV5dE9EZ3ljZkp4akU+MSpFdkFz
eiE8S0R3anhvJjlZNE9rbj9OJlNWe2Z4UHRsZyF1cy12RT4xME9Tbgp6ZkR3VWpuRHdlNkErYCg3
PCRFbjdqMiF0bmAjTD0pd3txfHk3IXlCbyYlc3dTdXVmanNwVmFeR2pJSjs3VkRjWFUKeiRBIzdT
OFEyck1DbHZATGhMWjtTJDRxbn1sKD1WJktDeVotX3tqZU8qODgkKSomWXhEVVI3OW9MOylQVTY5
e25kCnpDRkglS1YjV1VOczJhK0EzNFM1dD9tY3laUWFhRXoxUlBleCluPElxU215bCQxUWM8b2RB
bEBVOVUxZXFlTSs+WQp6R2xISEYydShkPkYmUXxLbEdleFl8MHUlMGl1MXFvekM1VEhQSVkxRWlK
Mj0hdmZVVypqWnAje3slfHZWbXdJekAKejB8dFFjeTclZGxfaiU0NyoyVVZ6djk4eiZqaEwqY2wo
bSh9bStxKlpyR0J3WXFXKGF7MXd3M2RWfDhsNzl6MzU5CnpxV1heYVE8P18rJHVjRCRzc2YtU3k/
QnlLOD1jYVokO2NvQ1FZcThDUGZ2bEE1ZyVVRCNgZjA2a0ljR0FJcmwhXwp6ajV6aGFENHlTO3F1
VTZvTFNCSSZ6aylDe3EjZSpHR2cyUChLcEduSjY2cn1zNjhfKyUwZlp8NTJRbiVmYjZBaigKekpz
X1Bnc1FgWTBUOyV0LTl2MlJQNX1hN2BTdzRyU3YjLVpoQz9LQ2w1NTR1P0s1Ul5nMlFaX09VTypO
S01GbyFJCnpPREpGVThHPFRZPCh2SWohRGQzQWJle2xWaGBwZWYwN3JkUmlIIUNNRW4ofUdmcXFZ
bF5GRSN6N3gjcD4/UXFfUAp6ITIwKD9UQ0xiTU9PcnxnYmNeK19zSG9UdGV2ZWpuaUlvWXFeNnle
eD8pVks+JHlifGhxIUZtT1M2Sjs5d3ZASlUKeiZGb09wUXF2UEk8Mi16KmRtcVY9dihRP285eWli
Q2U7ZVhNVHF6PFQmQWpsVy1vYSg1VTVwI1k7UD0zPCs1JTttCnpDNjlpVXsqMTQhdXxSbm1zJHZM
Q19kNUBfY215QWUqTGFQMkA8LVFBT0s5Y2tZMFBGMzhKWjwoSU5rZld0eW9Iagp6LX1NQ0lsY0cx
Qz5jV0hnXnpxJENPaGVDOTBgQVRDQW8pUVJfdEE2MnVhekZUUFJmdjE+dDkyUGd5UURxXytwYCYK
em12VHlEaV9nfHBJVDE9Z2NlTismPkZLcSNgITtmZDJfWTRrPil2PTllZFNxU2N7b291O2o1Y0BG
eDVpNChsYF51CnokTDs9cl56NzY4cFo/YiY5XiRDdmR2Izw8Xn09THopTjleI1ZxN1VxTX4/Z1pt
UDwzO15ZNz1FS1Z8QFp2SiRmaQp6bygkPWxOKTtMTT12Pj10RFFkK1NZNWdVKiUycW1UN0krTW1K
I2pQUmNJSjhITXN7TGF4TVJCe3M4WCFLWDI7cz0KelJfKEErUDs9Z1JVV3VwKmcrR085d1FLUlZp
am1PPkApIT1VKiF1aD5xM1JpU0h7N3I5ZU4pRVZgWD0lKEBtaCFVCnohPChodWsoVU1fZjBwYyle
elgpNU5oWGQyJmJNUlg0JnNnbGxCb1o3ZTgtZEJ3RmV6I1A8bmVsPyZHaHlefHsjIwp6IV5zfj42
YnUld3h5fTQ4ZlRKcjFzYDkkUzZven1XTUFBflRPbDBybEo/MEV0Zmh5KmpZLX4oJC1hWT5ZJEFl
fDwKenlnNj1vaWFiZn4mIUlSSjk3O31TTDVHSCtaP0FPfVRmV3RVZTZkIX1ySHlYOEMrNzlaLUlQ
P2E/SjZyUEQ7PjkhCnpRVTM0RT1WYEEzeXZmdkx5MWFSR25lSl96OXFJZk18RHEhWTEtV1dSNG95
O2NAT1V2VmB1a1hUUGBAKTdhUXFsUwp6M0hxY2k7eVpxckBLSWx2bjsxVkV0LTNUfV45NWEyMWA0
K0I8WFVjKCFoWms/Jm9eTj92cn52bys7aWlmc1locjEKem81UiVLelNMZFF5OyFqRGFSMUghe0BQ
fHlUPD9qbyY5dFcxejlXZDhBYVotUyYkflJfNTBlPXZeVVVnQmNCUXBJCnpvfTcoUTJ3YUAoajlU
dU85ejh3bWMpTSh4K2tPUihJTTt6YjU+MFlGVUVVZ3EmNjhQYi1TU304c0xCazlRc2g1Jgp6UVds
VkNVZkdgaGZNVDVTXlhBK1N7fF5+diUoP2okMjwlMDN2TkZAWE1VcThxemk7aG0pJERWTmNDST8q
VEprfUEKekJYZWJpe0VBP1ohWk41OyZ0XjMrKzB5PDUlWH0yZ0VTVmM2PyoqYHJPaXVjbXhBU09Q
aUQ1SEhjTE1AYXNLNmp8CnpGVCo5aVBufGMyTyVxaWFkVXBhREhBWl5AdG82cXEkdGZCOztWRD5M
QHElKShOQ2IqK19ZOXRMSUBZYkphQFRmIQp6SkdOVWZZdHZ9R2M5N01zdSljNEBUdiVjT2VjT1Rg
NUkjTzQxO0RMYz0wNj9MWjhsTF5SbklIR1c3YkNqPD19VF8KekZ4QDtKRl81N3dlU1Y3eUg8cGRa
IURDVHhScXhsXnc7UFIzKEpwbDktbUNBRzs0SC1GamMtWE1rNjA0MkxJTzxCCnpgaCR3RU9NSGoj
PU80SGhfYmRmWjF8PXdWMChRVih1WDhGamJVTnJHKjAoVF4+RSYkfCkwfVF6aWV2Yj9RSkhGRwp6
YDt7VjxtRDdSa2hRZ0Q8O2Q3P30pNSs9VWtTfGxwWmpTWiFqP14yOzdzZ1k9OD8ya2s2KnJFalJA
WGNWaVo9I3YKem4/OVlHVFIocGs8al5VPmJKIyZiP1pkckttVGgoeUxBMyFhXn45aVopXkJKPG5K
RyZ0VCMxMz05KVdrQT9uS25fCnolbHglSDR1VzE3WXU0NUVEPH1Pd014YCg/d2lFP0x0emBWakpj
fkNVP14yVlckflRgNlEpdDdsQGcxS25IYWB2Iwp6X1loeGxpb00yYD8rNzxQKGl1OGg8PT1LMSRR
YDt8QU44QTM1I30/dGw9QkJFVH1HJih3aURebkJ6ISo2JSsmNE4KemZodU4jZ2NFWkdDYE8/eFll
SnUwNkhwNGNseDQqaVA7YHh7em9LNmtWfEk8SFdWYnsran4paXJgOFpeUmdzVis5CnpSJEN9RjJ4
UmxFcVNXUGVlNE9tO2ZyWngzbjRoQDErcGRuU1BHOzI8Rlp4ZVlhQlIzQUA7NUVJV2IyVyhYV1Vm
OAp6O3tkPlhPLSktUk95OGl4V31lcjJfYXlXWkw4Wl4/RUoxPCtKUUdNb3ojOEtQUyZEYV5Wc2R4
Syl6NmIyQUl+ZzwKejM9SDV0JFdRbkRpUmQqfldZZ28ydWw/YENYKy0kOyQ8aXs/VilleUJ5aCM4
aEFPUV5SKno1Ull2d3M/S25UeXJmCnp0eE5KSGgzVyhae3BpSFYlfWlmJUZmd156IS03RF4tPWxI
SCZLaz9iak1vP0QwdVM1VStrcVg1QjVZUk0yaW5fWgp6Y0otQW5ERiF0aSV1Y0N1dFI8aE83TiYp
U0E4SSZUOXRnQzFxYHcjWWI9XlR7czBGfDB4fk5AbiFAPjVvZHNSP1EKeiQpMWF1YGJwZVYhMGM/
bD1gcElDPm99VDVSUG4zOFNwZHptK2MyMFRvSWkmTytkKyViY3J1VkdlcVprQERsRWk3CnpeOSFG
JntyO1g2eFpHQDcke0tFVVNrPV81R1lCWko7PSpCNlJ7SihYUEp0X1YwaV9nais5dkg0KTRsR0Ni
STtBQgp6aDl6JXJrYms8KjF5ZmlZWHVBN2NhTktpPUlXb3o5I2JqN01EemxXYz4lcHZmYTY8dHhi
blg8Qk94SFR5MCE7c1QKejhvblRUbk5WOzF4a3M4ZUFxMnhQJmV1Jn0hbTNQWlFafnR7dCE9K2NJ
d3lCazlERHJTP2h5YiUmWDR7QTJMRDdhCno8JXl8bmZVQ0h+Q3d1WU5VPCFZTmhMVzd2bXd8SSVo
KFFjUiE5NTVjLTFacCNyYn5oJGNwe05HdHxwbEwyPVc8KQp6akU9cX5FelpSZjhwRGdPOWsweHlo
SjE8M2l2I3ozdE5eR2REdDZpfV43PE5fYk9pK2JKcnhXQkRzPmVLYnlJZm4KemNuaSV1KnZ3bVVt
PXJyKERKbCk4ZnhLME4qJDcpQjdjP1leaVJhSG5HfUkkWiRhOzRUbm9+X2tMQzhkfSN5eHg+CnpG
dV5XTFYrSF5NO29NYVNNUGBnXjRDYkk2aiZ7V1hWNkNFcntHN3NPVEh9PmZLfEkjbTl7Yj94U2w1
XmVFUHlKOwp6eXZuOW9XZFB+JlNwfDdPPDYxPXMkT3U0P1lASkFhSUkka2R6PVZ5PHc4NHVoWiVJ
OTchbiNAKCZqMEpHSUJVVS0Kel9sSUB0cm12cF5lKSMkPCN+S2VgJDJ7R35oZ2NKMmZqbTlTcj1B
aX1BMnt5O0lBcGgrK0B9WTNteHVfcWp1PTJmCnpqLTd3aW5mP1V2eyp1Y2JVMUZyYUJIcDM3PkJk
amM3N1d9R1VhMGcpNlhwVjBhPFYhcTJKd2tnZVc2ZWArOWw7Qwp6JGYjI2k/IW53Xk0qLVJRUGpt
b2FeOXl5OztVJit9JWB6b3NUY2YzXihWOG1aMGRqZ0Y7YEtqbkZOZkRvMkY8YmsKelJzcnl8JDx9
VmxTaGMmMUYtOX1jVl4weT5BK25YOUdFT2lkXkxXbFltXn5LcmxCXnpmQUFsQkw+fUBfQ0w/VGBL
CnpnYmVlLTxtTyhtRS1Qe1o9anw9WG07SHh+Ul5AfkheaXs0Uklze3o4eypuQlpISUcxamZObm4x
JUglKiUkdlFUKwp6RmJ4LXA+YjhpQGkzaUlZNTRYRWdzaXtOSERPanZfMFUpeF9PQFo1QihIYmMo
RX5GQiomTE5nfUF6d0hvSnBQSEEKeiVsI01WSkljc1clcGVzPmRIWTVZIUFMe3pAbXlyemFre05C
VlUmeWo8Y2p5fWhfTllnNDlebyp5dnEzPGQ2bCg5CnomJFFpbG58aS09Xzt4Qn4qQS1+aXMybjMh
e0xtYnBEV35ve01uRXtjUDEqS0p2I1BVZT10OVpsN2hoa3s+MXohQQp6VEtSZnB2azI1eXMpc2A0
SnBMNUdHUDwlfCVlP1hlb155JE01Qz98Yl94Q1p0OXt9aEVJTn5IeFAlLWdvREcrMUsKekxkJSpV
Rj1AWFo9KytmSy1DMEV4P05lYH1VUEp9cEd6eVY2O0Q8OEsoczZJa05HJW5sME08XzhkbH1vcD5w
OyFHCnpGSkNYPWImP1BlZmxxY1crUGlOKXQ4Ry1NOUx4KllpRDxtMnttejhaZ3BIPWpXfjE4TFRJ
MD5gdkhyYHt3Tzs3MAp6Qkk3MmJral5AMy1EQUczUVJwUGRmZ3JwcFg5OHhrZWN6aH5uZ0Ztem9P
NFZQdHg4V1IxX2N+Xy0kbD1KYT9JSHIKenRSP0hmVjF4diRDUD5OTGBjQlNIQWpCOHdKRUsrZTtP
b3d4an4kfHZeNT9fXihARH5eJjJILTQ0U18jcHAlY3VCCnpSa0RhRGg+Vj5HM1VFQkBEVnBiKHdp
cEZxPzRWKGd8OXNTU19jYHlHY0l7RnFeKEVaMCpfREYjelhUY0UmIUBQZwp6Qnd2PHhCc2lnT2Z8
JmBwYTE1Kl9kU1NzKk5qZFYrQkFySV4yN0tIYGEqV3VoNE0qWk44ezdiP3I1T2M4UHk4UmAKel9t
PkdaaGFecndSZWdSPHpOMn5eclkzflImaUtYcFJxaGVkPkI4entNVzw1QlY7bj5lQk9PKC1sT1o9
NTIhSmxtCnpqQF9Ke2NuRkk5bGhaQkUrMWE/U0U/NVJ0dUQ8fn1oQGxON0d2UThBX3oxc0c3LWBW
WjNabmF+V1crSV9rPVU9dwp6cCtQWW5EcSRXfCh3MiRJbm4qbEpPbTNXSzFPfkhnRGE4ZShmJjFE
LTBTMUV3QzVMOTdNLW1kV2JxdWJsdHVxZFQKenBwfX1DUWZnQmJEMXxZJCM1OSRuU1hZejdFP2ho
VDclUWNTeVh6N1pWNUVXVnQreyp7OXd0dS0zUjI/bDJpPk9TCnpZWChvTmMwaGdyMHV2blZ6MXBZ
ellyIVhnXmR3e2lwYFNxJGNKciFscng7SFludT1yVWVZeU8obyZEfWF1Mi19Kgp6aCRxV19yYSZ8
Y3N0P2Y9cW8tZGxfYyNMN3h0QENldlJCYlNfUTlDYyZnM0xIcCVUeXVlT0RaUzZrSCFLK1o8MygK
elhGTDtXMXY4KEs/XkEwNXkoMGRENEU8bE9nc0ZPOCowKEd+eGhUfXpoYigrd2ZaNG09MEhMXjde
MTIkQWx4QTYkCno1PGRsTWAlfkZ6RzFFaEx2T0VzaUNMM000UntHc0JvcEZIMiNidHY4JWUhfVNr
ZXY/dlpVRCE/QytBZnMwS2dNUwp6UHNtKjJwY0NeVmJUSno2YTZrZ1l7UCpqcURKfnBeP2ZEMT1O
QythcTckPDZ6eiYtI0k0aXFiZURySUd9dVJ1MT0Kemw4PHd0aipwfVpGeG5yeGFoI3woPFYyLVpO
QjRHS1JGZjU0b0J+cG1TVCo8VUJubW5ZaVl1Pn1KcFVFLTBgNkBCCnooPV9tKz5HMiVeVmNVWk88
Z15rP09vRjhObDJHeGxzWnJhLXZDcT5VMUNhbFVzcW9aNzB0JjFFITJWSTFhX3dSbAp6cl8rfSYo
X1l6NVNoZmBiUD1HWj5SdVR7M2dNWSZVT0MxT0deRVdERChZQEhjVjYlNGg5Uld0QCNCPjYxVFJ2
KHoKekd1XzFqKyhUaGNMKSN8P0leU3pvMnYkVTxDX3NFYUhGXmFGRmhjXm13MHJ1ay1iak5rSiUl
dDZwZTJiK1YxN3tnCnpAKSQwaDd0cXNfKD0oZmMqMlZ6YlJPKSpLMyROKz00cGIzSkdSI2hVK2sq
Z3YwdSZ+U0RFMkk4c0IxaUtFZGFkYwp6PFU2QXotQXtOX3hHR34kITFtdmxjYmo1QXc3MT5mSHIh
NmleeGBiNntjQTwxVD9gZjc2e000QVJHIy1URllANSEKelA+WitfSnFZYXNYfTFOS0lmMyhPdmhu
a24jLU5mU15MWnxAPXN3alokUXF9dThESmV7WSl5fV5WcUhhOTRtfVF1CnpEbHl7TmVvNnN8YHU8
MXVRSlJIRDdHYEdCK25rKldWek4yalFZSD0+TlQrU002MH5CN3BgI0deWEM5bn5geDB7Nwp6Tj9M
TUR5UT98OzFfbV50Z1ZtJHdMfSFjWFdUTi1eNVRDJVMwNz5OUCFGXlVyS3c8az5LNFFlSj1sT1l7
cyhZJD4KenkxR3xETXxpPkFjdUNOS2BHTmdBeDtUTFg5cEYxI01DVjJWNGZjN0FLISl6OUZ5MFNI
O2RNdnVeUHxKVm9WbmlNCnotYXVLUm1jfktyN2l0JTR0SUpwIWB7aWM5cHpOa0JIIWxeXyFldyZM
ZUhnJkNENz5oVEl3SlEoc3FXJV5jd2M7ZAp6ZU0yVSF0YGJqZ2FsY2QwNCh1WEV5NkN3ZFIrJCF1
VEk/VlRhdUVOSU1FJldaT28/MEZofEZNKjtxRyV+PXkhSmkKeio1NmVwQDNHI1dKRUxjfjA8MGty
T1E5KUVAS2IoU2VxNnxgKkUqWTFBcWRuQyZOYDFBK2J7PEtGU1c5MVcyNCMjCno7NXVPYlF5WlhJ
MEM5JDBoUF5MZyY7RTxid1deNmlwRnFrZDFAI1cyVmd0PWVlU1UqaDE8TFdDTCZXRW0wMWZBZwp6
V2JaRnBzS0Bgd1oyJCtmQTB6MFgxWmEzK3tCQVpBbk1LeURkVmlPVmpwUjk0U2o3LWZaamZqakpC
KUA3K0lIMFYKekpHcWU1a3pwZ29lZ3tEeVo7U0pJNyopdDtyUURQc1NDPH15R0cpMWs5fUstfF40
UDtFJiU3KUpXYF5DcjB7Tm96Cno7KHtKQjlXMW8+QDRXel5sIylhcUYwXk9HYTtvcVlfMzYkVCVl
QFFrNFUyPFZIdkJyV2E8LTEmcUBiTDV0aGtSPwp6JnFHVEc0N15wNUNSbDE0elAoQ1E+fDgoZVQx
JkA1MVE3a2xiLVJHUTFWbjRwRHV9Vk45a0wxRCNeMmZCc0FYZGsKejc5V0RMQVVGRTQqZDtKRkF6
SCU+ZHJzYHtSMDhCKEk5YkBldmZQfEl5ZTZPMUZJYiR6QTxyQnhHbz1XNDJBPHk9Cno7dXg2YWV6
JkQ3dHVSUElYOFMocWt3JXNpV0ROamwtSVdaYVViMTd3IVlJTj0wfEZ3Q1l7R2ZmYVRFSGtfZ1FA
TAp6RnViOytmX0haPD9SZ3E0OWs3WlFGUH5yQSNRQVJCKClsdSppdSlMYDh4SDVLYncmY2owUVM1
WU4xMU4+OEdUWTQKek9MKkR6NiUhc2I1QmpgZ0kxaWx6Mi1gMyhVU21AS0lyd0U2NmZIZWY/ZmU0
VEg9UEJfayh9MGd6Y0lnbCl4QSY0CnpjdEFpViRpd1VFe1BeNVIqcFlWdChBel5XV318cHkzXih1
d0YpdV5DY3E8Y2pLeEIwR2xiPnxLTSU8ekJDLTd1PQp6PlNWOz9DVDZDPURnMTE0PWpma0s8IW9p
JUJ6bmZUcShTXyY8Rk0xYT1VI2xjSDx8OT8kQEFGd3k4b250ZlJXNHQKek1kTG09O0h5RWtWRTlm
d0J+d3c2Z1A8S05mZ29Zb2dgbUFQeSZZP3MwfU9mQDA2fG1gQlF8amo4OXt5O2Y/MlM7CnptMGx3
UGpJVU1iM1Mhe1ctKWpgP2BsOX1rZ1lSRlooLS05bU1pNlY3VElQOVk+SlJIUD12ZzVEOykrcmJJ
c0k8aAp6V0B2MTBVMFdSZmY2MlM9NzUoUlZIO0RzNHZaaHdKdEYwKnt6ISRDaU1rVn5pVzJ3bEQ/
cyRxJGNPbm9+NC0kZlYKejRFbGtSdzF7VE4rfk5BQzgkLSheK2ZOaUx2RnRJYUcjMzZAWCl4Ryhj
cHxCfUJ+RUFadSsqWm87S0lwaXpVbTwkCnopSWxiVmpnNCZ+cTxrNCVoQ1VfVjEzZHdwUCszOHRF
SlBNeVJtKkQlaFhtY2tuQ1cwXnpsQ04xLV9Jejk7M2V0JAp6ailaUE0rZGpIdW9scW1mMTlXeDIp
THwxYmc4SE9LVEZSKihNYmY2bSk/JFpsdS1PbXU1O24jJnM7UWA7RlJRKGcKekgyfDxAbzwpSTNg
ZUlgdTE+QzBFbTlffkAjKXN5P1pGKXQwbkt7cWNVfjhqU15WZXt8U3wpU09sTzR8d21SXmRICnpR
ZTlUTnFWNFI4ISpVSlRITWdLelB7UkoocCFva2s2JE01e1NgRlVrVjZ9M0RJOT1xUVoxdU1TcEVD
cSZFb3l9dAp6WldJVTx3XkczUWgwb2luPVlDSmpBO1FCITRYJU1Tcko3ZHshLUdObndXUThxT1ol
I0V4KikjRCswcFUoSjZ7bHIKemZNTEVYejg+NXEzKk9YSStzcz1VWmZ8RUVyRCVBWERuTFdMVDdH
KnBXemQ4SzFAdFVZb09qdENRZCFxdGZ0MDlLCnpXMHQ7QWlyVXVYN3BqYEUjfXZSSGZrZEI8Jktl
e1M9dCZ4MyglcV5QLTA7I0dNdUlDNEBvU0h9PXxNRjNAOV5hUgp6cEZpV2BSWnljPClHYERqYnhI
cnZSRGkjSmc8T154e3VpIT12I3R8PCYhMGkqSWFSeWNnKiFlZWM2RkFBI0RaI3YKelEhXk9WXjVO
SllFZWVDamFRKzM9Uz5ncCVuQnlEbHY4MTNKbXBXfGxjQEh1XmRMbihJZVIwcFZKVzlvX1hoSHJM
CnphZEImJWQtYFBsKUcqT0NoPnY5YyVzV2dSLXs5aXA9NiErfTZvUUgjTl5fJW4xOWo4bSo8LWdy
PldSVEc4YXk5VQp6blF2fl81WEAyQTRJMjg4WTVaQ1NtQitYNitQez8rdkB3KHI0TWFxUCltPihX
UHpUfTdiZGQ1eC1rUmpIR3Y0UTcKejY1cWlPMlczel96RTc4eyt7YkJBMWhMZ3RiKllPd3pHSEFp
a1QxYEBmT09GTUNWTHBEdFFWWHNhMHhBS1lzaSotCno5eWBXVntKYVZJcUd9JTctUEMre3YyTkJV
N215TkBwQ3ZmRkUpIXFwPUtlaXBZey18UXBMQTtWS3BZfmF0ZGJVKQp6cHNlRVRNX2U8SnBlVjFn
dnlYPjlNRCs+bnFzc3A2Sz47JlZSfTtIVnhFZDVFVHlIK3Fzd2peO3t7fjxvT2UyI0cKejU3Sikk
Q0Y3az02RVZBLVBDSEdkQzgyWE9LbU8teWNGPiZsdGwrWmd6KD99b1dnbylSfExTVVNPIV9vQnAz
JWhFCno8UD9zY216YkQ2SUk2M3cxclhGJFlYbndseXdUa2BtQ3loUiVAI1JIK1ZxMjBBd0txOVVE
Q2tzeUM3Vzd6dCVTKAp6S3NFX2JxPkgxWUdFQz4rWThXIXZSV35vNkw/d1FUQ2hRTSU2ckB1ODlf
I0A0d1Vtb1ZIemFHQU8wRjtxRE5kWkMKeiVAeSMyQVBrOGtWckh4RCVKVyo4aFF7LWpuZThZfmlw
JXZnXiVmPilxSTM/JnBSMXs8d1J3VzljaGU5ZFYjU2QtCnpoWH16LUF6S3htTmJyb1hSQU5BVjI2
Qjg9cTtXOUdFbFdtbHk4XjNTPjw7Q3ZmQj0tRzFnR1M+JmBYZFFmR1VqPAp6a0gqNGxgVFFLZyVQ
QUtVb3V9RDM9Pn5PQCRQcjxUKitkLWlwbVBjTHZmZUwoZW1xXk1LT30oeWBKcjY3ZWJsQSUKej0w
YmRtQzYqR0EzOVQxWFFoeHtuWFhkez5wYW1YSyVISzU5MSs/VCRkM2B7RDlzblBAdHtqdEVnfDBJ
O2UxRmIjCnpTVShPVDFkb2dIQlRtSUo1KnZfREQjQXF0NGhFQTBiYGlfYEJ3ZkdyTnsrcSptO1Ik
aFlOeGdTUVlUOFQkYWhObgp6VWhgRkVGJXNwKmJEfl56JVV+NDdyI15kSWFuTG4ySFA9QWJfbitj
UHEqMkYpU01uIT9PbThXWW9UXmBURWBKREQKeiVrT3p3PlkkY1coRmhKbEpnZlR5N1A/dkRDV0ZL
QXYjOy07MGxmWDIpTEgxeDtFPmZNcHh7bVE+YWo9d0c5PiRoCnpEKX5Ra097bSo9cVJwWHBaTyF4
I2ZsI1FKRDZyaFNMcjNSVVlPbEplKGMpPXRvTjgyPCV5MS0wSmo/XyVBRn0kegp6MyQlK3NPIWxU
LUctWWRJdDBpaDtpNjxqKXQ7PDVsTml4UjkyR3hPVEFQcFNeK1N1RVhtT0ExNXRReFY/THU8TDMK
el8wKmZAJiNZRDRaSSRjRDFgQlJMS0hzLUd3cU4+LXFkPDNBUU9odUkhZmxldzlZbmVGaztCSjhN
fU9MRDYqVHktCnojZ1ZYQHRSKEM3dmNoYlp7M2Z6diUtPmtHWFcpZC0qYjN4fiQqYnBwT0BWYzFK
NDZNe09EeWZKQkY1TDxfIURKRgp6P0VpZlg3PHB1TGtuXnxxWWJmMXNkQ25PREZNKUgmUFA+JWlY
VEx1eXYqbSZ8Uyhwa0UzdVQtODhEbXxhbitZSCMKekNXRiVwaEQlemE3UHBDJkg0IVBxVzVEZ21B
cDQkRmpkWiFHUVIwS09sfjdkdCRtKGc9KiNCUFM+WU1eTFh5aVVACnpKfUJOVHRgenRhXj8ta0s2
WSlZamRDVjQ1JFFjcn1zKFdpPU1lTHNzKGxhNn0tS3Z8e3d0QG0/eEkqZW55UGx7Pgp6MDtSXj5W
VUxRJmkxTX4wJWM3b0NxQGprfmtsUjhQakpUSzZ1fnhKe2pYcH0qVzJ0YUBefCR9eytrZ0QrS21Q
VX4KemZCVFFXQHlGbHo8OFM9Jkh+I29MZkI4RnEwamNCUGBPRHc9JWlzTFJwOUlPQHtLdFFURGZ5
ZktfPHpCeXlKWD85CnpiJlJ6T0xOSDRIZFhfRz9Bd1N0RnstOFl6TWdXUVpyMHMoRHRHNUVBZzdV
b1M9RyEtZzZSUlRiZlBCX0RCZjlLNgp6SitYZG9hYFRNeV4zViQmOypMa2Q2ekRKcGhtQTthe0tH
eSNLP1NgdEI+fE1LeCtmUW43UH50XmkzOE10JVF7QjgKeiFAMzJsOUA1Y2l1dWBEITxLY1oheVFw
MmtFaSNiYjNQWSN+MnNqTzdKR2R8ST87eCRWbS0kWWImb2J3ZShJc2MmCnpjZ0psODtRWjJTPj98
MUBiNGJVbFJsVCluYHZoPD4zeX5GcXZlWGIqYkhnVHJWQy1YMDcjOXwxekJNSVdxeX5ERQp6a3dn
YWVKZW0hM1dyXk0xSTAld0RiQHA1eWUmS1ltTX03WGJgb3pgKzlQflkkRDUqOUFyd3h4UTRKX1ZS
Znp3ZTMKemdYWlJESX43Kjs/KnwpUiklV2p4WmZfZWt3U3VqVWZNWDJfT1BiXkp5O2pAN3RTa2Fj
bUR9Yk5qbm5jJChfYHR9Cnp0M3AjT2pKNmNXNklLKF5DdFckbGYrLTMpe1JzO3AtRFdBbm55Uzxn
LXFfM0Q1Vi1CMHFGVTJ0Vkl7Rl4hXz4hVgp6UUppezh7SyFNY2lCej1ucVE1QjskZ3h+KFh2ZXp+
XmJ5Xl95Vj5FQTI+T0tGcyhGJkU7NmwkOVdgfkRWNThDVzEKemMmYiFhbEdWb0cySTErfW55UWtN
TFNxalkrYXVAMXo4b1R9IUNBQz1ZUzBhZmVmPXNOcTNiclZBOUQrV3Q1UGJHCnpNO2N8R3RYbF9L
dHVvMGpKOFJgeE1MVGQxNmglZ0Q8b3hPJXdgYkxzWjFrK1VnYXA0dHAwVFF9IzgwJHFzQ0kpdwp6
SHQwNUdGUnQwVWBUMj5aeHQ3bnphTyhZb3klWEstYTQldWlXSFhMTEI3fVNoezR1IzhWZDh+eHFo
cVdNalpUQlQKeiU0S2ZgWHMpS2AxWUgtWXVmaXUrYXQ+VD13Jjcqdjg5YWA+XnBfMU1weUNoT048
aCl8NW5VUz1YanJOfSk+V0o5Cnotd0p3aXBQen1fIVErdTVKdmRnMWdaRmA3SVd4YyUyYFchJjdw
X2piP3xaQGRRa2NjWio8cSZRdTleQTVKbWwlSgp6T3lAKnU9PmNIX3pMUmgqNUdVeFEhbFN4OT5a
Smg9QDspWlQkQFozdHdge2ZKNEFWYFhkKGJuSHU7dHpXSSNtUjcKej1CajQqOWclfV5iYHYoOWZe
ZWBTMkspeF4oYlVOYEphNWleNHhQPW1TMXJEaFQtOTVhYFQrX2Y5YCpkP0Y/c2ZmCnppJHB3Kl56
KGJ9O048SE8/ZGFzNzI+TXFeS1c+VWk+bUFrPEB6IzlNcFAqQ2heMUppJTVZWEleO1dhOHp7JHh9
Ywp6OXJ2O0NQSTJeM3l5ZytqNCtqaFEwP1laZSZXPy1lc2lSZ3R5SHZaPXc0SHFaIUtfK35YUSk5
YWF4ZzFjTC1VRTUKekcpMU5ISHp3fjBCcldFM3NRUT1YYHoodCVwXnUpJmU4QE01U0p1QnZed20w
eEh+VjMxbGN9TkZ3ZFVNc3crWnR3CnpNTWFoc3c3UXdmVCFkMDRmclRie2spQTk9KjR8cH5QeG1M
QUFOYT0yQTJFNHJaTTUjZHN8c0pMTExmTWZtO1d5Uwp6eCtpNkclNDQoUGZFRyg7QClufXshTDcy
MTJxKmo8aD50NTlOQjBmTFNhP05uYGNyUGZ0QmBMXyYrYXduNGE2OEUKenowbW1URiE2JGs/JC0w
S3sjKXZsa2V+fmQ0VUwpJUVxZH1UJUFKNjhzVU1pZGNDQD85OXNUX05jZURgNWFDMmFLCnp1R1g2
enI4ZipnaitQR0JVcHpCUG9iMVk5Qk1CSnBoJSZhbiFeaTJJTHdITDZXNWFsZHxNa1BBbSF7cnpE
TFY0Twp6ezFSRThYUCtpIUV0fmIxWXlCIXY1QSs+LWNXTyVjSVFtVX4kYEFEcSo9RS0pYn5jX2lu
QkwlcTtaLVBQV3orUXIKekFqZ2NTLXx8LT9DPjA1eCpOZjtKQVNNelVpRE9MVXtjaGVLY3c9TiFB
eWYkJFl4cjdaVThLJCRtcVllKTZIN19fCnp7NlM4UUxybiZ5T1V6dkRRPTQjcChtUmhAcXRsdCV0
OUJMR1pAcl5FQVBQMkR3Nn1KPz5hKSFlVnlgUHxZZlFeYQp6cyEhXiNfbz1kS0VSIyVuXlNxOTlF
bXs+fkl5UFdmUCs5N3M0KjlJc1V6RWJ9Zlc2dnpxT0QydmA3SD9WNlRUfXgKej50cXhWISklX2Nm
RWVTPHBLcEpoMldjUDBkIV52d2BlIUVpTylgLSU9MEw4d09tS0NWY0JSUXQ/N3E9RUNgKnVnCno8
U0tkI2xKKyVYQCF7KChyNjNmMGkrIU5ebE1XK1FvYCsyakErKnY7XnlJSGtJNHhqRkYwQ3NQdFh+
RShgbGM8YQp6Unkma0NBdil5dWRENEJvV2N+Y3NYMjxTVVlPb1BzYjc1SDJjJDIxYzY8NHttWnVJ
OS1NNHZ5RGlJNWFXWVAjdkMKem9HKUwpUStGfV4+KEI2Xk11RHchM2k4PCNDbGZ+cGlTMTlYeD00
TiZpPWIyLURrYDc/JnV+aUk+QSg3QW8kKiRzCnpkNko7Ulo3JHBSPlpyRyR6Nz1TNTtkSnJaKno2
eDFYT1oyT2Aja0RVYEpJeUVhPHpMVUZrfmExWEpxTSo8S3crbQp6SWVDakxPNnxubi1DUylvWSlE
Xi1xMilBY14yVmJkLWtsXzt5eXxzRHN6KkVDXkI/XnYzITNsajV0QEZeSCt2STMKellEeFcrPVpv
VStDcTJWSWQ4dGwkTmh4dmlfbUc1aHZ8d2ppKno4MENVbTVROUM5aG88YCNOcE0+I3MqeDNobUUr
CnpHYHo7S0Z5dG92TmlEUDRAPUV7dU1xZDs/IVNsbFZ2WnY+ZnpDekVYPzFlUkNCSTNqPHEzOGc2
WkxPX1drfj91eAp6Sl5GMCVNWEsqOUVpRVVPTV47UHQkNl48OFdBIWF8WHRhLWVjViUrUyNgRyZt
JEpKN3F7NVVAaFphfSt7LUw3bSEKenI9QGlvT2xSdFlPMWJnazF9WWZxQUBCQjB1PzNzYUBveVco
KlVvJlUqd09gbF9CSUhsNT9wXjQkR3xXVVo0WV42CnplJGJnTUZNb1F5WFQje3xifUhpNl99eGxe
e3VER2Q8dVY/QSg0bzdoJSopcGgyKz1NNjgrSV9RJlQteklBbz5xTAp6dUJ2MFZBI2F5d0Aje1hP
Y244ZWZGej5nRyZuWVB7Yztsd1RiRHx+M2N1e0d0Y34tblM3ZypnVlJxfFBCbzJ4e1EKemk3LSRD
QjV1WV5mTXplZTkjZDVMWCZfWDI2KCpBeTMyZEI3RCN9PGxtWmckIUdtSXg3SjA8ejZjPGFwRiQ3
R3s0Cno0WkplXzYlR2FFZCpULTNucFctKSNwNkIhITt1ZGl5VWk8bGNRbk92NiY5M2pfTUVfKGs+
WlN7N018aXZHKTZfOwp6bFE+VGBQcXBkajhzQGUqNEhSZXx6UjAtUWN2N0BAYnNfWkEwNGZJRUJl
czh9ekYkfF5ZKzAoIyl+PEIlQF9lU3AKenBFKVNzQlcrYE1yTjQ+ZkJYZn1YcTB4JjRxRjQpUk9e
NXg/UUtDa29FJW99bjk7NXxBSkJkYkIzT25iKlBWaVg1Cnp2Q0ZgTWphWEtJYFFZSEJsX09rNVI3
YiRzJjJxUG9OI2VETnFEcmlvKT9KN3V5c0Z1ZFRic0o+Ry0+KWdkdUE5SAp6VnRZMldONXJUUTZC
fEYrcHEkZmtGR3M9fkVrKyl3RHh6WktIYkhvM0Apb25MNHJaUUhZaVQwKzc4QEplYjJlTDMKelpx
bm49YDlaQiVye08kblp6dCV3UGJkWVNXTlVpVSE9YEFXWCNOWTJeMH5LSSFtc0Y0UyRkfFNnTTZ1
ISEqWHt8CnpAcj03ZlVtck9SX0lGUFVWTmN9byo3eEJEeDg5YF55KGRjMz9ITWh0bX1BOF40allJ
ND1uOHp4b2RFSUNgJjNKXgp6bmgpMj5zLWVOUSYjanZLYjtZVSFAK0Y0bjw2V3ZkY3oqb29TXj9y
PHU1Zk9yQ3ItMmNSU3UxN2N5KXZxKHgkbXgKekZOKERtMzUqWlJYTlZYVDw9YFNLbz9UPzhZTEFj
STk2Tl5DNk5ndz5tcXpWeXRuU0dfSU02UC1raGBFNEo2YkBhCno0WEtUcypUOy1YU3w5ZlFOQ0te
YnI/UU1Zd19iPXFfdXdOUTBgNF93WD0mQVh1TDlrTWNHbTxwZFN5UlBET35YPgp6YGBEaEhsY1BD
cCZpPkhJMnJwSjF5eCpeeTdmTHlCeT9nZyZQbH1rQD45cXVoMUt4dU9CSXtlTGN0MmhHXzw0QkIK
empYTDUrOzwrRmBTVSRwMT9LQipeSklqZ05BM05JS1VxX2RQKCpFRVVjUyZ4ZTg0VVB4M3BudHRs
LSg8a1BkP2VFCnp2VlA1fk0mLSl0cmE+Km1eJnNydmQ9VX1fSXQyYiVtODU+U0gxUypNeElAdkdI
P0JYY2AwN3B3Wm9IIW47SHdwMwp6SCVxKDtgU0h5NyhaZFArTHVzQXIyWnFNbmhpPFplSmc5blc8
bG56NnBKJWZ7Tk9Yaz1wQ31UNyN0TmdBZGEla28KemA7aXo3UXg/O3lycFNHVGl7T1U4SmBgWDJa
cU5IJEA5eWJjXzE4QzZCITJZbkp0SjYrQEsyRzFubmRqeD8zdW0yCnp3WGZHX2M0bSZfKlJKP25C
JF9hX0k3fmQwUnVVJHo2MHU7Vnstb1grSz1vMGBiTXNgUT0obXRXVmtCTHVsKVN2Vwp6dWYzaDU5
RiE8aEojKT8kWWw0ZDhybkR5aDRKRGhfO1psRnYxSVU3WmtWYUVYQnpHWV9uOTFfN0FZeUItelVD
V18KemZjanApM09NNG9EQzYpYitLJEZ7Sm0xbitAIz5gYUNiYn5IQSZNOS18MGFybGk3eTghYksr
bmkjdWkwP0wrdGprCnohZntablkhdGxfe1dPLVMjTD1YIVVQUSU+KlIoMXJjX3o1ZUhnRz5nYTRT
aE55O0dkVnpwbFp6NDZwaXI1dmhCRwp6Rjk8MXdwOyFiYERANHM9P1VqRFhlRjEoTGc0Nldmejsz
TikxMSgjWXg7LSRRSHxCJiYmJUchO3M4aWoyLVd5JTMKenlha007bDRibT8rOThyQVZxODA+TUNB
NmZoPXEzPk17LUV8SlhYUz4ydWl6NnlNbW90NX5le01RKyMjfHVYakFWCnpgVTE3d2QxSHghQVU9
V0A5NXB7PiREWTN6UGFWaCNNS25lX1pAUm99cCRpQGtFTXpOanwzTGVyJSlwbml2WmkyWAp6JmE+
a0BQS3RNU1lINlF4MkxoU0BKZUx5SWVJT1dYJXlSTVplQWZ8SCZFYSNxVVMjVXMraCpDTDA/KzBD
U0Y3JFUKenNSMTVnWldzeS08bml3PGFlTUNEa1BNUVNVV3tIKElFTnJVeWJ0WlBEVnJZV0RhKjc9
UHRFQihrTXNANDUqREd9CnpVfFBFUE56K0skaD9LZWdqal5NPnFpb3VFc25qfWc/aSsxKEhxN0F0
bX4/K0I1amw+NHVFVjNGT3c+Mj5yJG52Pgp6bi10UWJXKEQwSV9lQCNaNWBBeFUqPzs3P1luMDcx
Kjs9PUB3dVc4TWFqQ0lvPUBHSUpOUiglcD4hYWMzd2xkMV8Kejx9MmQmQiNodXVpdXJvQ0NCUCZg
OHZGYU0hQS08JF9pY2lAIyo8PHR5YylkUGB4QFZQQStjYnczMUw9dUp1PFd0Cnp0ZnpXfnhyTmle
JH57SUZzaytNOE92KkpOemJPeFhsdTteOXM2S0pENHchNldWTzVrQEZkSmlqUml2PWlKZkxpMAp6
YElGV3goZkpOSExKWmw/K01KbGBON3h8Jj4/WSFWTkJYTXRRVCo/YEhmQUcxYmZ1bkctJmpTU0gy
I05LTEZpV0IKej85SDZXODNJaWRKOVJNWThrbDZeWUI2dX1rMUZGaWBjYG4xPVghNlVgVCR5c2hB
ZnpMSmtuYForTVZta0FVVllWCnoqdjBrdjQlWGc4PEslekw1ZiQzWHpRRWdwemAxKTkxUl8qQmNf
VjQ2aTwhUH44WHB6JjIqdnY4XzJNR01UZHkwbAp6PWB3RlhBfkh0X1ZfJn1oUmBFSDl7YUQzdXBO
Q0VNPEU2LShuV1F5eVEjXj9jdGhnNUZmR21IPXtNdnc1ZWJBQkwKejUjRHFpb2Jse1JYZnE2bkA4
aXtlaDRAdnhaQ296ayVKRTRJMyZNN3ZgMD13QG5kYkAyKHU1RGIhX3JSZGk2NzgmCnpySylxUTEt
WWBMe01KYXYpSE1FZSp2fXVfYHsrYkgqRWFZMWREcTFqSnw7Xmh6c3VfR1FhRVNYOTl4LVhiVWtP
OAp6RTxAanRgIXpQUj5SRFdWVmwjUUYwez1EVitiZiNeNXg9RzlRYSZ7YCVCVllvdCM9Pz1eKEB9
OFJyT2A3NVktQlcKejhBS3xsS2JTWWBiRHMwRmVIOSFHZWh8ST5aS0ZwSkRJVUwyPWlwTX43KWNA
azA5UEV6P1NERiNBYXt5V3ZUcHZkCnpLP0AoWTN+SXBjWSVwTyNGeDBCK2pQeEQkeDs4WUIzaUtw
TFEySyNhRipvfmtSUVZ7fEZ3aTdgIz00QlpVZV9XUwp6aEclTjhLKClsVGBXbU4xOXNKMVRVaFV9
MSkwME9VWCo0cEZkI0ZEck5YI0EmdVA3S2RGNHE5N15neFV8T2YpJiEKeiR1SzU7NXI7czhUWkx0
P1kkM25HPzY9dTk/biQpclZXbWxSMXdVRTBzVCQ5Pl43UiQ+Q0VkeSVmb0Q9ZHUzbyRICnpga280
ak8hRGxmRj5fcXBSUjtOPEZ0Jn48WVIoN0hLcFQmaSNxfSthQjF6cFohcnA9UCVMWUhJPUBMcnBH
QXsycwp4bzB1fG52Mi1BJVZmQDEpKm18aTwyPjxad2hKSEtWXzBaTHQmaFUxMyg0R1IzbVFhOGVK
JTlWfGUqbEFUdjJPcVgKCmxpdGVyYWwgMTk2NzUKemNtZUh2YnlTcT95WTdnNXFMaVlQMHE5NjBC
fWoraiY9UyghQXVaaHU3VHFaXkFUOFpGel5IJm9PUDYkYSQxbnEmCnoyZnkjUF9xWD82ZCMhIWVT
P0J6N0szKGdESE5Od19QdXlgYCpMfVlSRCN9WHw7b3JmQktwO2ZZUVpPWTU8VDRRaQp6Zn0/UjIy
WWdhb2pnU09DdHtCTm0hWFcxdGU/SytrTF87OT1BPTBwQ0RzSVdeNll5N2VUXnI5YSl0bDtnQjNE
PmwKemFqIXtEaSZmQW5lcWc8cU1DNF50SHpobHRCdH5eSksjcmpENmBROCM8PFFERUx6Q1psQ0xO
Pn1OVk5wdDZnWk1jCnplU1VNTD9lJHgja3NCMjlwTFpvR0prdys9WmJWPHBSUWI/RmFvaDZlN2tx
NTM+bVBPU2tiSiZBc1d7VSUoZk9zegp6eDlCc19KMUxSPD9ndzB7PSNZRngjO2FoQz9PMip8VUdW
YkB2QTheI2BmR3sqWXU3NHlgTlJnbkBtczRGUiN1SzEKelpwSmo+SGVGMVlBclF+XiRhZUdTUkUw
MWZ6Qjx6Xj4rY14jYnBySDRZK2NEOWtXWDFFKShWTThVZno/TFNJZShuCnp2RT05VzFWPn5adFNh
Y3lxOSNsKUw0MCspUlQpWHxpN3NDfHByeFN+ciorfnNRQ05TJFVQPGQ2dVpLe3lOZ3I1TQp6c0hF
cURLenhJazdjO0E+Y25UfHA4O21vUVJ5TH19dWFTXmMyZWR8PD5nfUxTUXVUIV9rP21rQU5VZklT
ZDU3QWUKenYmdWRyIUgkKVpmQj8lfE8lY3paeG8/ISpCTWRWOW5UWlI1dHAzIXhXQFB2YjI0bVg2
aHtMPm1FUVpJbU5nJEFzCnoxfXpvXztodW1XdEQja3dGU1RoIz18fFIrXkh4dVNvJU8zIWxSd0ZR
OXtZO2I8M3JCSDJXQTVUKVVJeSMqQUcweAp6a0Vwa3spPzkwS2d6Zmg0aU1zemY0Pz5rXkQ4cm9P
OE0xRTttOG13KV9WeEFrVHRCVWtxeXd8RjRrVzV6TkM9bkgKek09SFF7Km9Gck5iRW9zNDYqfE45
UTMxYGl0PFdXP0xNT3Zfa3FpXm9DWE9vIypMZ35lemBfZShUNnJvaFl5MlJWCnp3cW5YVW5Pd2FV
SWRrTzRRdXNOaFpyaClyYV4yYH52ajlDJVBAM1hiMEV8SVZ5cFoyd0pIIzxiRiQtOyNicnpAUAp6
bnZrXzVgXzZwTCFYP2pCOUVgU1YqKEZgY0w2WmIjVFg5O2ooVnspR2B9blh8Vjx9UHxWXj9+JmJW
czR9O1N3fSoKekZFWXdgMytfQ25SWWxMUEBaR2lyKX52KGJEdGVubkt5Ymk0diE4bWwmJiQkPGRj
fjwkQ2x7M3lidj9AZW9qPTd7CnpuUE1YcDAoc2cqJUtXK1BWfUtCNlk3OUZ+MTFUI2hldDRyZEVw
KmcrRENOQV9PRyF1OWVWfD1iOXNrMyhma0NFTAp6O2p5SHl2eVc3Nj0zaTNXX2ZFUUl3RyFZYUZf
SUpZSzkyTFE1MnIqaWxXRWtFWj42NSllKjV9I1g1ITdhXz8+VSUKelRMZGdEdjA+bzJKX1Npc0Ym
clNrZXVVfH0xVzM4P1lkOEFCUSZIeXxYSVdXVXRGQ0xhe1g1TjAteGVIZGImQXI7CnpwOXx6SFE3
bm8jNHtzKmIzNmImQj58anBjeW5BeStqVG1mTVE2Iz93RTVlb1hzXj87TlhVMElybSRXYXgtcWtY
JQp6V21EJSFPd3dwM0VzQ3tAOVpKcilIcUZLJSZ9SUEoJFdOb2gqeXd3PUZAKml4ODJTQUopUCRX
VEBqS1ErSFp3fVAKelhZRCNWLXBNeFdiRVVAPUpHR3ZVZmgjYWF0M1FCO09uIUlscW5EQCYoKyQ3
dk19bVBhM01vfS03bm9YRVNtWWpjCno9e2ZjaXJWPU05JFR7fGdCIWBiUTNETUVlSHQ1KytYP3Mp
bnp6dlZGK3Jmc2NhSU1tX182dWpYZSNEVDRrYDBGbwp6dXRCNWE4SFBuUlhwa2hnQjlHKGtKSWFi
cVJ9ekk7LUZ2bHFDSnwoaiVeVUJCSmd8RV47N0J2Iyh7SUh5dmBjMioKemIySTw2Um9JdnkkZCM2
bm1OYVpmUGVYcWw8LStHaGV+PGJxbzwwIzkqN05+KHR6X2JsKSNKOWdwfFV+R2JseXs0CnprQnkp
dGZtYDZ3PzJjc1opSGQzdVVsejE1ISFwNGVrNmdOQnE+PWh7YkBMPGtFMn5qMUQ4fFdtMVB9PDF3
SmU2PQp6NShLZ2lvdT51Z0dYTUxQJXJRITx8QV5tLWR3d2tQeTlvN29SNUBfUiF9SzhqVHg5LXUl
MmdfJmpnZyZWVX15fT8KekFUclNCZXZBZU81USg2UXZXQyV0WktveDNSTjR4aDREN2ZpQ2AzQ05B
T21kUl9BZ2JEeVk2c1dIeDUzdXJxa0lMCno2VDtFMGMleiYxdGdSKmhSKmZWQy07IVl0WWkoZD1G
UlAlUD5oNVVEXnh8UnsmQ0pAeFNoP2JWcFN1RXFnZW9ARwp6S3h8M0VBTlcxTUd8YXY8MFR4anJz
ZTtfOUk7bUFFbl8/LShITDtMQnRBJDN6Q0NBbXJWZEY/T0BCfSteZEYrZWYKelVTTSZ0MH0mNW5x
UCVfaERJPTJVcHU2UWZYaWdUYjtEQzhvbE5gRk48fUhlKjh7clEmZEY9Wms7NmJZfHdkRWZaCnpV
Yy1nS2cjMz1aajVPMlhtSjAyfis/OTxVcExzWTVgQUs2PV4pXyRmS3ohPjRVRyY+K2xebSlBaGd0
QSZxT194PAp6VUc1e0Y1QmR9emQhPl9KTTVDd1BMIU9nMXRjQ0NzT19FNE5RWngpIThLeyZtZGE9
KW5AdUJteTxFdEIwUkhJekUKektRXk9iVmp2K1RtRnkmZ1o3JCYqO1BBTiNWcGpfNnt+JHJBYVdh
SSRBOCVTKFRtPTd4SyhIPlBkYHEmXiV5byklCnppVlNWZGJ+VmU1Mz1yc3VXe1AlNEtebkxiSWJg
TVBQNytuMmhnZVg5NGwwMkFNO3dPJnVNfD9tPlJDI0FxLWcjYgp6PEY4dj5nRnBoTFNtaFdDTm4+
VH5zI3paZTFre0tOYEs9IVheKU8odHZvRlYwc2xoajI+VTxEMEx8VG9BPFRPRXsKemQyKW8kaVRf
eHJZO3hkV15tYFQhUnU8N1BOIU16dHBkXkYhQXQ2Y0NBOUZyPDArdV5qVEowRCRBPT1qMT52STEt
Cnp6dzluYylOdVlwLTZpbDNSbj9BNEpNTyVOOz5BKVI4eDxhYUBRNShFSlpIYV9FZFBRNUlBPTdu
QkNjP3hhQVlVQwp6UmR6e1JaTUxmRUBOVDYoeFFsND9zZUk1eCpheTZDMkA5UGshRD9BQ3lMVHBt
d19CTjg3OCtMQCZHWndHK1lSXnQKekFLKT4kJXhgaHJGeXB0YjxnVVUmYDNSOWFAQntOdVpoe0Bt
JVdzPW49ZlhiKjloQkIzdGcteiZLV2U0c3kpeWF3Cnp5e3IlR2Q7MVR8dDlxfFgyNkgqZmhrSkFM
cHdUQXRJd3M1TzUjMUlmMkBQQ3A0ei07KisxKUU2cCZ4fkg4ez9aZAp6bm54cyE9VGdKTXk7Vz0m
V21gYHskZmhyVEAhaHVoV05LNjQxcH59dnJrS0QrKU1genJ1ZVBHWDxiM2N2TmMyPSEKejMpVSZf
aD5oTD4oR2VqajVQZCFSTnk+ZC1DYXpANiVHOHkrSitXZUc5TH48fERHI0ImdmJ8enkrc29zVSg1
Tm82Cno0Zk4kTFZ6MUxGe3FnPkhzTjQ3NFR0QyVkWnx6Qj1faXliNUhtcVViamlTZCUmcGEyOGRL
JmVTb215ZC1FfGJTQwp6Q3AxfnF4QlV6aUItdGZHeShNUCF8TH1CMjk8UFV3ekh3RXt1WDhfTFR1
bG9raDJoSlA1bnNYSUF8YEROcC1BITgKeipVLSMka2lSJi1teGFQQHNHZ35GbXZmTHdyeFUpO2J+
WSt8TDtIMypoKUxTbSV2KmVASChhMHFITCFDeV98ViE1Cno4dUJzfnZVbzVGeE9xNndmZTZubThA
RHlRd0FhUG5Jc1Fpe2QjQ28kPlNnPDtFdXl2TGxtPFotPW5tYGBufWBTJQp6KmRaT1pfPlA0Iz9m
UHxSYUI5ckNhbldYKm9rQjlnYDFrTlRnK0RzI0pZQXtgRm99QiVPXjRxSlc8MGkzZ2pzcUMKeisw
NTd4XyEoTSVvfUtqKHpsY0JYcmpPQmJXeXBOd2FjKmhQUm4qOy04aTYhTnR6WVJ2R0JCbFo8JWU3
MDEjJHN0CnojJVpDTzZkKlAtNExVQFhfSGY5UlpeODc+JDReXl41Kl5ONVAmSVQxTT1fYEJnX1RP
b0tsS1hqS1Q5I2lkTClsMgp6d3lANzw/TWF5KjdyeCN+WUxJRSpldFktPjlyKiRFRDh6P2IlZXZx
KFZGdjkrTE5HQlIzc19UNy1yLXkkSDVjSy0KekwtQiU+ci1MJU5VJUIyWDU5aDMteTFrJDlWa2Ir
NGVeJjIpOTtqeVclbnBjfDNSeDJ6PFVRT08+RCF8dERmUUdGCno3Sjw1KXhDQCo8N2Y5LWBFUjRQ
JFdtSWprQVAjJHJ5NlA5Xk4xYTllMmZTMU9eNmIzTD1SYyZZXl97ZEl6P3RndQp6N0JZOHdUM2Ji
XyF1NWpXYnk3R0VaPHBUWEJuZ0R5dTcwI09tUmRDMEA0fVcpQyRNbmYySmw2K0koXnF4WEo4TmcK
eklfbkZhTGBvc1M1cjhWejR6OXBTbEohNXYqSzJnQjM2VzRsSGFpKlpfTClkWk81VWVqN1Y2YDdj
NGpgZEVVOTxUCno/ZW4+ZWhlTCYwVSoyMnxPQWRZPzxgPzRxOWteKDReKnFRSHdAO15BcVYwOHlU
PiomVExVWHR1UzJvUlgmMV5wJQp6WCV4TUhNfVl0e1RlfWpDdz1VY3ljX31rPytCWm5vOFlaaEFV
eDUrZHhwMm9YZDtzR14kUmFNVCQmcjclNCNxQCgKejdycElUYE14d2Z6ZDtObjM0Xzd8JEcmNVJJ
bzRiM1N9UGhMRHdoe1ZNe0JXYlI3e2ZtJlJxaUNDY3pSeFlRayhGCnoxITw3IVB4ZykoOGV5YURO
ZGokTVotWnwkWHhqPGQ3QjA5O2tkeDFVXzE0c2dTaTBTdHdlQFFKZkhNM3AxajEpewp6NWdIKW9X
THdDRmlVOTQ0MDYlTmQ7enU1U0dZZUsoTlgtT2RQKFZReyE3ckkjSG5XX345M2F5fjQlS2ZoOXQ5
ZikKendCQiR7cz9we28wR1Q4LUtrWEY4R2BiYzB7MjU4KTx4OU9SVH0ybDh4JktOdzlgczxJPkNX
VFB1JFledjNiNXYtCnpfKyZhWD50ez09K0o2T0o4VCZPcmgoPHVSayVSMyp3YSlrWjlZVXBma1Zt
bm4mbzQzdlI3cUxCWV92LVg5ay1Uagp6UWpWZEdpfiMkMD1nQVZ0TCV6YShKQWQxfXppO0lLe0M4
RWFnRWc/aDdtM0R7PT9pZ1klPEFTVXdMM2lYMik1LWkKeml+fHw1SmY5T2luLWplIWRhUXB3ZTEx
fVd6R0socy0mUjxOSD0/PFZfQiEhKkc3e0orS2lATi0oNDgzOUM1OU50CnpzdkBec3t6X0Q4XyQ5
ezk0VTxuIXpBcGNvO0JPMF91U1ZYMWR7TjZDTmlvUyN5fChQcFVeVC18MDQ+YGBeYEd+Zwp6USQ/
TGBveVU2ViFKMmg8cy04ZVRKKmZma3dUX0B5e2hGczVDdjlOQj8mbnpjeG1pdlZsPT5tTWcjKHRg
P3VgWCQKelFCUktsK0RKSi1gQ30rQEFIaGR7NH5sVzs0Vzg7PDMrUTJ8dUdGbygxVzYxJXI/fHAx
bzglNW9YaH1BejkwcFRLCnpzdiZ2X3B3MjZ+ZDBLO3FLMmpZSDVAbmhzMEdzRil5T0h1PWdKX1h+
QStMN2FFUUc9OEV6dGY3I0pKJHBnd0NWRAp6bHgldzNlaHJuOEE7fD1OY0hQakR2YSsoR3FXZ1Eh
PmJWc29YM0t4JnZrVnJreFkhIXFvfWk+OUh8a1o5MnRUeyMKenMrT2YzNlc3cGwpbXwrSkV1WVJI
UXxXR19qfVhXISF8fnxvNyR2PFhMMDd2WD84RHp8cXpFYUspeHpgOE1VYjVPCnpzKEJwT1RgZ0hG
RGtLPn0+ZzBBMShGXzwqRnJxSz9tKnAxO2xhM3cqXmsoOHRLR2REe0JxdFJjSDFHVmJgWntGZgp6
Y0daU0U/X1JEdXBXRGJKV19ARFJmUD5RT2kzV3lRWnF9aFQ8KWd3LVZkZmhhb31Yaj1CTX1+Vish
VkZGZUN9d1kKeiQ1MklReUcoUj1JRExieGxGeHkmWnVyek9VVjE3IWM2S3opQ2FpeCkyLUExSW5S
NkRHWFdEWHkhcGk7N29sIUtECnooWHpjNS0kbntqZn5WM1VVOC1IJCN1NSNQJX4+XyhSKTFpV2c4
NWJfVUBrOTJVSTRCLUhaZUU+KGsjZ0U+eGp8MAp6aEV7O04qQ2pnanpBcmM9RDk5b0RMSHpRcEda
OCNPKSFESVgxRlFgKWRzS1hCXzstUERyeX1LcCNGbUBZdz9OKXAKellEYD8pVEM+QXdqeFlPWHZ9
RkJUTl85YUg8R0RUTElhX2c/KlAoUn4qKT1MYEhTNCk2T3FiKiFMPjQkNjIqJnY/CnpOPTFXTiZV
KGk4VXNKcmFoKlhfVShlX0hva05fdipiKjt7RzZtezduU3J7T1E4OGpqNzloTz0/VUc4b3grLWYy
Ygp6QHgtWHJCUCZfJnF9QkNocl8tYy1oSm9eWnVpVio3aSolZF96Xk9ZWWt9JkFCKWJYdW5gQSRB
RUQyZzBze25zWj4Kem0tU2x7bH5vcTFkdnx5WnowdDhtanxkP25xNDtEYmp9dkJkIWotfWFuOzEw
Pk9pamdNKit1ZVhYTW1wTEAzN0N3Cno8ZjgyczJ8aiF+NmBpXyVAOUljITtFJXR1ek8rM2lifT9R
OV5VezhkJjNKYkF5PjNvYE4lXlEpVEVyPSo7QzhvZgp6ISo8c2laPihlPyktbFdFVH15KHBkUU1P
Kmo5bmF6bHdxZkQtTSp2cD53TkZAPmxFUF83WWNyT0lgKjg+JjJAVjEKentBP19SOHJ3RGYxKHxR
VS0jOXZjcT9SZzdCfHZgMSQ4SUVyOGEpeHZrYTRyfWteVHl8MFFDPjhINlBUVzFSTTVECnpqMz4k
NE5hV2ZYbHYwMl4mJXQqcDJTcEpIUWNRfUYmdHFyanlnc3gmUiE/UyNsX19Kc0toJWR4UnNOLVk5
aFRRewp6TCl2WCtEKT0tKld5YXZzX1U2LT40ITQ9bnFZdHJ0YG1CKHJSLVpwYzE0cVl4XkdafEhL
cmdpcXp+JVlQOyRfcWAKencyRUdZd29BdmxhRHM4P0B6dmBxREU9VkVeX1dffWZJMyVJJVd9Njt6
NGNkQW9LQWIjMVdEcnhZSWJ8Yk5KYDYlCnooLWhyeWp7XmZuIyE9QD5uQXRjMGY1ZyYkeTU9YldL
SyVPKzBFU18kKzh3KTwkKll4a1drWV9BUV5uRXg8TD4kRwp6bXhePjdgX1FAajRGJFRAOSZ9LWA+
U01hMElpRHtrcFohQWBRZXFDbThvM1o8YXtjMjNFV01AJmktfk9LV1d3cGkKenBeRn5zKSlQcSEl
ZzRAI3wxNEUoZCg3byhjOUYpM3w1Jjh2NkxNI09wNSV4eUY2MD5mI3hYSSlRSlU9bTBZanBOCno3
d340P3l4Mm93fEhQfHRXYUFAeFV8cCFzZzdRMT9rPmQ/RnBuMjNCZ3xnez9hOU1wKHAwK2l0TXtp
fUNle1doVgp6d3ApUjlzLXNUZGRxWkNgYm0md0xVPnZ6diQ8X3xwck8wa3pJTmxxTHlZa31ON3Yh
X0NgZWFwYWYrTTgxYyMrO0QKem92JjRnYHlJK3s8cjFURHMkdF5kY0leIUMpTilaWDdRSSZwYDQz
OVcyWWprISZxI0t2RilnZT5ZcEIhUHg9SGRJCno5I05Od2g5KEMkN3EjfVM+XkVtIUJUMStlYVgk
VnpeTDB2UDlwMkVwei15MihXdjU1amJoUUd7TmwlXnNPUztUYgp6UFRaQyRxUylzbG40amhFYEVp
bnNOQjh5Z3VoOF8zPlpuO0V5ZHBARSo5XztMdVFHK3BjcWlTQTFvTU02Wnd+MFIKenZrc00yUiNY
Z3BkNE1AbEk3fHZRSjlabEp2UD12JTE3S2F+Kjd1QFQhbG5Sa2xJVkpzKGFPMnBXJCR2PV4qSyhZ
CnopbX5wOylRP3MyN15RZFNTOHxHcUN2XzdzbWJRUWklb2gyPnh2WUs2QEEjeiZTI0VidWY3N1Je
XkJHaUtWQzFSNwp6TzMyU2lwcigkVWdnaUt6SD1UKH5LNXdheyZZXlBgSmFhUjRXJU1OaldsKjZE
c0IwTkNWUFd2Y2ppbz5oRDltWFcKenRfQTdgcjV+cjgqPj45OygyZ0VESipyU3pfdW5aTiEqJjEp
JXIxXm5mUy1HeFU8bHdmX28yTVNRPU1renl9PlVACno1KXUkaCpuRUtSV3Rhd2NJPk9LJig5YFUx
VH5KJT07aExVa0gpdnk3KzJpZF4tPTN3VUkpVGN2dllRUjBXSSRycgp6aUgqbTI3M2s2PmImKnBi
KEpnVyQzQ0dxKDMjbHhKUFd3ZyFvNUdISkNsfHVqRlFjc25FVG59TXVtPG9AMUp9emEKel90Unxi
ZmFCPXF2QlMmfTF1JT0kcGlhQHAtZ1hCfTtqNzF7dHNrY0p1UXVLWlZWRkhNUSYmXi1vNFFOd1c5
SyV6CnozKUAkITc+UkE9IUgmLXU2fFZ4eE9NUGY8T3Z3fS0pdnFjUHMhRShXdntrSkxBYD8oWih2
Rz8mMn5lbVQ0VWBTJgp6bWFhKyt0TUNeJVMmKDJtX010SyhZMXljQyl9SGM3THJmdiZXeyFmQHhx
eXMoPGVaJWArRDxHQEBoVE87Q31MVW0Kenl5MihsSE9PSTwmMFhgR0JWXjJCVCUoKXVNUXI+byRA
Y1ZASzdGdGB7fHlOUlotTSpeYEV2VmpTNTNKZGxXX1FCCno1ckNqaUl4ZXkxdFFgfnFQKElTJXAz
IVY/S21kNmZ0YzROfGpDa0sqNFdQdGZLcTlveXlRSkl4KElwNlNLITg2bQp6MCslJFNQZkJfKEE4
RGgjZElANWtWMHJQYDI+RHFWJEJ2b1opfDMqdlM/ejVPa247NmcmWk9WZEs4M3xkSUAxdF8Keilu
cHl6S1BtcDxlNz5LOXs0VX1IPFdxfT1vdG56SHJQfX5QO3ZKYjlLMShyJl5AbyNycldwUXM8QlFH
SDQpZEZyCnpzeV9EMDFmVzdYZ2FCZTRwKX5zdiRRcWNfU3h6WV8kakAoPCQ5RERKPUZjaCVeezlQ
P0o2TERjVz8lTUVNX2omUwp6YW4kQmglcVhzYzxFdklWMzc/KyRjY2UrT2k4S3JeNlNRVGEhISRW
RHp5SX5xeXtrViZDVmRHWWcjfmArQnZ0SCQKenslQGdCSmUraihNQlE1QGIwZzBvSFIzVGhuPENW
NDk2MFgzQHVqP1NmbiFHTUhsKDM0Zmp0YisqKikzckNAaV9rCnpBTH4rd3FJbHN6Z0RMQSNraXpr
ZXREZkFtZytAe0lwNSlObmk3eFJVSj1ab284WjN1SEFncU9jMEIkQmw/bUVlVAp6bj4wSThOfXVD
X3RQfWw1KnJ7MyVwTFZGTkRobUAxSmB7cExUcG9ANk14KHRuJlBjTFcmRk9wcSEyTUB0PiQ/aCkK
ek8lKWljWnl2M3RVT0A4YyNRTHRzSnpSKEhtR2F+Jm5aaDV0UldkXiRmfG5gZ1pPbFp0IzlfNnVP
Nnx6MEg0Mm9QCnpSXypPQ0h6MitubEphOV9gNVYlPEowQTU9QlI5Zl9jR2l2e0BJOGg3a1JJPmVP
d0lobyUlYmBIdTlnKkltfDF9eAp6MnZ9NyNiMiElM14tXzlIZGN8a0pucF9BU2ZOSjRlRjBpJTk1
IytRJUllSEpBWFY0K1EmO0xAKmgmclU+T3JLYVAKemdISHMlV35ZY0toYGN5X0AzRm9ENyUqMms3
Y31hYGxpNVg+b1I5UGVfRitIOSV4K29aYkIpJnRhdnZaT3o8b1FGCnp2WFN9UHdXPXBIRTVJKGo1
TGdjYFEhbyZCUT9gVEJ0anB9JHhuM3dBUDtTTVclTClLWCs/KG9UM0JNVmMhc34lOAp6SzdMbnhN
Y2lac3R6QG9sanR6RigzZStuKzBPOXxRRDtfYzReO1grdjkmYmBHUF5kYXdVSXJmRHR1QDs4d1ct
bFgKei0rci1EUkNpNmQqVUYhazxoR1k5aFg+fiFnPVRTK2BLSE0zVkY2RXR7aCRDLSZHcm17biUr
RXJRIzZkXmFsSSZCCnokaTBOMFhTUWBqbSVFeXU3OVJfU0l7YF5AQkxPVUtMYjVLbiFeenBYWWNp
PWEyWXtAKlptd1RhPFZCPWg+VzRVOAp6PzUkX1oxTTdnOzJ6aXh2O0BIPWA1R2FgfE5wYmYyIUty
UT8hJDMzJDxzXkgjRUFTUzVvJHBoZCF+Nnt1NnxfKmIKelptbSM3X1hQY3FVPSNnKCRqYT42RT0w
PHcyVFFiQkR5PUEyN2B1ZEFLakEmWDVGYjhmczZiQXZsMnRyT1diQ2g/CnowRmNMdj02Uio5TSk2
YUxqfldKZiZxbSQkamt2KnNtT2BuQVFNRGVFJWFQZFphM0V9YnZjSlFAMjRaSGdVUHZ+JQp6R1Ny
Q2pgJmRtekMzeiV8TFE7U1oodCNFMWhacE16SmEwO2U4KmxRP2ptWWtZMiQ1OEZqSXFsITt0ZmJQ
Sm8tU2IKemU0ND8lU2ghREI+XnZlVGBCblgwIVZDSzI7NmJFQ0xSTj8mcjNoZVkwelJYV1o2K3w3
KXg+Qm9LWi0tdCVWJVYzCnp1TjQmI3RiSnZRRHI5MnVEPSQhUi1mXjJIdz5iJD1vdjJFfCFqN28q
a0heTEFlT0FYflBKUEY8aFJAdD13JTAheQp6UWFUPGpOe0NSRldAem1pbVgmOWVLV01veTRIJHlv
IW9xXmRmZWwhZTQyK2gyKmpBQEpScCV9VSRZdzZ6OHo8PFkKejA4ZmAqWnloVDc+P20taXpYUElq
aT4tITA5fV9ncmxvamlvSGE4ezZWfUJuRU01TU9sJkFYdHNIYFUjMCtqNkNjCnpAWnxJP3c/cH5P
eUd0YVRLbzx+Z2tyMkh7Z29ee2plbX1VTlBDY0deNV9XRVc4VH1HTktoYlB7dDJlazhZKXlOaQp6
Z2IhflNgVy1sPVNOR01eNmtuZnhTOyNCWCVCb1o+SSFPcjgza2VGU1kxeVZjYkFmTHd7KyF6NjZf
Ui04NWU1a0QKeiQmKz5BOFpaTV56WUVRQ0lePSl6VDV5KWs/ZGR3P1d5dzwjUSNnI3s0QE9HTj19
eFpMX3A7YnRIIXprUkhEWX1ZCnolPVQwNllOenpTNjlabCZwenx3eUhzNzU1Ynk0YThVSSNPKEhV
Y1YjRnxYMDctNFVuK0w4RUZBN2IzPmRwYmxJZwp6S0hmNzFjN1dCRSsyITh9MHUmMHlJNFo4WVJl
Y0soKSpgczB2eGAkVU8xNzl5dnV3MEpXXjMkazFzSUBmWHFwYlEKejZWSXA+b2JCTzNBWCp3fVo9
SHY0TWx2aSQxRCgkTSNQY0ZDJmpMNkEhMW0qVzd4dnxVVnRQYDE3OFZ4aFZ8KHsrCnpETkdtajco
SSE5RlU5MUZySWxSWilJaHpFcUpqYndjJkFJbDxseFIwKWQjViFfVF9aUT9tdnEoZFcodyhOciFS
eQp6PnZlOGQ8eTIyIU5VJSN9UC1LOGFwUFIxP1R2bVp2dzlUeWkxTjtlKzVtPSRmNXhzRi0wNF5+
dTNAfj1QP0xtV1cKemlmMUlpe1V9SGZ7ZCl2XmFpKU8qTi17NzJvNT49Pjs5RUIkSkMoazM1UiZY
ez9IIT5lWGZSTTdIIzA/JF5hNzxvCno4QU9JRFlvTDs0NyFXVHVSI3ZvRTw4RHtuYHBGbmdGPHRn
ODdsSnEmQTQzdFJNPUJQPjtJTEc9N3U+Ni16ZlJBYAp6d2dJMlQ9eEkzcjRmSi0jIVl2dCskUXFQ
NyUje0NCPFUtJUxOQzczfF5ZZEV7Tl90Pjt6Ylg4cSMhKU5ZaHBPaTUKelRyY3w5MSQmM2pUfkhH
OzY+K0FUZXVpS3ptWkpyUmx5cnQySWBqNUNLdSpkNU03PigwVitlcX5kSHFDJFBtMjZgCnpNRTdF
dSo0cTVMJXojJmd2VD5SJEYyWkolNjY/VnE9ZClAKWNDUVI3KnRMOFl4c3p7U2UjKEk5NjZmKn51
b2lnJgp6ZW1hT2kyZSgrJV88K3FxTXFrTF5gTGotUXltNEg0Y05qKXtYNm0ocWo9ST1PO1F6Zjdn
SC0kISpRa2hZVj95UV8KeiFwRDFKeCthcVBgRTMrPkNLRD9BK200cyFmRGtPbkYzIU5GSyM1VTk2
NnM9a3ROPzJxPiZYdHErQlVuRkg/JVNvCnp6YktrOzkkd1EwY25+bVFZTStoUSQxbkpWWlYpJSNz
WCgmdVo7cHcpMk5qflZXKns/X0Z4MjljUVUzciVHKnp8eQp6M2JwNG9Jel88QnJ0YGxwWld5dHNp
Ymh7eE5zPyt4PlpZbTk+KHV4czxFTVZEX2twJXZ2ZipZMjV9YT4yUmIyRzAKeiEkdnEqZ050ejdp
S2l0cEFOYUg5NyU+dCM3ZEpDU2VFcjxUNFk+eF5KWXVtUzRTb24tcG85TzJ2aT9MfG5oMVhCCnpC
X1FZK3ZjQC1yKl5DQkYxV30yKWRwKzBJSzNAOTx2ZmJnd3Y3fS17LThmU14rdT9GaGcmYWBee3Qw
NSRfRVd5ewp6V1R1NFR6eDRTcUVCLXokYjlrcWBrNFFxN0RYJl9TJkM7RXIzRWckSU1fd0xIRUk9
YDkkbkgqN3U/VHAkQGJjXlEKel9ldExMbXtzOWtaM1V2T0w5V2d5Q0NtQktOQzdvKUxZX29qaGth
bEYpZUNVPzgoUD57M1QrTmw9V1l3bTM+WSEqCno9UExzQVR8QSopX0g8cFh2K1BsbUY7SjEkTDxk
Q3k5fWJ8a1drP2I3Z2hKYyErTnxMOUxqWmx4P3JOPDh0LXBVTgp6T0xDRzE5Qml4IzEoSE50T0Fq
RX1ocWdkOEhTT1cxTmRoJWxmWUwkNFdlYGN5Rmg/eSRTRVdgMFFmPDBuPH00M1IKejgpejItaCNf
fWpYTGxLUW1FQzckT1E5KHNUXmtKPmdUJmYmYz9La1NQeXF4P0J7YFRlaT1JdXZkVHteKk9ONTs9
Cnp8NEphNTdSYH5NKn1qaCZxJmFndzJIZXxZQk0wYjVLeXpSdyNmU0V9WEwzMWxiOG1ORkVYQil1
Pl9OdTQjcmQqaQp6aFNoTjV4dFdMP3Fla2FiSXclZFNFVExlUjVrdkt3WEhSZXMzP1huKHRwYj1J
UCZvKmpVak4kcSlsZlVuK1hmMWIKekt+ZXlvOU91bG51bzktK3kkMypvKDw1NXdiOTRWSUp3KUc4
QV51Pz5LcypAS1YjISlCaSZnUzczO0B5Xjc9cCp+CnpxVTJzd2w4ZHBPPXtJY1Jjdn1vOGx7X2V0
dmFWJEB7T31UKSFoV2p7U1dac1N8NXo9R3oqO3tSeD19P0QwS2M3egp6RT40KTsxPTBscFQ+SkJg
MU1qJkE5N3llOFdxXl9lYjdBQlUwc3wlKFZ8QmFMI19hWiRvVk5FQHdFJD9FVEB9YXkKekF2aTdM
MGpCdWprfGFQWTB5KkwpZlZobiElTVhxMXthT1BpIVltM2Fob1VHMUlsdkFNNFNoVjUySnNwaVJW
aFFHCnpLfG9DP3ViMSRgQyVTXi0xXl4oTSpvcU1gVzckKC1HOSkkMkhFcFl8VWtVQ3A5O0FHdkEz
ZGtCTFd1NCk4STExbgp6Xyo+KGV3bndIZypqbFFaKkFxdFFWYURxUTFgbHIke2RKZWwtJko7UUxn
VH0zWXBoSEMkMzFgI3RnSUE4SHxyXz0Kek5NMm8hPT4pfDV3aHpsTWo5SVojZCY8JXQrVXlMUVBT
bUYzTVVxND5rXn5mWlJpJUt4NiZYfSNXOUVFZm0yejhpCnpjVEc8PmVDJWFjeEFKTDVkQj1rQVp0
X3pFPlZ7dGdpaWFxd3p+dFo7eH5XPGs4WER0aV96Kn0lJEBscnAtPCh2ZAp6WjxPZyYyeXlsUihQ
ZGdXKVBeVGIoeVFlXmJxJG9GTWJQTlgrRT9fcDN7bHNrKzB8Wm1iUnJVZnQoSngoSmtKM2AKenxC
RHw+SDV6ZS1WSyk5RyRleFRIU3lePEVnUkcyTTAzT0tlPlRpJWRJVTQtNj9iKzBGYFN3ez8yXndL
Uj45X2tDCnptQE5UWmNsa3RCVURxNj4tRjE8SnJBJEVlSURsO1h5V2taUD9DQWBudmw8T3puMXgx
dGxzYFR+Mzt2ZT84U1g2dgp6YT4/dVVTcStkflEtd1NxVzUqMihvITJFXnohbj01X2RNIUJWU2c/
KU0zQV5nX3pabXZPY1NJdFArfFRxKHhrXzcKelg4Tm5GenpTWXhyWFpfX2dOTCgjWD5kVm57aWxN
Jk5JZl5HbENBQVhiYz0oTVRqRXFnaSRCbH1NJDhGT3loMH5tCnpLTDtGcEhPQD5DYGNLVmQxNnwr
cUx4JkdyPWdqNSF7QzNPT0ErZyQzXlQmWWVMdWJqR2pFfjFwemRuQmtNXjBeMQp6Q1ZBY2p7U0Rs
WnhmZFdlQGpiaktydkhDXmJzVmx2Pnt6aDBybjwtd004Nlk3SCZESkhrcEdQPFhhZGs+QiEkNnQK
empUUTx6X2Q/S31va0JldHBjPF5MZWg8VkpvXjtgaHlyV3NUPCpJQjtYWnpBTk9Qc2d6USR3enNN
Plg7VzFoVzBqCnpnVElabnowZ2BPb1I+djJjMWRkel9rIzF+R21JNmtkSkEmYGdxbkdXP1Q0Kn12
ZCFlRjl0bWVmK0ZrfDJsTjJoNgp6MjI2dVpVVDZkXlh3OTBAKzk9aSkqREZaUWFgWEB7ZWtDVm1O
dUgmV1dUe01UPlBEQ2pTZkpvREI3U011WnUqfGIKemZkWTRIRnFfUEtLbSVSOyN2R0pMLXI7YXgt
Pzw5JHI4MFlXa3NTP3M0Nnh3ZUFtK31LPi1NIWVwQHFpTGREVEhMCnpIX1Uje1VXSlU1dVdwZitK
Rj14Izt1N1EpX1EoXzFmVHA3P3dHfDxxYiVSRDA7c0REX2tQI3hTYDlBWjdOMWpJTgp6TGI/aS16
Xm18QzlhPWhzZFBaJmBqVmRKYXsodTskemwhV1lwZ1V1cCpxdl8mPiQ1WiU+JEF4SWQxRit4K1BL
aUsKeioja0g2PTUwIWUkJnRsRzxfcytgKEdUUXAoaz9XMjdTdUdgP3VgQV5UQn16PlE7a0xZVHxB
Q1YlUVUkU1RqWCgjCnpZN2hyZmE8QFh9cUlVRihgIzFJRmBmc2t+KzJMPXYrKVcoLT4pMU15KW9X
KDtOa3QqXkoqTj91VDBhejtTfWpnPwp6ZiZ2MWxIS1NiV00jWXNfQXJRdmxVJipBQFMzUXMxbXVS
fWpGJHRoYz9jNDxwVHMzUFVfT0NMQWlIRFVVeEtrclAKemtlYFZZQShoaj0xRlByRCo7MU1NRnMx
dm1aZFQoJWQmYitaMkl6aEFQaGRmYz40QiV3Sz5pbCptWHQ5QXVBUWdUCnpRQjRCbz98WllXVTBR
NEgxQndrJCk3WnxWTzNhRDshRCM8dEl7I1ZRQHoycFRLd0xsI2llNlFUMFBHYFZBPD1uPwp6d0xG
Ri1AflApMVl7cioyejUkQEx4dnc8UD10em5yeGhUfXxNNXxIe1dfc2paPzRlP2ojbkhxclJCNTkh
Y1cxQFQKek5NSHRsRjFGI0hxWXIrPTx0fUQzVEBecmgrcXFkNyhCcjRHPFJIQ1J5Y3c5Zz1xTEVf
MWF2Nkx7cCpHJkVEV0dlCnpPI1l5eXNQJiNtTXtvY1QyYWwkK21pb0Z7ZispXyt7KE1xazRecXlI
aHR0djNZX35ucmR4eEIpQEwreF4rRUtxTgp6UTBoT3xjZSZ4NnZLTVEpYD9FUWpsPCRVQW1lUWl9
LXN7I0dBUVhKTkpreHQhIWdGZVVMJTVkKGBkQDNWZTgta1EKendXYCk5VExINUg8djRvfTAmM1Rz
aTxOIUBISEI1cEY0ZCk9RStFckAjdHxzZ21RJTxOO0M+O317Yn4kUnhNNmpNCnpxUnFybUF2d2dD
e0paQ0M1Q0ghfUc0Xzk2TDtVYVZ0WDxSVlV2UEwqNjgzdlROP3RsSVd7UmNWMllNNVd4b0xgZAp6
ckA3Z3BgfWNPdUNfNUFUUCUmV25wTk4wQ2cwN2E9WVVrZTdsYC0wWitBLVB8eStvdGFeY3xuPUly
OXAyTHhFfWgKemw7TWV3eyswZiNlZXVBcEpXM1U5KC0ybkl2Ykl4MUtDaE9BQ3N+PkZ2SD5oenQy
ZGs3XzN3ZFZ7TVRZeSU8a3E8CnpSVzhyYyE7Q1NITFFye3R1KG5vP1M9SEZPbXBhNkN1YUdzUUFH
cWxLdSN3NS04TyM9SC09LXZ2Y2cmbDM/K2d5Kgp6KH1KfUNMKlNvIVF0Z0RFUSUwYFNnUGd5e0Q5
aj9eJndhJXBSSEtLWE9TYT88YT5JcDs3fmVefTBJT1A4PVlIcHUKens1YGRIZEN5WGIxMnhYUDJ8
fSVWbW1yPk1yQEhiay0zI1MkMkcxJUZNbEk1YUs+eShZdiN3K0NNNnpxa3JJJW9DCnokWTtTaUNs
fFdlZFhWe1dFO3UwRkgxUSgwZ3IoYWNvYGlnbWBZV0UpYS19QWVFbCU5PSp8RXhVVTY8QVY+cWR0
QAp6JU9ycDhkZ3xmO0twQjRBOW9KRGQxeEVkKT1xSHJGWlMjND8tdmwkJWJJLW1EY1NWWmpoajFs
S1glPnJWPE5Yc3EKenspciN8I0UqYUMkM09Bb0FOPXRUe2BkIWZ7RFZMSztWPUwyN3ItazE7Vj1M
Mm13KXQrelhYemhecEQ+S3NzQiMtCnpgMUE5Ql5wRjFzbiEyTzwkKE9RJSFoKnxSKmkwJEV5VG41
dlUxRlpVSkFRKEloXi1pblJrKCMrIWhQQj9CV2V4ZAp6WD15SzwldXUoYitaK19WXnkhSTh7VDdk
IyVUTXEhRFJgZHxeWl5nQVpFVVN3enlBSytTQSpxT1FzQ3s8bz9pJj8Kel9SSEVZOCRHa2w/aHNK
b2FKNkdZQ1UyfVM3ZFEkK0t7Y3Z1WE1BVi1zb096dSgmVihqNWI0JmpkdSs2X3E+VnQxCnpgRFhw
ZDc9NV5IeCZBSyZuUXBZfklCS3JzUkFSJDV4PyhjQEB2NndBNDghWllnJjNCMl9ZfT1qJjMyOEJ4
WSU7Tgp6M1hWJSgqd2t5YE5feTArTFchV1AyM3xNMz1yTXElMW1xfCZaVFM9akc7Y05nYHZ8TUo+
VGtfbF9kfHZ8YEdAKVcKel47YCNDRFUtSzkrWCtfajNAJCNZY2hvUDtqXmp9bnJ7fnB9a1pscHZ5
YEdueDk2RlI7ODgjNntnenpxe2wldC1ZCnpON2JaOUlvaCVtU0l1QjFHTEpWe25LSyZhM0xTOCZk
K1NnUmkoTEkpWDQoQktQNjd6Yz8mYWhtX1hnOTJPSFkrKwp6QGp0d3MheTcoeFYjUmhfVEQ9KXde
V05YY2AwfntecGdDdm01TD9OYDMkeG1ReDFecXlya29xNlVAWH17JCtFRzMKei0qcDhAd1dIUjE8
Slh1ZVAqcWlSM1NrK0QrRGUoRmBvNj12b318dj5Xc2dAVWR4YG05aFRTe0FeeGR2aTlDamdrCnpn
UjAjOThgfkljZHEhMGI0RCN3VElMNEw7bHt4SH5ZMjBKRkUpTExVVlgzdl9aZ3p9KSVfPSlvXkht
Xiowd24rXgp6dShGISR5JWVedFVuXyV9U0wtZ2ooRGJhP0BAP0ZeM1Y5KWdoUlNtfExMUyk5c04k
KmZBVUpxJGJvUFp+WiEra3MKeis8KHttdi1jO0tjUH1nNzMkcntuWGEmOTVLIzhha2RmKk92RyVs
TEo8VjhXOTVXSjs+cGhCYj5LT2hPNTIkSXVECnpwKiglPHc0VDk5QX0jVmx0N0VBMHlxLUtZT3Va
bnQ9Ml8mUT98amFgR2pZM0xwOVUzJlN5NiQwJC1+eCopJlN5RQp6bmp0TWdRan48ZDRLYWhjb1h2
dXl5M3R+SE5KSVFgJWpkYVg7Z2lHMmIyOWt5c34/Kmt5V2wwVHVMY35hJnB9XiYKem41Ujg8X1RG
eygjbSRpNkg5Ml92NUkrQClzeWZIMnVxdEhFWFJkei0pWG02fFdPdU8jKTE0Q3V0TnZBKzZ6WXZu
Cnp7MndjWWklQ0E4SmV7MXApc1Q/JkJEUlMpSDR6a0JpLSliKTVgbDhRUyt0NCUheWpTMEVGYEY9
djRTaDA3Vkd0Swp6LT1wRTNJYlApdT07V3heK3VCQ1k2dlVFNl9GaGtoQmElX1MrUnZaclkzI0E2
QDZaXldvIWYwO2pnJEMjX3xBVTEKejQ8QFpETzttbXd2ckhkYT9RMUQwT3N2UXgoJmpSWjUmZlpk
PE02WUBCWkdaPkdEa20mVE11TiEyMXtqYElzRjMtCnpzK0kyYU40NlZzbSp1fVA4dSl9OHNOJGxv
Jlo4Qjx1OVFjNEV3ZGFwUjZaYWpMU3xKaCR8aWdkdnBFfl9SQ2Q9Wgp6TXdJT2NjakYzWjF0RTAx
XzxzVEIrKS0wWS1MNns9TjBYaXFlI0tSWjw3VDJ+NWV0Mz0/Pl4hfG52TCE0KiZzaUMKekdJZEU/
QjZ+PzdIO00/LThSZklHP35VSlUkNHtBfjc5KTlmMURffFBicnp6Q0VxM1Q+ciZAc2ExfXVHKUJv
IUFrCno8NWZRIVI5M3A3ajNDRm8xZ1QrQENseX52Nm9eZV5ld2teVV5wRnl0eHFzYk9PJjlnRlVO
NFMyVERpbyVSNHtnJAp6O2g3Nj41LVJXeHpvLX55ZH1INUl0RGNHWjUzPChZTjgkPWVER05DSUVp
IX15PG54a3F6NnJAbjg/ZihDWm4/Vn0Kek52XkZjO3cleHA5LW98PHBPNkpnU1AkfUd0e19XSz1p
UT1pJXg+KHxvekQ7TFNBRygqViY8MG1sKX4ocEY7Uk1lCnpTc2ArOWM1S2xxNzMkKmk1UkpndXow
VGktPSU4QXQkKyRQJTtfZ31oUmdyQH5nO2V9eVcwdEdzdm0zYXpzVHdNdAp6UUk2JWVBVGgzbkZf
XyZxVCRqX24tZX0/PVleckQmcjA8Z1FJR1NxRk5VZ3dtK01pOVlUXlR5amdhY192YmxHc2EKelg3
Uk9oUE0tUlpMPH1Adm0wcDhiX2whWDliMExfLUdyMXByeGJwbF5lWjN2RXpHblQzZ1NQOUB4PG9B
Pnt+d2UhCnpiN0EmakhwSGY1cEhsSVdAdGBeWD4pdGNTUlUkdWJubjI0cXIyLXF5STlaaV5PfTZz
SCtxYkROTDhQTz1aalpxPQp6YF5WfTk8PU0zXjZgNF55PWM9K3lUS1pfZC19bV89M0RMU1heQ0tP
S1ZWOUNGcWYqS203UzVoVHtEWWdYSl9TdjUKemBFfm9wQFgoNHllbGQ3QExoV2FVVSRONUNpK09Z
Wj5mOEl3dk8/NlptWDgtRW0lMzVJRCZJK0p4TnVKMiUpNkRqCno9eCF7eF5tO05XZUkkcTJpYXNr
KjlVbi1MNFMwaVdqPlQ7dikhUFUlZTNrOSlTJmtaSj9+KmRXPX1JWjVUWVVYewp6dypHXmIyajBg
Y0E+dT5CI3A+cGtTfVk2OGVJZVBCOCtCVGMyczJ0Xk93azQjJEZub3ojXzYxfFc2cVdCc3BrKHgK
ekFJKXA5cyhwQHNkUmJMMkRZNFVSP0BQaVpwU1EqQ2plZ2xIO0kzJXsjWGBHU048NDVmb013Uyoo
KGo9ZUByeWJQCnokSmZybkdCXnBOMUx6V1lwNDk1T0dGNWxXZXlmTUZuaHxgb2ImWmRzNFpMQWdz
NDtzS1BXWCNORU5aU3o+MV9xSgp6bDxxYDRXXkZkZXw4Wmg8ajJGM2F0eUFUbGM/MDcpaUI+aUxo
VGJBPnlVKFFCTiQxT2I7bzBmfWF7Yzd4RWhDTSkKekZlYX1EMXVoSEB3JDkmOz9IOXIpeTJNc21e
V3d4QmFQUTxCeHQ1PFBgPHlldUowezZwYzwoTT5oWiZKe3kkUmR3CnorNmxSVHdkQGc3VDF3MWlV
blFoRGtCI0xsZ1BSTGBociVgJWNnbSRDXnk0T29JOFdpZWlwfDR3JF50PCtrZElHbQp6bTsoQXxq
Vjd9YilNKzFOZl8/MStAMEM4TUBFO0xnJDM3PXlTNHtGbDNWbEg2QkhFKTlOMCpFUShBQkVydDhp
NXMKemgyfmded3x+UyZnfSpUc2k8RWtWMUNmeXBKaG1+VWB7WSNGbDQrWiVHXzJHWWYodn43WCVz
Z21Qbz1jZC04SzBjCnpfcl5UbzYjLSZiLT9rclQlVUxmSXZrfV5lTE9pWVVOejRBYm0mJSVmPDUq
aGAkYlpfZ3xGTFBKSmdtZW1jUHBxdwp6YUNCTHtfaDc5ZT5GNElRK1lzJjZ7VmxoZ0NkVz4kYjkh
SnZNX2kpck0tIzQzQz5aVVVHbUVtWS1lO3ZmdHp9Y0QKenRZKlAyTWxhKHxNMGM7bGQweEMhbklM
ZV5RQW5rMzxPOURxdkVPQSp7ajlTJGwyfnJ1b3dBSnhYcV8jRCt2O04wCnokRkw9MFQ3ME1Ce2tg
bnpSQEI8WXI1ZiRod1d1ams3eCNrUW8lWWZXPEJXSS1ybDM1SnlnY2xUMTd1X3UkeDB1Kwp6dk9C
VWNnKzFnWUxmSnhtKk1eSHlgUnZtUj5JKmlyMWZGRWB2N1RUfmQhO0g/YkQyQmw7PVlKcEhqWnh2
UHJpcUcKek94PF9gdj1NcjNRdUg4JUokYnd5KU8jR1A5PFVkdHM/JFFPZjBifHdrVyozTFBEJWIp
a0RmfVIhVntjKzFLbSteCnpLY21tOStMXkMwYkNgeTZTUkRxbz1qNWxqb0swI0AlVio4UmBlX0tj
RU5gYzZxaEJ2M3ozPnBRRElYbWc4eHBnWAp6JEJrfm9nJUNDa0ckXlZjPkBqenBZRDdHNXB1KVRV
TzhXe1ZKREp+VVM8I0tMOXpFRHFzdUFLSWxiZkc9M3NzQlEKeih9aj0zOXhJNEZ4MXNofWNwVDJy
bHVERyE9V2V2U0NjUnxVSiZrKFgrbW9TUFchcWIhcnBlekVYOGJEUzZAS2xPCnohPlJjUjFHPGc8
e0ZIOHd2RHw4eT9WVGBucHV7OS15amp2ME5SWHNsZVVOdzVHfStQSEt9MUI8O19XTmJTKVElbQp6
VjtgPUViS3JzeGk0aillNWYre31RTTA8dSNOenFjVDBuVEIzYElBIVFzMyhNbiF7fXFUUlRoaEJO
PkBmPiExQWsKenhneS1SRn1nNyFBJVJ1OXM8fD1iNT0wMHh8NGl4Wkg5QXBwSTdVPVFvfF5WSikm
fT1rK0AtcD83aVhVKGEzeVpjCnpPOXBSY1VXYV9hPHJXOT1zZnN4JT56a018eDZjQWRKRW9BeW9k
PnsldUQqVHM/dG01LXhjSVhoSFlGK1ZGOU9ybQp6YmZUZj9pd3woMFJyR0ZITmNWRj9vKVNPaXg7
XjlmTVBjX0YoRjNtTnVSWXEoaXlPPHR6OHdEUiVRRGBNQGdKeyMKel4hKnJzZG8yN0tfWmp8NjFy
cEg7RmgpZHtOdXgqOXdTWWlJNCRfQmpyNXhPLVZLKnxiLXJed1RAK3sqWnhoSGZECnpCKjhiRVpK
bVNiYDEpNmlpfWtQNVVyb0l9ak1CTGQhNDM7Tz1MRUA1SSU+QUdXPHloWj1TI0RaIzUmKXY4UDYk
Swp6KkFHKW5lSWNaUTsrQj97XyVYcDtNJHA4N1crO2B2O1BocTxodCR8eCN0MDk9IztfOzJ3Um51
WUR4RygtTHQrZisKeno+YGVoXmBiKiltYiVFeWV0Z1lLRWRwPGlAfjlfckM0XnZuJEpJOzt5bHlV
XmNePl8mZVVNK2RaSXV7QiVVe2lKCnpxZEp5KTdoQFBuJVhCUkwpM3J+JUtxcmNwPV48S1ZvMmgt
dmtLa1A8WVhEQn0+SS00M3N9NlNlLV5XQmc3OTtVRwp6QHdAK3s/QVp+TD9rcFZKPypIP1chQzs8
aCtmTD96YmJkQFVqeVZwOSF3Pl5YZGdAP3B4WFpiMilJbSY2cXhAaHwKektBSEd3Yyo5Zz5Jej4+
Kkt2b2I8PEJjbFMoYWx5d0Z4TDBpWDhRWEw+OG8hYVE4QExPVGhkQUVNaz5DYTVBWTF2CnpNbzJQ
PkRMZF57MStvTXRFP0xGTiYtWjJJQ00pN1gyR0ZpO0FOMmFqQDhJcmN2ZXt0d0xufU57ZnspMkg+
Klk7TQp6LXdad2tIYk8tcFJOQUdCcGpweUJ0Y0luTjlFbnNmMFQ2TkBrN349d3NjfEAkVE55Mzdw
T2UlNyZIMiljPjVVejcKelRvJTF7e2V8Ykxlb0RqMjtKdFhxUFU5JjlKbHs5cmN1fj5QNVh1ST1S
bCR7Zl90R25uJS1leCR2eV5fKVN4UVJzCnp5Vk9URmc5eUVacmRNYGVPWSkhbHBLWjVuK287T2k1
WWJmQWkjejJKNDByQ29NeyRNbyQ+NSM0MU0tUHNoQFM+Twp6KDF+MWE0MjVKdlVsUDlEXl8tSTBt
RFlCaSV5X0NTSncqOEVSaCohY0p0RyVsTVB5UH1VdGVFQ1NLYDk1JFVmLWMKektxQlUmVGV4YzM8
bGAzSDl1WSYqOEpZS0B5X0FTIzhLWHtsU1VTcThUZWFfMThSV1Z0VFRmMEZKWCY0YlA+d3I5Cnp0
WGN7RyU8RldyYnt4NjgoZUFWdHdpcjE+Vnd5UDcjSXlBKCZYaGw/MyYoZTxNaVB1U1RhfW1RXzxX
c09QMURgZAp6TDhmMitqZjFsbWR2PjsjQHcrUzF7VDBkKVhzbV4qOUBFaE5xWmtkZzN0dVlHQVhp
bXJONC1+JmxWfEVqUn0hczcKejRgc3tBeX1lSTV7Mihadm9SPT9ARm5sRD5XPUJJdVEjN2ZJblpo
az0yRztvR0UoM29HRWAlPD90Uj8reTtwQiUjCnpeR0h+TXZPLV5RWnRsPj9DdmJ8RTRFbFAzTCk+
JSFfS1l9ZEF6UCojJk5Hd085RnoqcGd7bmhmWFh8QmUmMFZXcAp6a0BgQ01ZS2coayo7XzFOX1gq
aHBSKXtaY1NLTWN6cHF0ciQyOzF9KXI8YlExWTZAX0pFcV4yLUp0bnA+VXJ1UWkKeiV0VWVGPjFz
SHh6KygzOzZQTWd1Xk5CJllkcUhucEFDdFpFXzU+Rm0lYlYybykkdUVxQTdZU087KFA2O2BweHpp
Cnoob3Q2KjRCPTEybXRURGx4WUhhfXRKR3xqJWN8NCp2JDZkQDRORXI9T307YXU0S0dnM3dtNEBK
byMmbjxlZEtLRwp6dmE5WXNFS2VjJmJ4JDF+Y2drdmpHZmI/JDxjWE1vdVBxa3VVWiVNb3FJYyZI
aH1jelIoIXBXMzJwUitpPFdWaEEKelU4WjFfZldZTDYpUmZmYXJ2ZURRT3J9NU5EaGJNcGpTVCEx
WC1RLW14aF8zVFdVe1clNHRiS25vZF5KK2JXVlQ3Cnp5USs2SzI+OGFNQ3lXO2Reb1N2WnJiQTlu
LWQrLXs8KjM5YF5ucXBeI3NkVFNiaF9kNGxDKXZWR3U4cWZtKXZEbQp6JVNIP1ZYdn5fMmZQVDhK
PUo0VCQ0OHRyPVEyZ1ArVkZGOTEhUGBVJUQqeS18Yj9tWXhPZj1tTGBwRz4zZmNwZWIKelFkaXdr
P0Y4bCoydzZxSiReeFVmUzh5UUh7RUlJSWRAbjs+VzF7V2EoaXNKK19eKm12Pko/YlBrclFlKjFj
YlF3CnolPmxlRS1+b151bHZlfU5LaTRWRmxDfT0wUy1uelp4QTFUPShMNmtLeVlAaUZZbitTNkUq
d3hLJC1MTFBBQlBrNQp6djxUYTZDVlE9VWw0M1dQNGtlSnJObG5MbTdwRTl1OG8wPzl7WDRHVFhH
dVE0VHhgR0VNWThxMTVqMXV7cXtaYzcKSk1QZGVUe30qbl5HcmotLQoKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L2Nzcy9zaGFkb3ctbXVsdGlwbGUtZXhwZWN0ZWQu
Y2hlY2tzdW0gYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9jc3Mvc2hhZG93LW11bHRp
cGxlLWV4cGVjdGVkLmNoZWNrc3VtCmluZGV4IDkxZTU0Y2IxNDVmNjE5MDljYzgwMWZjNzE2OGEx
NTI0MDk5YjI5NWQuLjhiZmQ2Yzc3NzAzZTc0OTU2ZmNmZmY0OTFhMzg3YThjOWQ3YjRmZjMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L2Nzcy9zaGFkb3ctbXVsdGlw
bGUtZXhwZWN0ZWQuY2hlY2tzdW0KKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3Qv
Y3NzL3NoYWRvdy1tdWx0aXBsZS1leHBlY3RlZC5jaGVja3N1bQpAQCAtMSArMSBAQAotOTZjMzI0
Y2M0YmVhMDNjZWQ4MmExM2Y1ZWY4NTdhMjEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis4
ZTBjM2NhYWQ0MGQ0M2IzZjM5NjBkOWFkZWMwMTc1MQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L2Nzcy9zaGFkb3ct
bXVsdGlwbGUtZXhwZWN0ZWQucG5nIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvY3Nz
L3NoYWRvdy1tdWx0aXBsZS1leHBlY3RlZC5wbmcKaW5kZXggMjkwZDJkNzlkMTc1NGJlODM1MmFm
MDRhNGQyMDBkNjJmMTc0MjRkMS4uMmRiNTc4MDBhN2Y1NDlkZjFlODBkODI1NGM1YmQwZjg1YmU2
ZjY1YSAxMDA2NDQKR0lUIGJpbmFyeSBwYXRjaApkZWx0YSAxMTYwNAp6Y21iYE5jVGBpfncocTRW
QVd9c1Q1aCheQFI1fkk+MFp+ZFFLX2YqI3kydmpleS1ENG1BU3hoYCY8UkJlRHFScj8Keih1K3RG
KDlvb0prWH1QQ1peaHF2PWlQRE04U2pxIT8mWGlvNylqUkxZcHVRSm9acnUheUpMbFZYQCZhM1ZI
bmhxCnpHVk9pMXBjWlFXZ2l9ek5rJGREQXlrciNkbGoqeiFsWUowTmV0b0R4MmlOdzRGZ2ZZam1S
SUZXV3JPb2ctKFJuNgp6U2d3NHB6VURDWEJnMzJkbmAxKEtZTXNAI2MmX18wS2h0LTlydUM7ZW1i
QVM7b0BoTCNXJjd9Q2huTG9lSVhZVDEKek9LPmpvOy0hTko3M01KMml4KTRnblBmZkxUaSo4e2hx
eVltdGFDMj1vWmcmV14pekB5X2ojKkpqWkVpUlNSX35MCnp1S08meFRMNUZzYl5Gd3omUnRadC1C
OHc9ZnF+TENBejs7Mm1wUXFYLXMoRG9VZDUwN290bDxJYl5WWk9Md0JFaAp6JEk7XyZgPj5lX3J7
Y3lzOENrUyk9NCE1ZCZiX3lwXzdhQTRrZXhhfUhqIVhYeGs/SVFeNHluU2lBYGI1NX1eQzMKem9v
VTBFaWxuPHRad0pnaitQM0V8cnQyLXtGLXVGbW1vZEkobztJIVB8SUpgJEZIJGU5SkIqd0BEQm9K
WEVMWDhyCno1cVAkKHJ7am0lQmYtITNKSXl8MHdydWsrPCRvOzxfUG9EMVpzdEYmIWZUSnNnaCNk
Oz5VWn0jejYoZyh0Wlp1Twp6RmY8e0A/M2hfKldsSC1XPn1MJnFlM1RWYCpDUU08ZGttQFVeT2Y0
cytDQE1ZdjlRayozSHlZZnNnNjNhY2R9VyYKemEwej9JKC1+IyFSJSR0Q0Ytc2dCY3ZgbUhuKTw0
N2pDKnkqeTM3P0twRTNCWFpXWEtMOERHa2UrbVE7YC1mb2RVCno5V2lWM1M+TjdVIVEqOThTNSto
N204OHUrVWhHejhOZW5KLUlPclM0PkFBUFlfdntjaCZMMEUoP3ArTGtKe2x4awp6dCFWMT5QdFd0
WTx6TShGdkZITSgrJV9ycz9VN0V8cHJWMGpKSEo/dXtqQitwR2NobnM+I001ODsqeVc8P3tASjAK
eiRzVX4zJk5ee1BYVHh4TlQ7b0BLcHtPMHFUQmMySWc9eU5QZGZUay0wQnV7M1g7Z2dfbGtYZVNz
IzgoPDJ8ZHk0CnooXmpgSWRlZ0Jib3U3Pk13cEwtfSlnSndKc1FrV35wVz14LSk4ZXo/VGRnRUo+
ajdLQD1NQDR1ZlIxWnFqST4rYwp6eWdKcjV2X3syNkd0eHYtaVhZYzJidWEmVT0xPm9Zdn07OyVC
YU4rajZ4bSkpblM0Ri1iMWtqVmdlPSsyWHhrfWYKeilxSnQjbGh8bXdlIX13SlE8X0l6SERrIz54
Mjhoc0diUk8rZUBTMEg2KEB7fmdQY0RXI2RuKEtMI3h9fnZxY0J3Cno0ailYYD12V1BURWl4NTRB
Zk9uIU9zPD5DSjF2R3BGU3NMbXdQIWNLeFFJTHxuOGU1UXl2WHl4dUFuUTghakZyWAp6YE1ieXJD
P0BtZyZnclVSMl4oam47Q0JqK1ElI2NPV15IJm07KnxFVm5IPD1LP1Bhc2UxPTxFaCZvNzRBclpk
eWwKeiYoZWtabHIwa3VycE0/UyRnOTIzKnh1KSNYY312RG56fkhoJkdzPlUoKTN6YER8MiRFTCtx
TVhNZ0hKVTR+eTFhCnojVzJqfEgrOztNeWw1ZFVfPmg8QE5zKztOVFN4SWhJWHhNPWFqek5LUnEm
fk5CKH0+JU48a0I0PF5QWGt3Q2kjZwp6WU1VaFkmVihLT2MjflhzJigreDdpWnJjb0ojNHp5Y1Zw
S3FZfXlqRGZIe08zWX09dmw0TCkzJWQpdCRGbGpxYjcKejRtcjJjPE0yaEtmR0A7MlloTGJHU3cz
a0Z0PyR1blhsXmprZztgRiF3a3RTfkI+U2JpdylZbmo2SDM8OEs1czNNCnpyb0NNSTR4MXZrLXc3
aG9UQ2RWQHppYEpNMlZBZmZ4YT5jOD0qXyVkZHY4NjZXb1krfSVaeEYxMypXfSpjMDwragp6aHZt
SnhqZ1FiS0A0Vyp1JnV8KXp6MmRUdj57bnA4IWFoMWV3YDl7WSljWXFtZEslY3lYUCtsdk5HeVNB
SnVqYXoKejNXbDZUeE01KlB3QUJCfDc1Ymt0XmsxPl9OeT9PSysxMEEmPS1DVTl5SjtXe0RXODkx
Zl5kNDtKbSt6ZGY+TksrCnpePEFUOF80RTkhe0p+dDY9YUpaRj5Gc2hEdyNiKG4xRFdDVFlHWSVN
aVMtTmk9ZmJINCNMcTwyc188VkNNYEVRZgp6P3woOzF2XmxCWElFUD8tc2JOSS1SI25nVipUVlpZ
bn5lSTNpemd6YzxQYzEtbkxUPz40VnU/Pmt7JCtHO0dYIVEKek55MF5sPHk0SDJfWUVgMk9PNH4j
O1ByIzBuUi1laz1CQW07bS1tQn1QZkh2UlIlWHxAVE52ITM4NWZsYSgrYCp9CnpHKGNrQXFZUDZP
e3JmemErQGVuLTcrMTA3N1ZfdUM2NV9zbEJGNm00T2pHKj1zPyVMS3EmXkdnUiRMVDhgYFpIcQp6
RjhIeiNCZHEyZGN4P1YlQHB1a3wqMl5jREh1ckJ1bmlgTT85MXxUZUNONzl9a2NjUntfY1coZWxO
JVJ8e0kodEEKelZyMn47ZGdXfGdzWSY9KD5eMGtAUHE8R34qMllvczlBejxObnF3SHUoNnZTT152
ZWtMUmN2cDk1aDQ2aDRVOCVTCnorfkluc0h8bkwzJT8oQkNCc1pzS1I4MH1BSy1hbVNSVnhUJWtX
eGRgeGBXbW1FUj5NMjkmO3Z3Kj5wZklzRno9Iwp6XzxkYDBONUhQNns0NXBfUlF7cyVkfkczcCU8
NksqREBgbWNPUlYlZUdGc0JzSUZ6c30qUC16ZD18RThQYTYoQSgKem5MLTxMNTRHPEg7JFRAeUAt
NHtkTFJneEZYKXhpNS1gIyE8LT4hKHZOJU8xV15sY1pCKmlPRXwzNCtGRGd6SDxtCnpPOz1CcGlB
TUc8YG1heVUoeXlIeXFZajIxMWdLK1M5PVNQcUo8amowb15SKiVTeyZZcSExU308YkFTUWd1UCZp
egp6R09BMUZOWmBQOCR6fURxQ2A+MnNeXlI7allsa2dsN3pmZiYzJjNAbiZ7eiM7dkpSSGVfQmpu
VndTZEZVPFNMZGUKejVOQEtJeDJUb3kmWCU8WCYwcTYpZ14obzZxNzxDcSRNb0VkTEQ5eHx2Rj42
fFprIWZXUEhnPXdmampCTGZXI0tuCno3YEd3VUBgJHoqTFo0UUBkUXY0Z2tNYiUkZXRIU01KYjtE
RzYjYUR0dUtKd2dzQ1B8fll+bntrJSp2STZKKkZYKAp6JjY4U0shcmdaWjBjZVJPU2dULXRVeiZn
Tlg4eXtAUGhlUlhrdj8hTChZS25QX3tDYy07RStBciRxeEI+RC0zaWEKem8xMWRVRV5SdXJGYkZC
bkhmKjtMSkxkUD9IKDtmUW9JMiRoNXM1T0BwZilTM3A2NUFPPHZsbUJSTFgoRyVHfVBgCnpDenYr
TlJeXz88VCMpdn1hI29oPG9MJmpqRHRDJFhRaTZSMSZ5dih2KVQydStTZigkUFJtbk1qMjJWbmYz
VlZofQp6c3tFVUp1NVFmKUx3bVYlYn0oZSRTJT5feGBxfD1eI1puY0wlI3RaSVdveiU5Wk1uTkJx
allkZVYlNS1hbzI+aG8KejxaJkdmYXxreHJNU2dGPDNlTTRNYSp4bVhgUnBhaGVDX1k/OXpSfktH
JShVR3g+N1A8JTgkZXpFQks3KHVxMnV9CnpoTHozemhXa0lTWWlaeHJ5KCppMDxYVENLNypUZ0pI
YmUrJXtIfU54SWspcT5AO2pOPEhaRn5le2FfK3ZkIUtHfAp6ZCRKZn1iakhHWClwS15LYkc3Kklq
fm1ZVVJ4KykyVW9xPVg4YV5CfVJySWR2MEZ5cGI5SmgtK3ZocGk+Q2lLMyEKem1RZUNjYjc9Yl9N
RSs9N2psYH4jPFF0STw5MyQ1aTwrb2hrYndlZXExSSZZdj9faT1NNV5JTHFtQlZaJUNAR0NiCnpl
RDNfJUc8M2kzX04rQDJ5bSVPZl54PnxYZ1BUcylLfk1TSW49M3JYVSFiOWJASzZRYlNWMUh5a089
YGxgcGNAawp6LW1Ab1VlZHpJQWVjMVRIKVlEZyooSilOKUYmdkpYOzJmPUckfGNEPD81bjdBdSpQ
KlEkeHsjTHREOUhDQHA+VHkKemg2bWNFYDhORCF7VTxMdGBIbSZTa21eIV9fIyUzd2lNUn0kbXFh
OSpVMzJaUkZXMTFqT1Zjelcmb0BGQWpLJSFwCnpSeX5zXnpDUEFYX2JhSyhGeWhNOHopSWArdzw4
aFptaUNwdSlzfkhnTE9EcCFvPnJCMGBTNDw0TyFvQGgoMUVuVgp6P0pEZGdpPUcrKzd9K2YrRlhN
dW5TT1YzWTJURGBtPX5+b3tqKXFERGcke1M7RE4qM1R5Zit7Pih3anRTOENhZ3kKelYpdjIxS1J8
YkJDbj9MRHlGZVd1dVp4IUVEYE49KUdaPlZ5Rz4kelBZMHB1P3BBUlBmcVhWeVoxJjk3aS1kOzs9
Cno0JXVAUU96VlJHY2pXNks2Vzk1ZFV9ZHU/Sn53c2BqV2RaajtHSkdPMnteU1YqLTg7NHd6UnRl
JmteU2NWdipeTAp6RGVBYVpEfnl0PVdeWFVLcUpeczgmeiU4aDcxN2d4bW83fCVBdDlfIWRaWmpm
Rzc+fUBJJCZhK2xJYXdHbzF6TVYKelFMTjchRkY4ejJLNHI4NF5lNWpEemtePlFUbVEkZChFcm4x
VXBxM1IreCFtamV3JHlxO0okWDxIJkRsZUhfWXxHCnpDLTNgT2trM0dObEQ7Z21pRjwrcGM5Pk17
PHEqe3V6QXB0dzQrPz59PWoqVkVRd3ozSlkpWXByQ0JKbz5hQz1aSwp6SmU7IUJMKm9WYlFJaGhS
RGQ/YEk4cyllNDRwUmlYcENTeWZwclpQb1NqemQjVFYhT1ZNX0BFTHJ4R2I2c3tTNnEKenNpRlNo
Xj5HeEtpK3xVfndqJTtyRD1VeF9IKnxzJHNmb3NePEhBdklBMFduSzleSkErZ1dwdGk5UnYmcjI9
R1dECnpQczBmKTFsWmFreUl1S2BwZVN0UzE4IVU9QWA9SSM1JDMzWWhnQ31EUmF3eW9oYShBPkZM
KXNZKntyUyZ1JjZLNgp6aVEqcHhCQDR1djh1QkFhQk90dWUhLTVqVG48JU4wWVNRdXp5M080UkJf
RHB6LTgyWT5lQTtzWk1hfEJCVERAM00KejA8QVZDRHNsRXJqLUtudXtHdk4hS2R1a1ZsdX1iLU1L
V0cqQXV+cWUjbihwMVE7fnY0JndoWjZeXyZZciMkO3xOCnpJPmBSJkl4TDFFPnBGWWt3KXt2Nz9G
UndwWlJ6TkQpaVQrTms8OE9JRGJKbj9VQERrX21FMEVRb0JUfSltayY8eQp6K2E4enI7SldXJVBi
Uk04USVzb1grSUBfIUJlQWQyJDcyJlItKlpyKHIpUSh5JmR4X3UzbFo2aWAhQm1iS0RXNjEKelNH
VilFZSFCX35ROys1RHpKT3ZjVVd9aipWeDw/dGpHKjNnamMrdD5eU3tSMkt7QT57ZVNVdHxGcDhv
YFk/NkIjCno/ITlkK3dMcHtfSEFmSjJsRHVHKTN2cUp3KzRMTXdZZVNWPSl9VEJrTD18dDJuK1pr
SDdLUyRraGNURnQ0RjtMbQp6NklSI2FUNm5PflBPa1Mpcm1nKEJTYz5uTnlSeCY9R21IbmplMWs8
VHg8U2AqRl9IYjNBNlhuTSk9aUJVSTdXeH0Keml2VGZnSWQ9ekBvZiZrO3FEdCE1TnZueV95aT9M
SnFFcWdHPCFZWSZMTDcpdUJWPSo3T1R3a2BWfitWfUVhV1RCCnojcnFaZHNJSW89aCl9KjF7JXdu
KnRgIzYqeHFOKHczSk8qcCpOZGgmUlpQRjNNNUNeRHl0fWchTG0rcCNUVmNxRgp6TSN6eFFaOEkh
KGM+Z0VlcFB8bnZMKUZDUHp0JlgtRGstZlA/PHw9K3R2Mm1tc0BtUH5GIUttU2czWmtobHx4KH0K
eldGRFhYVXsjaVdjZFNPX1YybjM0Y1diZFgqdmstNDF4STJ4eTZXKD5nczhKWjd4eVJESiEyMlok
RXZtalQqeCp7CnowWHFvV2lvSEEtUVk8ND5GNipUXztfTTljQ1FuSHo7KitOTmUoPlE2WmVOQU9s
RTA9Tloqb30hT05iemEmQmVffQp6c35sczFzbXBDMkdCJURWOy04IT5KR1pudiRMSCEqSSY1N0Ro
NDM5Xz1SRTtnUDVKc2ZvUWpJUWtAOyRLI2lMYH4Kenh2NzUqb2dqKj5jQzY2XzZNRHAhKCt1eDM4
R19BNklrfTthYWZoPjllXldHWGVmbmNgUGF3NFc/eXdRXjUyPm5iCnpBTlN8bSpsKmJ6VjsmVjZr
X1UtSkpJIyRtRiFUM2lVXn5GVzN6byZFeT1De3BZT2UxazNfc1lMeHdLYT1hXy0jdgp6MjtjcWJE
IShTfm81MHhgJGp1JF5iaiRLei0oZ1QjbUslNyZkKyZPLVVwZj8yXnxVRnRNfDYyWDN0dns8JVYw
X0IKel8/Wmk1VTBRbl9zIXJVaGdMbmchQ0ljU1MzLV5vM0NvakxkeDsxX1ladEB6MmU1ZEIqI3g1
Ulc7KFQpUD4/WWJWCnphYGE/TCNvTi1JbkZhZ3UtRHJ+fDhyVUs9fDJDdykpe0lzTyEoSFpuSik7
Ry16M1QlSEMqIzZ6eCpyPj1ZPk4hfAp6XzY2QWtHRCM2OzJhZ0x4Mzs8SiV0SlpteUJHO2J1Rk95
d05eYWduJXoxUkdxcTAoPCg/dFdrYW5gcnRRMiooZEoKelVMKFEtQ1Q+T0V2e2ZOPTshbDs3QDlV
bVdLeSlvODQ/a047PXBrK28+OTt2bGJ2NlpwMj44SiM2Jkp8OSpkPnlnCnphd1dIdD1eaXpnQn5Q
KkNvSn43ejM9QTNDKXNDeC02TEpwNz5VWG90S3ZTRElRO0FsODFeOXd5K3lVLSV6ODNSSgp6dnJF
QWxWaTRgNmd0c2VDODxBYmJ4VWsqTWNVNUhYKVcxeCN3TXcqU3F1aSteOHpeek5mIX4hfj5yUGda
WjYlOT4KenkjaF5zNn0hZ1ZXTnxqYGZkJnxSe2JtIWdeQTNpVjNhdyNMYFh3UyRtMXBNS3tYaHt9
bUtPcGI7Pmo+d2ZLJEQkCnpseXA0Sz9NSV5eOV4mX3VncFE1TVpzfldaUUI5REFOPEAlb18pZTlX
YXQ2S0pfWXQwaVpoTDJgMyRzUGl4ISpadgp6M2xRT1I3VlpIRWZuR0ltOHljRWNXR3dzZmdmMiRz
eUJCN2szZThqUkdpJlNiYUNmPEI9PF5fUSMoJFA1VUk1OFkKejt4fUg7aCZINEF6X18hOys1ZVNo
U1FOKUJLMU1gVSRRUjdqIS0pblkhRVUwZVJNcz8/VjN5dUhYaTNDYV5LflZkCno9YzBvKSUyKzBz
RSVVPj1Ke0NyOVJHWHJ0IVlmK19sKjlgbyRILUIoRGUtXiQzaktARy1vJCp5JDhzTyVzRl51Ugp6
TVV7Y2VeemdmKSFgQk0qdWwxJHlFIyMpfFUhS2ZoVzJJLVVXZ0x6TW4mLXpmelVhQlNEcl56MD02
VC01ck0hUF4Kejt8aHlmNWJObSg0Rz1FUkIhSXZlN2NkM1RqYClUQEdVbGklQSh5NUBAU0AxUHJg
fmtvJm9RJTgmbWdybWU5U1NkCnpgQHQxUExlVDlpaVNqdWh4QUxOWlJFUH5kLWkkNWg3ZlU9Zjtn
WDZRYX53b3heOT5aX3FhVml3c1BLb01LQn5nYwp6S3RMR1AkX2k7VXFPbGoxSmRBUHgoPX1ld087
Y1BiZWZDOG9KbSNvMyhvOCVobm9DPmpWSHQtQDw8N0NTME1lMjAKeiooTzRFc0k7SiMyM3B2PEZh
YDshIzlAek9FJmZJPUUhNHt4QT1NZ2JUWH0wXkF3bnN4czhQLTNHK1MxMmZ8X3d8CnpqbE9BU0lJ
PFF0PyQ8MilAZ3EzSz00OHUzNWo4N2hzI0klbFEqV1kjTlRiJEUpOC13anIkeTNFPWUhdGgkOGop
dAp6SCREMSg4TGRgcWZlcExecDU/aCZLJHpHPHt4cGYhRklSMmVTcn10YDs4Mk9mXlVQfUxvVkpu
diVuT0tZJEtIZWwKejM3MytsSUVLPEFNXjY4UnltZHAqMVZHQDdFTF96SjVTP3UpMlI1bmd1WU9q
eF5afXUtK24lPndCO3c0fURmKXJTCnpiYyYjbkQzeTFVdzIjTFNlaTNCUThLcCN5I0s/VDVUQE5X
P1E2UTglYEJFa2M4YjtYbTFXXl9Bam1qKHNMZEVQaQp6NjB9O3RxZWcyQjZ2dTMmcWJuS34kMDY1
Jl9teHdpRnFqfiUpZVl3MFozWSlBNzBEYH5ibVk3QlE1UDg+JHw+Q1MKeiUkX1huO0tXfGsqTCVx
IWNYdWs7Pm01aXsxMEVQfm44SEFZRkcqUmBJZTZza1RXNT5peEZiP2M2JT5VN3Nzc3J1CnoqJTN5
ZnItNyhpK2R3d0M4PjlfLWt7fCh1amI5S1Nzemx1S2xGZUI2RC1jJTFgYFZEdl9paHtQSSZ3fDRh
TV8hYgp6ZypPUWVeLXVMQkclLXtKZ0lJNE5HRUxhLT93NEF7OGhLbGw5bm1nWFg2N3JlaTlQdWtE
MUxZMnE5bU4pdChRO0EKekVzWEtzPypSbG4xMDVWJiVHLVNiXyVFeCZRejxMSzM7UXRJWU41VGQp
d2dIc1MxJHpDUm0ySXoqSipeSCY1Y1R9CnpqfmgqZHh4SDRJcDY7eituJnNWSGUyUjExe1I+RmFp
IUI1RDAqPmpNMThaU2JgNzY+eTwqbGVnfDUrOUc8LVZnMgp6SEBCKldNe0QtO3dFIVR7ZUQyZmol
TTQlWkA4Y1kjOT0rK1BeVnIle1M1fHlAUCZqPDZVVENQS3hyYDU2YXc4TGwKendDXnhlVnQ3NmU4
TUczMWo2Y3tmUTw8akBNZF45KEdhZEJEYH1zZGpMdjF5Km0qJVRzMzlVYjtOPTxTZCVqV1loCnoh
QXolfWlocjU0Ky0yKGJCNXRufkpkZHNfWjd6VW5hcnR4TCo1YH0qYmdkTlFJRT5WOVhLekdaMygo
O2lUYkxfJQp6SVhjNFV4TklCJF9gYXRwaGB2dklqNnNrJDVoSzxRU35uMTRDTG5wZmc0Zyp2dDco
cVRHRXxTOTxJTnFAbmxDWUcKelZUKHtleW1wZytFK2BfSVJCRkB3cV5rfWA2c3JiMnNaZHpMXytL
OThmZ1h2QEhOMz4rM1hoMU07O0J1QERfKGJLCnpzcHQkUyo1cGtGdXEkOGxlQmN3eCh2NUM8U2hf
bTtZMWlDO28qUXNwTUc+PHJOeTB8RXltfSR2cHpjKGckaWY/Rgp6byFGQnk2OT0xX0VLMCs5TXNC
YWctKi17P2sqeEtPTj5PeHMhcERva0xLWU5NXkFyb0RgRkVVX0FkWENNSGBRMioKekFmfXI1Jjsq
UiVpVSVTYENJUWRFQUw4SU90Vm1lOGV5RnpwZT9pKikzNi1BREMlKVJwTHg5S25QWFp2NlBva1Ay
CnpzQX17KjNDPz44RE9WRlcla093OEV4ZSlWJXx9UCVGdHBye1lCKl5fYW08K1Y9P0leSCNXWTZZ
czgqS1d0U1RLbQp6PFQ4YEk5cyQ2UldPP3tlNEdWTkE7bUJoaDs/M2hhUE11WVF8QiRhZWEpXik8
WjhzayglNGJWS0kmYCorWnZZWG8KenR6VShVQnE2UERsMWU4V25Tazc7ZTR5Vi1VPzhsV3kyeyU+
eyR9bnQyJlVON0RUMW1MOyR2Y3crRTJ6WU97X2NaCnpeO1Y/NTZvUn43TyFnc3BQeXE8aDxhMHk2
LTs2dDNIWU48UlFBWSMqN0JCV3NGNm01Qm9GY0huVU85bitNTHQ7cQp6OStDPDRBY1F2YmlPMUVW
ckpDPnstTjwqQTtxQDVBWEdATyhTODR7b2lGZ0V6NVlHTCFNJTZ3OWQzWktSYVNFbkQKek5rbEFR
KUVgeiQxKn5UTDBtTlF4WTFjNXRNeUpTc3I3I0pCTmMhS1lXUGFMa0JmVGRaMD5SPEt5K0p8N0Ij
JFRACnpfM00ydTVZZ25iSChhciFBYkIhcndkQGw+eENJSThyIW5mZGAwK0liJUxpVXk4RHVsNGYx
a2tpSSFSWCZxOzVqMAp6eV8rSUprSH5pM256R2deUTJ6KiRqKFdCb2c5WHRXTW1BMkMlUUFNP3FE
SnlOdGF5TiFZby1STzdQS213TiFTcVkKektidXFWX2tnMSRIbHoxWENgQGVyKn11fDY2RHk4dCUr
OT59bHd2YjRabn1oJHd3aCZ5YyVsPSl0UmJ9MT1QRXVnCnpqbUJAPD9CNXUmPyo4R3B6RGowQ2Uh
PkhVKEtuY2Y9Rkcma25iSVNgdjZpJnczUWtpQ1NoRkotbkB3TTgxZk9Rdgp6OVQkU1pqZlVQbng5
Sz9ye04oWSVHemBwNlNYKipjd2pIVkxVR2lRcDBtbSVGYDhVMFJlRitTdntUN2BFUWUkKzkKeilg
YCZCaSNuRkIoQ1NnPDtrdU9rT0huWSlhJW1IPyVNOD5YSE54aSZSeFk1Y2dLfF9BS0tQR3lJUnlJ
a0llKkFHCnpiTzV1K2BsUT5ZaklCOysrKjR+fldAVWJeeG9NSyt4T0h2LUJZWE9PVkdMfUJ6STB4
azdDWVo3WGlPZ142PnxFUQp6P2Z5Y0clKkZtQTNkQSRhc3BMVyozSWE3O2xGKyg/cGpCZlBxPWk8
eU9md1ZEWXRzMnJlNSE4Y1E0U2RtJmlSSyQKenhJeS1OWCtjb2xqVWZhbnlmekVCY2NvRSReIWFQ
ZV9EO3Z0eGIrJXtwejEmVFFFeVc5TDVjUFohKUBCKmY2WUVXCno7YGIwR1UpXiZ4REg1N1Ntd0E5
S2N+c0dlUk9TemdsQXUxbThpUHJ7e31ZezUlaktMb2Q3TiVNUDBgLVdvZCY5JAp6JVgmaFlRLTY8
MHVSMT8we055KW9vTzA8QlN6R2IxZzR+K3p2UXc/YWhENDJUZjF2OUZgMnhJKVJESSM+aG5XcCMK
enppelojbyRLem1XP3RkcChyIWx0SUEmJW5adFM2RGw4Zlk8azJKbFR1WW13STRadnh0aTw2UVdQ
T2VNQXNZY1VfCnpecXckYnJ9dVp4TD5mTTVBUHp4cEtTQVgoVzdaWld1ZFQkZU1YampWdDgjMjJD
LVRjfmVlPT5tO3xxWUZ1WDVBbQp6Nyo1eXhXQFlpXk9PaT1kYlR9WGpyPEdUJm1OfVZFPndBR2lH
fUd2bGZVNn1maHpIUG49QCEzOV4+dlB+ZEs/UEIKelJPdUAtWUQhRnxSND4tVztaejclPXFwWE9W
cUdXMDhOaFU1NHI4O0kjYGRCMHlLTyQoQ1kwMDY7KVhzSWlJJnx7CnpIOTVjNiY+QD8lLXFvLWQk
K3lVYjRSQjZURGpsJTgwY3dJVj1jWnUlQXQlX0dmMnF6S1U4Ky1mWFkobnJLP3ZHcgp6SzVYQjs2
eUcxWFdJb3paV21mP0ZQekkkJEROX35KTVl4TFhRVlM8bjlpM2RAKj5mKSg/c2NmMTxKeE0hbD5o
NyEKejYzWXl8QmchRzNwNzw3O0klUmZZXmRkZ2ctfTxaYWV1d1F8JilPYlkqSSpIK3d8IXN9OzFj
VEdOZCFmWT4oakNDCnpia2pVZFopUnswSlpUP2cmTW5FRjNyWT4maDYtRjNYR2h2IUxNMyVRWHsr
UmpTZ3NQJmppKzthTyQ5en5LfHRGYgp6JU8lUVgxQG1zNWIqeTJ8SipUaHVxcEk1MHk3RSZpaTJx
dn5vWVRVMTlSe1E+Pyg1MHRMWG5LO2JoaGk1dEUlZXUKek89M2N8VWZQfktTVSgyJk8kS1gkZUo9
WCNmVERpdSU7PFA3Q3NXVitMfFhPMm05OCNiQy1kPmEkTl8zbExjMjJTCnpoUlFiOUdfVGMzJFJF
OGB0aUhWSW9WPyUwIylGcXktdFkpbW11a31+NiRObXcoPW07dylnQmNjY3chTy1AITY5ZAp6TSVm
MFE2LTQmR25IX3JrSiRZJVpgJTBVNDVPXmYwVGtVUz5WQlFqJXREezNuOExqOEhNNkx5TD9AXjhV
U3A3bX4KemNARlElZ2cyQnx3cj1MVElgMDA0KGBhR3w9SztZe1luQilpVj8wcVVHVDJ1MzY4aW9S
T2VYM0IhRlJ6Q0gmVzh3CnpGXjtSPSZVOT9naXFLP3VSQ0JjQyRWckdvdHxHcjcpU0ZsSUA4bUEo
Rkk1WWJKT0IoJj1zcUNgKlk5QHxUZkNjZwp6Jl5fKF8jdkBCflI1SSUoPjFnOXdFZkR7QzBrMihG
JjlxRDFSLURnV0k4a3otJCk2WUJwTit5JmtaYT9GNWQ0bU0KekNMNjdXSyt3I1RPZE97SlZhPUpV
YztwKUY4OHtoeigmPjJHO0dPMFkjRGlyZlh1Z19ibH1TQGVVIX5hc0Zkfn5VCnp2IWZRYV5Ub2p1
PEJ0bX0ldS12Ji1qZEdAb09tZk8hZ05WMFdYSnlheGN1bzliNGB0NjAzV2x9JTVMYilWQ3NpdAp6
PkgmX0lJfkVMTyUyaE9YVip9TDRYVkcxMSY5amZDXkk1PkFJRyZKKT52UHN6RDUmQmpPV3NlKkFQ
S0BrPGwjMTIKemNiZCtEcjkqQExmcTE8YVdRVSpIdilkc1c3clNQQiF7WDVJb3hsPShkMnFObUNp
YDI2JWw7c2xUclo1S3VvczRACnp2V3Q+dGs9SmJ+TUw0Xk18SUk3KHBQQkd7SjRiRFhubEJCYzNI
ajZnWXE7X3Amb1JEZGU9NT4qVDNzUT5SIU05Nwp6RklybWE7TkBCYHBkd2g7PD1gUz9jaTNLKCNZ
N0trKyZ7WmlUO2t2UV5iUzkqK0lnJXBKPmVNMD1GYytJPFBoSnMKel5EWj09eDRGUnZBP0IpIW9A
KzllQHBnVEFSOChSWl43YGpCY3hEaFIxIXw/bkBheVRrWk16NS1BS0MkUSFRfF5GCnpnKXAmM3Ql
cGF3QHphRDc2SnBGUC1EWFk+TWB+c29FQiQhQGVIenBsJXtYeVg2TUpDe3A7XzBvOH14cGRTTzJi
dwp6U2M8WlB5UDA5UnZ+NEdqYzNedSZScStMdEhSV20yKDIpIXUkKmZze2goPm03NDU7YlpWNTJm
MDFpXm1ZMH1yNUoKejJhNk41TEVhSD5PPjlkclY4fmo4aTRAKkJ0OUMwfTxaVSNreXxjYXshV3R7
eUIlM0NRZFVQNCs0bnpOWVVTWk1xCnp1KyFSWnAwMXRgd0x4ZGpEIXdxRm5xUTxmeHh0aGdrZSFO
fEIjJV5CT3RlUz4lbVFGJFI7WVlDZyMxWGorLVIlcQp6d3k0dktOUWojdEdkU3tDQTtlcD1yTTVm
fm5sSDBXV1B+NFRwSXdaRFdqVj1IdXEzTWVTRTZWTDtqTDdrJXFganIKelVKTmRreW42UztHa2c5
aDFsNCNzMWJSdylGM01mV182JE5NRTI4dUxxS044TCMkMD5BVkU3QTRyLVE2KzN3e3plCnpBQHcj
YU4teFVFanQ5YU5senVHUW58c0RxVisxdENQRFYxRzxBc29Gb0FrNjxUTntRRThBfjVARk4oJThL
Oz9kNQp6KWJ9TSY2P14zb2kpKCZqKVljWjBWKXRkQ0QxQE1TRHBwWG5Fb09VYTVNI2t7K1JIUXZj
bXtBPzE7PVNXb0QkRSMKeiZ+aFRkVXlzcFFuU1RRNDRvIUIzZHtBdVlgfnFaQ3hqJE1tMT9zWFRy
bnFacHJvbGBpI2NVKG47ViRmQnZpXzJACnpZdXNDTUE3eWMmeDVIfk07RiszdzMzSCM9Z149PUBl
RndDIXpDSjFKXkQ1JnZ1ZXtnYVhRTH1ANS1EbmF4Z2E8cAp6XkBrUWRZNzYkUTtpS1JFUmVKdjVE
Qitve2ZuVWA/MlBHUkhqRFB+PF80OHRodkc4ST5XbG16VFo0WjFoXldAYDIKemkyM1gzSEtXd19S
VCMzK2c7TkRld2dnIVFZWElWJiMrQGlHP0p5ai1tUyRTR245YG53SDlMdjF4JHRzfUJvZjx7Cnpi
Sjc8Q3BfQyVmUjtuK0BOciFSUkxtT0k/dT94ZTg8P1d4Oz9lRH0qP3ludzlkYDRucj1SfVlzMjBK
TnV5I15hLQp6KXRiS2l0U2VseHd3I2Z0LWYhPCRvMEB6ODF0aXRgP2RfPHhlUiU9OyhDeyZueWIz
ZykjaWQ+QnBtZUJYS3ZaZH4Kekh8c2J1X1MlQ0VzSXVPP3ZoTH13WCU4cns5PHZqSi12SGd7d1NJ
WjdMRDlwLXkwRk5DZTkrZTtkQHVIXystMHNSCnpgRCVVYD9BcS1pTUBnQTdadFQmNipAPTRRakdq
eXNnWX1RU01SYyMrVUt3YE04TG9oOHtASTsje2c+YHNlUTNPewp6MH59K049K0dMbEY3U1ZQYkNm
KiVBOXswYCNRT3AzcWJ2NChDJF9zTVM4SHRvcF59PDMoPW5HYDReQGdKMFdGREkKeiRCRj8/dVNo
O3pzYEo4VDhlZGhlai0+eENqU0JWaGgtZWl3cGNyZSY4Myk2cF5ld3trPH0hOWtiKF8+UVdvTWRS
CnpENGN3JnZ9Ri0rU21QaD9XcX0kZmAtWSNobH1GfSReRk5wI18oaWw2QzdTYVZ3cjBFY19eUWZV
OzdlWXt1UiFVKAp6K2Z8OHl8RDF4UFhfOCE3MV5RciRZPHN2aFl1eWZkIzUwKmRmNClMb3ZuKHFR
U1JPfl54VnBaV29KLXRXZklNdFYKemdeKWdTMyk2JV8+alNAPy0/aGZHemJybTZZVjgqezImSjlB
MWl0JnpzVmghJmp+ZXJCY1BqVlpseyZaUnRgYFBGCnooI1IwLTkyUnAoWTwtdzE3cytlbyhaJkZZ
WEV+WTA7Rjx2em1NOHJPMG9Oa01KV0x6S1Z9YHZDdmExakdqeislYQp6P0U9czVIcSZ7eXo1c0BM
KUNLREg1VUZFckBHVyZEVVNGWG9GPlltKWFXRndkVzJ8SiheX2tgN3oob0JgM0owP08Kek0tQypj
XzxAR3Elez96KT5kODlaYkZIUUNLfntlfj54PEh+SllnYXBiYmA5Nk0oTzs+X3hHYkNPT0J0LUxj
dnRLCno9S3pvZkhHUFZAPHV+Uj5kaV89RV8yX1IzNTMrKigpM014dDBPMiEjIWc9fXN5bFp6eyQ2
aUNldl9iV2M9NyQwUAp6M3d3eVJsRU9zMTtyYmQyXnRWcUVGOGQrK0lIbzd8UTRITGEzeUBeYEkp
RlZOcj4yalc5NmBgaTA0PTt1MG43dFIKejt1QFRSdFdqcmZqQlNDdyVkOVp+JDl0dDkkOVpJV2Zl
UVo+OUhxJlliK2UpYzhHQSZoMk0mUDdQTTZQKCljOCpqCnp7M2pkIT5EQkZ8ZCZ4Q1hqTHlDUUZJ
RjVhcW1ZY3Jlay10bjlGem8jMChNMn0tJmBzRXd9MVBefE5yT3FPN0k5ewp6TkVQVWljdU9UPENk
LUlVNCNDPDdRQSUoYno7VV8zTmhOKEs4cWh1ZFJ0V1NUcjgpOEAyfWQlLXQ0XndVZzR6TGsKej5H
UG9POE1mP2cqZEppfkF+VElzQCEqaz1xO1Qrb3twVTBlNEhgXj5FYGwzbU1SZFhFTHxuRWk1Zigq
RDt4cV5TCnpnJkNXb1FaWiRJMHRtRFR3dG9pTHtUWDF5Jmw/P2JRNU1YRnRsdkxmbUkodnhwSWw9
ZkRacmMlPSpXNCROPil6Nwp6V2BeR19XUDFTYEVISlhjP3lnSHtAVDJjQU9NSHwoQVJWa3YmY2ZX
dEYlYGA/dGNeRE1UQDAhWE42YFk5dCt0fHIKem1qYk1rIXFKODQxRFZmbkp6dDRaQF8qUWpZa0pY
NTxnVWZsUmJ+TGU2MShCWDl0Mn1PRGE7TWhIWjEreGNSSnIxCno+M1kwN3l7PjBqekF9VSopWGVl
MnNUZGYtJnpuU19NeDF3dktoNkE4fEsldWlCKGVYMyVaUTReTE1iZ2NxeU81dQp6aWBoTkEkTCgz
ekFRRSUrYWZXTlJiSjQkfSE7SntkcmU1QjJwWT14NUxxYSFgVUoyKU0wcHw8IT0oVkpXXj90STwK
elZDQT1re3h0OXdOSmpUezwtO0hOPGMkNns2M2M7dT5XNnpkYHpNWkE2JEBHYzZASyRCZWEkeDN4
KFpnWVZ4eChYCnpWOE01ZmR9dSE5Yj15LUtAfSs2X3ZmaHhNdihnOU0jdldTP19MMGNIdWAyUDJY
UTVrR2R9aGZ9MkN8PDJvOXtOfAp6VWljVXdTZ0EyRVd3czBINzxUVUJ3IXQoUjJ2VDwmLXYkNTI3
Ml45dVpoXip8eXwyPXVLQWBCOTFuclc5NUJnNEIKemdaeSRnd0d8enxsdjUkIWRMP2xVMX0+Rm1m
XkxjV2s5YSZTdHhCenxDMD5Hb3V6U0QjZnV6fF9GfTRScCF7RWswCnp6fU85emBvRHFrISFZOyFJ
NGY+cUlgNVA7ZXtXbCFjdDdTfiRmVHopUHhhNktUY1hDcTRabyQ3YCFLJWIpWn50MAp6OXBCMWZG
JH54Ui04X25zenFAJTxuMylyfW8qXyg1ZkBQeTRxO1gjJmFsUEFENnU3SXE5KGVWTVpXOSo+THdz
YE0KeiFARERITSg9TXRiY08wWWs1b3RjV3E+a0JWWmFwM2Y7Tk1PUGRiNDcmfjs7dEdrZk9DMWsy
XyheRXtMYV5zZitVCnpmJEtUK3JPKDtEQEpATzRhNiRXRWRpUj5xJUVCanhyVGxaMDAhanwoSjVv
cThRcSR6SGh3ZmMqUFIhb3UpQ0E3ewp6WXBtaGRAcG95aS03VWtLKm1YJCZxfWgqU1lTfjJsPGh9
USsoclMkfD1aU25lMGMka0AweUFfeStaaW4pMkVZbGAKelctSzhUSE0pYENhQGFKK09ndy0qSFN1
fWpabFJJI15OdUZOXz1keHxQcThmeSl0ZCMmPEt+fFlMSHl6UTJtYU5XCnoyQE0xI0pEK14zeldX
b2Qlfnhwe210NCtoUXwjdWsqVlVIWUxmYyp1NVRzT2dRP3wxZl8+TnM/SjlzflomYXBQJAp6SWdO
KD5NbmApP1JDfDhoQnBHKWh8N08jPTU5R1ApRDchM0tKelZ1MitRdiYhX35hRTMkUDVXSkIzb3d7
dEFvQisKemdmen0/NWFeZmMtRzM+ZHBOKn1wZCt8anMjcG5KflU2b1RSWC1uSUNERnJ0SnY0RSVH
cE09P19SVFB1RCY5eE9TCnokPHdlPktqXzlhUithMjU5QTthWEQqT1QtNDhOUElVM2Q2SiVFdyps
YGBhZEY9JGhne2QjY1Y+MmhaTTBFSDNYaAp6YyRYLUgyeVMwMVFzU0soaG58JTFxYkJ5fjg3ZnV5
TXxkZkBHSi1sI194cENhRUlXazFrKip1eCEmWiFXPGpCJmYKeiV4PW5nOENsenJnfUpAb3cpa1hz
UX04fVleNG9UYjluK0dkTTFIMDIrNVh6fEJ+MGRnTUFmY31tNHZJcSh8UHZ6CnpIRUpTTzZQRUhr
YiglMnltMXF8az14aEg8Q1VTKGhlQnxMVy1TZkVAbWhqOXp8RndTY2I4OTs/ISk0ODE3SCUjWQpm
Zl9qOG0rYVV8Zj0obHZmdDdkJml6I21jLWJ0Xy1SOz5ySTR0PF5eSgoKZGVsdGEgMTE1NzYKemNt
YmBOWEgtKyZ3KWcyKDBmQzNBKUw7YXBOcyVBfGYqX2pgQnZlN0Y2ajJlUk5NfTw7ITRpX3RxXlUl
KFEzUnktCnpVSVpuOE5DIztHKGdtYytVR1h7aGpRNVVsJndLOE4hLXRISm93ZkV7WXRKP1JeRVlR
ISl+SV5kczB0M187N2Q9KAp6MGB8e0V2VW8mcmlEKXFNZXhePj5YVDI1NlRNJEtHTEwyaGtZRkN6
VF9KeHtuOU99cl5QT0VDX29CV3drdFhsSCkKenkoUlZNOTxnMnZVXlZRVmEyfD96Ki11fFlkajgw
JUFmQz07e3ppY2l5JCtVOUBfeUp+KD9NKzRTPnhrN0Z4cD1QCnomQ0teLT99blpkR2MmJURWKVQr
fXk+Jnh2amprVWllTzJpY1hvLUFOd1dLKEZLPz9xR1ZlPy00eUlZVEMyTk5idwp6bigwMEByNm59
T1c9WiZ0cj1AU0o2M2tmRC1VdzhFTz12dFI4KWopcG0wPEw8cGtpYTsoRD0mYWokKm9pY3w+MTkK
elVXdD5LT0xUKHJDVFd6azlfWjtTQzg+MGZCTFpQSzkrJHpHIVpZcHNaQDBVdl55b1VMSXM9fDJv
bExwfV93Vl54Cno8PDFmISNhUmJfNDlkUyVJcldsJGstRjxoJDBNIyE3SVFsJD5GKlBrX3Y2PGAx
SXE7ekA8fGB7UzkmfGduVWZvSwp6WnQoNUNHJGZrSz5scXZGcE5fUCNyTDcjQDw0YlQ+ZVdnfUB4
JXNLbk8jTXslbl49aXFjWj5YdVckcG1xLTVYYTgKelUkMWJQVGp9QWBeTm5fNW9oN1QmM2F8WW5F
eTVnYzRuTztmVWdxQzdpQVRIXnpWcmltXnNldkNqKSQwPF9HKlJwCnpOfGlRRCY0eHtjelM7ZnVO
eT9GIXtKWHZ2NlE5V0RqK04tTTQmKnh8MVIpYTNvb1l6NXlrO3dGWj1jd2kpP2RGWQp6Xil9Ykti
MnR5dl9pazVQJEJaRVVyWnJleHFCJFkwYyRjWCF5VXRSdnpkPXU1SlRrOFRwaXl0Rl5Gc3NkSFgz
S3AKelB0UnV8eHsjJlZNUmJONVpGKSFnWHJCISs2OGomVUUqMEhjRm1pdEs8cnhDdnp4JmctYmNT
OXNsZCQ0bFM9N0NMCnpKZy1MJmU9UHVhPXZDI2kmNUFreSFeZkhUcnImXztXPTdHJWlMPkR3WDUz
Q0ZyXmRXaiNrPjV1KCRzJVJKfUV6TAp6JXg0LVBtaU9+a3FJISlBUjJeOGs5QjxKSC0jXiNMWDJ6
MSRhbztaWW9sPVg8O1BvcTdSIWVAS2wrdC1zLUhZI30Kel5Pbj5FSnk4QEg/fUUkdWEhM2hOQUMh
S1BBRSh5aTQxRDVCZXh5ejF7NXV2eSoxSSpHa0tafklsRGMybndHZSNHCnpVRntrfC1eeDE3ckJn
cUFZcmtmdUQ2JkVOKjBYPiRlOC0+MkIjRFJLcytWMEkodGpndUAhbVRGUj49KUxEN0xiQwp6UXx8
QSVgNzFMME52NWd6XldmSj0kK0BtLWd+SWVhTTVeKG8lME9ROVFwcjwld3dhQChwaT4jbkJRWjt9
KTczOEgKelhsZCg3aFNYajFnRnt7VjIke2FzKU9oZHBJTUEzank4bXBnbFVURzw8eWNpeHIofjkq
KUM8ITN1fiQ/VllKUFY9CnpBQ2d2bVUzMnlLTTFocj5idztmY1owVG5JQFhiY3NOd2U9KSlidU9s
O2RpcUkje0s0flRHSFpFaWByMWpsPVVsVQp6JCQ/cW95VzVYV1VxUCpmcnJAYDlkRVV5YlElLTVX
YHB3KitobjlmVGApVHZ2I2lrQkFjKEpHTXtxMDJ+UGZgfmAKelpkO3xOKlpnM1dzdWJATyVXKzFZ
OTM3bSRxU24xIUgxMjF1I3YqeXNDfT49TGNuNE16ZH1+OTxLOV5LIzk+akJICnopN3JwLVB5TFBz
KThLKmk8JTRney1SdEo/TDRFaFJBQmpKQlNyUXcmb0FXSH0kR0hSU24pOHlKe3A5WTxzTmRXZgp6
ZXRGSyVZaU9faiR2PmFWKjk1dytDXylqWmBSKG57dzIqMkF1SWlPXktYdGRPPD5vQzVzVWNxajR3
SUktP3ZBOyQKelJAI080K3JoUDRufWVtWkEoO2A+UmMoN2kpbSZIaCFZV3RwVnYoYkxuWHc0U0BU
KUV3aGsjVlZZWDxMOWY7VDZlCnokXlg3X3tnMXVFfEptdk97Y0x7T09Ie1VvdzxeT3pxRHo+dTJw
R0U1QUQ2fkNee3dSTENHVXo4Z2c1c1VENXhrawp6RXpoNVphRGd2NlFRfHVIRlNkIV5LXzUkTDwj
d0NiI3lsLUdufjFHe29LTUJaNVlFUFBNMzsoXldOKGl7eXRiJUYKeiE4QGtKYyYpYjtLVEYxNmlq
NnFfWkN+NWVZVCt0fERUPE8oUTxHMVpqPnJoPGFkRWtjQ25xQUhnX2BhZXFWQlBGCnpaI1h1PnQt
SUpoUVUxfDFaRjNzS2hWRERfWntOcHV0dTZQaHFuXzc/VlgtdE0hZkEoT29TMmgxQnk8IVojVnJa
cAp6dykmb0BhWHlGX2FrWX18TzhKO1BZcnkxITNQOSsxKmB0NWhEcH0+KzU7eHckVmhXPVcmSSQt
Zzl4KDhWPD5fX14Kek4waT1lKl9pdEBvSmFaV3MoRUxNMFQ/LUxrUFV4aSU4bjJJe1VXP0NEWFJF
fTk5fV8paDdAKUJUSmptYkdhYnNBCnpYQUV3RWVkc2ZAYEhwUFhKKU1rQkYmTkEhdSNydVhYMjxq
bGB4aDZoVVhoYFJFbFZ6WUlgZElQK3YhTGElfGtzTAp6IXVScWJOfVApbSl5cz0jV1gtOzFsKWBC
KypRREVYKkZEdU5xdm1XWDJsSU5BRHZvPFBVS3hAN2tSNlZ4Nm9WRiQKejZUTEFQS0JqYmslfi1X
Pipkam56cWxtV0sqZSFOKHEwXnR7cjwkQTBjb1BzMSMtY2F7RlFWTnxXUChfODQ3fURrCnoyNld5
U3BDbiFtdC12dSppKmlxWlU0OHQ7M3F3NWhXfk17fVZRQSNaP15kY0N6dyNAakY+Sy07YUUjRiZH
Jjs1Xgp6QkRqSjk4cVNlTEIjNmtsRzhNcEl0MTNzSG8rLU4kaEpiODdvMS1QWFR1ZSVHOztAOXcy
Q1MoPj0/UFlZbFRqTGMKenkzfjwlMXhwcGMyN1ooe1dfc0dCIyl7PjM9RGlmK2BIUWhzWntwSFVE
YG9tQDhzZG13NmZeT1QyJHwlTSQoO1JNCno2cy1wWUBrWnUtYD07bilRLXBaeWI5eSpwPGFISUt3
aigtVHpDQzVTd1RmMXcxXiYqeTsmSTJsP1IjPkRDSnZFcQp6ZXtfITZ7QUV9XityKnske1N1WXp3
fSMzUWY0cFN0KzVgP1VQcT9tdClOWDZ7JmZhbFVafHttQjUrKVVZPztEUGQKent9Uj41NXFxO0ko
Pk9jZHJ2NFNATGJ+VV5fRkdaeT92XmVOO2VIWDE2NCRofj9VRilmdThoUillJFUlRFlraFRpCnpm
X2tnWUwob2ZVM1FrTDkoOGMranR7TUMpdVlKRD42PiMtT1YpMSh7Q3hoVTZ0JnhvYG0yR1heNTZS
IV9IVWo1dwp6UmRQWiZeZlI0MyRVOWNvXztPUjFSMFZCQSVuMHc9Pl4qXmVrRDRORnA0QjQjcyhe
JVRITl5XOzFWbjA0NyVfVTwKeis4b1FEeF99Jj0qeSFjUT4zTE1PWDlqbUNvIXl6ZzRfRVp4UlJq
eCRrOVctd3ktZFAlcWpze2w2MDVxJDl9VygrCnpYPkFWc21IYitoeGdURiEoSUVwajZxUEstQmp6
dCZLWjh1emZjUz9rM3JEb1BMfEp7PXRHdl9DPTJQclg4VUZzcwp6WmUrQ2koakVafi1FWjsyTTQ+
SmxkSX5CXnloSUdfXztXPDMzbXdqIWJtYSlVdzdzKiN3TU1ZRHZjd1MkLUYoenUKelJ9SHFvbThF
LSNlZztQTS1SbztSU3V5Kjtvd1Vqaj8odkhyLSU+LX5KTXx8QDdwcEBhNFliQzZzOyY4aTZmQ3hT
CnpnbiRtZD0lSDBeVCQ7REplVCg9UUtpPzR9cWp2YzErTlVyKVZtQElyS2EoSzBQRXtKVFZgT3Bu
JExFOTZmJU4lQQp6I0MqVFBRfllkYXMlWTdDPn5QSlA3MyUxIVRSbjFNU1crN1k2OXBGUylaNDJt
d3pqd1dQdVB1QkglfjFrPkgkUy0Kei02aTB1OWBkc0FlejRKPEpLOEVeY1lKIyM/S3wqLSZ3K1M2
NzExK1otPF9NcEYrTiZ1eEtrVjRmYHt+OT5mLXQ9Cno0JSM0UlVBX3gwXjdDUH48QTByNjNIKzlk
Zk1SK2gofjZIaypGMVpjcDRCTFo/ejl+azRacVVEZmplSjchK2FXYQp6KkxidkFub0J6OEE1NytI
P0QoZjVpPEhPKTxYMj9pRisyX2FANHhIVm1tUGokVX51Y0kmdEZsbmpYXi0/enMjcGAKejNXZks/
VlFLT3pQaDVVZ2BEP1V4Xmt4K2MyJH1EQ1FSMn1AeTB6e05SR2xadmBfajhFeld9fTw+fmpfPWw/
cktUCnprK0thJmA4MDR1dD8jJGQ1fit9PUYzY0A/VGN0MjNWRThYIUtKcjh0KWFpbjhseXs0SyFR
R1VBbX1nVVlpdGxqMgp6RiF7UT0menFnVVN4RXV6QEc9ZjFaV15TfFZzaShOZlJeU1IoSno9RllI
eDc5WnkwZlZsUEs2Kk9UezN9YTc4a3sKenAjendUdX50ZEtIfFdXP3J5KEdtUmJQM1VEVTxCPU47
KE1WKThRK0pKYkRYMDJfaHJRY1NtJUMzeiVYZE9uTWVeCno0ZyZGPDg0VVhZaDdjY3J6bHlkaGQ8
KShWXl5jTSM+NjBlazQwSFpKXjl1aSlpSz16SE4lakd2O0k7dTxWNzw3Nwp6ND4tSWd6bVd1M2Zi
IW9UQz8/QEdlWHBHYk1zSTNmTHh+ZU9NI0FnOVhATXA1XjRhKD9NXk9zJWtqKWlUTldwN2IKek1p
Sn1sVVYmTHVAX1RsT0Fnc05gIWNMfihhezhDKz5UVmhnMnU0VXFRSDtGa25gTjF0Nz9LOXBAZmpk
aT0+eDA1Cno3YGA/UGlTUk19SG44TiooR19gSzNAKncrR1pDd18qOVhTT15zZCVXa2Q/fXJyO1FH
Z1J8QlQjekVQM00kLXA+Pgp6SEV4aj1fTUpCYng/dFdyMDFQNlc3U3JjTno0VXBRQHhka3g9PGs3
Rl9MfVJGYUk5UjFfJCgoMSl1Z01zYG96ZkkKej1WNTwzJi0/M0BSTiNye0AxJEs2VnIrVjc+fH0t
Mk80Rkx3U1hyYmtZRCk4QWxrQG9kZFVQNU0wdWtAdmJSMzh4CnpgJG5YMWcyP3RuN29FaDk+USg+
JUxKKCU8MTBGQWdBai14endOPEdTQEdIWSs5cHpgSXBGRk91YFZGVXxaP0tlWAp6KT1FSmJeJCVP
IXl0P2M+PntvJipoRVdBWnJoKSRaRlZoKkdFY1lLajAhe2U+fEdlZ1lteGxgNGF7UExWQkFsX1EK
ekFlMiUlRTY/ITdYdnM/N2FuOzRLMz5ATndXflpjX3FfSD4rOWZ1fjF0aiZPIy1tP2pHZ1NvZlpS
P24xcyM+WDN2CnpVOGg+fiQlbEk9KF41UE9ReSEwamcqYmBmTEc1d1BXbDR0UkBzfj9xNW5zeHY9
Yz1weUdgI0BmU2VfckdUfnZIKQp6WUl+fHdOSkY2UWQ3ZGEwPz40X3ctamtaREVBYWtzKCRpZFVp
YkhQKHN4U0xlTDdJdGplQk84M2wqTyQ1PTFYWiMKej8lISNnKj0kIUllYER1RVR7OUs8NTxIfk8z
MjhKbW5obWxKJCNQNlZ3ITJhQFF6eDA+I2d5OF5nNVNTeFVjKSZRCnprd2J7Ymk0R2AxTDYrZiVG
SXx4ND45UVduM241PEh2cUw5TmpATnYtQkBVZC1tZm85dihSez5RWT0wOzhvSyg3Kwp6NXdxSHJU
OUtWRXtkOGJ1Xk44OypYc1UpI0h9TUZNe2N7S0ZkYDFJS3QpPTZCSndPfkE3aEtSb3dWNTxePyNF
NTcKemNFNFIpaEQpfDhWUmZHcjQyVERkVT5LZE9hXjB2fVNqRDNwcWcxPWBTdj4yUChDemZhcyN6
OTEqalghalo7YSlSCnpAX2oraTRuTmFDcE97K3pCLWZpWUt9d1U9aW1yOVEtX0hCV0F9UGZZXnBF
dzltN3FOPTxfRkkxNDZAJDhuU2EwNAp6TlBYc0FRWjB4a1c8SWpXZ3RiJUFrI0B6MzRZMW15QjBh
bChJNylyNS1CeCZoWih5Z29eQyVhSFJTIXRAWCo1TGEKemdAJW1FUSVtY1ZSWTZ1dCU+RjhxR0ti
V01RP28tZU4pdGdBSyRAT3tKZERWWmxacTE4cGM8XiNEWXBvcjZEeypTCnp0P2s9N2BnWkBQeCto
I1g1SGVPKTJpdGZuVUlrfVdIb1hodGImXiRHUm9LUSpUMT18R1EtXkE1ZkEzS0xoRkFJYgp6SD5F
T2AxND50SFc/aT0jVm5YSkQ0Sl9tU3p4TS0lNzVrcG5wWk45SE5UaX5MQDkwMkxsJTBvTVJtO3V1
bkxQbykKenNXUiUqb3FNWE55N1hFJlVHTn02elNXazFmUk1KWC1XYlpeUm1uMnk7ZXRAcDBKfXBi
bV5KSEl6VEpkJWxDb2NUCnprIVp1S0VhKTM9NlFkRFFISzEpfWQySll1UUI2RFVHck1yQkwyelZ4
Sk84KnhHIVNKelV+TGBFYUB+XlgyWkVsXwp6QnU4MjBeTk5jM15xVz1OQHp4WiZ4Wig+by1IQH5Y
eW0jNEF7TCE/d0V0PW55JVlfM2QkNypsN3ZHUSkjIX41UEAKekMxaFY5JlU+TSRQST9NMSpQVGNm
YU5CZ0JYQj4lXmN7MjNrIzwqdmp3Y3pUT1ZzfTZ8WXpAPl95VlY7TDx6N1ojCnpJJDNgJnRCZDI7
UVBsfEVlVUApN2okaU1IYDtHNSY5Zl8lVy18VXl+YiRmOVlOZSF8bnQ/Jk01RGtsSFM5fCRFegp6
b2wzWShfQSY8UjBAXjk5K1lSRjIoQiE1Zkx2cjtkX1ZyNVZgZ0M1PnY7ZFpeWXJ9I1ZOTGBWTWU8
amwzX0U+TDUKeih2d2tva1IwYj54I343KFdeMUpMKGB6KW14VVNsaE8tUzxPSDR+bnZhKFdDUlZj
JGRCWEB2Tzs0Qz5ROVRnbG5HCnpiWFdidnU7IWlhJmQ3SDFneDxTMntIcXJ2M013TURaaEJmTkcw
fm00O1lyIXpEWm1jbUZKIW8yakhjNGBic3BoNwp6Xk5YcChmdlQ1LWtrfURMc0FwKkxKZl8yUFRP
WmRLeVN4SDNVelRqKGJYb24mO0VpRyNAM2ZpS2ZgdG9IemRLVy0KejFXJnBocSsxZFhiblN3WEh8
Qk5OYWhIQ281dHtWe2RySSRUIXtNKEQpRldAT3l1S3lzWV5LVSpQN2ZzU1R3cHEwCnp1aFUqM194
OHBPLW4+cEBIKHMxKDA9X1dlbEBsdikpdmZmZkd9R0FyKjIwdiZIUmdDaU5BR3JgKVhVMnV4LWpg
dAp6YSQ0fmxKNWZEezhGTFYmK2E3IWI4dzJzTGM5SG9BU34mSGU1eFJlJmJNU3ZGWHw9cE5fdiNK
RFZjSCooI1h1SnoKemx7ZEUyTD59JV5YVnNeQE9WM1FUaUlpKiVZeiskejtGKWokX21rNV5YYkw+
PWolYHp8KGJicDFrKmFkM0VSTmdfCnp7d3F2X0EqIyteZ1BqM09NLUI5e24kIWlkVmk1QiRXZHBv
WSNjKW91JkI/cVZWZGlpY3AoNn16Pj9CeUBqRjYhJgp6cm0jUil6ckdrZShyc1U5cTt7LXNoNiQm
RWNRJFFObmoxcHEpYT1GTk9PN0FkRkt2R3JafT5KWWFeeHNvUjFeWjYKej9abnRmSTQhSVhRTW4x
Wm0wTG8lO3Y1I2hiUG9hZTBIa3dqUUU8aGBjRDlTaztpJGJHdytua3pvYj98UiN0Pzh+CnoyPU9m
OEVBXipAXzFoYTlBdkVBJC09NEQ+PmhSZHpxWkJpUlJeM2g9UEF2JTZHdFRDK2tFUz1jan1tSlRN
NjxYUQp6QkJlMClxIVZ1PXAkRipjNCNDMGs4aEVDODMhM1dVSSojPXw5Wm5ydlFBLWkrS0puUHR2
NmlmdEd3cCVHbXokY0sKemBjSiFaaUhsdDA1d2l5KHwyb3BANlpIT0JUU3xBYmZ4b1BDUHpUWG8x
KnJxYW1mUmVFeEJqendGd0dLK29RfCYmCnpkZVM1O3hBRTJGR3pBNVowZCg8I3NXVS0mMWdLK2Nh
VD1iPHZEPkYqRH5nX0BCKik7SjJ4N0EkclpgRUwoamZwWAp6RDA0RWVnUGQ0WXlhNCt4P2djN2Bm
eSZNfWR9ZiZ2PUZ1Nzk9PUkpJmkjJEIjNmk1aTtTRFhrUyZSRDl7T3hQX2oKelZpP3d+KVEkfnFV
RSF5cmFSclJHQGM2RDUyRWpHbXRGMWV2N0FeZG1eOHZ+dnRhKX5IPF9uPnxpd2F6aUREbEY/Cnol
Y21CZXd9flJ8YktXQ2olOXM0QCZqezB5SDI4UkU/enM8dUdkdDc8I2Z1O18qWmFMWl9ZXilObVZf
fiFtdTtxPAp6LXRRM0tkZipUckBeO2NWTUZaLWNUOE9Wb0Qzc3lsOTBPazQzM15mS2hkZW5DTX1+
fW4pTGFCUEVXM0FYOHF8JFkKenBPdkNHcW0kJGgkS0JNQFk1bUN3QF42fSglMUVoX3U/KUhOR20/
K3B4eDxjZWtJbDVDVVBWMm9QZU1SQjdxYjl2CnpwKT0mV3hjOHZqWUtXSWReNEkxKClfPURNVUlC
NGMzREJMVD9kVXM4MS0jTyZ4YjZKNF9lSm19OUt1Y1g9fHx8Owp6YHVkSUFzR1o8Ql5TKD1kPjl2
RjNoVWYkZj10SzlnTVdXcCkld211VipaOGQ7REl5b1lyS3c4YSlnUTlkV3J8fG0KejhQQWJNUTBD
aiZaLXBLSG1WUDJvVmdwSngkamV5PU0zZ3IxKVR3Vz9UJSVOelRGVmRweXx0YlVvRTt3JklyM3t6
CnpZXjxzeU5EeDxjMGJ+VUh5YEhlVG4qZDBgWkB0TyVpVHFeYnAofDBuYmBvQWsqXk4hLWkyan44
QU1PV209JW9QYQp6emxNfHwkN1dOOXRrK2R3ZDYlMV90bzxKMmdXcDxmZz4tJXxOWXc1I2VqM1dW
MU8pTVVkenh1QygqNCU4Yn0hY1UKek4yLTAkWVBhdUw3MWlwS3ZwYz18c158TllCSTNidmA4dUl2
dmxAIV5BJF9sNDBgQlZFbHAqS2NpMmJEMEcoIXIzCnooWVpQNkNYK3huYUx8PXJmLUg2Mk1SYTlz
OEUtMHoqI0RsQEpvaUxrZU01QE9gWU4kSDFFV2dMT3wqVV5kRH5seAp6d3R8NGRjR1dWMktpPmRZ
eG9JdGxudHlmVHJDPDVgY29sVEVxK3JkantrU0xSc25JeTEjaDJQcE9pTFR7JG51UTMKeiZFeUUm
QSp9fW9qaSFMUyo0OGkhPHlLUkxpcU93MVRVeUxiPSV2V3kzaWhoNSNzSWZffDljWkpVQ0NXbkdn
ZWJFCnopbWQ1VVVwMHkkQ3F0SCpVWU18QlN5OUhyKExRNklSb0NXXnt5SypRYnBuOyp2MXVaT19e
dEIyRXlAdFRJcCQ1Nwp6JXJ6JntwQ00tSVVLbjFTaiVQZnhgdjhkcCZiSkhQWHxwajMySzQ5fGh7
WSFneUIlU2lJKUY5bU83QikqLWQxPGQKemBhQE9wQ15yaDtoWW07VEN5Q1UyJVlufVlKVHshWj0j
VldpOH1QPDNZNEoyTjZnRT95KDBDUX15ciFudHt7LTJ6Cno5QiloKmpnRlp2UWBtc2R4bzROUkg0
bGNYVE5iZShgJjNFQ1c3O05Fb28ySGRWSEZjVSZza3x1d21HNWM9Uz9iMQp6UUJYaipjbDZ+X2Y7
QmBmJmwxNTA1a0J2fldzMyRxRXd1P3BLcH5gX3dCbFBRI2d5PCRydmZqNClRMDdHN1Y3bl8KemxQ
QCNJTzBJa3drX0sjTjN6Jj9sZSs7SyhGIy1aPTVGb0t2bnhyfjFJdH0kVXJ6d09ydCt8NkJVTHJr
OUVMYXpZCnohUGBWbzNvOVRRb0khJF4jcyVWVTBAYWJCeWJJdkdjLWVlfXM4aClATyR9eCNORmtI
VXZwN15jeCUjKmUoTE03dwp6cykrKHJPWikrZGg8TWxjRVNMbEZwXzY8dyhAKzFHU05RKyhyVF8x
REBfVykwRVhQMnAjVyYqcys/RSlhSjVCdUQKemYrejNqPEcoKXU2Xl9mSlVqWUZAKXRAY1ZPZnhp
b0xJdUNiKHBzIUQwRlAyUlhmV0laMU4tTz1YTmhjRiFmdnYlCno8aDY5KV5pZFBYKHZjKChlYDtT
amliRjx4WSNfXkwqRUorPiRRMGkpR01iPShyTSotUncwfS1mSElxUEJOS2c+LQp6ZXI2M1V4IVNt
QWFGMmorTlhDajB5Vk8yX2pCLSs7TmBAal8waVlMTUE+eypkQWJlZiliUXd0dFlpY1N2NSMkVlgK
elozMk5AcnVZQmM5SGtOIyh7SVA8cHY2eVF4dz4tJGReJHtiK3ZuOTFhKGRfJGlfJTgzJGcjOFRQ
dGhWO0VrXz81CnppenxAPzR6Pk9DNkdWZzRfe2dLM09eYSRtVTFhJUhsYVkjTkxDcFN4ek9lWVBE
OCFrRTRAS29MN2FjPUM9YUZjMQp6VDVaUH1TTiR1T1U/IzgrKXB4enZxb08hPDsoMWIlS25hIUZD
IXhlKXVgS1EhVj5iUzJyMkJ5Zk5SXkNvTDNXOXcKenhwJEZFdTxrQyk0fl8lQDBvVj1Na1FKbXpB
RX0+Nl9USlBKX2NVPFRtS1R7ZD81WDVfZTR5QTRwcEgoYjhUUHh1CnpsSHUhTk0wVjdmZ3llKSpv
SyVzRiF0fXtgRC12RERqZmNrSmY1Qnp7I0luKWI0S2FAcnpuLSVUd1N0NE0qQVBIYQp6VigxZk9U
Qko3PD9aciRyOWUjWDRNVERhQ0JlZUh4LVF7NC0hfHB+MklJejM5OUg8QXtyY0JgJT11b2BgTSRW
ZzcKemRLfHh3PFNFIVYrVTstVD9yTlclSUZ9KUQzZS1ndTtFKys9YFR2SHB5e28lUkleTkVrLVEp
UmdDRGxxTmQ2bGR8CnpLdEs1TUprMW9Nang2fDtKdns5Ql9QTipZJXlRUjxhfFNnYnhyNX1gUkx3
R3JRMnZ+N0N4NH4xbW8mZG9KYl9vWQp6LTVWezxRP2V3aCFHKktsPn0qXjVgbXxxIzJJckZvezN9
a0x0MndCTnlBOEk/e0ghKyN6T1cwYHh2czlRYWdqdnIKemY8R1I3MD9aWUlfNXNMcGVlQCQjTT9w
dGxIY1dySGJuVTB4I15QfUJkaX5IIWpkJUxNaHtHUmR2cXYqWTNldkFwCnptJSZ3a2BIcDFtP0tm
QWRUNXBVTkZ8TCU0MHZnR0c1czZ+ZDYtSWZRI3VvU25SX2ZLKGJiVHRoem5GaTJ5Vm5Tewp6SU84
RCgxXnh3fV95ez94PlA9Mj95RlhnWkdANSF4O3VoUitSc1NsOTJzdT0jXigoS0IwRDtJQEJeZSph
Y31EbEUKekVCREshVjJZS0QjNGY0fnVLayhIe1VAd25xKVJFc0Q7dTdgSnM9biUodl5ZTGw8YUxS
TiomYjtAO3ZHTFFtMG1jCnpseDA8Uy09X1h3YVNaO08kQTBqTjF9PGNKdGl7YWpFTX5xTk1aVyU3
LU1SbG1WNnMzYTluPSZqYDlFYzxkc049RAp6a31zcEtqUi0yM2VVckJyczVFX2ViIXchNEVjMzVK
ZT9WaDFvdkFsdkpTIUlmTmNQQzZjIXpAb0UlMDN0PlVFZXEKejBKdn4+T1o3S1pgRWF6Z1IhdyNE
ViQhY0skPTsmZiotXndTbjJjaSlJVmh1KGA/cGlhJEVHR3YjNzJyVzdjcyh+CnpgMC1rPWs3OVpf
QTFmYXZCcWNgfmI/Szhuakt1azlxbHg4djNrJXRQZDIzXnJaY18/REJzeU9kR0N9SSlyJTVGUAp6
Qn5PdUlqJGlhO293anJMSEBrV0w9VHl9OU1ZfHNqTm8oVlhgMFAjO1Z7JTxjOE1VOCVBaEV5bkNE
TjAtTWlzc2gKel9hPnhLKmR3SEZjdENsTV9CSmB1SVBuUU9SeCY5dGEqdis+djY5aW0qO05MWSlw
UGUjQTJfdFc5MH1SNW1PWn1TCnohWmx2cVFKJmtGZEVeeE5VYD9TSVBmYzl0I3wpYFM0ZU5mPHBB
ZmxLJi1JWUNvSDIoaWd0cyQoZXZrOz9rUX5pMAp6O1pJPWFYezBUcTVHQ1ckKGVJKD83cUt1eTRv
Vl4remZQPm9pNSZpMGV1Xkx5aFBgRmZiNXNzO0oyeCgtVnIoMG4Kek97MG0tU1FJRWtWZE1rakBz
PHp0Vz5oent6Syh0Nl4mQ3ltdSN6ZkdOSm8kLT8zJmpINlk1YmpVXlNgbV8rZCt7CnpsS0FkTVRB
cyFMLTZPeT02a2xJTEYqNVdnKyVhakprbzxhJihaSn1rbD5gUntyVzU2OSlhRjV6ZmZRRz1xRTwj
RAp6bSUke3QtYV97RW1rQWZGaDErWXA2bWlwMUBncn5UZUx9XkEyWCNRJHEmP3BTeWA9ST1IZT5l
V1huUHc7M3U8RVkKeio9RylweWc/QlE5fSYjZnUzTWV9elE2Uns3Y0MoYio7OEU2XzEzdmVgcUUy
aFRfIVZoaHhyVEtjQFhQfHtIVk16Cno7XnU7I0UtPEU1PHwwUElYeHpHbHB0JmhielUxZ2RkSzNF
U1JDRUdCPDMzPnxTciFyUWIhVWZ4d2p5Mzx7ZWlSMQp6fEpXPGdVaisyT094SW0oUX1fMFBKOWsw
O1hMOTNqe3VTN0gkRXpjV1l1Q31HayhqXlk9YEA1aTd+YU1KP0pARX0KekEpNldFODNHWDk7dnlU
ck01TDs5XileYkZ1RjhFfkdvenBxV319THZnb0hIc2p1P1FQTURNSU89SmR2OHZfSnxNCnpyfXco
OUY7KXZzdEclek1wUlRWTEUtUiM9dDRyTTtyWFVRcEg7NzJsXzUjQzMyZyg2WGh5PFhHTDhwdUJx
Z1FyKAp6KXc1JnsyWjBDdWRkRWt0VmRna0VQRjhgM2pVQWApNmVvN1hxJWk4VjckWSY5SU84WT1r
dXA+V2NvOHx3djtsS0EKejNlVmV7Mkd5VE5LNTVjcmBTQFY4USlpSk5DRHRLOyhNeUR9I0UxOHNY
dFRnYjx+VDdGKm0zUUQpTHRrRW9pfFc7CnphWGM/UnQofGJDVUlGKlhQNjR9JSE8dExFO09MPz5v
P0BNa25DTktmQFhuZHNkKy1RZ041dmNGMTB2NEArRm8oSQp6XyVLSGFeVH1ScU9eSERNQ3k5eTMj
Yn1MVisjRDd+WDsrQiVBMzZ9aWpEZUBLKyZHVkhqdTMlZVJqIT94dFMybXEKejwwSXpOYypLWUQr
PX5GNXlMZFpaJGlRQSZrNUZaZ1goQVlaXjhfODA2VE16JmlUanxmSHEwU2xASE9NaWdFKHk4Cnpx
NSNRT2dmP21oNjtoUjRDWG9mVVkjfjwzOCQpYk1GJV9QbEJ0WW9VWiRyOUA5WntTZU1pJVQyX1J+
fSNsXk59Xgp6TGRTQXllOzZeM0NlRmkqdz8mdEAjTWUqTWRob0VObkU/K3dIYEVUclRWanA0aDI4
ZVpmUTZWZnB5VyNST1JfZWgKekl8fld8dWJHRUJBbm9wMzlhfSFmYU8pO0tJSzcjWXNxcHFGSGVH
NXJkcDRkRDgkZHhmTDsqdm0xJFM2PCktVXpTCno7KWBRK2pXdkFaQHkpWSVhJXM0KVYlOGg7YUdE
bkU/Mjkzb1lOOU9qT2kxRnhPeHh+XjQ1TSRTbmpDZy1lViZuRAp6V3AtNFJLUG9JM2J3UWFRUnxF
fmFrfFV2PjtzTUw/MlBvfXNnZXkqUGdOdElZc09NTXZPazhzVVRrb35OKmxYO1cKeiZBJH01akY+
WWhxUyMxPzZCK3pgJC1vdiZxZW9SLVptRnc1JmQxbm0hP1okaVFATWtpIyZfbkcxKiF0JVRIeUl4
CnpEKFF4Sk1Fa3VmNDVSTSVmYlFXeXVTUjVnOHIyKjhLNjgzajMkdUk2ZWBvQ3gyT2V2UztuWCQ7
SitPeml7RFVDTAp6bmxEcEshI2Y3fTdDSDc5Mz5EfSVDKitSKnpMVnRvTUNydzsqcUcrVnAyYU4w
b2lFbG47PFl7fWJTeVQ+IW4/RDUKej9wKX4kd0YqQiRTUnU2VkxwfVlFdlVVI2BjX29jeXlzUW0l
XzgxbTFaeTgrbC1aaHIoZiVrZ1pTMUdxXiFzMlhzCno9WFphQ18oeEszIW8lZl9iflQrQEc0MkIq
NVEod3hEbXA/cj1SUE5gX1E9USFZb1YpcXlEblFrUm5KPSZRJCtZWgp6OzVuUG55QU51QUdkOTBs
QCopYzskUUhZJTlHZjIqWnNQT1FEcEZjWl87N2tfPDQ9JClAYVN9Qj5iXzV0YHNqX3kKejxEa0Z5
ODEobjx5dGdJPW4qezBDP0VUNno4SFRMUG9UZGdAKWUtK0JKISMkbEwzJntTT19jRyktOUV3UFd1
Q2tmCnpmKiRLUk4mYk92V04xWXBsOHlxUHtnMkB7QktCU3hpLSNtJHtrPGdVQHVDMktaTjItYkNl
YFk5SEZiRGdCIWleUwp6dGRBPWVmN0Zka0lMalpmVTk8bklrKXpnI15nTnZyemNPd2F7UUpBR2Bu
VlMqVjdJTDZLQk1qP2gwMUVMJilwVUAKem1LJSVCSD4wKzs4PXUzb1QxZiU9NDgxOWFKbjxvYFNo
MkRPUCM8eUxUMmlLKVRRRzxZXzxhNjVfPDtDaHUrND1lCno1WmZiV3A2fE47a0lvJFktPm8/d180
MkI0NDd6d1FgbUljanp0IXI0Q0QybF8panImWHhaQDw8bFJvP0lgMSRGeQp6fDRue1VXVnxBaS0m
enIoc2QhMVZMT1BAQz8mKWV1KnphMGIybmFuXikkSUBeTSl8Tz5vayVUU1F8KFJQNGV2WmUKejt1
Q0w+K2lKVjxfenRXPiNIenkwJUVadzdhQVRafFY4IUFDa2RVODF2d0QldkFSWS1uWGF2bztuNFIq
VCZYe0YqCnpOSnA0X0gqa3NLM3tOOHUkLWlkRllnaFBwckFfJHludiMpPWRtczJVai1CcyQ8VilF
b3hyYWlMOGlrLSRyITQ7cAp6Xj1tV3pwUmgtVGtQU1NCeVo8VDhOQ29Ta3o1TERaQE5XS15DV3Nh
OShlTkNSXk5jYnA/XlptXnl1b09GTitsMzwKekFCSXRLQUNCfUhUUCR1O04oY09zdHMpaWw7WWJY
YVNKcW1qJEA1KnFkNFRpTz1DN2x6bDxANFM1STwrTlAjKEYjCnooMzU3V2d2WUclaUtZSTB3P3I9
MkJtbTAweWQ7SjRYJEpXN0F0dyY/S211YDtFTUJrQWxpNSE5STZNdz8tRio9ZAp6cW9nMitVaGVa
KCFNaVI1eCNvRG9jbipsOSNeYDF7UHxULWZibz9nKUdYNF9efE1jampMNjVHRysjT1NTO2YtPUAK
eiZtI31FQGNVREB0byUxaGBMRmN2LXdnV35zPiM7e01iM2EwRj1sU2kycEk4WktvOEMydUtKcUhV
dGo8SjA0JVRuCnooSV5AQm0+JlR3TThscitSQl99MkUmOFU8czF6R3Jsc3pDeERDRHlmbiN0aTlq
Kmp8SU5VemVGIS1GYmd0fGtzQgp6MmcyNzE2bkg+QTVQPUJxMURPVStDMnVrbXFZRmBBQGckSmgm
JGUqYGF1ZD5yT3dRMCgwQ3tkenRvcjFuMyRmcDAKenlyTWJ1ISRoQyNYTmBNUVlgUHxlMVAzOTA3
K2JhclRBKFUjPVIrfDwycSZPdGpadTlzZiRSNU9GfC0/KFYjNUBJCnpycnREeEJwM0xGb0NqPTxy
P2gwcyhQKn11JTFKaHZvQE50V2QhYD1qIWs2alhZQms9QG1UfV56NyUxV2BEckRqcgp6NWFHI2t1
P0VhdV9yMzNQKChlcExofWZmNSFkeTUwPTAmU0VOSkVwSVNFblQmPGBFWj5RQDZKZTR7cSpWVGpU
eTMKekIlRTFuMTlKWkEwVz4tU2kpfWM/RSpqVDszMD5vMTtVKncoRksweW40eVpuUiUwPTxnQEdr
SjIqT152OWI0TCkyCnpNO0BHMzN0S3c9UmJKdn54N3F+NkZ8JXBvenlFQ2NJPzRhZjtyV0F4YSlF
MXEoVlMjIStAJnBCOCUkWSo9O0lCUgp6YDtOb3N8MyV9am8yQGFETy05TVdrdV5HNCZ2PXs0PD8m
dGUkeWhSYU09KlhwcUFTa0VNNT9RdlpndzF6WmcyZn4KelRnbSNgQyEqYlctZUhUVURTUT0mPXl5
e2A4aDEkfmFDYjtDVkNsVkhyQ3orWlJ2dkBqVUFnWT9ZcWZYUkJYfCF9Cno2aXgyNyFHPGZYKW8z
Qjg/VHBTZlglXmxiciR5PDUjNUNjUGZAaVBWSzApQXZIc2Z5QmBJUzcpMXFwb1VxOF4leAp6TzR1
UDtfOUlYOWQ2QCR4elAkTSloUWk5NW4kdiV9Y09VKnxfaWooTjM5SjBWUkNLdDghKTE3TEpaUjZW
aTJSS3AKejA5QH5eP15yOF9GM2s+SVNiPSpibncwbXlIR1VXbVVBeiRxelRtXnxCYWZ0WCRTbjNi
YFBqQyQkNWllQko5PmFFCnpiMiY0PXZ+QS05cyNGRXdtcmgkTk5KX3tIZDlITXA9MnRJcnVXTTt+
YUBTJWkjenBUPmB2dHx3USlmU1o/eDxhNQp6ZTQzNT9XQUNTays5MjZ8I31NfHdJaEZrS01rMHQ1
VStVOTEmREZOZjJFdFFUM15eKGlWdXlZfktoQFBJMkFfSWwKejh2MSkyZDxLV1dEKnZET0lDYmQx
KU9SLWxIJEV5NTtgT0wzbHo1UG4+R2g+XlRvM25DMDxkOStLY1Mmc1d7Ql5TCnokSk8pRU1TNm9D
WUozTnlrRSU2RSt4WihvTiZONH5kaUM8cFdSWCRse2ZxPEtTM21HKTRTMXlDeH5PMnl3OHU0Tgp6
c3szfU97fGB1bFNlMzUpazJMVXlkRU5RNHFvb2RCV3I4N3oxX0gxcEN2ciNBV3BMfSFCek5nSFcw
YzMkMzhSJWAKekVEQlF+MUg5b1lrSlNFcForSTFAOFhWMUt7QlVhaSQ4Tmo2ZSoxTFJrTEJFZzcz
Wio4em0mciokIT5CKFVJbGwxCno3R1kyNDJUeGRkdlRrK0otZlZLWnlOd1okWlk+QFU3b1hsSDwk
SklRc3lUSEA8SVYqaXM7S1lNeDwwTjNSVXZkJAp6X2JpZEJXWVdUdXpUfUM1QDZVWUNJMSZEcSQ+
eURNPUMkIWglSl5wYUUwXiQxQChvNGVwUnkrcDRlNSpvP2hRc2QKejEtMH0+OXtkPUxRWkgqP3V8
dGg5MG1mNVFOeVVkVGopVmB4bXVgcUJXSGNaPntqX3wyZChSRXt1WldnWFU9ZVBTCno2PjBkNk1B
QlRwIXVFd1BYPEktNEZGbjU3dnVUSGFwej9vYiU5I2ZxR1hqKlhPMl4kWj5PM1puZVZwKVB0RWBz
Wgp4I0ZYI05tZjk7JUthIzJtTzdPTyh1UFRtMUshSipmZioqPT0tIVJnaHFOTTxUa1Qme2FvfkNg
b2UqdndrO3F3M2gKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvc3ZnL2Nz
cy9zdGFycy13aXRoLXNoYWRvdy1leHBlY3RlZC5wbmcgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvc3ZnL2Nzcy9zdGFycy13aXRoLXNoYWRvdy1leHBlY3RlZC5wbmcKaW5kZXggYzM2NzlkZTMz
Y2VmMDFjZGVjMGIzNmIzNDY0ZjRjZTdiMTljYjExOS4uNDNlNThkMDRhN2FiNTQzOTgyMTk4MzY2
ZWJjYmM0YjM3ZTU0MmQzYiAxMDA2NDQKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEyNzc3Cnpj
bWVJWl9naG9oX1hkaE8kZiVTLUsjKTJEJHstKmhDND8zb0skP1VoR15IMDJrUzJzKTYzYS1IWDZP
Vl4yXzttSwp6UEpvQ1lpWmxzNTVKQy03QlE+LW5fYn1pNE44SU49cFg3KCtJWFBNTmViLXVoPzxE
UllzNk5MPCFIWDtgRUY2WGcKengtYkAmYX52IXpYQ001MjdQd05+bjVQZkNvT2R6UypKV1h6S0hz
KkxwamNTYFdISHBlWVl+ZHhBUiU5NFhpO01PCnokeUhvJilDdUBeck95c14zOSslOUg9SnVTeyF+
KFJDVUEyWHs0anB7eDh3dCh2bTtQRy1RYkZtXk1ZXkIyKTtmMAp6TUJ3SUlofjQ7S1h6ey0paXRr
RG9vYztUbXVFfDhxdGRvY2ZSdiFlNWBxKj55YF8zdlo+dmhOejJRQVl0dVZ8T3QKekA5WlVLbGsh
T1AmQXhTTl9PZ1RnQTY9eU4+NVY/YmVtKnE8TEtZanV3STdxSD1VR15lP2JOOUpFRyFAMUU9c2FJ
Cnp5QThnO143Y09URVghWGchMF8rP3BTK1pgdyRKWkpYM1RId0FvenN5RX1uZ3d2ZkFxUz41V2kj
clRsYiFZPkQ8eAp6VEo7aFBjOSheLXhGQXFBcSY9e3RuWEY5OSlvXlRxJnM0dUV7TzJ4OWFTQUhR
Uy18bzVXYyhpZmd0Jn5xKHoqMz0KeiFTVGFeI1VJYkdpPG07KCZadEh8e3FnUF4xcCF8ITU4M3xC
Ynp8TmZfIWJKNDxjczYwcC07N0A8fFk8VGRJU3VGCnpXZXUqcVFrM0hSJX1FYCs2MXkzPjJaYzln
TWBEXyVQNm4pej8hVE5BTEtPcyomdkNARG1iX3I7ZGxXT3N6MlR8JQp6ZFlaOGB3YmspY1NCa15E
V09Yc2tKYmkjc3VnQz8reEl4RGhIdG4zYFFSKkt2N1ktNGRfel8zSHY3SkJ0ZTcmQy0KeiRqU21Z
aHoxYk1yakpmNFV1eEdlTSkjJXtKRyRSYWRUZDlsK2A0NE1kTH1DZDlxMTh+an5fPFhCWSlfX0F6
VGlrCnolMG02Szh5IXhhZnwrYGw3amdAX0w5QEh4M31hTV9fIUo0UEJpX0U9bHRmTDJzZzZyV3Na
JS1vIVdoM1Y+RkJlWgp6e31uWmswSyhqSyNNVnJqUm80VF5IZlgyeG5zWnxCZCRXIVZ8TSUpbyVO
OC02KCFPdHEpeSpeQmw+US1TT35LMlQKel5qS31iI0kxZ2tNeGkrOFd7aGJePG93WmlmaVFDJjdq
Q1JtPz5nOXd6TXR1PFZKNCNYRm8xQmFaISV1TSh9OXJrCnpLPCh6bD9UQ3h2WW5LfClySlFKNHUl
YHA5aW9BeU9ZUGFoOF9ERHpFJUsjMUdeVW1JbVRYaFRvKVZeODdnaGcjRQp6YX1DN3tPbk1xOTN0
bkN9V3drQWllMUI5dT9TUy1aM29BRmZKKilmODVaKVpKa1d2fVQlQE96Ti0zdkomZCY1dSoKekcz
QSNYcFNHKyZUfVZNdXd6bWlJayMmJSFUQSM4U3IrSDFseXk+SVE5YTNjd3l0Vl8zYXYoRTF2NTEt
NkIoO1c2Cno4PnUyJlQ7JH0pc1JrXihfPVRMKGc2PHdAWExiIzAhM0s+K0ReSTFgYSFjU0VPZ3Mo
SFk9RClgUD5hRlNQb0FOYgp6YihsaSoyeXp4TnpFb2xyaX5LX1dSPXdEbyRfOEtue3VZb3pqYSF2
Pm0lQmNEdSF5PCgqIVBXKkhMVEBMRis+V1YKeiN1b1BXbipTfH00e24/aD9eYGwxS05TdWpEQVdD
UnNVJFFwe152YlNrKnpAODVNdTIlTiVNKXA7QHo8bkhEZSVwCnpmWDBDPXZ+cXU2ZiEqKlp1Y2E+
RSVCbWVsVHUxakVvcTFXbkdjX1JNdF50SlNNfGN1RyM1RDtCdDBxVUJoVHZzKQp6QlVXMz0xRjE1
WnQ0fTM/an5fUlJTN0F5VTVhd1VkVVV0Zm8xRnRWT153bUh1IyRqaVpiZkd1YmttWDN+UUg1MWsK
ekVsdztmKmgqKTx6QjBOaUk9VHlNLWpNK2dSUHlXc14xaylXKDUoQEg9c3FLZHYqRzQ4KTVBMjZI
P2I+QUxofUdnCnp5Izxnc3AzKFpXWEY2fEM3bXZ1QjxZdDZCUUU5KFhUcFdoa3dhWCE7Z3hjJU9r
RFRUSz1SZUlleF5yJn4oMGQxWgp6R204YC0+Z3kqWHRfTDdSODFQbCFfZVA/IXl2bzh0Yj1gbG1f
TWZ6cXJvJWorMEMjQUh7THFJKjczQn01Z2oodiUKejJMaUhve3FoMDNZPlltb2Vsdl5eQGtMcDU5
Z0w1VCQtX3BoT0JgIWVCJXpzclZkSVBgbCRzZzZnPWg0NlZHMWhQCnopNF54NlJqcilRJXgzJkgx
SWVjLTcrdkJ9X212fkE7K3A/OWtRTH5PWlYraFk5SCQ8WD1vVHo5LSVPSkRuUXpyfgp6VTxnOzF0
Vikpak02X3I8MWRObkl7Rmw0RzB0aVd6ZGRrMn5qS2xjSDU8VyU1dWhval51RXczJjg2WSF7MFE9
QTwKemFqVSlySHNMcXV4YGlLPXY4aF4+djBMV0xIVmUwSDk7fXYzcTIyPlAqPHNuI0RKVnNkZmJo
PEpHaiMxSVEza0JKCnpDZ1YlTDFHZiRAZG02TllDdVVVbnokYndicl9ySk5eJCo9dzJlPDxHOUp6
PzhYQCpXYCpZWVZjJmNST3RrM1RuRQp6TzljZz5nZGlsKjd7S3YmcldWUGEhcE5lYy19Pn5TQHYk
RDhzKk1HQnQmT1d9anBGejR4NX0hPTtIcnsyaVQ4Qm8KeilkMFZiJG0pUXRxdGpBbFVlYWdhRDNy
TGtaeG16ZndieFJ1fDM1TT0jT2VEWE56cS1eMDFIP0U3VDZYKjdVTmNACnpQJGZIY1glKD11bDs5
c31JXnwxJWcwK3liVHdNUmAtcmIjV3JHK34zT0BjbVFNeFdEUns1SDFUaFVUfGghYWpGcwp6OCVE
cGhfVlZsYnspUFY0NyVPPjVSTV5II0ZSYUdHLV4+ckA5YWR7ZDlQJWc2czhzdnxOOS19XnNLJFNg
S3ZXRXcKei1oSFZUV2B4YnpAP3BgZW83cDIjNXd1cHZQRVd5bUBXIWp0UzlodVZZfUgpZG92WFMx
Py0pc2UqVDItMHhHV1cwCnpKYDQhRU54VG5oPypWYnImVXcrPlRXR3F+aH1LUTVBPXt8UGRmRnI0
SjtJPVI7cFZ9d3VzTCkyYHcmQFdkdC1rJAp6bmh4JCNQVzNZN2l6aXVmPHQzSyFiJnZSK05PYmtg
RCkkUHFGT2Vqa1d0RDNROzN7azt2cGF8PlNGNWE1YHZuUFoKeml1dkE9RDszeE5OSzRJTHYkLSlr
elJLd0w8Y09vXmZPMEFRSCsobDQ1aT0wY0BiVVp5PCZifTlgOURYZ2UmYXZOCnpVa0dwTD9uU1lo
U2l8ZyspenFlKzA3MTdJeVZNemFDdlJQTys3SWZnXipIPi1tb0tEYlohKmN7PXJZLWRXTUVCagp6
N1BAP19MZCZIZmN0Rz5QLWZ8REJ4Xjx8KlV0S2hKWj1LX057YjJLQXsrazdLWTVVR3wtbzRTNUZp
KUZyMU0qOEoKenh9eG1vdkFPQ2JDPV9mN1Y4KzIlZnRvPz9UaUU9WndeZTclKz8rIStMMFdEU2ta
bG9acTxya3Z5fkVgWlRfKVV9CnptU1pqRUN9TWh+M0VwKFQoRElnOS1vQSpiNGR2Nis8MXkoUDAo
SE11TGN1VkQ4fnVoJEZETzVtQ2BNV2FPYyVxMgp6Kj9xOThIR0AwWlReaS04YllSUmJmbCo0b2Vt
JHJfcnlWeXBQZ1VVQytxS0BSaFVCNkx7WHBPSyNpTHh0VSV7dSoKejElQ0Z1NylyVEdkemkxRVdS
ZGN3cktTVGRmNHgkeCN0UHo0R0t2ITh2R3xwU2UjbU0lM2d5fF95VVZPRVJPU1hzCnpwdFRlTnZV
KkFNIS15PEN0KXd3K3BYZmBDYXRld0ZvNzk8XklYNTZEd1I5c0hAblUraUtDclB6RDUzNXlaUHUj
Rwp6RWFOdVhPfip3V2kmTlVJKHJRKmMoekQ0OWBEeGghNTl6eUBVdn4xPypUSFgkVDRsTilwTDlI
YChVZmcqPip1eykKejIma3x+Y2A3KTlkTT0wPkgkejxUK1QjaUdudV8/T3lffHRNQkw3NGx1NFdG
XzRsNHtSckRfTT0ySSMleFc2K2xkCnpJfnV1RSY9Uj9ealVLZV8oMVRCMCV1aFJVbDJKNzZ0SUY+
TmItJjlvbDt9P3xYLThiRmVsIypPbUJTfWVSTFd7dAp6YGwmfktGc3Z+R3dBdUQ2antpI0YrZSZl
fHdSQVg2Mz4rWmlAQFB4JkA+STlaYGU8KVZ4WXh9bHdJcipLUE5KYFAKelFpTld9ej15Y2RpTn1P
KmFkbH53JG1iO2dQe0JRUF9aOz8wekVnQUYmSmwqdSYmWSV7Q31fcGBie1RhVVZUYDNgCnpfX3cr
P2xTTF9BY2BwfD16fnNSaShkTDRNeVo2QnRzakB8QitXWUNybUclITRDYXdsaCptLVU/e2hubXJh
bjdlSgp6XnVpRCtaKnBgUj9mOS0qdz8jRC1PITJzcGg9diheTGF8VSg/ZmIkbnJvK15WdiRBUEJq
JGNYNGQoN1ZQX1E8Z3sKejgkI0UhbWRpRGx7anFfTDJ8aSFfXnpNSl82eitfNVVQUVpVJkVNXk1g
T1ItPk5QZDlnUFdGKjVEcSYyVGR6bmBJCno7Qm5BVkx1b3hleGFpSG83cmhRMEZQdSt5Kz9pb2FU
UklCYXRQZSo9Qj90e01yN24lSStSXjdtMykmQmQtKFF3Wgp6KmNta0JfTk5OYjlHZG4mZHZlc3Bp
MlJjUGVhfjBwRGdYeyhjYTN6I1lGWW1oLVdxJHooSSRQMWQ5cmwkYSZPPnwKelYqe3o4dj07MzZN
di1xQjRsZVI8PT9rMiFHd1VWUWQ3MUl7K1k4WU8/dkc4Q3E9VjsmSDFHY1VVOD0wJCY4V0stCnpi
OGA+eGIoPUhlK3V3XkFeaUVxZmA4ZCYoLXRFc3V5eEgofHNQM2FtdT4rZEV7UC1rS2shRCk4R2JR
S312ZV5OcQp6Rk93UEB5R2QrZTUkeEtHJjM4eG1pczI8Kj8hcF5nS1JKcWhTTkZvcFd5OyVIR0Z2
P0prSE13MEtUfCFnOzlqXzAKenh9MlZie0MmKSZGM3Fhb0E+RFM2U3Zld3QtO1M7MSQ1KHUlZjdX
cH0zeExnaHFkQnpHPmhaTEM5b2M2TzU9JGoyCnppJUp7TWtJJD9fbD1+U3wkKTw+KDcjblUwVGFM
SU11YU53OGEzOT02JSR1WHBXTn1afXIwWmx5UWtwUFc5T31MMQp6bFQ8fk40dVh8YnR2T1VUd3VD
cEtGKXdRUl8lIzFYcyphcU9RNXJ5S2EtZEFRWGElMk93VUpXRzt7Z0A9aD9HSHUKenVkP3s1U3Up
SnNZSyQqMlRje0YtYXFVWXk+K1coYmZaJm0qS2Rla141MktFbWw1KUhOezY/dk5MRnY8OVRYc0Rp
Cnp8SWlZMHBUdH4mSzgrUWI2IW9CS1h9P0pyLTxCPzw9NiFSI05xPT01QnRnRilVbXZHYEZEZj1J
b2FFMzN0RzJnVQp6dEs5N2R2RT9uPm0oT2x+KXo4NGJWQ3hrK2R9WjQ5R35OdEwxWFppSSNmNzRh
OShRZ0xLZW4zTEpQM1ptUUY2cSMKeik/MHVSQ1h3S1VKaX48bUclQ0opR3ZxRm12OTkmY2RhZiFT
XipISHlAWDwzdEhjKj9DLTxqYT4lbiMwOGBfSUNFCnp4UHtYZUI2Nj0zZjxtUlhAbVc7Jk1QRSNU
aU5FSzNZVVE8dDtmOyMxXjB4WEo7JiZUVDx5VzVIO0NPQzZ5VW1ORAp6anw1REhQcjZNUi00fUY9
WnIqRl90YX4kME5YPzBiYEB2OyQrZHB7WStHdH18USZ7bHhVdW9KfHN8RHJ5Qks+KkkKekx1b0tq
PHNNWGE7QjNodz1LJEQhX1BSelk9P0g2aypiI1lkcXJeUFlnUWhicTwreHZOR15xS3JyKTJmKlB+
aDBsCnpUKnNhciZZQj1oMFhRXyl7XjVxYmRpTmpZcl5HbnRATXhlcD84bktHREx0Rz9hU3J9ZXgk
ZWNBKlZWZUpuMzxERQp6eVYtcmwlb0U/eS1aMT05QyRlUj9nQlImSHU4dFdCdzVeXmhVa2tVQjF6
KSVfQS07cn0oRTVTY3g3cio4e2IxPEUKem1yJVMhYHllS0BZTDdZRTQpPmotQ2tqWCp5WXBSLWBZ
Kjg4Ky14RVRTYmxnXiRNQnxpOTkxRiUlYU58X3JNb1h2Cno1ITwyMGxtITF+TEZDViR3V1gtcUIy
P1JfJUgqVn0yKTE2d29+P35UP2VUcDEmcCtLdGVpciF+c0FzREBgczhfKAp6akZ7c2AlbUo8WS0l
RG5leiQ0RkxkQV5vXjkwYHdWUXBCeGtNRnVebndBampReFJ1OCpGNVpvQWBvc1NrO2d5QWIKelkx
dCk5SzEtRCZjSykpQjxmSD1waGc8N00paCsqNlFZfGJrM1BZNG5BVGRIcm0tYnJEV25xXiFeezdG
YD1tJmgkCnplJDYpQCExVlltVFYtWn5SK14xcDskOXt+JjxtX0kqQ3k9PiNNPlBFeWVISTU1NCl7
NjgpfStIUXJwUC0teGdHaAp6UE40bXx6WlhhOCNYU2ppWmVte2xxUVQ5NT10d3plSkpjUigkN0oy
WWwhYH4wd21maWI0UDFlPiE1a3hMVXA4PyMKenRXZzMoaT1DXjZ3YiFzRlh0SnpxITExU0Q8bVVX
UXxLM34oTWFZOX1aPCQjaDh+YkVVK30zaGIxOF9OX0k7N1drCnpFcGRebDEhQXM2SHRJT1c/USQm
KHhnP1hCKSphYmJUMzswTCt2ITxxKnxlPkYjQChgU1J6NGB+PW9haGFQRz85KQp6R1o3RD5KUkJ7
RUJDbGNWaU1xSkllPShadWBjdkI7eDk1ZDQxZ3IqMm1VVzh9NFdUQFRvJnVlclF1QmA4emVXJG8K
eldhdipaJSh8ejM5VX5AZkVzZXBSbEA4ZDVwejEwd25JYDhCSVJ8S2ItMUJ7eDwkMUB2aF9gZ1Fi
NzB8N3VWc3RFCnpQPVF9WlJgfDA+QzZIciZMQGElaDd3SjVvSXhPbTlgSVBnTGVGd2VhSnhvZnla
OGBpVU1BVy1nUm9eMDlmamhtNwp6bD16Kz0pbHUxfjhjeks2YEtoKF9PNVQlX0B6QmVEPyFzfDFs
a3AzUk5oWEQrWktPTHkxbzBQQWx0TTE+MypYSCkKekt0fGoldXFodkozOT5lTEB1ZXtaRUZIe0lt
JnFVJmZmKVRsb3NWYXB0S1FQTHRVbj41ezN3KzI5Z2RwdlJLe0dwCnoob3dNQXBaTDBmbUJwOWBl
Q1FfXjBDMnU0ZUlLdTFYZFY8a3hXOFNuTlREcjxVZ0J+JnBobDB6bHZAPEZSZHpmSAp6RGZFYlZR
ZVNxRDQ4ZSh5Tk1FT0g7M0xhWGJ4TlI/eSpKVEY/TEtfWWpAUW1CT3RTOUxSQD9EfnZOOXN5OD49
d18KekV7fk9eKlZ6bVhUVzdDSmotKk90WUtOflJSXnRePGg3WnBaXihFfG1jT3NHUGBNSndMPyNU
UXI1WXckVG9AOCZYCnpueEpaZ1g8SXxYU2l+VUskSm5hbG9VOTJlNFg1QnhLN3YmemlMRm98e3Il
PGUpPktJMTlBMm9ucSt1V0hRfVNMZgp6LTxwSV9NMlpTQTd3JDEkOXt4PjhIJGNNNGJXN04zbHF1
Q0UlM24kbnRaKlVZPilCO1ltVm4yd0w/JlhMVUBNUFQKejhNTkEmXlhpOz88czlpfiFFWH5QQF9p
aD5HZTUxZj9qQXgtRColYGY/JklVcmB1RHRybCRYV1IjX1EjPzJwJSlmCnpySXF3VnM8JCM4V05x
PWlkVUA5KFVqSGxkQm9MPTdiek9mKSMtdj8/K3xWekJaRTMpPDdwQTB6MmlaSGUxYlBPIQp6P0dl
NlR6amgmYCpKVCtxcTRIeTJuOzVhaTQzJU5fMiVwOyFWXyhRS0Z2VjxUV0hmd31VIW92JHtiSGsj
ODA2RG0KemY4YiElWkx8dTJpUmNlJGVBQ3B3VSszSU93bihseGBTJChaajBlSSEye2Z2VSY/QDA3
U3Npa2ZANnJ8bT1RI1JxCnppdypGPHNWWTdZIWlpeUY+MUZvJUVVb1RxemR0SnFKLSh3V2QtcCVB
NChXJDg0WEtyeCVSKE1oJktSV2pZcEtGOwp6Y2YodVhZbkEweWg0OStzXlY+QjJCa3k+OURiWSEj
dHxaP2xUYm9NZzNiVCUpRHlKVGBvQSNsUG1TVV9fcWxOayMKekRHNWQpMGVkNWM+a2w9MmdvYUxG
RDVnaHklSSs0Z2J1YXx4bFpVRTwoUHBNPj0/TWRkRldsPGMhUDVKQ2xJQDNNCnpucnM0YCUlPWoj
RF9pRyR2ZjRmS3trSE0+ZXlfUn5RVytoYUhNTUc4IUduPD5AM0NnS3l0dUFtd3RgSn1XKjBrfAp6
MHo9Q2YmXyhOakopSCFSYmsrQlZPRT5WfjVRQWBFbiM3Y3BGVFB+Y2V6bWdkY2YkYHw4SW4/ODJI
eEZCI157ZUIKenluWDJWO2Z3fEZkRSM7QjBhRn58KUVzZlMtI1lnczd2TytjPkBKTnpEQXV3Z09n
NGJreFM8ZTZwOXt+NT1KTV81CnpQRkVHanpiV1Vrek5DSnBrLUp9QmJ0ZSpqUHh0NmlKaWdeUG1E
RzVoYDtGNzJvR0NPdUBBPHl7aW9LVlp5KUJjcAp6N2x4UD5WaGt4VCRneTFWWWo+dGpkVCVodDAw
ZnpDSTI/V08oNWJpeFo5TCRVb3MyVnJ7S0pMb1dGdSRFLT16Q2kKejw9ZUVEMCY5ZktxZlVsaGpB
MWJ6SExvOEc1dHFFWENUc2JCSVNRJHlQWWBGQmc1RD1YPiNTbShwcU1TRFpzY0VPCno0P1pNcCVs
MHp+aT8qa0p5eHloSmQ8K351VTkpMjRgWThMSzdTcGxMQFBwWSNOfntzYCUzJW42P19IVkVDRys3
TQp6TkJEX2tOY0xMdWlXS2JSJEVOPGpreypSX0smfHo5K3FPRnRNcGFjZ1MjV054ZXt7fWdyYCZ8
bTIjQUlWdFV6UXEKellEZ215QSR+cT84dzZzfU92SUpQSyo7REI8XlFHVGN4QEZuaVUpdCkydz0p
P1pgZWhKRCF3UFl7SzxxdEQ4R2wrCnpMQGlUI1BJWHxmX1pjY0d7Oy1OXlFlNkkoOTgpOEBIUm1T
YTVpQGpSWVFvNUNqK3JSWGJjKEh2QFNAdDZsV3s+KAp6U2JoRmU0VGlsQkleSnhRanpxbjt0K2I+
Z2hzRFQ4dUpPVyQhQnZjZnZaRVB6PHFEdzIxO1BsZFN9cnklSXJ6MXkKemY4JWUheSEhTz9eY2ZA
aHNOfEkyZF9KSlQoaFdkO0RJYShScjVnRFMyKkVqekozfVNydjBwP19sfE1uQHdhOTxxCnpzS0wz
bz1uMWBjUXRgemtTd0J8ZVpuS3I0JUY7a00oM1VsdGs3Zl9gaVYoWDx0a3tsLVNHcVE4bygld1hR
NXhhUAp6PGAqLUFHVjhVT2g7Wm8oaENlUEY9Yn5LWmVhJk48MFM4VF57cElJbHRefmFteHdrV3ph
fXUkJFE2Rn4wNSphfjAKeiNOJVFuVVkjbnM2flN0Sms0QX5XZ2t6NFFOVUgmKGN0dzRTcW4oYHVC
bEBYUj9NaCNqJF8qZlNeVCMxdHN1dkNPCnplQkE+eiF8RDhNNHN3IXIlVnB1dmMhYC1UXzxAckVP
PGNQKnNJZFF3OyVrYV5QOGlqWWt5P3N+OVF5LXomXlRyQgp6ZkFQeUotT2MyPm55JnFpQ0k4QHVW
bjFDYnA4OGVPOWNoJmN4RHNjZHl6d3Q0SiQkMldWVzElOEhAVnRIdXlqKFcKej4laVBnPU15cndz
VHw9PlpzRE89and7SSomaW4oJTh9Ykkkay1BanIpYnEkPFJlTENFMlNrM0k5a0lkR29PYzA2CnpU
aGZfNzRqVGd5S31xNDNzZlpoMlhkQl8pKSY/ei1sNlNyMmtOezZgQ1A4SVQrS01qJm4hbnRRP3Uz
WVI8Qzg8Zgp6JjdlITNoQGNzNS1Ja20oeXhGRXMjaSpCWTd8dyp4WnZTRzJ3fClfQDA3Zjhie1go
XmN1c3ZfZk8zVGlXWG09JjcKemBwTGw0ZVZiJDZsQGZFaThHMlVBWihOQipaUmU+PEVxXztqdXtw
QWY9Y1RvV2BjKit4VSl3RHkrdk49WFdqX0BtCnpoMyQhV2xrQ15uajIzIWhgRSpqSWlUcVA7Y2gk
aXpAbkUheEp+Oyg4P1l+fm0tNUdsYDBJZz4tPnt7Rlk4NXJ2Xgp6cTI0c3RxNztqZUhNY3t+LSND
bC09b21RLW5uRDQhOHg2Rj0pI0l7UTBTQUc2cjBJSnhyNG56I1NNdzhLbzIxP2cKemZVUjVnRUpE
TStoKm9ASEpqNUl5OTxWRyF2PGhaIWRwe3YyQ2F3dllrM293fSNTfTxaQSo7MEM0UylVZjtNcXol
CnpQZFh2PSl6QDApIUs0JjNMQ1JlLUxNMzJQOzJ3SjshYXZFJUp1O0hIcCZBbEJrPjFpY182RmQw
WDR7TTdxTz9fQwp6UWg3dyVOYll7PzVkWUlBVHlZN1ZYalAyQmg5TEVVak1eQnlofCF6K1p6P3ZX
UG4jPU1JaE1PZW5kUTU1XldOY0cKenk0RW1OWmNQa2tSQTA9ZV5sRDAzaiohQjQ2OGsqfENwbUxh
TVZjR3kkTCgwTEpQJC0taEZIKyp6Pn5Je2t7ejllCnp1bH1Rdk4zcH1CQD5wWVRNU25CVmUxPXxG
ezN5MmtPRW1XeTUxdTZJVmpHVjdqbkRodCY3QVJLNkhJWV42cVVZUAp6NCVRLTNfV2JSUEVzYUpH
KDNxSmJWRGlyYShpSW0+IU5lTCFGR1pOK0YzSTRLNSQpIXgrfXg+RkJ9dThhQV5DITIKekEoaT9f
QWRMR0RrIzE0TTdARGJGe0BzaCYrT3xZO18qRn5ZXz5Ha1kzI25AdExAIXROOCo8a21tUShuYjsy
XyN7Cno0SW1eVk0/aVJOLTMwcFMqaEBQSmolXz1uP1JfVTFyMWcrdC1pUWV7SHszbz9HQm1haEVH
NSM/Z1BmdEQma0VSbwp6VHgrUlhZYXMhKHh4c01maUlWRztwakMwfEBXPE9TQG9qd0VzcDNVOWdH
NShlYX5XUUtHeTg2Y2cwNGR4RTBBTEsKem50dF5VQj97UEFuO1clM3RIKnJ+aGt8Y1QrPXlBX0VI
Oz44TFZRLUQlcHR2LWFDWT99QEZAUXwqXz9kfSMjdVJwCnpZalAxbmVJN2dge2NQeUsldHRRUUx4
I15nUSU0cjZ6RUlzVzV9MTFvNzd0anw/QmxNdllUbWVocmdFNXdSJGRUdwp6Vz5ZeUY0RWQ0Y2Rl
TnpfVy1TdSpzZWw5NkRfbWpLYHVjRj4+UG0yd20pTWVtRHpvITN5OUMkWkczTTRSZCVkY1oKeiRa
RWBadHRXTlJ3Rj1QbUBVOVIzTEFnX311eTVeQHYlMWdXOFc+M3pYb2x5SCh6cTNjPihmUEJvP1lU
PDkjZj8hCnpmM1NSVnQoIU8rZCg0SlZwdXl3b3FBS1BvUGlzWlQrLWJ5dGpFZkU1eURSI0FXczJD
YD9GK1UrYUQ7U25hV14zYAp6TypAfTM5SyNVSjhadnolOS16eVlUYXo3Zz14cDQwJExyWHp6bWRQ
TDJTUXF4ZWtSWjtaVWJSYGBAKUJTXmRiNj8KeiM2YGt1WjR1VyYxJTVnNXMpWkBNK3wzMktAflp2
SXhoTFBSKj1oJiV7WFhIUio5RT13NnJKJWI8fFA4QURAKHw5CnpycjdnRmJDMnBNbz1PUVFIRWRr
VEMyZztQQG1XQjJHakhMdWNPZDtNVFdRK2ExZkhHZm1FSEVoQUMzYXRMJj1mZwp6NjZmJkgwSiNy
N3s/VkJ7TEkyKWh4PHA9b1R4WGF3a3phayl2M2VASiRFcVh2WVV9Tis/SUhXK0VLfUApJmB8NWQK
enFQMlRXWnpPMSRkOD5yMGMoK0hudW9MdUEoNFJKJlQmM15yN1p5P2EqIWEyTFJhKz9XVUN6bEB5
T0c7QWNYSU1JCnotZyYrcTt7QkJOKyh+UEQyYCEkTyF6XlVOPmZmVU4oRmN3YGhMSiV9P3Y0akRn
UENxQ2NhYE9wNHtjKy1ASnJUawp6Z2k0N1JiV2R0XkM4MilVKSQ9PU4qUiZXMjxzeSlxeUQmKm00
a1N1eUApOGZaPXN5fSRpUTBuezE/VkZWJiQ7eHoKem9VXmdMOClTdGRWMml1MEt6WllAaVdAbk9V
ZlpBfj9ZcjZkXmtlZEJOaXliJENyRWhZZD1BKUZ7azlEe08pUjdBCnolK01HKkBVe3UjPCZ0IyhM
VTk9c1FibFNtKnhgcV88UClVS2tBN0AqNlMzd2pWT2t+NVB3MmVRMDFFZzkzPlQ7Owp6dns7NDhg
WWxGRUVheXRgNztTP0JuMnBDUCVAKVlrcXxLUytmaDstRjFhVnQreCp9JDs2WHBCZCF3YWZ6aGt8
Z3oKelZaRzg3KkdSNU15bXhqUnQ8RSV0VSViT1FeezZ9YjlWdT8oYWJlK3lmVz0lZVMjemFSRWhn
MkUhc3crM3MqR0IlCnorMUoqU1Z0dT4xSkNNT3peS3IyZ14tR218d01CUjhSSFFfemRMWlFTS2s9
ek0zNU9QQURWdkllKGIlbDR2bU8kQgp6LVlBe0VfbXBxKSVhSUdwJHVmaGZqXkY5SV5kcDxSc2Bh
a24tUyN4Yys/Sih7MyRgPH0mTGZ9RWZwc15TYj02KGMKeilxcjZEQUFFQzVTYiZ9UjskPStVITt3
cjBeMChtfWJ0dzt0b2FOam0/IUIqVFRiQ0wydkUhVlA7U1NgNztiT1U1CnpVJWFJaTIhTjJFZkRy
dUplWlVJanRKLTNnWkp2ZWxWNDQzVTx5YVNBKkBibSZkOzxrJnM7eD4xakptQiNOcWZDTgp6Z3o9
MFFHOUttNGZWPig0KkpqSXl2TjxhWTxYRz83OTh7bkRWWnhafWFEMH5OUTNhQX1qb3ZqWHRMNmcp
Z1d3bmMKeiU9ZyVkbUluQn1YSTtYbD48SDxXd1QleHtgQkRva25Ve24/I3JmWiFybXpofik/fU5G
UlNOQkJkOXlqNTtSPUJnCno5ZFo7VlFRdVBpN0FnMU8rZz04S2k7UXQmRjlUWUhfWmFWfHtiKzNl
TTR3T1kqPyY0emQrNnZ+WWBVNkZIVm1eMgp6diYlalo0WlFgMzIxeXw0MXw0MlVrJmEyQjh0KXJY
elA0bzYtfHBGRHBeOEM9dj9gSjhsZTZwKzxpN3FyM2FfPCsKekBRM0k/WUp5IyEzaE4pWnEjKW5Q
UUByJU45Kk93UHZQJnRJNSRAVG9xU3VsXk5LZi15SmxSOX1qX2dVJDhYZzxoCnpBfSh2bitKcmpp
Jm4hWkk+ZiVvSnJkdm1aLVFxZ0E/XmopbVlFVmBtZlVudnxvUUJmbWFmUFp6Z31iPURpTjhPMgp6
cCltYzRHJVdxUzVITzspWFk1b2puUCZkXm51VWU/JkZPQ2U3R3pEUCVFaCk4MmJ4KGoweT1meGAr
ei16UUF8UisKemUqMEI9PUZ4SSViUmJSZmhtenwzam9oO3khKyhfbk4wfX5rak0oY3k2fX5iXllL
bDQqMXY4Uz8pMilJdHlrfH0oCnpEQktPfFJ9dm9eZjQjTj5Ab3MyKF5hPDBqZ3ReTVU2aDNaK1pR
fClTP2pKQ0AhMEZ8fXVAWSokVj5YXyRzZFpqbQp6dWNFOCZJWn5OYiFGJXElYm4kI002cElhJTxL
eUJOQXl3UWM4YVp0Pkw1LVZzPiN5NWloaD40dEd1fHlHJVZJKDIKenRHT3RlPlJ2Zjx4WGtzbWls
Vy0wUFluJXBvYFJ1OGF7azk9ez1ATDNWfH17dkBtTllYSlQ+MSQtJDYlUmB9YDRJCnpueDQwJV9g
XzNXaU9ybjlOJUpiTzExcXM/V3Bidn1zYUxzTCNDMndhb35vVGNVLU1aWFdAJXMkKUNlVTMlM34r
YAp6YSs/UippYjBfZkRKe35GUkpMbU5WJk5+XlE9UTdUN3JuaH5wKmpCVk5qQzh5YXE+NndlZXdS
TUliSEBrXmgoI2EKemBtVVlqWT4tK3RSc31jSSR1PEJPJnJNTCtmPGcwUVJCQmJ4UTAzcUlXI1gy
ZT1vREJQRX5zUTJpd21sckdBNS1GCnpubVd3NiozZlYkSUxPPyt1b2dVVi0/WmY5byNwfD5YfFIk
YFFGJCQoWXhpLTlMLWZ7MCVnc1NTeDE5fVBQJTxPNAp6IzJzZHI3JmV+THAwZVg3PUp2MEUkVDwt
aV44eVI+KnttQU5DfiZEJFplSjdneypWI0lPSXE5Rj0qTTV6RVYwOEkKejcrfGsmQDdEZm0zKmgz
fmV1TVJtNEshfkc7Vi1HOCM1NyM8YU52MUFFJl5Oe2xGbGEybTJ9JjZEbWhaUiF+aV9DCnplViF9
ZkdAR0BtYHVTKG5KX2B+R2RVRmZaeCY7WDw8IWAxbVBNZ1c/MXc/bm1OTlFEYVh2Xi1xamVwYkJ1
XkpsSgp6SGNxZjxAOGokMUdIYCViWkR0QDdCX05WaiNXU15TOXNNMTFgdiZfRytLK21MSDBeQkNR
OH54YEohSCMzOzgxeVUKemgjPHshSTwjJm9RcEdvWUYqNEhtYWBxXz1tdG1Obk1HbVhRNCVPQm5Z
WmZJI2UpXl9yemw+Q21la3ljKE4tcUk4CnpGJGJPZyZmcVJVOTV9WGxYbUpmcnZmakx3RXlzR0pl
dzlvISVRLU9AdThYY3lacntKUDU3VGxgO3gxSWRrZnh7OQp6bnBINXppTiEzQGx7bztsR3FVWX1A
VTlyZUZMVH5FRDc+QT4xOGQ5LSQ4TGAwYEliUVVMaH1SankoUypuZUReWVcKekxienV7Tjs4S0ZW
UUQ9eHYpfHR+Ji1CZ3dRa3hYPHE1QFM4WVlBUj9ZUW01ez9LR2d9TTNrKmczKSRvMXBFZkUkCnps
JSMlKi0lNGBjYjx9OGpKMzV4cE5tcTFAeFVGMFM2e05aZCl1KHBMcGtPKG1ZYTU0TjwtQz83U2cz
U1JPSjR1eAp6VzFfKiFqejVGVW0hO0htdHdGaCYjV09zPUl1NEBoQk59K0tNI3w4RVhRaz4te2Zk
dWBsOTlZZVhVPD1ZbmA+OVcKejI8M0ltaEkkITxec2EmUnJpeGlDZkdKJUsrZFAlIzNZXllvXklB
V2FFdXt1RlVNNzVUdW9zZ0RIMWIqK1MkPnlKCnpDY3NGUXh5NlFsQ0RaK1JnTXE1bXpOK31LR19H
eVlkIyF2bVJ9XjE9T05ERT04JFVQblhfbk9RUWdydSQyNkw9PAp6U21mTDN3NH5uNFRxcHpATG1e
KEp4V1Nfez9RfXNWI2JAcUVQZ1E0eD53Pm5RaFdzKHZfNz41NGM0ZEFuKDNVMjcKem5VSFNeJUZj
akUxKTB4JFRpSGw2LTs4WDQmKSVKKGAkR2pzalVnOW9zYGJGMDtWNUswY3N3T0lWcXQ0ZmNSWW42
CnpxfkdTWnckRlF+JkpBZFh6fSR9OFhmRGBWRCRsZnJ2PUpAKCEpeDJVPkprM1U1MnohVDM3RFFi
PD9uezFHPGt9JAp6TEUtaDJUcEIxQklsNkIxblZoXk9VUipnUChDRXteSjVpfHhVaW94YCQ/TkdB
RE9aJjtRNSMpMUY2MC1kaiNhXyUKeiF2ISVYSj9KVi1eSiV3eTlWKVlKMU1NNzFgaFFWYiF5cTts
MVJqMjBhJWJrY0ZWcjtBeTR5fUR4P0dmNSoxZjV5CnpfNjxKUTUpVGJJT0tfMzBgZHoyTWwjcFFg
YnQ7djhsWU0oPDtyaHZ8TnJIMVpGIV5XXmNhbzJ2OHJ6bnxFe29lcwp6X1huVVMxcXE0JEJVKmll
MVVtNSlEWm9hJCl8ZyopSFJJUStLNjB4dHZqOHtrdC1NQ3g+ajU+YmJ4UmJuP3p5TD8KeitefCRV
WTZVTkU2bk8lWU9eWiQqaUI1fHleMjBZeEFJK0p+eXwpQylxVWM3Q1ZNTlohdXFNeVM2Ql9eKSQ5
b2JrCnp0PEdodjx9NWR4Kjc+RnZUPUNtQXoybXBeeU1sK14+TUc/TV8odWpxRCl6STlQfiY1K1pB
NVZFb1BSX1NRblg/Sgp6NHg1djBMOyZIYTkzQ2l2UCQxT3Z3blpoMjBYPU5geGYpI3M2ViZMZG5s
bE5ZWjNARXJWRmFYTGVZJDg5VH1hezgKekREbWk0UGA4d1YxKHRPUm1xK2F2M29rfXBVcktCUlBZ
Y1VeOFhSaHZnZ0dVe0BxZ3hKMGQqdz9vT1duOG1KK1AwCno5eDt9fXh5aU1TJmsxTVdVNXYpSWBr
ZnA0WG0lPTYqKX0xeCFDRkxRXlQ5P2YkbjY1dERQYEwjLTsxO3c7Z3ROUAp6U3lwNkZBcVU2U043
Tkt1QTxsOFNpODRLPXdDY0JsMjdBPzxJNlBPMlBaKmxiKFNnLSR3ejxDZGdvLW14TT1BaEEKeiEt
LWMkOU1eclVhYE9ocD58SG88WnlEPCViXmp0SXtDc19iKSQ/aXtiWG4yTzg3RG1RR255KHxgUyUo
dEN6ITVCCnpHbDBqVz04NG43dD0oeV9pbFJLIUlmYDVuX31NNWY+ZVo/QmA5SDRObSUmengpbUt8
WXQ2eEJ9bXQ1UW4waWw2KQp6OVMzcU84fSRkN3JPb1R2QUYqUTleMzBLP2xUY0FqMHAmMGttWUt+
di1qJngjR2o2cUJ1ZSFwYkVhU1psXnVPTUwKejtEWHE5Nkw4N1RIfXcmK0NDKWJjOU9rRX5MJVQj
R0VPIUlHUG5gKD8xOF5yTDVWe2szJHxQXnojbVNBb1REYEx0CnoocH42SFhCX0U2WG9iTFdKTSVH
Zk11LTs3UyhoI0J4Q3tafT80NE1AVjJKSzxlT3J5MDhFKSRzWFh7VX17ZCVYLQp6P2Y7bHRHSEcp
fml3TUMtVWhwSVkrWXI/P3FuZ1FfM2RZOGFDPWw2cWJAV0lkJDxReDI+TjV1fkAzRjBFPXpzRFYK
ejlPQzcyK3VaTkF7LXVZVCpkWTVXZ3xZOX1GMVd0NnQjdmohams0MH5pejkrXjVnTU81WXl1UCEr
ZnctX3ojKCplCnpVQTtNb1Q2ZThqPG9rM2J6a2VqREE+d1FRcTk3cnlgfEYrTU90Xil1VFZLc3VA
RV51e3RQJlp4N2M3LV5TKUlNXwp6djxfRktMSiYmQSRATWlzViM2clN3OE0zdSNRR3Bod2V1fl9X
OFJkbE49a15ZTSpZN1EzS159WlVwYVckSH1eVigKelRAUnxrUj0rTyQ9OzZuJEFWUWshVGhNbXNu
aDlwWiRHbGZWYGpsI1NwUSUycWRpVTQ/WW19RmVIeCQ/e0UmNHJqCnpwSHVDOF9ePHN4cWxaPWtH
WSU+QGllSXFFekckI2QqTUlxPTNTfFM2PV5pJmNQSV9MMit4eitOeVBAVzhWLXJAfQp6WlA3Q31i
TXxFVlgye15OM2NBI0pGP0RXQ2BsKmtnQlRjQXtKVTc7NWwwSTxBQEB+TiMhMUFBVzY2JFZBZUhu
e3QKem02KUZjNkVTWG4mMkUwfnFGaSZmPU8zSys9YCY8dWsoJkQpaEckYFUjKEdgcTNgPCVNYUsk
YSlHUnZLOF5sdlF4CnotMXkoNnwzJV98bkRgJFJ7I08rS1J9MjV3NzVATHhBRE5JT2A5Q1d6P2FG
KXR7PTMwcXMwWT1wYHJHTm57e3NUNApCT3VHTzgKCmxpdGVyYWwgMTI4MTUKemNtZUh1aTkze1M4
QENwRDkpKk15cDtZRVVOUn4wU050QzZHbm42V1RKbFBxSGVYVHFwZyo1aUQ2dk5uO1krMSU2CnpP
TGlHc21MYzI3RzkkKiEqazxPdHozPTx8NTh2P30mKjM8UjxEVUR2Jmh6fTh6akxgM3VrWFNQYEZP
PjZ4d3lGYQp6akV4TjdUd0YpXnhWUjJLX35TNn1xYFdURTVjcVk+P3pXKTs3dzYjVDEwSUx3O3lU
WXxZQGxaemtVPTRaenJge2AKenI1TiEpcVEzZ0NMNiopd1JocWJJV1dhOzJjen1NRm1VYDlzT3w7
cHMlTmlmQVVBY1Y3MTs7QjV2MjsxWWNsVV9HCnotOXNXTE03flJ2dHdKLS1iQz19SFVOSmcpPEdG
IXBUaHp+ITVfV30jOzhRKzZvIWZ1VlImcUB7OG4yZFRAeXZiUQp6ZCFfUFdfZ2dRdWU9V0A0Zngr
eFdtNVdtMkAjRlooR31lXlAzXlN3fG4jQnhWNTF1KkIjbDtCeCpfNiUyXzJ1UHoKekstS1ByT0kq
KmRMSF58V2EwaG1uPm80XkdpO3B6UnRaa2NwUzl8TEVfYTF1cyRvPXN9dVpSfFFfX29KTUZ1X01m
CnpJJX5mZDloUTlDbkVRfU1ZOGJJe2lycX5pX3ZIc3gpdzdaJm1zcFE5Y3R3c3I7ZXstcElrckpw
M0pjd3k5VjJZaAp6JiVCajk3eTR4bXB+c2N+OXZ3JHpwejFKUyU8USo1T2RuOypWQGJKVnE4O349
PmtiR2NMNHdLS0UhNzM4Zkg5XzMKejt8bSRJXlZ3clVfQW8jTkE4KD17RFU5bGUha3JEcikoP2Qm
KXZzQEApQXlMV3RvLXJ8bHxSaS1LMktadzRhdzBkCnpqczlwJkBST0h9aHhyaUNgeGUxcTVSMnV0
WTtvRk1KdVV+TG5QJHg3ej5KM3RrXiMrez1Abk9VRjlFT0NYVjxDTQp6c2Fgc3Ilek9CJTBBJT91
a0ZYODBVYmE9WmhZcS0mRnBnQm1HJiNyaXlvQnA8a3VRS0dDTVppdFdLKnJ6Y1NxVlMKekRxI3h2
bWZncj09Y181Y0cyKnVGYylqdnZJUlZZQFpYJDEyNUxoQHFHMVpMOytgNnJBKkhaQUxfezFESiNi
YkooCnpYekYhWmdVXzJkSX5CUz9PfCkkNXl0Uk5fZTUoSWRFYWhoSU9ORHNALT1GNFAjIS1sPU9F
dEVyKCghS1YqNDYrKAp6dzswfnE3QD82RDJwTiNYUzVnWXFxdj18KWkxSm8jV1NjYStDM3pmYHZz
K3B8PCg7R0hgRHA+R3BJUmxOSmx1cjYKelEwWngyQHIpdDcxJkd6V0MhejdzbzdoQ1BYPjhufT57
dG92Ji0xLTV4IX1iSC1zbER1Z3xgRVc4XjFAQj4yIyVZCnpJVT5ye2xrYzJWRlpFfmgqNTI3TXB4
WTheKiFAOD9Tbmw2blVjVzw9eV92Zmd0T2ZQT1A5NHxod2s5KUJMb29Bbwp6RmVffGs8TmxYRmZ2
LTA9TVF3Ql5xXjN5ZkJNK3s2V2RRO18hal52dWpieihPRGFmTXNNTGdaU2lFalNMRGcwaWUKemZC
YmdUJS1mS2orQ28oUk85aHBBMTl9fmJCTXZqP2Zra0doUDlefENnZUxPPUp0QkIoZG1uKns5Nj8x
I0stWGRFCnpQdjxlPntzYyZrJFVWYmgxU2JaM2smc1N2cGZjNGlefWhnS1l5dVMjR0hNY14mIWY9
fXNyQU5razczSys+MT8lfgp6eXMzZHV6U3BSYUZCTVFmZ2htY3RjISRtKC16SW1FIzFZbmxxLWRP
VVI/SUtoVVFxfjBLPlNwRkhaYT9KLXJCYlMKejx8O0JFUXgjZ0tZczM0VG07Jmo/WH5oPT9YVnpT
ZUdBQGdfb2RxOzx5YVV0eC1tJmc2aDFXSGR3e3l5aFk7KSYoCnp0JiNfYkRHP2U7SS16azJ2VjZW
RFN9K0ErSzFuRkY+c00xMEpMUHhfMFBYPigkV2BgYHApQEdUSnRUT1pUSnh8cAp6K0VHUi0oN3ty
RmohdWJlJWEzZDtNNkBKQmR7bXF9MHExT1Y4YjFSUXVGZ01DZXI7KUJVQHF1UFJafDRhTEV2NjAK
eiZeQVRRPF92cmxGOF9TRGZQRVF6VSl7c0RRSExWV3NGUms0VzRHPzRsaW1nQj4oMzFyS0l4Z2xo
Zk44TSY+VGtMCnpodlRscDxXZm03MGUtZ2YoZzN9cDBwSm9hI2A9QT9gK2paOXw5MntVYHUrNHRC
fiRtQypsMCY0RytEWks/NjRXcQp6czQ0JH5SfERXd2Imcmc7KkRGPmdVbEtadmdDI3VCPTVLNEhC
ZVBBN18yKXRXTmc9Rm8tUGJ9UjxxJnsoeWIkTGIKekclTTZ6Sjc2S1BBdnJvKTR4VkpFYWwjRG02
ZmJ0X3E1aitnQFA1WWo+bEZfbyYkKlprKXUoPiliS19sdEtBJUxDCnpjaGR2S1BMMTc0YWE7RT1P
OW5LMm9uMjZ0Y05CUTN4O1BNRCYpUWNXdHViIypTPjgzIyQtU14pTFk8KWlVYiFPVAp6bVdHRGpC
Ym58IypNRT1wbFZ9aThIbTZXLThUMi1+eUxfJH5aayRCdDA5MiFLUVQ0TTYhdWtNWVhGSDhBX0dK
UCoKemomaSRjdUtldDUmemhRSWAydV5BbUZiUjFYbDxPRnpZN0d8SHNmMyRfVHFvVV9acV4pKHBL
OXQ/ZDB2WSQ2ZU4hCno7UW56czhjSmApUDV+KmFldUspOzBLbmw3JT9VYjNKXj1FR3R+Y0RrMEVN
ZmtAMFU4O0QoOHQqaEljekcyfFB9Iwp6eUQ7ZGNFX1VpMHp7amMkTl41cTMmQ1FzXnRWfCZPZms3
VT9wdGU0eD0/dCZaNUU9ZkZtQF8pTVg4TG5MailGWjAKelZDWWtsKyUld25nbiprTDx7ajsme0gh
QT9CPEkhLW1DVj42c2o0alNabDhHSCtvNzt4QlByOGgkPz82R0wmVClTCnphPGt5cGJWQkFCcD9X
Jn1eTmNwSk03Sl8leCR3NFllMGQpQT9Rcz9oIyU9OUJwQS12VnFCfDthQ2s0QCpXbCNHOAp6KXpN
X2ojaHk7aU9OM2pQSm13TnktPHhKT2AlZSRkc2BCTzM0e2FmdFY1LX5KJSYrKiFrdmZiJU9KZG5P
cldoP2kKelMtVmlxP3s7JnxER1J3dFpeYl8/bGAwQzNYUkh7bU95fVo5M0B3QT4+QT5INlRiZ0Fy
bmMxU2Nec2lnM0gtPClwCnpRJFNNYlNEYTkjVH1tK2RoZTZzUzFvUUlKbDJWPGYrUyYlb0Y8K0Ek
Z31kSyM8ZUJIdyE1RnFVaSVmVDUjWnE5Ywp6bT8taFAkQlV4bHNsazhtTVdwR3dvZSkwLT1DMz1K
NldIaUg/Sj9LVTdEMTE/ck4ySXI+cT9KVzEqR3JsUV5iTlMKei1zTlQlRyRSV2loU3BEaXRgKzB+
VD9YS1deI25hViEmZmskODQxUD1KJX5Ac2ZfWGlpaTlucXdZcVdpWTgjTVRgCnpwXjgtUiE8YXNi
eDMwdUxzVGJxSlllfkVye044eE57SGs1T2UxSihAU1die2dDMVBCNypgITteUlFfUkA/MjtqaAp6
Rms/bTxVaVMwdWpAckZ7WGJQMTRXTGtsY1gtSWxDbmRfVnF0MG5HT2VLUmorM2tyKy0pYXFZMChn
Zjczc1JjMygKemNqXz4yKFN5KnhlTn5yZktNSH5xQnNCKlBVRlF+WCs+aV4xPX0zPW00TF9zT2Y1
IysybWpESilnakc5RWN+MUJDCnpFbiNGOEB9aUJUVjlUP14hQn5JNXRIb3Z8SGJNS3VFbFRXe1Be
VV83XztoRHFDViZfe15INUZ3Jl9ZTzk8Ml94bQp6V2dNZjdxeDFESWFsdDs2WHx0RHkoeHA3cjYk
QD1SUSp5T2JyQDt+bSRCbSQrZ3ZAXkBXPDJDSjh9U2dAaC1HKUkKejhhaGtvJWdkSSVXcmI7clF7
PGchYTIwJUJeJXlMOHl8cX1Zci13Pm9OUDJvZVdXajtre05EYSEjN3I1YUJKbWdyCnpFLXhKXnk0
ZEFrTSQ7SUlZenUrPWB+UHx6P0I+MyRYOWM8UTx8ZztSaF9aWUAoZEp9KlZEM1hnbUZ+Mj5DZTtr
LQp6cVQoRWB3JlgwXlMzNU1sPVNkMiN1NDhtc3Y3QVR+NDlTWHRgYkJJayhqJGM0ZVNlXjg9PDNp
PWcwQW0xMDYmXyQKelFFd3VBY2xkYUFnQWJqVVZPIyQ0NFlAKUBUWHR2SyZyVEJhU1NMMzhPcTdj
WnBQR3tUJlY7TnNgZWBzUyp3UUM4Cno9ayVxSWhlNH5fT0MraWRWZWhMTXpUKDNYY2FkZCsqJnJ0
MVFydHckblFvPng/TnomcihiXmZsJUtNNUVGMyQrTwp6aWdDRlh6YnBMR3FqUE5yREpwSyNsQXFG
NGdUOGBAQE8wWHJldWxIb0tUdSs/YTg+fj83eWJISShkciY8QUB1cDwKekwrRD8oTihAUjI4ZEIj
ek1qTHtsKSlLREs2NVp3R2VaTSQqciNPViNvfHlaKUE4eFdkWkBhZld1fl9wJT1weS15CnpteFpV
YElvd08waU1OQk5hPG0kJml0OGJTOEA2I2l6OWxYd1JkZ2gqRmkjYXtqQHgpUkk2SEAxX1AwRUF4
X2hVNQp6ZWoyRH5fc2hmUkMxVyslJTBzQEY/Sm0jUkVqT1JtO3tTbV85bkhtREl3NV41MFRvQSY0
aTtvZTZWT3BvOEdYU3MKejYwJig5Jk4kbER0ZCFDZzRJNDMqeSh4bHtsKkBoRFc3RzBkWj1kR0st
c3p8ViFgUkRgZWFafDRhXktYeCEwfT0zCnpOMzZrLT84WGdMJlojU0pYYW1OQVVRQ1I/P2RSUkUm
VjFFVDVfakpLS0EtS25APWY+ZSVMMUVEaUxuJHh8RzZRLQp6Xl5CNDRtXnFAVDt6O35ocXlBYiVX
K0hxZy09OzM1cF4pMHxkb3FVPzc4Yk40X25famVaUjJqdVNAMXMpbUVkJF4KenVONj5IX1dLZHNl
YT5fWiFTTmJAYV81WiZZekI+bG9NS1ZUU1BVPG8yfDIleCFSaypzYEJXfFktK3pRdGpEYlFWCnpC
WCVtbXteWSZCaEprJGBnSCFRTUQjeFY0blJpKDtCZztnbWllPlo2Kj5+dU0hbS11VHZKJUZNJX1S
YkNiP0wpXwp6eHUzWFNuO0A3OXtmSXY5QCM0P0JUUHJoUlkkVDRfOTNJbVhHXkkycGRpcFlHdWBo
KFYqbDVleXZ4VC1EanZrNUQKekJ3RUQ7MSQkRVoqIW59fkpabSheRlplbUZVdkhlejlAfUN3SlNQ
b28xX2xqIXA9UiU7U3ZPKiRLcHh4Zzs0NF96Cno8MXhHcSh3RldERzNJN2s3NGJeYF49Jkx7I1p7
JDBPcSp9c3Zgcyp3Vil6T2ZBblczTlI1UkxNWEE+WDdLOztUbgp6MHtZblFmeDtEaGhwMUNkTnp4
TWI5Pk4reiN9bSt6dEo+LUxeP1JqX1V9IUxePl91KE4qME9OQzFZTGBOaFBCP1AKelBWdkFNR0Qy
RFhwMjBXI2NxWTZpMj9fJUVKd24oTnJQRFRUVUh4eTg1ajVNKmVKJGFzbHlzZz0tVG1AbVNKQU5g
CnpkSGk2WC1jbiRmKy1HfVpgR0FWMUd+NGFyPEczP1BNV004IUF4eUwoZyYkQHgqKz1+UDNFYD9T
MCleWXw/JnRsMgp6Xn5jN1UjPmJkY1JHaHZEWVg4K2U7d0lfdkE9VzU2JkhqVlZsazJndl9BYmpV
WGJIUUVDWlcrMGliRTA2NWdudz0KenYpUGpnb2M1NlFndk54aDMrP1RkaFA2PllWMEJlaTwmNG9G
Uzl3PzhJIVYpJHl+Zj0zVUdmMyVeaSlsMGxoRDBNCnooODs4dEdZdE1BbGJBUCNGNEZ6QHpFWT5e
aW5SfUs4OzdRWTlVQ2RiOFBAfCQ7JkhwOHQ0fUs/R3NSNzFlVFNecAp6K3ZjdSNudyp2YXdnMCN0
eWhgbUduQ0BrZyNoc3Y7YkZhSWk4MVpwRDtrRW1uK2ZxPUx3U0FvOElBVjxlSGA5R0AKeitlaFFD
XnU9YUYxRUw+NHEmKEt7STlkRlg9VjNETVgrRiM9V19tYiVKaU53aHs7SmtiT05McXUlKzd8Y1FD
MEEyCnpvUzNGdUtxI205dGU+MXcqMiRWJUghSU4+Z1ZvVStAQ3t7Iz9lRWJ+VU1ScH1GPG1iaENA
YCVmPE9wUXw4e2xuTQp6cDxSTFV7R0hecVd5dEBfSS1gYW4rND0kblIjcXBfTjszJThtPyFzKzJn
bG8tJVB4VnV4TTBhMG0wYjdvYXgyfCYKemx7dCFKMUFYdz0oaTs9I3NiJENibClDfmU9T3ZNYTw4
Tk8qTHRXX191PGhDQzR3LVFxNU9eOXFeaF8hQzJDPUs7CnohViVjZSVTRyVOPipkV0E1KysteF94
aiMmYkJrfHhzI1ZfMnZ2LSVrKEZLZWVNVm1PWGVCWXora3Ayc2RaS1MpIQp6QEFFekk3U14hQG9f
Z25XSGxFI1FvMzE2TkJmMEZqNmQqSEh3YSEtM1hjNE9MZG1FfTlgdCV7WT9fN0J3KTE3Zy0KemVl
ZjlHVmBUKGleVHc1S0xNamdTZVFjZF5ednhQe1pfJD4kTkRKZGZPR2RBfUNATCFJd19TTUAhMSVm
d09LPFVhCnpSNjJSNE54ZE5LTHlAOXxwckEkRDVrVWIxMUZUV1I4TFhVemZjWlFqYT5sN2tgPXA+
VVRrYVQjYERGVG4tKEAwSAp6dmxzd0c7THtiNkQ+Xml9cTd+TjJvQEJzR2R5bld8X3woalAxT3o2
ezg5S0I3T148RitRd1BfZ2xNc3RXN0hTVXsKemN7Ky07Y2dwODlNIz8xJWo7LUBDdzQqWlBMRl8j
SWVaSzQ7PVp8Z0p2PmBpdyo2ZlZSdnopTFQ2UWhedjUxS05CCno/VD03aV59b3RhNGdTRGw+R3xh
RDdGJWVhKURvU1Z3ZT53X3d6SVk8VWNhKzRyTjU/eC1NKCFmcFRQaWxmX21fYQp6bXMlJjBxJmN7
KEdyN3QhNHlWeH1JWWZNQWYkQ1lHcUpwOVZuVzg0PnNhVGVuKn1aU15veCQoRnZ5cjBmP3UzPXUK
enEyT3x7e3E+MGJKKF84fXVFZz9zPztwbWxiZ01jbHVXYGxwPjEmfCZ3KEckZyRWVlpvR3RGdkZX
SnhDX2ktPEdUCnp6TWN9QFV+ayR+aTJqLWpIb1NVMFFVRVI5c1p7bnpkazI2QVhaNGJvJURpclZ1
WUU1VTtUdHJ0d1Y2I09HbldHWAp6V1pMflVqOTlyaTtfMkhEeURHKyN5T3xTeCNgb2sqRzM9X2kj
Q0FAe3dWfmdXNnBBfFE9RTYrcDR0P2hhKGVOVGAKellkVncxIW91XylZKk5rRWteYU5hN2JeLU52
T3I0VkEjaHNXTkh1UGNmflVweSN7cEkheHU7e3JIfDxLZmp3eFJ4CnpAOWFlV2g+flczV3QrcC01
OzhCO1FiKGk7I3pzZWpxJT47V3lXfDMlPU4wfThZYmBMcGlDZ2dyRlRyckdmWG4rZgp6Wm1fUSQz
cz9RNkowOG40WjJNYjFDT1hyKytSO1g+S2c3aiVaXz4wa21mZTF5R25CITMoKWBXYExKWTU4WFVv
YWIKem82RyRfSGRsemhLYkx5NiRObUtoeys2JEx4I2JOc2EzZUVpQ2U1KlU9Y21BZ19JTEhNXmdo
dzBNcWAkS2YtYmxvCno3WndzLXg+ezNIR3N5Y0lreSYhRCNyVT5tMyMlaUMqb34wSyUjaHNKdFZq
MWAyPzt+IU1rUG1XQHlyI1BQVnpZbgp6cCpkfjZ3QCE0e3lRbUQtb2N6P3QxUEU7PG8ySmhWcE10
eT1iS1Z7OGN+KiZuLSNKbEBrRWMpWGdpbSpjWXRDSFgKenZvVkpiKlNARj9FYlFXcGd7LT9tZ19v
cnl3Y0U7dVU4U0BTTmNgPX1HajMrXmBKJHAycDFHRWxtTHdfYkBtQEB5CnpLUk1kT2JPRyRXWVpT
eEdadlNXckkmVm1HSEQkS34tYmZNLWNpbHtvdm5XajBJUTtYLXEjQFQ4KCY/azA7fXQ/Kwp6Rl9r
WUVFQ0J9bCY5cyklMFFtZCMqKjA0UGBoKHpPNlhZRWtUVEV+Pz55Y1FXKjlwcDV5Q2B0WV82d0Je
ITBOb1IKekN0WktaPkhQbExaRUhKeiZQe3pMT0clRUB6dWN1LWEybFQ8c0RmbSNJSSFtZHAmPEM5
dFB0I2tGMzM1TDhkXzFlCnpvMDVxPitUKEs4OEB7JGA5SX4xajJ3T2I2S1lPMDdUX29rd24pQ0JP
VU4kbTFeYiEjfDcwaTNAWCo0Qms9a0hpdgp6TVBLZ1FlemA9bmU4aWNsSiUzYiZJZzhYO1BUb3BU
NGRCZDtzdl5uenRgTEhiemZxOWlXPHNWPTlyUHwha3pzbE4KenBHeXp5Wm9meXtgQ0U1S0VWdEJU
S2U4cyZXTzRxRWQlQF9fWVo0ejM+TEg8PnZScFJfWH48fW5DcE5zSUspLX55CnotIyRWOSE2JWBs
bUg2UVopekFLQHhQdDFsSko3Y3wjS1h5STtRRX5yaHU8Sm5DT1QwIVo0TStPbURaJjI4Z1FMUQp6
QVljckNfNEA1fj4lQVdueVgmT2B2YEZPZFp4UCNeb1paPUg2a31Ed19gKnlZME9IeUxHM3V0Y29y
UHlaZC07PHQKejVBKXNHcHpqaD5kKnFPTiVna0ZuNFdlPiNpIXh4c1hqe2xxRVJLTWdgejlrTGAy
S0AkdmZNIWQrRzhfSVNxb01pCno9b1hrMHohPzQ1RzhxdjdEZ3FfRGV+PlZzZ3skdzdmazIqNVY3
RH4kYnNnN2VFQmRMSW9jSG9fPEd0bXxwdH1OOAp6Unt5enMlTDVsVkhaVXtuY0pvYiRpN0hAQWtf
XzlZT2JHQD4meX0wJE4/KzB3U0ZuYn55bmV4JGA9LWNQMmMmb2MKekskLW4tZSR9MHNLNSFlYDIr
TF91WlN6QnteQm1NIShKQDdhWnBCcHFIRVBgPmt0XmV8Q1EkU0hxUSRZfHNJOS0qCnorTUFecnk2
PXhJQDRLZTJGT3UoTFFaTjImQDZXYDFKMXs5UGBSYWo1KjcpX2dzO0lNMFc0WElWWVNEVzE9fFlN
MQp6VkNpRm5gP3RecDZgK0R1QHRtbWlNTiVTTT17JEFvbSswKFFYOTRKQHUzMSs2NFUrU2ZxRkIw
KWJQen5xTkckdTkKemIzMndXUE19eF9DJFArLThfMjY4R0hmQCV2fjFXJExZSEMzNGRPKDVPO1M/
UXcyNHdeX1BlOSo2JlZvT1RBbTUhCnp7WSlOQmQ9RE9pPzFsVXwoYEoyNz1PTGVAMjhVVkJCZ1M3
QC1WMUp7SGo+Q35DbVRFS0NlMiR1RXx3bjk5VXJiRwp6TUBtKGEza0JpNkFzJVVEfE18SG8wYn1j
RypMO0xIPE90dll5PlFYT01FM0Q3bj1fSHZwYy1vRWhtYG00ancpMUUKekx1NU9zPmJ8TXNEMU5y
ak4mbnA0JksmO2cycSpTS0c9fik7e3lyTnZHQmZWYVVTQnhiYDI5ZkV2K15nIzc4WmdWCnpQdn1w
V0pkR29IRjd2eTlgOz9AXkt7eD9pJWQwQT8rK3l0MXpLUElHPUtTcXFCV1RLOGwjSFohQm88YnVx
QWlKTQp6X3hQNWRlKmVLRDgzSmstMVQ2YXVqKXEhd3pFQyUkblBDRmdqb0VfKlZMX3VPOEBDU3hk
RyRQS2N+Ml9YeC1URzwKeldZZXtyQWRJaD9KZGByaS1OJV98KUFtbSZsbiN8PyZsUVROTH1IVklD
PXQyKzBDKTtqM2xRMTMwUT4kSHlkRkNvCno2P0JiSEA8RDJuQXwlfXc4UnkmQiRJQFNlUFpedjF4
OGF6LVNHZWNJcT1lSl9kYlF2RVFqJV9sNzh3PT9gfi1yRAp6eXphKHRnUEc2MyRgSj19K2J5clok
PW8yYHl6ci0kPmtiT09IdGstN0BORj5qclRObmB6fnJ9X0diNHlNcFpAeTEKejZDMWQ5YUBuTWFa
Q05pK1g8NHFZTkt2PSY5UkUrUzU/YyVSXmh0SCkxOTJ1Slg2N1RkZz4hZ34rPTRBcUR0PVY9Cno9
NUQ9a2lqMClkYD04Qn4pbmgrSEJrdmN+SmgrezBtTX0rNlM/e05SSjBAdGMoMjRkeF94UkVCJUN3
ZW8+PGxgQAp6cj9HRXc+UnJofVhVfmRNYGdvcj9YVlFqakQ7KiRwMmY4UmVqTWVUZUctPl5tKWV6
K3ZzdSMwR2F+PzwkKFQ5XnQKenQkb3pFe2MzV3V0S0ZIQldFdl44WVMra3VeK1pIKSF6Tj58UCZA
RlYwUSpWREJ4VVFoYUpjPkVNP2J6d3h6QjROCnpRXj5tRnRycD8lJWojQDtIN2NublROMnxWOV9F
PnpgQmx5VyF3RXVsUFpWd35BSVlDd2Z3Mng8Xz4rMmtOJDAqNwp6NWlWQnhKQWo7JDZ9VXpTYnB1
dnl4OGo7cU1Cbmt5TzBQZzlvUDllIWY5Q2pNZk10PmkkPWJDR1hldGhAZlNkVCUKelFBaEFMRTJl
dTVCaGtfSylPZDBReWZZazNpO2QoRjtsdD45ZkFGUHw4PmdtfUNYJiYxWlhaSDdNWUEpIVNYUXhU
CnoreXRzeS0pdXRvdEF9dTBNU2xyWWw1RnRBVDNXY3Bae2g1UHpgYDhyczVSMnZiVDU1YEI1LVZT
IT5LSElQO3gqWQp6MG81QWE3Z0wwOzN9PW82U3MxPENHZHp4aDB9fkQyIVNgRFZpZTl1XnphREh1
Pj5kX3JqRUpVSiZRTVFPRCZVUEAKel40OHVKPjAyRj1mZSVlQXhJIV41Rnc/cmdQfms+STU/b0Nh
Uk9udz5TTmxva1FjR3d+Q1BZPm1abjhyaTl7dCs9CnpQJHZtdVE2PU0xeVJOTykwQ3NXTjBqI0F8
dX4mQWgmQnxlSCN2U1IteDl7RUVwbENWaV9JQEFoQkp7aFglLTVyMgp6WjFlK3k0KWJROVhMcndl
YTx3TUMlMDZXKzVuaEI/amR+I0JtWlliT2dnczZyRWFCP0B1JTQjNipWUHBMIW9wVmEKemhmVlFp
dXYxZnA2QiVnISFHJl9XM3d9dWhWRDc2O2V+PFktOWBrS0g3Plh2PklDTlpiTEMjI25BdkBmaDRW
cmBtCno2UXVMeGQ/blozQCpBSDU9cj41dHMxOTRiWVJjeG1JdzFWemNUZ3NMI1d4Nz0oR3k+Ylhp
PGs0YDJUanhpejI1Ngp6T14mfHFGVnNFeldVdnx4MChRKCRzV1JiTHpJPz0+VjI2T3RIZGpxKGlK
ZjU8JnMqRWBAaWQ2eSEhd1gkcy1jIyUKejc8KjAtdmdzK21YbkJZOWlLaU9vaVh5JVp7d0VXRzRz
UXN8PVpZLSRKWi0xWUZBSG84cmBkZWhzVloyRUghfTxoCnphMXBraShkfjZVWTBZdCMyVV8pPTVQ
IT9WailnVWw8JiNMOFo7RVkmbm9EUWopI3F+Xl5NWERxdjhaP2tiRkc+QAp6elh8cWNjUE5MWShu
Xn0rcWd5SVVlUCp+SGVJOEt3Njh3OX10RHlhNEJjND8/Wmx9YGoodVV5KXlNfG00YzN2dl4KelB9
Klh0USFxZlMmcnxeTD9SJHRKRnxzJFc4Y05YV3lsSGtTbngzOyghYFVUNmgkdztYQTs7VTg9eVVo
bEUhYElOCnpuckRhIy16VVEwd0M8O3s+UGZIWmRNfTNYXnx3fW5yUCt0P3d5Mks+Z2lnNFZxJCF4
Mm5VQExhNyR4PC02aWc8Zgp6YUx6ezYpKn5JKnN1XmptMzQhYWwzSnotdFIhJHkxbXZ7TG0rakJh
JXlBVSEoUEgqMik/cm5QV3daaGgwPmR2OHAKekN6eHt7TTBhYmkoYHRrUys4ZkE+RWEldGVCIXEq
YGtUaE9LJWojJCVrK00zOHtKWTA1Tn49clRjMDBlTFc8TlQ8CnpfOD88KyhJNjlzPTNGVDtXd3tB
eShiUkhSZVhXKG88JGZyIz8oWlJWd1k7KnZ3aXJITHRuJl8yVUsoP1Y+SW5mWQp6YVZgVERXN29o
V2c9fT1ZU2tSeEp5JXlCZ3BJbz0rUVktdSp3UX0odmlQRW17TTJYSWJQTmspMnFrKVh4S34lMm4K
emJKLSY7Sz99RGJIXnRPQlFIMWBgam1fNzk1NjEpQ1VHIzhLSjwmfUdIMDB0d3JMfF5lNktIPnVo
dk1fTTVZREBVCnptZG1yTSZ2QCpuJiMwbThQRmg+JWp1VFpxQ29XQmlQVjdqcm9KYHMwY0ozYWIw
THdhKEJVJCtSQk50QWpFVUA+egp6JSktaVFeP1JjYUNoV15LeUd1cWM/TmMmeih9fntAUiooPFBD
fWR6eUw8V3JvUzM1dEVlaD5qdCZfTkY+YjhCWkwKeiE/dCZhUXQ4VVhKMmcqWFUxZFlCPCQ+YkJx
cC19d292UlEmXyRyUmV5dSNFUWpmcEwrRGhTPitadFdwRHNFKCFFCnp5S2hUe15VdzZ8X0BqYzxe
VVNjckI8cT44I3B+ZEB4K2NFYjZ9P2FuKjd8PlBwYkcqJlJZJWBabHx5O1l0Sm1IPwp6UjJSZzFv
cU9ge2opYWUtQU1TX3chfmNNNiMlM1Rod3dgODBiYmBJWkFVT0hMWDFKTTtXRnY0aSgtKi0zRndQ
WkoKenUzUmpvU0xJIT1ScyVfdGJ3T3RhZSpXY1oxV2p7akdSc19BcmNfcXFIfmslWEtnMHJ4QCst
ZWR6WCZYNGdIU1F3CnpsOW9EXjdHdVQ1YkV+VWFAZ1NZViV+ZUVRbGE1UHxfKkFAQUR3PzBQNVB1
ZExJYkBeWEZ0JndRazM/e2gpWGV9awp6XzFxYVNaaUcmelQobGgrTzRrSEFzY2dPcG9iUnw1U18y
ISVGT1ZMVXd0QGNjcTN1JE1kcHtiSzlCI2soYyQkcFcKejJrJV4qZHRNNTZ0ZDhebl9PO1J3VHN3
bjw3TDc+PUYxYTdxYGljPzlnT3VraTdnaHRBWkpuKVJHUmNLQSpwaz1lCnpkWUxqcSlAd34yUm83
YWR5YFJPaVk1Yit4M2Z6JWErbDJqLXJ0RnA8LTd7VTsyR2hNZVJ7ZGFANTh2YClWJWNjYAp6TUtG
ckB5cmV0cktPVSEjPCVfNz1ZSVNJMGZlcSp3TWBgS0o5IVF5KVBRdlZZWDNtYk5zU2hyIWp9Zn49
dCYxcHMKenpOWkM+Q0c1NlAjZmFufWJiMG55RzIkdkR7MzE/WF9PWT83c2Y0UXw/OWlIOT5PQFRH
UklNeCprTyFMKlAlMVUyCno0Q042cVRXJkV1amh0aHxEJXFecHA5T2NzNGRxeHtKSSZgZEpQZVJ2
UWY+M2BLVGd6SzEoX2xAJV5IPHtvWnBPewp6ZGdLYzhkU3d1fDVBTyRpSD45dWgoRGs2fmFSaXNM
UnwlPm98QTB2aip5KVB9KHBobV47TStvX3ZjIT1ATWNtVUkKem8hUjdwVE1OPytIfEo1YW13UHZs
RUE8WHhfRnYoUkVEUXxUdz4pZkk7eSQmX3stSiZtbmhoPlA0cmRxaWU3aW8tCnpXY1oqdUBWYHVR
c2NMPWVhan10JE9ZcmwtVTRTND5WM2oxdyg5dnowRz4kUlBgKm13S0V3Tm5FLSs5N0RUcmklSgp6
Yl5NN2VjblNvUk5lQSRiNV9SdzVPIXJQNiUxVkRYJC0oRXU3RngpakA8SVhxRiUtZSZGODFzb1d0
TD1iVH0mdiQKenZQUHVMajUzRmZvbURUVnVWejN+PlU1aCZuIWNhJkU0Q2w+dG8wRm8mbU9YVGJO
a3BeUzhHX2gqUyNgT29lMyQ5CnpvYWV5SUtOX1cwOHxoUD54OHZrJE0zfS14IUdaaT88XmlvMnR+
QG4jajZFeS08LTtyU2VCal4rYnstVX1LXiFzSAp6SnxUVEdNaDxRUWgkNU4kdWxCI3t8TlNrTUN2
Y1Rpbm1fNW9fUUcqKWg0PCVIPCkzV34/KCpvZSh6TkRYYkQ5al8KeklCVXd6bCpLZUFscklMKjNU
N047I0UxZHZNM3Y9RVMwZnNiMzZZU3t6dyF1TG4jVkx0XkZ4cDtoZn1edTheLUFeCnpPY2ZwWUkq
bS1YP2A7aEkzc35mQlhjdzdfb0M1a0YxbFNpMmxDSXNmRUpLd3EoYFA2K2tNNExmeU88P3dTVUtQ
YQp6P01wdGFicFQoNlEoZnwwWTNDUiU1cFNmREteN3pLbE5yazJUUHRVNEFfJCl9eFVWfHQ+c1ZC
bjB3Kl8zZiFJZnoKemNkXkNKMG1ianxNTWY1NG0kOFd9OTs5Vm87QTUybTJqezd9ezJxP2JUKl5T
ZU5XPGY2WnVCfUxMS2QyXkg/eSppCnp1YklnPkNkaTZAUWBeK1MlNm9pJkBuTm84YkpCZHJBWksm
U0NxYGEqVTVxSHwlX2lsKEo9dHBpIVQjQmJzMGZiQgp6Z2h4Uzkwd0QyT1gxMSk9WWFnfENwKiVB
X0EkWER8MzElWWVpJighPVViWUd9MTBHMW5YR0UmO0F6M35ZZUJ3PyQKek0jfmgoQHFwQEpIcXJH
UVpfWnlUd2MtZyVXTU5ySD4qPTNpZ1M4b3xfTV94WjYpd1hFYG56dWVTODtLYmt2X1hjCnozaz12
bntwdE9qeSY+c35tNnkkdTN2fmZxJGIrcikhO0Jpazw/OyZiNmlPRjhVP2crb3NPaXVhMEhrfiZe
RzxucQp6WnVuPU5fdV8oUEtRQG1zUSFFIzs8VWFEa3g/SUN+UzBrcD12aFpfVyNiOW5gcz11SD1u
N0FsQmtmPi1oYEtLJj0KejMkRW1nQz82fHNeZXIwdFVEdjlsQCFMZHdmOT9EJlhXN01KUShwdmRY
QFd4dlllKituNzFtRUx4U35rK3NrJihqCnorI05NNTlPa3xCZVo7eHkkWkZNUWhUO31uJDRXKThS
U2lwO24kKWdXIXx3Nm54UT47azB+SStyP2VUWUU7MyZeZwp6O0VxeDJ3YiliZXh8RTxvPlMoNDE0
bn12JV4ydWBqNW4kRXJZVSlDQ0ZkLSEoVjM8Tj9ta3IwOFBfTz4mRU9uayMKeiQ+PmkkSmEzaFI8
e3crZ28tLUpJPVpCajl6d19yPDBFc1oqYTUhYnxPazJrKWs3KUo4d0QpSkkhYGh3NXs5KXRWCnok
OE4zYU01a3dQNlBnVEdDKV88TENxe0ViSFZAYmY5d0NgdjNUTWBGOXhNQkk5OU8kN2ZtMF8rKV5w
fnFAP3VnfAp6LWp+aytaYkJNYGl5emRtNzZ4bjk3bklqSHFXNnRYRmlKMHcqMCVQKFM/Zz1jbU07
bXJWKnR5Wm1IKyVxaDlUa3YKekV3REptcXBacGclfGolWmshWC1fWHd5SHtPVjtNSDdQMl8pSkdY
dTdKa24rRzc7bXRAPyRDSXtyOyZZMmdsPWM+CnokcWlWV1JvaSlLISt1Sn0waUtLUiZrMjZac0RY
XkRWTyNHN2hWVSZyaH1wISZIJUkhISQ1TkRRWlVWcyF0WXxkSwp6UWlFM0dNPm9KMTh4blpYZFZo
UUN2N0VTeHVQRHA0Uk8zcm5vZiF7cDElTT5eTz0mfW92YmQ/OE1Ad0hLbiF2WHAKeiZKVURXbXo/
bVk3cVFFeFkrM1Jue1J2OEokQyVKI3txJUF2ZFVMNTNmQD80dGh9bE9CVWYyVypJKUQ0VlZyZmBW
CnpPPF85U0E9SXVXJSZZI3ZgdFR7QD1aJExCVVNtP0MoISNKPT4qYWxHcT15PmtRYCY+QzFpez4h
Y1A4dFVKdG9+YAp6dU5MWSttY1Bod2dxPyMhNncyUUhzRVZ1fTZMKXtEUypWNTtePEtnNGNWI0h6
PkpNc21iTzMxNjNLbFVPX2d9SHAKek83P0MrdyRKaXJvK0JJUUk1KyF3WjxNc3BjcHlPaiR4WVZe
Wk8jPDIkMm94JUVGZ0tSK0ltanstdVZ4P1lmN3lFCno9ZnlOeT8mVz04azZmPTlzRipxdndDcHw0
K3R4K1ZqdSMmKl9JWVFGaXhLLXVoam5femheekBVPypBT2U9IV95dQp6JWh8dEh6SilFP3IpMSVX
LVBCamJTTGM7SD1RPUx0YW5sX1ctZ1FfZz8+OXIxR1ZgMiluYSVSfEE1ZHBqbVBBcTAKelhMYFEy
ZSFjbCRGPSNZSGJxNXkrbCFOTEpBaGFmPHFYIzFrUFhpc30mcmtPfjxLc0VJLTteSFhnJDE9dFEp
WCtNCnplPn1Wa292RUJ+Yk85KylwcStiWmdPVDRkbGh9ZFpDeXEhd20hTmJSdWFAQD4jJT9EVi1B
OE9PYmklJWY1JTJOTAp6Wkg+SmZCe2h0QEloMD8+dFBiYVdRaXl5fmNDYzh9eHBoSS0mdXM5bW89
KmBCYF4hOEVWITV8dzNoQ1ZRMX0rNzsKelI7V0ZDb31LRnNQKmAjKU9peG87I2xmOCleJXQkYTxP
MFJianskclYjc0Bnd0U2VSZKI3EmM3RgMyFuKWFpYCM0Cno0IUo0S2pYKDdEYER8WV5GcjlkTHBC
Ml9VOENkMzl5IzdNeF53SzlFP0ZjOTh4dlE9O0JXIVYkUiR9MVJYbDx+fAp6e0F3MT8zczd7fWJW
dlZ5czVaPTZGekUjTmpzcEZeREYhRjVTVX50YlN5WmM7Tm9qMDU9Y21VUypLKyFrPDFqcmoKenZF
cmxZaD56eWdLcT40MUpEaDxvTDZgV0QpfERMaC1EeCRmRlJBYH1WV1Yla1p0Rys5ZEdiVTMtSF8h
b3p4PF5vCnpKejkwWHspaFhJaSt+PFRiRVFHRF5kJlRIKGF0ZnFgayhOQz5YdSlaeGhPVDtERnlY
d1hgYyRFM1k5X2BAVVRuRgp6YnZpfntvb242YWVDXm1mPktlZSkzdGwkUnEmWUYtdG4mOChIPm80
NnhkcjkjO3Q1ankmaExeI1RONGpiQmtvTTUKenRxNEEyNlpZa0MrJmApdy11RVYpbHBpSjtUejBC
a1lgODFvIzl9eGxtT3stcitlX2gxJjJWSEItaXVrPCphKTFaCnojK1RFaXg8ZUZlemZCQlk+ZmN1
V29gUDV9d0JaMV4zZmR8NUEwfElOSFRmVVRaelFTTncjfnJJQU8mfSt0bVl7dAp6cDQ3YXs5MEtO
a2RRYzV9THVyMi1vZ0h7PnNWTktAJUtZUFZDTTEzQ1Y9cm0/N2pMdFpYZF9GQHFhKiVCN3w9PWgK
enhUQGJOSm02WDYoLSY1YCZ5O3ZIOV42KiFoLWRaTVg5dnc5NV5EV2QkUnpjKVlXPWlFeF4hSCpt
Vz08QCt3dSNoCnomY01KaGgrKW0raiZua0Y1Zjl8IyZRd2xgOUNnWlRLV0Q+RnNXZ011P3FPUC1O
QDZLe3NhWHBqZG1XTCVDOGZuKgp6bUIwNm1JTE9DKXMxYnJFM29tMHxSeGJRIWh9N1R3akA5O21j
fjlzUkpvQ1RNXkZGcUdLTDZZaWU0MyMoUWt2cTEKenY2P25NYmRYNjdTOWZ7eXNuSlg8UnYhSTJm
bTRCUCskQzR9ZV5MSTxeNTBYQWhUKkUobC0lRio5PEtPZiFwfW1JCnp8QXI4IzI1YjRZZTRaaDM8
Z3gkaT80U0Nyc013VHItcjVEViFfe0IrbndqfFpPZVJYPlVQUHlVMU9AU1BMYmFJKwp6NCM3dUlV
U3M0a1hAX29uIXZXRXVfeCFaO1ZefERqRlRrKmtne242MHZHTU0pPkRRKlZya3RvYUZfOCpmaWlD
WVYKenZjeCpkI2RTSXs8MCNpJThQRmxGIzRja2x1NG1xLXhVUSVEYHstWEp7Xmk4S3Ezfn1+XyV8
MitUTlZFUXNFO2hwClo0fSY9YGI3dndPX3p3Pio8Q2AjcHZLdm9je3ZSTnRNS0F5VwoKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzA3Zjg1
NTBmMGFkNjJlOTJiYTMwNDI5ZWEzYzEzYjIxMDQ5MTgyYy4uMDZmMDg4MWEyZTI0ZmE2ZjZjYjYy
YzA1NThkM2NiMjQyYmZmMTkwNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMC0wOC0zMSAgQWxlamFuZHJv
IEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbR3RrXSB2ZXJ5IHNsb3cgcGFnZSBzY3JvbGxpbmcgb24g
YmlnIC13ZWJraXQtYm94LXNoYWRvdyBhcmVhcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk1ODIKKworICAgICAgICBBZGQgYSBuZXcgZHJhd0Zhc3RT
aGFkb3cgbWV0aG9kIHRvIHJlbmRlciBhIGJpZyBzaGFkb3cgZG9pbmcKKyAgICAgICAgdGlsaW5n
IG9mIHBhcnRzIG9mIGEgc21hbGxlciBzaGFkb3cuIFdlIGNyZWF0ZSB0aGUgbWluaW11bSBzaGFk
b3cKKyAgICAgICAgcmVxdWlyZWQgdG8gZ2V0IHRoZSB0aWxlcyB3ZSB3aWxsIHVzZSB0byByZW5k
ZXIgdGhlIHJlYWwgc2hhZG93CisgICAgICAgIGFuZCB3ZSB1c2UgZHJhd1BhdHRlcm4gd2l0aCB0
aG9zZSB0aWxlcyB0byBjcmVhdGUgdGhlIHNoYWRvdy4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ZvbnRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3UGF0aFNoYWRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpkcmF3Qm9yZGVybGVzc1JlY3RTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFw
cGx5UGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
cmVhdGVTaGFkb3dNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFBoYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkU2hhZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpkcmF3KToKKwogMjAxMC0wOC0zMSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnpp
bW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaXJrIFNjaHVsemUuCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCA5M2VmODkw
MDYyZWRhNTI4OTllNGQzM2RkMTA5MWEyZDMyZjRkMDhjLi5jYjQzZjAxOWUyZmI5MmU4MzUzNjc3
NTgzNDRkNzU2ZmVlZTE0MzUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpZiBQTEFURk9STShDRykKIHR5cGVkZWYg
c3RydWN0IENHQ29udGV4dCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKICNlbGlmIFBMQVRGT1JN
KENBSVJPKQorI2luY2x1ZGUgIlBsYXRmb3JtUmVmUHRyQ2Fpcm8uaCIKIHR5cGVkZWYgc3RydWN0
IF9jYWlybyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKICNlbGlmIFBMQVRGT1JNKE9QRU5WRykK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI5Nyw4ICsyOTgsMTEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2b2lkIHNldEFscGhhKGZsb2F0KTsKICNpZiBQTEFURk9STShDQUlSTykK
ICAgICAgICAgZmxvYXQgZ2V0QWxwaGEoKTsKLSAgICAgICAgdm9pZCBjcmVhdGVQbGF0Zm9ybVNo
YWRvdyhQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIsIGNvbnN0IENvbG9yJiBzaGFkb3dD
b2xvciwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBmbG9hdCByYWRpdXMpOworICAgICAg
ICB2b2lkIGFwcGx5UGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVy
LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwg
ZmxvYXQgcmFkaXVzKTsKKyAgICAgICAgUGxhdGZvcm1SZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBj
cmVhdGVTaGFkb3dNYXNrKFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCByYWRpdXMpOworCiAgICAgICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVNoYWRvd0J1
ZmZlckRpbWVuc2lvbnMoSW50U2l6ZSYgc2hhZG93QnVmZmVyU2l6ZSwgRmxvYXRSZWN0JiBzaGFk
b3dSZWN0LCBmbG9hdCYgcmFkaXVzLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dCbHVyKTsKKyAgICAgICAgdm9p
ZCBkcmF3VGlsZWRTaGFkb3coY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRTaXplJiB0
b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9h
dFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRp
dXMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSk7CiAjZW5kaWYKIAogICAgICAgICB2b2lkIHNldENv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcik7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKaW5kZXggNWJmYTNmYjliNGM3ZDhlZGFiMDcx
ZmY5NmI1NTdkODhkZTZhY2ZlMS4uY2Q1ZDM2MjYxMDVkYzYyYTliYTdlOTlhYzIwNzA5YzY2MTM5
MTA2YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fp
cm8uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNw
cApAQCAtMTEzLDcgKzExMyw3IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zCiAgICAgICAgICAg
ICBjYWlyb19yZXN0b3JlKHNoYWRvd0NyKTsKICAgICAgICAgfQogICAgICAgICBjYWlyb190cmFu
c2xhdGUoY3IsIDAuMCwgLWV4dGVudHMuaGVpZ2h0KTsKLSAgICAgICAgY29udGV4dC0+Y3JlYXRl
UGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRv
d1JlY3QsIHJhZGl1cyk7CisgICAgICAgIGNvbnRleHQtPmFwcGx5UGxhdGZvcm1TaGFkb3coc2hh
ZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cyk7CiAj
ZWxzZQogICAgICAgICBjYWlyb190cmFuc2xhdGUoY3IsIHNoYWRvd09mZnNldC53aWR0aCgpLCBz
aGFkb3dPZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICBjYWlyb19zaG93X2dseXBocyhjciwgZ2x5
cGhzLCBudW1HbHlwaHMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRleCA2ODNjMTQ0ZTAyYThjNmFiYzAz
M2ViYmU4NGU2Y2FiNzc5MDQ2MTQzLi41ZWExMGQwMmQzMTZjNjdkOTgwZjljYWIyMmIyM2M5ODhl
MGYyYTZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVJlZlB0ckNhaXJvLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERh
dGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAKQEAgLTIyOCw3ICsyMjksNyBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgZHJhd1BhdGhTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBHcmFwaGljc0NvbnRleHRQcml2YQogICAgIGlmIChzdHJva2VTaGFkb3cpCiAgICAgICAgIHNl
dFBsYXRmb3JtU3Ryb2tlKGNvbnRleHQsIHNoYWRvd0NvbnRleHQsIGdjcCk7CiAKLSAgICBjb250
ZXh0LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dD
b2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKKyAgICBjb250ZXh0LT5hcHBseVBsYXRmb3JtU2hh
ZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRp
dXMpOwogI2VuZGlmCiB9CiAKQEAgLTYyMyw2ICs2MjQsMjAgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHN0YXRpYyB2b2lkIGRyYXdCb3Jk
ZXJsZXNzUmVjdFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIHJlY3RDb2xvcikKIHsKICNpZiBFTkFCTEUoRklMVEVSUykK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gY29udGV4dC0+Z2V0Q1RNKCk7CisgICAg
Ly8gZHJhd1RpbGVkU2hhZG93IHN0aWxsIGRvZXMgbm90IHdvcmsgd2l0aCByb3RhdGlvbnMKKyAg
ICBpZiAoKHRyYW5zZm9ybS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSkgewor
ICAgICAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgICAg
ICBjYWlyb19zYXZlKGNyKTsKKyAgICAgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4
dChjciwgUGF0aDo6Y3JlYXRlUmVjdGFuZ2xlKHJlY3QpKTsKKyAgICAgICAgRmxvYXRTaXplIGNv
cm5lcjsKKyAgICAgICAgSW50UmVjdCBzaGFkb3dSZWN0KHJlY3QpOworICAgICAgICBjb250ZXh0
LT5kcmF3VGlsZWRTaGFkb3coc2hhZG93UmVjdCwgY29ybmVyLCBjb3JuZXIsIGNvcm5lciwgY29y
bmVyLCBEZXZpY2VDb2xvclNwYWNlKTsKKyAgICAgICAgY2Fpcm9fcmVzdG9yZShjcik7CisKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CiAgICAg
ZmxvYXQgc2hhZG93Qmx1cjsKICAgICBDb2xvciBzaGFkb3dDb2xvcjsKQEAgLTY0MCw3ICs2NTUs
NyBAQCBzdGF0aWMgdm9pZCBkcmF3Qm9yZGVybGVzc1JlY3RTaGFkb3coR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmCiAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dD
b250ZXh0ID0gc2hhZG93QnVmZmVyLT5jb250ZXh0KCk7CiAgICAgc2hhZG93Q29udGV4dC0+Zmls
bFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQocmFkaXVzLCByYWRpdXMpLCByZWN0LnNpemUoKSks
IHJlY3RDb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7CiAKLSAgICBjb250ZXh0LT5jcmVhdGVQbGF0
Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVj
dCwgcmFkaXVzKTsKKyAgICBjb250ZXh0LT5hcHBseVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZl
ci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOwogI2VuZGlmCiB9
CiAKQEAgLTkyMSwyMCArOTM2LDI1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVNoYWRvdyhGbG9hdFNpemUgY29uc3QmIHNpemUsIGZsb2F0LCBDb2xvciBjb25zCiAgICAgfQog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUGxhdGZvcm1TaGFkb3coUGFzc093blB0
cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZs
b2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQgcmFkaXVzKQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmFwcGx5UGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25z
dCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQg
cmFkaXVzKQogewogI2lmIEVOQUJMRShGSUxURVJTKQotICAgIGNhaXJvX3QqIGNyID0gbV9kYXRh
LT5jcjsKKyAgICBzZXRDb2xvcihtX2RhdGEtPmNyLCBzaGFkb3dDb2xvcik7CisgICAgUGxhdGZv
cm1SZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzaGFkb3dNYXNrKGNyZWF0ZVNoYWRvd01hc2soYnVm
ZmVyLCBzaGFkb3dSZWN0LCByYWRpdXMpKTsKKyAgICBjYWlyb19tYXNrX3N1cmZhY2UobV9kYXRh
LT5jciwgc2hhZG93TWFzay5nZXQoKSwgc2hhZG93UmVjdC54KCksIHNoYWRvd1JlY3QueSgpKTsK
KyNlbmRpZgorfQogCi0gICAgLy8gY2FsY3VsYXRlIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24KLSAg
ICBmbG9hdCBzZCA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVTdGREZXZpYXRpb24ocmFkaXVz
KTsKK1BsYXRmb3JtUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gR3JhcGhpY3NDb250ZXh0OjpjcmVh
dGVTaGFkb3dNYXNrKFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QgRmxvYXRS
ZWN0JiBzaGFkb3dSZWN0LCBmbG9hdCByYWRpdXMpCit7CisjaWYgRU5BQkxFKEZJTFRFUlMpCisg
ICAgaWYgKCFyYWRpdXMpCisgICAgICAgIHJldHVybiBidWZmZXItPm1fZGF0YS5tX3N1cmZhY2U7
CiAKLSAgICAvLyBkcmF3IHRoZSBzaGFkb3cgd2l0aG91dCBibHVycmluZywgaWYgcmFkaXVzIGlz
IHplcm8KLSAgICBpZiAoIXJhZGl1cyB8fCAhc2QpIHsKLSAgICAgICAgc2V0Q29sb3IoY3IsIHNo
YWRvd0NvbG9yKTsKLSAgICAgICAgY2Fpcm9fbWFza19zdXJmYWNlKGNyLCBidWZmZXItPm1fZGF0
YS5tX3N1cmZhY2UsIHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgRmxvYXRQb2ludCBibHVyUmFkaXVzID0gRmxvYXRQb2ludChyYWRp
dXMsIHJhZGl1cyk7CisgICAgZmxvYXQgc2QgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlU3Rk
RGV2aWF0aW9uKHJhZGl1cyk7CisgICAgaWYgKCFzZCkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci0+
bV9kYXRhLm1fc3VyZmFjZTsKIAogICAgIC8vIGNyZWF0ZSBmaWx0ZXIKICAgICBSZWZQdHI8Rmls
dGVyPiBmaWx0ZXIgPSBJbWFnZUJ1ZmZlckZpbHRlcjo6Y3JlYXRlKCk7CkBAIC05NDUsMTQgKzk2
NSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUGxhdGZvcm1TaGFkb3coUGFzc093
blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdAogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJsdXIgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHNvdXJjZS5nZXQoKSwgc2QsIHNkKTsKICAg
ICBibHVyLT5zZXRTY2FsZWRTdWJSZWdpb24oRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2hhZG93
UmVjdC5zaXplKCkpKTsKICAgICBibHVyLT5hcHBseShmaWx0ZXIuZ2V0KCkpOwotCi0gICAgLy8g
TWFzayB0aGUgZmlsdGVyIHdpdGggdGhlIHNoYWRvdyBjb2xvciBhbmQgZHJhdyBpdCB0byB0aGUg
Y29udGV4dC4KLSAgICAvLyBNYXNraW5nIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGp1c3QgYmx1ciB0
aGUgYWxwaGEgY2hhbm5lbC4KLSAgICBzZXRDb2xvcihjciwgc2hhZG93Q29sb3IpOwotICAgIGNh
aXJvX21hc2tfc3VyZmFjZShjciwgYmx1ci0+cmVzdWx0SW1hZ2UoKS0+bV9kYXRhLm1fc3VyZmFj
ZSwgc2hhZG93UmVjdC54KCksIHNoYWRvd1JlY3QueSgpKTsKKyAgICByZXR1cm4gYmx1ci0+cmVz
dWx0SW1hZ2UoKS0+bV9kYXRhLm1fc3VyZmFjZTsKICNlbmRpZgogfQogCisKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwpAQCAtMTIxOCw2ICsxMjM1LDIwMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dEVs
bGlwc2VJblJlY3QoY29uc3QgSW50UmVjdCYgcikKICAgICBjbGlwT3V0KHApOwogfQogCitzdGF0
aWMgaW5saW5lIEZsb2F0UG9pbnQgZ2V0UGhhc2UoY29uc3QgRmxvYXRSZWN0JiBkZXN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGUpCit7CisgICAgRmxvYXRQb2ludCBwaGFzZSA9IGRlc3QubG9jYXRp
b24oKTsKKyAgICBwaGFzZS5tb3ZlKC10aWxlLngoKSwgLXRpbGUueSgpKTsKKworICAgIHJldHVy
biBwaGFzZTsKK30KKworLyoKKyAgVGhpcyBmdW5jdGlvbiB1c2VzIHRpbGluZyB0byBpbXByb3Zl
IHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgc2hhZG93CisgIGRyYXdpbmcgb2Ygcm91bmRlZCByZWN0
YW5nbGVzLiBUaGUgY29kZSBiYXNpY2FsbHkgZG9lcyB0aGUgZm9sbG93aW5nCisgIHN0ZXBzOgor
CisgICAgIDEuIENhbGN1bGF0ZSB0aGUgbWluaW11bSByZWN0YW5nbGUgc2l6ZSByZXF1aXJlZCB0
byBjcmVhdGUgdGhlCisgICAgIHRpbGVzCisKKyAgICAgMi4gSWYgdGhhdCBzaXplIGlzIHNtYWxs
ZXIgdGhhbiB0aGUgcmVhbCByZWN0YW5nbGUgcmVuZGVyIHRoZSBuZXcKKyAgICAgc21hbGwgcmVj
dGFuZ2xlIGFuZCBpdHMgc2hhZG93IGluIGEgbmV3IHN1cmZhY2UsIGluIG90aGVyIGNhc2UKKyAg
ICAgcmVuZGVyIHRoZSBzaGFkb3cgb2YgdGhlIHJlYWwgcmVjdGFuZ2xlIGluIHRoZSBkZXN0aW5h
dGlvbgorICAgICBzdXJmYWNlLgorCisgICAgIDMuIENhbGN1bGF0ZSB0aGUgc2l6ZXMgYW5kIHBv
c2l0aW9ucyBvZiB0aGUgdGlsZXMgYW5kIHRoZWlyCisgICAgIGRlc3RpbmF0aW9ucyBhbmQgdXNl
IGRyYXdQYXR0ZXJuIHRvIHJlbmRlciB0aGUgZmluYWwgc2hhZG93LiBUaGUKKyAgICAgY29kZSBk
aXZpZGVzIHRoZSByZW5kZXJpbmcgaW4gOCB0aWxlczoKKworICAgICAgICAxIHwgMiB8IDMKKyAg
ICAgICAtLS0tLS0tLS0tLQorICAgICAgICA0IHwgICB8IDUKKyAgICAgICAtLS0tLS0tLS0tLQor
ICAgICAgICA2IHwgNyB8IDgKKworICAgICBUaGUgY29ybmVycyBhcmUgZGlyZWN0bHkgY29waWVk
IGZyb20gdGhlIHNtYWxsIHJlY3RhbmdsZSB0byB0aGUKKyAgICAgcmVhbCBvbmUgYW5kIHRoZSBz
aWRlIHRpbGVzIGFyZSAxIHBpeGVsIHdpZHRoLCB3ZSB1c2UgdGhlbSBhcworCisgICAgIHRpbGVz
IHRvIGNvdmVyIHRoZSBkZXN0aW5hdGlvbiBzaWRlLiBUaGUgY29ybmVyIHRpbGVzIGFyZSBiaWdn
ZXIKKyAgICAgdGhhbiBqdXN0IHRoZSBzaWRlIG9mIHRoZSByb3VuZGVkIGNvcm5lciwgd2UgbmVl
ZCB0byBpbmNyZWFzZSBpdAorICAgICBiZWNhdXNlIHRoZSBtb2RpZmljYXRpb25zIGNhdXNlZCBi
eSB0aGUgY29ybmVyIG92ZXIgdGhlIGJsdXIKKyAgICAgZWZmZWN0LiBXZSBmaWxsIHRoZSBjZW50
cmFsIHBhcnQgd2l0aCBzb2xpZCBjb2xvciB0byBjb21wbGV0ZSB0aGUKKyAgICAgc2hhZG93Lgor
ICovCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkU2hhZG93KGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiB0
b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBG
bG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7Cisj
aWYgRU5BQkxFKEZJTFRFUlMpCisgICAgRmxvYXRTaXplIHNoYWRvd1NpemU7CisgICAgZmxvYXQg
c2hhZG93Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAgICBpZiAoIWdldFNoYWRvdyhz
aGFkb3dTaXplLCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcikpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIENhbGN1bGF0ZSBmaWx0ZXIgdmFsdWVzIHRvIGNyZWF0ZSBhcHByb3ByaWF0ZSBzaGFk
b3cuCisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOworCisgICAgSW50U2l6ZSBzaGFkb3dC
dWZmZXJTaXplOworICAgIEZsb2F0UmVjdCBzaGFkb3dSZWN0OworICAgIGZsb2F0IGJsdXJSYWRp
dXMgPSAwOworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2FsY3VsYXRlU2hhZG93QnVmZmVyRGltZW5z
aW9ucyhzaGFkb3dCdWZmZXJTaXplLCBzaGFkb3dSZWN0LCBibHVyUmFkaXVzLCByZWN0LCBzaGFk
b3dTaXplLCBzaGFkb3dCbHVyKTsKKworICAgIC8vIFNpemUgb2YgdGhlIHRpbGluZyBzaWRlLgor
ICAgIGludCBzaWRlVGlsZVdpZHRoID0gMTsKKyAgICBmbG9hdCByYWRpdXNUd2ljZSA9IGJsdXJS
YWRpdXMgKiAyOworCisgICAgLy8gRmluZCB0aGUgZXh0cmEgc3BhY2UgbmVlZGVkIGZyb20gdGhl
IGN1cnZlIG9mIHRoZSBjb3JuZXJzLgorICAgIGludCBleHRyYVdpZHRoRnJvbUNvcm5lclJhZGlp
ID0gcmFkaXVzVHdpY2UgKyBtYXgodG9wTGVmdFJhZGl1cy53aWR0aCgpLCBib3R0b21MZWZ0UmFk
aXVzLndpZHRoKCkpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1
c1R3aWNlICsgbWF4KHRvcFJpZ2h0UmFkaXVzLndpZHRoKCksIGJvdHRvbVJpZ2h0UmFkaXVzLndp
ZHRoKCkpOworICAgIGludCBleHRyYUhlaWdodEZyb21Db3JuZXJSYWRpaSA9IHJhZGl1c1R3aWNl
ICsgbWF4KHRvcExlZnRSYWRpdXMuaGVpZ2h0KCksIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpKSAr
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzVHdpY2UgKyBtYXgo
Ym90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSwgYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpOwor
CisgICAgLy8gVGhlIGxlbmd0aCBvZiBhIHNpZGUgb2YgdGhlIGJ1ZmZlciBpcyB0aGUgZW5vdWdo
IHNwYWNlIGZvciBmb3VyIGJsdXIgcmFkaWksCisgICAgLy8gdGhlIHJhZGlpIG9mIHRoZSBjb3Ju
ZXJzLCBhbmQgdGhlbiAxIHBpeGVsIHRvIGRyYXcgdGhlIHNpZGUgdGlsZXMuCisgICAgSW50U2l6
ZSBzbWFsbEJ1ZmZlclNpemUgPSBJbnRTaXplKHNpZGVUaWxlV2lkdGggKyBleHRyYVdpZHRoRnJv
bUNvcm5lclJhZGlpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRl
VGlsZVdpZHRoICsgZXh0cmFIZWlnaHRGcm9tQ29ybmVyUmFkaWkpOworCisgICAgaWYgKChzbWFs
bEJ1ZmZlclNpemUud2lkdGgoKSA+IHNoYWRvd0J1ZmZlclNpemUud2lkdGgoKSkgfHwgKHNtYWxs
QnVmZmVyU2l6ZS5oZWlnaHQoKSA+IHNoYWRvd0J1ZmZlclNpemUuaGVpZ2h0KCkpIHx8IChibHVy
UmFkaXVzIDw9IDApKSB7CisgICAgICAgIC8vIENyZWF0ZSBzdWl0YWJseS1zaXplZCBJbWFnZUJ1
ZmZlciB0byBob2xkIHRoZSBzaGFkb3cuCisgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc2hh
ZG93QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaGFkb3dCdWZmZXJTaXplKTsKKyAgICAg
ICAgaWYgKCFzaGFkb3dCdWZmZXIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8g
RHJhdyBzaGFkb3cgaW50byBhIG5ldyBJbWFnZUJ1ZmZlci4KKyAgICAgICAgY2Fpcm9fdCogc2hh
ZG93Q29udGV4dCA9IHNoYWRvd0J1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsK
KyAgICAgICAgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNyLCBzaGFkb3dDb250ZXh0KTsKKyAgICAg
ICAgY2Fpcm9fdHJhbnNsYXRlKHNoYWRvd0NvbnRleHQsIC1yZWN0LngoKSArIGJsdXJSYWRpdXMs
IC1yZWN0LnkoKSArIGJsdXJSYWRpdXMpOworICAgICAgICBjYWlyb19uZXdfcGF0aChzaGFkb3dD
b250ZXh0KTsKKyAgICAgICAgY2Fpcm9fcGF0aF90KiBwYXRoID0gY2Fpcm9fY29weV9wYXRoKGNy
KTsKKyAgICAgICAgY2Fpcm9fYXBwZW5kX3BhdGgoc2hhZG93Q29udGV4dCwgcGF0aCk7CisgICAg
ICAgIGNhaXJvX3BhdGhfZGVzdHJveShwYXRoKTsKKworICAgICAgICBzZXRQbGF0Zm9ybUZpbGwo
dGhpcywgc2hhZG93Q29udGV4dCwgbV9jb21tb24pOworCisgICAgICAgIGFwcGx5UGxhdGZvcm1T
aGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIGJs
dXJSYWRpdXMpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBPd25QdHI8SW1hZ2VC
dWZmZXI+IHNtYWxsQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzbWFsbEJ1ZmZlclNpemUp
OworICAgIGlmICghc21hbGxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3Qg
c21hbGxSZWN0ID0gSW50UmVjdChibHVyUmFkaXVzLCBibHVyUmFkaXVzLCBzbWFsbEJ1ZmZlclNp
emUud2lkdGgoKSAtIHJhZGl1c1R3aWNlLCBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgLSByYWRp
dXNUd2ljZSk7CisKKyAgICAvLyBEcmF3IHNoYWRvdyBpbnRvIGEgbmV3IEltYWdlQnVmZmVyLgor
ICAgIGNhaXJvX3QqIHNtYWxsQnVmZmVyQ29udGV4dCA9IHNtYWxsQnVmZmVyLT5jb250ZXh0KCkt
PnBsYXRmb3JtQ29udGV4dCgpOworICAgIGNvcHlDb250ZXh0UHJvcGVydGllcyhjciwgc21hbGxC
dWZmZXJDb250ZXh0KTsKKyAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KHNtYWxs
QnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLCBQYXRoOjpjcmVhdGVSb3VuZGVk
UmVjdGFuZ2xlKHNtYWxsUmVjdCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRv
bUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7CisgICAgc2V0UGxhdGZvcm1GaWxsKHRo
aXMsIHNtYWxsQnVmZmVyQ29udGV4dCwgbV9jb21tb24pOworCisgICAgT3duUHRyPEltYWdlQnVm
ZmVyPiBzaGFkb3dCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNtYWxsQnVmZmVyU2l6ZSk7
CisgICAgaWYgKCFzaGFkb3dCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHNtYWxsUmVj
dC5zZXRTaXplKHNtYWxsQnVmZmVyU2l6ZSk7CisKKyAgICBQbGF0Zm9ybVJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IHNoYWRvd01hc2soY3JlYXRlU2hhZG93TWFzayhzbWFsbEJ1ZmZlci5yZWxlYXNl
KCksIHNtYWxsUmVjdCwgYmx1clJhZGl1cykpOworCisgICAgY2Fpcm9fdCogc2hhZG93Q29udGV4
dCA9IHNoYWRvd0J1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBzZXRD
b2xvcihzaGFkb3dDb250ZXh0LCBzaGFkb3dDb2xvcik7CisgICAgY2Fpcm9fbWFza19zdXJmYWNl
KHNoYWRvd0NvbnRleHQsIHNoYWRvd01hc2suZ2V0KCksIDAsIDApOworCisgICAgLy8gRmlsbCB0
aGUgaW50ZXJuYWwgcGFydCBvZiB0aGUgc2hhZG93LgorICAgIHNoYWRvd1JlY3QuaW5mbGF0ZSgt
cmFkaXVzVHdpY2UpOworICAgIGlmICghc2hhZG93UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
Y2Fpcm9fc2F2ZShjcik7CisgICAgICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQo
Y3IsIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoc2hhZG93UmVjdCwgdG9wTGVmdFJhZGl1
cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7
CisgICAgICAgIHNldENvbG9yKGNyLCBzaGFkb3dDb2xvcik7CisgICAgICAgIGNhaXJvX2ZpbGwo
Y3IpOworICAgICAgICBjYWlyb19yZXN0b3JlKGNyKTsKKyAgICB9CisgICAgc2hhZG93UmVjdC5p
bmZsYXRlKHJhZGl1c1R3aWNlKTsKKworICAgIC8vIERyYXcgdG9wIHNpZGUuCisgICAgRmxvYXRS
ZWN0IHRpbGVSZWN0ID0gRmxvYXRSZWN0KHJhZGl1c1R3aWNlICsgdG9wTGVmdFJhZGl1cy53aWR0
aCgpLCAwLCBzaWRlVGlsZVdpZHRoLCByYWRpdXNUd2ljZSk7CisgICAgRmxvYXRSZWN0IGRlc3RS
ZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93
UmVjdC55KCkpOworICAgIGRlc3RSZWN0LnNldFdpZHRoKHNoYWRvd1JlY3Qud2lkdGgoKSAtIHRv
cExlZnRSYWRpdXMud2lkdGgoKSAtIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkgLSBibHVyUmFkaXVz
ICogNCk7CisgICAgRmxvYXRQb2ludCBwaGFzZSA9IGdldFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVj
dCk7CisgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm07CisgICAgcGF0dGVyblRy
YW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKHRo
aXMsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgY29sb3JTcGFjZSwgQ29tcG9z
aXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAgLy8gRHJhdyB0aGUgYm90dG9tIHNpZGUu
CisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3QocmFkaXVzVHdpY2UgKyBib3R0b21MZWZ0UmFkaXVz
LndpZHRoKCksIHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSAtIHJhZGl1c1R3aWNlLCBzaWRlVGls
ZVdpZHRoLCByYWRpdXNUd2ljZSk7CisgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0
UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSArIHJhZGl1c1R3aWNlICsg
cmVjdC5oZWlnaHQoKSAtIHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSk7CisgICAgZGVzdFJlY3Qu
c2V0V2lkdGgoc2hhZG93UmVjdC53aWR0aCgpIC0gYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpIC0g
Ym90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSAtIGJsdXJSYWRpdXMgKiA0KTsKKyAgICBwaGFzZSA9
IGdldFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7CisgICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0
dGVybih0aGlzLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIGNvbG9yU3BhY2Us
IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsKKworICAgIC8vIERyYXcgdGhlIHJpZ2h0
IHNpZGUuCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3Qoc21hbGxCdWZmZXJTaXplLndpZHRoKCkg
LSByYWRpdXNUd2ljZSwgcmFkaXVzVHdpY2UgKyB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSwgcmFk
aXVzVHdpY2UsIHNpZGVUaWxlV2lkdGgpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAg
ZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSArIHJhZGl1c1R3aWNlICsgcmVjdC53aWR0aCgp
IC0gc21hbGxCdWZmZXJTaXplLndpZHRoKCksIHNoYWRvd1JlY3QueSgpKTsKKyAgICBkZXN0UmVj
dC5zZXRIZWlnaHQoc2hhZG93UmVjdC5oZWlnaHQoKSAtIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgp
IC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkgLSBibHVyUmFkaXVzICogNCk7CisgICAgcGhh
c2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIHNoYWRvd0J1ZmZlci0+ZHJh
d1BhdHRlcm4odGhpcywgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBjb2xvclNw
YWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAgICAvLyBEcmF3IHRoZSBs
ZWZ0IHNpZGUuCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3QoMCwgcmFkaXVzVHdpY2UgKyB0b3BM
ZWZ0UmFkaXVzLmhlaWdodCgpLCByYWRpdXNUd2ljZSwgc2lkZVRpbGVXaWR0aCk7CisgICAgZGVz
dFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpLCBzaGFk
b3dSZWN0LnkoKSk7CisgICAgZGVzdFJlY3Quc2V0SGVpZ2h0KHNoYWRvd1JlY3QuaGVpZ2h0KCkg
LSB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpIC0gYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSAtIGJs
dXJSYWRpdXMgKiA0KTsKKyAgICBwaGFzZSA9IEZsb2F0UG9pbnQoZGVzdFJlY3QueCgpIC0gdGls
ZVJlY3QueCgpLCBkZXN0UmVjdC55KCkgLSB0aWxlUmVjdC55KCkpOworICAgIHNoYWRvd0J1ZmZl
ci0+ZHJhd1BhdHRlcm4odGhpcywgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNl
T3ZlciwgZGVzdFJlY3QpOworCisgICAgLy8gRHJhdyB0aGUgdG9wIGxlZnQgY29ybmVyLgorICAg
IHRpbGVSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIHJhZGl1c1R3aWNlICsgdG9wTGVmdFJhZGl1cy53
aWR0aCgpLCByYWRpdXNUd2ljZSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkpOworICAgIGRlc3RS
ZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93
UmVjdC55KCkpOworICAgIHBoYXNlID0gZ2V0UGhhc2UoZGVzdFJlY3QsIHRpbGVSZWN0KTsKKyAg
ICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKHRoaXMsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOwor
CisgICAgLy8gRHJhdyB0aGUgdG9wIHJpZ2h0IGNvcm5lci4KKyAgICB0aWxlUmVjdCA9IEZsb2F0
UmVjdChzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSAtIHJhZGl1c1R3aWNlIC0gdG9wUmlnaHRSYWRp
dXMud2lkdGgoKSwgMCwgcmFkaXVzVHdpY2UgKyB0b3BSaWdodFJhZGl1cy53aWR0aCgpLCByYWRp
dXNUd2ljZSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpKTsKKyAgICBkZXN0UmVjdCA9IHRpbGVS
ZWN0OworICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSBz
bWFsbEJ1ZmZlclNpemUud2lkdGgoKSArIHJhZGl1c1R3aWNlLCBzaGFkb3dSZWN0LnkoKSk7Cisg
ICAgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIHNoYWRvd0J1ZmZl
ci0+ZHJhd1BhdHRlcm4odGhpcywgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBj
b2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0UmVjdCk7CisKKyAgICAvLyBEcmF3
IHRoZSBib3R0b20gcmlnaHQgY29ybmVyLgorICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KHNtYWxs
QnVmZmVyU2l6ZS53aWR0aCgpIC0gcmFkaXVzVHdpY2UgLSBib3R0b21SaWdodFJhZGl1cy53aWR0
aCgpLCBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgLSByYWRpdXNUd2ljZSAtIGJvdHRvbVJpZ2h0
UmFkaXVzLmhlaWdodCgpLCByYWRpdXNUd2ljZSArIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCks
IHJhZGl1c1R3aWNlICsgYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpOworICAgIGRlc3RSZWN0
ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSArIHJlY3Qud2lk
dGgoKSAtIHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgpICsgcmFkaXVzVHdpY2UsIHNoYWRvd1JlY3Qu
eSgpICsgcmVjdC5oZWlnaHQoKSAtIHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSArIHJhZGl1c1R3
aWNlKTsKKyAgICBwaGFzZSA9IGdldFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7CisgICAgc2hh
ZG93QnVmZmVyLT5kcmF3UGF0dGVybih0aGlzLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0KTsKKworICAg
IC8vIERyYXcgdGhlIGJvdHRvbSBsZWZ0IGNvcm5lci4KKyAgICB0aWxlUmVjdCA9IEZsb2F0UmVj
dCgwLCBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkgLSByYWRpdXNUd2ljZSAtIGJvdHRvbUxlZnRS
YWRpdXMuaGVpZ2h0KCksIHJhZGl1c1R3aWNlICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpLCBy
YWRpdXNUd2ljZSArIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkpOworICAgIGRlc3RSZWN0ID0g
dGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55
KCkgKyByZWN0LmhlaWdodCgpIC0gc21hbGxCdWZmZXJTaXplLmhlaWdodCgpICsgcmFkaXVzVHdp
Y2UpOworICAgIHBoYXNlID0gZ2V0UGhhc2UoZGVzdFJlY3QsIHRpbGVSZWN0KTsKKyAgICBzaGFk
b3dCdWZmZXItPmRyYXdQYXR0ZXJuKHRoaXMsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworI2VuZGlm
Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVj
dCYgciwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNv
bnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0LCBjb25z
dCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQpAQCAtMTIyNyw3ICsxNDM4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgciwgY29uc3QgSW50U2l6ZSYgdG9wTGVm
dCwKICAgICBjYWlyb19zYXZlKGNyKTsKICAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250
ZXh0KGNyLCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHIsIHRvcExlZnQsIHRvcFJpZ2h0
LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCkpOwogICAgIHNldENvbG9yKGNyLCBjb2xvcik7Ci0g
ICAgZHJhd1BhdGhTaGFkb3codGhpcywgbV9jb21tb24sIHRydWUsIGZhbHNlKTsKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gdGhpcy0+Z2V0Q1RNKCk7CisgICAgLy8gZHJhd1RpbGVk
U2hhZG93IHN0aWxsIGRvZXMgbm90IHdvcmsgd2l0aCByb3RhdGlvbnMKKyAgICBpZiAodHJhbnNm
b3JtLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpCisgICAgICAgIGRyYXdUaWxl
ZFNoYWRvdyhyLCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQsIGNv
bG9yU3BhY2UpOworICAgIGVsc2UKKyAgICAgICAgZHJhd1BhdGhTaGFkb3codGhpcywgbV9jb21t
b24sIHRydWUsIGZhbHNlKTsKICAgICBjYWlyb19maWxsKGNyKTsKICAgICBjYWlyb19yZXN0b3Jl
KGNyKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8u
Y3BwCmluZGV4IDNiMDJhZDgxMDZhMzgyNjg3NjQ1ZDVkZDYyMjYxYTcyOTQxOWIzMmMuLjkwNGU4
MTk1MjFmYzAwYTQxZmJhZWYwYTgxZjRlNWRmMTZiZjViNWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcApAQCAtMTUzLDcgKzE1Myw3IEBAIHZv
aWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdCwgY29uc3QgRmxvCiAgICAgICAgIGNhaXJvX3JlY3RhbmdsZShzaGFkb3dDb250
ZXh0LCAwLCAwLCBkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkpOwogICAgICAgICBj
YWlyb19maWxsKHNoYWRvd0NvbnRleHQpOwogCi0gICAgICAgIGNvbnRleHQtPmNyZWF0ZVBsYXRm
b3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0
LCByYWRpdXMpOworICAgICAgICBjb250ZXh0LT5hcHBseVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1
ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOwogICAgIH0K
ICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66179</attachid>
            <date>2010-09-01 01:33:23 -0700</date>
            <delta_ts>2010-09-01 07:38:08 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>tiling_shadow.patch</filename>
            <type>text/plain</type>
            <size>19579</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Mjc4MTZlMS4uZDZjNzgwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMC0wOC0zMSAgQWxlamFuZHJvIEcu
IENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbR3RrXSB2ZXJ5IHNsb3cgcGFnZSBzY3JvbGxpbmcgb24gYmln
IC13ZWJraXQtYm94LXNoYWRvdyBhcmVhcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mzk1ODIKKworICAgICAgICBBZGQgYSBuZXcgZHJhd0Zhc3RTaGFk
b3cgbWV0aG9kIHRvIHJlbmRlciBhIGJpZyBzaGFkb3cgZG9pbmcKKyAgICAgICAgdGlsaW5nIG9m
IHBhcnRzIG9mIGEgc21hbGxlciBzaGFkb3cuIFdlIGNyZWF0ZSB0aGUgbWluaW11bSBzaGFkb3cK
KyAgICAgICAgcmVxdWlyZWQgdG8gZ2V0IHRoZSB0aWxlcyB3ZSB3aWxsIHVzZSB0byByZW5kZXIg
dGhlIHJlYWwgc2hhZG93CisgICAgICAgIGFuZCB3ZSB1c2UgZHJhd1BhdHRlcm4gd2l0aCB0aG9z
ZSB0aWxlcyB0byBjcmVhdGUgdGhlIHNoYWRvdy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpkcmF3UGF0aFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpk
cmF3Qm9yZGVybGVzc1JlY3RTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5
UGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjcmVh
dGVTaGFkb3dNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFBoYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkU2hhZG93KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpkcmF3KToKKwogMjAxMC0wOS0wMSAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZDsgYW5vdGhlciBidWlsZCBmaXguCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCA5M2VmODkwLi5j
YjQzZjAxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
QEAgLTQwLDYgKzQwLDcgQEAKICNpZiBQTEFURk9STShDRykKIHR5cGVkZWYgc3RydWN0IENHQ29u
dGV4dCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKICNlbGlmIFBMQVRGT1JNKENBSVJPKQorI2lu
Y2x1ZGUgIlBsYXRmb3JtUmVmUHRyQ2Fpcm8uaCIKIHR5cGVkZWYgc3RydWN0IF9jYWlybyBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDsKICNlbGlmIFBMQVRGT1JNKE9QRU5WRykKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTI5Nyw4ICsyOTgsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2b2lkIHNldEFscGhhKGZsb2F0KTsKICNpZiBQTEFURk9STShDQUlSTykKICAgICAgICAgZmxv
YXQgZ2V0QWxwaGEoKTsKLSAgICAgICAgdm9pZCBjcmVhdGVQbGF0Zm9ybVNoYWRvdyhQYXNzT3du
UHRyPEltYWdlQnVmZmVyPiBidWZmZXIsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgY29uc3Qg
RmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBmbG9hdCByYWRpdXMpOworICAgICAgICB2b2lkIGFwcGx5
UGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBDb2xv
ciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQgcmFkaXVz
KTsKKyAgICAgICAgUGxhdGZvcm1SZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBjcmVhdGVTaGFkb3dN
YXNrKFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCByYWRp
dXMpOworCiAgICAgICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVNoYWRvd0J1ZmZlckRpbWVuc2lv
bnMoSW50U2l6ZSYgc2hhZG93QnVmZmVyU2l6ZSwgRmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBmbG9h
dCYgcmFkaXVzLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYg
c2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dCbHVyKTsKKyAgICAgICAgdm9pZCBkcmF3VGlsZWRT
aGFkb3coY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVz
LCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRv
bUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSk7CiAjZW5kaWYKIAogICAgICAgICB2b2lkIHNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVPcGVyYXRvcik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ZvbnRDYWlyby5jcHAKaW5kZXggNWJmYTNmYi4uY2Q1ZDM2MiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcApAQCAtMTEzLDcgKzExMyw3IEBA
IHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250LCBjb25zCiAgICAgICAgICAgICBjYWlyb19yZXN0b3JlKHNoYWRv
d0NyKTsKICAgICAgICAgfQogICAgICAgICBjYWlyb190cmFuc2xhdGUoY3IsIDAuMCwgLWV4dGVu
dHMuaGVpZ2h0KTsKLSAgICAgICAgY29udGV4dC0+Y3JlYXRlUGxhdGZvcm1TaGFkb3coc2hhZG93
QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cyk7CisgICAg
ICAgIGNvbnRleHQtPmFwcGx5UGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwg
c2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cyk7CiAjZWxzZQogICAgICAgICBjYWlyb190
cmFuc2xhdGUoY3IsIHNoYWRvd09mZnNldC53aWR0aCgpLCBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkp
OwogICAgICAgICBjYWlyb19zaG93X2dseXBocyhjciwgZ2x5cGhzLCBudW1HbHlwaHMpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dENhaXJvLmNwcAppbmRleCA2ODNjMTQ0Li41ZWExMGQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAt
NDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0
aC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVJlZlB0ckNhaXJv
LmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGlj
LmgiCiAKQEAgLTIyOCw3ICsyMjksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHJhd1BhdGhTaGFk
b3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRQcml2YQogICAgIGlm
IChzdHJva2VTaGFkb3cpCiAgICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlKGNvbnRleHQsIHNoYWRv
d0NvbnRleHQsIGdjcCk7CiAKLSAgICBjb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFk
b3dCdWZmZXIucmVsZWFzZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKKyAg
ICBjb250ZXh0LT5hcHBseVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNo
YWRvd0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOwogI2VuZGlmCiB9CiAKQEAgLTYyMyw2ICs2
MjQsMjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIHN0YXRpYyB2b2lkIGRyYXdCb3JkZXJsZXNzUmVjdFNoYWRvdyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIHJlY3RDb2xv
cikKIHsKICNpZiBFTkFCTEUoRklMVEVSUykKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
ID0gY29udGV4dC0+Z2V0Q1RNKCk7CisgICAgLy8gZHJhd1RpbGVkU2hhZG93IHN0aWxsIGRvZXMg
bm90IHdvcmsgd2l0aCByb3RhdGlvbnMKKyAgICBpZiAoKHRyYW5zZm9ybS5pc0lkZW50aXR5T3JU
cmFuc2xhdGlvbk9yRmxpcHBlZCgpKSkgeworICAgICAgICBjYWlyb190KiBjciA9IGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpOworICAgICAgICBjYWlyb19zYXZlKGNyKTsKKyAgICAgICAgYXBw
ZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwgUGF0aDo6Y3JlYXRlUmVjdGFuZ2xlKHJl
Y3QpKTsKKyAgICAgICAgRmxvYXRTaXplIGNvcm5lcjsKKyAgICAgICAgSW50UmVjdCBzaGFkb3dS
ZWN0KHJlY3QpOworICAgICAgICBjb250ZXh0LT5kcmF3VGlsZWRTaGFkb3coc2hhZG93UmVjdCwg
Y29ybmVyLCBjb3JuZXIsIGNvcm5lciwgY29ybmVyLCBEZXZpY2VDb2xvclNwYWNlKTsKKyAgICAg
ICAgY2Fpcm9fcmVzdG9yZShjcik7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEZs
b2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CiAgICAgZmxvYXQgc2hhZG93Qmx1cjsKICAgICBDb2xvciBz
aGFkb3dDb2xvcjsKQEAgLTY0MCw3ICs2NTUsNyBAQCBzdGF0aWMgdm9pZCBkcmF3Qm9yZGVybGVz
c1JlY3RTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmCiAg
ICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93QnVmZmVyLT5jb250ZXh0
KCk7CiAgICAgc2hhZG93Q29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQocmFk
aXVzLCByYWRpdXMpLCByZWN0LnNpemUoKSksIHJlY3RDb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7
CiAKLSAgICBjb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFz
ZSgpLCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwgcmFkaXVzKTsKKyAgICBjb250ZXh0LT5hcHBs
eVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFk
b3dSZWN0LCByYWRpdXMpOwogI2VuZGlmCiB9CiAKQEAgLTkyMSwyMCArOTM2LDI1IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhGbG9hdFNpemUgY29uc3QmIHNpemUs
IGZsb2F0LCBDb2xvciBjb25zCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y3Jl
YXRlUGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBD
b2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQgcmFk
aXVzKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5UGxhdGZvcm1TaGFkb3coUGFzc093blB0
cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZs
b2F0UmVjdCYgc2hhZG93UmVjdCwgZmxvYXQgcmFkaXVzKQogewogI2lmIEVOQUJMRShGSUxURVJT
KQotICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKKyAgICBzZXRDb2xvcihtX2RhdGEtPmNy
LCBzaGFkb3dDb2xvcik7CisgICAgUGxhdGZvcm1SZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzaGFk
b3dNYXNrKGNyZWF0ZVNoYWRvd01hc2soYnVmZmVyLCBzaGFkb3dSZWN0LCByYWRpdXMpKTsKKyAg
ICBjYWlyb19tYXNrX3N1cmZhY2UobV9kYXRhLT5jciwgc2hhZG93TWFzay5nZXQoKSwgc2hhZG93
UmVjdC54KCksIHNoYWRvd1JlY3QueSgpKTsKKyNlbmRpZgorfQogCi0gICAgLy8gY2FsY3VsYXRl
IHRoZSBzdGFuZGFyZCBkZXZpYXRpb24KLSAgICBmbG9hdCBzZCA9IEZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVTdGREZXZpYXRpb24ocmFkaXVzKTsKK1BsYXRmb3JtUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVTaGFkb3dNYXNrKFBhc3NPd25QdHI8SW1hZ2VC
dWZmZXI+IGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBmbG9hdCByYWRpdXMp
Cit7CisjaWYgRU5BQkxFKEZJTFRFUlMpCisgICAgaWYgKCFyYWRpdXMpCisgICAgICAgIHJldHVy
biBidWZmZXItPm1fZGF0YS5tX3N1cmZhY2U7CiAKLSAgICAvLyBkcmF3IHRoZSBzaGFkb3cgd2l0
aG91dCBibHVycmluZywgaWYgcmFkaXVzIGlzIHplcm8KLSAgICBpZiAoIXJhZGl1cyB8fCAhc2Qp
IHsKLSAgICAgICAgc2V0Q29sb3IoY3IsIHNoYWRvd0NvbG9yKTsKLSAgICAgICAgY2Fpcm9fbWFz
a19zdXJmYWNlKGNyLCBidWZmZXItPm1fZGF0YS5tX3N1cmZhY2UsIHNoYWRvd1JlY3QueCgpLCBz
aGFkb3dSZWN0LnkoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgRmxvYXRQb2ludCBi
bHVyUmFkaXVzID0gRmxvYXRQb2ludChyYWRpdXMsIHJhZGl1cyk7CisgICAgZmxvYXQgc2QgPSBG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlU3RkRGV2aWF0aW9uKHJhZGl1cyk7CisgICAgaWYgKCFz
ZCkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci0+bV9kYXRhLm1fc3VyZmFjZTsKIAogICAgIC8vIGNy
ZWF0ZSBmaWx0ZXIKICAgICBSZWZQdHI8RmlsdGVyPiBmaWx0ZXIgPSBJbWFnZUJ1ZmZlckZpbHRl
cjo6Y3JlYXRlKCk7CkBAIC05NDUsMTQgKzk2NSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y3JlYXRlUGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyLCBjb25z
dAogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJsdXIgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRl
KHNvdXJjZS5nZXQoKSwgc2QsIHNkKTsKICAgICBibHVyLT5zZXRTY2FsZWRTdWJSZWdpb24oRmxv
YXRSZWN0KEZsb2F0UG9pbnQoKSwgc2hhZG93UmVjdC5zaXplKCkpKTsKICAgICBibHVyLT5hcHBs
eShmaWx0ZXIuZ2V0KCkpOwotCi0gICAgLy8gTWFzayB0aGUgZmlsdGVyIHdpdGggdGhlIHNoYWRv
dyBjb2xvciBhbmQgZHJhdyBpdCB0byB0aGUgY29udGV4dC4KLSAgICAvLyBNYXNraW5nIG1ha2Vz
IGl0IHBvc3NpYmxlIHRvIGp1c3QgYmx1ciB0aGUgYWxwaGEgY2hhbm5lbC4KLSAgICBzZXRDb2xv
cihjciwgc2hhZG93Q29sb3IpOwotICAgIGNhaXJvX21hc2tfc3VyZmFjZShjciwgYmx1ci0+cmVz
dWx0SW1hZ2UoKS0+bV9kYXRhLm1fc3VyZmFjZSwgc2hhZG93UmVjdC54KCksIHNoYWRvd1JlY3Qu
eSgpKTsKKyAgICByZXR1cm4gYmx1ci0+cmVzdWx0SW1hZ2UoKS0+bV9kYXRhLm1fc3VyZmFjZTsK
ICNlbmRpZgogfQogCisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93
KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtMTIxOCw2ICsxMjM1LDIwMCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dEVsbGlwc2VJblJlY3QoY29uc3QgSW50UmVjdCYgcikK
ICAgICBjbGlwT3V0KHApOwogfQogCitzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgZ2V0UGhhc2Uo
Y29uc3QgRmxvYXRSZWN0JiBkZXN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGUpCit7CisgICAgRmxv
YXRQb2ludCBwaGFzZSA9IGRlc3QubG9jYXRpb24oKTsKKyAgICBwaGFzZS5tb3ZlKC10aWxlLngo
KSwgLXRpbGUueSgpKTsKKworICAgIHJldHVybiBwaGFzZTsKK30KKworLyoKKyAgVGhpcyBmdW5j
dGlvbiB1c2VzIHRpbGluZyB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgc2hhZG93
CisgIGRyYXdpbmcgb2Ygcm91bmRlZCByZWN0YW5nbGVzLiBUaGUgY29kZSBiYXNpY2FsbHkgZG9l
cyB0aGUgZm9sbG93aW5nCisgIHN0ZXBzOgorCisgICAgIDEuIENhbGN1bGF0ZSB0aGUgbWluaW11
bSByZWN0YW5nbGUgc2l6ZSByZXF1aXJlZCB0byBjcmVhdGUgdGhlCisgICAgIHRpbGVzCisKKyAg
ICAgMi4gSWYgdGhhdCBzaXplIGlzIHNtYWxsZXIgdGhhbiB0aGUgcmVhbCByZWN0YW5nbGUgcmVu
ZGVyIHRoZSBuZXcKKyAgICAgc21hbGwgcmVjdGFuZ2xlIGFuZCBpdHMgc2hhZG93IGluIGEgbmV3
IHN1cmZhY2UsIGluIG90aGVyIGNhc2UKKyAgICAgcmVuZGVyIHRoZSBzaGFkb3cgb2YgdGhlIHJl
YWwgcmVjdGFuZ2xlIGluIHRoZSBkZXN0aW5hdGlvbgorICAgICBzdXJmYWNlLgorCisgICAgIDMu
IENhbGN1bGF0ZSB0aGUgc2l6ZXMgYW5kIHBvc2l0aW9ucyBvZiB0aGUgdGlsZXMgYW5kIHRoZWly
CisgICAgIGRlc3RpbmF0aW9ucyBhbmQgdXNlIGRyYXdQYXR0ZXJuIHRvIHJlbmRlciB0aGUgZmlu
YWwgc2hhZG93LiBUaGUKKyAgICAgY29kZSBkaXZpZGVzIHRoZSByZW5kZXJpbmcgaW4gOCB0aWxl
czoKKworICAgICAgICAxIHwgMiB8IDMKKyAgICAgICAtLS0tLS0tLS0tLQorICAgICAgICA0IHwg
ICB8IDUKKyAgICAgICAtLS0tLS0tLS0tLQorICAgICAgICA2IHwgNyB8IDgKKworICAgICBUaGUg
Y29ybmVycyBhcmUgZGlyZWN0bHkgY29waWVkIGZyb20gdGhlIHNtYWxsIHJlY3RhbmdsZSB0byB0
aGUKKyAgICAgcmVhbCBvbmUgYW5kIHRoZSBzaWRlIHRpbGVzIGFyZSAxIHBpeGVsIHdpZHRoLCB3
ZSB1c2UgdGhlbSBhcworCisgICAgIHRpbGVzIHRvIGNvdmVyIHRoZSBkZXN0aW5hdGlvbiBzaWRl
LiBUaGUgY29ybmVyIHRpbGVzIGFyZSBiaWdnZXIKKyAgICAgdGhhbiBqdXN0IHRoZSBzaWRlIG9m
IHRoZSByb3VuZGVkIGNvcm5lciwgd2UgbmVlZCB0byBpbmNyZWFzZSBpdAorICAgICBiZWNhdXNl
IHRoZSBtb2RpZmljYXRpb25zIGNhdXNlZCBieSB0aGUgY29ybmVyIG92ZXIgdGhlIGJsdXIKKyAg
ICAgZWZmZWN0LiBXZSBmaWxsIHRoZSBjZW50cmFsIHBhcnQgd2l0aCBzb2xpZCBjb2xvciB0byBj
b21wbGV0ZSB0aGUKKyAgICAgc2hhZG93LgorICovCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RpbGVkU2hhZG93KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVm
dFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXpl
JiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisjaWYgRU5BQkxFKEZJTFRFUlMpCisgICAgRmxvYXRT
aXplIHNoYWRvd1NpemU7CisgICAgZmxvYXQgc2hhZG93Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dD
b2xvcjsKKyAgICBpZiAoIWdldFNoYWRvdyhzaGFkb3dTaXplLCBzaGFkb3dCbHVyLCBzaGFkb3dD
b2xvcikpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIENhbGN1bGF0ZSBmaWx0ZXIgdmFsdWVz
IHRvIGNyZWF0ZSBhcHByb3ByaWF0ZSBzaGFkb3cuCisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEt
PmNyOworCisgICAgSW50U2l6ZSBzaGFkb3dCdWZmZXJTaXplOworICAgIEZsb2F0UmVjdCBzaGFk
b3dSZWN0OworICAgIGZsb2F0IGJsdXJSYWRpdXMgPSAwOworICAgIEdyYXBoaWNzQ29udGV4dDo6
Y2FsY3VsYXRlU2hhZG93QnVmZmVyRGltZW5zaW9ucyhzaGFkb3dCdWZmZXJTaXplLCBzaGFkb3dS
ZWN0LCBibHVyUmFkaXVzLCByZWN0LCBzaGFkb3dTaXplLCBzaGFkb3dCbHVyKTsKKworICAgIC8v
IFNpemUgb2YgdGhlIHRpbGluZyBzaWRlLgorICAgIGludCBzaWRlVGlsZVdpZHRoID0gMTsKKyAg
ICBmbG9hdCByYWRpdXNUd2ljZSA9IGJsdXJSYWRpdXMgKiAyOworCisgICAgLy8gRmluZCB0aGUg
ZXh0cmEgc3BhY2UgbmVlZGVkIGZyb20gdGhlIGN1cnZlIG9mIHRoZSBjb3JuZXJzLgorICAgIGlu
dCBleHRyYVdpZHRoRnJvbUNvcm5lclJhZGlpID0gcmFkaXVzVHdpY2UgKyBtYXgodG9wTGVmdFJh
ZGl1cy53aWR0aCgpLCBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCkpICsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJhZGl1c1R3aWNlICsgbWF4KHRvcFJpZ2h0UmFkaXVzLndp
ZHRoKCksIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkpOworICAgIGludCBleHRyYUhlaWdodEZy
b21Db3JuZXJSYWRpaSA9IHJhZGl1c1R3aWNlICsgbWF4KHRvcExlZnRSYWRpdXMuaGVpZ2h0KCks
IHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmFkaXVzVHdpY2UgKyBtYXgoYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSwgYm90
dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpOworCisgICAgLy8gVGhlIGxlbmd0aCBvZiBhIHNpZGUg
b2YgdGhlIGJ1ZmZlciBpcyB0aGUgZW5vdWdoIHNwYWNlIGZvciBmb3VyIGJsdXIgcmFkaWksCisg
ICAgLy8gdGhlIHJhZGlpIG9mIHRoZSBjb3JuZXJzLCBhbmQgdGhlbiAxIHBpeGVsIHRvIGRyYXcg
dGhlIHNpZGUgdGlsZXMuCisgICAgSW50U2l6ZSBzbWFsbEJ1ZmZlclNpemUgPSBJbnRTaXplKHNp
ZGVUaWxlV2lkdGggKyBleHRyYVdpZHRoRnJvbUNvcm5lclJhZGlpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaWRlVGlsZVdpZHRoICsgZXh0cmFIZWlnaHRGcm9tQ29y
bmVyUmFkaWkpOworCisgICAgaWYgKChzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSA+IHNoYWRvd0J1
ZmZlclNpemUud2lkdGgoKSkgfHwgKHNtYWxsQnVmZmVyU2l6ZS5oZWlnaHQoKSA+IHNoYWRvd0J1
ZmZlclNpemUuaGVpZ2h0KCkpIHx8IChibHVyUmFkaXVzIDw9IDApKSB7CisgICAgICAgIC8vIENy
ZWF0ZSBzdWl0YWJseS1zaXplZCBJbWFnZUJ1ZmZlciB0byBob2xkIHRoZSBzaGFkb3cuCisgICAg
ICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc2hhZG93QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaGFkb3dCdWZmZXJTaXplKTsKKyAgICAgICAgaWYgKCFzaGFkb3dCdWZmZXIpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgLy8gRHJhdyBzaGFkb3cgaW50byBhIG5ldyBJbWFnZUJ1
ZmZlci4KKyAgICAgICAgY2Fpcm9fdCogc2hhZG93Q29udGV4dCA9IHNoYWRvd0J1ZmZlci0+Y29u
dGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICAgICAgY29weUNvbnRleHRQcm9wZXJ0aWVz
KGNyLCBzaGFkb3dDb250ZXh0KTsKKyAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKHNoYWRvd0NvbnRl
eHQsIC1yZWN0LngoKSArIGJsdXJSYWRpdXMsIC1yZWN0LnkoKSArIGJsdXJSYWRpdXMpOworICAg
ICAgICBjYWlyb19uZXdfcGF0aChzaGFkb3dDb250ZXh0KTsKKyAgICAgICAgY2Fpcm9fcGF0aF90
KiBwYXRoID0gY2Fpcm9fY29weV9wYXRoKGNyKTsKKyAgICAgICAgY2Fpcm9fYXBwZW5kX3BhdGgo
c2hhZG93Q29udGV4dCwgcGF0aCk7CisgICAgICAgIGNhaXJvX3BhdGhfZGVzdHJveShwYXRoKTsK
KworICAgICAgICBzZXRQbGF0Zm9ybUZpbGwodGhpcywgc2hhZG93Q29udGV4dCwgbV9jb21tb24p
OworCisgICAgICAgIGFwcGx5UGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwg
c2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIGJsdXJSYWRpdXMpOworCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNtYWxsQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzbWFsbEJ1ZmZlclNpemUpOworICAgIGlmICghc21hbGxCdWZmZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIEludFJlY3Qgc21hbGxSZWN0ID0gSW50UmVjdChibHVyUmFkaXVz
LCBibHVyUmFkaXVzLCBzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSAtIHJhZGl1c1R3aWNlLCBzbWFs
bEJ1ZmZlclNpemUuaGVpZ2h0KCkgLSByYWRpdXNUd2ljZSk7CisKKyAgICAvLyBEcmF3IHNoYWRv
dyBpbnRvIGEgbmV3IEltYWdlQnVmZmVyLgorICAgIGNhaXJvX3QqIHNtYWxsQnVmZmVyQ29udGV4
dCA9IHNtYWxsQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOworICAgIGNvcHlD
b250ZXh0UHJvcGVydGllcyhjciwgc21hbGxCdWZmZXJDb250ZXh0KTsKKyAgICBhcHBlbmRXZWJD
b3JlUGF0aFRvQ2Fpcm9Db250ZXh0KHNtYWxsQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29u
dGV4dCgpLCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHNtYWxsUmVjdCwgdG9wTGVmdFJh
ZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVz
KSk7CisgICAgc2V0UGxhdGZvcm1GaWxsKHRoaXMsIHNtYWxsQnVmZmVyQ29udGV4dCwgbV9jb21t
b24pOworCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzaGFkb3dCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNtYWxsQnVmZmVyU2l6ZSk7CisgICAgaWYgKCFzaGFkb3dCdWZmZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIHNtYWxsUmVjdC5zZXRTaXplKHNtYWxsQnVmZmVyU2l6ZSk7CisK
KyAgICBQbGF0Zm9ybVJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHNoYWRvd01hc2soY3JlYXRlU2hh
ZG93TWFzayhzbWFsbEJ1ZmZlci5yZWxlYXNlKCksIHNtYWxsUmVjdCwgYmx1clJhZGl1cykpOwor
CisgICAgY2Fpcm9fdCogc2hhZG93Q29udGV4dCA9IHNoYWRvd0J1ZmZlci0+Y29udGV4dCgpLT5w
bGF0Zm9ybUNvbnRleHQoKTsKKyAgICBzZXRDb2xvcihzaGFkb3dDb250ZXh0LCBzaGFkb3dDb2xv
cik7CisgICAgY2Fpcm9fbWFza19zdXJmYWNlKHNoYWRvd0NvbnRleHQsIHNoYWRvd01hc2suZ2V0
KCksIDAsIDApOworCisgICAgLy8gRmlsbCB0aGUgaW50ZXJuYWwgcGFydCBvZiB0aGUgc2hhZG93
LgorICAgIHNoYWRvd1JlY3QuaW5mbGF0ZSgtcmFkaXVzVHdpY2UpOworICAgIGlmICghc2hhZG93
UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgICAgIGFwcGVu
ZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQoY3IsIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5n
bGUoc2hhZG93UmVjdCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRS
YWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7CisgICAgICAgIHNldENvbG9yKGNyLCBzaGFkb3dD
b2xvcik7CisgICAgICAgIGNhaXJvX2ZpbGwoY3IpOworICAgICAgICBjYWlyb19yZXN0b3JlKGNy
KTsKKyAgICB9CisgICAgc2hhZG93UmVjdC5pbmZsYXRlKHJhZGl1c1R3aWNlKTsKKworICAgIC8v
IERyYXcgdG9wIHNpZGUuCisgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gRmxvYXRSZWN0KHJhZGl1
c1R3aWNlICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCAwLCBzaWRlVGlsZVdpZHRoLCByYWRpdXNU
d2ljZSk7CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3Qu
bW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkpOworICAgIGRlc3RSZWN0LnNldFdp
ZHRoKHNoYWRvd1JlY3Qud2lkdGgoKSAtIHRvcExlZnRSYWRpdXMud2lkdGgoKSAtIHRvcFJpZ2h0
UmFkaXVzLndpZHRoKCkgLSBibHVyUmFkaXVzICogNCk7CisgICAgRmxvYXRQb2ludCBwaGFzZSA9
IGdldFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7CisgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRl
cm5UcmFuc2Zvcm07CisgICAgcGF0dGVyblRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBz
aGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKHRoaXMsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisg
ICAgLy8gRHJhdyB0aGUgYm90dG9tIHNpZGUuCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3QocmFk
aXVzVHdpY2UgKyBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCksIHNtYWxsQnVmZmVyU2l6ZS5oZWln
aHQoKSAtIHJhZGl1c1R3aWNlLCBzaWRlVGlsZVdpZHRoLCByYWRpdXNUd2ljZSk7CisgICAgZGVz
dFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpLCBzaGFk
b3dSZWN0LnkoKSArIHJhZGl1c1R3aWNlICsgcmVjdC5oZWlnaHQoKSAtIHNtYWxsQnVmZmVyU2l6
ZS5oZWlnaHQoKSk7CisgICAgZGVzdFJlY3Quc2V0V2lkdGgoc2hhZG93UmVjdC53aWR0aCgpIC0g
Ym90dG9tTGVmdFJhZGl1cy53aWR0aCgpIC0gYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSAtIGJs
dXJSYWRpdXMgKiA0KTsKKyAgICBwaGFzZSA9IGdldFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7
CisgICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0dGVybih0aGlzLCB0aWxlUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGRlc3RSZWN0
KTsKKworICAgIC8vIERyYXcgdGhlIHJpZ2h0IHNpZGUuCisgICAgdGlsZVJlY3QgPSBGbG9hdFJl
Y3Qoc21hbGxCdWZmZXJTaXplLndpZHRoKCkgLSByYWRpdXNUd2ljZSwgcmFkaXVzVHdpY2UgKyB0
b3BSaWdodFJhZGl1cy5oZWlnaHQoKSwgcmFkaXVzVHdpY2UsIHNpZGVUaWxlV2lkdGgpOworICAg
IGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSAr
IHJhZGl1c1R3aWNlICsgcmVjdC53aWR0aCgpIC0gc21hbGxCdWZmZXJTaXplLndpZHRoKCksIHNo
YWRvd1JlY3QueSgpKTsKKyAgICBkZXN0UmVjdC5zZXRIZWlnaHQoc2hhZG93UmVjdC5oZWlnaHQo
KSAtIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpIC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkg
LSBibHVyUmFkaXVzICogNCk7CisgICAgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJl
Y3QpOworICAgIHNoYWRvd0J1ZmZlci0+ZHJhd1BhdHRlcm4odGhpcywgdGlsZVJlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBkZXN0
UmVjdCk7CisKKyAgICAvLyBEcmF3IHRoZSBsZWZ0IHNpZGUuCisgICAgdGlsZVJlY3QgPSBGbG9h
dFJlY3QoMCwgcmFkaXVzVHdpY2UgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpLCByYWRpdXNUd2lj
ZSwgc2lkZVRpbGVXaWR0aCk7CisgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVj
dC5tb3ZlKHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgZGVzdFJlY3Quc2V0
SGVpZ2h0KHNoYWRvd1JlY3QuaGVpZ2h0KCkgLSB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpIC0gYm90
dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSAtIGJsdXJSYWRpdXMgKiA0KTsKKyAgICBwaGFzZSA9IEZs
b2F0UG9pbnQoZGVzdFJlY3QueCgpIC0gdGlsZVJlY3QueCgpLCBkZXN0UmVjdC55KCkgLSB0aWxl
UmVjdC55KCkpOworICAgIHNoYWRvd0J1ZmZlci0+ZHJhd1BhdHRlcm4odGhpcywgdGlsZVJlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSwg
Y29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAgLy8gRHJh
dyB0aGUgdG9wIGxlZnQgY29ybmVyLgorICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIHJh
ZGl1c1R3aWNlICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCByYWRpdXNUd2ljZSArIHRvcExlZnRS
YWRpdXMuaGVpZ2h0KCkpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3Qu
bW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkpOworICAgIHBoYXNlID0gZ2V0UGhh
c2UoZGVzdFJlY3QsIHRpbGVSZWN0KTsKKyAgICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKHRo
aXMsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgY29sb3JTcGFjZSwgQ29tcG9z
aXRlU291cmNlT3ZlciwgZGVzdFJlY3QpOworCisgICAgLy8gRHJhdyB0aGUgdG9wIHJpZ2h0IGNv
cm5lci4KKyAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdChzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSAt
IHJhZGl1c1R3aWNlIC0gdG9wUmlnaHRSYWRpdXMud2lkdGgoKSwgMCwgcmFkaXVzVHdpY2UgKyB0
b3BSaWdodFJhZGl1cy53aWR0aCgpLCByYWRpdXNUd2ljZSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdo
dCgpKTsKKyAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OworICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93
UmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSBzbWFsbEJ1ZmZlclNpemUud2lkdGgoKSArIHJhZGl1
c1R3aWNlLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwg
dGlsZVJlY3QpOworICAgIHNoYWRvd0J1ZmZlci0+ZHJhd1BhdHRlcm4odGhpcywgdGlsZVJlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBjb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVy
LCBkZXN0UmVjdCk7CisKKyAgICAvLyBEcmF3IHRoZSBib3R0b20gcmlnaHQgY29ybmVyLgorICAg
IHRpbGVSZWN0ID0gRmxvYXRSZWN0KHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgpIC0gcmFkaXVzVHdp
Y2UgLSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpLCBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkg
LSByYWRpdXNUd2ljZSAtIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpLCByYWRpdXNUd2ljZSAr
IGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCksIHJhZGl1c1R3aWNlICsgYm90dG9tUmlnaHRSYWRp
dXMuaGVpZ2h0KCkpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92
ZShzaGFkb3dSZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIHNtYWxsQnVmZmVyU2l6ZS53aWR0aCgp
ICsgcmFkaXVzVHdpY2UsIHNoYWRvd1JlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAtIHNtYWxsQnVm
ZmVyU2l6ZS5oZWlnaHQoKSArIHJhZGl1c1R3aWNlKTsKKyAgICBwaGFzZSA9IGdldFBoYXNlKGRl
c3RSZWN0LCB0aWxlUmVjdCk7CisgICAgc2hhZG93QnVmZmVyLT5kcmF3UGF0dGVybih0aGlzLCB0
aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIGNvbG9yU3BhY2UsIENvbXBvc2l0ZVNv
dXJjZU92ZXIsIGRlc3RSZWN0KTsKKworICAgIC8vIERyYXcgdGhlIGJvdHRvbSBsZWZ0IGNvcm5l
ci4KKyAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCgwLCBzbWFsbEJ1ZmZlclNpemUuaGVpZ2h0KCkg
LSByYWRpdXNUd2ljZSAtIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCksIHJhZGl1c1R3aWNlICsg
Ym90dG9tTGVmdFJhZGl1cy53aWR0aCgpLCByYWRpdXNUd2ljZSArIGJvdHRvbUxlZnRSYWRpdXMu
aGVpZ2h0KCkpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShz
aGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC0gc21hbGxCdWZm
ZXJTaXplLmhlaWdodCgpICsgcmFkaXVzVHdpY2UpOworICAgIHBoYXNlID0gZ2V0UGhhc2UoZGVz
dFJlY3QsIHRpbGVSZWN0KTsKKyAgICBzaGFkb3dCdWZmZXItPmRyYXdQYXR0ZXJuKHRoaXMsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgY29sb3JTcGFjZSwgQ29tcG9zaXRlU291
cmNlT3ZlciwgZGVzdFJlY3QpOworI2VuZGlmCit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgciwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwg
Y29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0
IEludFNpemUmIGJvdHRvbVJpZ2h0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtMTIyNyw3ICsxNDM4
LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVj
dCYgciwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwKICAgICBjYWlyb19zYXZlKGNyKTsKICAgICBh
cHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVj
dGFuZ2xlKHIsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCkpOwog
ICAgIHNldENvbG9yKGNyLCBjb2xvcik7Ci0gICAgZHJhd1BhdGhTaGFkb3codGhpcywgbV9jb21t
b24sIHRydWUsIGZhbHNlKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gdGhpcy0+
Z2V0Q1RNKCk7CisgICAgLy8gZHJhd1RpbGVkU2hhZG93IHN0aWxsIGRvZXMgbm90IHdvcmsgd2l0
aCByb3RhdGlvbnMKKyAgICBpZiAodHJhbnNmb3JtLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JG
bGlwcGVkKCkpCisgICAgICAgIGRyYXdUaWxlZFNoYWRvdyhyLCB0b3BMZWZ0LCB0b3BSaWdodCwg
Ym90dG9tTGVmdCwgYm90dG9tUmlnaHQsIGNvbG9yU3BhY2UpOworICAgIGVsc2UKKyAgICAgICAg
ZHJhd1BhdGhTaGFkb3codGhpcywgbV9jb21tb24sIHRydWUsIGZhbHNlKTsKICAgICBjYWlyb19m
aWxsKGNyKTsKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCmluZGV4IDNiMDJhZDguLjkwNGU4MTkgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcApAQCAt
MTUzLDcgKzE1Myw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvCiAgICAgICAgIGNhaXJvX3Jl
Y3RhbmdsZShzaGFkb3dDb250ZXh0LCAwLCAwLCBkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVp
Z2h0KCkpOwogICAgICAgICBjYWlyb19maWxsKHNoYWRvd0NvbnRleHQpOwogCi0gICAgICAgIGNv
bnRleHQtPmNyZWF0ZVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRv
d0NvbG9yLCBzaGFkb3dSZWN0LCByYWRpdXMpOworICAgICAgICBjb250ZXh0LT5hcHBseVBsYXRm
b3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3dSZWN0
LCByYWRpdXMpOwogICAgIH0KICNlbmRpZgogCg==
</data>
<flag name="review"
          id="55115"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>