<?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>31321</bug_id>
          
          <creation_ts>2009-11-10 14:39:28 -0800</creation_ts>
          <short_desc>Make -webkit-color-correction work with untagged images</short_desc>
          <delta_ts>2009-11-19 15:38:03 -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>CSS</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></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>bdakin</cc>
    
    <cc>darin</cc>
    
    <cc>hyatt</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>162234</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-11-10 14:39:28 -0800</bug_when>
    <thetext>&lt;https://bugs.webkit.org/show_bug.cgi?id=31196&gt; tracked implementing -webkit-color-correction for CSS colors, but we still need to implement it for untagged images.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163621</commentid>
    <comment_count>1</comment_count>
      <attachid>43218</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-11-13 18:06:05 -0800</bug_when>
    <thetext>Created attachment 43218
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163635</commentid>
    <comment_count>2</comment_count>
      <attachid>43218</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-11-13 19:27:10 -0800</bug_when>
    <thetext>Comment on attachment 43218
Patch

&gt; +static CGImageRef imageWithColorSpace(CGImageRef originalImage, ColorSpace colorSpace)
&gt; +{
&gt; +    static CGColorSpaceRef deviceSpace = CGColorSpaceCreateDeviceRGB();
&gt; +    CGColorSpaceRef originalColorSpace = CGImageGetColorSpace(originalImage);

Note that CGImageGetColorSpace can return null for PDF images.

&gt; +    // If the image already has a (non-device) color space, we don&apos;t want to
&gt; +    // override it, so return.
&gt; +    if (originalColorSpace != deviceSpace)

This needs to be a call to !CFEqual().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163672</commentid>
    <comment_count>3</comment_count>
      <attachid>43218</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-14 11:02:15 -0800</bug_when>
    <thetext>Comment on attachment 43218
Patch

Generally speaking, having a colorSpace argument that is used only when an image is untagged seems subtle. I think we need a name for this argument other than just &quot;colorSpace&quot;, since it&apos;s only used for an image that has no intrinsic color space. This applies to the GraphicsContext member functions as well as the Image member functions.

&gt;      if (mayFillWithSolidColor()) {
&gt; -        fillWithSolidColor(ctxt, dstRect, solidColor(), op);
&gt; +        fillWithSolidColor(ctxt, dstRect, solidColor(), colorSpace, op);
&gt;          return;
&gt;      }

I suspect that mayFillWithSolidColor returns true even in cases where the image is tagged with a color space. We need to test these cases. I suspect that we will do the wrong thing with a single pixel image that has a color space in it. I don&apos;t think the bug is necessarily new to this patch, although there is a chance this has been made worse by introducing the sRGB feature.

&gt; -    static void fillWithSolidColor(GraphicsContext* ctxt, const FloatRect&amp; dstRect, const Color&amp; color, CompositeOperator op);
&gt; +    static void fillWithSolidColor(GraphicsContext* ctxt, const FloatRect&amp; dstRect, const Color&amp; color, ColorSpace, CompositeOperator op);

As long as you are modifying this line, you should remove the unhelpful argument names, &quot;ctxt&quot;, &quot;color&quot;, and &quot;op&quot;.

&gt;  #if PLATFORM(WIN)
&gt;      virtual void drawFrameMatchingSourceSize(GraphicsContext*, const FloatRect&amp; dstRect, const IntSize&amp; srcSize, CompositeOperator) { }
&gt;  #endif

Seems this needs a ColorSpace argument too.

&gt; -    virtual void draw(GraphicsContext*, const FloatRect&amp; dstRect, const FloatRect&amp; srcRect, CompositeOperator) = 0;
&gt; -    void drawTiled(GraphicsContext*, const FloatRect&amp; dstRect, const FloatPoint&amp; srcPoint, const FloatSize&amp; tileSize, CompositeOperator);
&gt; -    void drawTiled(GraphicsContext*, const FloatRect&amp; dstRect, const FloatRect&amp; srcRect, TileRule hRule, TileRule vRule, CompositeOperator);
&gt; +    virtual void draw(GraphicsContext*, const FloatRect&amp; dstRect, const FloatRect&amp; srcRect, ColorSpace, CompositeOperator) = 0;
&gt; +    void drawTiled(GraphicsContext*, const FloatRect&amp; dstRect, const FloatPoint&amp; srcPoint, const FloatSize&amp; tileSize, ColorSpace, CompositeOperator);
&gt; +    void drawTiled(GraphicsContext*, const FloatRect&amp; dstRect, const FloatRect&amp; srcRect, TileRule hRule, TileRule vRule, ColorSpace, CompositeOperator);

To me, the purpose of the ColorSpace argument is not at all clear. The fact that it&apos;s a color space to use with untagged images is a tricky concept, I think, and needs a comment and perhaps an argument name as well.

&gt;      virtual void drawPattern(GraphicsContext*, const FloatRect&amp; srcRect, const TransformationMatrix&amp; patternTransform,
&gt; -                             const FloatPoint&amp; phase, CompositeOperator, const FloatRect&amp; destRect);
&gt; +                             const FloatPoint&amp; phase, ColorSpace, CompositeOperator, const FloatRect&amp; destRect);

Same here.

&gt; +    static CGColorSpaceRef deviceSpace = CGColorSpaceCreateDeviceRGB();

Isn&apos;t there already a helper function that holds a global copy of the device color space?

&gt; +    CGColorSpaceRef originalColorSpace = CGImageGetColorSpace(originalImage);
&gt; +
&gt; +    // If the image already has a (non-device) color space, we don&apos;t want to
&gt; +    // override it, so return.
&gt; +    if (originalColorSpace != deviceSpace)
&gt; +        return 0;

Can you really detect an untagged image this way? What about an image with a color space of null (a &quot;mask image&quot;)? Do untagged images really return something that is == the result of CGColorSpaceCreateDeviceRGB? Is this a guaranteed part of the CoreGraphics or ImageIO API? Do you need to compare with CFEqual instead?

&gt; +    switch (colorSpace) {
&gt; +    case DeviceColorSpace:
&gt; +        return 0;
&gt; +    case sRGBColorSpace: {
&gt; +#if PLATFORM(WIN) || defined(BUILDING_ON_TIGER)
&gt; +        return 0;
&gt; +#else
&gt; +        static CGColorSpaceRef sRGBSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
&gt; +        return CGImageCreateCopyWithColorSpace(originalImage, sRGBSpace);
&gt; +#endif

This will leak a CGImageRef each time. The function needs to return a RetainPtr, or be renamed to have the word &quot;create&quot; in its name, and callers need to adopt or release the returned pointer.

It also seems likely to be inefficient to create a new image every time. We probably need to cache the color-spaced image in a data member rather than generating it every time we draw. But I could be wrong about that.

&gt; +    default:
&gt; +        ASSERT_NOT_REACHED();
&gt; +        return 0;
&gt; +    }

It&apos;s better to put this code outside the switch statement instead of in a default. That way we&apos;ll get a warning if we leave anything out.

Is there any way to make the regression tests so they would fail even without doing pixel tests? I&apos;m not sure these tests are helpful enough if only the pixel test results indicate the failure.

review- because of the storage leak</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164070</commentid>
    <comment_count>4</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-11-16 14:07:09 -0800</bug_when>
    <thetext>I am about to attach an updated patch, but I will address comments first.

(In reply to comment #3)
&gt; (From update of attachment 43218 [details])
&gt; Generally speaking, having a colorSpace argument that is used only when an
&gt; image is untagged seems subtle. I think we need a name for this argument other
&gt; than just &quot;colorSpace&quot;, since it&apos;s only used for an image that has no intrinsic
&gt; color space. This applies to the GraphicsContext member functions as well as
&gt; the Image member functions.
&gt; 

I agree, and this was bothering me while I was working on the patch. I just wasn&apos;t sure how to deal with it. I like your idea of calling the variable something other than &quot;colorSpace,&quot; so this new patch names it &quot;styleColorSpace.&quot; I am open to other ideas if you have them. I also added a comment to Image.h, though perhaps I should add one to GraphicsContext.h as well?

&gt; &gt;      if (mayFillWithSolidColor()) {
&gt; &gt; -        fillWithSolidColor(ctxt, dstRect, solidColor(), op);
&gt; &gt; +        fillWithSolidColor(ctxt, dstRect, solidColor(), colorSpace, op);
&gt; &gt;          return;
&gt; &gt;      }
&gt; 
&gt; I suspect that mayFillWithSolidColor returns true even in cases where the image
&gt; is tagged with a color space. We need to test these cases. I suspect that we
&gt; will do the wrong thing with a single pixel image that has a color space in it.
&gt; I don&apos;t think the bug is necessarily new to this patch, although there is a
&gt; chance this has been made worse by introducing the sRGB feature.
&gt; 

I don&apos;t understand this.

&gt; &gt; -    static void fillWithSolidColor(GraphicsContext* ctxt, const FloatRect&amp; dstRect, const Color&amp; color, CompositeOperator op);
&gt; &gt; +    static void fillWithSolidColor(GraphicsContext* ctxt, const FloatRect&amp; dstRect, const Color&amp; color, ColorSpace, CompositeOperator op);
&gt; 
&gt; As long as you are modifying this line, you should remove the unhelpful
&gt; argument names, &quot;ctxt&quot;, &quot;color&quot;, and &quot;op&quot;.
&gt; 

Fixed.

&gt; &gt;  #if PLATFORM(WIN)
&gt; &gt;      virtual void drawFrameMatchingSourceSize(GraphicsContext*, const FloatRect&amp; dstRect, const IntSize&amp; srcSize, CompositeOperator) { }
&gt; &gt;  #endif
&gt; 
&gt; Seems this needs a ColorSpace argument too.

Fixed.

&gt; 
&gt; &gt; -    virtual void draw(GraphicsContext*, const FloatRect&amp; dstRect, const FloatRect&amp; srcRect, CompositeOperator) = 0;
&gt; &gt; -    void drawTiled(GraphicsContext*, const FloatRect&amp; dstRect, const FloatPoint&amp; srcPoint, const FloatSize&amp; tileSize, CompositeOperator);
&gt; &gt; -    void drawTiled(GraphicsContext*, const FloatRect&amp; dstRect, const FloatRect&amp; srcRect, TileRule hRule, TileRule vRule, CompositeOperator);
&gt; &gt; +    virtual void draw(GraphicsContext*, const FloatRect&amp; dstRect, const FloatRect&amp; srcRect, ColorSpace, CompositeOperator) = 0;
&gt; &gt; +    void drawTiled(GraphicsContext*, const FloatRect&amp; dstRect, const FloatPoint&amp; srcPoint, const FloatSize&amp; tileSize, ColorSpace, CompositeOperator);
&gt; &gt; +    void drawTiled(GraphicsContext*, const FloatRect&amp; dstRect, const FloatRect&amp; srcRect, TileRule hRule, TileRule vRule, ColorSpace, CompositeOperator);
&gt; 
&gt; To me, the purpose of the ColorSpace argument is not at all clear. The fact
&gt; that it&apos;s a color space to use with untagged images is a tricky concept, I
&gt; think, and needs a comment and perhaps an argument name as well.
&gt; 

Fixed.

&gt; &gt;      virtual void drawPattern(GraphicsContext*, const FloatRect&amp; srcRect, const TransformationMatrix&amp; patternTransform,
&gt; &gt; -                             const FloatPoint&amp; phase, CompositeOperator, const FloatRect&amp; destRect);
&gt; &gt; +                             const FloatPoint&amp; phase, ColorSpace, CompositeOperator, const FloatRect&amp; destRect);
&gt; 
&gt; Same here.

Fixed.

&gt; 
&gt; &gt; +    static CGColorSpaceRef deviceSpace = CGColorSpaceCreateDeviceRGB();
&gt; 
&gt; Isn&apos;t there already a helper function that holds a global copy of the device
&gt; color space?
&gt; 

I made that helper function in GraphicsContextCG.cpp. I couldn&apos;t think of a good way to share it…I could put it in GraphicsContext.h, but then I would either have to wrap it in a CG-only if-def or create a PlatformColorSpace ifdef or something like that. Because I had so many questions, I decided just to use the CG call again rather than my new helper since we use that call a bunch of places in the code already without a central helper. What do you think is best? I am open to adjusting this, but unsure how to proceed.

&gt; &gt; +    CGColorSpaceRef originalColorSpace = CGImageGetColorSpace(originalImage);
&gt; &gt; +
&gt; &gt; +    // If the image already has a (non-device) color space, we don&apos;t want to
&gt; &gt; +    // override it, so return.
&gt; &gt; +    if (originalColorSpace != deviceSpace)
&gt; &gt; +        return 0;
&gt; 
&gt; Can you really detect an untagged image this way? What about an image with a
&gt; color space of null (a &quot;mask image&quot;)? Do untagged images really return
&gt; something that is == the result of CGColorSpaceCreateDeviceRGB? Is this a
&gt; guaranteed part of the CoreGraphics or ImageIO API? Do you need to compare with
&gt; CFEqual instead?

You can really detect and untagged image this way. I have not had any test cases with a null color space. The == does really work. However, since I don&apos;t know whether or not this is guaranteed by the CoreGraphics API and since Simon made the same suggestion above, I switched to using CFEqual. It also works, but I assure you that == does as well. I have test cases, and stepped through it in the debugger just to be certain.

&gt; 
&gt; &gt; +    switch (colorSpace) {
&gt; &gt; +    case DeviceColorSpace:
&gt; &gt; +        return 0;
&gt; &gt; +    case sRGBColorSpace: {
&gt; &gt; +#if PLATFORM(WIN) || defined(BUILDING_ON_TIGER)
&gt; &gt; +        return 0;
&gt; &gt; +#else
&gt; &gt; +        static CGColorSpaceRef sRGBSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
&gt; &gt; +        return CGImageCreateCopyWithColorSpace(originalImage, sRGBSpace);
&gt; &gt; +#endif
&gt; 
&gt; This will leak a CGImageRef each time. The function needs to return a
&gt; RetainPtr, or be renamed to have the word &quot;create&quot; in its name, and callers
&gt; need to adopt or release the returned pointer.
&gt; 
&gt; It also seems likely to be inefficient to create a new image every time. We
&gt; probably need to cache the color-spaced image in a data member rather than
&gt; generating it every time we draw. But I could be wrong about that.

I don&apos;t think my patch had any leaks because I think I was correctly dealing with the new image at all of the call sites of this static helper function. (There are only two call sites.) Just to make sure, I did switch it over to a RetainPtr model.

&gt; 
&gt; &gt; +    default:
&gt; &gt; +        ASSERT_NOT_REACHED();
&gt; &gt; +        return 0;
&gt; &gt; +    }
&gt; 
&gt; It&apos;s better to put this code outside the switch statement instead of in a
&gt; default. That way we&apos;ll get a warning if we leave anything out.
&gt; 

Fixed.

&gt; Is there any way to make the regression tests so they would fail even without
&gt; doing pixel tests? I&apos;m not sure these tests are helpful enough if only the
&gt; pixel test results indicate the failure.
&gt; 

I wish there was a way to test this within layout tests, but I don&apos;t know of one. I was hoping our color information would be equivalent to Digicolorometer information, but it&apos;s not. Not sure how to improve this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164072</commentid>
    <comment_count>5</comment_count>
      <attachid>43321</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-11-16 14:08:12 -0800</bug_when>
    <thetext>Created attachment 43321
New patch

New patch! See comments above for details on how I addressed Darin&apos;s and Simon&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164074</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-16 14:14:11 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; I like your idea of calling the variable
&gt; something other than &quot;colorSpace,&quot; so this new patch names it
&gt; &quot;styleColorSpace.&quot;

Sounds better.

&gt; I am open to other ideas if you have them. I also added a
&gt; comment to Image.h, though perhaps I should add one to GraphicsContext.h as
&gt; well?

Probably, yes.

&gt; &gt; &gt;      if (mayFillWithSolidColor()) {
&gt; &gt; &gt; -        fillWithSolidColor(ctxt, dstRect, solidColor(), op);
&gt; &gt; &gt; +        fillWithSolidColor(ctxt, dstRect, solidColor(), colorSpace, op);
&gt; &gt; &gt;          return;
&gt; &gt; &gt;      }
&gt; &gt; 
&gt; &gt; I suspect that mayFillWithSolidColor returns true even in cases where the image
&gt; &gt; is tagged with a color space. We need to test these cases. I suspect that we
&gt; &gt; will do the wrong thing with a single pixel image that has a color space in it.
&gt; &gt; I don&apos;t think the bug is necessarily new to this patch, although there is a
&gt; &gt; chance this has been made worse by introducing the sRGB feature.
&gt; 
&gt; I don&apos;t understand this.

Lets talk about it in person.

&gt; &gt; &gt; +    static CGColorSpaceRef deviceSpace = CGColorSpaceCreateDeviceRGB();
&gt; &gt; 
&gt; &gt; Isn&apos;t there already a helper function that holds a global copy of the device
&gt; &gt; color space?
&gt; &gt; 
&gt; 
&gt; I made that helper function in GraphicsContextCG.cpp. I couldn&apos;t think of a
&gt; good way to share it…I could put it in GraphicsContext.h, but then I would
&gt; either have to wrap it in a CG-only if-def or create a PlatformColorSpace ifdef
&gt; or something like that. Because I had so many questions, I decided just to use
&gt; the CG call again rather than my new helper since we use that call a bunch of
&gt; places in the code already without a central helper. What do you think is best?
&gt; I am open to adjusting this, but unsure how to proceed.

Maybe GraphicsContextPlatformPrivateCG.h is a possible place to put this. I also think we could consider renaming that to just GraphicsContextCG.h. Or make a new header file in the platform/graphics/cg subdirectory with a CG.h suffix in its name.

&gt; &gt; &gt; +    CGColorSpaceRef originalColorSpace = CGImageGetColorSpace(originalImage);
&gt; &gt; &gt; +
&gt; &gt; &gt; +    // If the image already has a (non-device) color space, we don&apos;t want to
&gt; &gt; &gt; +    // override it, so return.
&gt; &gt; &gt; +    if (originalColorSpace != deviceSpace)
&gt; &gt; &gt; +        return 0;
&gt; &gt; 
&gt; &gt; Can you really detect an untagged image this way? What about an image with a
&gt; &gt; color space of null (a &quot;mask image&quot;)? Do untagged images really return
&gt; &gt; something that is == the result of CGColorSpaceCreateDeviceRGB? Is this a
&gt; &gt; guaranteed part of the CoreGraphics or ImageIO API? Do you need to compare with
&gt; &gt; CFEqual instead?
&gt; 
&gt; You can really detect and untagged image this way. I have not had any test
&gt; cases with a null color space. The == does really work. However, since I don&apos;t
&gt; know whether or not this is guaranteed by the CoreGraphics API and since Simon
&gt; made the same suggestion above, I switched to using CFEqual. It also works, but
&gt; I assure you that == does as well. I have test cases, and stepped through it in
&gt; the debugger just to be certain.

Switching to CFEqual has two downsides.

    1) Slower.
    2) This will now crash if CGImageGetColorSpace returns 0. But if it’s guaranteed to never return 0 then maybe we’re OK on this.

&gt; I don&apos;t think my patch had any leaks because I think I was correctly dealing
&gt; with the new image at all of the call sites of this static helper function.
&gt; (There are only two call sites.) Just to make sure, I did switch it over to a
&gt; RetainPtr model.

Another option would have been to use the word &quot;create&quot; or &quot;copy&quot; in the function name and follow the create/copy rule from Core Foundation.

&gt; &gt; Is there any way to make the regression tests so they would fail even without
&gt; &gt; doing pixel tests? I&apos;m not sure these tests are helpful enough if only the
&gt; &gt; pixel test results indicate the failure.
&gt; 
&gt; I wish there was a way to test this within layout tests, but I don&apos;t know of
&gt; one. I was hoping our color information would be equivalent to Digicolorometer
&gt; information, but it&apos;s not. Not sure how to improve this.

Maybe we can add something to the layout test controller to let you read pixels out of the window. Or something that copies the contents of the window into a canvas element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164129</commentid>
    <comment_count>7</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-11-16 18:07:56 -0800</bug_when>
    <thetext>&gt; &gt; &gt; &gt; +    static CGColorSpaceRef deviceSpace = CGColorSpaceCreateDeviceRGB();
&gt; &gt; &gt; 
&gt; &gt; &gt; Isn&apos;t there already a helper function that holds a global copy of the device
&gt; &gt; &gt; color space?
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; I made that helper function in GraphicsContextCG.cpp. I couldn&apos;t think of a
&gt; &gt; good way to share it…I could put it in GraphicsContext.h, but then I would
&gt; &gt; either have to wrap it in a CG-only if-def or create a PlatformColorSpace ifdef
&gt; &gt; or something like that. Because I had so many questions, I decided just to use
&gt; &gt; the CG call again rather than my new helper since we use that call a bunch of
&gt; &gt; places in the code already without a central helper. What do you think is best?
&gt; &gt; I am open to adjusting this, but unsure how to proceed.
&gt; 
&gt; Maybe GraphicsContextPlatformPrivateCG.h is a possible place to put this. I
&gt; also think we could consider renaming that to just GraphicsContextCG.h. Or make
&gt; a new header file in the platform/graphics/cg subdirectory with a CG.h suffix
&gt; in its name.

I moved these static helpers to GraphicsContextPlatformPrivateCG.h, and that is working well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165063</commentid>
    <comment_count>8</comment_count>
      <attachid>43321</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-11-19 12:48:42 -0800</bug_when>
    <thetext>Comment on attachment 43321
New patch

I&apos;d really like to see the color space be a default argument in the GraphicsContext functions.  I&apos;d love to see that change for say fillRect and any others you may already have done also.

If you look at most of your calls, you&apos;re almost always passing in DeviceColorSpace... if you put that argument at the end of the functions and made it default, then it could be omitted, and you wouldn&apos;t have to patch a bunch of call sites.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165065</commentid>
    <comment_count>9</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-11-19 12:50:03 -0800</bug_when>
    <thetext>Although if you think people need to be thinking about color spaces all the time, I&apos;d accept that as an argument for why you wouldn&apos;t want to make it a default argument...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165066</commentid>
    <comment_count>10</comment_count>
      <attachid>43321</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-19 12:50:38 -0800</bug_when>
    <thetext>Comment on attachment 43321
New patch

&gt; +    // Adjust the color space.
&gt; +    if (RetainPtr&lt;CGImageRef&gt; colorSpaceImage = imageWithColorSpace(image, styleColorSpace))
&gt; +        image = colorSpaceImage.releaseRef();

In at least some cases this will lead to a leak. For example, if shouldUseSubimage is true, then we will leak the subimage because we will overwrite &quot;image&quot; with a pointer to it. If shouldUseSubimage is false, then we will leak the result of imageWithColorSpace. I think we need to use RetainPtr to get this right, although it will mean extra retains in the no subimage, no color correction case.

&gt; +    // Adjust the color space.
&gt; +    if (RetainPtr&lt;CGImageRef&gt; colorSpaceImage = imageWithColorSpace(subImage.get(), styleColorSpace))
&gt; +        subImage = colorSpaceImage.releaseRef();

Probably the same problem here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165067</commentid>
    <comment_count>11</comment_count>
      <attachid>43321</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-19 12:52:33 -0800</bug_when>
    <thetext>Comment on attachment 43321
New patch

review- because of the leaks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165082</commentid>
    <comment_count>12</comment_count>
      <attachid>43521</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-11-19 13:54:22 -0800</bug_when>
    <thetext>Created attachment 43521
Newer Patch

Here&apos;s a new patch that fixes the leak Darin found. 

Dave, about making defaults for the ColorSpace parameters: a lot of the call sites that use DeviceColorSpace right now represent bugs. For example, all of the spots in canvas code that send DeviceColorSpace need to be reconsidered, as do the Windows call sites, and the call sites in other ports for that matter. Right now, while support for this property is still under development, I think it&apos;s important for callers to think of ColorSpace whenever they call the functions. Once we feel convinced we have caught and fixed all of the bugs, maybe then we could enable defaults for the callers that really don&apos;t need to think about color space. What do you think about that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165085</commentid>
    <comment_count>13</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-11-19 13:58:19 -0800</bug_when>
    <thetext>Yeah that sounds fine.  I suspected after I posted the comment that we probably want to keep it explicit so people have to think about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165108</commentid>
    <comment_count>14</comment_count>
      <attachid>43521</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-19 15:12:13 -0800</bug_when>
    <thetext>Comment on attachment 43521
Newer Patch

&gt; +inline static CGColorSpaceRef deviceRGBColorSpaceRef()
&gt; +{
&gt; +    static CGColorSpaceRef deviceSpace = CGColorSpaceCreateDeviceRGB();
&gt; +    return deviceSpace;
&gt; +}
&gt; +
&gt; +inline static CGColorSpaceRef sRGBColorSpaceRef()
&gt; +{
&gt; +    // FIXME: Windows should be able to use kCGColorSpaceSRGB, this is tracked by http://webkit.org/b/31363.
&gt; +#if PLATFORM(WIN) || defined(BUILDING_ON_TIGER)
&gt; +    return deviceRGBColorSpaceRef();
&gt; +#else
&gt; +    static CGColorSpaceRef sRGBSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
&gt; +    return sRGBSpace;
&gt; +#endif
&gt; +}

These should not be marked static, since they are in header files. If marked static, there will be multiple copies of the global variables. Since not marked static, there will not be.

Probably should mark these as FIXME, since ideally they would go in GraphicsContextCG.h if it existed.

&gt; +static RetainPtr&lt;CGImageRef&gt; imageWithColorSpace(CGImageRef originalImage, ColorSpace colorSpace)
&gt; +{
&gt; +    CGColorSpaceRef originalColorSpace = CGImageGetColorSpace(originalImage);
&gt; +
&gt; +    // If the image already has a (non-device) color space, we don&apos;t want to
&gt; +    // override it, so return.
&gt; +    if (!originalColorSpace || !CFEqual(originalColorSpace, deviceRGBColorSpaceRef()))
&gt; +        return 0;

If you changed this to return originalImage instead of 0 whenever color change is not needed, then the callers would all be simplified.

&gt; +    // Adjust the color space.
&gt; +    if (RetainPtr&lt;CGImageRef&gt; colorSpaceImage = imageWithColorSpace(image.get(), styleColorSpace))
&gt; +        image = colorSpaceImage;

Here&apos;s an example. You could eliminate the local variable and just say:

    image = imageWithColorSpace(image.get(), styleColorSpace);

&gt; -    if (shouldUseSubimage)

I suspect we no longer need shouldUseSubimage to be in a local variable, but it might still help clarity to keep it so I&apos;m not sure it should be removed.

r=me

I really want better regression tests that don&apos;t rely on pixel results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165127</commentid>
    <comment_count>15</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-11-19 15:38:03 -0800</bug_when>
    <thetext>Thanks Darin! I addressed your comments before checking in. 

Fixed with revision 51212.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43218</attachid>
            <date>2009-11-13 18:06:05 -0800</date>
            <delta_ts>2009-11-16 14:08:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>forReview.txt</filename>
            <type>text/plain</type>
            <size>63665</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDk4NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA4IEBACisyMDA5LTExLTEzICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXgg
Zm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTMyMSBNYWtlIC13
ZWJraXQtCisgICAgICAgIGNvbG9yLWNvcnJlY3Rpb24gd29yayB3aXRoIHVudGFnZ2VkIGltYWdl
cworCisgICAgICAgIEltYWdlJ3MgZHJhdygpLCBkcmF3UGF0dGVybigpLCBhbmQgZmlsbFdpdGhT
b2xpZENvbG9yKCkgZnVuY3Rpb25zIAorICAgICAgICBub3cgdGFrZSBhIENvbG9yU3BhY2UuIEEg
YnVuY2ggb2YgY2xhc3NlcyBpbmhlcml0IGZyb20gSW1hZ2UsIHNvIAorICAgICAgICBkcmF3KCkg
YW5kIGRyYXdQYXR0ZXJuKCkgZnVuY3Rpb25zIHRoZXJlIG11c3QgYWxzbyB0YWtlIGEgCisgICAg
ICAgIENvbG9yU3BhY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmZpbGxXaXRoU29saWRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZTo6ZHJhd1RpbGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R2VuZXJhdGVkSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJhdGVk
SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0
ZWRJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZHJhdyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oOgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6
ZHJhdyk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmg6CisKKyAgICAgICAgQWxs
IG9mIHRoZSBkcmF3SW1hZ2UoKSBmdW5jdGlvbnMgYW5kIGRyYXdUaWxlZCgpIGZ1bmN0aW9ucyBv
ZiAKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IG5vdyB0YWtlIGEgQ29sb3JTcGFjZS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0Lmg6CisKKyAgICAgICAgVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFs
IHdvcmsgaXMgZG9uZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmltYWdlV2l0aENvbG9yU3BhY2UpOiBOZXcgc3RhdGljIGZ1
bmN0aW9uIHRoYXQgcmV0dXJucyBhIAorICAgICAgICBjb3B5IG9mIHRoZSBnaXZlbiBpbWFnZSBp
biB0aGUgZ2l2ZW4gQ29sb3JTcGFjZSAqSUYqIHdlIHNob3VsZCB1c2UgCisgICAgICAgIHRoZSBn
aXZlbiBDb2xvclNwYWNlLiBXZSB3aWxsIGlnbm9yZSB0aGUgY29sb3Igc3BhY2UgaWYgdGhlIGlt
YWdlIAorICAgICAgICBpcyB0YWdnZWQgYW5kIHJldHVybiAwLiAKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpkcmF3KTogTm93IHRha2VzIGEgQ29sb3JTcGFjZSBhbmQgdXNlcyBpdCB0
byAKKyAgICAgICAgY2FsbCBpbWFnZVdpdGhDb2xvclNwYWNlKCkuIAorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKTogU2FtZS4KKworICAgICAgICBBdHRlbXB0IHRvIGtlZXAg
YWxsIHBvcnRzIGJ1aWxkaW5nLiAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpk
cmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2luZ2xl
RnJhbWVTa2lhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
U2luZ2xlRnJhbWVTa2lhOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9J
bWFnZVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3UGF0dGVybik6CisKKyAgICAgICAgQ2FsbGVy
cyBvZiBHcmFwaGljc0NvbnRleHQncyBkcmF3SW1hZ2UoKSBhbmQgZHJhd1RpbGVkKCkgZnVuY3Rp
b25zIAorICAgICAgICBub3cgbmVlZCB0byBzZW5kIGEgQ29sb3JTcGFjZS4KKyAgICAgICAgKiBo
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpwYWludCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlRnJvbVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxFdmVudCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29sb3JNYXRyaXg6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjph
cHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGlj
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJUaGVtZU1hYzo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6cGFpbnROaW5lUGllY2VJbWFnZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpwYWludFJlcGxhY2Vk
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnBhaW50UmVzaXplcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxpc3RNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6cGFp
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJXaWRnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0OjpwYWludCk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyUGF0dGVybi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYWludFNlcnZlclBhdHRlcm46OnNldHVwKToKKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVz
b3VyY2VGaWx0ZXI6OmFwcGx5RmlsdGVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmFwcGx5KToKKyAg
ICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRU9mZnNldDo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmFwcGx5KToKKworCiAy
MDA5LTExLTEzICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBObyBy
ZXZpZXcsIGJ1aWxkIGZpeCBvbmx5LgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiA1MDk1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50
OjpwYWludChHcmFwaGljc0NvCiAgICAgaWYgKG1faW1hZ2VCdWZmZXIpIHsKICAgICAgICAgSW1h
Z2UqIGltYWdlID0gbV9pbWFnZUJ1ZmZlci0+aW1hZ2UoKTsKICAgICAgICAgaWYgKGltYWdlKQot
ICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCByKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmRyYXdJbWFnZShpbWFnZSwgRGV2aWNlQ29sb3JTcGFjZSwgcik7CiAgICAgfQogCiAj
aWYgRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDUwOTU3KQorKysgV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAyLDcgKzEwMDIsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0lt
YWdlCiAgICAgRmxvYXRSZWN0IHNvdXJjZVJlY3QgPSBjLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHNy
Y1JlY3QpOwogICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IGMtPnJvdW5kVG9EZXZpY2VQaXhlbHMo
ZHN0UmVjdCk7CiAgICAgd2lsbERyYXcoZGVzdFJlY3QpOwotICAgIGMtPmRyYXdJbWFnZShjYWNo
ZWRJbWFnZS0+aW1hZ2UoKSwgZGVzdFJlY3QsIHNvdXJjZVJlY3QsIHN0YXRlKCkubV9nbG9iYWxD
b21wb3NpdGUpOworICAgIGMtPmRyYXdJbWFnZShjYWNoZWRJbWFnZS0+aW1hZ2UoKSwgRGV2aWNl
Q29sb3JTcGFjZSwgZGVzdFJlY3QsIHNvdXJjZVJlY3QsIHN0YXRlKCkubV9nbG9iYWxDb21wb3Np
dGUpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxD
YW52YXNFbGVtZW50KiBjYW52YXMsIGZsb2F0IHgsIGZsb2F0IHkpCkBAIC0xMDUyLDcgKzEwNTIs
NyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAgICAgaWYgKCFz
b3VyY2VDYW52YXMtPm9yaWdpbkNsZWFuKCkpCiAgICAgICAgIGNhbnZhcygpLT5zZXRPcmlnaW5U
YWludGVkKCk7CiAKLSAgICBjLT5kcmF3SW1hZ2UoYnVmZmVyLT5pbWFnZSgpLCBkZXN0UmVjdCwg
c291cmNlUmVjdCwgc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSk7CisgICAgYy0+ZHJhd0ltYWdl
KGJ1ZmZlci0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNvdXJjZVJlY3Qs
IHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUpOwogICAgIHdpbGxEcmF3KGRlc3RSZWN0KTsgLy8g
VGhpcyBjYWxsIGNvbWVzIGFmdGVyIGRyYXdJbWFnZSwgc2luY2UgdGhlIGJ1ZmZlciB3ZSBkcmF3
IGludG8gbWF5IGJlIG91ciBvd24sIGFuZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCBpcyBkaXJ0
eS4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmd1YWJseSB3aWxsRHJhdyBz
aG91bGQgYmVjb21lIGRpZERyYXcgYW5kIG9jY3VyIGFmdGVyIGRyYXdpbmcgY2FsbHMgYW5kIG5v
dCBiZWZvcmUgdGhlbSB0byBhdm9pZCBwcm9ibGVtcyBsaWtlIHRoaXMuCiB9CkBAIC0xMTQ2LDcg
KzExNDYsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAKICAg
ICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9hdFJlY3QoZHgsIGR5LCBkdywgZGgpOwogICAgIHdp
bGxEcmF3KGRlc3RSZWN0KTsKLSAgICBjLT5kcmF3SW1hZ2UoY2FjaGVkSW1hZ2UtPmltYWdlKCks
IGRlc3RSZWN0LCBGbG9hdFJlY3Qoc3gsIHN5LCBzdywgc2gpLCBvcCk7CisgICAgYy0+ZHJhd0lt
YWdlKGNhY2hlZEltYWdlLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkZXN0UmVjdCwgRmxv
YXRSZWN0KHN4LCBzeSwgc3csIHNoKSwgb3ApOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2V0QWxwaGEoZmxvYXQgYWxwaGEpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5j
cHAJKHJldmlzaW9uIDUwOTU3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzY0LDcgKzc2NCw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6cGFpbnRT
Y3JvbGxiYXJzKEdyYXBoaWMKIHZvaWQgU2Nyb2xsVmlldzo6cGFpbnRQYW5TY3JvbGxJY29uKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEltYWdl
KiwgcGFuU2Nyb2xsSWNvbiwgKEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgicGFuSWNvbiIp
LnJlbGVhc2VSZWYoKSkpOwotICAgIGNvbnRleHQtPmRyYXdJbWFnZShwYW5TY3JvbGxJY29uLCBt
X3BhblNjcm9sbEljb25Qb2ludCk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKHBhblNjcm9sbElj
b24sIERldmljZUNvbG9yU3BhY2UsIG1fcGFuU2Nyb2xsSWNvblBvaW50KTsKIH0KIAogdm9pZCBT
Y3JvbGxWaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCShyZXZp
c2lvbiA1MDk1NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMTY3LDExICsxNjcsMTEgQEAgcHJvdGVjdGVkOgogI2lmIFBMQVRG
T1JNKFdJTikKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYg
c3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIGRy
YXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJh
dyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAjaWYgUExB
VEZPUk0oV1gpIHx8IChQTEFURk9STShXSU5DRSkgJiYgIVBMQVRGT1JNKFFUKSkKICAgICB2aXJ0
dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9ybSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBv
c2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oSEFJS1UpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRl
ZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVy
YXRlZEltYWdlLmNwcAkocmV2aXNpb24gNTA5NTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dlbmVyYXRlZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCB1
c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgR2VuZXJh
dGVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3ApCit2b2lkIEdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewogICAgIGNvbnRl
eHQtPnNhdmUoKTsKICAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRl
T3ApOwpAQCAtNDgsNyArNDgsNyBAQCB2b2lkIEdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNz
Q29udGV4CiB9CiAKIHZvaWQgR2VuZXJhdGVkSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
KQogewogICAgIC8vIENyZWF0ZSBhIEJpdG1hcEltYWdlIGFuZCBjYWxsIGRyYXdQYXR0ZXJuIG9u
IGl0LgogICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKG1fc2l6ZSk7CkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgR2VuZXJhdGVkSW1hZ2U6OmRy
YXdQYXR0ZXJuKEdyYXBoaWMKICAgICBJbWFnZSogYml0bWFwID0gaW1hZ2VCdWZmZXItPmltYWdl
KCk7CiAgICAgCiAgICAgLy8gTm93IGp1c3QgY2FsbCBkcmF3VGlsZWQgb24gdGhhdCBpbWFnZS4K
LSAgICBiaXRtYXAtPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBjb21wb3NpdGVPcCwgZGVzdFJlY3QpOworICAgIGJpdG1hcC0+ZHJhd1BhdHRl
cm4oY29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIGNvbG9yU3BhY2Us
IGNvbXBvc2l0ZU9wLCBkZXN0UmVjdCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgJKHJldmlzaW9uIDUwOTU3KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw5
ICs1Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29u
c3QgeyByZXR1cm4gMDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogICAgIHZpcnR1YWwgdm9p
ZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29tcG9zaXRlT3Bl
cmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOwogICAgIAogICAgIEdlbmVyYXRlZElt
YWdlKFBhc3NSZWZQdHI8R2VuZXJhdG9yPiBnZW5lcmF0b3IsIGNvbnN0IEludFNpemUmIHNpemUp
CiAgICAgICAgIDogbV9nZW5lcmF0b3IoZ2VuZXJhdG9yKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gNTA5NTcpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwNiwyNCArMzA2LDI0IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpwYWludGluZ0Rp
c2FibGVkKCkKICAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQ7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBjb25zdCBJ
bnRQb2ludCYgcCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBJbnRQ
b2ludCYgcCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7Ci0gICAgZHJhd0ltYWdlKGltYWdlLCBw
LCBJbnRSZWN0KDAsIDAsIC0xLCAtMSksIG9wKTsKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIGNvbG9y
U3BhY2UsIHAsIEludFJlY3QoMCwgMCwgLTEsIC0xKSwgb3ApOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgciwgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29u
c3QgSW50UmVjdCYgciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNj
YWxlKQogewotICAgIGRyYXdJbWFnZShpbWFnZSwgciwgSW50UmVjdCgwLCAwLCAtMSwgLTEpLCBv
cCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIGNvbG9yU3BhY2Us
IHIsIEludFJlY3QoMCwgMCwgLTEsIC0xKSwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRQ
b2ludCYgZGVzdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3Ap
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBjb25zdCBJbnRQb2ludCYgZGVzdCwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7Ci0gICAgZHJhd0ltYWdlKGltYWdlLCBJbnRSZWN0
KGRlc3QsIHNyY1JlY3Quc2l6ZSgpKSwgc3JjUmVjdCwgb3ApOworICAgIGRyYXdJbWFnZShpbWFn
ZSwgY29sb3JTcGFjZSwgSW50UmVjdChkZXN0LCBzcmNSZWN0LnNpemUoKSksIHNyY1JlY3QsIG9w
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIGNv
bnN0IEludFJlY3QmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEludFJl
Y3QmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBi
b29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsKLSAgICBkcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UmVj
dChkZXN0KSwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgZHJhd0ltYWdl
KGltYWdlLCBjb2xvclNwYWNlLCBGbG9hdFJlY3QoZGVzdCksIHNyY1JlY3QsIG9wLCB1c2VMb3dR
dWFsaXR5U2NhbGUpOwogfQogCiAjaWYgIVBMQVRGT1JNKFdJTkNFKSB8fCBQTEFURk9STShRVCkK
QEAgLTQyOSw3ICs0MjksNyBAQCBjb25zdCBWZWN0b3I8SW50UmVjdD4mIEdyYXBoaWNzQ29udGV4
dDo6CiAgICAgcmV0dXJuIG1fY29tbW9uLT5tX2ZvY3VzUmluZ1JlY3RzOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNl
TG93UXVhbGl0eVNjYWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSog
aW1hZ2UsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0
eVNjYWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWltYWdlKQogICAgICAg
ICByZXR1cm47CkBAIC00NTMsMjkgKzQ1MywyOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlKEltYWdlKiBpCiAgICAgICAgIHNhdmUoKTsKICAgICAgICAgc2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uTm9uZSk7CiAgICAgfQotICAgIGltYWdlLT5kcmF3
KHRoaXMsIEZsb2F0UmVjdChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0dywgdGgpKSwgRmxv
YXRSZWN0KHNyYy5sb2NhdGlvbigpLCBGbG9hdFNpemUodHN3LCB0c2gpKSwgb3ApOworICAgIGlt
YWdlLT5kcmF3KHRoaXMsIEZsb2F0UmVjdChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0dywg
dGgpKSwgRmxvYXRSZWN0KHNyYy5sb2NhdGlvbigpLCBGbG9hdFNpemUodHN3LCB0c2gpKSwgY29s
b3JTcGFjZSwgb3ApOwogICAgIGlmICh1c2VMb3dRdWFsaXR5U2NhbGUpCiAgICAgICAgIHJlc3Rv
cmUoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlKiBp
bWFnZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UG9pbnQmIHNyY1BvaW50LCBjb25z
dCBJbnRTaXplJiB0aWxlU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFBvaW50JiBzcmNQb2ludCwgY29uc3Qg
SW50U2l6ZSYgdGlsZVNpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkgfHwgIWltYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbWFnZS0+
ZHJhd1RpbGVkKHRoaXMsIHJlY3QsIHNyY1BvaW50LCB0aWxlU2l6ZSwgb3ApOworICAgIGltYWdl
LT5kcmF3VGlsZWQodGhpcywgcmVjdCwgc3JjUG9pbnQsIHRpbGVTaXplLCBjb2xvclNwYWNlLCBv
cCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSogaW1h
Z2UsIGNvbnN0IEludFJlY3QmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIEltYWdlOjpU
aWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBDb21wb3NpdGVPcGVyYXRvciBv
cCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSogaW1hZ2UsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdCwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWlt
YWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaFJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hU
aWxlICYmIHZSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSkKICAgICAgICAgLy8gSnVzdCBkbyBh
IHNjYWxlLgotICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0LCBzcmNSZWN0LCBv
cCk7CisgICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGNvbG9yU3BhY2UsIGRlc3QsIHNy
Y1JlY3QsIG9wKTsKIAotICAgIGltYWdlLT5kcmF3VGlsZWQodGhpcywgZGVzdCwgc3JjUmVjdCwg
aFJ1bGUsIHZSdWxlLCBvcCk7CisgICAgaW1hZ2UtPmRyYXdUaWxlZCh0aGlzLCBkZXN0LCBzcmNS
ZWN0LCBoUnVsZSwgdlJ1bGUsIGNvbG9yU3BhY2UsIG9wKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmFkZFJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRT
aXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gNTA5NTcpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTksMTUgKzIxOSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQg
c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKICAgICAgICAgdm9pZCBzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCk7CiAKLSAgICAgICAgdm9pZCBkcmF3SW1h
Z2UoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRl
U291cmNlT3Zlcik7Ci0gICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgY29uc3QgSW50UmVj
dCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dR
dWFsaXR5U2NhbGUgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRl
T3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKLSAgICAgICAgdm9pZCBkcmF3SW1hZ2Uo
SW1hZ2UqLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Q29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxp
dHlTY2FsZSA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3Qo
MCwgMCwgLTEsIC0xKSwKKyAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNl
LCBjb25zdCBJbnRQb2ludCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zl
cik7CisgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgQ29sb3JTcGFjZSwgY29uc3QgSW50
UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VM
b3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwg
Q29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICAgICAg
dm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVT
b3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKKyAgICAgICAgdm9p
ZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VP
dmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBkcmF3
VGlsZWRJbWFnZShJbWFnZSosIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRQb2lu
dCYgc3JjUG9pbnQsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLAorICAgICAgICB2b2lkIGRyYXdU
aWxlZEltYWdlKEltYWdlKiwgQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEludFBvaW50JiBzcmNQb2ludCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsCiAgICAgICAg
ICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7
Ci0gICAgICAgIHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UqLCBjb25zdCBJbnRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwKKyAgICAgICAgdm9pZCBkcmF3VGlsZWRJbWFn
ZShJbWFnZSosIENvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlOjpUaWxlUnVs
ZSBoUnVsZSA9IEltYWdlOjpTdHJldGNoVGlsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlID0gSW1h
Z2U6OlN0cmV0Y2hUaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9w
ZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2UuY3BwCShyZXZpc2lvbiA1MDk1NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxNCArNzUsMTQgQEAgYm9vbCBJbWFn
ZTo6c2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZgogICAgIHJldHVybiBkYXRhQ2hhbmdlZChh
bGxEYXRhUmVjZWl2ZWQpOwogfQogCi12b2lkIEltYWdlOjpmaWxsV2l0aFNvbGlkQ29sb3IoR3Jh
cGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit2b2lkIEltYWdlOjpmaWxsV2l0aFNvbGlk
Q29sb3IoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
ciBvcCkKIHsKICAgICBpZiAoY29sb3IuYWxwaGEoKSA8PSAwKQogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgY3R4dC0+c2F2ZSgpOwogICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbigh
Y29sb3IuaGFzQWxwaGEoKSAmJiBvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyID8gQ29tcG9zaXRl
Q29weSA6IG9wKTsKLSAgICBjdHh0LT5maWxsUmVjdChkc3RSZWN0LCBjb2xvciwgRGV2aWNlQ29s
b3JTcGFjZSk7CisgICAgY3R4dC0+ZmlsbFJlY3QoZHN0UmVjdCwgY29sb3IsIGNvbG9yU3BhY2Up
OwogICAgIGN0eHQtPnJlc3RvcmUoKTsKIH0KIApAQCAtMTA0LDEwICsxMDQsMTAgQEAgc3RhdGlj
IGlubGluZSBGbG9hdFNpemUgY2FsY3VsYXRlUGF0dGVybgogfQogCiAKLXZvaWQgSW1hZ2U6OmRy
YXdUaWxlZChHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50LCBjb25zdCBGbG9hdFNpemUmIHNjYWxlZFRpbGVT
aXplLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGlj
c0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UG9p
bnQmIHNyY1BvaW50LCBjb25zdCBGbG9hdFNpemUmIHNjYWxlZFRpbGVTaXplLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogeyAgICAKICAgICBpZiAobWF5Rmls
bFdpdGhTb2xpZENvbG9yKCkpIHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRl
c3RSZWN0LCBzb2xpZENvbG9yKCksIG9wKTsKKyAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0
eHQsIGRlc3RSZWN0LCBzb2xpZENvbG9yKCksIGNvbG9yU3BhY2UsIG9wKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtMTMyLDIyICsxMzIsMjIgQEAgdm9pZCBJbWFnZTo6ZHJhd1RpbGVk
KEdyYXBoaWNzQ29udGV4dCogYwogICAgICAgICB2aXNpYmxlU3JjUmVjdC5zZXRZKChkZXN0UmVj
dC55KCkgLSBvbmVUaWxlUmVjdC55KCkpIC8gc2NhbGUuaGVpZ2h0KCkpOwogICAgICAgICB2aXNp
YmxlU3JjUmVjdC5zZXRXaWR0aChkZXN0UmVjdC53aWR0aCgpIC8gc2NhbGUud2lkdGgoKSk7CiAg
ICAgICAgIHZpc2libGVTcmNSZWN0LnNldEhlaWdodChkZXN0UmVjdC5oZWlnaHQoKSAvIHNjYWxl
LmhlaWdodCgpKTsKLSAgICAgICAgZHJhdyhjdHh0LCBkZXN0UmVjdCwgdmlzaWJsZVNyY1JlY3Qs
IG9wKTsKKyAgICAgICAgZHJhdyhjdHh0LCBkZXN0UmVjdCwgdmlzaWJsZVNyY1JlY3QsIGNvbG9y
U3BhY2UsIG9wKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHBhdHRlcm5UcmFuc2Zvcm0gPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLnNjYWxlTm9u
VW5pZm9ybShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CiAgICAgRmxvYXRSZWN0IHRp
bGVSZWN0KEZsb2F0UG9pbnQoKSwgaW50cmluc2ljVGlsZVNpemUpOyAgICAKLSAgICBkcmF3UGF0
dGVybihjdHh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgb25lVGlsZVJlY3QubG9jYXRp
b24oKSwgb3AsIGRlc3RSZWN0KTsKKyAgICBkcmF3UGF0dGVybihjdHh0LCB0aWxlUmVjdCwgcGF0
dGVyblRyYW5zZm9ybSwgb25lVGlsZVJlY3QubG9jYXRpb24oKSwgY29sb3JTcGFjZSwgb3AsIGRl
c3RSZWN0KTsKICAgICAKICAgICBzdGFydEFuaW1hdGlvbigpOwogfQogCiAvLyBGSVhNRTogTWVy
Z2Ugd2l0aCB0aGUgb3RoZXIgZHJhd1RpbGVkIGV2ZW50dWFsbHksIHNpbmNlIHdlIG5lZWQgYSBj
b21iaW5hdGlvbiBvZiBib3RoIGZvciBzb21lIHRoaW5ncy4KLXZvaWQgSW1hZ2U6OmRyYXdUaWxl
ZChHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBUaWxlUnVsZSBoUnVsZSwgVGlsZVJ1bGUgdlJ1bGUsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wKQordm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCog
Y3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IFRpbGVSdWxlIGhSdWxlLCBUaWxlUnVsZSB2UnVsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBD
b21wb3NpdGVPcGVyYXRvciBvcCkKIHsgICAgCiAgICAgaWYgKG1heUZpbGxXaXRoU29saWRDb2xv
cigpKSB7Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjdHh0LCBkc3RSZWN0LCBzb2xpZENv
bG9yKCksIG9wKTsKKyAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRzdFJlY3QsIHNv
bGlkQ29sb3IoKSwgY29sb3JTcGFjZSwgb3ApOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IApAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRl
eHQqIGMKICAgICAgICAgdlBoYXNlIC09IGZtb2RmKGRzdFJlY3QuaGVpZ2h0KCksIHNjYWxlLmhl
aWdodCgpICogc3JjUmVjdC5oZWlnaHQoKSkgLyAyLjBmOwogICAgIEZsb2F0UG9pbnQgcGF0dGVy
blBoYXNlKGRzdFJlY3QueCgpIC0gaFBoYXNlLCBkc3RSZWN0LnkoKSAtIHZQaGFzZSk7CiAgICAg
Ci0gICAgZHJhd1BhdHRlcm4oY3R4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGF0dGVy
blBoYXNlLCBvcCwgZHN0UmVjdCk7CisgICAgZHJhd1BhdHRlcm4oY3R4dCwgc3JjUmVjdCwgcGF0
dGVyblRyYW5zZm9ybSwgcGF0dGVyblBoYXNlLCBjb2xvclNwYWNlLCBvcCwgZHN0UmVjdCk7CiAK
ICAgICBzdGFydEFuaW1hdGlvbigpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2Uu
aAkocmV2aXNpb24gNTA5NTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgSW1hZ2VfaAogCiAjaW5j
bHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NUeXBlcy5oIgogI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgpAQCAtMTU0LDIxICsxNTUsMjEgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIEltYWdlKElt
YWdlT2JzZXJ2ZXIqID0gMCk7CiAKLSAgICBzdGF0aWMgdm9pZCBmaWxsV2l0aFNvbGlkQ29sb3Io
R3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApOworICAgIHN0YXRpYyB2b2lkIGZpbGxX
aXRoU29saWRDb2xvcihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBv
cCk7CiAKICNpZiBQTEFURk9STShXSU4pCiAgICAgdmlydHVhbCB2b2lkIGRyYXdGcmFtZU1hdGNo
aW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yKSB7IH0KICNlbmRpZgot
ICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvcikgPSAw
OwotICAgIHZvaWQgZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEZsb2F0U2l6ZSYgdGls
ZVNpemUsIENvbXBvc2l0ZU9wZXJhdG9yKTsKLSAgICB2b2lkIGRyYXdUaWxlZChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgVGlsZVJ1bGUgaFJ1bGUsIFRpbGVSdWxlIHZSdWxlLCBDb21wb3NpdGVPcGVyYXRvcik7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yKSA9IDA7CisgICAgdm9pZCBkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFBvaW50JiBzcmNQb2ludCwgY29uc3QgRmxv
YXRTaXplJiB0aWxlU2l6ZSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZv
aWQgZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBUaWxlUnVsZSBoUnVsZSwgVGlsZVJ1bGUgdlJ1bGUs
IENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAogICAgIC8vIFN1cHBvcnRpbmcgdGls
ZWQgZHJhd2luZwogICAgIHZpcnR1YWwgYm9vbCBtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKSB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgQ29sb3Igc29saWRDb2xvcigpIGNvbnN0IHsgcmV0
dXJuIENvbG9yKCk7IH0KICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0KTsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2Rh
dGE7IC8vIFRoZSBlbmNvZGVkIHJhdyBkYXRhIGZvciB0aGUgaW1hZ2UuIApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCShyZXZpc2lvbiA1
MDk1NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdl
KGNhaXJvX3N1cmZhY2VfdAogICAgIGNoZWNrRm9yU29saWRDb2xvcigpOwogfQogCi12b2lkIEJp
dG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgRmxvYXRSZWN0IHNyY1JlY3Qoc3JjKTsKICAgICBG
bG9hdFJlY3QgZHN0UmVjdChkc3QpOwpAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgQml0bWFwSW1h
Z2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1h
eUZpbGxXaXRoU29saWRDb2xvcigpKSB7Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjb250
ZXh0LCBkc3RSZWN0LCBzb2xpZENvbG9yKCksIG9wKTsKKyAgICAgICAgZmlsbFdpdGhTb2xpZENv
bG9yKGNvbnRleHQsIGRzdFJlY3QsIHNvbGlkQ29sb3IoKSwgY29sb3JTcGFjZSwgb3ApOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogfQogCiB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewogICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBu
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3Mg
dG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCShyZXZpc2lvbiA1MDk1NykKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNywx
MiArMTI3LDM5IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiAgICAg
fQogfQogCitzdGF0aWMgQ0dJbWFnZVJlZiBpbWFnZVdpdGhDb2xvclNwYWNlKENHSW1hZ2VSZWYg
b3JpZ2luYWxJbWFnZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHN0YXRpYyBDR0Nv
bG9yU3BhY2VSZWYgZGV2aWNlU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsK
KyAgICBDR0NvbG9yU3BhY2VSZWYgb3JpZ2luYWxDb2xvclNwYWNlID0gQ0dJbWFnZUdldENvbG9y
U3BhY2Uob3JpZ2luYWxJbWFnZSk7CisKKyAgICAvLyBJZiB0aGUgaW1hZ2UgYWxyZWFkeSBoYXMg
YSAobm9uLWRldmljZSkgY29sb3Igc3BhY2UsIHdlIGRvbid0IHdhbnQgdG8KKyAgICAvLyBvdmVy
cmlkZSBpdCwgc28gcmV0dXJuLgorICAgIGlmIChvcmlnaW5hbENvbG9yU3BhY2UgIT0gZGV2aWNl
U3BhY2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgc3dpdGNoIChjb2xvclNwYWNlKSB7Cisg
ICAgY2FzZSBEZXZpY2VDb2xvclNwYWNlOgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIHNS
R0JDb2xvclNwYWNlOiB7CisjaWYgUExBVEZPUk0oV0lOKSB8fCBkZWZpbmVkKEJVSUxESU5HX09O
X1RJR0VSKQorICAgICAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgICAgIHN0YXRpYyBDR0NvbG9y
U3BhY2VSZWYgc1JHQlNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JT
cGFjZVNSR0IpOworICAgICAgICByZXR1cm4gQ0dJbWFnZUNyZWF0ZUNvcHlXaXRoQ29sb3JTcGFj
ZShvcmlnaW5hbEltYWdlLCBzUkdCU3BhY2UpOworI2VuZGlmCisgICAgfQorICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
Cit9CisKIENHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VSZWYoKQogewogICAgIHJl
dHVybiBmcmFtZUF0SW5kZXgoMCk7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBCaXRtYXBJ
bWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBzdGFydEFuaW1hdGlvbigpOwogCkBA
IC0xNDEsNyArMTY4LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQq
IAogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKG1heUZpbGxXaXRoU29saWRDb2xvcigp
KSB7Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjdHh0LCBkZXN0UmVjdCwgc29saWRDb2xv
cigpLCBjb21wb3NpdGVPcCk7CisgICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjdHh0LCBkZXN0
UmVjdCwgc29saWRDb2xvcigpLCBjb2xvclNwYWNlLCBjb21wb3NpdGVPcCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTIwNCw2ICsyMzEsMTAgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJh
dyhHcmFwaGljc0NvbnRleHQqIAogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0x
KTsKICAgICBhZGp1c3RlZERlc3RSZWN0LnNldFkoLWFkanVzdGVkRGVzdFJlY3QuYm90dG9tKCkp
OwogCisgICAgLy8gQWRqdXN0IHRoZSBjb2xvciBzcGFjZS4KKyAgICBpZiAoQ0dJbWFnZVJlZiBj
b2xvclNwYWNlSW1hZ2UgPSBpbWFnZVdpdGhDb2xvclNwYWNlKGltYWdlLCBjb2xvclNwYWNlKSkK
KyAgICAgICAgaW1hZ2UgPSBjb2xvclNwYWNlSW1hZ2U7CisKICAgICAvLyBEcmF3IHRoZSBpbWFn
ZS4KICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgYWRqdXN0ZWREZXN0UmVjdCwgaW1h
Z2UpOwogCkBAIC0yMjMsNyArMjU0LDcgQEAgc3RhdGljIHZvaWQgZHJhd1BhdHRlcm5DYWxsYmFj
ayh2b2lkKiBpbgogfQogCiB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQq
IGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgaWYgKCFuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNjAsNiArMjkxLDEwIEBAIHZvaWQgSW1hZ2U6OmRyYXdQ
YXR0ZXJuKEdyYXBoaWNzQ29udGV4dCoKICAgICAgICAgQVNTRVJUKGggPT0gaGVpZ2h0KCkpOwog
ICAgICAgICBzdWJJbWFnZS5hZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QodGls
ZUltYWdlLCB0aWxlUmVjdCkpOwogICAgIH0KKworICAgIC8vIEFkanVzdCB0aGUgY29sb3Igc3Bh
Y2UuCisgICAgaWYgKENHSW1hZ2VSZWYgY29sb3JTcGFjZUltYWdlID0gaW1hZ2VXaXRoQ29sb3JT
cGFjZShzdWJJbWFnZS5nZXQoKSwgY29sb3JTcGFjZSkpCisgICAgICAgIHN1YkltYWdlLmFkb3B0
Q0YoY29sb3JTcGFjZUltYWdlKTsKICAgICAKICNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKICAg
ICAvLyBMZW9wYXJkIGhhcyBhbiBvcHRpbWl6ZWQgY2FsbCBmb3IgdGhlIHRpbGluZyBvZiBpbWFn
ZSBwYXR0ZXJucywgYnV0IHdlIGNhbiBvbmx5IHVzZSBpdCBpZiB0aGUgaW1hZ2UgaGFzIGJlZW4g
ZGVjb2RlZCBlbm91Z2ggdGhhdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
REZEb2N1bWVudEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCShyZXZpc2lvbiA1MDk1NykKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzOSw3ICsxMzksNyBAQCBpbnQgUERGRG9jdW1lbnRJbWFnZTo6cGFnZUNvdW50KCkgY29u
c3QKICAgICByZXR1cm4gbV9kb2N1bWVudCA/IENHUERGRG9jdW1lbnRHZXROdW1iZXJPZlBhZ2Vz
KG1fZG9jdW1lbnQpIDogMDsKIH0KIAotdm9pZCBQREZEb2N1bWVudEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQordm9pZCBQREZEb2N1bWVudElt
YWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wKQogewogICAgIGlmICghbV9kb2N1bWVudCB8fCBtX2N1cnJlbnRQYWdlID09IC0xKQog
ICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRv
Y3VtZW50SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BERkRvY3VtZW50SW1hZ2UuaAkocmV2aXNpb24gNTA5NTcpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyAr
NTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgSW50U2l6ZSBzaXpl
KCkgY29uc3Q7CiAKICAgICAgICAgUERGRG9jdW1lbnRJbWFnZSgpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Ip
OwogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRDdXJyZW50UGFnZShpbnQpOwogICAgICAgICBp
bnQgcGFnZUNvdW50KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCShyZXZpc2lvbiA1MDk1NykKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6YXBwbHkoRmls
dGVyKiBmaWx0ZXIKICAgICBpZiAoIWZpbHRlckNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgp
LCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zdWJSZWdpb24oKSkpOworICAgIGZpbHRlckNv
bnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBjYWxjdWxhdGVE
cmF3aW5nUmVjdChtX2luLT5zdWJSZWdpb24oKSksIERldmljZUNvbG9yU3BhY2UpOwogCiAgICAg
SW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKICAg
ICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhKHJlc3VsdEltYWdlKCktPmdldFVubXVs
dGlwbGllZEltYWdlRGF0YShpbWFnZVJlY3QpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkocmV2aXNpb24gNTA5NTcpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzMsMjYgKzEzMywyNiBAQCB2b2lkIEZFQ29tcG9zaXRlOjphcHBseShG
aWx0ZXIqIGZpbHRlcikKICAgICBGbG9hdFJlY3Qgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLmYsIDAu
ZiwgLTEuZiwgLTEuZik7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09NUE9T
SVRFX09QRVJBVE9SX09WRVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2lu
Mi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnN1
YlJlZ2lvbigpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1
bHRJbWFnZSgpLT5pbWFnZSgpLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zdWJSZWdpb24o
KSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3VsdEltYWdl
KCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zdWJSZWdpb24oKSksIERl
dmljZUNvbG9yU3BhY2UpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+
cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c3ViUmVn
aW9uKCkpLCBEZXZpY2VDb2xvclNwYWNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9JTjoKICAgICAgICAgZmlsdGVyQ29udGV4dC0+c2F2ZSgpOwogICAg
ICAgICBmaWx0ZXJDb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihjYWxjdWxhdGVEcmF3aW5nUmVj
dChtX2luMi0+c3ViUmVnaW9uKCkpLCBtX2luMi0+cmVzdWx0SW1hZ2UoKSk7Ci0gICAgICAgIGZp
bHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBjYWxj
dWxhdGVEcmF3aW5nUmVjdChtX2luLT5zdWJSZWdpb24oKSkpOworICAgICAgICBmaWx0ZXJDb250
ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgY2FsY3VsYXRlRHJh
d2luZ1JlY3QobV9pbi0+c3ViUmVnaW9uKCkpLCBEZXZpY2VDb2xvclNwYWNlKTsKICAgICAgICAg
ZmlsdGVyQ29udGV4dC0+cmVzdG9yZSgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09N
UE9TSVRFX09QRVJBVE9SX09VVDoKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1f
aW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnN1
YlJlZ2lvbigpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luMi0+cmVz
dWx0SW1hZ2UoKS0+aW1hZ2UoKSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnN1YlJlZ2lv
bigpKSwgc3JjUmVjdCwgQ29tcG9zaXRlRGVzdGluYXRpb25PdXQpOworICAgICAgICBmaWx0ZXJD
b250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgY2FsY3VsYXRl
RHJhd2luZ1JlY3QobV9pbi0+c3ViUmVnaW9uKCkpLCBEZXZpY2VDb2xvclNwYWNlKTsKKyAgICAg
ICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgp
LCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21w
b3NpdGVEZXN0aW5hdGlvbk91dCwgRGV2aWNlQ29sb3JTcGFjZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgZmlsdGVyQ29udGV4
dC0+ZHJhd0ltYWdlKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBjYWxjdWxhdGVEcmF3
aW5nUmVjdChtX2luMi0+c3ViUmVnaW9uKCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJh
d0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0
KG1faW4tPnN1YlJlZ2lvbigpKSwgc3JjUmVjdCwgQ29tcG9zaXRlU291cmNlQXRvcCk7CisgICAg
ICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luMi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2Uo
KSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnN1YlJlZ2lvbigpKSwgRGV2aWNlQ29sb3JT
cGFjZSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFn
ZSgpLT5pbWFnZSgpLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zdWJSZWdpb24oKSksIHNy
Y1JlY3QsIENvbXBvc2l0ZVNvdXJjZUF0b3AsIERldmljZUNvbG9yU3BhY2UpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAgICAgZmlsdGVy
Q29udGV4dC0+ZHJhd0ltYWdlKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBjYWxjdWxh
dGVEcmF3aW5nUmVjdChtX2luMi0+c3ViUmVnaW9uKCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4
dC0+ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdp
bmdSZWN0KG1faW4tPnN1YlJlZ2lvbigpKSwgc3JjUmVjdCwgQ29tcG9zaXRlWE9SKTsKKyAgICAg
ICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgp
LCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c3ViUmVnaW9uKCkpLCBEZXZpY2VDb2xvclNw
YWNlKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdl
KCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnN1YlJlZ2lvbigpKSwgc3Jj
UmVjdCwgQ29tcG9zaXRlWE9SLCBEZXZpY2VDb2xvclNwYWNlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOiB7CiAgICAgICAgIEludFJl
Y3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbi0+c3Vi
UmVnaW9uKCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUdyYXBoaWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmNwcAkocmV2aXNpb24gNTA5NTcpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDcgKzU4LDcgQEAgdm9pZCBTb3VyY2VHcmFwaGljOjphcHBseShGaWx0ZXIqIGZpbHRlcgog
ICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmlsdGVyQ29u
dGV4dC0+ZHJhd0ltYWdlKGZpbHRlci0+c291cmNlSW1hZ2UoKS0+aW1hZ2UoKSwgSW50UG9pbnQo
KSk7CisgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKGZpbHRlci0+c291cmNlSW1hZ2UoKS0+
aW1hZ2UoKSwgSW50UG9pbnQoKSwgRGV2aWNlQ29sb3JTcGFjZSk7CiB9CiAKIHZvaWQgU291cmNl
R3JhcGhpYzo6ZHVtcCgpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0lt
YWdlSGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvSW1hZ2VIYWlrdS5jcHAJKHJldmlzaW9uIDUwOTU3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9JbWFnZUhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMs
NyBAQCB2b2lkIEJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhCiB9CiAKIC8vIERy
YXdpbmcgUm91dGluZXMKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wKQordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKICAgICBzdGFydEFuaW1hdGlv
bigpOwogCkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiAKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1heUZpbGxXaXRoU29saWRDb2xv
cigpKSB7Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjdHh0LCBkc3QsIHNvbGlkQ29sb3Io
KSwgb3ApOworICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZHN0LCBzb2xpZENvbG9y
KCksIGNvbG9yU3BhY2UsIG9wKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTA5LDcg
KzEwOSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICBj
dHh0LT5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQordm9pZCBJ
bWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgc3JjUG9pbnQsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QpCiB7CiAgICAgLy8gRklYTUU6IGZpbmlz
aCB0aGlzIHRvIHN1cHBvcnQgYWxzbyBwaGFzZWQgcG9zaXRpb24gKHNyY1BvaW50KQogICAgIHN0
YXJ0QW5pbWF0aW9uKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdl
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VR
dC5jcHAJKHJldmlzaW9uIDUwOTU3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9J
bWFnZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBQYXNzUmVmUHRyPElt
YWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzCiB9CiAKIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJu
KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgUVBpeG1hcCogZnJhbWVQaXhtYXAgPSBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmICghZnJhbWVQaXhtYXApIC8vIElmIGl0
J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgpAQCAtMTYyLDcgKzE2Miw3
IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEKIAogLy8gRHJhd2lu
ZyBSb3V0aW5lcwogdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0LAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9h
dFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCisgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wKQogewogICAgIHN0YXJ0QW5pbWF0aW9uKCk7CiAKQEAgLTE3MSw3ICsxNzEsNyBA
QCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmIChtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKSkgewotICAgICAgICBmaWxsV2l0
aFNvbGlkQ29sb3IoY3R4dCwgZHN0LCBzb2xpZENvbG9yKCksIG9wKTsKKyAgICAgICAgZmlsbFdp
dGhTb2xpZENvbG9yKGN0eHQsIGRzdCwgc29saWRDb2xvcigpLCBjb2xvclNwYWNlLCBvcCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oCShyZXZp
c2lvbiA1MDk1NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFn
ZVNpbmdsZUZyYW1lU2tpYS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHB1Ymxp
YzoKICAgICB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAKIHByaXZhdGU6CiAgICAgTmF0aXZl
SW1hZ2VTa2lhIG1fbmF0aXZlSW1hZ2U7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvSW1hZ2VTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VTa2lhLmNwcAkocmV2aXNpb24gNTA5NTcpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDYg
KzMwMiw3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCoKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgZmxvYXRTcmNSZWN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhdHRlcm5UcmFu
c2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLAogICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKQEAgLTQwNSw3ICs0
MDYsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQogfQogCiB2b2lk
IEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQorICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wKQogewogICAgIGlmICghbV9zb3VyY2UuaW5pdGlhbGl6ZWQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDM3LDYgKzQzOCw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3Jh
cGhpY3NDb250ZXh0KiAKIHZvaWQgQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmRyYXcoR3Jh
cGhpY3NDb250ZXh0KiBjdHh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsK
ICAgICBGbG9hdFJlY3Qgbm9ybURzdFJlY3QgPSBub3JtYWxpemVSZWN0KGRzdFJlY3QpOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlV3guY3BwCShyZXZpc2lvbiA1MDk1
NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg2LDEzICs4NiwxMyBAQCB2b2lkIEJpdG1hcEltYWdlOjppbml0UGxhdGZvcm1E
YXRhKCkKIAogLy8gRHJhd2luZyBSb3V0aW5lcwogCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3Jh
cGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAg
ICAgaWYgKCFtX3NvdXJjZS5pbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBp
ZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9y
KGN0eHQsIGRzdCwgc29saWRDb2xvcigpLCBvcCk7CisgICAgICAgIGZpbGxXaXRoU29saWRDb2xv
cihjdHh0LCBkc3QsIHNvbGlkQ29sb3IoKSwgY29sb3JTcGFjZSwgb3ApOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0xNzYsNyArMTc2LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhH
cmFwaGljc0NvbnRleHQqIAogICAgICAgICBvYnNlcnZlci0+ZGlkRHJhdyh0aGlzKTsKIH0KIAot
dm9pZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QpCiB7CiAgICAgaWYgKCFtX3NvdXJjZS5pbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm47
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQkocmV2aXNp
b24gNTA5NTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzk2LDcgKzM5Niw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6
OnBhaW50KFNjcm9sbGJhcioKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAg
ICAgICAgSElUaGVtZURyYXdUcmFjaygmdHJhY2tJbmZvLCAwLCBpbWFnZUJ1ZmZlci0+Y29udGV4
dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwga0hJVGhlbWVPcmllbnRhdGlvbk5vcm1hbCk7Ci0gICAg
ICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZUJ1ZmZlci0+aW1hZ2UoKSwgc2Nyb2xsYmFyLT5m
cmFtZVJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdl
QnVmZmVyLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBzY3JvbGxiYXItPmZyYW1lUmVjdCgp
LmxvY2F0aW9uKCkpOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gNTA5NTcpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ3Nyw3ICs0NzcsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxM
YXllCiAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRGb3JCYWNrZ3JvdW5kSW1hZ2UgPSBi
b2R5UmVuZGVyZXI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgY29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoYmctPmltYWdlKGNsaWVudEZvckJhY2tncm91bmRJ
bWFnZSwgdGlsZVNpemUpLCBkZXN0UmVjdCwgcGhhc2UsIHRpbGVTaXplLCBjb21wb3NpdGVPcCk7
CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3VGlsZWRJbWFnZShiZy0+aW1hZ2UoY2xpZW50Rm9y
QmFja2dyb3VuZEltYWdlLCB0aWxlU2l6ZSksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgZGVzdFJl
Y3QsIHBoYXNlLCB0aWxlU2l6ZSwgY29tcG9zaXRlT3ApOwogICAgICAgICB9CiAgICAgfQogCkBA
IC03MDYsNiArNzA2LDcgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnROaW5lUGll
YwogICAgICAgICAgICAgICAgICAgICAgIChpbWFnZUhlaWdodCAtIHRvcFNsaWNlIC0gYm90dG9t
U2xpY2UpID4gMCAmJiAoaCAtIHRvcFdpZHRoIC0gYm90dG9tV2lkdGgpID4gMDsKIAogICAgIElt
YWdlKiBpbWFnZSA9IHN0eWxlSW1hZ2UtPmltYWdlKHRoaXMsIGltYWdlU2l6ZSk7CisgICAgQ29s
b3JTcGFjZSBjb2xvclNwYWNlID0gc3R5bGUtPmNvbG9yU3BhY2UoKTsKIAogICAgIGlmIChkcmF3
TGVmdCkgewogICAgICAgICAvLyBQYWludCB0aGUgdG9wIGFuZCBib3R0b20gbGVmdCBjb3JuZXJz
LgpAQCAtNzEzLDE4ICs3MTQsMTggQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRO
aW5lUGllYwogICAgICAgICAvLyBUaGUgdG9wIGxlZnQgY29ybmVyIHJlY3QgaXMgKHR4LCB0eSwg
bGVmdFdpZHRoLCB0b3BXaWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8gdXNlIGZyb20gd2l0
aGluIHRoZSBpbWFnZSBpcyBvYnRhaW5lZCBmcm9tIG91ciBzbGljZSwgYW5kIGlzICgwLCAwLCBs
ZWZ0U2xpY2UsIHRvcFNsaWNlKQogICAgICAgICBpZiAoZHJhd1RvcCkKLSAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBJbnRSZWN0KHR4LCB0eSwgbGVmdFdpZHRo
LCB0b3BXaWR0aCksCisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFn
ZSwgY29sb3JTcGFjZSwgSW50UmVjdCh0eCwgdHksIGxlZnRXaWR0aCwgdG9wV2lkdGgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCgwLCAwLCBsZWZ0U2xp
Y2UsIHRvcFNsaWNlKSwgb3ApOwogCiAgICAgICAgIC8vIFRoZSBib3R0b20gbGVmdCBjb3JuZXIg
cmVjdCBpcyAodHgsIHR5ICsgaCAtIGJvdHRvbVdpZHRoLCBsZWZ0V2lkdGgsIGJvdHRvbVdpZHRo
KQogICAgICAgICAvLyBUaGUgcmVjdCB0byB1c2UgZnJvbSB3aXRoaW4gdGhlIGltYWdlIGlzICgw
LCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCBsZWZ0U2xpY2UsIGJvdG9tU2xpY2UpCiAgICAg
ICAgIGlmIChkcmF3Qm90dG9tKQotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1h
Z2UoaW1hZ2UsIEludFJlY3QodHgsIHR5ICsgaCAtIGJvdHRvbVdpZHRoLCBsZWZ0V2lkdGgsIGJv
dHRvbVdpZHRoKSwKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdl
LCBjb2xvclNwYWNlLCBJbnRSZWN0KHR4LCB0eSArIGggLSBib3R0b21XaWR0aCwgbGVmdFdpZHRo
LCBib3R0b21XaWR0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
bnRSZWN0KDAsIGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2UsIGxlZnRTbGljZSwgYm90dG9tU2xp
Y2UpLCBvcCk7CiAKICAgICAgICAgLy8gUGFpbnQgdGhlIGxlZnQgZWRnZS4KICAgICAgICAgLy8g
SGF2ZSB0byBzY2FsZSBhbmQgdGlsZSBpbnRvIHRoZSBib3JkZXIgcmVjdC4KLSAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZSwgSW50UmVjdCh0eCwgdHkgKyB0b3BX
aWR0aCwgbGVmdFdpZHRoLAorICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdl
KGltYWdlLCBjb2xvclNwYWNlLCBJbnRSZWN0KHR4LCB0eSArIHRvcFdpZHRoLCBsZWZ0V2lkdGgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCAtIHRvcFdpZHRoIC0g
Ym90dG9tV2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElu
dFJlY3QoMCwgdG9wU2xpY2UsIGxlZnRTbGljZSwgaW1hZ2VIZWlnaHQgLSB0b3BTbGljZSAtIGJv
dHRvbVNsaWNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFn
ZTo6U3RyZXRjaFRpbGUsIChJbWFnZTo6VGlsZVJ1bGUpdlJ1bGUsIG9wKTsKQEAgLTczNSwxNyAr
NzM2LDE3IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWMKICAgICAg
ICAgLy8gVGhlIHRvcCByaWdodCBjb3JuZXIgcmVjdCBpcyAodHggKyB3IC0gcmlnaHRXaWR0aCwg
dHksIHJpZ2h0V2lkdGgsIHRvcFdpZHRoKQogICAgICAgICAvLyBUaGUgcmVjdCB0byB1c2UgZnJv
bSB3aXRoaW4gdGhlIGltYWdlIGlzIG9idGFpbmVkIGZyb20gb3VyIHNsaWNlLCBhbmQgaXMgKGlt
YWdlV2lkdGggLSByaWdodFNsaWNlLCAwLCByaWdodFNsaWNlLCB0b3BTbGljZSkKICAgICAgICAg
aWYgKGRyYXdUb3ApCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFn
ZSwgSW50UmVjdCh0eCArIHcgLSByaWdodFdpZHRoLCB0eSwgcmlnaHRXaWR0aCwgdG9wV2lkdGgp
LAorICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIGNvbG9yU3Bh
Y2UsIEludFJlY3QodHggKyB3IC0gcmlnaHRXaWR0aCwgdHksIHJpZ2h0V2lkdGgsIHRvcFdpZHRo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QoaW1hZ2VX
aWR0aCAtIHJpZ2h0U2xpY2UsIDAsIHJpZ2h0U2xpY2UsIHRvcFNsaWNlKSwgb3ApOwogCiAgICAg
ICAgIC8vIFRoZSBib3R0b20gcmlnaHQgY29ybmVyIHJlY3QgaXMgKHR4ICsgdyAtIHJpZ2h0V2lk
dGgsIHR5ICsgaCAtIGJvdHRvbVdpZHRoLCByaWdodFdpZHRoLCBib3R0b21XaWR0aCkKICAgICAg
ICAgLy8gVGhlIHJlY3QgdG8gdXNlIGZyb20gd2l0aGluIHRoZSBpbWFnZSBpcyAoaW1hZ2VXaWR0
aCAtIHJpZ2h0U2xpY2UsIGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2UsIHJpZ2h0U2xpY2UsIGJv
dHRvbVNsaWNlKQogICAgICAgICBpZiAoZHJhd0JvdHRvbSkKLSAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBJbnRSZWN0KHR4ICsgdyAtIHJpZ2h0V2lkdGgsIHR5
ICsgaCAtIGJvdHRvbVdpZHRoLCByaWdodFdpZHRoLCBib3R0b21XaWR0aCksCisgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgY29sb3JTcGFjZSwgSW50UmVjdCh0
eCArIHcgLSByaWdodFdpZHRoLCB0eSArIGggLSBib3R0b21XaWR0aCwgcmlnaHRXaWR0aCwgYm90
dG9tV2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVj
dChpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSwgaW1hZ2VIZWlnaHQgLSBib3R0b21TbGljZSwgcmln
aHRTbGljZSwgYm90dG9tU2xpY2UpLCBvcCk7CiAKICAgICAgICAgLy8gUGFpbnQgdGhlIHJpZ2h0
IGVkZ2UuCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIElu
dFJlY3QodHggKyB3IC0gcmlnaHRXaWR0aCwgdHkgKyB0b3BXaWR0aCwgcmlnaHRXaWR0aCwKKyAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZSwgY29sb3JTcGFjZSwg
SW50UmVjdCh0eCArIHcgLSByaWdodFdpZHRoLCB0eSArIHRvcFdpZHRoLCByaWdodFdpZHRoLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggLSB0b3BXaWR0aCAtIGJv
dHRvbVdpZHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRS
ZWN0KGltYWdlV2lkdGggLSByaWdodFNsaWNlLCB0b3BTbGljZSwgcmlnaHRTbGljZSwgaW1hZ2VI
ZWlnaHQgLSB0b3BTbGljZSAtIGJvdHRvbVNsaWNlKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbWFnZTo6U3RyZXRjaFRpbGUsIChJbWFnZTo6VGlsZVJ1bGUpdlJ1
bGUsIG9wKTsKQEAgLTc1MywyMCArNzU0LDIwIEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OnBhaW50TmluZVBpZWMKIAogICAgIC8vIFBhaW50IHRoZSB0b3AgZWRnZS4KICAgICBpZiAoZHJh
d1RvcCkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZSwgSW50
UmVjdCh0eCArIGxlZnRXaWR0aCwgdHksIHcgLSBsZWZ0V2lkdGggLSByaWdodFdpZHRoLCB0b3BX
aWR0aCksCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGNv
bG9yU3BhY2UsIEludFJlY3QodHggKyBsZWZ0V2lkdGgsIHR5LCB3IC0gbGVmdFdpZHRoIC0gcmln
aHRXaWR0aCwgdG9wV2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEludFJlY3QobGVmdFNsaWNlLCAwLCBpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSAtIGxlZnRT
bGljZSwgdG9wU2xpY2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChJbWFnZTo6VGlsZVJ1bGUpaFJ1bGUsIEltYWdlOjpTdHJldGNoVGlsZSwgb3ApOwogCiAgICAg
Ly8gUGFpbnQgdGhlIGJvdHRvbSBlZGdlLgogICAgIGlmIChkcmF3Qm90dG9tKQotICAgICAgICBn
cmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLCBJbnRSZWN0KHR4ICsgbGVmdFdp
ZHRoLCB0eSArIGggLSBib3R0b21XaWR0aCwKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3
VGlsZWRJbWFnZShpbWFnZSwgY29sb3JTcGFjZSwgSW50UmVjdCh0eCArIGxlZnRXaWR0aCwgdHkg
KyBoIC0gYm90dG9tV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdyAtIGxlZnRXaWR0aCAtIHJpZ2h0V2lkdGgsIGJvdHRvbVdpZHRoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KGxlZnRTbGljZSwgaW1hZ2VIZWln
aHQgLSBib3R0b21TbGljZSwgaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UgLSBsZWZ0U2xpY2UsIGJv
dHRvbVNsaWNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW1h
Z2U6OlRpbGVSdWxlKWhSdWxlLCBJbWFnZTo6U3RyZXRjaFRpbGUsIG9wKTsKIAogICAgIC8vIFBh
aW50IHRoZSBtaWRkbGUuCiAgICAgaWYgKGRyYXdNaWRkbGUpCi0gICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIEludFJlY3QodHggKyBsZWZ0V2lkdGgsIHR5ICsg
dG9wV2lkdGgsIHcgLSBsZWZ0V2lkdGggLSByaWdodFdpZHRoLAorICAgICAgICBncmFwaGljc0Nv
bnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLCBjb2xvclNwYWNlLCBJbnRSZWN0KHR4ICsgbGVm
dFdpZHRoLCB0eSArIHRvcFdpZHRoLCB3IC0gbGVmdFdpZHRoIC0gcmlnaHRXaWR0aCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoIC0gdG9wV2lkdGggLSBib3R0b21X
aWR0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdChs
ZWZ0U2xpY2UsIHRvcFNsaWNlLCBpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSAtIGxlZnRTbGljZSwg
aW1hZ2VIZWlnaHQgLSB0b3BTbGljZSAtIGJvdHRvbVNsaWNlKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoSW1hZ2U6OlRpbGVSdWxlKWhSdWxlLCAoSW1hZ2U6OlRp
bGVSdWxlKXZSdWxlLCBvcCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZp
c2lvbiA1MDk1NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzg2LDcgKzM4Niw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50UmVwbGFj
ZWQoUGFpbnRJbmYKICAgICAgICAgICAgICAgICAgICAgY2VudGVyWSA9IDA7CiAgICAgICAgICAg
ICAgICAgaW1hZ2VYID0gbGVmdEJvcmRlciArIGxlZnRQYWQgKyBjZW50ZXJYICsgMTsKICAgICAg
ICAgICAgICAgICBpbWFnZVkgPSB0b3BCb3JkZXIgKyB0b3BQYWQgKyBjZW50ZXJZICsgMTsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UoKSwgSW50UG9pbnQodHggKyBp
bWFnZVgsIHR5ICsgaW1hZ2VZKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdl
KGltYWdlKCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgSW50UG9pbnQodHggKyBpbWFnZVgsIHR5
ICsgaW1hZ2VZKSk7CiAgICAgICAgICAgICAgICAgZXJyb3JQaWN0dXJlRHJhd24gPSB0cnVlOwog
ICAgICAgICAgICAgfQogCkBAIC00MjQsNyArNDI0LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFp
bnRSZXBsYWNlZChQYWludEluZgogICAgICAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQodHggKyBs
ZWZ0Qm9yZGVyICsgbGVmdFBhZCwgdHkgKyB0b3BCb3JkZXIgKyB0b3BQYWQpLCBjb250ZW50U2l6
ZSk7CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWx0ID0gKG5vZGUoKSAmJiBub2Rl
KCktPmhhc1RhZ05hbWUoaW1nVGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4o
bm9kZSgpKSA6IDA7CiAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
ID0gaW1hZ2VFbHQgPyBpbWFnZUVsdC0+Y29tcG9zaXRlT3BlcmF0b3IoKSA6IENvbXBvc2l0ZVNv
dXJjZU92ZXI7Ci0gICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZShjV2lkdGgsIGNIZWln
aHQpLCByZWN0LCBjb21wb3NpdGVPcGVyYXRvciwgdXNlTG93UXVhbGl0eVNjYWxpbmcpOworICAg
ICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UoY1dpZHRoLCBjSGVpZ2h0KSwgc3R5bGUoKS0+
Y29sb3JTcGFjZSgpLCByZWN0LCBjb21wb3NpdGVPcGVyYXRvciwgdXNlTG93UXVhbGl0eVNjYWxp
bmcpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNp
b24gNTA5NTcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5NDMsNyArMTk0Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXpl
cihHcmFwaGljc0MKICAgICAvLyBQYWludCB0aGUgcmVzaXplciBjb250cm9sLgogICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoUmVmUHRyPEltYWdlPiwgcmVzaXplQ29ybmVySW1hZ2UsIChJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIikpKTsKICAgICBJbnRQ
b2ludCBpbWFnZVBvaW50KGFic1JlY3QucmlnaHQoKSAtIHJlc2l6ZUNvcm5lckltYWdlLT53aWR0
aCgpLCBhYnNSZWN0LmJvdHRvbSgpIC0gcmVzaXplQ29ybmVySW1hZ2UtPmhlaWdodCgpKTsKLSAg
ICBjb250ZXh0LT5kcmF3SW1hZ2UocmVzaXplQ29ybmVySW1hZ2UuZ2V0KCksIGltYWdlUG9pbnQp
OworICAgIGNvbnRleHQtPmRyYXdJbWFnZShyZXNpemVDb3JuZXJJbWFnZS5nZXQoKSwgYm94LT5z
dHlsZSgpLT5jb2xvclNwYWNlKCksIGltYWdlUG9pbnQpOwogCiAgICAgLy8gRHJhdyBhIGZyYW1l
IGFyb3VuZCB0aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3Jv
bGxiYXJzIHByZXNlbnQuCiAgICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNsdWRlIHRoZSByaWdodCBh
bmQgYm90dG9tIGVkZ2VzIG9mIHRoaXMgZnJhbWUuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gNTA5NTcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQzLDcgKzU0Myw3IEBAIHZv
aWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICAgICAgaWYgKHN0eWxl
KCktPmhpZ2hsaWdodCgpICE9IG51bGxBdG9tICYmICFwYWludEluZm8uY29udGV4dC0+cGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICAgICAgcGFpbnRDdXN0b21IaWdobGlnaHQodHgsIHR5LCBz
dHlsZSgpLT5oaWdobGlnaHQoKSwgdHJ1ZSk7CiAjZW5kaWYKLSAgICAgICAgY29udGV4dC0+ZHJh
d0ltYWdlKG1faW1hZ2UtPmltYWdlKHRoaXMsIG1hcmtlci5zaXplKCkpLCBtYXJrZXIubG9jYXRp
b24oKSk7CisgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2ltYWdlLT5pbWFnZSh0aGlzLCBt
YXJrZXIuc2l6ZSgpKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBtYXJrZXIubG9jYXRpb24oKSk7
CiAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUpIHsKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBzZWxlY3Rpb25SZWN0KCkgaXMgaW4gYWJzb2x1dGUsIG5vdCBwYWlu
dGluZyBjb29yZGluYXRlcy4KICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KHNlbGVjdGlv
blJlY3QoKSwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCksIHN0eWxlKCktPmNvbG9yU3BhY2Uo
KSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiA1MDk1
NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnBhaW50KFBhaW50SW5m
byYgcGEKICAgICAgICAgaWYgKGltYWdlRWx0LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCktPmFsaWdu
KCkgIT0gU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9O
RSkKICAgICAgICAgICAgIGFkanVzdFJlY3RzRm9yQXNwZWN0UmF0aW8oZGVzdFJlY3QsIHNyY1Jl
Y3QsIGltYWdlRWx0LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOwogCi0gICAgICAgIHBhaW50SW5m
by5jb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UoKSwgZGVzdFJlY3QsIHNyY1JlY3QpOworICAgICAg
ICBwYWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlKCksIERldmljZUNvbG9yU3BhY2Us
IGRlc3RSZWN0LCBzcmNSZWN0KTsKICAgICAgICAgZmluaXNoUmVuZGVyU1ZHQ29udGVudCh0aGlz
LCBwYWludEluZm8sIGZpbHRlciwgc2F2ZWRJbmZvLmNvbnRleHQpOwogICAgIH0KIApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCShyZXZpc2lvbiA1MDk1NykKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw3ICsyNjAs
NyBAQCB2b2lkIFJlbmRlcldpZGdldDo6cGFpbnQoUGFpbnRJbmZvJiBwYWluCiAgICAgICAgIC8v
IFRlbGwgdGhlIHdpZGdldCB0byBwYWludCBub3cuICBUaGlzIGlzIHRoZSBvbmx5IHRpbWUgdGhl
IHdpZGdldCBpcyBhbGxvd2VkCiAgICAgICAgIC8vIHRvIHBhaW50IGl0c2VsZi4gIFRoYXQgd2F5
IGl0IHdpbGwgY29tcG9zaXRlIHByb3Blcmx5IHdpdGggei1pbmRleGVkIGxheWVycy4KICAgICAg
ICAgaWYgKG1fc3Vic3RpdHV0ZUltYWdlKQotICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PmRyYXdJbWFnZShtX3N1YnN0aXR1dGVJbWFnZS5nZXQoKSwgbV93aWRnZXQtPmZyYW1lUmVjdCgp
KTsKKyAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2UobV9zdWJzdGl0dXRl
SW1hZ2UuZ2V0KCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgbV93aWRnZXQtPmZyYW1lUmVjdCgp
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV93aWRnZXQtPnBhaW50KHBhaW50SW5mby5j
b250ZXh0LCBwYWludEluZm8ucmVjdCk7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5j
cHAJKHJldmlzaW9uIDUwOTU3KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgYm9vbCBTVkdJbWFnZTo6aGFzUmVs
YXRpdmVIZWlnaHQoKSBjb25zdAogICAgIHJldHVybiByb290RWxlbWVudC0+aGVpZ2h0KCkudW5p
dFR5cGUoKSA9PSBMZW5ndGhUeXBlUGVyY2VudGFnZTsKIH0KIAotdm9pZCBTVkdJbWFnZTo6ZHJh
dyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3Zv
aWQgU1ZHSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJl
dHVybjsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gNTA5NTcpCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2
NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0
ciBmcmFtZUF0SW5kZXgoc2l6ZV90KSB7IHJldHVybiAwOyB9CiAgICAgICAgIAogICAgICAgICBT
VkdJbWFnZShJbWFnZU9ic2VydmVyKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZnJvbVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dG9SZWN0LCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZnJvbVJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgdG9SZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgICAgIAogICAg
ICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7
CiAgICAgICAgIApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJQYXR0
ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZl
clBhdHRlcm4uY3BwCShyZXZpc2lvbiA1MDk1NykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R1BhaW50U2VydmVyUGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw3ICsxMzEsNyBA
QCBib29sIFNWR1BhaW50U2VydmVyUGF0dGVybjo6c2V0dXAoR3JhcGhpCiAgICAgICAgICAgICB0
aWxlSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoMCwgcGF0dGVybkJvdW5kYXJpZXMoKS5oZWlnaHQo
KSk7CiAgICAgICAgICAgICBmb3IgKGludCBqID0gbnVtWDsgaiA+IDA7IGotLSkgewogICAgICAg
ICAgICAgICAgIHRpbGVJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZShwYXR0ZXJuQm91bmRhcmllcygp
LndpZHRoKCksIDApOwotICAgICAgICAgICAgICAgIHRpbGVJbWFnZUNvbnRleHQtPmRyYXdJbWFn
ZSh0aWxlKCktPmltYWdlKCksIHRpbGVSZWN0LCB0aWxlUmVjdCk7CisgICAgICAgICAgICAgICAg
dGlsZUltYWdlQ29udGV4dC0+ZHJhd0ltYWdlKHRpbGUoKS0+aW1hZ2UoKSwgb2JqZWN0LT5zdHls
ZSgpLT5jb2xvclNwYWNlKCksIHRpbGVSZWN0LCB0aWxlUmVjdCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB0aWxlSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLXBhdHRlcm5Cb3VuZGFyaWVz
KCkud2lkdGgoKSAqIG51bVgsIDApOwogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdSZXNvdXJjZUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCShyZXZpc2lvbiA1MDk1NykKKysrIFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR1Jlc291cmNlRmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEs
NyArOTEsNyBAQCB2b2lkIFNWR1Jlc291cmNlRmlsdGVyOjpwcmVwYXJlRmlsdGVyKEdyCiAgICAg
Y29udGV4dCA9IHNvdXJjZUdyYXBoaWNDb250ZXh0OwogfQogCi12b2lkIFNWR1Jlc291cmNlRmls
dGVyOjphcHBseUZpbHRlcihHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJP
YmplY3QqKQordm9pZCBTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlGaWx0ZXIoR3JhcGhpY3NDb250
ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgaWYgKCFt
X3NhdmVkQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTEzLDcgKzExMywxMCBAQCB2b2lk
IFNWR1Jlc291cmNlRmlsdGVyOjphcHBseUZpbHRlcihHcmFwCiAjaWYgIVBMQVRGT1JNKENHKQog
ICAgICAgICAgICAgcmVzdWx0SW1hZ2UtPnRyYW5zZm9ybUNvbG9yU3BhY2UoTGluZWFyUkdCLCBE
ZXZpY2VSR0IpOwogI2VuZGlmCi0gICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UocmVzdWx0
SW1hZ2UtPmltYWdlKCksIGxhc3RFZmZlY3QtPnN1YlJlZ2lvbigpKTsKKyAgICAgICAgICAgIENv
bG9yU3BhY2UgY29sb3JTcGFjZSA9IERldmljZUNvbG9yU3BhY2U7CisgICAgICAgICAgICBpZiAo
b2JqZWN0KQorICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBvYmplY3QtPnN0eWxlKCktPmNv
bG9yU3BhY2UoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShyZXN1bHRJbWFnZS0+
aW1hZ2UoKSwgbGFzdEVmZmVjdC0+c3ViUmVnaW9uKCksIGNvbG9yU3BhY2UpOwogICAgICAgICB9
CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJn
ZS5jcHAJKHJldmlzaW9uIDUwOTU3KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRU1lcmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCB2b2lkIEZFTWVy
Z2U6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbWVyZ2VJbnB1dHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0
ID0gY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9tZXJnZUlucHV0c1tpXS0+c3ViUmVnaW9uKCkpOwot
ICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9tZXJnZUlucHV0c1tpXS0+cmVzdWx0
SW1hZ2UoKS0+aW1hZ2UoKSwgZGVzdFJlY3QpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3
SW1hZ2UobV9tZXJnZUlucHV0c1tpXS0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgZGVzdFJlY3Qs
IERldmljZUNvbG9yU3BhY2UpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAJKHJldmlzaW9uIDUwOTU3KQorKysgV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg0LDcgKzg0LDcgQEAgdm9pZCBGRU9mZnNldDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbi0+c3ViUmVnaW9uKCkud2lkdGgoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luLT5zdWJSZWdpb24oKS5oZWln
aHQoKSk7CiAKLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2Uo
KS0+aW1hZ2UoKSwgZHN0UmVjdCk7CisgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4t
PnJlc3VsdEltYWdlKCktPmltYWdlKCksIGRzdFJlY3QsIERldmljZUNvbG9yU3BhY2UpOwogfQog
CiB2b2lkIEZFT2Zmc2V0OjpkdW1wKCkKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVUaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFVGlsZS5jcHAJKHJldmlzaW9uIDUwOTU3KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBA
IHZvaWQgRkVUaWxlOjphcHBseShGaWx0ZXIqIGZpbHRlcikKIAogICAgIE93blB0cjxJbWFnZUJ1
ZmZlcj4gdGlsZUltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0aWxlUmVjdC5zaXplKCkpOwog
ICAgIEdyYXBoaWNzQ29udGV4dCogdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4
dCgpOwotICAgIHRpbGVJbWFnZUNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgp
LT5pbWFnZSgpLCBJbnRQb2ludCgpKTsKKyAgICB0aWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2Uo
bV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgSW50UG9pbnQoKSwgRGV2aWNlQ29sb3JTcGFj
ZSk7CiAgICAgUmVmUHRyPFBhdHRlcm4+IHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUlt
YWdlLT5pbWFnZSgpLCB0cnVlLCB0cnVlKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1h
dHJpeDsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDUwOTg2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDktMTEtMTMgIEJldGggRGFraW4g
IDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRlc3RzIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzEzMjEgTWFrZSAKKyAgICAgICAgLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uIHdvcmsg
d2l0aCB1bnRhZ2dlZCBpbWFnZXMKKworICAgICAgICAqIGZhc3QvY3NzL2NvbG9yLWNvcnJlY3Rp
b24tb24tYmFja2dyb3VuZC1pbWFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9j
b2xvci1jb3JyZWN0aW9uLXVudGFnZ2VkLWltYWdlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2Nzcy9yZXNvdXJjZXMvcHVycGxlLW5vcHJvZmlsZS5wbmc6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLW9uLWJhY2tncm91bmQtaW1h
Z2UtZXhwZWN0ZWQuY2hlY2tzdW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0
L2Nzcy9jb2xvci1jb3JyZWN0aW9uLW9uLWJhY2tncm91bmQtaW1hZ2UtZXhwZWN0ZWQucG5nOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1v
bi1iYWNrZ3JvdW5kLWltYWdlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tdW50YWdnZWQtaW1hZ2VzLWV4cGVjdGVk
LmNoZWNrc3VtOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3It
Y29ycmVjdGlvbi11bnRhZ2dlZC1pbWFnZXMtZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi11bnRhZ2dlZC1pbWFnZXMt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKwogMjAwOS0xMS0xMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAg
PGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBEaXNhYmxlIHdlYnNvY2tldCB0ZXN0cyBvbiBUaWdl
ciwgYXMgdGhleSB0aW1lIG91dC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3NzL2NvbG9yLWNv
cnJlY3Rpb24tb24tYmFja2dyb3VuZC1pbWFnZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tb24tYmFja2dyb3VuZC1pbWFnZS5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi1i
YWNrZ3JvdW5kLWltYWdlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKKzxodG1s
PgorPHN0eWxlPgorLnB1cnBsZSB7CisgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdyZXNvdXJj
ZXMvcHVycGxlLW5vcHJvZmlsZS5wbmcnKTsKKyAgICB3aWR0aDogNDAwcHg7CisgICAgaGVpZ2h0
OiA0MDBweDsKKyAgICBmbG9hdDogbGVmdDsKK30KKzwvc3R5bGU+CisKKzxib2R5PgorCis8cD5U
aGUgdHdvIHNxdWFyZXMgYmVsb3cgc2hvdWxkIG5vdCBtYXRjaCBlYWNoIG90aGVyLiBPbiB0aGUg
bGVmdCBhbiB1bmNvcnJlY3RlZCBpbWFnZSBpcyB0aWxlZCBhcyBhIGJhY2tncm91bmQsIGFuZCBv
biB0aGUgcmlnaHQgdGhlIHNhbWUgaW1hZ2UgaXMgdGlsZWQgYXMgYSBiYWNrZ3JvdW5kLCBidXQg
aXQgaXMgY29ycmVjdGVkIGZyb20gc1JHQi48L3A+Cis8ZGl2IGNsYXNzPSJwdXJwbGUiPjwvZGl2
PgorPGRpdiBjbGFzcz0icHVycGxlIiBzdHlsZT0iLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOiBz
UkdCOyI+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
Y3NzL2NvbG9yLWNvcnJlY3Rpb24tdW50YWdnZWQtaW1hZ2VzLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi11bnRhZ2dlZC1pbWFnZXMuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24t
dW50YWdnZWQtaW1hZ2VzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKKzxodG1s
PgorPHN0eWxlPgorLnB1cnBsZSB7CisgICAgYm9yZGVyOiBzb2xpZCAyMHB4ICM1NjAwNjM7Cisg
ICAgZmxvYXQ6IGxlZnQ7Cit9Cis8L3N0eWxlPgorCis8Ym9keT4KKzxwPlRoZSB0d28gc3F1YXJl
cyBiZWxvdyBzaG91bGQgbm90IG1hdGNoIGVhY2ggb3RoZXIuIE9uIHRoZSBsZWZ0IGlzIGFuIHVu
Y29ycmVjdGVkIGltYWdlIGFuZCBib3JkZXIsIGFuZCBvbiB0aGUgcmlnaHQgaXMgdGhlIHNhbWUg
aW1hZ2UgYW5kIHNhbWUgYm9yZGVyIGNvbG9yIGNvcnJlY3RlZCBmcm9tIHNSR0IuPC9wPgorPGlt
ZyBzcmM9InJlc291cmNlcy9wdXJwbGUtbm9wcm9maWxlLnBuZyIgY2xhc3M9InB1cnBsZSIgLz4K
KzxpbWcgc3JjPSJyZXNvdXJjZXMvcHVycGxlLW5vcHJvZmlsZS5wbmciIGNsYXNzPSJwdXJwbGUi
IHN0eWxlPSItd2Via2l0LWNvbG9yLWNvcnJlY3Rpb246c1JHQjsiIC8+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVj
dGlvbi1vbi1iYWNrZ3JvdW5kLWltYWdlLWV4cGVjdGVkLmNoZWNrc3VtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLW9uLWJh
Y2tncm91bmQtaW1hZ2UtZXhwZWN0ZWQuY2hlY2tzdW0JKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi1iYWNrZ3JvdW5k
LWltYWdlLWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitjNTM2
Y2M2YTRkNzJhZTc3MmUzNTM4NDRlZjlhMWI3NApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9u
LW9uLWJhY2tncm91bmQtaW1hZ2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLW9uLWJhY2tncm91bmQt
aW1hZ2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tb24tYmFja2dyb3VuZC1pbWFnZS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK2xheWVyIGF0ICgwLDApIHNpemUg
Nzg1eDg2MAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgNzg1eDYwMAorbGF5ZXIgYXQgKDAs
MCkgc2l6ZSA3ODV4ODYwCisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDc4NXg2
MDAKKyAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc2OXg1NzYKKyAgICAgIFJl
bmRlckJsb2NrIHtQfSBhdCAoMCwwKSBzaXplIDc2OXgzNgorICAgICAgICBSZW5kZXJUZXh0IHsj
dGV4dH0gYXQgKDAsMCkgc2l6ZSA3Njh4MzYKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3
aWR0aCA3Njg6ICJUaGUgdHdvIHNxdWFyZXMgYmVsb3cgc2hvdWxkIG5vdCBtYXRjaCBlYWNoIG90
aGVyLiBPbiB0aGUgbGVmdCBhbiB1bmNvcnJlY3RlZCBpbWFnZSBpcyB0aWxlZCBhcyBhIGJhY2tn
cm91bmQsIGFuZCBvbiB0aGUiCisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMTgpIHdpZHRoIDQ4
MDogInJpZ2h0IHRoZSBzYW1lIGltYWdlIGlzIHRpbGVkIGFzIGEgYmFja2dyb3VuZCwgYnV0IGl0
IGlzIGNvcnJlY3RlZCBmcm9tIHNSR0IuIgorICAgICAgUmVuZGVyQmxvY2sgKGZsb2F0aW5nKSB7
RElWfSBhdCAoMCw1Mikgc2l6ZSA0MDB4NDAwCisgICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcp
IHtESVZ9IGF0ICgwLDQ1Mikgc2l6ZSA0MDB4NDAwCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi11bnRhZ2dlZC1pbWFnZXMtZXhwZWN0ZWQu
Y2hlY2tzdW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvY3Nz
L2NvbG9yLWNvcnJlY3Rpb24tdW50YWdnZWQtaW1hZ2VzLWV4cGVjdGVkLmNoZWNrc3VtCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJl
Y3Rpb24tdW50YWdnZWQtaW1hZ2VzLWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxIEBACis5MDQyZTljMWNkOTg2Y2NlYjZmMzQ2ZTM2ZWViYWU3MApcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9j
b2xvci1jb3JyZWN0aW9uLXVudGFnZ2VkLWltYWdlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tdW50
YWdnZWQtaW1hZ2VzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLXVudGFnZ2VkLWltYWdlcy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK2xheWVyIGF0ICgwLDApIHNp
emUgODAweDYwMAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAorbGF5ZXIgYXQg
KDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgw
MHg2MDAKKyAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1NzYKKyAgICAg
IFJlbmRlckJsb2NrIHtQfSBhdCAoMCwwKSBzaXplIDc4NHgzNgorICAgICAgICBSZW5kZXJUZXh0
IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA3NzJ4MzYKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCww
KSB3aWR0aCA3NzI6ICJUaGUgdHdvIHNxdWFyZXMgYmVsb3cgc2hvdWxkIG5vdCBtYXRjaCBlYWNo
IG90aGVyLiBPbiB0aGUgbGVmdCBpcyBhbiB1bmNvcnJlY3RlZCBpbWFnZSBhbmQgYm9yZGVyLCBh
bmQgb24gdGhlIHJpZ2h0IGlzIHRoZSIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwxOCkgd2lk
dGggMzYyOiAic2FtZSBpbWFnZSBhbmQgc2FtZSBib3JkZXIgY29sb3IgY29ycmVjdGVkIGZyb20g
c1JHQi4iCisgICAgICBSZW5kZXJJbWFnZSB7SU1HfSBhdCAoMCw1Mikgc2l6ZSAxNDB4MTQwIFti
b3JkZXI6ICgyMHB4IHNvbGlkICM1NjAwNjMpXQorICAgICAgUmVuZGVySW1hZ2Uge0lNR30gYXQg
KDE0MCw1Mikgc2l6ZSAxNDB4MTQwIFtib3JkZXI6ICgyMHB4IHNvbGlkICM1NjAwNjMpXQo=
</data>
<flag name="review"
          id="24917"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43321</attachid>
            <date>2009-11-16 14:08:12 -0800</date>
            <delta_ts>2009-11-19 13:54:22 -0800</delta_ts>
            <desc>New patch</desc>
            <filename>forReview2.txt</filename>
            <type>text/plain</type>
            <size>67517</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTA1MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA3IEBACisyMDA5LTExLTE2ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXgg
Zm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTMyMSBNYWtlIC13
ZWJraXQtCisgICAgICAgIGNvbG9yLWNvcnJlY3Rpb24gd29yayB3aXRoIHVudGFnZ2VkIGltYWdl
cworCisgICAgICAgIEltYWdlJ3MgZHJhdygpLCBkcmF3UGF0dGVybigpLCBhbmQgZmlsbFdpdGhT
b2xpZENvbG9yKCkgZnVuY3Rpb25zIAorICAgICAgICBub3cgdGFrZSBhIENvbG9yU3BhY2UuIEEg
YnVuY2ggb2YgY2xhc3NlcyBpbmhlcml0IGZyb20gSW1hZ2UsIHNvIAorICAgICAgICBkcmF3KCkg
YW5kIGRyYXdQYXR0ZXJuKCkgZnVuY3Rpb25zIHRoZXJlIG11c3QgYWxzbyB0YWtlIGEgCisgICAg
ICAgIENvbG9yU3BhY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmZpbGxXaXRoU29saWRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZTo6ZHJhd1RpbGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R2VuZXJhdGVkSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJhdGVk
SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0
ZWRJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZHJhdyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oOgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6
ZHJhdyk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmg6CisKKyAgICAgICAgQWxs
IG9mIHRoZSBkcmF3SW1hZ2UoKSBmdW5jdGlvbnMgYW5kIGRyYXdUaWxlZCgpIGZ1bmN0aW9ucyBv
ZiAKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IG5vdyB0YWtlIGEgQ29sb3JTcGFjZS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0Lmg6CisKKyAgICAgICAgVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFs
IHdvcmsgaXMgZG9uZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmltYWdlV2l0aENvbG9yU3BhY2UpOiBOZXcgc3RhdGljIGZ1
bmN0aW9uIHRoYXQgcmV0dXJucyBhIAorICAgICAgICBjb3B5IG9mIHRoZSBnaXZlbiBpbWFnZSBp
biB0aGUgZ2l2ZW4gQ29sb3JTcGFjZSAqSUYqIHdlIHNob3VsZCB1c2UgCisgICAgICAgIHRoZSBn
aXZlbiBDb2xvclNwYWNlLiBXZSB3aWxsIGlnbm9yZSB0aGUgY29sb3Igc3BhY2UgaWYgdGhlIGlt
YWdlIAorICAgICAgICBpcyB0YWdnZWQgYW5kIHJldHVybiAwLiAKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpkcmF3KTogTm93IHRha2VzIGEgQ29sb3JTcGFjZSBhbmQgdXNlcyBpdCB0
byAKKyAgICAgICAgY2FsbCBpbWFnZVdpdGhDb2xvclNwYWNlKCkuIAorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKTogU2FtZS4KKworICAgICAgICBBdHRlbXB0IHRvIGtlZXAg
YWxsIHBvcnRzIGJ1aWxkaW5nLiAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpk
cmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2luZ2xl
RnJhbWVTa2lhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
U2luZ2xlRnJhbWVTa2lhOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9J
bWFnZVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3UGF0dGVybik6CisKKyAgICAgICAgQ2FsbGVy
cyBvZiBHcmFwaGljc0NvbnRleHQncyBkcmF3SW1hZ2UoKSBhbmQgZHJhd1RpbGVkKCkgZnVuY3Rp
b25zIAorICAgICAgICBub3cgbmVlZCB0byBzZW5kIGEgQ29sb3JTcGFjZS4KKyAgICAgICAgKiBo
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpwYWludCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlRnJvbVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxFdmVudCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29sb3JNYXRyaXg6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjph
cHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGlj
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJUaGVtZU1hYzo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6cGFpbnROaW5lUGllY2VJbWFnZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpwYWludFJlcGxhY2Vk
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnBhaW50UmVzaXplcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxpc3RNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6cGFp
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJXaWRnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0OjpwYWludCk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyUGF0dGVybi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYWludFNlcnZlclBhdHRlcm46OnNldHVwKToKKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVz
b3VyY2VGaWx0ZXI6OmFwcGx5RmlsdGVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmFwcGx5KToKKyAg
ICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRU9mZnNldDo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmFwcGx5KToKKwogMjAw
OS0xMS0xNiAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDUxMDQzKQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6
OnBhaW50KEdyYXBoaWNzQ28KICAgICBpZiAobV9pbWFnZUJ1ZmZlcikgewogICAgICAgICBJbWFn
ZSogaW1hZ2UgPSBtX2ltYWdlQnVmZmVyLT5pbWFnZSgpOwogICAgICAgICBpZiAoaW1hZ2UpCi0g
ICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIHIpOworICAgICAgICAgICAgY29u
dGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBEZXZpY2VDb2xvclNwYWNlLCByKTsKICAgICB9CiAKICNp
ZiBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gNTEwNDMpCisrKyBXZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMDIsNyArMTAwMiw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1h
Z2UKICAgICBGbG9hdFJlY3Qgc291cmNlUmVjdCA9IGMtPnJvdW5kVG9EZXZpY2VQaXhlbHMoc3Jj
UmVjdCk7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gYy0+cm91bmRUb0RldmljZVBpeGVscyhk
c3RSZWN0KTsKICAgICB3aWxsRHJhdyhkZXN0UmVjdCk7Ci0gICAgYy0+ZHJhd0ltYWdlKGNhY2hl
ZEltYWdlLT5pbWFnZSgpLCBkZXN0UmVjdCwgc291cmNlUmVjdCwgc3RhdGUoKS5tX2dsb2JhbENv
bXBvc2l0ZSk7CisgICAgYy0+ZHJhd0ltYWdlKGNhY2hlZEltYWdlLT5pbWFnZSgpLCBEZXZpY2VD
b2xvclNwYWNlLCBkZXN0UmVjdCwgc291cmNlUmVjdCwgc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0
ZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTENh
bnZhc0VsZW1lbnQqIGNhbnZhcywgZmxvYXQgeCwgZmxvYXQgeSkKQEAgLTEwNTIsNyArMTA1Miw3
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UKICAgICBpZiAoIXNv
dXJjZUNhbnZhcy0+b3JpZ2luQ2xlYW4oKSkKICAgICAgICAgY2FudmFzKCktPnNldE9yaWdpblRh
aW50ZWQoKTsKIAotICAgIGMtPmRyYXdJbWFnZShidWZmZXItPmltYWdlKCksIGRlc3RSZWN0LCBz
b3VyY2VSZWN0LCBzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlKTsKKyAgICBjLT5kcmF3SW1hZ2Uo
YnVmZmVyLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkZXN0UmVjdCwgc291cmNlUmVjdCwg
c3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSk7CiAgICAgd2lsbERyYXcoZGVzdFJlY3QpOyAvLyBU
aGlzIGNhbGwgY29tZXMgYWZ0ZXIgZHJhd0ltYWdlLCBzaW5jZSB0aGUgYnVmZmVyIHdlIGRyYXcg
aW50byBtYXkgYmUgb3VyIG93biwgYW5kIHdlIG5lZWQgdG8gbWFrZSBzdXJlIGl0IGlzIGRpcnR5
LgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEFyZ3VhYmx5IHdpbGxEcmF3IHNo
b3VsZCBiZWNvbWUgZGlkRHJhdyBhbmQgb2NjdXIgYWZ0ZXIgZHJhd2luZyBjYWxscyBhbmQgbm90
IGJlZm9yZSB0aGVtIHRvIGF2b2lkIHByb2JsZW1zIGxpa2UgdGhpcy4KIH0KQEAgLTExNDYsNyAr
MTE0Niw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UKIAogICAg
IEZsb2F0UmVjdCBkZXN0UmVjdCA9IEZsb2F0UmVjdChkeCwgZHksIGR3LCBkaCk7CiAgICAgd2ls
bERyYXcoZGVzdFJlY3QpOwotICAgIGMtPmRyYXdJbWFnZShjYWNoZWRJbWFnZS0+aW1hZ2UoKSwg
ZGVzdFJlY3QsIEZsb2F0UmVjdChzeCwgc3ksIHN3LCBzaCksIG9wKTsKKyAgICBjLT5kcmF3SW1h
Z2UoY2FjaGVkSW1hZ2UtPmltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBGbG9h
dFJlY3Qoc3gsIHN5LCBzdywgc2gpLCBvcCk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzZXRBbHBoYShmbG9hdCBhbHBoYSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNw
cAkocmV2aXNpb24gNTEwNDMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NjQsNyArNzY0LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpwYWludFNj
cm9sbGJhcnMoR3JhcGhpYwogdm9pZCBTY3JvbGxWaWV3OjpwYWludFBhblNjcm9sbEljb24oR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0KQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoSW1hZ2Uq
LCBwYW5TY3JvbGxJY29uLCAoSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJwYW5JY29uIiku
cmVsZWFzZVJlZigpKSk7Ci0gICAgY29udGV4dC0+ZHJhd0ltYWdlKHBhblNjcm9sbEljb24sIG1f
cGFuU2Nyb2xsSWNvblBvaW50KTsKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UocGFuU2Nyb2xsSWNv
biwgRGV2aWNlQ29sb3JTcGFjZSwgbV9wYW5TY3JvbGxJY29uUG9pbnQpOwogfQogCiB2b2lkIFNj
cm9sbFZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cmVjdCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHJldmlz
aW9uIDUxMDQzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjUsMTMgKzE2NSwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgQml0bWFw
SW1hZ2UoSW1hZ2VPYnNlcnZlciogPSAwKTsKIAogI2lmIFBMQVRGT1JNKFdJTikKLSAgICB2aXJ0
dWFsIHZvaWQgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRl
T3BlcmF0b3IpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXpl
JiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Ip
OwogI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9w
ZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAogI2lmIFBMQVRGT1JNKFdYKSB8
fCAoUExBVEZPUk0oV0lOQ0UpICYmICFQTEFURk9STShRVCkpCiAgICAgdmlydHVhbCB2b2lkIGRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb21wb3NpdGVPcGVyYXRv
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOwogI2VuZGlmCiAK
ICNpZiBQTEFURk9STShIQUlLVSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2Vu
ZXJhdGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R2VuZXJhdGVkSW1hZ2UuY3BwCShyZXZpc2lvbiA1MTA0MykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBH
ZW5lcmF0ZWRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcCkKK3ZvaWQgR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAg
Y29udGV4dC0+c2F2ZSgpOwogICAgIGNvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21w
b3NpdGVPcCk7CkBAIC00OCw3ICs0OCw3IEBAIHZvaWQgR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3Jh
cGhpY3NDb250ZXgKIH0KIAogdm9pZCBHZW5lcmF0ZWRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCkKIHsKICAgICAvLyBDcmVhdGUgYSBCaXRtYXBJbWFnZSBhbmQgY2FsbCBkcmF3
UGF0dGVybiBvbiBpdC4KICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShtX3NpemUpOwpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIEdlbmVyYXRl
ZEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljCiAgICAgSW1hZ2UqIGJpdG1hcCA9IGltYWdlQnVm
ZmVyLT5pbWFnZSgpOwogICAgIAogICAgIC8vIE5vdyBqdXN0IGNhbGwgZHJhd1RpbGVkIG9uIHRo
YXQgaW1hZ2UuCi0gICAgYml0bWFwLT5kcmF3UGF0dGVybihjb250ZXh0LCBzcmNSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgY29tcG9zaXRlT3AsIGRlc3RSZWN0KTsKKyAgICBiaXRtYXAt
PmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
dHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBkZXN0UmVjdCk7CiB9CiAKIH0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgJKHJldmlzaW9uIDUxMDQz
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw5ICs1Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGRl
Y29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVh
bCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yKTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CiAgICAgCiAgICAgR2VuZXJhdGVkSW1hZ2UoUGFzc1Jl
ZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAg
OiBtX2dlbmVyYXRvcihnZW5lcmF0b3IpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiA1MTA0MykKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA2
LDI0ICszMDYsMjQgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQ6OnBhaW50aW5nRGlzYWJsZWQoKQog
ICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZDsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBw
LCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2Uo
SW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQm
IHAsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewotICAgIGRyYXdJbWFnZShpbWFnZSwgcCwgSW50
UmVjdCgwLCAwLCAtMSwgLTEpLCBvcCk7CisgICAgZHJhd0ltYWdlKGltYWdlLCBzdHlsZUNvbG9y
U3BhY2UsIHAsIEludFJlY3QoMCwgMCwgLTEsIC0xKSwgb3ApOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgciwgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBjb25zdCBJbnRSZWN0JiByLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFs
aXR5U2NhbGUpCiB7Ci0gICAgZHJhd0ltYWdlKGltYWdlLCByLCBJbnRSZWN0KDAsIDAsIC0xLCAt
MSksIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOworICAgIGRyYXdJbWFnZShpbWFnZSwgc3R5bGVD
b2xvclNwYWNlLCByLCBJbnRSZWN0KDAsIDAsIC0xLCAtMSksIG9wLCB1c2VMb3dRdWFsaXR5U2Nh
bGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwg
Y29uc3QgSW50UG9pbnQmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2Us
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRQb2ludCYgZGVzdCwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7Ci0gICAgZHJhd0ltYWdl
KGltYWdlLCBJbnRSZWN0KGRlc3QsIHNyY1JlY3Quc2l6ZSgpKSwgc3JjUmVjdCwgb3ApOworICAg
IGRyYXdJbWFnZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBJbnRSZWN0KGRlc3QsIHNyY1JlY3Qu
c2l6ZSgpKSwgc3JjUmVjdCwgb3ApOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgZGVzdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7Ci0gICAg
ZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJlY3QoZGVzdCksIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFs
aXR5U2NhbGUpOworICAgIGRyYXdJbWFnZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBGbG9hdFJl
Y3QoZGVzdCksIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQogCiAjaWYgIVBM
QVRGT1JNKFdJTkNFKSB8fCBQTEFURk9STShRVCkKQEAgLTQyOSw3ICs0MjksNyBAQCBjb25zdCBW
ZWN0b3I8SW50UmVjdD4mIEdyYXBoaWNzQ29udGV4dDo6CiAgICAgcmV0dXJuIG1fY29tbW9uLT5t
X2ZvY3VzUmluZ1JlY3RzOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKElt
YWdlKiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywg
Q29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2UpCiAgICAgICAgIHJldHVybjsKQEAgLTQ1MywyOSAr
NDUzLDI5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGkKICAgICAg
ICAgc2F2ZSgpOwogICAgICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9s
YXRpb25Ob25lKTsKICAgICB9Ci0gICAgaW1hZ2UtPmRyYXcodGhpcywgRmxvYXRSZWN0KGRlc3Qu
bG9jYXRpb24oKSwgRmxvYXRTaXplKHR3LCB0aCkpLCBGbG9hdFJlY3Qoc3JjLmxvY2F0aW9uKCks
IEZsb2F0U2l6ZSh0c3csIHRzaCkpLCBvcCk7CisgICAgaW1hZ2UtPmRyYXcodGhpcywgRmxvYXRS
ZWN0KGRlc3QubG9jYXRpb24oKSwgRmxvYXRTaXplKHR3LCB0aCkpLCBGbG9hdFJlY3Qoc3JjLmxv
Y2F0aW9uKCksIEZsb2F0U2l6ZSh0c3csIHRzaCkpLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKICAg
ICBpZiAodXNlTG93UXVhbGl0eVNjYWxlKQogICAgICAgICByZXN0b3JlKCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnN0IEludFBvaW50JiBzcmNQb2ludCwgY29uc3QgSW50U2l6ZSYgdGlsZVNp
emUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxl
ZEltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IEludFBvaW50JiBzcmNQb2ludCwgY29uc3QgSW50U2l6ZSYgdGls
ZVNpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkgfHwgIWltYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbWFnZS0+ZHJhd1RpbGVkKHRo
aXMsIHJlY3QsIHNyY1BvaW50LCB0aWxlU2l6ZSwgb3ApOworICAgIGltYWdlLT5kcmF3VGlsZWQo
dGhpcywgcmVjdCwgc3JjUG9pbnQsIHRpbGVTaXplLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlKiBpbWFnZSwgY29u
c3QgSW50UmVjdCYgZGVzdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgSW1hZ2U6OlRpbGVSdWxl
IGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBDb21w
b3NpdGVPcGVyYXRvciBvcCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFpbWFn
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGhSdWxlID09IEltYWdlOjpTdHJldGNoVGls
ZSAmJiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpCiAgICAgICAgIC8vIEp1c3QgZG8gYSBz
Y2FsZS4KLSAgICAgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdCwgc3JjUmVjdCwgb3Ap
OworICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3Qs
IHNyY1JlY3QsIG9wKTsKIAotICAgIGltYWdlLT5kcmF3VGlsZWQodGhpcywgZGVzdCwgc3JjUmVj
dCwgaFJ1bGUsIHZSdWxlLCBvcCk7CisgICAgaW1hZ2UtPmRyYXdUaWxlZCh0aGlzLCBkZXN0LCBz
cmNSZWN0LCBoUnVsZSwgdlJ1bGUsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QsIGNv
bnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiA1MTA0
MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIxOSwxNSArMjE5LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgICAgICB2b2lkIHN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKTsKIAotICAgICAgICB2b2lk
IGRyYXdJbWFnZShJbWFnZSosIGNvbnN0IEludFBvaW50JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBD
b21wb3NpdGVTb3VyY2VPdmVyKTsKLSAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBjb25z
dCBJbnRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29s
IHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1h
Z2UqLCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBD
b21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOwotICAgICAgICB2b2lkIGRy
YXdJbWFnZShJbWFnZSosIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNl
TG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOwotICAgICAgICB2b2lkIGRyYXdJbWFnZShJbWFnZSos
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZs
b2F0UmVjdCgwLCAwLCAtMSwgLTEpLAorICAgICAgICB2b2lkIGRyYXdJbWFnZShJbWFnZSosIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRQb2ludCYsIENvbXBvc2l0ZU9wZXJh
dG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdl
KiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmLCBDb21wb3NpdGVP
cGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0g
ZmFsc2UpOworICAgICAgICB2b2lkIGRyYXdJbWFnZShJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgICAgICB2
b2lkIGRyYXdJbWFnZShJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJ
bnRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0
b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNl
KTsKKyAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksCiAgICAgICAgICAgICAgICAgICAgICAgIENvbXBv
c2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2Nh
bGUgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UqLCBjb25zdCBJ
bnRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50UG9pbnQmIHNyY1BvaW50LCBjb25zdCBJbnRTaXpl
JiB0aWxlU2l6ZSwKKyAgICAgICAgdm9pZCBkcmF3VGlsZWRJbWFnZShJbWFnZSosIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50UG9p
bnQmIHNyY1BvaW50LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKLSAgICAgICAg
dm9pZCBkcmF3VGlsZWRJbWFnZShJbWFnZSosIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LAorICAgICAgICB2b2lkIGRyYXdUaWxlZEltYWdlKEltYWdlKiwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlOjpU
aWxlUnVsZSBoUnVsZSA9IEltYWdlOjpTdHJldGNoVGlsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxl
ID0gSW1hZ2U6OlN0cmV0Y2hUaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBv
c2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2UuY3BwCShyZXZpc2lvbiA1MTA0MykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxNCArNzUsMTQgQEAgYm9v
bCBJbWFnZTo6c2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZgogICAgIHJldHVybiBkYXRhQ2hh
bmdlZChhbGxEYXRhUmVjZWl2ZWQpOwogfQogCi12b2lkIEltYWdlOjpmaWxsV2l0aFNvbGlkQ29s
b3IoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit2b2lkIEltYWdlOjpmaWxsV2l0
aFNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wKQogewogICAgIGlmIChjb2xvci5hbHBoYSgpIDw9IDApCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBjdHh0LT5zYXZlKCk7CiAgICAgY3R4dC0+c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKCFjb2xvci5oYXNBbHBoYSgpICYmIG9wID09IENvbXBvc2l0ZVNvdXJjZU92ZXIg
PyBDb21wb3NpdGVDb3B5IDogb3ApOwotICAgIGN0eHQtPmZpbGxSZWN0KGRzdFJlY3QsIGNvbG9y
LCBEZXZpY2VDb2xvclNwYWNlKTsKKyAgICBjdHh0LT5maWxsUmVjdChkc3RSZWN0LCBjb2xvciwg
c3R5bGVDb2xvclNwYWNlKTsKICAgICBjdHh0LT5yZXN0b3JlKCk7CiB9CiAKQEAgLTEwNCwxMCAr
MTA0LDEwIEBAIHN0YXRpYyBpbmxpbmUgRmxvYXRTaXplIGNhbGN1bGF0ZVBhdHRlcm4KIH0KIAog
Ci12b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFBvaW50JiBzcmNQb2ludCwgY29uc3QgRmxvYXRT
aXplJiBzY2FsZWRUaWxlU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit2b2lkIEltYWdlOjpk
cmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFBvaW50JiBzcmNQb2ludCwgY29uc3QgRmxvYXRTaXplJiBzY2FsZWRUaWxl
U2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQog
eyAgICAKICAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKLSAgICAgICAgZmlsbFdp
dGhTb2xpZENvbG9yKGN0eHQsIGRlc3RSZWN0LCBzb2xpZENvbG9yKCksIG9wKTsKKyAgICAgICAg
ZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRlc3RSZWN0LCBzb2xpZENvbG9yKCksIHN0eWxlQ29s
b3JTcGFjZSwgb3ApOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMzIsMjIgKzEzMiwy
MiBAQCB2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjCiAgICAgICAgIHZp
c2libGVTcmNSZWN0LnNldFkoKGRlc3RSZWN0LnkoKSAtIG9uZVRpbGVSZWN0LnkoKSkgLyBzY2Fs
ZS5oZWlnaHQoKSk7CiAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldFdpZHRoKGRlc3RSZWN0Lndp
ZHRoKCkgLyBzY2FsZS53aWR0aCgpKTsKICAgICAgICAgdmlzaWJsZVNyY1JlY3Quc2V0SGVpZ2h0
KGRlc3RSZWN0LmhlaWdodCgpIC8gc2NhbGUuaGVpZ2h0KCkpOwotICAgICAgICBkcmF3KGN0eHQs
IGRlc3RSZWN0LCB2aXNpYmxlU3JjUmVjdCwgb3ApOworICAgICAgICBkcmF3KGN0eHQsIGRlc3RS
ZWN0LCB2aXNpYmxlU3JjUmVjdCwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXR0ZXJuVHJhbnNmb3JtID0g
VHJhbnNmb3JtYXRpb25NYXRyaXgoKS5zY2FsZU5vblVuaWZvcm0oc2NhbGUud2lkdGgoKSwgc2Nh
bGUuaGVpZ2h0KCkpOwogICAgIEZsb2F0UmVjdCB0aWxlUmVjdChGbG9hdFBvaW50KCksIGludHJp
bnNpY1RpbGVTaXplKTsgICAgCi0gICAgZHJhd1BhdHRlcm4oY3R4dCwgdGlsZVJlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIG9uZVRpbGVSZWN0LmxvY2F0aW9uKCksIG9wLCBkZXN0UmVjdCk7CisgICAg
ZHJhd1BhdHRlcm4oY3R4dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIG9uZVRpbGVSZWN0
LmxvY2F0aW9uKCksIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKICAgICAKICAgICBz
dGFydEFuaW1hdGlvbigpOwogfQogCiAvLyBGSVhNRTogTWVyZ2Ugd2l0aCB0aGUgb3RoZXIgZHJh
d1RpbGVkIGV2ZW50dWFsbHksIHNpbmNlIHdlIG5lZWQgYSBjb21iaW5hdGlvbiBvZiBib3RoIGZv
ciBzb21lIHRoaW5ncy4KLXZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqIGN0
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBU
aWxlUnVsZSBoUnVsZSwgVGlsZVJ1bGUgdlJ1bGUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQordm9p
ZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIFRpbGVSdWxlIGhSdWxlLCBUaWxl
UnVsZSB2UnVsZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wKQogeyAgICAKICAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKLSAgICAgICAg
ZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRzdFJlY3QsIHNvbGlkQ29sb3IoKSwgb3ApOworICAg
ICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZHN0UmVjdCwgc29saWRDb2xvcigpLCBzdHls
ZUNvbG9yU3BhY2UsIG9wKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTE3MCw3
ICsxNzAsNyBAQCB2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjCiAgICAg
ICAgIHZQaGFzZSAtPSBmbW9kZihkc3RSZWN0LmhlaWdodCgpLCBzY2FsZS5oZWlnaHQoKSAqIHNy
Y1JlY3QuaGVpZ2h0KCkpIC8gMi4wZjsKICAgICBGbG9hdFBvaW50IHBhdHRlcm5QaGFzZShkc3RS
ZWN0LngoKSAtIGhQaGFzZSwgZHN0UmVjdC55KCkgLSB2UGhhc2UpOwogICAgIAotICAgIGRyYXdQ
YXR0ZXJuKGN0eHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBhdHRlcm5QaGFzZSwgb3As
IGRzdFJlY3QpOworICAgIGRyYXdQYXR0ZXJuKGN0eHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBhdHRlcm5QaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZHN0UmVjdCk7CiAKICAgICBz
dGFydEFuaW1hdGlvbigpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkocmV2
aXNpb24gNTEwNDMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgSW1hZ2VfaAogCiAjaW5jbHVkZSAi
Q29sb3IuaCIKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBl
cy5oIgogI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAt
MTU0LDIxICsxNTUsMjIgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIEltYWdlKEltYWdlT2Jz
ZXJ2ZXIqID0gMCk7CiAKLSAgICBzdGF0aWMgdm9pZCBmaWxsV2l0aFNvbGlkQ29sb3IoR3JhcGhp
Y3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApOworICAgIHN0YXRpYyB2b2lkIGZpbGxXaXRoU29s
aWRDb2xvcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0
IENvbG9yJiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsK
IAorICAgIC8vIFRoZSBDb2xvclNwYWNlIHBhcmFtZXRlciB3aWxsIG9ubHkgYmUgdXNlZCBmb3Ig
dW50YWdnZWQgaW1hZ2VzLgogI2lmIFBMQVRGT1JNKFdJTikKLSAgICB2aXJ0dWFsIHZvaWQgZHJh
d0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3IpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXpl
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpIHsgfQogI2Vu
ZGlmCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9y
KSA9IDA7Ci0gICAgdm9pZCBkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFBvaW50JiBzcmNQb2ludCwgY29uc3QgRmxvYXRTaXpl
JiB0aWxlU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwotICAgIHZvaWQgZHJhd1RpbGVkKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBUaWxlUnVsZSBoUnVsZSwgVGlsZVJ1bGUgdlJ1bGUsIENvbXBvc2l0ZU9wZXJhdG9y
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJl
Y3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKSA9IDA7CisgICAgdm9pZCBkcmF3VGlsZWQoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFBvaW50
JiBzcmNQb2ludCwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2b2lkIGRyYXdUaWxlZChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgVGlsZVJ1bGUgaFJ1bGUsIFRpbGVSdWxlIHZSdWxlLCBDb2xvclNwYWNlIHN0eWxlQ29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAgICAgLy8gU3VwcG9ydGluZyB0aWxlZCBk
cmF3aW5nCiAgICAgdmlydHVhbCBib29sIG1heUZpbGxXaXRoU29saWRDb2xvcigpIHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBDb2xvciBzb2xpZENvbG9yKCkgY29uc3QgeyByZXR1cm4g
Q29sb3IoKTsgfQogICAgIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8U2hhcmVk
QnVmZmVyPiBtX2RhdGE7IC8vIFRoZSBlbmNvZGVkIHJhdyBkYXRhIGZvciB0aGUgaW1hZ2UuIApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3Bw
CShyZXZpc2lvbiA1MTA0MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgQml0bWFwSW1hZ2U6
OkJpdG1hcEltYWdlKGNhaXJvX3N1cmZhY2VfdAogICAgIGNoZWNrRm9yU29saWRDb2xvcigpOwog
fQogCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRv
ciBvcCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKICAgICBGbG9hdFJlY3Qgc3Jj
UmVjdChzcmMpOwogICAgIEZsb2F0UmVjdCBkc3RSZWN0KGRzdCk7CkBAIC0xMDUsNyArMTA1LDcg
QEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKLSAgICAgICAgZmlsbFdp
dGhTb2xpZENvbG9yKGNvbnRleHQsIGRzdFJlY3QsIHNvbGlkQ29sb3IoKSwgb3ApOworICAgICAg
ICBmaWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZHN0UmVjdCwgc29saWRDb2xvcigpLCBzdHls
ZUNvbG9yU3BhY2UsIG9wKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTcxLDcgKzE3
MSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKIH0KIAogdm9p
ZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblRyYW5z
Zm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBjYWly
b19zdXJmYWNlX3QqIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBp
ZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHll
dC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAkocmV2aXNp
b24gNTEwNDMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjcsMTIgKzEyNywzOSBAQCB2b2lkIEJpdG1hcEltYWdlOjpjaGVj
a0ZvclNvbGlkQ29sb3IoKQogICAgIH0KIH0KIAorc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVm
PiBpbWFnZVdpdGhDb2xvclNwYWNlKENHSW1hZ2VSZWYgb3JpZ2luYWxJbWFnZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlKQoreworICAgIHN0YXRpYyBDR0NvbG9yU3BhY2VSZWYgZGV2aWNlU3BhY2Ug
PSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKKyAgICBDR0NvbG9yU3BhY2VSZWYgb3Jp
Z2luYWxDb2xvclNwYWNlID0gQ0dJbWFnZUdldENvbG9yU3BhY2Uob3JpZ2luYWxJbWFnZSk7CisK
KyAgICAvLyBJZiB0aGUgaW1hZ2UgYWxyZWFkeSBoYXMgYSAobm9uLWRldmljZSkgY29sb3Igc3Bh
Y2UsIHdlIGRvbid0IHdhbnQgdG8KKyAgICAvLyBvdmVycmlkZSBpdCwgc28gcmV0dXJuLgorICAg
IGlmICghb3JpZ2luYWxDb2xvclNwYWNlIHx8ICFDRkVxdWFsKG9yaWdpbmFsQ29sb3JTcGFjZSwg
ZGV2aWNlU3BhY2UpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHN3aXRjaCAoY29sb3JTcGFj
ZSkgeworICAgIGNhc2UgRGV2aWNlQ29sb3JTcGFjZToKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
Y2FzZSBzUkdCQ29sb3JTcGFjZTogeworI2lmIFBMQVRGT1JNKFdJTikgfHwgZGVmaW5lZChCVUlM
RElOR19PTl9USUdFUikKKyAgICAgICAgcmV0dXJuIDA7CisjZWxzZQorICAgICAgICBzdGF0aWMg
Q0dDb2xvclNwYWNlUmVmIHNSR0JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtD
R0NvbG9yU3BhY2VTUkdCKTsKKyAgICAgICAgcmV0dXJuIFJldGFpblB0cjxDR0ltYWdlUmVmPihB
ZG9wdENGLCBDR0ltYWdlQ3JlYXRlQ29weVdpdGhDb2xvclNwYWNlKG9yaWdpbmFsSW1hZ2UsIHNS
R0JTcGFjZSkpOworI2VuZGlmCisgICAgfQorICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiAwOworfQorCiBDR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRDR0lt
YWdlUmVmKCkKIHsKICAgICByZXR1cm4gZnJhbWVBdEluZGV4KDApOwogfQogCi12b2lkIEJpdG1h
cEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAg
ICBzdGFydEFuaW1hdGlvbigpOwogCkBAIC0xNDEsNyArMTY4LDcgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYg
KG1heUZpbGxXaXRoU29saWRDb2xvcigpKSB7Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihj
dHh0LCBkZXN0UmVjdCwgc29saWRDb2xvcigpLCBjb21wb3NpdGVPcCk7CisgICAgICAgIGZpbGxX
aXRoU29saWRDb2xvcihjdHh0LCBkZXN0UmVjdCwgc29saWRDb2xvcigpLCBzdHlsZUNvbG9yU3Bh
Y2UsIGNvbXBvc2l0ZU9wKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjA0LDYgKzIz
MSwxMCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgQ0dD
b250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwogICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0
WSgtYWRqdXN0ZWREZXN0UmVjdC5ib3R0b20oKSk7CiAKKyAgICAvLyBBZGp1c3QgdGhlIGNvbG9y
IHNwYWNlLgorICAgIGlmIChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29sb3JTcGFjZUltYWdlID0g
aW1hZ2VXaXRoQ29sb3JTcGFjZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlKSkKKyAgICAgICAgaW1h
Z2UgPSBjb2xvclNwYWNlSW1hZ2UucmVsZWFzZVJlZigpOworCiAgICAgLy8gRHJhdyB0aGUgaW1h
Z2UuCiAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIGFkanVzdGVkRGVzdFJlY3QsIGlt
YWdlKTsKIApAQCAtMjIzLDcgKzI1NCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuQ2FsbGJh
Y2sodm9pZCogaW4KIH0KIAogdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgaWYgKCFuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpKQogICAgICAgICByZXR1cm47CkBAIC0yNjAsNiArMjkxLDEwIEBAIHZvaWQgSW1hZ2U6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCoKICAgICAgICAgQVNTRVJUKGggPT0gaGVpZ2h0
KCkpOwogICAgICAgICBzdWJJbWFnZS5hZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJl
Y3QodGlsZUltYWdlLCB0aWxlUmVjdCkpOwogICAgIH0KKworICAgIC8vIEFkanVzdCB0aGUgY29s
b3Igc3BhY2UuCisgICAgaWYgKFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb2xvclNwYWNlSW1hZ2Ug
PSBpbWFnZVdpdGhDb2xvclNwYWNlKHN1YkltYWdlLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UpKQor
ICAgICAgICBzdWJJbWFnZSA9IGNvbG9yU3BhY2VJbWFnZS5yZWxlYXNlUmVmKCk7CiAgICAgCiAj
aWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAgLy8gTGVvcGFyZCBoYXMgYW4gb3B0aW1pemVk
IGNhbGwgZm9yIHRoZSB0aWxpbmcgb2YgaW1hZ2UgcGF0dGVybnMsIGJ1dCB3ZSBjYW4gb25seSB1
c2UgaXQgaWYgdGhlIGltYWdlIGhhcyBiZWVuIGRlY29kZWQgZW5vdWdoIHRoYXQKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAko
cmV2aXNpb24gNTEwNDMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3Vt
ZW50SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAgaW50IFBERkRv
Y3VtZW50SW1hZ2U6OnBhZ2VDb3VudCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZG9jdW1lbnQgPyBD
R1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhtX2RvY3VtZW50KSA6IDA7CiB9CiAKLXZvaWQg
UERGRG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVy
YXRvciBvcCkKK3ZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKICAgICBpZiAoIW1fZG9jdW1l
bnQgfHwgbV9jdXJyZW50UGFnZSA9PSAtMSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgJKHJldmlzaW9u
IDUxMDQzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OwogCiAgICAgICAgIFBERkRvY3Vt
ZW50SW1hZ2UoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBv
c2l0ZU9wZXJhdG9yKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgICAgIAog
ICAgICAgICB2b2lkIHNldEN1cnJlbnRQYWdlKGludCk7CiAgICAgICAgIGludCBwYWdlQ291bnQo
KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb2xvck1hdHJpeC5jcHAJKHJldmlzaW9uIDUxMDQzKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjQsNyArMTY0LDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjphcHBseShGaWx0ZXIqIGZpbHRlcgog
ICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmlsdGVyQ29u
dGV4dC0+ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURy
YXdpbmdSZWN0KG1faW4tPnN1YlJlZ2lvbigpKSk7CisgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0lt
YWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1f
aW4tPnN1YlJlZ2lvbigpKSwgRGV2aWNlQ29sb3JTcGFjZSk7CiAKICAgICBJbnRSZWN0IGltYWdl
UmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwogICAgIFBhc3NSZWZQdHI8
SW1hZ2VEYXRhPiBpbWFnZURhdGEocmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VE
YXRhKGltYWdlUmVjdCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCShyZXZpc2lvbiA1MTA0MykKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzMywyNiArMTMzLDI2IEBAIHZvaWQgRkVDb21wb3NpdGU6OmFwcGx5KEZpbHRlciogZmlsdGVy
KQogICAgIEZsb2F0UmVjdCBzcmNSZWN0ID0gRmxvYXRSZWN0KDAuZiwgMC5mLCAtMS5mLCAtMS5m
KTsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1Jf
T1ZFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4yLT5yZXN1bHRJbWFn
ZSgpLT5pbWFnZSgpLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c3ViUmVnaW9uKCkpKTsK
LSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmlt
YWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnN1YlJlZ2lvbigpKSk7CisgICAgICAg
IGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luMi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwg
Y2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnN1YlJlZ2lvbigpKSwgRGV2aWNlQ29sb3JTcGFj
ZSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgp
LT5pbWFnZSgpLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zdWJSZWdpb24oKSksIERldmlj
ZUNvbG9yU3BhY2UpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX0lOOgogICAgICAgICBmaWx0ZXJDb250ZXh0LT5zYXZlKCk7CiAgICAgICAgIGZpbHRlckNv
bnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zdWJS
ZWdpb24oKSksIG1faW4yLT5yZXN1bHRJbWFnZSgpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+
ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdS
ZWN0KG1faW4tPnN1YlJlZ2lvbigpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFn
ZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2lu
LT5zdWJSZWdpb24oKSksIERldmljZUNvbG9yU3BhY2UpOwogICAgICAgICBmaWx0ZXJDb250ZXh0
LT5yZXN0b3JlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfT1VUOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1h
Z2UoKS0+aW1hZ2UoKSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c3ViUmVnaW9uKCkpKTsK
LSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5p
bWFnZSgpLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c3ViUmVnaW9uKCkpLCBzcmNSZWN0
LCBDb21wb3NpdGVEZXN0aW5hdGlvbk91dCk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJ
bWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBjYWxjdWxhdGVEcmF3aW5nUmVjdCht
X2luLT5zdWJSZWdpb24oKSksIERldmljZUNvbG9yU3BhY2UpOworICAgICAgICBmaWx0ZXJDb250
ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURy
YXdpbmdSZWN0KG1faW4yLT5zdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZURlc3RpbmF0
aW9uT3V0LCBEZXZpY2VDb2xvclNwYWNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2Uo
bV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4y
LT5zdWJSZWdpb24oKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+
cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c3ViUmVn
aW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVTb3VyY2VBdG9wKTsKKyAgICAgICAgZmlsdGVyQ29u
dGV4dC0+ZHJhd0ltYWdlKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBjYWxjdWxhdGVE
cmF3aW5nUmVjdChtX2luMi0+c3ViUmVnaW9uKCkpLCBEZXZpY2VDb2xvclNwYWNlKTsKKyAgICAg
ICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCks
IGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnN1YlJlZ2lvbigpKSwgc3JjUmVjdCwgQ29tcG9z
aXRlU291cmNlQXRvcCwgRGV2aWNlQ29sb3JTcGFjZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfWE9SOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3
SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0
KG1faW4yLT5zdWJSZWdpb24oKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2Uo
bV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+
c3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVYT1IpOworICAgICAgICBmaWx0ZXJDb250
ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURy
YXdpbmdSZWN0KG1faW4yLT5zdWJSZWdpb24oKSksIERldmljZUNvbG9yU3BhY2UpOworICAgICAg
ICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwg
Y2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3Np
dGVYT1IsIERldmljZUNvbG9yU3BhY2UpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09N
UE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6IHsKICAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJh
d2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChtX2luLT5zdWJSZWdpb24oKSk7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdy
YXBoaWMuY3BwCShyZXZpc2lvbiA1MTA0MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBA
QCB2b2lkIFNvdXJjZUdyYXBoaWM6OmFwcGx5KEZpbHRlciogZmlsdGVyCiAgICAgaWYgKCFmaWx0
ZXJDb250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1h
Z2UoZmlsdGVyLT5zb3VyY2VJbWFnZSgpLT5pbWFnZSgpLCBJbnRQb2ludCgpKTsKKyAgICBmaWx0
ZXJDb250ZXh0LT5kcmF3SW1hZ2UoZmlsdGVyLT5zb3VyY2VJbWFnZSgpLT5pbWFnZSgpLCBJbnRQ
b2ludCgpLCBEZXZpY2VDb2xvclNwYWNlKTsKIH0KIAogdm9pZCBTb3VyY2VHcmFwaGljOjpkdW1w
KCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUhhaWt1
LmNwcAkocmV2aXNpb24gNTEwNDMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ltYWdlSGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgQml0
bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEKIH0KIAogLy8gRHJhd2luZyBSb3V0aW5l
cwotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZs
b2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3Ap
Cit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxv
YXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgc3RhcnRBbmltYXRpb24oKTsKIApA
QCAtOTIsNyArOTIsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCog
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKSkgewot
ICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZHN0LCBzb2xpZENvbG9yKCksIG9wKTsK
KyAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRzdCwgc29saWRDb2xvcigpLCBzdHls
ZUNvbG9yU3BhY2UsIG9wKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTA5LDcgKzEw
OSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICBjdHh0
LT5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50LCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQordm9pZCBJbWFn
ZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHRpbGVSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgc3JjUG9pbnQsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QpCiB7CiAgICAgLy8gRklYTUU6IGZpbmlzaCB0
aGlzIHRvIHN1cHBvcnQgYWxzbyBwaGFzZWQgcG9zaXRpb24gKHNyY1BvaW50KQogICAgIHN0YXJ0
QW5pbWF0aW9uKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5j
cHAJKHJldmlzaW9uIDUxMDQzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFn
ZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBQYXNzUmVmUHRyPEltYWdl
PiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzCiB9CiAKIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgUVBpeG1hcCogZnJhbWVQaXhtYXAgPSBuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmICghZnJhbWVQaXhtYXApIC8vIElmIGl0J3Mg
dG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgpAQCAtMTYyLDcgKzE2Miw3IEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEKIAogLy8gRHJhd2luZyBS
b3V0aW5lcwogdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0LAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJl
Y3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCisgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UmVjdCYgc3JjLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3Igb3ApCiB7CiAgICAgc3RhcnRBbmltYXRpb24oKTsKIApAQCAtMTcxLDcgKzE3MSw3
IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKG1heUZpbGxXaXRoU29saWRDb2xvcigpKSB7Ci0gICAgICAgIGZpbGxX
aXRoU29saWRDb2xvcihjdHh0LCBkc3QsIHNvbGlkQ29sb3IoKSwgb3ApOworICAgICAgICBmaWxs
V2l0aFNvbGlkQ29sb3IoY3R4dCwgZHN0LCBzb2xpZENvbG9yKCksIHN0eWxlQ29sb3JTcGFjZSwg
b3ApOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEu
aAkocmV2aXNpb24gNTEwNDMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0
bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsK
IAogcHJpdmF0ZToKICAgICBOYXRpdmVJbWFnZVNraWEgbV9uYXRpdmVJbWFnZTsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCShyZXZpc2lvbiA1
MTA0MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDIsNiArMzAyLDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0KgogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0
JiBmbG9hdFNyY1JlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVy
YXRvciBjb21wb3NpdGVPcCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QpCiB7CkBAIC00MDUsNyArNDA2LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hl
Y2tGb3JTb2xpZENvbG9yKCkKIH0KIAogdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcCkKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBpZiAoIW1f
c291cmNlLmluaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQzNyw2ICs0MzgsNyBA
QCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiB2b2lkIEJpdG1hcElt
YWdlU2luZ2xlRnJhbWVTa2lhOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBGbG9hdFJlY3Qgbm9ybURzdFJl
Y3QgPSBub3JtYWxpemVSZWN0KGRzdFJlY3QpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAJKHJldmlzaW9uIDUxMDQzKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3
LDcgKzc3LDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTQogCiAg
ICAgSW50U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwogICAgIGlmIChzaXpl
KQotICAgICAgICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoJmdjLCBGbG9hdFJlY3QoMC4w
ZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgqc2l6
ZSksIENvbXBvc2l0ZUNvcHkpOworICAgICAgICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUo
JmdjLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVp
Z2h0KSwgSW50U2l6ZSgqc2l6ZSksIERldmljZUNvbG9yU3BhY2UsIENvbXBvc2l0ZUNvcHkpOwog
ICAgIGVsc2UKICAgICAgICAgZHJhdygmZ2MsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBibXBJbmZv
LmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgaW1hZ2VT
aXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbXBvc2l0ZUNvcHkpOwogCkBAIC04
OCw3ICs4OCw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE0KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdT
b3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0
LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkK
K3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0Nv
bnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3Jj
U2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wKQogewogICAgIHNpemVfdCBmcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBmcmFtZXM7ICsraSkgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAJKHJldmlzaW9uIDUxMDQzKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDcgKzgyLDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6
ZShIQklUTQogCiAgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwog
ICAgIGlmIChzaXplKQotICAgICAgICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoJmdjLCBG
bG9hdFJlY3QoMC4wZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwg
SW50U2l6ZSgqc2l6ZSksIENvbXBvc2l0ZUNvcHkpOworICAgICAgICBkcmF3RnJhbWVNYXRjaGlu
Z1NvdXJjZVNpemUoJmdjLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBi
bXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgqc2l6ZSksIERldmljZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZUNvcHkpOwogICAgIGVsc2UKICAgICAgICAgZHJhdygmZ2MsIEZsb2F0UmVjdCgwLjBmLCAw
LjBmLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBGbG9hdFJlY3QoMC4wZiwg
MC4wZiwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbXBvc2l0ZUNv
cHkpOwogCkBAIC05Miw3ICs5Miw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNp
emUoSEJJVE0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0Zy
YW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRvciBj
b21wb3NpdGVPcCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6
ZShHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3Qg
SW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yIGNvbXBvc2l0ZU9wKQogewogICAgIHNpemVfdCBmcmFtZXMgPSBmcmFtZUNvdW50KCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZXM7ICsraSkgewpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlV3guY3BwCShyZXZpc2lvbiA1MTA0MykKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDEzICs4NiwxMyBAQCB2b2lkIEJpdG1hcEltYWdlOjppbml0UGxhdGZvcm1EYXRhKCkKIAog
Ly8gRHJhd2luZyBSb3V0aW5lcwogCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBD
b21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250
ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKICAgICBp
ZiAoIW1fc291cmNlLmluaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICht
YXlGaWxsV2l0aFNvbGlkQ29sb3IoKSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4
dCwgZHN0LCBzb2xpZENvbG9yKCksIG9wKTsKKyAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0
eHQsIGRzdCwgc29saWRDb2xvcigpLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXco
R3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAgb2JzZXJ2ZXItPmRpZERyYXcodGhpcyk7CiB9CiAK
LXZvaWQgQml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBj
b25zdCBGbG9hdFJlY3QmIGRzdFJlY3QpCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0KQogewogICAgIGlmICghbV9zb3VyY2UuaW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJu
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0JKHJldmlz
aW9uIDUxMDQzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTM5Niw3ICszOTYsNyBAQCBib29sIFNjcm9sbGJhclRoZW1lTWFj
OjpwYWludChTY3JvbGxiYXIqCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAg
ICAgICAgIEhJVGhlbWVEcmF3VHJhY2soJnRyYWNrSW5mbywgMCwgaW1hZ2VCdWZmZXItPmNvbnRl
eHQoKS0+cGxhdGZvcm1Db250ZXh0KCksIGtISVRoZW1lT3JpZW50YXRpb25Ob3JtYWwpOwotICAg
ICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2VCdWZmZXItPmltYWdlKCksIHNjcm9sbGJhci0+
ZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7CisgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFn
ZUJ1ZmZlci0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3Qo
KS5sb2NhdGlvbigpKTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDUxMDQzKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NzcsNyArNDc3LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxs
TGF5ZQogICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50Rm9yQmFja2dyb3VuZEltYWdlID0g
Ym9keVJlbmRlcmVyOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNvbnRleHQtPmRyYXdUaWxlZEltYWdlKGJnLT5pbWFnZShjbGllbnRGb3JCYWNrZ3JvdW5k
SW1hZ2UsIHRpbGVTaXplKSwgZGVzdFJlY3QsIHBoYXNlLCB0aWxlU2l6ZSwgY29tcG9zaXRlT3Ap
OworICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoYmctPmltYWdlKGNsaWVudEZv
ckJhY2tncm91bmRJbWFnZSwgdGlsZVNpemUpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIGRlc3RS
ZWN0LCBwaGFzZSwgdGlsZVNpemUsIGNvbXBvc2l0ZU9wKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtNzA2LDYgKzcwNiw3IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBp
ZWMKICAgICAgICAgICAgICAgICAgICAgICAoaW1hZ2VIZWlnaHQgLSB0b3BTbGljZSAtIGJvdHRv
bVNsaWNlKSA+IDAgJiYgKGggLSB0b3BXaWR0aCAtIGJvdHRvbVdpZHRoKSA+IDA7CiAKICAgICBJ
bWFnZSogaW1hZ2UgPSBzdHlsZUltYWdlLT5pbWFnZSh0aGlzLCBpbWFnZVNpemUpOworICAgIENv
bG9yU3BhY2UgY29sb3JTcGFjZSA9IHN0eWxlLT5jb2xvclNwYWNlKCk7CiAKICAgICBpZiAoZHJh
d0xlZnQpIHsKICAgICAgICAgLy8gUGFpbnQgdGhlIHRvcCBhbmQgYm90dG9tIGxlZnQgY29ybmVy
cy4KQEAgLTcxMywxOCArNzE0LDE4IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50
TmluZVBpZWMKICAgICAgICAgLy8gVGhlIHRvcCBsZWZ0IGNvcm5lciByZWN0IGlzICh0eCwgdHks
IGxlZnRXaWR0aCwgdG9wV2lkdGgpCiAgICAgICAgIC8vIFRoZSByZWN0IHRvIHVzZSBmcm9tIHdp
dGhpbiB0aGUgaW1hZ2UgaXMgb2J0YWluZWQgZnJvbSBvdXIgc2xpY2UsIGFuZCBpcyAoMCwgMCwg
bGVmdFNsaWNlLCB0b3BTbGljZSkKICAgICAgICAgaWYgKGRyYXdUb3ApCi0gICAgICAgICAgICBn
cmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgSW50UmVjdCh0eCwgdHksIGxlZnRXaWR0
aCwgdG9wV2lkdGgpLAorICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1h
Z2UsIGNvbG9yU3BhY2UsIEludFJlY3QodHgsIHR5LCBsZWZ0V2lkdGgsIHRvcFdpZHRoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMCwgMCwgbGVmdFNs
aWNlLCB0b3BTbGljZSksIG9wKTsKIAogICAgICAgICAvLyBUaGUgYm90dG9tIGxlZnQgY29ybmVy
IHJlY3QgaXMgKHR4LCB0eSArIGggLSBib3R0b21XaWR0aCwgbGVmdFdpZHRoLCBib3R0b21XaWR0
aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8gdXNlIGZyb20gd2l0aGluIHRoZSBpbWFnZSBpcyAo
MCwgaW1hZ2VIZWlnaHQgLSBib3R0b21TbGljZSwgbGVmdFNsaWNlLCBib3RvbVNsaWNlKQogICAg
ICAgICBpZiAoZHJhd0JvdHRvbSkKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0lt
YWdlKGltYWdlLCBJbnRSZWN0KHR4LCB0eSArIGggLSBib3R0b21XaWR0aCwgbGVmdFdpZHRoLCBi
b3R0b21XaWR0aCksCisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFn
ZSwgY29sb3JTcGFjZSwgSW50UmVjdCh0eCwgdHkgKyBoIC0gYm90dG9tV2lkdGgsIGxlZnRXaWR0
aCwgYm90dG9tV2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW50UmVjdCgwLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCBsZWZ0U2xpY2UsIGJvdHRvbVNs
aWNlKSwgb3ApOwogCiAgICAgICAgIC8vIFBhaW50IHRoZSBsZWZ0IGVkZ2UuCiAgICAgICAgIC8v
IEhhdmUgdG8gc2NhbGUgYW5kIHRpbGUgaW50byB0aGUgYm9yZGVyIHJlY3QuCi0gICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIEludFJlY3QodHgsIHR5ICsgdG9w
V2lkdGgsIGxlZnRXaWR0aCwKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFn
ZShpbWFnZSwgY29sb3JTcGFjZSwgSW50UmVjdCh0eCwgdHkgKyB0b3BXaWR0aCwgbGVmdFdpZHRo
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggLSB0b3BXaWR0aCAt
IGJvdHRvbVdpZHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
bnRSZWN0KDAsIHRvcFNsaWNlLCBsZWZ0U2xpY2UsIGltYWdlSGVpZ2h0IC0gdG9wU2xpY2UgLSBi
b3R0b21TbGljZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1h
Z2U6OlN0cmV0Y2hUaWxlLCAoSW1hZ2U6OlRpbGVSdWxlKXZSdWxlLCBvcCk7CkBAIC03MzUsMTcg
KzczNiwxNyBAQCBib29sIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjCiAgICAg
ICAgIC8vIFRoZSB0b3AgcmlnaHQgY29ybmVyIHJlY3QgaXMgKHR4ICsgdyAtIHJpZ2h0V2lkdGgs
IHR5LCByaWdodFdpZHRoLCB0b3BXaWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8gdXNlIGZy
b20gd2l0aGluIHRoZSBpbWFnZSBpcyBvYnRhaW5lZCBmcm9tIG91ciBzbGljZSwgYW5kIGlzIChp
bWFnZVdpZHRoIC0gcmlnaHRTbGljZSwgMCwgcmlnaHRTbGljZSwgdG9wU2xpY2UpCiAgICAgICAg
IGlmIChkcmF3VG9wKQotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1h
Z2UsIEludFJlY3QodHggKyB3IC0gcmlnaHRXaWR0aCwgdHksIHJpZ2h0V2lkdGgsIHRvcFdpZHRo
KSwKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBjb2xvclNw
YWNlLCBJbnRSZWN0KHR4ICsgdyAtIHJpZ2h0V2lkdGgsIHR5LCByaWdodFdpZHRoLCB0b3BXaWR0
aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KGltYWdl
V2lkdGggLSByaWdodFNsaWNlLCAwLCByaWdodFNsaWNlLCB0b3BTbGljZSksIG9wKTsKIAogICAg
ICAgICAvLyBUaGUgYm90dG9tIHJpZ2h0IGNvcm5lciByZWN0IGlzICh0eCArIHcgLSByaWdodFdp
ZHRoLCB0eSArIGggLSBib3R0b21XaWR0aCwgcmlnaHRXaWR0aCwgYm90dG9tV2lkdGgpCiAgICAg
ICAgIC8vIFRoZSByZWN0IHRvIHVzZSBmcm9tIHdpdGhpbiB0aGUgaW1hZ2UgaXMgKGltYWdlV2lk
dGggLSByaWdodFNsaWNlLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCByaWdodFNsaWNlLCBi
b3R0b21TbGljZSkKICAgICAgICAgaWYgKGRyYXdCb3R0b20pCi0gICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgSW50UmVjdCh0eCArIHcgLSByaWdodFdpZHRoLCB0
eSArIGggLSBib3R0b21XaWR0aCwgcmlnaHRXaWR0aCwgYm90dG9tV2lkdGgpLAorICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIGNvbG9yU3BhY2UsIEludFJlY3Qo
dHggKyB3IC0gcmlnaHRXaWR0aCwgdHkgKyBoIC0gYm90dG9tV2lkdGgsIHJpZ2h0V2lkdGgsIGJv
dHRvbVdpZHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJl
Y3QoaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UsIGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2UsIHJp
Z2h0U2xpY2UsIGJvdHRvbVNsaWNlKSwgb3ApOwogCiAgICAgICAgIC8vIFBhaW50IHRoZSByaWdo
dCBlZGdlLgotICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLCBJ
bnRSZWN0KHR4ICsgdyAtIHJpZ2h0V2lkdGgsIHR5ICsgdG9wV2lkdGgsIHJpZ2h0V2lkdGgsCisg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGNvbG9yU3BhY2Us
IEludFJlY3QodHggKyB3IC0gcmlnaHRXaWR0aCwgdHkgKyB0b3BXaWR0aCwgcmlnaHRXaWR0aCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoIC0gdG9wV2lkdGggLSBi
b3R0b21XaWR0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50
UmVjdChpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSwgdG9wU2xpY2UsIHJpZ2h0U2xpY2UsIGltYWdl
SGVpZ2h0IC0gdG9wU2xpY2UgLSBib3R0b21TbGljZSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSW1hZ2U6OlN0cmV0Y2hUaWxlLCAoSW1hZ2U6OlRpbGVSdWxlKXZS
dWxlLCBvcCk7CkBAIC03NTMsMjAgKzc1NCwyMCBAQCBib29sIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpwYWludE5pbmVQaWVjCiAKICAgICAvLyBQYWludCB0aGUgdG9wIGVkZ2UuCiAgICAgaWYgKGRy
YXdUb3ApCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIElu
dFJlY3QodHggKyBsZWZ0V2lkdGgsIHR5LCB3IC0gbGVmdFdpZHRoIC0gcmlnaHRXaWR0aCwgdG9w
V2lkdGgpLAorICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLCBj
b2xvclNwYWNlLCBJbnRSZWN0KHR4ICsgbGVmdFdpZHRoLCB0eSwgdyAtIGxlZnRXaWR0aCAtIHJp
Z2h0V2lkdGgsIHRvcFdpZHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBJbnRSZWN0KGxlZnRTbGljZSwgMCwgaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UgLSBsZWZ0
U2xpY2UsIHRvcFNsaWNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoSW1hZ2U6OlRpbGVSdWxlKWhSdWxlLCBJbWFnZTo6U3RyZXRjaFRpbGUsIG9wKTsKIAogICAg
IC8vIFBhaW50IHRoZSBib3R0b20gZWRnZS4KICAgICBpZiAoZHJhd0JvdHRvbSkKLSAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZSwgSW50UmVjdCh0eCArIGxlZnRX
aWR0aCwgdHkgKyBoIC0gYm90dG9tV2lkdGgsCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJh
d1RpbGVkSW1hZ2UoaW1hZ2UsIGNvbG9yU3BhY2UsIEludFJlY3QodHggKyBsZWZ0V2lkdGgsIHR5
ICsgaCAtIGJvdHRvbVdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHcgLSBsZWZ0V2lkdGggLSByaWdodFdpZHRoLCBib3R0b21XaWR0aCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdChsZWZ0U2xpY2UsIGltYWdlSGVp
Z2h0IC0gYm90dG9tU2xpY2UsIGltYWdlV2lkdGggLSByaWdodFNsaWNlIC0gbGVmdFNsaWNlLCBi
b3R0b21TbGljZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElt
YWdlOjpUaWxlUnVsZSloUnVsZSwgSW1hZ2U6OlN0cmV0Y2hUaWxlLCBvcCk7CiAKICAgICAvLyBQ
YWludCB0aGUgbWlkZGxlLgogICAgIGlmIChkcmF3TWlkZGxlKQotICAgICAgICBncmFwaGljc0Nv
bnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLCBJbnRSZWN0KHR4ICsgbGVmdFdpZHRoLCB0eSAr
IHRvcFdpZHRoLCB3IC0gbGVmdFdpZHRoIC0gcmlnaHRXaWR0aCwKKyAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZSwgY29sb3JTcGFjZSwgSW50UmVjdCh0eCArIGxl
ZnRXaWR0aCwgdHkgKyB0b3BXaWR0aCwgdyAtIGxlZnRXaWR0aCAtIHJpZ2h0V2lkdGgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCAtIHRvcFdpZHRoIC0gYm90dG9t
V2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qo
bGVmdFNsaWNlLCB0b3BTbGljZSwgaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UgLSBsZWZ0U2xpY2Us
IGltYWdlSGVpZ2h0IC0gdG9wU2xpY2UgLSBib3R0b21TbGljZSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKEltYWdlOjpUaWxlUnVsZSloUnVsZSwgKEltYWdlOjpU
aWxlUnVsZSl2UnVsZSwgb3ApOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2
aXNpb24gNTEwNDMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4Niw3ICszODYsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxh
Y2VkKFBhaW50SW5mCiAgICAgICAgICAgICAgICAgICAgIGNlbnRlclkgPSAwOwogICAgICAgICAg
ICAgICAgIGltYWdlWCA9IGxlZnRCb3JkZXIgKyBsZWZ0UGFkICsgY2VudGVyWCArIDE7CiAgICAg
ICAgICAgICAgICAgaW1hZ2VZID0gdG9wQm9yZGVyICsgdG9wUGFkICsgY2VudGVyWSArIDE7Ci0g
ICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlKCksIEludFBvaW50KHR4ICsg
aW1hZ2VYLCB0eSArIGltYWdlWSkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFn
ZShpbWFnZSgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIEludFBvaW50KHR4ICsgaW1hZ2VYLCB0
eSArIGltYWdlWSkpOwogICAgICAgICAgICAgICAgIGVycm9yUGljdHVyZURyYXduID0gdHJ1ZTsK
ICAgICAgICAgICAgIH0KIApAQCAtNDI0LDcgKzQyNCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBh
aW50UmVwbGFjZWQoUGFpbnRJbmYKICAgICAgICAgSW50UmVjdCByZWN0KEludFBvaW50KHR4ICsg
bGVmdEJvcmRlciArIGxlZnRQYWQsIHR5ICsgdG9wQm9yZGVyICsgdG9wUGFkKSwgY29udGVudFNp
emUpOwogICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsdCA9IChub2RlKCkgJiYgbm9k
ZSgpLT5oYXNUYWdOYW1lKGltZ1RhZykpID8gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+
KG5vZGUoKSkgOiAwOwogICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRv
ciA9IGltYWdlRWx0ID8gaW1hZ2VFbHQtPmNvbXBvc2l0ZU9wZXJhdG9yKCkgOiBDb21wb3NpdGVT
b3VyY2VPdmVyOwotICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UoY1dpZHRoLCBjSGVp
Z2h0KSwgcmVjdCwgY29tcG9zaXRlT3BlcmF0b3IsIHVzZUxvd1F1YWxpdHlTY2FsaW5nKTsKKyAg
ICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlKGNXaWR0aCwgY0hlaWdodCksIHN0eWxlKCkt
PmNvbG9yU3BhY2UoKSwgcmVjdCwgY29tcG9zaXRlT3BlcmF0b3IsIHVzZUxvd1F1YWxpdHlTY2Fs
aW5nKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlz
aW9uIDUxMDQzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTQzLDcgKzE5NDMsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludFJlc2l6
ZXIoR3JhcGhpY3NDCiAgICAgLy8gUGFpbnQgdGhlIHJlc2l6ZXIgY29udHJvbC4KICAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxJbWFnZT4sIHJlc2l6ZUNvcm5lckltYWdlLCAoSW1hZ2U6
OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIpKSk7CiAgICAgSW50
UG9pbnQgaW1hZ2VQb2ludChhYnNSZWN0LnJpZ2h0KCkgLSByZXNpemVDb3JuZXJJbWFnZS0+d2lk
dGgoKSwgYWJzUmVjdC5ib3R0b20oKSAtIHJlc2l6ZUNvcm5lckltYWdlLT5oZWlnaHQoKSk7Ci0g
ICAgY29udGV4dC0+ZHJhd0ltYWdlKHJlc2l6ZUNvcm5lckltYWdlLmdldCgpLCBpbWFnZVBvaW50
KTsKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UocmVzaXplQ29ybmVySW1hZ2UuZ2V0KCksIGJveC0+
c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBpbWFnZVBvaW50KTsKIAogICAgIC8vIERyYXcgYSBmcmFt
ZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUpIGlmIHRoZXJlIGFyZSBhbnkgc2Ny
b2xsYmFycyBwcmVzZW50LgogICAgIC8vIENsaXBwaW5nIHdpbGwgZXhjbHVkZSB0aGUgcmlnaHQg
YW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlzIGZyYW1lLgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdE1hcmtlci5jcHAJKHJldmlzaW9uIDUxMDQzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0Myw3ICs1NDMsNyBAQCB2
b2lkIFJlbmRlckxpc3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgICAgIGlmIChzdHls
ZSgpLT5oaWdobGlnaHQoKSAhPSBudWxsQXRvbSAmJiAhcGFpbnRJbmZvLmNvbnRleHQtPnBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KHR4LCB0eSwg
c3R5bGUoKS0+aGlnaGxpZ2h0KCksIHRydWUpOwogI2VuZGlmCi0gICAgICAgIGNvbnRleHQtPmRy
YXdJbWFnZShtX2ltYWdlLT5pbWFnZSh0aGlzLCBtYXJrZXIuc2l6ZSgpKSwgbWFya2VyLmxvY2F0
aW9uKCkpOworICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UobV9pbWFnZS0+aW1hZ2UodGhpcywg
bWFya2VyLnNpemUoKSksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgbWFya2VyLmxvY2F0aW9uKCkp
OwogICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25Ob25lKSB7CiAgICAg
ICAgICAgICAvLyBGSVhNRTogc2VsZWN0aW9uUmVjdCgpIGlzIGluIGFic29sdXRlLCBub3QgcGFp
bnRpbmcgY29vcmRpbmF0ZXMuCiAgICAgICAgICAgICBjb250ZXh0LT5maWxsUmVjdChzZWxlY3Rp
b25SZWN0KCksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpLCBzdHlsZSgpLT5jb2xvclNwYWNl
KCkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAkocmV2aXNpb24gNTEw
NDMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQYWludElu
Zm8mIHBhCiAgICAgICAgIGlmIChpbWFnZUVsdC0+cHJlc2VydmVBc3BlY3RSYXRpbygpLT5hbGln
bigpICE9IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX05P
TkUpCiAgICAgICAgICAgICBhZGp1c3RSZWN0c0ZvckFzcGVjdFJhdGlvKGRlc3RSZWN0LCBzcmNS
ZWN0LCBpbWFnZUVsdC0+cHJlc2VydmVBc3BlY3RSYXRpbygpKTsKIAotICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlKCksIGRlc3RSZWN0LCBzcmNSZWN0KTsKKyAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNl
LCBkZXN0UmVjdCwgc3JjUmVjdCk7CiAgICAgICAgIGZpbmlzaFJlbmRlclNWR0NvbnRlbnQodGhp
cywgcGFpbnRJbmZvLCBmaWx0ZXIsIHNhdmVkSW5mby5jb250ZXh0KTsKICAgICB9CiAKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkocmV2aXNpb24gNTEwNDMpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYw
LDcgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbgogICAgICAgICAv
LyBUZWxsIHRoZSB3aWRnZXQgdG8gcGFpbnQgbm93LiAgVGhpcyBpcyB0aGUgb25seSB0aW1lIHRo
ZSB3aWRnZXQgaXMgYWxsb3dlZAogICAgICAgICAvLyB0byBwYWludCBpdHNlbGYuICBUaGF0IHdh
eSBpdCB3aWxsIGNvbXBvc2l0ZSBwcm9wZXJseSB3aXRoIHotaW5kZXhlZCBsYXllcnMuCiAgICAg
ICAgIGlmIChtX3N1YnN0aXR1dGVJbWFnZSkKLSAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5kcmF3SW1hZ2UobV9zdWJzdGl0dXRlSW1hZ2UuZ2V0KCksIG1fd2lkZ2V0LT5mcmFtZVJlY3Qo
KSk7CisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKG1fc3Vic3RpdHV0
ZUltYWdlLmdldCgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIG1fd2lkZ2V0LT5mcmFtZVJlY3Qo
KSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fd2lkZ2V0LT5wYWludChwYWludEluZm8u
Y29udGV4dCwgcGFpbnRJbmZvLnJlY3QpOwogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2Uu
Y3BwCShyZXZpc2lvbiA1MTA0MykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIGJvb2wgU1ZHSW1hZ2U6Omhhc1Jl
bGF0aXZlSGVpZ2h0KCkgY29uc3QKICAgICByZXR1cm4gcm9vdEVsZW1lbnQtPmhlaWdodCgpLnVu
aXRUeXBlKCkgPT0gTGVuZ3RoVHlwZVBlcmNlbnRhZ2U7CiB9CiAKLXZvaWQgU1ZHSW1hZ2U6OmRy
YXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCit2
b2lkIFNWR0ltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewogICAgIGlmICghbV9wYWdlKQogICAgICAgICBy
ZXR1cm47CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHJldmlzaW9uIDUxMDQzKQorKysg
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyAr
NjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQ
dHIgZnJhbWVBdEluZGV4KHNpemVfdCkgeyByZXR1cm4gMDsgfQogICAgICAgICAKICAgICAgICAg
U1ZHSW1hZ2UoSW1hZ2VPYnNlcnZlciopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGZyb21SZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHRvUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGZyb21SZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRvUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
KTsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKICAgICAgICAgCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdQYWludFNlcnZlclBhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL1NWR1BhaW50U2VydmVyUGF0dGVybi5jcHAJKHJldmlzaW9uIDUxMDQzKQorKysgV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTMxLDcgKzEzMSw3IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1cChHcmFw
aGkKICAgICAgICAgICAgIHRpbGVJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgwLCBwYXR0ZXJuQm91
bmRhcmllcygpLmhlaWdodCgpKTsKICAgICAgICAgICAgIGZvciAoaW50IGogPSBudW1YOyBqID4g
MDsgai0tKSB7CiAgICAgICAgICAgICAgICAgdGlsZUltYWdlQ29udGV4dC0+dHJhbnNsYXRlKHBh
dHRlcm5Cb3VuZGFyaWVzKCkud2lkdGgoKSwgMCk7Ci0gICAgICAgICAgICAgICAgdGlsZUltYWdl
Q29udGV4dC0+ZHJhd0ltYWdlKHRpbGUoKS0+aW1hZ2UoKSwgdGlsZVJlY3QsIHRpbGVSZWN0KTsK
KyAgICAgICAgICAgICAgICB0aWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2UodGlsZSgpLT5pbWFn
ZSgpLCBvYmplY3QtPnN0eWxlKCktPmNvbG9yU3BhY2UoKSwgdGlsZVJlY3QsIHRpbGVSZWN0KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRpbGVJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgt
cGF0dGVybkJvdW5kYXJpZXMoKS53aWR0aCgpICogbnVtWCwgMCk7CiAgICAgICAgIH0KSW5kZXg6
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1Jlc291cmNlRmlsdGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdSZXNvdXJjZUZpbHRlci5jcHAJKHJldmlzaW9uIDUx
MDQzKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgU1ZHUmVzb3VyY2VGaWx0ZXI6OnByZXBh
cmVGaWx0ZXIoR3IKICAgICBjb250ZXh0ID0gc291cmNlR3JhcGhpY0NvbnRleHQ7CiB9CiAKLXZv
aWQgU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5RmlsdGVyKEdyYXBoaWNzQ29udGV4dComIGNvbnRl
eHQsIGNvbnN0IFJlbmRlck9iamVjdCopCit2b2lkIFNWR1Jlc291cmNlRmlsdGVyOjphcHBseUZp
bHRlcihHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVj
dCkKIHsKICAgICBpZiAoIW1fc2F2ZWRDb250ZXh0KQogICAgICAgICByZXR1cm47CkBAIC0xMTMs
NyArMTEzLDEwIEBAIHZvaWQgU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5RmlsdGVyKEdyYXAKICNp
ZiAhUExBVEZPUk0oQ0cpCiAgICAgICAgICAgICByZXN1bHRJbWFnZS0+dHJhbnNmb3JtQ29sb3JT
cGFjZShMaW5lYXJSR0IsIERldmljZVJHQik7CiAjZW5kaWYKLSAgICAgICAgICAgIGNvbnRleHQt
PmRyYXdJbWFnZShyZXN1bHRJbWFnZS0+aW1hZ2UoKSwgbGFzdEVmZmVjdC0+c3ViUmVnaW9uKCkp
OworICAgICAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gRGV2aWNlQ29sb3JTcGFjZTsK
KyAgICAgICAgICAgIGlmIChvYmplY3QpCisgICAgICAgICAgICAgICAgY29sb3JTcGFjZSA9IG9i
amVjdC0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpOworICAgICAgICAgICAgY29udGV4dC0+ZHJhd0lt
YWdlKHJlc3VsdEltYWdlLT5pbWFnZSgpLCBsYXN0RWZmZWN0LT5zdWJSZWdpb24oKSwgY29sb3JT
cGFjZSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVNZXJnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRU1lcmdlLmNwcAkocmV2aXNpb24gNTEwNDMpCisrKyBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3
OSw3IEBAIHZvaWQgRkVNZXJnZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9tZXJnZUlucHV0cy5zaXplKCk7IGkrKykgewogICAgICAgICBG
bG9hdFJlY3QgZGVzdFJlY3QgPSBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX21lcmdlSW5wdXRzW2ld
LT5zdWJSZWdpb24oKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX21lcmdl
SW5wdXRzW2ldLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBkZXN0UmVjdCk7CisgICAgICAgIGZp
bHRlckNvbnRleHQtPmRyYXdJbWFnZShtX21lcmdlSW5wdXRzW2ldLT5yZXN1bHRJbWFnZSgpLT5p
bWFnZSgpLCBkZXN0UmVjdCwgRGV2aWNlQ29sb3JTcGFjZSk7CiAgICAgfQogfQogCkluZGV4OiBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcAkocmV2aXNpb24g
NTEwNDMpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCB2b2lkIEZFT2Zmc2V0OjphcHBseShGaWx0
ZXIqIGZpbHRlcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luLT5zdWJS
ZWdpb24oKS53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW4t
PnN1YlJlZ2lvbigpLmhlaWdodCgpKTsKIAotICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZSht
X2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBkc3RSZWN0KTsKKyAgICBmaWx0ZXJDb250ZXh0
LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgZHN0UmVjdCwgRGV2aWNl
Q29sb3JTcGFjZSk7CiB9CiAKIHZvaWQgRkVPZmZzZXQ6OmR1bXAoKQpJbmRleDogV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcAkocmV2aXNpb24gNTEwNDMpCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBGRVRpbGU6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogCiAg
ICAgT3duUHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRp
bGVSZWN0LnNpemUoKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0KiB0aWxlSW1hZ2VDb250ZXh0ID0g
dGlsZUltYWdlLT5jb250ZXh0KCk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC0+ZHJhd0ltYWdlKG1f
aW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIEludFBvaW50KCkpOworICAgIHRpbGVJbWFnZUNv
bnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBJbnRQb2ludCgp
LCBEZXZpY2VDb2xvclNwYWNlKTsKICAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybiA9IFBhdHRl
cm46OmNyZWF0ZSh0aWxlSW1hZ2UtPmltYWdlKCksIHRydWUsIHRydWUpOwogCiAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbWF0cml4OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTEwNTApCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAwOS0x
MS0xNiAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgZm9yIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTMyMSBNYWtlIAorICAgICAgICAtd2Via2l0LWNvbG9y
LWNvcnJlY3Rpb24gd29yayB3aXRoIHVudGFnZ2VkIGltYWdlcworCisgICAgICAgICogZmFzdC9j
c3MvY29sb3ItY29ycmVjdGlvbi1vbi1iYWNrZ3JvdW5kLWltYWdlLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tdW50YWdnZWQtaW1hZ2VzLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3Jlc291cmNlcy9wdXJwbGUtbm9wcm9maWxlLnBuZzog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24t
b24tYmFja2dyb3VuZC1pbWFnZS1leHBlY3RlZC5jaGVja3N1bTogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tb24tYmFja2dyb3VuZC1pbWFn
ZS1leHBlY3RlZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2Nzcy9j
b2xvci1jb3JyZWN0aW9uLW9uLWJhY2tncm91bmQtaW1hZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi11bnRhZ2dl
ZC1pbWFnZXMtZXhwZWN0ZWQuY2hlY2tzdW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLXVudGFnZ2VkLWltYWdlcy1leHBlY3RlZC5wbmc6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9u
LXVudGFnZ2VkLWltYWdlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorCiAyMDA5LTExLTE2ICBLZW5u
ZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2
ZXIgSHVudC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tb24t
YmFja2dyb3VuZC1pbWFnZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3Nz
L2NvbG9yLWNvcnJlY3Rpb24tb24tYmFja2dyb3VuZC1pbWFnZS5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi1iYWNrZ3JvdW5kLWlt
YWdlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKKzxodG1sPgorPHN0eWxlPgor
LnB1cnBsZSB7CisgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdyZXNvdXJjZXMvcHVycGxlLW5v
cHJvZmlsZS5wbmcnKTsKKyAgICB3aWR0aDogNDAwcHg7CisgICAgaGVpZ2h0OiA0MDBweDsKKyAg
ICBmbG9hdDogbGVmdDsKK30KKzwvc3R5bGU+CisKKzxib2R5PgorCis8cD5UaGUgdHdvIHNxdWFy
ZXMgYmVsb3cgc2hvdWxkIG5vdCBtYXRjaCBlYWNoIG90aGVyLiBPbiB0aGUgbGVmdCBhbiB1bmNv
cnJlY3RlZCBpbWFnZSBpcyB0aWxlZCBhcyBhIGJhY2tncm91bmQsIGFuZCBvbiB0aGUgcmlnaHQg
dGhlIHNhbWUgaW1hZ2UgaXMgdGlsZWQgYXMgYSBiYWNrZ3JvdW5kLCBidXQgaXQgaXMgY29ycmVj
dGVkIGZyb20gc1JHQi48L3A+Cis8ZGl2IGNsYXNzPSJwdXJwbGUiPjwvZGl2PgorPGRpdiBjbGFz
cz0icHVycGxlIiBzdHlsZT0iLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOiBzUkdCOyI+PC9kaXY+
CisKKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3NzL2NvbG9yLWNv
cnJlY3Rpb24tdW50YWdnZWQtaW1hZ2VzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi11bnRhZ2dlZC1pbWFnZXMuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tdW50YWdnZWQtaW1h
Z2VzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKKzxodG1sPgorPHN0eWxlPgor
LnB1cnBsZSB7CisgICAgYm9yZGVyOiBzb2xpZCAyMHB4ICM1NjAwNjM7CisgICAgZmxvYXQ6IGxl
ZnQ7Cit9Cis8L3N0eWxlPgorCis8Ym9keT4KKzxwPlRoZSB0d28gc3F1YXJlcyBiZWxvdyBzaG91
bGQgbm90IG1hdGNoIGVhY2ggb3RoZXIuIE9uIHRoZSBsZWZ0IGlzIGFuIHVuY29ycmVjdGVkIGlt
YWdlIGFuZCBib3JkZXIsIGFuZCBvbiB0aGUgcmlnaHQgaXMgdGhlIHNhbWUgaW1hZ2UgYW5kIHNh
bWUgYm9yZGVyIGNvbG9yIGNvcnJlY3RlZCBmcm9tIHNSR0IuPC9wPgorPGltZyBzcmM9InJlc291
cmNlcy9wdXJwbGUtbm9wcm9maWxlLnBuZyIgY2xhc3M9InB1cnBsZSIgLz4KKzxpbWcgc3JjPSJy
ZXNvdXJjZXMvcHVycGxlLW5vcHJvZmlsZS5wbmciIGNsYXNzPSJwdXJwbGUiIHN0eWxlPSItd2Vi
a2l0LWNvbG9yLWNvcnJlY3Rpb246c1JHQjsiIC8+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi1iYWNr
Z3JvdW5kLWltYWdlLWV4cGVjdGVkLmNoZWNrc3VtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLW9uLWJhY2tncm91bmQtaW1h
Z2UtZXhwZWN0ZWQuY2hlY2tzdW0JKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi1iYWNrZ3JvdW5kLWltYWdlLWV4cGVj
dGVkLmNoZWNrc3VtCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitjNTM2Y2M2YTRkNzJhZTc3
MmUzNTM4NDRlZjlhMWI3NApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLW9uLWJhY2tncm91
bmQtaW1hZ2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLW9uLWJhY2tncm91bmQtaW1hZ2UtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvY3Nz
L2NvbG9yLWNvcnJlY3Rpb24tb24tYmFja2dyb3VuZC1pbWFnZS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgNzg1eDg2MAorICBS
ZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgNzg1eDYwMAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA3ODV4
ODYwCisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDc4NXg2MDAKKyAgICBSZW5k
ZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc2OXg1NzYKKyAgICAgIFJlbmRlckJsb2NrIHtQ
fSBhdCAoMCwwKSBzaXplIDc2OXgzNgorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAs
MCkgc2l6ZSA3Njh4MzYKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA3Njg6ICJU
aGUgdHdvIHNxdWFyZXMgYmVsb3cgc2hvdWxkIG5vdCBtYXRjaCBlYWNoIG90aGVyLiBPbiB0aGUg
bGVmdCBhbiB1bmNvcnJlY3RlZCBpbWFnZSBpcyB0aWxlZCBhcyBhIGJhY2tncm91bmQsIGFuZCBv
biB0aGUiCisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMTgpIHdpZHRoIDQ4MDogInJpZ2h0IHRo
ZSBzYW1lIGltYWdlIGlzIHRpbGVkIGFzIGEgYmFja2dyb3VuZCwgYnV0IGl0IGlzIGNvcnJlY3Rl
ZCBmcm9tIHNSR0IuIgorICAgICAgUmVuZGVyQmxvY2sgKGZsb2F0aW5nKSB7RElWfSBhdCAoMCw1
Mikgc2l6ZSA0MDB4NDAwCisgICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtESVZ9IGF0ICgw
LDQ1Mikgc2l6ZSA0MDB4NDAwCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9j
c3MvY29sb3ItY29ycmVjdGlvbi11bnRhZ2dlZC1pbWFnZXMtZXhwZWN0ZWQuY2hlY2tzdW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJl
Y3Rpb24tdW50YWdnZWQtaW1hZ2VzLWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tdW50YWdn
ZWQtaW1hZ2VzLWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACis5
MDQyZTljMWNkOTg2Y2NlYjZmMzQ2ZTM2ZWViYWU3MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0
aW9uLXVudGFnZ2VkLWltYWdlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tdW50YWdnZWQtaW1hZ2Vz
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9m
YXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLXVudGFnZ2VkLWltYWdlcy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAor
ICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4
MDB4NjAwCisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBS
ZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1NzYKKyAgICAgIFJlbmRlckJsb2Nr
IHtQfSBhdCAoMCwwKSBzaXplIDc4NHgzNgorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQg
KDAsMCkgc2l6ZSA3NzJ4MzYKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA3NzI6
ICJUaGUgdHdvIHNxdWFyZXMgYmVsb3cgc2hvdWxkIG5vdCBtYXRjaCBlYWNoIG90aGVyLiBPbiB0
aGUgbGVmdCBpcyBhbiB1bmNvcnJlY3RlZCBpbWFnZSBhbmQgYm9yZGVyLCBhbmQgb24gdGhlIHJp
Z2h0IGlzIHRoZSIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwxOCkgd2lkdGggMzYyOiAic2Ft
ZSBpbWFnZSBhbmQgc2FtZSBib3JkZXIgY29sb3IgY29ycmVjdGVkIGZyb20gc1JHQi4iCisgICAg
ICBSZW5kZXJJbWFnZSB7SU1HfSBhdCAoMCw1Mikgc2l6ZSAxNDB4MTQwIFtib3JkZXI6ICgyMHB4
IHNvbGlkICM1NjAwNjMpXQorICAgICAgUmVuZGVySW1hZ2Uge0lNR30gYXQgKDE0MCw1Mikgc2l6
ZSAxNDB4MTQwIFtib3JkZXI6ICgyMHB4IHNvbGlkICM1NjAwNjMpXQpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9jc3MvcmVzb3VyY2VzL3B1cnBsZS1ub3Byb2ZpbGUucG5nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fu
bm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUg
PSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgo=
</data>
<flag name="review"
          id="25022"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43521</attachid>
            <date>2009-11-19 13:54:22 -0800</date>
            <delta_ts>2009-11-19 15:12:12 -0800</delta_ts>
            <desc>Newer Patch</desc>
            <filename>forReview3.txt</filename>
            <type>text/plain</type>
            <size>71585</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTIwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA3IEBACisyMDA5LTExLTE5ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXgg
Zm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTMyMSBNYWtlIC13
ZWJraXQtCisgICAgICAgIGNvbG9yLWNvcnJlY3Rpb24gd29yayB3aXRoIHVudGFnZ2VkIGltYWdl
cworCisgICAgICAgIEltYWdlJ3MgZHJhdygpLCBkcmF3UGF0dGVybigpLCBhbmQgZmlsbFdpdGhT
b2xpZENvbG9yKCkgZnVuY3Rpb25zIAorICAgICAgICBub3cgdGFrZSBhIENvbG9yU3BhY2UuIEEg
YnVuY2ggb2YgY2xhc3NlcyBpbmhlcml0IGZyb20gSW1hZ2UsIHNvIAorICAgICAgICBkcmF3KCkg
YW5kIGRyYXdQYXR0ZXJuKCkgZnVuY3Rpb25zIHRoZXJlIG11c3QgYWxzbyB0YWtlIGEgCisgICAg
ICAgIENvbG9yU3BhY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmZpbGxXaXRoU29saWRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZTo6ZHJhd1RpbGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R2VuZXJhdGVkSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJhdGVk
SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0
ZWRJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZHJhdyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oOgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6
ZHJhdyk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmg6CisKKyAgICAgICAgQWxs
IG9mIHRoZSBkcmF3SW1hZ2UoKSBmdW5jdGlvbnMgYW5kIGRyYXdUaWxlZCgpIGZ1bmN0aW9ucyBv
ZiAKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IG5vdyB0YWtlIGEgQ29sb3JTcGFjZS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0Lmg6CisKKyAgICAgICAgVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFs
IHdvcmsgaXMgZG9uZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmltYWdlV2l0aENvbG9yU3BhY2UpOiBOZXcgc3RhdGljIGZ1
bmN0aW9uIHRoYXQgcmV0dXJucyBhIAorICAgICAgICBjb3B5IG9mIHRoZSBnaXZlbiBpbWFnZSBp
biB0aGUgZ2l2ZW4gQ29sb3JTcGFjZSAqSUYqIHdlIHNob3VsZCB1c2UgCisgICAgICAgIHRoZSBn
aXZlbiBDb2xvclNwYWNlLiBXZSB3aWxsIGlnbm9yZSB0aGUgY29sb3Igc3BhY2UgaWYgdGhlIGlt
YWdlIAorICAgICAgICBpcyB0YWdnZWQgYW5kIHJldHVybiAwLiAKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpkcmF3KTogTm93IHRha2VzIGEgQ29sb3JTcGFjZSBhbmQgdXNlcyBpdCB0
byAKKyAgICAgICAgY2FsbCBpbWFnZVdpdGhDb2xvclNwYWNlKCkuIAorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKTogU2FtZS4KKworICAgICAgICBBdHRlbXB0IHRvIGtlZXAg
YWxsIHBvcnRzIGJ1aWxkaW5nLiAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpk
cmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2luZ2xl
RnJhbWVTa2lhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
U2luZ2xlRnJhbWVTa2lhOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9J
bWFnZVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3UGF0dGVybik6CisKKyAgICAgICAgQ2FsbGVy
cyBvZiBHcmFwaGljc0NvbnRleHQncyBkcmF3SW1hZ2UoKSBhbmQgZHJhd1RpbGVkKCkgZnVuY3Rp
b25zIAorICAgICAgICBub3cgbmVlZCB0byBzZW5kIGEgQ29sb3JTcGFjZS4KKyAgICAgICAgKiBo
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpwYWludCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlRnJvbVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxFdmVudCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29sb3JNYXRyaXg6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjph
cHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGlj
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJUaGVtZU1hYzo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6cGFpbnROaW5lUGllY2VJbWFnZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpwYWludFJlcGxhY2Vk
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnBhaW50UmVzaXplcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxpc3RNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6cGFp
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJXaWRnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0OjpwYWludCk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyUGF0dGVybi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYWludFNlcnZlclBhdHRlcm46OnNldHVwKToKKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVz
b3VyY2VGaWx0ZXI6OmFwcGx5RmlsdGVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmFwcGx5KToKKyAg
ICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRU9mZnNldDo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmFwcGx5KToKKwogMjAw
OS0xMS0xOSAgRG1pdHJ5IFRpdG92ICA8ZGltaWNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBO
b3QgcmV2aWV3ZWQsIGF0dGVtcHQgdG8gZml4IENocm9taXVtIGJ1aWxkLgpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA1MTIwMCkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OSw3ICsyNTksNyBAQCB2
b2lkIEhUTUxDYW52YXNFbGVtZW50OjpwYWludChHcmFwaGljc0NvCiAgICAgaWYgKG1faW1hZ2VC
dWZmZXIpIHsKICAgICAgICAgSW1hZ2UqIGltYWdlID0gbV9pbWFnZUJ1ZmZlci0+aW1hZ2UoKTsK
ICAgICAgICAgaWYgKGltYWdlKQotICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdl
LCByKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgRGV2aWNlQ29sb3JT
cGFjZSwgcik7CiAgICAgfQogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9u
IDUxMjAwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAyLDcgKzEwMDIsNyBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAgICAgRmxvYXRSZWN0IHNvdXJjZVJlY3QgPSBjLT5y
b3VuZFRvRGV2aWNlUGl4ZWxzKHNyY1JlY3QpOwogICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IGMt
PnJvdW5kVG9EZXZpY2VQaXhlbHMoZHN0UmVjdCk7CiAgICAgd2lsbERyYXcoZGVzdFJlY3QpOwot
ICAgIGMtPmRyYXdJbWFnZShjYWNoZWRJbWFnZS0+aW1hZ2UoKSwgZGVzdFJlY3QsIHNvdXJjZVJl
Y3QsIHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUpOworICAgIGMtPmRyYXdJbWFnZShjYWNoZWRJ
bWFnZS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNvdXJjZVJlY3QsIHN0
YXRlKCkubV9nbG9iYWxDb21wb3NpdGUpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6ZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIGZsb2F0IHgsIGZsb2F0
IHkpCkBAIC0xMDUyLDcgKzEwNTIsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlCiAgICAgaWYgKCFzb3VyY2VDYW52YXMtPm9yaWdpbkNsZWFuKCkpCiAgICAgICAg
IGNhbnZhcygpLT5zZXRPcmlnaW5UYWludGVkKCk7CiAKLSAgICBjLT5kcmF3SW1hZ2UoYnVmZmVy
LT5pbWFnZSgpLCBkZXN0UmVjdCwgc291cmNlUmVjdCwgc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0
ZSk7CisgICAgYy0+ZHJhd0ltYWdlKGJ1ZmZlci0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwg
ZGVzdFJlY3QsIHNvdXJjZVJlY3QsIHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUpOwogICAgIHdp
bGxEcmF3KGRlc3RSZWN0KTsgLy8gVGhpcyBjYWxsIGNvbWVzIGFmdGVyIGRyYXdJbWFnZSwgc2lu
Y2UgdGhlIGJ1ZmZlciB3ZSBkcmF3IGludG8gbWF5IGJlIG91ciBvd24sIGFuZCB3ZSBuZWVkIHRv
IG1ha2Ugc3VyZSBpdCBpcyBkaXJ0eS4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBBcmd1YWJseSB3aWxsRHJhdyBzaG91bGQgYmVjb21lIGRpZERyYXcgYW5kIG9jY3VyIGFmdGVy
IGRyYXdpbmcgY2FsbHMgYW5kIG5vdCBiZWZvcmUgdGhlbSB0byBhdm9pZCBwcm9ibGVtcyBsaWtl
IHRoaXMuCiB9CkBAIC0xMTQ2LDcgKzExNDYsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6ZHJhd0ltYWdlCiAKICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9hdFJlY3QoZHgs
IGR5LCBkdywgZGgpOwogICAgIHdpbGxEcmF3KGRlc3RSZWN0KTsKLSAgICBjLT5kcmF3SW1hZ2Uo
Y2FjaGVkSW1hZ2UtPmltYWdlKCksIGRlc3RSZWN0LCBGbG9hdFJlY3Qoc3gsIHN5LCBzdywgc2gp
LCBvcCk7CisgICAgYy0+ZHJhd0ltYWdlKGNhY2hlZEltYWdlLT5pbWFnZSgpLCBEZXZpY2VDb2xv
clNwYWNlLCBkZXN0UmVjdCwgRmxvYXRSZWN0KHN4LCBzeSwgc3csIHNoKSwgb3ApOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0QWxwaGEoZmxvYXQgYWxwaGEpCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDUxMjAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY0LDcgKzc2NCw3IEBAIHZv
aWQgU2Nyb2xsVmlldzo6cGFpbnRTY3JvbGxiYXJzKEdyYXBoaWMKIHZvaWQgU2Nyb2xsVmlldzo6
cGFpbnRQYW5TY3JvbGxJY29uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKIHsKICAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEltYWdlKiwgcGFuU2Nyb2xsSWNvbiwgKEltYWdlOjpsb2FkUGxhdGZv
cm1SZXNvdXJjZSgicGFuSWNvbiIpLnJlbGVhc2VSZWYoKSkpOwotICAgIGNvbnRleHQtPmRyYXdJ
bWFnZShwYW5TY3JvbGxJY29uLCBtX3BhblNjcm9sbEljb25Qb2ludCk7CisgICAgY29udGV4dC0+
ZHJhd0ltYWdlKHBhblNjcm9sbEljb24sIERldmljZUNvbG9yU3BhY2UsIG1fcGFuU2Nyb2xsSWNv
blBvaW50KTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5oCShyZXZpc2lvbiA1MTIwMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDEzICsxNjUsMTMgQEAg
cHJvdGVjdGVkOgogICAgIEJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gMCk7CiAKICNpZiBQ
TEFURk9STShXSU4pCi0gICAgdmlydHVhbCB2b2lkIGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6
ZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNp
emUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0Zy
YW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3Bh
Y2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKICNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7
CiAKICNpZiBQTEFURk9STShXWCkgfHwgKFBMQVRGT1JNKFdJTkNFKSAmJiAhUExBVEZPUk0oUVQp
KQogICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJh
bnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSEFJS1UpCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcAkocmV2aXNpb24gNTEyMDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXZvaWQgR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCit2b2lkIEdlbmVyYXRlZEltYWdl
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wKQogewogICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICBjb250ZXh0LT5zZXRD
b21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3ApOwpAQCAtNDgsNyArNDgsNyBAQCB2b2lkIEdl
bmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4CiB9CiAKIHZvaWQgR2VuZXJhdGVkSW1h
Z2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9ybSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgLy8gQ3JlYXRlIGEgQml0
bWFwSW1hZ2UgYW5kIGNhbGwgZHJhd1BhdHRlcm4gb24gaXQuCiAgICAgT3duUHRyPEltYWdlQnVm
ZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9zaXplKTsKQEAgLTYyLDcg
KzYyLDcgQEAgdm9pZCBHZW5lcmF0ZWRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpYwogICAgIElt
YWdlKiBiaXRtYXAgPSBpbWFnZUJ1ZmZlci0+aW1hZ2UoKTsKICAgICAKICAgICAvLyBOb3cganVz
dCBjYWxsIGRyYXdUaWxlZCBvbiB0aGF0IGltYWdlLgotICAgIGJpdG1hcC0+ZHJhd1BhdHRlcm4o
Y29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIGNvbXBvc2l0ZU9wLCBk
ZXN0UmVjdCk7CisgICAgYml0bWFwLT5kcmF3UGF0dGVybihjb250ZXh0LCBzcmNSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCwgZGVzdFJl
Y3QpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZElt
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJ
bWFnZS5oCShyZXZpc2lvbiA1MTIwMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2Vu
ZXJhdGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsOSArNTcsOSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAog
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVP
cGVyYXRvcik7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgdmlydHVhbCB2b2lkIGRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb21wb3NpdGVPcGVyYXRv
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOwogICAgIAogICAg
IEdlbmVyYXRlZEltYWdlKFBhc3NSZWZQdHI8R2VuZXJhdG9yPiBnZW5lcmF0b3IsIGNvbnN0IElu
dFNpemUmIHNpemUpCiAgICAgICAgIDogbV9nZW5lcmF0b3IoZ2VuZXJhdG9yKQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24g
NTEyMDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwOCwyNCArMzA4LDI0IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
OjpwYWludGluZ0Rpc2FibGVkKCkKICAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnBhaW50aW5n
RGlzYWJsZWQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGlt
YWdlLCBjb25zdCBJbnRQb2ludCYgcCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIGNvbnN0IEludFBvaW50JiBwLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKLSAgICBk
cmF3SW1hZ2UoaW1hZ2UsIHAsIEludFJlY3QoMCwgMCwgLTEsIC0xKSwgb3ApOworICAgIGRyYXdJ
bWFnZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBwLCBJbnRSZWN0KDAsIDAsIC0xLCAtMSksIG9w
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIGNv
bnN0IEludFJlY3QmIHIsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlT
Y2FsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgciwgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewotICAgIGRyYXdJbWFnZShpbWFnZSwg
ciwgSW50UmVjdCgwLCAwLCAtMSwgLTEpLCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICBk
cmF3SW1hZ2UoaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwgciwgSW50UmVjdCgwLCAwLCAtMSwgLTEp
LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZShJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBkZXN0LCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3Qg
SW50UG9pbnQmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wKQogewotICAgIGRyYXdJbWFnZShpbWFnZSwgSW50UmVjdChkZXN0LCBzcmNSZWN0LnNpemUo
KSksIHNyY1JlY3QsIG9wKTsKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwg
SW50UmVjdChkZXN0LCBzcmNSZWN0LnNpemUoKSksIHNyY1JlY3QsIG9wKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGRl
c3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVz
ZUxvd1F1YWxpdHlTY2FsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2Uq
IGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdCwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93
UXVhbGl0eVNjYWxlKQogewotICAgIGRyYXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0KGRlc3QpLCBz
cmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIHN0
eWxlQ29sb3JTcGFjZSwgRmxvYXRSZWN0KGRlc3QpLCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0
eVNjYWxlKTsKIH0KIAogI2lmICFQTEFURk9STShXSU5DRSkgfHwgUExBVEZPUk0oUVQpCkBAIC00
MzEsNyArNDMxLDcgQEAgY29uc3QgVmVjdG9yPEludFJlY3Q+JiBHcmFwaGljc0NvbnRleHQ6Ogog
ICAgIHJldHVybiBtX2NvbW1vbi0+bV9mb2N1c1JpbmdSZWN0czsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1
YWxpdHlTY2FsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdl
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0
eVNjYWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWltYWdlKQogICAgICAg
ICByZXR1cm47CkBAIC00NTUsMjkgKzQ1NSwyOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlKEltYWdlKiBpCiAgICAgICAgIHNhdmUoKTsKICAgICAgICAgc2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uTm9uZSk7CiAgICAgfQotICAgIGltYWdlLT5kcmF3
KHRoaXMsIEZsb2F0UmVjdChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0dywgdGgpKSwgRmxv
YXRSZWN0KHNyYy5sb2NhdGlvbigpLCBGbG9hdFNpemUodHN3LCB0c2gpKSwgb3ApOworICAgIGlt
YWdlLT5kcmF3KHRoaXMsIEZsb2F0UmVjdChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0dywg
dGgpKSwgRmxvYXRSZWN0KHNyYy5sb2NhdGlvbigpLCBGbG9hdFNpemUodHN3LCB0c2gpKSwgc3R5
bGVDb2xvclNwYWNlLCBvcCk7CiAgICAgaWYgKHVzZUxvd1F1YWxpdHlTY2FsZSkKICAgICAgICAg
cmVzdG9yZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1h
Z2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRQb2ludCYgc3JjUG9pbnQs
IGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRQb2ludCYgc3JjUG9p
bnQsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFpbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaW1hZ2UtPmRyYXdUaWxlZCh0aGlzLCByZWN0LCBzcmNQb2ludCwgdGlsZVNpemUsIG9wKTsK
KyAgICBpbWFnZS0+ZHJhd1RpbGVkKHRoaXMsIHJlY3QsIHNyY1BvaW50LCB0aWxlU2l6ZSwgc3R5
bGVDb2xvclNwYWNlLCBvcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJ
bWFnZShJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBDb21w
b3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJ
bWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBk
ZXN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdl
OjpUaWxlUnVsZSB2UnVsZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChoUnVs
ZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUgJiYgdlJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlKQog
ICAgICAgICAvLyBKdXN0IGRvIGEgc2NhbGUuCi0gICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1h
Z2UsIGRlc3QsIHNyY1JlY3QsIG9wKTsKKyAgICAgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwg
c3R5bGVDb2xvclNwYWNlLCBkZXN0LCBzcmNSZWN0LCBvcCk7CiAKLSAgICBpbWFnZS0+ZHJhd1Rp
bGVkKHRoaXMsIGRlc3QsIHNyY1JlY3QsIGhSdWxlLCB2UnVsZSwgb3ApOworICAgIGltYWdlLT5k
cmF3VGlsZWQodGhpcywgZGVzdCwgc3JjUmVjdCwgaFJ1bGUsIHZSdWxlLCBzdHlsZUNvbG9yU3Bh
Y2UsIG9wKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZFJvdW5kZWRSZWN0Q2xpcChj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXpl
JiB0b3BSaWdodCwKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaAkocmV2aXNpb24gNTEyMDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsMTUgKzIxMywxNSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
KTsKICAgICAgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVX
aWR0aCk7CiAKLSAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYs
IENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7Ci0gICAgICAgIHZvaWQg
ZHJhd0ltYWdlKEltYWdlKiwgY29uc3QgSW50UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29t
cG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7Ci0gICAg
ICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VP
dmVyKTsKLSAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBjb25zdCBJbnRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3Np
dGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKLSAgICAgICAg
dm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwKKyAgICAgICAgdm9p
ZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50
UG9pbnQmLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgICAg
ICB2b2lkIGRyYXdJbWFnZShJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25z
dCBJbnRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29s
IHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1h
Z2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVT
b3VyY2VPdmVyKTsKKyAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VM
b3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLAogICAgICAg
ICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIs
IGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOwotICAgICAgICB2b2lkIGRyYXdUaWxl
ZEltYWdlKEltYWdlKiwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFBvaW50JiBz
cmNQb2ludCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsCisgICAgICAgIHZvaWQgZHJhd1RpbGVk
SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEludFBvaW50JiBzcmNQb2ludCwgY29uc3QgSW50U2l6ZSYgdGlsZVNp
emUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRl
U291cmNlT3Zlcik7Ci0gICAgICAgIHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UqLCBjb25zdCBJ
bnRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwKKyAgICAgICAgdm9pZCBk
cmF3VGlsZWRJbWFnZShJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJ
bnRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUgPSBJbWFnZTo6U3RyZXRjaFRpbGUs
IEltYWdlOjpUaWxlUnVsZSB2UnVsZSA9IEltYWdlOjpTdHJldGNoVGlsZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIp
OwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAkocmV2aXNpb24gNTEyMDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzUsMTQgKzc1LDE0IEBAIGJvb2wgSW1hZ2U6OnNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRC
dWYKICAgICByZXR1cm4gZGF0YUNoYW5nZWQoYWxsRGF0YVJlY2VpdmVkKTsKIH0KIAotdm9pZCBJ
bWFnZTo6ZmlsbFdpdGhTb2xpZENvbG9yKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxv
YXRSZWN0JiBkc3RSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
KQordm9pZCBJbWFnZTo6ZmlsbFdpdGhTb2xpZENvbG9yKEdyYXBoaWNzQ29udGV4dCogY3R4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKICAgICBpZiAoY29sb3Iu
YWxwaGEoKSA8PSAwKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgY3R4dC0+c2F2ZSgpOwog
ICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbighY29sb3IuaGFzQWxwaGEoKSAmJiBvcCA9
PSBDb21wb3NpdGVTb3VyY2VPdmVyID8gQ29tcG9zaXRlQ29weSA6IG9wKTsKLSAgICBjdHh0LT5m
aWxsUmVjdChkc3RSZWN0LCBjb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7CisgICAgY3R4dC0+Zmls
bFJlY3QoZHN0UmVjdCwgY29sb3IsIHN0eWxlQ29sb3JTcGFjZSk7CiAgICAgY3R4dC0+cmVzdG9y
ZSgpOwogfQogCkBAIC0xMDQsMTAgKzEwNCwxMCBAQCBzdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBj
YWxjdWxhdGVQYXR0ZXJuCiB9CiAKIAotdm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29u
dGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRQb2ludCYg
c3JjUG9pbnQsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGVkVGlsZVNpemUsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wKQordm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgc3JjUG9pbnQsIGNvbnN0
IEZsb2F0U2l6ZSYgc2NhbGVkVGlsZVNpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBD
b21wb3NpdGVPcGVyYXRvciBvcCkKIHsgICAgCiAgICAgaWYgKG1heUZpbGxXaXRoU29saWRDb2xv
cigpKSB7Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjdHh0LCBkZXN0UmVjdCwgc29saWRD
b2xvcigpLCBvcCk7CisgICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjdHh0LCBkZXN0UmVjdCwg
c29saWRDb2xvcigpLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMTMyLDIyICsxMzIsMjIgQEAgdm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNz
Q29udGV4dCogYwogICAgICAgICB2aXNpYmxlU3JjUmVjdC5zZXRZKChkZXN0UmVjdC55KCkgLSBv
bmVUaWxlUmVjdC55KCkpIC8gc2NhbGUuaGVpZ2h0KCkpOwogICAgICAgICB2aXNpYmxlU3JjUmVj
dC5zZXRXaWR0aChkZXN0UmVjdC53aWR0aCgpIC8gc2NhbGUud2lkdGgoKSk7CiAgICAgICAgIHZp
c2libGVTcmNSZWN0LnNldEhlaWdodChkZXN0UmVjdC5oZWlnaHQoKSAvIHNjYWxlLmhlaWdodCgp
KTsKLSAgICAgICAgZHJhdyhjdHh0LCBkZXN0UmVjdCwgdmlzaWJsZVNyY1JlY3QsIG9wKTsKKyAg
ICAgICAgZHJhdyhjdHh0LCBkZXN0UmVjdCwgdmlzaWJsZVNyY1JlY3QsIHN0eWxlQ29sb3JTcGFj
ZSwgb3ApOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggcGF0dGVyblRyYW5zZm9ybSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkuc2NhbGVOb25Vbmlm
b3JtKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKICAgICBGbG9hdFJlY3QgdGlsZVJl
Y3QoRmxvYXRQb2ludCgpLCBpbnRyaW5zaWNUaWxlU2l6ZSk7ICAgIAotICAgIGRyYXdQYXR0ZXJu
KGN0eHQsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBvbmVUaWxlUmVjdC5sb2NhdGlvbigp
LCBvcCwgZGVzdFJlY3QpOworICAgIGRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBvbmVUaWxlUmVjdC5sb2NhdGlvbigpLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBk
ZXN0UmVjdCk7CiAgICAgCiAgICAgc3RhcnRBbmltYXRpb24oKTsKIH0KIAogLy8gRklYTUU6IE1l
cmdlIHdpdGggdGhlIG90aGVyIGRyYXdUaWxlZCBldmVudHVhbGx5LCBzaW5jZSB3ZSBuZWVkIGEg
Y29tYmluYXRpb24gb2YgYm90aCBmb3Igc29tZSB0aGluZ3MuCi12b2lkIEltYWdlOjpkcmF3VGls
ZWQoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgVGlsZVJ1bGUgaFJ1bGUsIFRpbGVSdWxlIHZSdWxlLCBDb21w
b3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQq
IGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBUaWxlUnVsZSBoUnVsZSwgVGlsZVJ1bGUgdlJ1bGUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsgICAgCiAgICAgaWYgKG1heUZpbGxXaXRoU29s
aWRDb2xvcigpKSB7Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjdHh0LCBkc3RSZWN0LCBz
b2xpZENvbG9yKCksIG9wKTsKKyAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRzdFJl
Y3QsIHNvbGlkQ29sb3IoKSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCkBAIC0xNzAsNyArMTcwLDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdy
YXBoaWNzQ29udGV4dCogYwogICAgICAgICB2UGhhc2UgLT0gZm1vZGYoZHN0UmVjdC5oZWlnaHQo
KSwgc2NhbGUuaGVpZ2h0KCkgKiBzcmNSZWN0LmhlaWdodCgpKSAvIDIuMGY7CiAgICAgRmxvYXRQ
b2ludCBwYXR0ZXJuUGhhc2UoZHN0UmVjdC54KCkgLSBoUGhhc2UsIGRzdFJlY3QueSgpIC0gdlBo
YXNlKTsKICAgICAKLSAgICBkcmF3UGF0dGVybihjdHh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwYXR0ZXJuUGhhc2UsIG9wLCBkc3RSZWN0KTsKKyAgICBkcmF3UGF0dGVybihjdHh0LCBz
cmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwYXR0ZXJuUGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwg
b3AsIGRzdFJlY3QpOwogCiAgICAgc3RhcnRBbmltYXRpb24oKTsKIH0KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmgJKHJldmlzaW9uIDUxMjAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5l
IEltYWdlX2gKIAogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKQEAgLTE1NCwyMSArMTU1LDIyIEBAIHB1YmxpYzoKIHByb3RlY3Rl
ZDoKICAgICBJbWFnZShJbWFnZU9ic2VydmVyKiA9IDApOwogCi0gICAgc3RhdGljIHZvaWQgZmls
bFdpdGhTb2xpZENvbG9yKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKTsKKyAgICBz
dGF0aWMgdm9pZCBmaWxsV2l0aFNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRSZWN0JiBkc3RSZWN0LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvcik7CiAKKyAgICAvLyBUaGUgQ29sb3JTcGFjZSBwYXJhbWV0ZXIg
d2lsbCBvbmx5IGJlIHVzZWQgZm9yIHVudGFnZ2VkIGltYWdlcy4KICNpZiBQTEFURk9STShXSU4p
Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUs
IENvbXBvc2l0ZU9wZXJhdG9yKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lTWF0Y2hp
bmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwg
Y29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yKSB7IH0KICNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBDb21wb3NpdGVPcGVyYXRvcikgPSAwOwotICAgIHZvaWQgZHJhd1RpbGVkKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgc3Jj
UG9pbnQsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIENvbXBvc2l0ZU9wZXJhdG9yKTsKLSAg
ICB2b2lkIGRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgVGlsZVJ1bGUgaFJ1bGUsIFRpbGVSdWxlIHZS
dWxlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcikgPSAwOwor
ICAgIHZvaWQgZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNp
emUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAg
dm9pZCBkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIFRpbGVSdWxlIGhSdWxlLCBUaWxlUnVsZSB2UnVs
ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAogICAg
IC8vIFN1cHBvcnRpbmcgdGlsZWQgZHJhd2luZwogICAgIHZpcnR1YWwgYm9vbCBtYXlGaWxsV2l0
aFNvbGlkQ29sb3IoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgQ29sb3Igc29saWRD
b2xvcigpIGNvbnN0IHsgcmV0dXJuIENvbG9yKCk7IH0KICAgICAKICAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJh
dG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CiAKIHByaXZh
dGU6CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOyAvLyBUaGUgZW5jb2RlZCByYXcg
ZGF0YSBmb3IgdGhlIGltYWdlLiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUNhaXJvLmNwcAkocmV2aXNpb24gNTEyMDApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3
ICs4OSw3IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShjYWlyb19zdXJmYWNlX3QKICAgICBj
aGVja0ZvclNvbGlkQ29sb3IoKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3Ap
CiB7CiAgICAgRmxvYXRSZWN0IHNyY1JlY3Qoc3JjKTsKICAgICBGbG9hdFJlY3QgZHN0UmVjdChk
c3QpOwpAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiAKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1heUZpbGxXaXRoU29saWRDb2xv
cigpKSB7Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjb250ZXh0LCBkc3RSZWN0LCBzb2xp
ZENvbG9yKCksIG9wKTsKKyAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRzdFJl
Y3QsIHNvbGlkQ29sb3IoKSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTE3MSw3ICsxNzEsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogCiB9CiAKIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QpCiB7CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCk7CiAgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ug
d29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkocmV2aXNpb24gNTEyMDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEsMjMgKzYxLDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgQ0dDb2xvclNwYWNlUmVmIGRldmljZVJHQkNvbG9yU3Bh
Y2VSZWYoKQotewotICAgIHN0YXRpYyBDR0NvbG9yU3BhY2VSZWYgZGV2aWNlU3BhY2UgPSBDR0Nv
bG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKLSAgICByZXR1cm4gZGV2aWNlU3BhY2U7Ci19Ci0K
LXN0YXRpYyBDR0NvbG9yU3BhY2VSZWYgc1JHQkNvbG9yU3BhY2VSZWYoKQotewotICAgIC8vIEZJ
WE1FOiBXaW5kb3dzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBrQ0dDb2xvclNwYWNlU1JHQiwgdGhp
cyBpcyB0cmFja2VkIGJ5IGh0dHA6Ly93ZWJraXQub3JnL2IvMzEzNjMuCi0jaWYgUExBVEZPUk0o
V0lOKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKQotICAgIHJldHVybiBkZXZpY2VSR0JD
b2xvclNwYWNlUmVmKCk7Ci0jZWxzZQotICAgIHN0YXRpYyBDR0NvbG9yU3BhY2VSZWYgc1JHQlNw
YWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNSR0IpOwotICAg
IHJldHVybiBzUkdCU3BhY2U7Ci0jZW5kaWYKLX0KLQogc3RhdGljIENHQ29sb3JSZWYgY3JlYXRl
Q0dDb2xvcldpdGhDb2xvclNwYWNlKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQogewogICAgIENHRmxvYXQgY29tcG9uZW50c1s0XTsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZUNHLmgJKHJldmlzaW9uIDUxMjAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNywyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2lubGluZSBz
dGF0aWMgQ0dDb2xvclNwYWNlUmVmIGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKQoreworICAgIHN0
YXRpYyBDR0NvbG9yU3BhY2VSZWYgZGV2aWNlU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZp
Y2VSR0IoKTsKKyAgICByZXR1cm4gZGV2aWNlU3BhY2U7Cit9CisKK2lubGluZSBzdGF0aWMgQ0dD
b2xvclNwYWNlUmVmIHNSR0JDb2xvclNwYWNlUmVmKCkKK3sKKyAgICAvLyBGSVhNRTogV2luZG93
cyBzaG91bGQgYmUgYWJsZSB0byB1c2Uga0NHQ29sb3JTcGFjZVNSR0IsIHRoaXMgaXMgdHJhY2tl
ZCBieSBodHRwOi8vd2Via2l0Lm9yZy9iLzMxMzYzLgorI2lmIFBMQVRGT1JNKFdJTikgfHwgZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikKKyAgICByZXR1cm4gZGV2aWNlUkdCQ29sb3JTcGFjZVJl
ZigpOworI2Vsc2UKKyAgICBzdGF0aWMgQ0dDb2xvclNwYWNlUmVmIHNSR0JTcGFjZSA9IENHQ29s
b3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdCKTsKKyAgICByZXR1cm4gc1JH
QlNwYWNlOworI2VuZGlmCit9CisKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZSB7CiBwdWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKENHQ29udGV4
dFJlZiBjZ0NvbnRleHQpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VD
Ry5jcHAJKHJldmlzaW9uIDUxMjAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkZs
b2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNH
LmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIlBERkRvY3VtZW50SW1h
Z2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtMTI3LDI1ICsxMjgsNDYgQEAg
dm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKICAgICB9CiB9CiAKK3N0YXRp
YyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2VXaXRoQ29sb3JTcGFjZShDR0ltYWdlUmVmIG9y
aWdpbmFsSW1hZ2UsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBDR0NvbG9yU3BhY2VS
ZWYgb3JpZ2luYWxDb2xvclNwYWNlID0gQ0dJbWFnZUdldENvbG9yU3BhY2Uob3JpZ2luYWxJbWFn
ZSk7CisKKyAgICAvLyBJZiB0aGUgaW1hZ2UgYWxyZWFkeSBoYXMgYSAobm9uLWRldmljZSkgY29s
b3Igc3BhY2UsIHdlIGRvbid0IHdhbnQgdG8KKyAgICAvLyBvdmVycmlkZSBpdCwgc28gcmV0dXJu
LgorICAgIGlmICghb3JpZ2luYWxDb2xvclNwYWNlIHx8ICFDRkVxdWFsKG9yaWdpbmFsQ29sb3JT
cGFjZSwgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBzd2l0Y2ggKGNvbG9yU3BhY2UpIHsKKyAgICBjYXNlIERldmljZUNvbG9yU3BhY2U6CisgICAg
ICAgIHJldHVybiAwOworICAgIGNhc2Ugc1JHQkNvbG9yU3BhY2U6CisgICAgICAgIHJldHVybiBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4oQWRvcHRDRiwgQ0dJbWFnZUNyZWF0ZUNvcHlXaXRoQ29sb3JT
cGFjZShvcmlnaW5hbEltYWdlLCAKKyAgICAgICAgICAgIHNSR0JDb2xvclNwYWNlUmVmKCkpKTsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwog
Q0dJbWFnZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJlZigpCiB7CiAgICAgcmV0dXJuIGZy
YW1lQXRJbmRleCgwKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCit2b2lkIEJpdG1hcEltYWdlOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgc3RhcnRBbmltYXRpb24oKTsKIAotICAg
IENHSW1hZ2VSZWYgaW1hZ2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7
CiAgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBp
bWFnZSB5ZXQuCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAobWF5RmlsbFdpdGhTb2xp
ZENvbG9yKCkpIHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRlc3RSZWN0LCBz
b2xpZENvbG9yKCksIGNvbXBvc2l0ZU9wKTsKKyAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0
eHQsIGRlc3RSZWN0LCBzb2xpZENvbG9yKCksIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3Ap
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZmxvYXQgY3VyckhlaWdodCA9IENHSW1h
Z2VHZXRIZWlnaHQoaW1hZ2UpOworICAgIGZsb2F0IGN1cnJIZWlnaHQgPSBDR0ltYWdlR2V0SGVp
Z2h0KGltYWdlLmdldCgpKTsKICAgICBpZiAoY3VyckhlaWdodCA8PSBzcmNSZWN0LnkoKSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0xODEsMTAgKzIwMywxMCBAQCB2b2lkIEJpdG1hcEltYWdlOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAgICAgICBzdWJpbWFnZVJlY3Quc2V0SGVpZ2h0
KGNlaWxmKHN1YmltYWdlUmVjdC5oZWlnaHQoKSArIHRvcFBhZGRpbmcpKTsKICAgICAgICAgICAg
IGFkanVzdGVkRGVzdFJlY3Quc2V0SGVpZ2h0KHN1YmltYWdlUmVjdC5oZWlnaHQoKSAvIHlTY2Fs
ZSk7CiAKLSAgICAgICAgICAgIGltYWdlID0gQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChp
bWFnZSwgc3ViaW1hZ2VSZWN0KTsKKyAgICAgICAgICAgIGltYWdlID0gQ0dJbWFnZUNyZWF0ZVdp
dGhJbWFnZUluUmVjdChpbWFnZS5nZXQoKSwgc3ViaW1hZ2VSZWN0KTsKICAgICAgICAgICAgIGlm
IChjdXJySGVpZ2h0IDwgc3JjUmVjdC5ib3R0b20oKSkgewotICAgICAgICAgICAgICAgIEFTU0VS
VChDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSA9PSBjdXJySGVpZ2h0IC0gQ0dSZWN0SW50ZWdyYWwo
c3JjUmVjdCkub3JpZ2luLnkpOwotICAgICAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0
SGVpZ2h0KENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpIC8geVNjYWxlKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkgPT0gY3VyckhlaWdodCAtIENH
UmVjdEludGVncmFsKHNyY1JlY3QpLm9yaWdpbi55KTsKKyAgICAgICAgICAgICAgICBhZGp1c3Rl
ZERlc3RSZWN0LnNldEhlaWdodChDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSAvIHlTY2Fs
ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhZGp1c3Rl
ZERlc3RSZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoZGVzdFJlY3QueCgpIC0gc3JjUmVjdC54
KCkgLyB4U2NhbGUsIGRlc3RSZWN0LnkoKSAtIHNyY1JlY3QueSgpIC8geVNjYWxlKSk7CkBAIC0y
MDQsMTEgKzIyNiwxMiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCog
CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwogICAgIGFkanVzdGVkRGVz
dFJlY3Quc2V0WSgtYWRqdXN0ZWREZXN0UmVjdC5ib3R0b20oKSk7CiAKLSAgICAvLyBEcmF3IHRo
ZSBpbWFnZS4KLSAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgYWRqdXN0ZWREZXN0UmVj
dCwgaW1hZ2UpOworICAgIC8vIEFkanVzdCB0aGUgY29sb3Igc3BhY2UuCisgICAgaWYgKFJldGFp
blB0cjxDR0ltYWdlUmVmPiBjb2xvclNwYWNlSW1hZ2UgPSBpbWFnZVdpdGhDb2xvclNwYWNlKGlt
YWdlLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UpKQorICAgICAgICBpbWFnZSA9IGNvbG9yU3BhY2VJ
bWFnZTsKIAotICAgIGlmIChzaG91bGRVc2VTdWJpbWFnZSkKLSAgICAgICAgQ0dJbWFnZVJlbGVh
c2UoaW1hZ2UpOworICAgIC8vIERyYXcgdGhlIGltYWdlLgorICAgIENHQ29udGV4dERyYXdJbWFn
ZShjb250ZXh0LCBhZGp1c3RlZERlc3RSZWN0LCBpbWFnZS5nZXQoKSk7CiAKICAgICBjdHh0LT5y
ZXN0b3JlKCk7CiAKQEAgLTIyMyw3ICsyNDYsNyBAQCBzdGF0aWMgdm9pZCBkcmF3UGF0dGVybkNh
bGxiYWNrKHZvaWQqIGluCiB9CiAKIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewogICAgIGlmICghbmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYwLDYgKzI4MywxMCBAQCB2b2lkIElt
YWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqCiAgICAgICAgIEFTU0VSVChoID09IGhl
aWdodCgpKTsKICAgICAgICAgc3ViSW1hZ2UuYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdl
SW5SZWN0KHRpbGVJbWFnZSwgdGlsZVJlY3QpKTsKICAgICB9CisKKyAgICAvLyBBZGp1c3QgdGhl
IGNvbG9yIHNwYWNlLgorICAgIGlmIChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29sb3JTcGFjZUlt
YWdlID0gaW1hZ2VXaXRoQ29sb3JTcGFjZShzdWJJbWFnZS5nZXQoKSwgc3R5bGVDb2xvclNwYWNl
KSkKKyAgICAgICAgc3ViSW1hZ2UgPSBjb2xvclNwYWNlSW1hZ2U7CiAgICAgCiAjaWZuZGVmIEJV
SUxESU5HX09OX1RJR0VSCiAgICAgLy8gTGVvcGFyZCBoYXMgYW4gb3B0aW1pemVkIGNhbGwgZm9y
IHRoZSB0aWxpbmcgb2YgaW1hZ2UgcGF0dGVybnMsIGJ1dCB3ZSBjYW4gb25seSB1c2UgaXQgaWYg
dGhlIGltYWdlIGhhcyBiZWVuIGRlY29kZWQgZW5vdWdoIHRoYXQKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAkocmV2aXNpb24g
NTEyMDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAgaW50IFBERkRvY3VtZW50SW1h
Z2U6OnBhZ2VDb3VudCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZG9jdW1lbnQgPyBDR1BERkRvY3Vt
ZW50R2V0TnVtYmVyT2ZQYWdlcyhtX2RvY3VtZW50KSA6IDA7CiB9CiAKLXZvaWQgUERGRG9jdW1l
bnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCkK
K3ZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKICAgICBpZiAoIW1fZG9jdW1lbnQgfHwgbV9j
dXJyZW50UGFnZSA9PSAtMSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgJKHJldmlzaW9uIDUxMjAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OwogCiAgICAgICAgIFBERkRvY3VtZW50SW1hZ2Uo
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJh
dG9yKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgICAgIAogICAgICAgICB2
b2lkIHNldEN1cnJlbnRQYWdlKGludCk7CiAgICAgICAgIGludCBwYWdlQ291bnQoKSBjb25zdDsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAJKHJldmlzaW9uIDUxMjAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0
LDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjphcHBseShGaWx0ZXIqIGZpbHRlcgogICAgIGlmICgh
ZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmlsdGVyQ29udGV4dC0+ZHJh
d0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0
KG1faW4tPnN1YlJlZ2lvbigpKSk7CisgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4t
PnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnN1YlJl
Z2lvbigpKSwgRGV2aWNlQ29sb3JTcGFjZSk7CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQ
b2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwogICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRh
PiBpbWFnZURhdGEocmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdl
UmVjdCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb3NpdGUuY3BwCShyZXZpc2lvbiA1MTIwMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMywyNiAr
MTMzLDI2IEBAIHZvaWQgRkVDb21wb3NpdGU6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogICAgIEZs
b2F0UmVjdCBzcmNSZWN0ID0gRmxvYXRSZWN0KDAuZiwgMC5mLCAtMS5mLCAtMS5mKTsKICAgICBz
d2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKLSAg
ICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5pbWFn
ZSgpLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c3ViUmVnaW9uKCkpKTsKLSAgICAgICAg
ZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNh
bGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnN1YlJlZ2lvbigpKSk7CisgICAgICAgIGZpbHRlckNv
bnRleHQtPmRyYXdJbWFnZShtX2luMi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgY2FsY3VsYXRl
RHJhd2luZ1JlY3QobV9pbjItPnN1YlJlZ2lvbigpKSwgRGV2aWNlQ29sb3JTcGFjZSk7CisgICAg
ICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgp
LCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zdWJSZWdpb24oKSksIERldmljZUNvbG9yU3Bh
Y2UpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOgog
ICAgICAgICBmaWx0ZXJDb250ZXh0LT5zYXZlKCk7CiAgICAgICAgIGZpbHRlckNvbnRleHQtPmNs
aXBUb0ltYWdlQnVmZmVyKGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zdWJSZWdpb24oKSks
IG1faW4yLT5yZXN1bHRJbWFnZSgpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdl
KG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4t
PnN1YlJlZ2lvbigpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5y
ZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zdWJSZWdp
b24oKSksIERldmljZUNvbG9yU3BhY2UpOwogICAgICAgICBmaWx0ZXJDb250ZXh0LT5yZXN0b3Jl
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgot
ICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1h
Z2UoKSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c3ViUmVnaW9uKCkpKTsKLSAgICAgICAg
ZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBj
YWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3Np
dGVEZXN0aW5hdGlvbk91dCk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2lu
LT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zdWJS
ZWdpb24oKSksIERldmljZUNvbG9yU3BhY2UpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3
SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0
KG1faW4yLT5zdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0LCBE
ZXZpY2VDb2xvclNwYWNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9BVE9QOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJl
c3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zdWJSZWdp
b24oKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1h
Z2UoKS0+aW1hZ2UoKSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c3ViUmVnaW9uKCkpLCBz
cmNSZWN0LCBDb21wb3NpdGVTb3VyY2VBdG9wKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJh
d0ltYWdlKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBjYWxjdWxhdGVEcmF3aW5nUmVj
dChtX2luMi0+c3ViUmVnaW9uKCkpLCBEZXZpY2VDb2xvclNwYWNlKTsKKyAgICAgICAgZmlsdGVy
Q29udGV4dC0+ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0
ZURyYXdpbmdSZWN0KG1faW4tPnN1YlJlZ2lvbigpKSwgc3JjUmVjdCwgQ29tcG9zaXRlU291cmNl
QXRvcCwgRGV2aWNlQ29sb3JTcGFjZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01Q
T1NJVEVfT1BFUkFUT1JfWE9SOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9p
bjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5z
dWJSZWdpb24oKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVz
dWx0SW1hZ2UoKS0+aW1hZ2UoKSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c3ViUmVnaW9u
KCkpLCBzcmNSZWN0LCBDb21wb3NpdGVYT1IpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3
SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0
KG1faW4yLT5zdWJSZWdpb24oKSksIERldmljZUNvbG9yU3BhY2UpOworICAgICAgICBmaWx0ZXJD
b250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgY2FsY3VsYXRl
RHJhd2luZ1JlY3QobV9pbi0+c3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVYT1IsIERl
dmljZUNvbG9yU3BhY2UpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09Q
RVJBVE9SX0FSSVRITUVUSUM6IHsKICAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3Qg
PSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChtX2luLT5zdWJSZWdpb24oKSk7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3Bw
CShyZXZpc2lvbiA1MTIwMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCB2b2lkIFNv
dXJjZUdyYXBoaWM6OmFwcGx5KEZpbHRlciogZmlsdGVyCiAgICAgaWYgKCFmaWx0ZXJDb250ZXh0
KQogICAgICAgICByZXR1cm47CiAKLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UoZmlsdGVy
LT5zb3VyY2VJbWFnZSgpLT5pbWFnZSgpLCBJbnRQb2ludCgpKTsKKyAgICBmaWx0ZXJDb250ZXh0
LT5kcmF3SW1hZ2UoZmlsdGVyLT5zb3VyY2VJbWFnZSgpLT5pbWFnZSgpLCBJbnRQb2ludCgpLCBE
ZXZpY2VDb2xvclNwYWNlKTsKIH0KIAogdm9pZCBTb3VyY2VHcmFwaGljOjpkdW1wKCkKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUhhaWt1LmNwcAkocmV2
aXNpb24gNTEyMDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFp
a3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6
OmludmFsaWRhdGVQbGF0Zm9ybURhdGEKIH0KIAogLy8gRHJhd2luZyBSb3V0aW5lcwotdm9pZCBC
aXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit2b2lkIEJp
dG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBk
c3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgc3RhcnRBbmltYXRpb24oKTsKIApAQCAtOTIsNyAr
OTIsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKSkgewotICAgICAgICBm
aWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZHN0LCBzb2xpZENvbG9yKCksIG9wKTsKKyAgICAgICAg
ZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRzdCwgc29saWRDb2xvcigpLCBzdHlsZUNvbG9yU3Bh
Y2UsIG9wKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTA5LDcgKzEwOSw3IEBAIHZv
aWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICBjdHh0LT5yZXN0b3Jl
KCk7CiB9CiAKLXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50LCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQordm9pZCBJbWFnZTo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgc3JjUG9pbnQsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QpCiB7CiAgICAgLy8gRklYTUU6IGZpbmlzaCB0aGlzIHRvIHN1
cHBvcnQgYWxzbyBwaGFzZWQgcG9zaXRpb24gKHNyY1BvaW50KQogICAgIHN0YXJ0QW5pbWF0aW9u
KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAJKHJldmlz
aW9uIDUxMjAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzCiB9CiAKIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QpCiB7CiAgICAgUVBpeG1hcCogZnJhbWVQaXhtYXAgPSBuYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOwogICAgIGlmICghZnJhbWVQaXhtYXApIC8vIElmIGl0J3MgdG9vIGVhcmx5
IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgQml0
bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEKIAogLy8gRHJhd2luZyBSb3V0aW5lcwog
dm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0LAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHNyYywg
Q29tcG9zaXRlT3BlcmF0b3Igb3ApCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UmVjdCYgc3JjLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Ig
b3ApCiB7CiAgICAgc3RhcnRBbmltYXRpb24oKTsKIApAQCAtMTcxLDcgKzE3MSw3IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKG1heUZpbGxXaXRoU29saWRDb2xvcigpKSB7Ci0gICAgICAgIGZpbGxXaXRoU29saWRD
b2xvcihjdHh0LCBkc3QsIHNvbGlkQ29sb3IoKSwgb3ApOworICAgICAgICBmaWxsV2l0aFNvbGlk
Q29sb3IoY3R4dCwgZHN0LCBzb2xpZENvbG9yKCksIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaAkocmV2aXNp
b24gNTEyMDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VT
aW5nbGVGcmFtZVNraWEuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6
CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAogcHJpdmF0
ZToKICAgICBOYXRpdmVJbWFnZVNraWEgbV9uYXRpdmVJbWFnZTsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCShyZXZpc2lvbiA1MTIwMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDIsNiArMzAyLDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0KgogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBmbG9hdFNy
Y1JlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21w
b3NpdGVPcCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QpCiB7CkBAIC00MDUsNyArNDA2LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xp
ZENvbG9yKCkKIH0KIAogdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBpZiAoIW1fc291cmNlLmlu
aXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQzNyw2ICs0MzgsNyBAQCB2b2lkIEJp
dG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiB2b2lkIEJpdG1hcEltYWdlU2luZ2xl
RnJhbWVTa2lhOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVP
cGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBGbG9hdFJlY3Qgbm9ybURzdFJlY3QgPSBub3Jt
YWxpemVSZWN0KGRzdFJlY3QpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VDR1dpbi5jcHAJKHJldmlzaW9uIDUxMjAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcg
QEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTQogCiAgICAgSW50U2l6
ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwogICAgIGlmIChzaXplKQotICAgICAg
ICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoJmdjLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwg
Ym1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgqc2l6ZSksIENvbXBv
c2l0ZUNvcHkpOworICAgICAgICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoJmdjLCBGbG9h
dFJlY3QoMC4wZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50
U2l6ZSgqc2l6ZSksIERldmljZUNvbG9yU3BhY2UsIENvbXBvc2l0ZUNvcHkpOwogICAgIGVsc2UK
ICAgICAgICAgZHJhdygmZ2MsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBibXBJbmZvLmJtV2lkdGgs
IGJtcEluZm8uYm1IZWlnaHQpLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgaW1hZ2VTaXplLndpZHRo
KCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbXBvc2l0ZUNvcHkpOwogCkBAIC04OCw3ICs4OCw3
IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE0KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXpl
KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBJ
bnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3ZvaWQgQml0
bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQqIGN0
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQog
ewogICAgIHNpemVfdCBmcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmcmFtZXM7ICsraSkgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VDYWlyb1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAJKHJldmlzaW9uIDUxMjAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDcgKzgyLDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTQog
CiAgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwogICAgIGlmIChz
aXplKQotICAgICAgICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoJmdjLCBGbG9hdFJlY3Qo
MC4wZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgq
c2l6ZSksIENvbXBvc2l0ZUNvcHkpOworICAgICAgICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNp
emUoJmdjLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJt
SGVpZ2h0KSwgSW50U2l6ZSgqc2l6ZSksIERldmljZUNvbG9yU3BhY2UsIENvbXBvc2l0ZUNvcHkp
OwogICAgIGVsc2UKICAgICAgICAgZHJhdygmZ2MsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBibXBJ
bmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgaW1h
Z2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbXBvc2l0ZUNvcHkpOwogCkBA
IC05Miw3ICs5Miw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE0K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hp
bmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVP
cCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGlj
c0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYg
c3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wKQogewogICAgIHNpemVfdCBmcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZXM7ICsraSkgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3d4L0ltYWdlV3guY3BwCShyZXZpc2lvbiA1MTIwMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDEzICs4
NiwxMyBAQCB2b2lkIEJpdG1hcEltYWdlOjppbml0UGxhdGZvcm1EYXRhKCkKIAogLy8gRHJhd2lu
ZyBSb3V0aW5lcwogCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21wb3NpdGVP
cGVyYXRvciBvcCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0
LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKICAgICBpZiAoIW1fc291
cmNlLmluaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtYXlGaWxsV2l0
aFNvbGlkQ29sb3IoKSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZHN0LCBz
b2xpZENvbG9yKCksIG9wKTsKKyAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRzdCwg
c29saWRDb2xvcigpLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiAKICAgICAgICAgb2JzZXJ2ZXItPmRpZERyYXcodGhpcyk7CiB9CiAKLXZvaWQgQml0
bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QpCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQogewog
ICAgIGlmICghbV9zb3VyY2UuaW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0JKHJldmlzaW9uIDUxMjAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTM5Niw3ICszOTYsNyBAQCBib29sIFNjcm9sbGJhclRoZW1lTWFjOjpwYWludChT
Y3JvbGxiYXIqCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIEhJ
VGhlbWVEcmF3VHJhY2soJnRyYWNrSW5mbywgMCwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxh
dGZvcm1Db250ZXh0KCksIGtISVRoZW1lT3JpZW50YXRpb25Ob3JtYWwpOwotICAgICAgICBjb250
ZXh0LT5kcmF3SW1hZ2UoaW1hZ2VCdWZmZXItPmltYWdlKCksIHNjcm9sbGJhci0+ZnJhbWVSZWN0
KCkubG9jYXRpb24oKSk7CisgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZUJ1ZmZlci0+
aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5sb2NhdGlv
bigpKTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDUxMjAwKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nzcs
NyArNDc3LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZQogICAg
ICAgICAgICAgICAgICAgICAgICAgY2xpZW50Rm9yQmFja2dyb3VuZEltYWdlID0gYm9keVJlbmRl
cmVyOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdUaWxlZEltYWdlKGJnLT5pbWFnZShjbGllbnRGb3JCYWNrZ3JvdW5kSW1hZ2UsIHRp
bGVTaXplKSwgZGVzdFJlY3QsIHBoYXNlLCB0aWxlU2l6ZSwgY29tcG9zaXRlT3ApOworICAgICAg
ICAgICAgY29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoYmctPmltYWdlKGNsaWVudEZvckJhY2tncm91
bmRJbWFnZSwgdGlsZVNpemUpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIGRlc3RSZWN0LCBwaGFz
ZSwgdGlsZVNpemUsIGNvbXBvc2l0ZU9wKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzA2LDYg
KzcwNiw3IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWMKICAgICAg
ICAgICAgICAgICAgICAgICAoaW1hZ2VIZWlnaHQgLSB0b3BTbGljZSAtIGJvdHRvbVNsaWNlKSA+
IDAgJiYgKGggLSB0b3BXaWR0aCAtIGJvdHRvbVdpZHRoKSA+IDA7CiAKICAgICBJbWFnZSogaW1h
Z2UgPSBzdHlsZUltYWdlLT5pbWFnZSh0aGlzLCBpbWFnZVNpemUpOworICAgIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSA9IHN0eWxlLT5jb2xvclNwYWNlKCk7CiAKICAgICBpZiAoZHJhd0xlZnQpIHsK
ICAgICAgICAgLy8gUGFpbnQgdGhlIHRvcCBhbmQgYm90dG9tIGxlZnQgY29ybmVycy4KQEAgLTcx
MywxOCArNzE0LDE4IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWMK
ICAgICAgICAgLy8gVGhlIHRvcCBsZWZ0IGNvcm5lciByZWN0IGlzICh0eCwgdHksIGxlZnRXaWR0
aCwgdG9wV2lkdGgpCiAgICAgICAgIC8vIFRoZSByZWN0IHRvIHVzZSBmcm9tIHdpdGhpbiB0aGUg
aW1hZ2UgaXMgb2J0YWluZWQgZnJvbSBvdXIgc2xpY2UsIGFuZCBpcyAoMCwgMCwgbGVmdFNsaWNl
LCB0b3BTbGljZSkKICAgICAgICAgaWYgKGRyYXdUb3ApCi0gICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQtPmRyYXdJbWFnZShpbWFnZSwgSW50UmVjdCh0eCwgdHksIGxlZnRXaWR0aCwgdG9wV2lk
dGgpLAorICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIGNvbG9y
U3BhY2UsIEludFJlY3QodHgsIHR5LCBsZWZ0V2lkdGgsIHRvcFdpZHRoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMCwgMCwgbGVmdFNsaWNlLCB0b3BT
bGljZSksIG9wKTsKIAogICAgICAgICAvLyBUaGUgYm90dG9tIGxlZnQgY29ybmVyIHJlY3QgaXMg
KHR4LCB0eSArIGggLSBib3R0b21XaWR0aCwgbGVmdFdpZHRoLCBib3R0b21XaWR0aCkKICAgICAg
ICAgLy8gVGhlIHJlY3QgdG8gdXNlIGZyb20gd2l0aGluIHRoZSBpbWFnZSBpcyAoMCwgaW1hZ2VI
ZWlnaHQgLSBib3R0b21TbGljZSwgbGVmdFNsaWNlLCBib3RvbVNsaWNlKQogICAgICAgICBpZiAo
ZHJhd0JvdHRvbSkKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdl
LCBJbnRSZWN0KHR4LCB0eSArIGggLSBib3R0b21XaWR0aCwgbGVmdFdpZHRoLCBib3R0b21XaWR0
aCksCisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgY29sb3JT
cGFjZSwgSW50UmVjdCh0eCwgdHkgKyBoIC0gYm90dG9tV2lkdGgsIGxlZnRXaWR0aCwgYm90dG9t
V2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCgw
LCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCBsZWZ0U2xpY2UsIGJvdHRvbVNsaWNlKSwgb3Ap
OwogCiAgICAgICAgIC8vIFBhaW50IHRoZSBsZWZ0IGVkZ2UuCiAgICAgICAgIC8vIEhhdmUgdG8g
c2NhbGUgYW5kIHRpbGUgaW50byB0aGUgYm9yZGVyIHJlY3QuCi0gICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIEludFJlY3QodHgsIHR5ICsgdG9wV2lkdGgsIGxl
ZnRXaWR0aCwKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZSwg
Y29sb3JTcGFjZSwgSW50UmVjdCh0eCwgdHkgKyB0b3BXaWR0aCwgbGVmdFdpZHRoLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggLSB0b3BXaWR0aCAtIGJvdHRvbVdp
ZHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDAs
IHRvcFNsaWNlLCBsZWZ0U2xpY2UsIGltYWdlSGVpZ2h0IC0gdG9wU2xpY2UgLSBib3R0b21TbGlj
ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U6OlN0cmV0
Y2hUaWxlLCAoSW1hZ2U6OlRpbGVSdWxlKXZSdWxlLCBvcCk7CkBAIC03MzUsMTcgKzczNiwxNyBA
QCBib29sIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjCiAgICAgICAgIC8vIFRo
ZSB0b3AgcmlnaHQgY29ybmVyIHJlY3QgaXMgKHR4ICsgdyAtIHJpZ2h0V2lkdGgsIHR5LCByaWdo
dFdpZHRoLCB0b3BXaWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8gdXNlIGZyb20gd2l0aGlu
IHRoZSBpbWFnZSBpcyBvYnRhaW5lZCBmcm9tIG91ciBzbGljZSwgYW5kIGlzIChpbWFnZVdpZHRo
IC0gcmlnaHRTbGljZSwgMCwgcmlnaHRTbGljZSwgdG9wU2xpY2UpCiAgICAgICAgIGlmIChkcmF3
VG9wKQotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIEludFJl
Y3QodHggKyB3IC0gcmlnaHRXaWR0aCwgdHksIHJpZ2h0V2lkdGgsIHRvcFdpZHRoKSwKKyAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBjb2xvclNwYWNlLCBJbnRS
ZWN0KHR4ICsgdyAtIHJpZ2h0V2lkdGgsIHR5LCByaWdodFdpZHRoLCB0b3BXaWR0aCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KGltYWdlV2lkdGggLSBy
aWdodFNsaWNlLCAwLCByaWdodFNsaWNlLCB0b3BTbGljZSksIG9wKTsKIAogICAgICAgICAvLyBU
aGUgYm90dG9tIHJpZ2h0IGNvcm5lciByZWN0IGlzICh0eCArIHcgLSByaWdodFdpZHRoLCB0eSAr
IGggLSBib3R0b21XaWR0aCwgcmlnaHRXaWR0aCwgYm90dG9tV2lkdGgpCiAgICAgICAgIC8vIFRo
ZSByZWN0IHRvIHVzZSBmcm9tIHdpdGhpbiB0aGUgaW1hZ2UgaXMgKGltYWdlV2lkdGggLSByaWdo
dFNsaWNlLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCByaWdodFNsaWNlLCBib3R0b21TbGlj
ZSkKICAgICAgICAgaWYgKGRyYXdCb3R0b20pCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQt
PmRyYXdJbWFnZShpbWFnZSwgSW50UmVjdCh0eCArIHcgLSByaWdodFdpZHRoLCB0eSArIGggLSBi
b3R0b21XaWR0aCwgcmlnaHRXaWR0aCwgYm90dG9tV2lkdGgpLAorICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIGNvbG9yU3BhY2UsIEludFJlY3QodHggKyB3IC0g
cmlnaHRXaWR0aCwgdHkgKyBoIC0gYm90dG9tV2lkdGgsIHJpZ2h0V2lkdGgsIGJvdHRvbVdpZHRo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QoaW1hZ2VX
aWR0aCAtIHJpZ2h0U2xpY2UsIGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2UsIHJpZ2h0U2xpY2Us
IGJvdHRvbVNsaWNlKSwgb3ApOwogCiAgICAgICAgIC8vIFBhaW50IHRoZSByaWdodCBlZGdlLgot
ICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLCBJbnRSZWN0KHR4
ICsgdyAtIHJpZ2h0V2lkdGgsIHR5ICsgdG9wV2lkdGgsIHJpZ2h0V2lkdGgsCisgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGNvbG9yU3BhY2UsIEludFJlY3Qo
dHggKyB3IC0gcmlnaHRXaWR0aCwgdHkgKyB0b3BXaWR0aCwgcmlnaHRXaWR0aCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoIC0gdG9wV2lkdGggLSBib3R0b21XaWR0
aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdChpbWFn
ZVdpZHRoIC0gcmlnaHRTbGljZSwgdG9wU2xpY2UsIHJpZ2h0U2xpY2UsIGltYWdlSGVpZ2h0IC0g
dG9wU2xpY2UgLSBib3R0b21TbGljZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW1hZ2U6OlN0cmV0Y2hUaWxlLCAoSW1hZ2U6OlRpbGVSdWxlKXZSdWxlLCBvcCk7
CkBAIC03NTMsMjAgKzc1NCwyMCBAQCBib29sIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE5p
bmVQaWVjCiAKICAgICAvLyBQYWludCB0aGUgdG9wIGVkZ2UuCiAgICAgaWYgKGRyYXdUb3ApCi0g
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIEludFJlY3QodHgg
KyBsZWZ0V2lkdGgsIHR5LCB3IC0gbGVmdFdpZHRoIC0gcmlnaHRXaWR0aCwgdG9wV2lkdGgpLAor
ICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLCBjb2xvclNwYWNl
LCBJbnRSZWN0KHR4ICsgbGVmdFdpZHRoLCB0eSwgdyAtIGxlZnRXaWR0aCAtIHJpZ2h0V2lkdGgs
IHRvcFdpZHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRS
ZWN0KGxlZnRTbGljZSwgMCwgaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UgLSBsZWZ0U2xpY2UsIHRv
cFNsaWNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW1hZ2U6
OlRpbGVSdWxlKWhSdWxlLCBJbWFnZTo6U3RyZXRjaFRpbGUsIG9wKTsKIAogICAgIC8vIFBhaW50
IHRoZSBib3R0b20gZWRnZS4KICAgICBpZiAoZHJhd0JvdHRvbSkKLSAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZSwgSW50UmVjdCh0eCArIGxlZnRXaWR0aCwgdHkg
KyBoIC0gYm90dG9tV2lkdGgsCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1h
Z2UoaW1hZ2UsIGNvbG9yU3BhY2UsIEludFJlY3QodHggKyBsZWZ0V2lkdGgsIHR5ICsgaCAtIGJv
dHRvbVdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgLSBs
ZWZ0V2lkdGggLSByaWdodFdpZHRoLCBib3R0b21XaWR0aCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSW50UmVjdChsZWZ0U2xpY2UsIGltYWdlSGVpZ2h0IC0gYm90
dG9tU2xpY2UsIGltYWdlV2lkdGggLSByaWdodFNsaWNlIC0gbGVmdFNsaWNlLCBib3R0b21TbGlj
ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEltYWdlOjpUaWxl
UnVsZSloUnVsZSwgSW1hZ2U6OlN0cmV0Y2hUaWxlLCBvcCk7CiAKICAgICAvLyBQYWludCB0aGUg
bWlkZGxlLgogICAgIGlmIChkcmF3TWlkZGxlKQotICAgICAgICBncmFwaGljc0NvbnRleHQtPmRy
YXdUaWxlZEltYWdlKGltYWdlLCBJbnRSZWN0KHR4ICsgbGVmdFdpZHRoLCB0eSArIHRvcFdpZHRo
LCB3IC0gbGVmdFdpZHRoIC0gcmlnaHRXaWR0aCwKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5k
cmF3VGlsZWRJbWFnZShpbWFnZSwgY29sb3JTcGFjZSwgSW50UmVjdCh0eCArIGxlZnRXaWR0aCwg
dHkgKyB0b3BXaWR0aCwgdyAtIGxlZnRXaWR0aCAtIHJpZ2h0V2lkdGgsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaCAtIHRvcFdpZHRoIC0gYm90dG9tV2lkdGgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QobGVmdFNsaWNl
LCB0b3BTbGljZSwgaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UgLSBsZWZ0U2xpY2UsIGltYWdlSGVp
Z2h0IC0gdG9wU2xpY2UgLSBib3R0b21TbGljZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKEltYWdlOjpUaWxlUnVsZSloUnVsZSwgKEltYWdlOjpUaWxlUnVsZSl2
UnVsZSwgb3ApOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gNTEy
MDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4Niw3ICszODYsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50
SW5mCiAgICAgICAgICAgICAgICAgICAgIGNlbnRlclkgPSAwOwogICAgICAgICAgICAgICAgIGlt
YWdlWCA9IGxlZnRCb3JkZXIgKyBsZWZ0UGFkICsgY2VudGVyWCArIDE7CiAgICAgICAgICAgICAg
ICAgaW1hZ2VZID0gdG9wQm9yZGVyICsgdG9wUGFkICsgY2VudGVyWSArIDE7Ci0gICAgICAgICAg
ICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlKCksIEludFBvaW50KHR4ICsgaW1hZ2VYLCB0
eSArIGltYWdlWSkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSgp
LCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIEludFBvaW50KHR4ICsgaW1hZ2VYLCB0eSArIGltYWdl
WSkpOwogICAgICAgICAgICAgICAgIGVycm9yUGljdHVyZURyYXduID0gdHJ1ZTsKICAgICAgICAg
ICAgIH0KIApAQCAtNDI0LDcgKzQyNCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50UmVwbGFj
ZWQoUGFpbnRJbmYKICAgICAgICAgSW50UmVjdCByZWN0KEludFBvaW50KHR4ICsgbGVmdEJvcmRl
ciArIGxlZnRQYWQsIHR5ICsgdG9wQm9yZGVyICsgdG9wUGFkKSwgY29udGVudFNpemUpOwogICAg
ICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsdCA9IChub2RlKCkgJiYgbm9kZSgpLT5oYXNU
YWdOYW1lKGltZ1RhZykpID8gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KG5vZGUoKSkg
OiAwOwogICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciA9IGltYWdl
RWx0ID8gaW1hZ2VFbHQtPmNvbXBvc2l0ZU9wZXJhdG9yKCkgOiBDb21wb3NpdGVTb3VyY2VPdmVy
OwotICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UoY1dpZHRoLCBjSGVpZ2h0KSwgcmVj
dCwgY29tcG9zaXRlT3BlcmF0b3IsIHVzZUxvd1F1YWxpdHlTY2FsaW5nKTsKKyAgICAgICAgY29u
dGV4dC0+ZHJhd0ltYWdlKGltYWdlKGNXaWR0aCwgY0hlaWdodCksIHN0eWxlKCktPmNvbG9yU3Bh
Y2UoKSwgcmVjdCwgY29tcG9zaXRlT3BlcmF0b3IsIHVzZUxvd1F1YWxpdHlTY2FsaW5nKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDUxMjAw
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTY0LDcgKzE5NjQsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIoR3JhcGhp
Y3NDCiAgICAgLy8gUGFpbnQgdGhlIHJlc2l6ZXIgY29udHJvbC4KICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFJlZlB0cjxJbWFnZT4sIHJlc2l6ZUNvcm5lckltYWdlLCAoSW1hZ2U6OmxvYWRQbGF0
Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIpKSk7CiAgICAgSW50UG9pbnQgaW1h
Z2VQb2ludChhYnNSZWN0LnJpZ2h0KCkgLSByZXNpemVDb3JuZXJJbWFnZS0+d2lkdGgoKSwgYWJz
UmVjdC5ib3R0b20oKSAtIHJlc2l6ZUNvcm5lckltYWdlLT5oZWlnaHQoKSk7Ci0gICAgY29udGV4
dC0+ZHJhd0ltYWdlKHJlc2l6ZUNvcm5lckltYWdlLmdldCgpLCBpbWFnZVBvaW50KTsKKyAgICBj
b250ZXh0LT5kcmF3SW1hZ2UocmVzaXplQ29ybmVySW1hZ2UuZ2V0KCksIGJveC0+c3R5bGUoKS0+
Y29sb3JTcGFjZSgpLCBpbWFnZVBvaW50KTsKIAogICAgIC8vIERyYXcgYSBmcmFtZSBhcm91bmQg
dGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUpIGlmIHRoZXJlIGFyZSBhbnkgc2Nyb2xsYmFycyBw
cmVzZW50LgogICAgIC8vIENsaXBwaW5nIHdpbGwgZXhjbHVkZSB0aGUgcmlnaHQgYW5kIGJvdHRv
bSBlZGdlcyBvZiB0aGlzIGZyYW1lLgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1h
cmtlci5jcHAJKHJldmlzaW9uIDUxMjAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0Myw3ICs1NDMsNyBAQCB2b2lkIFJlbmRl
ckxpc3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgICAgIGlmIChzdHlsZSgpLT5oaWdo
bGlnaHQoKSAhPSBudWxsQXRvbSAmJiAhcGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KHR4LCB0eSwgc3R5bGUoKS0+
aGlnaGxpZ2h0KCksIHRydWUpOwogI2VuZGlmCi0gICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZSht
X2ltYWdlLT5pbWFnZSh0aGlzLCBtYXJrZXIuc2l6ZSgpKSwgbWFya2VyLmxvY2F0aW9uKCkpOwor
ICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UobV9pbWFnZS0+aW1hZ2UodGhpcywgbWFya2VyLnNp
emUoKSksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgbWFya2VyLmxvY2F0aW9uKCkpOwogICAgICAg
ICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25Ob25lKSB7CiAgICAgICAgICAgICAv
LyBGSVhNRTogc2VsZWN0aW9uUmVjdCgpIGlzIGluIGFic29sdXRlLCBub3QgcGFpbnRpbmcgY29v
cmRpbmF0ZXMuCiAgICAgICAgICAgICBjb250ZXh0LT5maWxsUmVjdChzZWxlY3Rpb25SZWN0KCks
IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOwpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAkocmV2aXNpb24gNTEyMDApCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
Niw3ICsxNjYsNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQYWludEluZm8mIHBhCiAg
ICAgICAgIGlmIChpbWFnZUVsdC0+cHJlc2VydmVBc3BlY3RSYXRpbygpLT5hbGlnbigpICE9IFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW86OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX05PTkUpCiAgICAg
ICAgICAgICBhZGp1c3RSZWN0c0ZvckFzcGVjdFJhdGlvKGRlc3RSZWN0LCBzcmNSZWN0LCBpbWFn
ZUVsdC0+cHJlc2VydmVBc3BlY3RSYXRpbygpKTsKIAotICAgICAgICBwYWludEluZm8uY29udGV4
dC0+ZHJhd0ltYWdlKGltYWdlKCksIGRlc3RSZWN0LCBzcmNSZWN0KTsKKyAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkZXN0UmVj
dCwgc3JjUmVjdCk7CiAgICAgICAgIGZpbmlzaFJlbmRlclNWR0NvbnRlbnQodGhpcywgcGFpbnRJ
bmZvLCBmaWx0ZXIsIHNhdmVkSW5mby5jb250ZXh0KTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmNwcAkocmV2aXNpb24gNTEyMDApCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJXaWRnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYwLDcgQEAgdm9p
ZCBSZW5kZXJXaWRnZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbgogICAgICAgICAvLyBUZWxsIHRo
ZSB3aWRnZXQgdG8gcGFpbnQgbm93LiAgVGhpcyBpcyB0aGUgb25seSB0aW1lIHRoZSB3aWRnZXQg
aXMgYWxsb3dlZAogICAgICAgICAvLyB0byBwYWludCBpdHNlbGYuICBUaGF0IHdheSBpdCB3aWxs
IGNvbXBvc2l0ZSBwcm9wZXJseSB3aXRoIHotaW5kZXhlZCBsYXllcnMuCiAgICAgICAgIGlmICht
X3N1YnN0aXR1dGVJbWFnZSkKLSAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1h
Z2UobV9zdWJzdGl0dXRlSW1hZ2UuZ2V0KCksIG1fd2lkZ2V0LT5mcmFtZVJlY3QoKSk7CisgICAg
ICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKG1fc3Vic3RpdHV0ZUltYWdlLmdl
dCgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIG1fd2lkZ2V0LT5mcmFtZVJlY3QoKSk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIG1fd2lkZ2V0LT5wYWludChwYWludEluZm8uY29udGV4dCwg
cGFpbnRJbmZvLnJlY3QpOwogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShyZXZp
c2lvbiA1MTIwMCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIGJvb2wgU1ZHSW1hZ2U6Omhhc1JlbGF0aXZlSGVp
Z2h0KCkgY29uc3QKICAgICByZXR1cm4gcm9vdEVsZW1lbnQtPmhlaWdodCgpLnVuaXRUeXBlKCkg
PT0gTGVuZ3RoVHlwZVBlcmNlbnRhZ2U7CiB9CiAKLXZvaWQgU1ZHSW1hZ2U6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCit2b2lkIFNWR0lt
YWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wKQogewogICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm47Cklu
ZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHJldmlzaW9uIDUxMjAwKQorKysgV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgZnJhbWVB
dEluZGV4KHNpemVfdCkgeyByZXR1cm4gMDsgfQogICAgICAgICAKICAgICAgICAgU1ZHSW1hZ2Uo
SW1hZ2VPYnNlcnZlciopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBGbG9hdFJlY3QmIGZyb21SZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRvUmVjdCwg
Q29tcG9zaXRlT3BlcmF0b3IpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGZyb21SZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRvUmVj
dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKICAgICAg
ICAgCiAgICAgICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKICAgICAgICAgCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNl
cnZlclBhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1Bh
aW50U2VydmVyUGF0dGVybi5jcHAJKHJldmlzaW9uIDUxMjAwKQorKysgV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcg
KzEzMSw3IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1cChHcmFwaGkKICAgICAg
ICAgICAgIHRpbGVJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgwLCBwYXR0ZXJuQm91bmRhcmllcygp
LmhlaWdodCgpKTsKICAgICAgICAgICAgIGZvciAoaW50IGogPSBudW1YOyBqID4gMDsgai0tKSB7
CiAgICAgICAgICAgICAgICAgdGlsZUltYWdlQ29udGV4dC0+dHJhbnNsYXRlKHBhdHRlcm5Cb3Vu
ZGFyaWVzKCkud2lkdGgoKSwgMCk7Ci0gICAgICAgICAgICAgICAgdGlsZUltYWdlQ29udGV4dC0+
ZHJhd0ltYWdlKHRpbGUoKS0+aW1hZ2UoKSwgdGlsZVJlY3QsIHRpbGVSZWN0KTsKKyAgICAgICAg
ICAgICAgICB0aWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2UodGlsZSgpLT5pbWFnZSgpLCBvYmpl
Y3QtPnN0eWxlKCktPmNvbG9yU3BhY2UoKSwgdGlsZVJlY3QsIHRpbGVSZWN0KTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHRpbGVJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgtcGF0dGVybkJv
dW5kYXJpZXMoKS53aWR0aCgpICogbnVtWCwgMCk7CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR1Jlc291cmNlRmlsdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdSZXNvdXJjZUZpbHRlci5jcHAJKHJldmlzaW9uIDUxMjAwKQorKysg
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgU1ZHUmVzb3VyY2VGaWx0ZXI6OnByZXBhcmVGaWx0ZXIo
R3IKICAgICBjb250ZXh0ID0gc291cmNlR3JhcGhpY0NvbnRleHQ7CiB9CiAKLXZvaWQgU1ZHUmVz
b3VyY2VGaWx0ZXI6OmFwcGx5RmlsdGVyKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0
IFJlbmRlck9iamVjdCopCit2b2lkIFNWR1Jlc291cmNlRmlsdGVyOjphcHBseUZpbHRlcihHcmFw
aGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKICAg
ICBpZiAoIW1fc2F2ZWRDb250ZXh0KQogICAgICAgICByZXR1cm47CkBAIC0xMTMsNyArMTEzLDEw
IEBAIHZvaWQgU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5RmlsdGVyKEdyYXAKICNpZiAhUExBVEZP
Uk0oQ0cpCiAgICAgICAgICAgICByZXN1bHRJbWFnZS0+dHJhbnNmb3JtQ29sb3JTcGFjZShMaW5l
YXJSR0IsIERldmljZVJHQik7CiAjZW5kaWYKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFn
ZShyZXN1bHRJbWFnZS0+aW1hZ2UoKSwgbGFzdEVmZmVjdC0+c3ViUmVnaW9uKCkpOworICAgICAg
ICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gRGV2aWNlQ29sb3JTcGFjZTsKKyAgICAgICAg
ICAgIGlmIChvYmplY3QpCisgICAgICAgICAgICAgICAgY29sb3JTcGFjZSA9IG9iamVjdC0+c3R5
bGUoKS0+Y29sb3JTcGFjZSgpOworICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKHJlc3Vs
dEltYWdlLT5pbWFnZSgpLCBsYXN0RWZmZWN0LT5zdWJSZWdpb24oKSwgY29sb3JTcGFjZSk7CiAg
ICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVNZXJnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRU1lcmdlLmNwcAkocmV2aXNpb24gNTEyMDApCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHZv
aWQgRkVNZXJnZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9tZXJnZUlucHV0cy5zaXplKCk7IGkrKykgewogICAgICAgICBGbG9hdFJlY3Qg
ZGVzdFJlY3QgPSBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX21lcmdlSW5wdXRzW2ldLT5zdWJSZWdp
b24oKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX21lcmdlSW5wdXRzW2ld
LT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBkZXN0UmVjdCk7CisgICAgICAgIGZpbHRlckNvbnRl
eHQtPmRyYXdJbWFnZShtX21lcmdlSW5wdXRzW2ldLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBk
ZXN0UmVjdCwgRGV2aWNlQ29sb3JTcGFjZSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcAkocmV2aXNpb24gNTEyMDApCisr
KyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODQsNyArODQsNyBAQCB2b2lkIEZFT2Zmc2V0OjphcHBseShGaWx0ZXIqIGZpbHRl
cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luLT5zdWJSZWdpb24oKS53
aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW4tPnN1YlJlZ2lv
bigpLmhlaWdodCgpKTsKIAotICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1
bHRJbWFnZSgpLT5pbWFnZSgpLCBkc3RSZWN0KTsKKyAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1h
Z2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgZHN0UmVjdCwgRGV2aWNlQ29sb3JTcGFj
ZSk7CiB9CiAKIHZvaWQgRkVPZmZzZXQ6OmR1bXAoKQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcAkocmV2aXNpb24gNTEyMDApCisrKyBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcg
KzY3LDcgQEAgdm9pZCBGRVRpbGU6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogCiAgICAgT3duUHRy
PEltYWdlQnVmZmVyPiB0aWxlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRpbGVSZWN0LnNp
emUoKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0KiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdl
LT5jb250ZXh0KCk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4tPnJlc3Vs
dEltYWdlKCktPmltYWdlKCksIEludFBvaW50KCkpOworICAgIHRpbGVJbWFnZUNvbnRleHQtPmRy
YXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBJbnRQb2ludCgpLCBEZXZpY2VD
b2xvclNwYWNlKTsKICAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0
ZSh0aWxlSW1hZ2UtPmltYWdlKCksIHRydWUsIHRydWUpOwogCiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbWF0cml4OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTEwODIpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAwOS0xMS0xOSAgQmV0
aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zMTMyMSBNYWtlIAorICAgICAgICAtd2Via2l0LWNvbG9yLWNvcnJlY3Rp
b24gd29yayB3aXRoIHVudGFnZ2VkIGltYWdlcworCisgICAgICAgICogZmFzdC9jc3MvY29sb3It
Y29ycmVjdGlvbi1vbi1iYWNrZ3JvdW5kLWltYWdlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tdW50YWdnZWQtaW1hZ2VzLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvY3NzL3Jlc291cmNlcy9wdXJwbGUtbm9wcm9maWxlLnBuZzogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tb24tYmFja2dy
b3VuZC1pbWFnZS1leHBlY3RlZC5jaGVja3N1bTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tb24tYmFja2dyb3VuZC1pbWFnZS1leHBlY3Rl
ZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3Jy
ZWN0aW9uLW9uLWJhY2tncm91bmQtaW1hZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi11bnRhZ2dlZC1pbWFnZXMt
ZXhwZWN0ZWQuY2hlY2tzdW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2Nz
cy9jb2xvci1jb3JyZWN0aW9uLXVudGFnZ2VkLWltYWdlcy1leHBlY3RlZC5wbmc6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLXVudGFnZ2Vk
LWltYWdlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorCiAyMDA5LTExLTE3ICBDc2FiYSBPc3p0cm9n
b27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgTm90IHJldmlld2VkLCBmb2xsb3cg
dXAgdG8gcjUxMDcyOiByZW5hbWUgc2tpcHBlZCBlbnRyaWVzCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLW9uLWJhY2tncm91bmQtaW1hZ2UuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLW9uLWJhY2tncm91
bmQtaW1hZ2UuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2NvbG9y
LWNvcnJlY3Rpb24tb24tYmFja2dyb3VuZC1pbWFnZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE4IEBACis8aHRtbD4KKzxzdHlsZT4KKy5wdXJwbGUgeworICAgIGJhY2tncm91bmQtaW1h
Z2U6IHVybCgncmVzb3VyY2VzL3B1cnBsZS1ub3Byb2ZpbGUucG5nJyk7CisgICAgd2lkdGg6IDQw
MHB4OworICAgIGhlaWdodDogNDAwcHg7CisgICAgZmxvYXQ6IGxlZnQ7Cit9Cis8L3N0eWxlPgor
Cis8Ym9keT4KKworPHA+VGhlIHR3byBzcXVhcmVzIGJlbG93IHNob3VsZCBub3QgbWF0Y2ggZWFj
aCBvdGhlci4gT24gdGhlIGxlZnQgYW4gdW5jb3JyZWN0ZWQgaW1hZ2UgaXMgdGlsZWQgYXMgYSBi
YWNrZ3JvdW5kLCBhbmQgb24gdGhlIHJpZ2h0IHRoZSBzYW1lIGltYWdlIGlzIHRpbGVkIGFzIGEg
YmFja2dyb3VuZCwgYnV0IGl0IGlzIGNvcnJlY3RlZCBmcm9tIHNSR0IuPC9wPgorPGRpdiBjbGFz
cz0icHVycGxlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InB1cnBsZSIgc3R5bGU9Ii13ZWJraXQtY29s
b3ItY29ycmVjdGlvbjogc1JHQjsiPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLXVudGFnZ2VkLWltYWdlcy5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tdW50
YWdnZWQtaW1hZ2VzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9j
b2xvci1jb3JyZWN0aW9uLXVudGFnZ2VkLWltYWdlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE0IEBACis8aHRtbD4KKzxzdHlsZT4KKy5wdXJwbGUgeworICAgIGJvcmRlcjogc29saWQg
MjBweCAjNTYwMDYzOworICAgIGZsb2F0OiBsZWZ0OworfQorPC9zdHlsZT4KKworPGJvZHk+Cis8
cD5UaGUgdHdvIHNxdWFyZXMgYmVsb3cgc2hvdWxkIG5vdCBtYXRjaCBlYWNoIG90aGVyLiBPbiB0
aGUgbGVmdCBpcyBhbiB1bmNvcnJlY3RlZCBpbWFnZSBhbmQgYm9yZGVyLCBhbmQgb24gdGhlIHJp
Z2h0IGlzIHRoZSBzYW1lIGltYWdlIGFuZCBzYW1lIGJvcmRlciBjb2xvciBjb3JyZWN0ZWQgZnJv
bSBzUkdCLjwvcD4KKzxpbWcgc3JjPSJyZXNvdXJjZXMvcHVycGxlLW5vcHJvZmlsZS5wbmciIGNs
YXNzPSJwdXJwbGUiIC8+Cis8aW1nIHNyYz0icmVzb3VyY2VzL3B1cnBsZS1ub3Byb2ZpbGUucG5n
IiBjbGFzcz0icHVycGxlIiBzdHlsZT0iLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOnNSR0I7IiAv
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3Qv
Y3NzL2NvbG9yLWNvcnJlY3Rpb24tb24tYmFja2dyb3VuZC1pbWFnZS1leHBlY3RlZC5jaGVja3N1
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3It
Y29ycmVjdGlvbi1vbi1iYWNrZ3JvdW5kLWltYWdlLWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rp
b24tb24tYmFja2dyb3VuZC1pbWFnZS1leHBlY3RlZC5jaGVja3N1bQkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSBAQAorYzUzNmNjNmE0ZDcyYWU3NzJlMzUzODQ0ZWY5YTFiNzQKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3Mv
Y29sb3ItY29ycmVjdGlvbi1vbi1iYWNrZ3JvdW5kLWltYWdlLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlv
bi1vbi1iYWNrZ3JvdW5kLWltYWdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLW9uLWJhY2tncm91
bmQtaW1hZ2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACitsYXll
ciBhdCAoMCwwKSBzaXplIDc4NXg4NjAKKyAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDc4NXg2
MDAKK2xheWVyIGF0ICgwLDApIHNpemUgNzg1eDg2MAorICBSZW5kZXJCbG9jayB7SFRNTH0gYXQg
KDAsMCkgc2l6ZSA3ODV4NjAwCisgICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3
Njl4NTc2CisgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMCkgc2l6ZSA3Njl4MzYKKyAgICAg
ICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNzY4eDM2CisgICAgICAgICAgdGV4
dCBydW4gYXQgKDAsMCkgd2lkdGggNzY4OiAiVGhlIHR3byBzcXVhcmVzIGJlbG93IHNob3VsZCBu
b3QgbWF0Y2ggZWFjaCBvdGhlci4gT24gdGhlIGxlZnQgYW4gdW5jb3JyZWN0ZWQgaW1hZ2UgaXMg
dGlsZWQgYXMgYSBiYWNrZ3JvdW5kLCBhbmQgb24gdGhlIgorICAgICAgICAgIHRleHQgcnVuIGF0
ICgwLDE4KSB3aWR0aCA0ODA6ICJyaWdodCB0aGUgc2FtZSBpbWFnZSBpcyB0aWxlZCBhcyBhIGJh
Y2tncm91bmQsIGJ1dCBpdCBpcyBjb3JyZWN0ZWQgZnJvbSBzUkdCLiIKKyAgICAgIFJlbmRlckJs
b2NrIChmbG9hdGluZykge0RJVn0gYXQgKDAsNTIpIHNpemUgNDAweDQwMAorICAgICAgUmVuZGVy
QmxvY2sgKGZsb2F0aW5nKSB7RElWfSBhdCAoMCw0NTIpIHNpemUgNDAweDQwMApJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tdW50YWdnZWQt
aW1hZ2VzLWV4cGVjdGVkLmNoZWNrc3VtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLXVudGFnZ2VkLWltYWdlcy1leHBlY3Rl
ZC5jaGVja3N1bQkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0
L2Nzcy9jb2xvci1jb3JyZWN0aW9uLXVudGFnZ2VkLWltYWdlcy1leHBlY3RlZC5jaGVja3N1bQko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorOTA0MmU5YzFjZDk4NmNjZWI2ZjM0NmUzNmVlYmFl
NzAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi11bnRhZ2dlZC1pbWFnZXMtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xv
ci1jb3JyZWN0aW9uLXVudGFnZ2VkLWltYWdlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi11bnRh
Z2dlZC1pbWFnZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACits
YXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgw
MHg2MDAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJCbG9jayB7SFRNTH0g
YXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6
ZSA3ODR4NTc2CisgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMCkgc2l6ZSA3ODR4MzYKKyAg
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNzcyeDM2CisgICAgICAgICAg
dGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNzcyOiAiVGhlIHR3byBzcXVhcmVzIGJlbG93IHNob3Vs
ZCBub3QgbWF0Y2ggZWFjaCBvdGhlci4gT24gdGhlIGxlZnQgaXMgYW4gdW5jb3JyZWN0ZWQgaW1h
Z2UgYW5kIGJvcmRlciwgYW5kIG9uIHRoZSByaWdodCBpcyB0aGUiCisgICAgICAgICAgdGV4dCBy
dW4gYXQgKDAsMTgpIHdpZHRoIDM2MjogInNhbWUgaW1hZ2UgYW5kIHNhbWUgYm9yZGVyIGNvbG9y
IGNvcnJlY3RlZCBmcm9tIHNSR0IuIgorICAgICAgUmVuZGVySW1hZ2Uge0lNR30gYXQgKDAsNTIp
IHNpemUgMTQweDE0MCBbYm9yZGVyOiAoMjBweCBzb2xpZCAjNTYwMDYzKV0KKyAgICAgIFJlbmRl
ckltYWdlIHtJTUd9IGF0ICgxNDAsNTIpIHNpemUgMTQweDE0MCBbYm9yZGVyOiAoMjBweCBzb2xp
ZCAjNTYwMDYzKV0KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3NzL3Jlc291cmNlcy9wdXJwbGUt
bm9wcm9maWxlLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBh
IGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9yZXNvdXJjZXMvcHVycGxl
LW5vcHJvZmlsZS5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxp
Y2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFHUUFBQUJrQ0FJ
QUFBRC9nQUlEQUFBQUIzUkpUVVVIMlFVY0Vqc1FGVzBJVWdBQUFBbHcKU0ZsekFBQUxFd0FBQ3hN
QkFKcWNHQUFBQUN4MFJWaDBRMjl0YldWdWRBQkdhV3hsSUhkeWFYUjBaVzRnWW5rZ1FXUnZZbVVn
VUdodgpkRzl6YUc5d1B5QTBMakJSZ0xnSkFBQUFvVWxFUVZSNDJ1M1FNUUVBQUFnRElGZlNBdmJ2
WUFVL0g0aEF1cWE0aVN4WnNtVEpraVZMCmxpeFpzbVRKa2lWTGxpeFpzbVRKa2lWTGxpeFpzbVRK
a2lWTGxpeFpzbVRKa2lWTGxpeFpzbVRKa2lWTGxpeFpzbVRKa2lWTGxpeFoKc21USmtpVkxsaXha
c21USmtpVkxsaXhac21USmtpVkxsaXhac21USmtpVkxsaXhac21USmtpVkxsaXhac21USmtpVkxs
aXhac21USgpraVZMbGl4WnNyNHQrQkpJcWRnd1pTa0FBQUFBU1VWT1JLNUNZSUk9Cgo=
</data>
<flag name="review"
          id="25246"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>