<?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>43507</bug_id>
          
          <creation_ts>2010-08-04 13:52:16 -0700</creation_ts>
          <short_desc>Turn ImageBuffer::image/ImageBuffer::imageForRendering to ImageBuffer::image/ImageBuffer::copiedImage</short_desc>
          <delta_ts>2010-08-16 14:29:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</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="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>abarth</cc>
    
    <cc>antognolli+webkit</cc>
    
    <cc>ariya.hidayat</cc>
    
    <cc>aroben</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>hyatt</cc>
    
    <cc>jamesr</cc>
    
    <cc>jpetsovits</cc>
    
    <cc>krit</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>rik</cc>
    
    <cc>senorblanco</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>260198</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-04 13:52:16 -0700</bug_when>
    <thetext>Most of the time ImageBuffer::image should be a live representation of an image buffer, but in some cases it should be a copy (e.g. creating patterns from 2D canvas rendering contexts). The current naming scheme was confusing enough that Cairo is making a large number of unnecessary full-canvas pixel copies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260202</commentid>
    <comment_count>1</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-04 14:06:03 -0700</bug_when>
    <thetext>Additional information:
01:56:29 PM) dhyatt: mrobinson: we&apos;re pretty sure CG is doing many unnecessary copies as well
(01:56:38 PM) dhyatt: mrobinson: so it&apos;s not just a cairo issue :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261574</commentid>
    <comment_count>2</comment_count>
      <attachid>63782</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-06 16:45:42 -0700</bug_when>
    <thetext>Created attachment 63782
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261579</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-06 16:50:48 -0700</bug_when>
    <thetext>I&apos;ve posted a work-in-progress patch. I&apos;d really appreciate it if someone could take a quick look at it before I get much further. This patch essentially splits ::image() into ::image() (shallow copy) and ::copiedImage (deep copy). For the CG port these seem to be equivalent, as CGBitmapContextCreateImage has copy-on-write behavior (according to http://developer.apple.com/mac/library/documentation/GraphicsImaging/Reference/CGBitmapContext/Reference/reference.html#//apple_ref/c/func/CGBitmapContextCreateImage ). I&apos;ve also implemented the necessary logic for Skia, Qt and Cairo (though I can only test Cairo currently).

Since ImageBuffer no longer caches the image, the calls need to worry more about reference counting. ::image() and ::copiedImage return PassRefPtr&apos;s now, which spidered up the call chain unfortunately. Perhaps there is a better solution there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262817</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-10 12:28:26 -0700</bug_when>
    <thetext>I did a very similar patch locally and ended up keeping the caching of the shallow copy and only returning a PassRefPtr for the deep copy.  My concern is whether or not CG is really doing copy-on-write or not.  If they aren&apos;t, then removing the cache in the shallow copy case is going to be a perf hit.

Let me ask some CG engineers about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263912</commentid>
    <comment_count>5</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-12 12:32:31 -0700</bug_when>
    <thetext>I have a patch I&apos;m going to post shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263939</commentid>
    <comment_count>6</comment_count>
      <attachid>64253</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-12 13:27:23 -0700</bug_when>
    <thetext>Created attachment 64253
Patch

This patch not ready for review... just posting it to see if everything builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263967</commentid>
    <comment_count>7</comment_count>
      <attachid>64253</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-12 14:13:29 -0700</bug_when>
    <thetext>Comment on attachment 64253
Patch

Flagging for review for build info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263996</commentid>
    <comment_count>8</comment_count>
      <attachid>64253</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-12 14:52:30 -0700</bug_when>
    <thetext>Comment on attachment 64253
Patch

&gt; Index: WebCore/platform/graphics/ImageBuffer.h
&gt; ===================================================================
&gt; +#if PLATFORM(CG) || PLATFORM(QT)
&gt; +        void draw(GraphicsContext*, ColorSpace styleColorSpace, const FloatRect&amp; destRect, const FloatRect&amp; srcRect = FloatRect(0, 0, -1, -1),
&gt; +                             CompositeOperator = CompositeSourceOver, bool useLowQualityScale = false);
&gt; +        void drawPattern(GraphicsContext*, const FloatRect&amp; srcRect, const AffineTransform&amp; patternTransform,
&gt; +                         const FloatPoint&amp; phase, ColorSpace styleColorSpace, CompositeOperator, const FloatRect&amp; destRect);
&gt;  #else
&gt; -        Image* imageForRendering() const { return image(); }
&gt; +        void draw(GraphicsContext*, ColorSpace styleColorSpace, const FloatRect&amp; destRect, const FloatRect&amp; srcRect = FloatRect(0, 0, -1, -1),

This won&apos;t compile on non-CG/QT - the first parameter has to be named.  Otherwise, this patch compiles fine on Chromium+skia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263998</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-12 14:53:12 -0700</bug_when>
    <thetext>I think Stephen had some comments.  It shouldn&apos;t be too much work to hook this up for Skia as well, I&apos;m just not personally super familiar with how the image types are supposed to interact in skia.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264001</commentid>
    <comment_count>10</comment_count>
      <attachid>64253</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-08-12 14:56:02 -0700</bug_when>
    <thetext>Comment on attachment 64253
Patch

&gt; Index: WebCore/WebCore.xcodeproj/project.pbxproj
&gt; ===================================================================
&gt; --- WebCore/WebCore.xcodeproj/project.pbxproj	(revision 65160)
&gt; +++ WebCore/WebCore.xcodeproj/project.pbxproj	(working copy)
&gt; @@ -20215,7 +20215,6 @@
&gt;  			isa = PBXProject;
&gt;  			buildConfigurationList = 149C284308902B11008A9EFC /* Build configuration list for PBXProject &quot;WebCore&quot; */;
&gt;  			compatibilityVersion = &quot;Xcode 2.4&quot;;
&gt; -			developmentRegion = English;
&gt;  			hasScannedForEncodings = 1;
&gt;  			knownRegions = (
&gt;  				English,
&gt; Index: WebCore/css/CSSCanvasValue.cpp
&gt; ===================================================================
&gt; --- WebCore/css/CSSCanvasValue.cpp	(revision 65160)
&gt; +++ WebCore/css/CSSCanvasValue.cpp	(working copy)
&gt; @@ -90,7 +90,11 @@ Image* CSSCanvasValue::image(RenderObjec
&gt;      HTMLCanvasElement* elt = element(renderer-&gt;document());
&gt;      if (!elt || !elt-&gt;buffer())
&gt;          return 0;
&gt; -    return elt-&gt;buffer()-&gt;image();
&gt; +        
&gt; +    // FIXME: For platforms that can render a live image, this is pointlessly slow.
&gt; +    // The whole way this is architected is silly for those platforms.
&gt; +    RefPtr&lt;Image&gt; copiedImage = elt-&gt;buffer()-&gt;copiedImage();
&gt; +    return copiedImage.get(); 
&gt;  }
&gt;  
&gt;  } // namespace WebCore
&gt; Index: WebCore/html/HTMLCanvasElement.cpp
&gt; ===================================================================
&gt; --- WebCore/html/HTMLCanvasElement.cpp	(revision 65160)
&gt; +++ WebCore/html/HTMLCanvasElement.cpp	(working copy)
&gt; @@ -209,9 +209,6 @@ CanvasRenderingContext* HTMLCanvasElemen
&gt;  
&gt;  void HTMLCanvasElement::willDraw(const FloatRect&amp; rect)
&gt;  {
&gt; -    if (m_imageBuffer)
&gt; -        m_imageBuffer-&gt;clearImage();
&gt; -
&gt;      if (RenderBox* ro = renderBox()) {
&gt;          FloatRect destRect = ro-&gt;contentBoxRect();
&gt;          FloatRect r = mapRect(rect, FloatRect(0, 0, size().width(), size().height()), destRect);
&gt; @@ -283,11 +280,8 @@ void HTMLCanvasElement::paint(GraphicsCo
&gt;  
&gt;      if (hasCreatedImageBuffer()) {
&gt;          ImageBuffer* imageBuffer = buffer();
&gt; -        if (imageBuffer) {
&gt; -            Image* image = imageBuffer-&gt;imageForRendering();
&gt; -            if (image)
&gt; -                context-&gt;drawImage(image, DeviceColorSpace, r);
&gt; -        }
&gt; +        if (imageBuffer)
&gt; +            imageBuffer-&gt;draw(context, DeviceColorSpace, r);
&gt;      }
&gt;  
&gt;  #if ENABLE(3D_CANVAS)
&gt; Index: WebCore/html/canvas/CanvasPattern.cpp
&gt; ===================================================================
&gt; --- WebCore/html/canvas/CanvasPattern.cpp	(revision 65160)
&gt; +++ WebCore/html/canvas/CanvasPattern.cpp	(working copy)
&gt; @@ -57,7 +57,7 @@ void CanvasPattern::parseRepetitionType(
&gt;      ec = SYNTAX_ERR;
&gt;  }
&gt;  
&gt; -CanvasPattern::CanvasPattern(Image* image, bool repeatX, bool repeatY, bool originClean)
&gt; +CanvasPattern::CanvasPattern(PassRefPtr&lt;Image&gt; image, bool repeatX, bool repeatY, bool originClean)
&gt;      : m_pattern(Pattern::create(image, repeatX, repeatY))
&gt;      , m_originClean(originClean)
&gt;  {
&gt; Index: WebCore/html/canvas/CanvasPattern.h
&gt; ===================================================================
&gt; --- WebCore/html/canvas/CanvasPattern.h	(revision 65160)
&gt; +++ WebCore/html/canvas/CanvasPattern.h	(working copy)
&gt; @@ -41,7 +41,7 @@ namespace WebCore {
&gt;      public:
&gt;          static void parseRepetitionType(const String&amp;, bool&amp; repeatX, bool&amp; repeatY, ExceptionCode&amp;);
&gt;  
&gt; -        static PassRefPtr&lt;CanvasPattern&gt; create(Image* image, bool repeatX, bool repeatY, bool originClean)
&gt; +        static PassRefPtr&lt;CanvasPattern&gt; create(PassRefPtr&lt;Image&gt; image, bool repeatX, bool repeatY, bool originClean)
&gt;          {
&gt;              return adoptRef(new CanvasPattern(image, repeatX, repeatY, originClean));
&gt;          }
&gt; @@ -51,7 +51,7 @@ namespace WebCore {
&gt;          bool originClean() const { return m_originClean; }
&gt;  
&gt;      private:
&gt; -        CanvasPattern(Image*, bool repeatX, bool repeatY, bool originClean);
&gt; +        CanvasPattern(PassRefPtr&lt;Image&gt;, bool repeatX, bool repeatY, bool originClean);
&gt;  
&gt;          RefPtr&lt;Pattern&gt; m_pattern;
&gt;          bool m_originClean;
&gt; Index: WebCore/html/canvas/CanvasRenderingContext2D.cpp
&gt; ===================================================================
&gt; --- WebCore/html/canvas/CanvasRenderingContext2D.cpp	(revision 65160)
&gt; +++ WebCore/html/canvas/CanvasRenderingContext2D.cpp	(working copy)
&gt; @@ -1264,7 +1264,12 @@ void CanvasRenderingContext2D::drawImage
&gt;  
&gt;      sourceCanvas-&gt;makeRenderingResultsAvailable();
&gt;  
&gt; -    c-&gt;drawImage(buffer-&gt;image(), DeviceColorSpace, destRect, sourceRect, state().m_globalComposite);
&gt; +    if (c == buffer-&gt;context()) {
&gt; +        // We&apos;re drawing into our own buffer.  In order for this to work, we need to copy the source buffer first.
&gt; +        RefPtr&lt;Image&gt; copiedImage = buffer-&gt;copiedImage();
&gt; +        c-&gt;drawImage(copiedImage.get(), DeviceColorSpace, destRect, sourceRect, state().m_globalComposite);
&gt; +    } else
&gt; +        buffer-&gt;draw(c,  DeviceColorSpace, destRect, sourceRect, state().m_globalComposite);
&gt;      willDraw(destRect); // This call comes after drawImage, since the buffer we draw into may be our own, and we need to make sure it is dirty.
&gt;                          // FIXME: Arguably willDraw should become didDraw and occur after drawing calls and not before them to avoid problems like this.
&gt;  }
&gt; @@ -1464,7 +1469,7 @@ PassRefPtr&lt;CanvasPattern&gt; CanvasRenderin
&gt;      CanvasPattern::parseRepetitionType(repetitionType, repeatX, repeatY, ec);
&gt;      if (ec)
&gt;          return 0;
&gt; -    return CanvasPattern::create(canvas-&gt;buffer()-&gt;image(), repeatX, repeatY, canvas-&gt;originClean());
&gt; +    return CanvasPattern::create(canvas-&gt;buffer()-&gt;copiedImage(), repeatX, repeatY, canvas-&gt;originClean());
&gt;  }
&gt;  
&gt;  void CanvasRenderingContext2D::willDraw(const FloatRect&amp; r, unsigned options)
&gt; @@ -1820,7 +1825,7 @@ void CanvasRenderingContext2D::drawTextI
&gt;          maskImageContext-&gt;drawBidiText(font, textRun, location);
&gt;  
&gt;          c-&gt;save();
&gt; -        c-&gt;clipToImageBuffer(maskRect, maskImage.get());
&gt; +        maskImage-&gt;clip(c, maskRect);
&gt;          drawStyle-&gt;applyFillColor(c);
&gt;          c-&gt;fillRect(maskRect);
&gt;          c-&gt;restore();
&gt; Index: WebCore/html/canvas/WebGLRenderingContext.cpp
&gt; ===================================================================
&gt; --- WebCore/html/canvas/WebGLRenderingContext.cpp	(revision 65160)
&gt; +++ WebCore/html/canvas/WebGLRenderingContext.cpp	(working copy)
&gt; @@ -161,7 +161,6 @@ void WebGLRenderingContext::paintRenderi
&gt;      if (m_markedCanvasDirty) {
&gt;          // FIXME: It should not be necessary to clear the image before doing a readback.
&gt;          // Investigate why this is needed and remove if possible.
&gt; -        canvas()-&gt;buffer()-&gt;clearImage();
&gt;          m_markedCanvasDirty = false;
&gt;          m_context-&gt;paintRenderingResultsToCanvas(this);
&gt;      }
&gt; @@ -2196,7 +2195,9 @@ void WebGLRenderingContext::texImage2D(u
&gt;          m_context-&gt;synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
&gt;          return;
&gt;      }
&gt; -    texImage2DImpl(target, level, internalformat, format, type, canvas-&gt;buffer()-&gt;image(),
&gt; +    
&gt; +    RefPtr&lt;Image&gt; copiedImage = canvas-&gt;buffer()-&gt;copiedImage();
&gt; +    texImage2DImpl(target, level, internalformat, format, type, copiedImage.get(),
&gt;                     m_unpackFlipY, m_unpackPremultiplyAlpha, ec);
&gt;  }
&gt;  
&gt; @@ -2295,7 +2296,9 @@ void WebGLRenderingContext::texImage2D(u
&gt;          m_context-&gt;synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
&gt;          return;
&gt;      }
&gt; -    texImage2DImpl(target, level, GraphicsContext3D::RGBA, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE, canvas-&gt;buffer()-&gt;image(), flipY, premultiplyAlpha, ec);
&gt; +    
&gt; +    RefPtr&lt;Image&gt; copiedImage = canvas-&gt;buffer()-&gt;copiedImage();
&gt; +    texImage2DImpl(target, level, GraphicsContext3D::RGBA, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE, copiedImage.get(), flipY, premultiplyAlpha, ec);
&gt;  }
&gt;  
&gt;  void WebGLRenderingContext::texImage2D(unsigned target, unsigned level, HTMLVideoElement* video,
&gt; @@ -2455,7 +2458,9 @@ void WebGLRenderingContext::texSubImage2
&gt;          m_context-&gt;synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
&gt;          return;
&gt;      }
&gt; -    texSubImage2DImpl(target, level, xoffset, yoffset, format, type, canvas-&gt;buffer()-&gt;image(),
&gt; +    
&gt; +    RefPtr&lt;Image&gt; copiedImage = canvas-&gt;buffer()-&gt;copiedImage();
&gt; +    texSubImage2DImpl(target, level, xoffset, yoffset, format, type, copiedImage.get(),
&gt;                        m_unpackFlipY, m_unpackPremultiplyAlpha, ec);
&gt;  }
&gt;  
&gt; @@ -2554,7 +2559,9 @@ void WebGLRenderingContext::texSubImage2
&gt;          m_context-&gt;synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
&gt;          return;
&gt;      }
&gt; -    texSubImage2DImpl(target, level, xoffset, yoffset, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE, canvas-&gt;buffer()-&gt;image(),
&gt; +    
&gt; +    RefPtr&lt;Image&gt; copiedImage = canvas-&gt;buffer()-&gt;copiedImage();
&gt; +    texSubImage2DImpl(target, level, xoffset, yoffset, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE, copiedImage.get(),
&gt;                        flipY, premultiplyAlpha, ec);
&gt;  }
&gt;  
&gt; Index: WebCore/platform/graphics/GeneratedImage.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/GeneratedImage.cpp	(revision 65160)
&gt; +++ WebCore/platform/graphics/GeneratedImage.cpp	(working copy)
&gt; @@ -63,11 +63,8 @@ void GeneratedImage::drawPattern(Graphic
&gt;      GraphicsContext* graphicsContext = imageBuffer-&gt;context();
&gt;      graphicsContext-&gt;fillRect(FloatRect(FloatPoint(), adjustedSize), *m_generator.get());
&gt;  
&gt; -    // Grab the final image from the image buffer.
&gt; -    Image* bitmap = imageBuffer-&gt;image();
&gt; -
&gt; -    // Now just call drawTiled on that image.
&gt; -    bitmap-&gt;drawPattern(context, adjustedSrcRect, patternTransform, phase, styleColorSpace, compositeOp, destRect);
&gt; +    // Tile the image buffer into the context.
&gt; +    imageBuffer-&gt;drawPattern(context, adjustedSrcRect, patternTransform, phase, styleColorSpace, compositeOp, destRect);
&gt;  }
&gt;  
&gt;  }
&gt; Index: WebCore/platform/graphics/GraphicsContext.h
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/GraphicsContext.h	(revision 65160)
&gt; +++ WebCore/platform/graphics/GraphicsContext.h	(working copy)
&gt; @@ -248,7 +248,6 @@ namespace WebCore {
&gt;          void clipOutEllipseInRect(const IntRect&amp;);
&gt;          void clipOutRoundedRect(const IntRect&amp;, const IntSize&amp; topLeft, const IntSize&amp; topRight, const IntSize&amp; bottomLeft, const IntSize&amp; bottomRight);
&gt;          void clipPath(WindRule);
&gt; -        void clipToImageBuffer(const FloatRect&amp;, const ImageBuffer*);
&gt;          void clipConvexPolygon(size_t numPoints, const FloatPoint*, bool antialias = true);
&gt;  
&gt;          int textDrawingMode();
&gt; Index: WebCore/platform/graphics/Image.h
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/Image.h	(revision 65160)
&gt; +++ WebCore/platform/graphics/Image.h	(working copy)
&gt; @@ -150,6 +150,9 @@ public:
&gt;      static PassRefPtr&lt;Image&gt; loadPlatformThemeIcon(const char* name, int size);
&gt;  #endif
&gt;  
&gt; +    virtual void drawPattern(GraphicsContext*, const FloatRect&amp; srcRect, const AffineTransform&amp; patternTransform,
&gt; +                             const FloatPoint&amp; phase, ColorSpace styleColorSpace, CompositeOperator, const FloatRect&amp; destRect);
&gt; +
&gt;  protected:
&gt;      Image(ImageObserver* = 0);
&gt;  
&gt; @@ -167,9 +170,6 @@ protected:
&gt;      virtual bool mayFillWithSolidColor() { return false; }
&gt;      virtual Color solidColor() const { return Color(); }
&gt;      
&gt; -    virtual void drawPattern(GraphicsContext*, const FloatRect&amp; srcRect, const AffineTransform&amp; patternTransform,
&gt; -                             const FloatPoint&amp; phase, ColorSpace styleColorSpace, CompositeOperator, const FloatRect&amp; destRect);
&gt; -
&gt;  private:
&gt;      RefPtr&lt;SharedBuffer&gt; m_data; // The encoded raw data for the image. 
&gt;      ImageObserver* m_imageObserver;
&gt; Index: WebCore/platform/graphics/ImageBuffer.h
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/ImageBuffer.h	(revision 65160)
&gt; +++ WebCore/platform/graphics/ImageBuffer.h	(working copy)
&gt; @@ -29,6 +29,7 @@
&gt;  #define ImageBuffer_h
&gt;  
&gt;  #include &quot;AffineTransform.h&quot;
&gt; +#include &quot;FloatRect.h&quot;
&gt;  #include &quot;Image.h&quot;
&gt;  #include &quot;IntSize.h&quot;
&gt;  #include &quot;ImageBufferData.h&quot;
&gt; @@ -73,15 +74,52 @@ namespace WebCore {
&gt;          const IntSize&amp; size() const { return m_size; }
&gt;          GraphicsContext* context() const;
&gt;  
&gt; -        Image* image() const;
&gt; -#if PLATFORM(QT)
&gt; -        Image* imageForRendering() const;
&gt; +        PassRefPtr&lt;Image&gt; copiedImage() const; // Return a new image that is a copy of the buffer.
&gt; +
&gt; +        void clip(GraphicsContext*, const FloatRect&amp;) const;
&gt; +
&gt; +        // The drawing methods draw the contents of the buffer without copying it.
&gt; +        void draw(GraphicsContext* context, ColorSpace styleColorSpace, const IntPoint&amp; p, CompositeOperator op = CompositeSourceOver)
&gt; +        {
&gt; +            draw(context, styleColorSpace, p, IntRect(0, 0, -1, -1), op);
&gt; +        }
&gt; +
&gt; +        void draw(GraphicsContext* context, ColorSpace styleColorSpace, const IntRect&amp; r, CompositeOperator op = CompositeSourceOver, bool useLowQualityScale = false)
&gt; +        {
&gt; +            draw(context, styleColorSpace, r, IntRect(0, 0, -1, -1), op, useLowQualityScale);
&gt; +        }
&gt; +        
&gt; +        void draw(GraphicsContext* context, ColorSpace styleColorSpace, const IntPoint&amp; destPoint, const IntRect&amp; srcRect, CompositeOperator op = CompositeSourceOver)
&gt; +        {
&gt; +            draw(context, styleColorSpace, IntRect(destPoint, srcRect.size()), srcRect, op);
&gt; +        }
&gt; +        
&gt; +        void draw(GraphicsContext* context, ColorSpace styleColorSpace, const IntRect&amp; destRect, const IntRect&amp; srcRect, CompositeOperator op = CompositeSourceOver, bool useLowQualityScale = false)
&gt; +        {
&gt; +            draw(context, styleColorSpace, FloatRect(destRect), srcRect, op, useLowQualityScale);
&gt; +        }
&gt; +        
&gt; +#if PLATFORM(CG) || PLATFORM(QT)
&gt; +        void draw(GraphicsContext*, ColorSpace styleColorSpace, const FloatRect&amp; destRect, const FloatRect&amp; srcRect = FloatRect(0, 0, -1, -1),
&gt; +                             CompositeOperator = CompositeSourceOver, bool useLowQualityScale = false);
&gt; +        void drawPattern(GraphicsContext*, const FloatRect&amp; srcRect, const AffineTransform&amp; patternTransform,
&gt; +                         const FloatPoint&amp; phase, ColorSpace styleColorSpace, CompositeOperator, const FloatRect&amp; destRect);
&gt;  #else
&gt; -        Image* imageForRendering() const { return image(); }
&gt; +        void draw(GraphicsContext*, ColorSpace styleColorSpace, const FloatRect&amp; destRect, const FloatRect&amp; srcRect = FloatRect(0, 0, -1, -1),
&gt; +                             CompositeOperator op = CompositeSourceOver, bool useLowQualityScale = false)
&gt; +        {
&gt; +            RefPtr&lt;Image&gt; imageCopy = copiedImage();
&gt; +            context-&gt;drawImage(imageCopy.get(), styleColorSpace, destRect, srcRect, op, useLowQualityScale);
&gt; +        }
&gt; +        
&gt; +        void drawPattern(GraphicsContext* context, const FloatRect&amp; srcRect, const AffineTransform&amp; patternTransform,
&gt; +                         const FloatPoint&amp; phase, ColorSpace styleColorSpace, CompositeOperator op, const FloatRect&amp; destRect)
&gt; +        {
&gt; +            RefPtr&lt;Image&gt; imageCopy = copiedImage();
&gt; +            imageCopy-&gt;drawPattern(context, srcRect, patternTransform, phase, styleColorSpace, op, destRect);
&gt; +        }
&gt;  #endif
&gt;  
&gt; -        void clearImage() { m_image.clear(); }
&gt; -
&gt;          PassRefPtr&lt;ImageData&gt; getUnmultipliedImageData(const IntRect&amp;) const;
&gt;          PassRefPtr&lt;ImageData&gt; getPremultipliedImageData(const IntRect&amp;) const;
&gt;  
&gt; @@ -101,7 +139,6 @@ namespace WebCore {
&gt;  
&gt;          IntSize m_size;
&gt;          OwnPtr&lt;GraphicsContext&gt; m_context;
&gt; -        mutable RefPtr&lt;Image&gt; m_image;
&gt;  
&gt;  #if !PLATFORM(CG)
&gt;          Vector&lt;int&gt; m_linearRgbLUT;
&gt; Index: WebCore/platform/graphics/Pattern.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/Pattern.cpp	(revision 65160)
&gt; +++ WebCore/platform/graphics/Pattern.cpp	(working copy)
&gt; @@ -31,7 +31,7 @@
&gt;  
&gt;  namespace WebCore {
&gt;  
&gt; -Pattern::Pattern(Image* image, bool repeatX, bool repeatY)
&gt; +Pattern::Pattern(PassRefPtr&lt;Image&gt; image, bool repeatX, bool repeatY)
&gt;      : m_tileImage(image)
&gt;      , m_repeatX(repeatX)
&gt;      , m_repeatY(repeatY)
&gt; Index: WebCore/platform/graphics/Pattern.h
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/Pattern.h	(revision 65160)
&gt; +++ WebCore/platform/graphics/Pattern.h	(working copy)
&gt; @@ -29,6 +29,7 @@
&gt;  #define Pattern_h
&gt;  
&gt;  #include &quot;AffineTransform.h&quot;
&gt; +#include &quot;Image.h&quot;
&gt;  
&gt;  #include &lt;wtf/PassRefPtr.h&gt;
&gt;  #include &lt;wtf/RefCounted.h&gt;
&gt; @@ -64,11 +65,10 @@ typedef void* PlatformPatternPtr;
&gt;  namespace WebCore {
&gt;  
&gt;  class AffineTransform;
&gt; -class Image;
&gt;  
&gt;  class Pattern : public RefCounted&lt;Pattern&gt; {
&gt;  public:
&gt; -    static PassRefPtr&lt;Pattern&gt; create(Image* tileImage, bool repeatX, bool repeatY)
&gt; +    static PassRefPtr&lt;Pattern&gt; create(PassRefPtr&lt;Image&gt; tileImage, bool repeatX, bool repeatY)
&gt;      {
&gt;          return adoptRef(new Pattern(tileImage, repeatX, repeatY));
&gt;      }
&gt; @@ -91,7 +91,7 @@ public:
&gt;      bool repeatY() const { return m_repeatY; }
&gt;  
&gt;  private:
&gt; -    Pattern(Image*, bool repeatX, bool repeatY);
&gt; +    Pattern(PassRefPtr&lt;Image&gt;, bool repeatX, bool repeatY);
&gt;  
&gt;      RefPtr&lt;Image&gt; m_tileImage;
&gt;      bool m_repeatX;
&gt; Index: WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp	(revision 65160)
&gt; +++ WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp	(working copy)
&gt; @@ -908,14 +908,6 @@ void GraphicsContext::addInnerRoundedRec
&gt;      cairo_set_fill_rule(cr, savedFillRule);
&gt;  }
&gt;  
&gt; -void GraphicsContext::clipToImageBuffer(const FloatRect&amp; rect, const ImageBuffer* imageBuffer)
&gt; -{
&gt; -    if (paintingDisabled())
&gt; -        return;
&gt; -
&gt; -    notImplemented();
&gt; -}
&gt; -
&gt;  void GraphicsContext::setPlatformShadow(FloatSize const&amp; size, float, Color const&amp;, ColorSpace)
&gt;  {
&gt;      // Cairo doesn&apos;t support shadows natively, they are drawn manually in the draw*
&gt; Index: WebCore/platform/graphics/cairo/ImageBufferCairo.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/cairo/ImageBufferCairo.cpp	(revision 65160)
&gt; +++ WebCore/platform/graphics/cairo/ImageBufferCairo.cpp	(working copy)
&gt; @@ -97,26 +97,18 @@ GraphicsContext* ImageBuffer::context() 
&gt;      return m_context.get();
&gt;  }
&gt;  
&gt; -Image* ImageBuffer::image() const
&gt; +PassRefPtr&lt;Image&gt; ImageBuffer::copiedImage() const
&gt;  {
&gt; -    if (!m_image) {
&gt; -        // It&apos;s assumed that if image() is called, the actual rendering to the
&gt; -        // GraphicsContext must be done.
&gt; -        ASSERT(context());
&gt; -
&gt; -        // This creates a COPY of the image and will cache that copy. This means
&gt; -        // that if subsequent operations take place on the context, neither the
&gt; -        // currently-returned image, nor the results of future image() calls,
&gt; -        // will contain that operation.
&gt; -        //
&gt; -        // This seems silly, but is the way the CG port works: image() is
&gt; -        // intended to be used only when rendering is &quot;complete.&quot;
&gt; -        cairo_surface_t* newsurface = copySurface(m_data.m_surface);
&gt; +    // BitmapImage will release the passed in surface on destruction
&gt; +    return BitmapImage::create(copySurface(m_data.m_surface));
&gt; +}
&gt;  
&gt; -        // BitmapImage will release the passed in surface on destruction
&gt; -        m_image = BitmapImage::create(newsurface);
&gt; -    }
&gt; -    return m_image.get();
&gt; +void ImageBuffer::clip(GraphicsContext* context, const FloatRect&amp;) const
&gt; +{
&gt; +    if (context-&gt;paintingDisabled())
&gt; +        return;
&gt; +
&gt; +    notImplemented();
&gt;  }
&gt;  
&gt;  void ImageBuffer::platformTransformColorSpace(const Vector&lt;int&gt;&amp; lookUpTable)
&gt; Index: WebCore/platform/graphics/cg/GraphicsContextCG.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/cg/GraphicsContextCG.cpp	(revision 65160)
&gt; +++ WebCore/platform/graphics/cg/GraphicsContextCG.cpp	(working copy)
&gt; @@ -753,18 +753,6 @@ void GraphicsContext::addInnerRoundedRec
&gt;      CGContextEOClip(context);
&gt;  }
&gt;  
&gt; -void GraphicsContext::clipToImageBuffer(const FloatRect&amp; rect, const ImageBuffer* imageBuffer)
&gt; -{
&gt; -    if (paintingDisabled())
&gt; -        return;
&gt; -
&gt; -    CGContextTranslateCTM(platformContext(), rect.x(), rect.y() + rect.height());
&gt; -    CGContextScaleCTM(platformContext(), 1, -1);
&gt; -    CGContextClipToMask(platformContext(), FloatRect(FloatPoint(), rect.size()), imageBuffer-&gt;image()-&gt;getCGImageRef());
&gt; -    CGContextScaleCTM(platformContext(), 1, -1);
&gt; -    CGContextTranslateCTM(platformContext(), -rect.x(), -rect.y() - rect.height());
&gt; -}
&gt; -
&gt;  void GraphicsContext::beginTransparencyLayer(float opacity)
&gt;  {
&gt;      if (paintingDisabled())
&gt; Index: WebCore/platform/graphics/cg/ImageBufferCG.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/cg/ImageBufferCG.cpp	(revision 65160)
&gt; +++ WebCore/platform/graphics/cg/ImageBufferCG.cpp	(working copy)
&gt; @@ -56,10 +56,10 @@ ImageBuffer::ImageBuffer(const IntSize&amp; 
&gt;      , m_size(size)
&gt;  {
&gt;      success = false;  // Make early return mean failure.
&gt; -    unsigned bytesPerRow;
&gt;      if (size.width() &lt; 0 || size.height() &lt; 0)
&gt;          return;
&gt; -    bytesPerRow = size.width();
&gt; +
&gt; +    unsigned bytesPerRow = size.width();
&gt;      if (imageColorSpace != GrayScale) {
&gt;          // Protect against overflow
&gt;          if (bytesPerRow &gt; 0x3FFFFFFF)
&gt; @@ -67,6 +67,7 @@ ImageBuffer::ImageBuffer(const IntSize&amp; 
&gt;          bytesPerRow *= 4;
&gt;      }
&gt;  
&gt; +    size_t dataSize = size.height() * bytesPerRow;
&gt;      if (!tryFastCalloc(size.height(), bytesPerRow).getValue(m_data.m_data))
&gt;          return;
&gt;  
&gt; @@ -84,14 +85,16 @@ ImageBuffer::ImageBuffer(const IntSize&amp; 
&gt;          case LinearRGB:
&gt;              colorSpace.adoptCF(CGColorSpaceCreateWithName(kCGColorSpaceGenericRGBLinear));
&gt;              break;
&gt; +            
&gt;  #endif
&gt;          default:
&gt;              colorSpace.adoptCF(CGColorSpaceCreateDeviceRGB());
&gt;              break;
&gt;      }
&gt;  
&gt; +    CGBitmapInfo bitmapInfo = (imageColorSpace == GrayScale) ? kCGImageAlphaNone : kCGImageAlphaPremultipliedLast;
&gt;      RetainPtr&lt;CGContextRef&gt; cgContext(AdoptCF, CGBitmapContextCreate(m_data.m_data, size.width(), size.height(), 8, bytesPerRow,
&gt; -        colorSpace.get(), (imageColorSpace == GrayScale) ? kCGImageAlphaNone : kCGImageAlphaPremultipliedLast));
&gt; +                                                                     colorSpace.get(), bitmapInfo));
&gt;      if (!cgContext)
&gt;          return;
&gt;  
&gt; @@ -99,6 +102,12 @@ ImageBuffer::ImageBuffer(const IntSize&amp; 
&gt;      m_context-&gt;scale(FloatSize(1, -1));
&gt;      m_context-&gt;translate(0, -size.height());
&gt;      success = true;
&gt; +    
&gt; +    // Create a live image that wraps the data.
&gt; +    RetainPtr&lt;CGDataProviderRef&gt; dataProvider(AdoptCF, CGDataProviderCreateWithData(0, m_data.m_data, dataSize, 0));
&gt; +    CGImageRef cgImage = CGImageCreate(m_size.width(), m_size.height(), 8, imageColorSpace != GrayScale ? 32 : 8, bytesPerRow,
&gt; +                                       colorSpace.get(), bitmapInfo, dataProvider.get(), 0, true, kCGRenderingIntentDefault);
&gt; +    m_data.m_image = BitmapImage::create(cgImage);
&gt;  }
&gt;  
&gt;  ImageBuffer::~ImageBuffer()
&gt; @@ -111,17 +120,35 @@ GraphicsContext* ImageBuffer::context() 
&gt;      return m_context.get();
&gt;  }
&gt;  
&gt; -Image* ImageBuffer::image() const
&gt; +PassRefPtr&lt;Image&gt; ImageBuffer::copiedImage() const
&gt;  {
&gt; -    if (!m_image) {
&gt; -        // It&apos;s assumed that if image() is called, the actual rendering to the
&gt; -        // GraphicsContext must be done.
&gt; -        ASSERT(context());
&gt; -        CGImageRef cgImage = CGBitmapContextCreateImage(context()-&gt;platformContext());
&gt; -        // BitmapImage will release the passed in CGImage on destruction
&gt; -        m_image = BitmapImage::create(cgImage);
&gt; -    }
&gt; -    return m_image.get();
&gt; +    // BitmapImage will release the passed in CGImage on destruction
&gt; +    return BitmapImage::create(CGBitmapContextCreateImage(context()-&gt;platformContext()));
&gt; +}
&gt; +
&gt; +void ImageBuffer::draw(GraphicsContext* context, ColorSpace styleColorSpace, const FloatRect&amp; destRect, const FloatRect&amp; srcRect,
&gt; +                       CompositeOperator op, bool useLowQualityScale)
&gt; +{
&gt; +    context-&gt;drawImage(m_data.m_image.get(), styleColorSpace, destRect, srcRect, op, useLowQualityScale);
&gt; +}
&gt; +
&gt; +void ImageBuffer::drawPattern(GraphicsContext* context, const FloatRect&amp; srcRect, const AffineTransform&amp; patternTransform,
&gt; +                              const FloatPoint&amp; phase, ColorSpace styleColorSpace, CompositeOperator op, const FloatRect&amp; destRect)
&gt; +{
&gt; +    m_data.m_image-&gt;drawPattern(context, srcRect, patternTransform, phase, styleColorSpace, op, destRect);
&gt; +}
&gt; +
&gt; +void ImageBuffer::clip(GraphicsContext* context, const FloatRect&amp; rect) const
&gt; +{
&gt; +    if (context-&gt;paintingDisabled())
&gt; +        return;
&gt; +
&gt; +    CGContextRef platformContext = context-&gt;platformContext();
&gt; +    CGContextTranslateCTM(platformContext, rect.x(), rect.y() + rect.height());
&gt; +    CGContextScaleCTM(platformContext, 1, -1);
&gt; +    CGContextClipToMask(platformContext, FloatRect(FloatPoint(), rect.size()), m_data.m_image-&gt;getCGImageRef());
&gt; +    CGContextScaleCTM(platformContext, 1, -1);
&gt; +    CGContextTranslateCTM(platformContext, -rect.x(), -rect.y() - rect.height());
&gt;  }
&gt;  
&gt;  template &lt;Multiply multiplied&gt;
&gt; Index: WebCore/platform/graphics/cg/ImageBufferData.h
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/cg/ImageBufferData.h	(revision 65160)
&gt; +++ WebCore/platform/graphics/cg/ImageBufferData.h	(working copy)
&gt; @@ -26,6 +26,9 @@
&gt;  #ifndef ImageBufferData_h
&gt;  #define ImageBufferData_h
&gt;  
&gt; +#include &lt;wtf/RefPtr.h&gt;
&gt; +#include &quot;Image.h&quot;
&gt; +
&gt;  namespace WebCore {
&gt;  
&gt;  class IntSize;
&gt; @@ -35,6 +38,7 @@ public:
&gt;      ImageBufferData(const IntSize&amp;);
&gt;  
&gt;      void* m_data;
&gt; +    RefPtr&lt;Image&gt; m_image;
&gt;  };
&gt;  
&gt;  }  // namespace WebCore
&gt; Index: WebCore/platform/graphics/filters/FEColorMatrix.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/filters/FEColorMatrix.cpp	(revision 65160)
&gt; +++ WebCore/platform/graphics/filters/FEColorMatrix.cpp	(working copy)
&gt; @@ -164,7 +164,7 @@ void FEColorMatrix::apply(Filter* filter
&gt;      if (!filterContext)
&gt;          return;
&gt;  
&gt; -    filterContext-&gt;drawImage(m_in-&gt;resultImage()-&gt;image(), DeviceColorSpace, calculateDrawingRect(m_in-&gt;scaledSubRegion()));
&gt; +    m_in-&gt;resultImage()-&gt;draw(filterContext, DeviceColorSpace, calculateDrawingRect(m_in-&gt;scaledSubRegion()));
&gt;  
&gt;      IntRect imageRect(IntPoint(), resultImage()-&gt;size());
&gt;      PassRefPtr&lt;ImageData&gt; imageData(resultImage()-&gt;getUnmultipliedImageData(imageRect));
&gt; Index: WebCore/platform/graphics/filters/FEComposite.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/filters/FEComposite.cpp	(revision 65160)
&gt; +++ WebCore/platform/graphics/filters/FEComposite.cpp	(working copy)
&gt; @@ -131,26 +131,26 @@ void FEComposite::apply(Filter* filter)
&gt;      FloatRect srcRect = FloatRect(0.f, 0.f, -1.f, -1.f);
&gt;      switch (m_type) {
&gt;      case FECOMPOSITE_OPERATOR_OVER:
&gt; -        filterContext-&gt;drawImage(m_in2-&gt;resultImage()-&gt;image(), DeviceColorSpace, calculateDrawingRect(m_in2-&gt;scaledSubRegion()));
&gt; -        filterContext-&gt;drawImage(m_in-&gt;resultImage()-&gt;image(), DeviceColorSpace, calculateDrawingRect(m_in-&gt;scaledSubRegion()));
&gt; +        m_in2-&gt;resultImage()-&gt;draw(filterContext, DeviceColorSpace, calculateDrawingRect(m_in2-&gt;scaledSubRegion()));
&gt; +        m_in-&gt;resultImage()-&gt;draw(filterContext, DeviceColorSpace, calculateDrawingRect(m_in-&gt;scaledSubRegion()));
&gt;          break;
&gt;      case FECOMPOSITE_OPERATOR_IN:
&gt;          filterContext-&gt;save();
&gt; -        filterContext-&gt;clipToImageBuffer(calculateDrawingRect(m_in2-&gt;scaledSubRegion()), m_in2-&gt;resultImage());
&gt; -        filterContext-&gt;drawImage(m_in-&gt;resultImage()-&gt;image(), DeviceColorSpace, calculateDrawingRect(m_in-&gt;scaledSubRegion()));
&gt; +        m_in2-&gt;resultImage()-&gt;clip(filterContext, calculateDrawingRect(m_in2-&gt;scaledSubRegion()));
&gt; +        m_in-&gt;resultImage()-&gt;draw(filterContext, DeviceColorSpace, calculateDrawingRect(m_in-&gt;scaledSubRegion()));
&gt;          filterContext-&gt;restore();
&gt;          break;
&gt;      case FECOMPOSITE_OPERATOR_OUT:
&gt; -        filterContext-&gt;drawImage(m_in-&gt;resultImage()-&gt;image(), DeviceColorSpace, calculateDrawingRect(m_in-&gt;scaledSubRegion()));
&gt; -        filterContext-&gt;drawImage(m_in2-&gt;resultImage()-&gt;image(), DeviceColorSpace, calculateDrawingRect(m_in2-&gt;scaledSubRegion()), srcRect, CompositeDestinationOut);
&gt; +        m_in-&gt;resultImage()-&gt;draw(filterContext, DeviceColorSpace, calculateDrawingRect(m_in-&gt;scaledSubRegion()));
&gt; +        m_in2-&gt;resultImage()-&gt;draw(filterContext, DeviceColorSpace, calculateDrawingRect(m_in2-&gt;scaledSubRegion()), srcRect, CompositeDestinationOut);
&gt;          break;
&gt;      case FECOMPOSITE_OPERATOR_ATOP:
&gt; -        filterContext-&gt;drawImage(m_in2-&gt;resultImage()-&gt;image(), DeviceColorSpace, calculateDrawingRect(m_in2-&gt;scaledSubRegion()));
&gt; -        filterContext-&gt;drawImage(m_in-&gt;resultImage()-&gt;image(), DeviceColorSpace, calculateDrawingRect(m_in-&gt;scaledSubRegion()), srcRect, CompositeSourceAtop);
&gt; +        m_in2-&gt;resultImage()-&gt;draw(filterContext, DeviceColorSpace, calculateDrawingRect(m_in2-&gt;scaledSubRegion()));
&gt; +        m_in-&gt;resultImage()-&gt;draw(filterContext, DeviceColorSpace, calculateDrawingRect(m_in-&gt;scaledSubRegion()), srcRect, CompositeSourceAtop);
&gt;          break;
&gt;      case FECOMPOSITE_OPERATOR_XOR:
&gt; -        filterContext-&gt;drawImage(m_in2-&gt;resultImage()-&gt;image(), DeviceColorSpace, calculateDrawingRect(m_in2-&gt;scaledSubRegion()));
&gt; -        filterContext-&gt;drawImage(m_in-&gt;resultImage()-&gt;image(), DeviceColorSpace, calculateDrawingRect(m_in-&gt;scaledSubRegion()), srcRect, CompositeXOR);
&gt; +        m_in2-&gt;resultImage()-&gt;draw(filterContext, DeviceColorSpace, calculateDrawingRect(m_in2-&gt;scaledSubRegion()));
&gt; +        m_in-&gt;resultImage()-&gt;draw(filterContext, DeviceColorSpace, calculateDrawingRect(m_in-&gt;scaledSubRegion()), srcRect, CompositeXOR);
&gt;          break;
&gt;      case FECOMPOSITE_OPERATOR_ARITHMETIC: {
&gt;          IntRect effectADrawingRect = calculateDrawingIntRect(m_in-&gt;scaledSubRegion());
&gt; Index: WebCore/platform/graphics/filters/SourceAlpha.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/filters/SourceAlpha.cpp	(revision 65160)
&gt; +++ WebCore/platform/graphics/filters/SourceAlpha.cpp	(working copy)
&gt; @@ -63,9 +63,9 @@ void SourceAlpha::apply(Filter* filter)
&gt;  
&gt;      setIsAlphaImage(true);
&gt;  
&gt; -    FloatRect imageRect(FloatPoint(), filter-&gt;sourceImage()-&gt;image()-&gt;size());
&gt; +    FloatRect imageRect(FloatPoint(), filter-&gt;sourceImage()-&gt;size());
&gt;      filterContext-&gt;save();
&gt; -    filterContext-&gt;clipToImageBuffer(imageRect, filter-&gt;sourceImage());
&gt; +    filter-&gt;sourceImage()-&gt;clip(filterContext, imageRect);
&gt;      filterContext-&gt;fillRect(imageRect, Color::black, DeviceColorSpace);
&gt;      filterContext-&gt;restore();
&gt;  }
&gt; Index: WebCore/platform/graphics/filters/SourceGraphic.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/filters/SourceGraphic.cpp	(revision 65160)
&gt; +++ WebCore/platform/graphics/filters/SourceGraphic.cpp	(working copy)
&gt; @@ -60,7 +60,7 @@ void SourceGraphic::apply(Filter* filter
&gt;      if (!filterContext)
&gt;          return;
&gt;  
&gt; -    filterContext-&gt;drawImage(filter-&gt;sourceImage()-&gt;image(), DeviceColorSpace, IntPoint());
&gt; +    filter-&gt;sourceImage()-&gt;draw(filterContext, DeviceColorSpace, IntPoint());
&gt;  }
&gt;  
&gt;  void SourceGraphic::dump()
&gt; Index: WebCore/platform/graphics/qt/GraphicsContextQt.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/qt/GraphicsContextQt.cpp	(revision 65160)
&gt; +++ WebCore/platform/graphics/qt/GraphicsContextQt.cpp	(working copy)
&gt; @@ -50,6 +50,7 @@
&gt;  #include &quot;Path.h&quot;
&gt;  #include &quot;Pattern.h&quot;
&gt;  #include &quot;Pen.h&quot;
&gt; +#include &quot;TransparencyLayer.h&quot;
&gt;  
&gt;  #include &lt;QBrush&gt;
&gt;  #include &lt;QDebug&gt;
&gt; @@ -166,48 +167,6 @@ static inline Qt::FillRule toQtFillRule(
&gt;      return Qt::OddEvenFill;
&gt;  }
&gt;  
&gt; -struct TransparencyLayer : FastAllocBase {
&gt; -    TransparencyLayer(const QPainter* p, const QRect &amp;rect, qreal opacity, QPixmap&amp; alphaMask)
&gt; -        : pixmap(rect.width(), rect.height())
&gt; -        , opacity(opacity)
&gt; -        , alphaMask(alphaMask)
&gt; -        , saveCounter(1) // see the comment for saveCounter
&gt; -    {
&gt; -        offset = rect.topLeft();
&gt; -        pixmap.fill(Qt::transparent);
&gt; -        painter.begin(&amp;pixmap);
&gt; -        painter.setRenderHint(QPainter::Antialiasing, p-&gt;testRenderHint(QPainter::Antialiasing));
&gt; -        painter.translate(-offset);
&gt; -        painter.setPen(p-&gt;pen());
&gt; -        painter.setBrush(p-&gt;brush());
&gt; -        painter.setTransform(p-&gt;transform(), true);
&gt; -        painter.setOpacity(p-&gt;opacity());
&gt; -        painter.setFont(p-&gt;font());
&gt; -        if (painter.paintEngine()-&gt;hasFeature(QPaintEngine::PorterDuff))
&gt; -            painter.setCompositionMode(p-&gt;compositionMode());
&gt; -        // if the path is an empty region, this assignment disables all painting
&gt; -        if (!p-&gt;clipPath().isEmpty())
&gt; -            painter.setClipPath(p-&gt;clipPath());
&gt; -    }
&gt; -
&gt; -    TransparencyLayer()
&gt; -    {
&gt; -    }
&gt; -
&gt; -    QPixmap pixmap;
&gt; -    QPoint offset;
&gt; -    QPainter painter;
&gt; -    qreal opacity;
&gt; -    // for clipToImageBuffer
&gt; -    QPixmap alphaMask;
&gt; -    // saveCounter is only used in combination with alphaMask
&gt; -    // otherwise, its value is unspecified
&gt; -    int saveCounter;
&gt; -private:
&gt; -    TransparencyLayer(const TransparencyLayer &amp;) {}
&gt; -    TransparencyLayer &amp; operator=(const TransparencyLayer &amp;) { return *this; }
&gt; -};
&gt; -
&gt;  class GraphicsContextPlatformPrivate : public Noncopyable {
&gt;  public:
&gt;      GraphicsContextPlatformPrivate(QPainter* painter);
&gt; @@ -1226,23 +1185,6 @@ void GraphicsContext::clipOutEllipseInRe
&gt;      }
&gt;  }
&gt;  
&gt; -void GraphicsContext::clipToImageBuffer(const FloatRect&amp; floatRect, const ImageBuffer* image)
&gt; -{
&gt; -    if (paintingDisabled())
&gt; -        return;
&gt; -
&gt; -    QPixmap* nativeImage = image-&gt;image()-&gt;nativeImageForCurrentFrame();
&gt; -    if (!nativeImage)
&gt; -        return;
&gt; -
&gt; -    IntRect rect(floatRect);
&gt; -    QPixmap alphaMask = *nativeImage;
&gt; -    if (alphaMask.width() != rect.width() || alphaMask.height() != rect.height())
&gt; -        alphaMask = alphaMask.scaled(rect.width(), rect.height());
&gt; -
&gt; -    m_data-&gt;layers.push(new TransparencyLayer(m_data-&gt;p(), m_data-&gt;p()-&gt;transform().mapRect(rect), 1.0, alphaMask));
&gt; -}
&gt; -
&gt;  void GraphicsContext::addInnerRoundedRectClip(const IntRect&amp; rect,
&gt;                                                int thickness)
&gt;  {
&gt; Index: WebCore/platform/graphics/qt/ImageBufferData.h
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/qt/ImageBufferData.h	(revision 65160)
&gt; +++ WebCore/platform/graphics/qt/ImageBufferData.h	(working copy)
&gt; @@ -26,6 +26,9 @@
&gt;  #ifndef ImageBufferData_h
&gt;  #define ImageBufferData_h
&gt;  
&gt; +#include &lt;wtf/RefPtr.h&gt;
&gt; +#include &quot;Image.h&quot;
&gt; +
&gt;  #include &lt;QPainter&gt;
&gt;  #include &lt;QPixmap&gt;
&gt;  
&gt; @@ -41,6 +44,7 @@ public:
&gt;  
&gt;      QPixmap m_pixmap;
&gt;      OwnPtr&lt;QPainter&gt; m_painter;
&gt; +    RefPtr&lt;Image&gt; m_image;
&gt;  };
&gt;  
&gt;  }  // namespace WebCore
&gt; Index: WebCore/platform/graphics/qt/ImageBufferQt.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/qt/ImageBufferQt.cpp	(revision 65160)
&gt; +++ WebCore/platform/graphics/qt/ImageBufferQt.cpp	(working copy)
&gt; @@ -33,6 +33,7 @@
&gt;  #include &quot;ImageData.h&quot;
&gt;  #include &quot;MIMETypeRegistry.h&quot;
&gt;  #include &quot;StillImageQt.h&quot;
&gt; +#include &quot;TransparencyLayer.h&quot;
&gt;  #include &lt;wtf/text/CString.h&gt;
&gt;  
&gt;  #include &lt;QBuffer&gt;
&gt; @@ -74,6 +75,8 @@ ImageBufferData::ImageBufferData(const I
&gt;      brush.setColor(Qt::black);
&gt;      painter-&gt;setBrush(brush);
&gt;      painter-&gt;setCompositionMode(QPainter::CompositionMode_SourceOver);
&gt; +    
&gt; +    m_data.m_image = StillImage::createForRendering(&amp;m_data.m_pixmap);
&gt;  }
&gt;  
&gt;  ImageBuffer::ImageBuffer(const IntSize&amp; size, ImageColorSpace, bool&amp; success)
&gt; @@ -98,24 +101,38 @@ GraphicsContext* ImageBuffer::context() 
&gt;      return m_context.get();
&gt;  }
&gt;  
&gt; -Image* ImageBuffer::imageForRendering() const
&gt; +PassRefPtr&lt;Image&gt; ImageBuffer::copiedImage() const
&gt;  {
&gt; -    if (!m_image)
&gt; -        m_image = StillImage::createForRendering(&amp;m_data.m_pixmap);
&gt; +    return StillImage::create(m_data.m_pixmap);
&gt; +}
&gt;  
&gt; -    return m_image.get();
&gt; +void ImageBuffer::draw(GraphicsContext* context, ColorSpace styleColorSpace, const FloatRect&amp; destRect, const FloatRect&amp; srcRect,
&gt; +                       CompositeOperator op, bool useLowQualityScale)
&gt; +{
&gt; +    context-&gt;drawImage(m_data.m_image.get(), styleColorSpace, destRect, srcRect, op, useLowQualityScale);
&gt;  }
&gt;  
&gt; -Image* ImageBuffer::image() const
&gt; +void ImageBuffer::drawPattern(GraphicsContext* context, const FloatRect&amp; srcRect, const AffineTransform&amp; patternTransform,
&gt; +                              const FloatPoint&amp; phase, ColorSpace styleColorSpace, CompositeOperator op, const FloatRect&amp; destRect)
&gt;  {
&gt; -    if (!m_image) {
&gt; -        // It&apos;s assumed that if image() is called, the actual rendering to the
&gt; -        // GraphicsContext must be done.
&gt; -        ASSERT(context());
&gt; -        m_image = StillImage::create(m_data.m_pixmap);
&gt; -    }
&gt; +    m_data.m_image-&gt;drawPattern(context, srcRect, patternTransform, phase, styleColorSpace, op, destRect);
&gt; +}
&gt; +
&gt; +void ImageBuffer::clip(GraphicsContext* context, const FloatRect&amp; floatRect)
&gt; +{
&gt; +    if (context-&gt;paintingDisabled())
&gt; +        return;
&gt; +
&gt; +    QPixmap* nativeImage = m_data.m_image-&gt;nativeImageForCurrentFrame();
&gt; +    if (!nativeImage)
&gt; +        return;
&gt; +
&gt; +    IntRect rect(floatRect);
&gt; +    QPixmap alphaMask = *nativeImage;
&gt; +    if (alphaMask.width() != rect.width() || alphaMask.height() != rect.height())
&gt; +        alphaMask = alphaMask.scaled(rect.width(), rect.height());
&gt;  
&gt; -    return m_image.get();
&gt; +    m_data-&gt;layers.push(new TransparencyLayer(m_data-&gt;p(), m_data-&gt;p()-&gt;transform().mapRect(rect), 1.0, alphaMask));
&gt;  }
&gt;  
&gt;  void ImageBuffer::platformTransformColorSpace(const Vector&lt;int&gt;&amp; lookUpTable)
&gt; Index: WebCore/platform/graphics/qt/TransparencyLayer.h
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/qt/TransparencyLayer.h	(revision 0)
&gt; +++ WebCore/platform/graphics/qt/TransparencyLayer.h	(revision 0)
&gt; @@ -0,0 +1,97 @@
&gt; +/*
&gt; + * Copyright (C) 2006 Dirk Mueller &lt;mueller@kde.org&gt;
&gt; + * Copyright (C) 2006 Zack Rusin &lt;zack@kde.org&gt;
&gt; + * Copyright (C) 2006 George Staikos &lt;staikos@kde.org&gt;
&gt; + * Copyright (C) 2006 Simon Hausmann &lt;hausmann@kde.org&gt;
&gt; + * Copyright (C) 2006 Allan Sandfeld Jensen &lt;sandfeld@kde.org&gt;
&gt; + * Copyright (C) 2006 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
&gt; + * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
&gt; + * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
&gt; + * Copyright (C) 2008 Dirk Schulze &lt;vbs85@gmx.de&gt;
&gt; + *
&gt; + * All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + * 1. Redistributions of source code must retain the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer.
&gt; + * 2. Redistributions in binary form must reproduce the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer in the
&gt; + *    documentation and/or other materials provided with the distribution.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS&apos;&apos; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
&gt; + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
&gt; + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
&gt; + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
&gt; + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
&gt; + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
&gt; + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
&gt; + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#ifndef TransparencyLayer_h
&gt; +#define TransparencyLayer_h
&gt; +
&gt; +#include &lt;QBrush&gt;
&gt; +#include &lt;QDebug&gt;
&gt; +#include &lt;QGradient&gt;
&gt; +#include &lt;QPaintDevice&gt;
&gt; +#include &lt;QPaintEngine&gt;
&gt; +#include &lt;QPainter&gt;
&gt; +#include &lt;QPainterPath&gt;
&gt; +#include &lt;QPixmap&gt;
&gt; +#include &lt;QPolygonF&gt;
&gt; +#include &lt;QStack&gt;
&gt; +#include &lt;QVector&gt;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +struct TransparencyLayer : FastAllocBase {
&gt; +    TransparencyLayer(const QPainter* p, const QRect &amp;rect, qreal opacity, QPixmap&amp; alphaMask)
&gt; +        : pixmap(rect.width(), rect.height())
&gt; +        , opacity(opacity)
&gt; +        , alphaMask(alphaMask)
&gt; +        , saveCounter(1) // see the comment for saveCounter
&gt; +    {
&gt; +        offset = rect.topLeft();
&gt; +        pixmap.fill(Qt::transparent);
&gt; +        painter.begin(&amp;pixmap);
&gt; +        painter.setRenderHint(QPainter::Antialiasing, p-&gt;testRenderHint(QPainter::Antialiasing));
&gt; +        painter.translate(-offset);
&gt; +        painter.setPen(p-&gt;pen());
&gt; +        painter.setBrush(p-&gt;brush());
&gt; +        painter.setTransform(p-&gt;transform(), true);
&gt; +        painter.setOpacity(p-&gt;opacity());
&gt; +        painter.setFont(p-&gt;font());
&gt; +        if (painter.paintEngine()-&gt;hasFeature(QPaintEngine::PorterDuff))
&gt; +            painter.setCompositionMode(p-&gt;compositionMode());
&gt; +        // if the path is an empty region, this assignment disables all painting
&gt; +        if (!p-&gt;clipPath().isEmpty())
&gt; +            painter.setClipPath(p-&gt;clipPath());
&gt; +    }
&gt; +
&gt; +    TransparencyLayer()
&gt; +    {
&gt; +    }
&gt; +
&gt; +    QPixmap pixmap;
&gt; +    QPoint offset;
&gt; +    QPainter painter;
&gt; +    qreal opacity;
&gt; +    // for clipToImageBuffer
&gt; +    QPixmap alphaMask;
&gt; +    // saveCounter is only used in combination with alphaMask
&gt; +    // otherwise, its value is unspecified
&gt; +    int saveCounter;
&gt; +private:
&gt; +    TransparencyLayer(const TransparencyLayer &amp;) {}
&gt; +    TransparencyLayer &amp; operator=(const TransparencyLayer &amp;) { return *this; }
&gt; +};
&gt; +
&gt; +} // namespace WebCore
&gt; +
&gt; +#endif // TransparencyLayer_h
&gt; Index: WebCore/platform/graphics/skia/GraphicsContextSkia.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/skia/GraphicsContextSkia.cpp	(revision 65160)
&gt; +++ WebCore/platform/graphics/skia/GraphicsContextSkia.cpp	(working copy)
&gt; @@ -455,17 +455,6 @@ void GraphicsContext::clipPath(WindRule 
&gt;      platformContext()-&gt;clipPathAntiAliased(path);
&gt;  }
&gt;  
&gt; -void GraphicsContext::clipToImageBuffer(const FloatRect&amp; rect,
&gt; -                                        const ImageBuffer* imageBuffer)
&gt; -{
&gt; -    if (paintingDisabled())
&gt; -        return;
&gt; -
&gt; -#if OS(LINUX) || OS(WINDOWS)
&gt; -    platformContext()-&gt;beginLayerClippedToImage(rect, imageBuffer);
&gt; -#endif
&gt; -}
&gt; -
&gt;  void GraphicsContext::concatCTM(const AffineTransform&amp; affine)
&gt;  {
&gt;      if (paintingDisabled())
&gt; Index: WebCore/platform/graphics/skia/ImageBufferSkia.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/skia/ImageBufferSkia.cpp	(revision 65160)
&gt; +++ WebCore/platform/graphics/skia/ImageBufferSkia.cpp	(working copy)
&gt; @@ -87,20 +87,19 @@ GraphicsContext* ImageBuffer::context() 
&gt;      return m_context.get();
&gt;  }
&gt;  
&gt; -Image* ImageBuffer::image() const
&gt; +PassRefPtr&lt;Image&gt; ImageBuffer::copiedImage() const
&gt;  {
&gt; -    if (!m_image) {
&gt; -        // This creates a COPY of the image and will cache that copy. This means
&gt; -        // that if subsequent operations take place on the context, neither the
&gt; -        // currently-returned image, nor the results of future image() calls,
&gt; -        // will contain that operation.
&gt; -        //
&gt; -        // This seems silly, but is the way the CG port works: image() is
&gt; -        // intended to be used only when rendering is &quot;complete.&quot;
&gt; -        m_image = BitmapImageSingleFrameSkia::create(
&gt; -            *m_data.m_platformContext.bitmap());
&gt; -    }
&gt; -    return m_image.get();
&gt; +    return BitmapImageSingleFrameSkia::create(*m_data.m_platformContext.bitmap());
&gt; +}
&gt; +
&gt; +void ImageBuffer::clip(GraphicsContext* context, const FloatRect&amp; rect) const
&gt; +{
&gt; +    if (context-&gt;paintingDisabled())
&gt; +        return;
&gt; +
&gt; +#if OS(LINUX) || OS(WINDOWS)
&gt; +    context-&gt;platformContext()-&gt;beginLayerClippedToImage(rect, this);
&gt; +#endif
&gt;  }
&gt;  
&gt;  void ImageBuffer::platformTransformColorSpace(const Vector&lt;int&gt;&amp; lookUpTable)
&gt; Index: WebCore/platform/graphics/wx/GraphicsContextWx.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/wx/GraphicsContextWx.cpp	(revision 65160)
&gt; +++ WebCore/platform/graphics/wx/GraphicsContextWx.cpp	(working copy)
&gt; @@ -378,11 +378,6 @@ void GraphicsContext::canvasClip(const P
&gt;      clip(path);
&gt;  }
&gt;  
&gt; -void GraphicsContext::clipToImageBuffer(const FloatRect&amp;, const ImageBuffer*)
&gt; -{
&gt; -    notImplemented();
&gt; -}
&gt; -
&gt;  AffineTransform GraphicsContext::getCTM() const
&gt;  { 
&gt;  #if USE(WXGC)
&gt; Index: WebCore/platform/graphics/wx/ImageBufferWx.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/wx/ImageBufferWx.cpp	(revision 65160)
&gt; +++ WebCore/platform/graphics/wx/ImageBufferWx.cpp	(working copy)
&gt; @@ -82,12 +82,17 @@ String ImageBuffer::toDataURL(const Stri
&gt;      return String();
&gt;  }
&gt;  
&gt; -Image* ImageBuffer::image() const
&gt; +PassRefPtr&lt;Image&gt; ImageBuffer::copiedImage() const
&gt;  {
&gt;      notImplemented();
&gt;      return 0;
&gt;  }
&gt;  
&gt; +void ImageBuffer::clip(GraphicsContext*, const FloatRect&amp;) const
&gt; +{
&gt; +    notImplemented();
&gt; +}
&gt; +
&gt;  void ImageBuffer::platformTransformColorSpace(const Vector&lt;int&gt;&amp;)
&gt;  {
&gt;      notImplemented();
&gt; Index: WebCore/platform/mac/ScrollbarThemeMac.mm
&gt; ===================================================================
&gt; --- WebCore/platform/mac/ScrollbarThemeMac.mm	(revision 65160)
&gt; +++ WebCore/platform/mac/ScrollbarThemeMac.mm	(working copy)
&gt; @@ -396,7 +396,7 @@ bool ScrollbarThemeMac::paint(Scrollbar*
&gt;              return true;
&gt;          
&gt;          HIThemeDrawTrack(&amp;trackInfo, 0, imageBuffer-&gt;context()-&gt;platformContext(), kHIThemeOrientationNormal);
&gt; -        context-&gt;drawImage(imageBuffer-&gt;image(), DeviceColorSpace, scrollbar-&gt;frameRect().location());
&gt; +        imageBuffer-&gt;draw(context, DeviceColorSpace, scrollbar-&gt;frameRect().location());
&gt;      }
&gt;  
&gt;      return true;
&gt; Index: WebCore/rendering/RenderBoxModelObject.cpp
&gt; ===================================================================
&gt; --- WebCore/rendering/RenderBoxModelObject.cpp	(revision 65160)
&gt; +++ WebCore/rendering/RenderBoxModelObject.cpp	(working copy)
&gt; @@ -531,7 +531,7 @@ void RenderBoxModelObject::paintFillLaye
&gt;          
&gt;          // The mask has been created.  Now we just need to clip to it.
&gt;          context-&gt;save();
&gt; -        context-&gt;clipToImageBuffer(maskRect, maskImage.get());
&gt; +        maskImage-&gt;clip(context, maskRect);
&gt;      }
&gt;      
&gt;      StyleImage* bg = bgLayer-&gt;image();
&gt; Index: WebCore/rendering/RenderSVGResourceClipper.cpp
&gt; ===================================================================
&gt; --- WebCore/rendering/RenderSVGResourceClipper.cpp	(revision 65160)
&gt; +++ WebCore/rendering/RenderSVGResourceClipper.cpp	(working copy)
&gt; @@ -174,7 +174,7 @@ bool RenderSVGResourceClipper::applyClip
&gt;      if (!clipperData-&gt;clipMaskImage)
&gt;          return false;
&gt;  
&gt; -    context-&gt;clipToImageBuffer(repaintRect, clipperData-&gt;clipMaskImage.get());
&gt; +    clipperData-&gt;clipMaskImage-&gt;clip(context, repaintRect);
&gt;      return true;
&gt;  }
&gt;  
&gt; Index: WebCore/rendering/RenderSVGResourceFilter.cpp
&gt; ===================================================================
&gt; --- WebCore/rendering/RenderSVGResourceFilter.cpp	(revision 65160)
&gt; +++ WebCore/rendering/RenderSVGResourceFilter.cpp	(working copy)
&gt; @@ -271,7 +271,7 @@ void RenderSVGResourceFilter::postApplyR
&gt;  #if !PLATFORM(CG)
&gt;              resultImage-&gt;transformColorSpace(LinearRGB, DeviceRGB);
&gt;  #endif
&gt; -            context-&gt;drawImage(resultImage-&gt;image(), object-&gt;style()-&gt;colorSpace(), lastEffect-&gt;subRegion());
&gt; +            resultImage-&gt;draw(context, object-&gt;style()-&gt;colorSpace(), lastEffect-&gt;subRegion());
&gt;          }
&gt;      }
&gt;  
&gt; Index: WebCore/rendering/RenderSVGResourceGradient.cpp
&gt; ===================================================================
&gt; --- WebCore/rendering/RenderSVGResourceGradient.cpp	(revision 65160)
&gt; +++ WebCore/rendering/RenderSVGResourceGradient.cpp	(working copy)
&gt; @@ -123,7 +123,7 @@ static inline AffineTransform clipToText
&gt;      // So the actual masking process has to be done in the device coordinate space as well.
&gt;      AffineTransform transform(absoluteTransformFromContext(context));
&gt;      context-&gt;concatCTM(transform.inverse());
&gt; -    context-&gt;clipToImageBuffer(transform.mapRect(textRootBlock-&gt;repaintRectInLocalCoordinates()), imageBuffer.get());
&gt; +    imageBuffer-&gt;clip(context, transform.mapRect(textRootBlock-&gt;repaintRectInLocalCoordinates()));
&gt;      context-&gt;concatCTM(transform);
&gt;  
&gt;      AffineTransform matrix;
&gt; Index: WebCore/rendering/RenderSVGResourceMasker.cpp
&gt; ===================================================================
&gt; --- WebCore/rendering/RenderSVGResourceMasker.cpp	(revision 65160)
&gt; +++ WebCore/rendering/RenderSVGResourceMasker.cpp	(working copy)
&gt; @@ -105,7 +105,7 @@ bool RenderSVGResourceMasker::applyResou
&gt;      if (!maskerData-&gt;maskImage)
&gt;          return false;
&gt;  
&gt; -    context-&gt;clipToImageBuffer(maskerData-&gt;maskRect, maskerData-&gt;maskImage.get());
&gt; +    maskerData-&gt;maskImage-&gt;clip(context, maskerData-&gt;maskRect);
&gt;      return true;
&gt;  }
&gt;  
&gt; Index: WebCore/rendering/RenderSVGResourcePattern.cpp
&gt; ===================================================================
&gt; --- WebCore/rendering/RenderSVGResourcePattern.cpp	(revision 65160)
&gt; +++ WebCore/rendering/RenderSVGResourcePattern.cpp	(working copy)
&gt; @@ -298,14 +298,15 @@ PassOwnPtr&lt;ImageBuffer&gt; RenderSVGResourc
&gt;  
&gt;  void RenderSVGResourcePattern::buildPattern(PatternData* patternData, PassOwnPtr&lt;ImageBuffer&gt; tileImage) const
&gt;  {
&gt; -    if (!tileImage-&gt;image()) {
&gt; +    RefPtr&lt;Image&gt; copiedImage = tileImage-&gt;copiedImage();
&gt; +    if (!copiedImage) {
&gt;          patternData-&gt;pattern = 0;
&gt;          return;
&gt;      }
&gt; -
&gt; -    IntRect tileRect = tileImage-&gt;image()-&gt;rect();
&gt; +    
&gt; +    IntRect tileRect = copiedImage-&gt;rect();
&gt;      if (tileRect.width() &lt;= patternData-&gt;boundaries.width() &amp;&amp; tileRect.height() &lt;= patternData-&gt;boundaries.height()) {
&gt; -        patternData-&gt;pattern = Pattern::create(tileImage-&gt;image(), true, true);
&gt; +        patternData-&gt;pattern = Pattern::create(copiedImage, true, true);
&gt;          return;
&gt;      }
&gt;  
&gt; @@ -331,13 +332,13 @@ void RenderSVGResourcePattern::buildPatt
&gt;          newTileImageContext-&gt;translate(0, patternData-&gt;boundaries.height());
&gt;          for (int j = numX; j &gt; 0; --j) {
&gt;              newTileImageContext-&gt;translate(patternData-&gt;boundaries.width(), 0);
&gt; -            newTileImageContext-&gt;drawImage(tileImage-&gt;image(), style()-&gt;colorSpace(), tileRect, tileRect);
&gt; +            newTileImageContext-&gt;drawImage(copiedImage.get(), style()-&gt;colorSpace(), tileRect, tileRect);
&gt;          }
&gt;          newTileImageContext-&gt;translate(-patternData-&gt;boundaries.width() * numX, 0);
&gt;      }
&gt;      newTileImageContext-&gt;restore();
&gt;  
&gt; -    patternData-&gt;pattern = Pattern::create(newTileImage-&gt;image(), true, true);
&gt; +    patternData-&gt;pattern = Pattern::create(newTileImage-&gt;copiedImage(), true, true);
&gt;  }
&gt;  
&gt;  }
&gt; Index: WebCore/rendering/RenderThemeMac.mm
&gt; ===================================================================
&gt; --- WebCore/rendering/RenderThemeMac.mm	(revision 65160)
&gt; +++ WebCore/rendering/RenderThemeMac.mm	(working copy)
&gt; @@ -963,7 +963,8 @@ bool RenderThemeMac::paintProgressBar(Re
&gt;          paintInfo.context-&gt;translate(2 * rect.x() + rect.width(), 0);
&gt;          paintInfo.context-&gt;scale(FloatSize(-1, 1));
&gt;      }
&gt; -    paintInfo.context-&gt;drawImage(imageBuffer-&gt;image(), DeviceColorSpace, rect.location());
&gt; +    
&gt; +    imageBuffer-&gt;draw(paintInfo.context, DeviceColorSpace, rect.location());
&gt;  
&gt;      paintInfo.context-&gt;restore();
&gt;      return false;
&gt; Index: WebCore/svg/SVGFEImageElement.cpp
&gt; ===================================================================
&gt; --- WebCore/svg/SVGFEImageElement.cpp	(revision 65160)
&gt; +++ WebCore/svg/SVGFEImageElement.cpp	(working copy)
&gt; @@ -137,7 +137,7 @@ PassRefPtr&lt;FilterEffect&gt; SVGFEImageEleme
&gt;          SVGRenderSupport::renderSubtreeToImage(m_targetImage.get(), renderer);
&gt;      }
&gt;  
&gt; -    return FEImage::create(m_targetImage ? m_targetImage-&gt;image() : m_cachedImage-&gt;image(), preserveAspectRatio());
&gt; +    return FEImage::create(m_targetImage ? m_targetImage-&gt;copiedImage() : m_cachedImage-&gt;image(), preserveAspectRatio());
&gt;  }
&gt;  
&gt;  void SVGFEImageElement::addSubresourceAttributeURLs(ListHashSet&lt;KURL&gt;&amp; urls) const
&gt; Index: WebCore/svg/graphics/SVGImage.cpp
&gt; ===================================================================
&gt; --- WebCore/svg/graphics/SVGImage.cpp	(revision 65160)
&gt; +++ WebCore/svg/graphics/SVGImage.cpp	(working copy)
&gt; @@ -221,12 +221,13 @@ NativeImagePtr SVGImage::nativeImageForC
&gt;      if (!m_frameCache) {
&gt;          if (!m_page)
&gt;              return 0;
&gt; -        m_frameCache = ImageBuffer::create(size());
&gt; -        if (!m_frameCache) // failed to allocate image
&gt; +        OwnPtr&lt;ImageBuffer&gt; imageBuffer = ImageBuffer::create(size());
&gt; +        if (!imageBuffer) // failed to allocate image
&gt;              return 0;
&gt; -        draw(m_frameCache-&gt;context(), rect(), rect(), DeviceColorSpace, CompositeSourceOver);
&gt; +        draw(imageBuffer-&gt;context(), rect(), rect(), DeviceColorSpace, CompositeSourceOver);
&gt; +        m_frameCache = imageBuffer-&gt;copiedImage();
&gt;      }
&gt; -    return m_frameCache-&gt;image()-&gt;nativeImageForCurrentFrame();
&gt; +    return m_frameCache-&gt;nativeImageForCurrentFrame(); 
&gt;  }
&gt;  
&gt;  bool SVGImage::dataChanged(bool allDataReceived)
&gt; Index: WebCore/svg/graphics/SVGImage.h
&gt; ===================================================================
&gt; --- WebCore/svg/graphics/SVGImage.h	(revision 65160)
&gt; +++ WebCore/svg/graphics/SVGImage.h	(working copy)
&gt; @@ -72,7 +72,7 @@ namespace WebCore {
&gt;          
&gt;          OwnPtr&lt;SVGImageChromeClient&gt; m_chromeClient;
&gt;          OwnPtr&lt;Page&gt; m_page;
&gt; -        OwnPtr&lt;ImageBuffer&gt; m_frameCache;
&gt; +        RefPtr&lt;Image&gt; m_frameCache;
&gt;      };
&gt;  }
&gt;  
&gt; Index: WebCore/svg/graphics/filters/SVGFEMerge.cpp
&gt; ===================================================================
&gt; --- WebCore/svg/graphics/filters/SVGFEMerge.cpp	(revision 65160)
&gt; +++ WebCore/svg/graphics/filters/SVGFEMerge.cpp	(working copy)
&gt; @@ -79,7 +79,7 @@ void FEMerge::apply(Filter* filter)
&gt;  
&gt;      for (unsigned i = 0; i &lt; m_mergeInputs.size(); i++) {
&gt;          FloatRect destRect = calculateDrawingRect(m_mergeInputs[i]-&gt;scaledSubRegion());
&gt; -        filterContext-&gt;drawImage(m_mergeInputs[i]-&gt;resultImage()-&gt;image(), DeviceColorSpace, destRect);
&gt; +        m_mergeInputs[i]-&gt;resultImage()-&gt;draw(filterContext, DeviceColorSpace, destRect);
&gt;      }
&gt;  }
&gt;  
&gt; Index: WebCore/svg/graphics/filters/SVGFEOffset.cpp
&gt; ===================================================================
&gt; --- WebCore/svg/graphics/filters/SVGFEOffset.cpp	(revision 65160)
&gt; +++ WebCore/svg/graphics/filters/SVGFEOffset.cpp	(working copy)
&gt; @@ -91,7 +91,7 @@ void FEOffset::apply(Filter* filter)
&gt;                                    m_in-&gt;scaledSubRegion().width(),
&gt;                                    m_in-&gt;scaledSubRegion().height());
&gt;  
&gt; -    filterContext-&gt;drawImage(m_in-&gt;resultImage()-&gt;image(), DeviceColorSpace, dstRect);
&gt; +    m_in-&gt;resultImage()-&gt;draw(filterContext, DeviceColorSpace, dstRect);
&gt;  }
&gt;  
&gt;  void FEOffset::dump()
&gt; Index: WebCore/svg/graphics/filters/SVGFETile.cpp
&gt; ===================================================================
&gt; --- WebCore/svg/graphics/filters/SVGFETile.cpp	(revision 65160)
&gt; +++ WebCore/svg/graphics/filters/SVGFETile.cpp	(working copy)
&gt; @@ -72,8 +72,8 @@ void FETile::apply(Filter* filter)
&gt;  
&gt;      OwnPtr&lt;ImageBuffer&gt; tileImage = ImageBuffer::create(tileRect.size());
&gt;      GraphicsContext* tileImageContext = tileImage-&gt;context();
&gt; -    tileImageContext-&gt;drawImage(m_in-&gt;resultImage()-&gt;image(), DeviceColorSpace, IntPoint());
&gt; -    RefPtr&lt;Pattern&gt; pattern = Pattern::create(tileImage-&gt;image(), true, true);
&gt; +    m_in-&gt;resultImage()-&gt;draw(tileImageContext, DeviceColorSpace, IntPoint());
&gt; +    RefPtr&lt;Pattern&gt; pattern = Pattern::create(tileImage-&gt;copiedImage(), true, true);
&gt;  
&gt;      AffineTransform matrix;
&gt;      matrix.translate(m_in-&gt;scaledSubRegion().x() - scaledSubRegion().x(), m_in-&gt;scaledSubRegion().y() - scaledSubRegion().y());

A few drive-by comments (the ImageBuffer::draw stuff will be helpful BTW, thanks):

WebCore/css/CSSCanvasValue.cpp:97
 +      return copiedImage.get(); 
This looks like it would return a bare ptr whose Image was freed at the end of this function.  Am I missing something?

WebCore/html/canvas/WebGLRenderingContext.cpp: 
 +          canvas()-&gt;buffer()-&gt;clearImage();
Could the FIXME above be removed now, too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264019</commentid>
    <comment_count>11</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-12 15:07:44 -0700</bug_when>
    <thetext>Yeah I noticed and yanked that FIXME.

You&apos;re right about CSSCanvasValue... I&apos;ll have to patch a bunch more to propagate a PassRefPtr up.  Unfortunately that&apos;s a virtual function, so I have to change many classes. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264128</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-12 19:56:45 -0700</bug_when>
    <thetext>I&apos;m (selfishly) curious how much of an improvement this patch gives us on the &quot;benchmarks&quot; posted at http://www.themaninblue.com/writing/perspective/2010/03/22/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264484</commentid>
    <comment_count>13</comment_count>
      <attachid>64370</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-13 13:26:49 -0700</bug_when>
    <thetext>Created attachment 64370
New patch - incorporate suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264485</commentid>
    <comment_count>14</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-13 13:29:54 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; I&apos;m (selfishly) curious how much of an improvement this patch gives us on the &quot;benchmarks&quot; posted at http://www.themaninblue.com/writing/perspective/2010/03/22/

http://themaninblue.com/experiment/AnimationBenchmark/canvas/ goes from 37fps to 85fps on my machine.

http://themaninblue.com/experiment/AnimationBenchmark/canvas/?particles=1000 goes from 25fps to 43fps on my machine.

http://themaninblue.com/experiment/AnimationBenchmark/canvas/?particles=500&amp;shadows=true goes from 18 to 32fps on my machine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264505</commentid>
    <comment_count>15</comment_count>
      <attachid>64376</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-13 14:39:47 -0700</bug_when>
    <thetext>Created attachment 64376
Patch incorporating more feedback

This is getting pretty close, but one WebGL test fails on Mac.  I can&apos;t spot the error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264526</commentid>
    <comment_count>16</comment_count>
      <attachid>64376</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-08-13 15:53:25 -0700</bug_when>
    <thetext>Comment on attachment 64376
Patch incorporating more feedback

WebCore/platform/graphics/GraphicsContext.h:34
 +  #include &quot;ImageBuffer.h&quot;
Due to some nasty cycles between ImageBufferData.h and PlatformContextSkia.h, making this an include rather than a forward-declare breaks the build on chromium/win.  There may be a way to fix it on the skia side, but if you can avoid changing this it&apos;d be great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264528</commentid>
    <comment_count>17</comment_count>
      <attachid>64376</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-08-13 15:58:44 -0700</bug_when>
    <thetext>Comment on attachment 64376
Patch incorporating more feedback

WebCore/platform/graphics/skia/ImageBufferSkia.cpp:108
 +                         CompositeOperator op = CompositeSourceOver, bool useLowQualityScale = false)
Default args in function definition (the EWS bot would eventually tell you, I&apos;m just trying to help out while they&apos;re MIA).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265085</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-08-16 07:22:12 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I did a very similar patch locally and ended up keeping the caching of the shallow copy and only returning a PassRefPtr for the deep copy.  My concern is whether or not CG is really doing copy-on-write or not.  If they aren&apos;t, then removing the cache in the shallow copy case is going to be a perf hit.
&gt; 
&gt; Let me ask some CG engineers about it.

Dave, did you find out the answer to this question?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265155</commentid>
    <comment_count>19</comment_count>
      <attachid>64502</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-16 10:15:59 -0700</bug_when>
    <thetext>Created attachment 64502
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265180</commentid>
    <comment_count>20</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-16 11:32:03 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #4)
&gt; &gt; I did a very similar patch locally and ended up keeping the caching of the shallow copy and only returning a PassRefPtr for the deep copy.  My concern is whether or not CG is really doing copy-on-write or not.  If they aren&apos;t, then removing the cache in the shallow copy case is going to be a perf hit.
&gt; &gt; 
&gt; &gt; Let me ask some CG engineers about it.
&gt; 
&gt; Dave, did you find out the answer to this question?

Yeah, it always copies, so it&apos;s a function that should be avoided whenever that isn&apos;t the desired behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265181</commentid>
    <comment_count>21</comment_count>
      <attachid>64505</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-16 11:32:50 -0700</bug_when>
    <thetext>Created attachment 64505
Patch for real review

Ok this one is for real.  Ready for official review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265185</commentid>
    <comment_count>22</comment_count>
      <attachid>64505</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-08-16 11:58:33 -0700</bug_when>
    <thetext>Comment on attachment 64505
Patch for real review

I&apos;m not a reviewer, but I think this will probably still break a few builds:

WebCore/platform/graphics/cairo/ImageBufferCairo.cpp:119
 +      RefPtr&lt;Image&gt; imageCopy = copiedImage();
Should be copyImage().

WebCore/platform/graphics/cairo/ImageBufferCairo.cpp:126
 +      RefPtr&lt;Image&gt; imageCopy = copiedImage();
Ibid.

WebCore/platform/graphics/qt/ImageBufferQt.cpp:119
 +          RefPtr&lt;Image&gt; copy = copiedImage();
Ibid.

WebCore/platform/graphics/qt/ImageBufferQt.cpp:130
 +          RefPtr&lt;Image&gt; copy = copiedImage();
Ibid.

WebCore/platform/graphics/skia/ImageBufferSkia.cpp:110
 +      RefPtr&lt;Image&gt; imageCopy = copiedImage();
Ibid.

WebCore/platform/graphics/skia/ImageBufferSkia.cpp:117
 +      RefPtr&lt;Image&gt; imageCopy = copiedImage();
Ibid.

WebCore/platform/graphics/wx/ImageBufferWx.cpp:105
 +      RefPtr&lt;Image&gt; imageCopy = copiedImage();
Ibid.

WebCore/platform/graphics/wx/ImageBufferWx.cpp:112
 +      RefPtr&lt;Image&gt; imageCopy = copiedImage();
Ibid.

Other than that, looks great to me!  Excited to see this change go in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265210</commentid>
    <comment_count>23</comment_count>
      <attachid>64512</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-16 13:21:55 -0700</bug_when>
    <thetext>Created attachment 64512
ToT changed some things, had to resync.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265213</commentid>
    <comment_count>24</comment_count>
      <attachid>64515</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-16 13:28:48 -0700</bug_when>
    <thetext>Created attachment 64515
Argh, project file changed again.

Trying to keep this current so I can get some build info from other platforms before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265214</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-16 13:31:02 -0700</bug_when>
    <thetext>Attachment 64515 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/graphics/qt/ImageBufferData.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/graphics/cg/ImageBufferData.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 42 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265219</commentid>
    <comment_count>26</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-16 13:44:26 -0700</bug_when>
    <thetext>Landed in r65449.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265241</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-16 14:29:01 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65449 might have broken SnowLeopard Intel Release (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265242</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-16 14:29:17 -0700</bug_when>
    <thetext>Attachment 64515 did not build on gtk:
Build output: http://queues.webkit.org/results/3721246</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63782</attachid>
            <date>2010-08-06 16:45:42 -0700</date>
            <delta_ts>2010-08-12 13:27:23 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>bug-43507-20100806164542.patch</filename>
            <type>text/plain</type>
            <size>54536</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NjVkOTczMWM5ZThjYmQwN2FkMmMxZGE2OWNkNDY3NGU2ZGFkNmRjZC4uZmVjMGFmODVmNGNjOTMz
ZmI5MzM3NTNhNTU5ZmQ5MjZhNzM1Y2NkNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw5OSBAQAogMjAxMC0wOC0wNiAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVHVybiBJbWFnZUJ1ZmZlcjo6aW1hZ2UvSW1h
Z2VCdWZmZXI6OmltYWdlRm9yUmVuZGVyaW5nIHRvIEltYWdlQnVmZmVyOjppbWFnZS9JbWFnZUJ1
ZmZlcjo6Y29waWVkSW1hZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQzNTA3CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBjc3MvQ1NTQ2FudmFzVmFsdWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FudmFzVmFsdWU6OmltYWdlKToKKyAgICAgICAgKiBjc3Mv
Q1NTQ2FudmFzVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjppbWFnZSk6CisgICAgICAgICogY3Nz
L0NTU0dyYWRpZW50VmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZXRJbWFn
ZSk6CisgICAgICAgICogY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaDoKKyAgICAgICAgKiBo
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50Ojp3aWxsRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
cGFpbnQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUGF0dGVybjo6Q2FudmFzUGF0dGVybik6CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUGF0dGVybi5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUGF0dGVy
bjo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVh
dGVQYXR0ZXJuKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJh
dGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJhdGVkSW1hZ2U6OmRyYXdQYXR0
ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0
dGVybjo6UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oOgor
ICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjppbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29waWVk
SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjpjb3BpZWRJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjppbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29waWVkSW1hZ2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFt
ZVNraWEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjop
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjppbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6Y29waWVkSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3NraWEvSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlU2luZ2xl
RnJhbWVTa2lhOjpCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYSk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWNlSW1hZ2UpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6
c2V0SW1hZ2VTaXplRm9yQWx0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6
cGFpbnRSZXBsYWNlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6cGFpbnRJbnRv
UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmg6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJJbWFnZTo6aW1hZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFn
ZUdlbmVyYXRlZENvbnRlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlR2VuZXJh
dGVkQ29udGVudDo6aW1hZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnBhaW50KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHSW1hZ2U6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlUGF0dGVy
bjo6YnVpbGRQYXR0ZXJuKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNhY2hlZEltYWdlOjppbWFnZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZUdlbmVyYXRlZEltYWdlOjppbWFnZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxl
L1N0eWxlR2VuZXJhdGVkSW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVJ
bWFnZS5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0Ojph
cHBseSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHkpOgorCisyMDEwLTA4LTA2ICBNYXJ0aW4gUm9i
aW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKwogICAgICAgICBSZXZpZXdlZCBieSBHdXN0
YXZvIE5vcm9uaGEgU2lsdmEuCiAKICAgICAgICAgW0dUS10gU3VwcG9ydCBmb3IgaW1hZ2UgZHJh
Z3MKZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCmluZGV4IDg0MDYxNzA3Zjc1ZjUyNzUwYTc5MmU2YTgzZDBiNDgyNTg3NWVhODEuLjRh
N2EwZWUzZDVlNDJhZDc5ZjZkZDMxNGYwYzQwNDFiMDg2ODhlNjggMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMjQyOCw2
ICsyNDI4LDggQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HT3duUHRyQ2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dPd25QdHJDYWlyby5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dSZWZQdHJDYWlyby5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR1Jl
ZlB0ckNhaXJvLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3Mv
Q1NTQ2FudmFzVmFsdWUuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCmluZGV4
IDBjMWMzZjkwYTM4ZWRjOTEwMzE4ZTQ1MTk4ZDkwOTg4MjgyMjY3MTkuLmM2Yjc3ZGVhNzk0ZDZm
NTBjMGZkMjFkYjBkNWUwNmFmMTBhZjA0NGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU0Nh
bnZhc1ZhbHVlLmNwcAorKysgYi9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAKQEAgLTg0
LDcgKzg0LDcgQEAgSFRNTENhbnZhc0VsZW1lbnQqIENTU0NhbnZhc1ZhbHVlOjplbGVtZW50KERv
Y3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1cm4gbV9lbGVtZW50OwogfQogCi1JbWFnZSogQ1NT
Q2FudmFzVmFsdWU6OmltYWdlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUm
IC8qc2l6ZSovKQorUGFzc1JlZlB0cjxJbWFnZT4gQ1NTQ2FudmFzVmFsdWU6OmltYWdlKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIC8qc2l6ZSovKQogewogICAgIEFTU0VS
VChtX2NsaWVudHMuY29udGFpbnMocmVuZGVyZXIpKTsKICAgICBIVE1MQ2FudmFzRWxlbWVudCog
ZWx0ID0gZWxlbWVudChyZW5kZXJlci0+ZG9jdW1lbnQoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2Nzcy9DU1NDYW52YXNWYWx1ZS5oIGIvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaAppbmRl
eCA0Y2Q0MjgwODY1M2FlNGI5YWEwNWIxZDIyZjY0OTZlMzA3OWQxMDc4Li4yN2I4ZjJiMWZlODEy
MWIxYzM3ZmVlODhiNTQ1Nzg3MGI1OTU0ODViIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1ND
YW52YXNWYWx1ZS5oCisrKyBiL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmgKQEAgLTQwLDcg
KzQwLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0Owog
Ci0gICAgdmlydHVhbCBJbWFnZSogaW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYp
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29u
c3QgSW50U2l6ZSYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0ZpeGVkU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIEludFNpemUgZml4ZWRTaXplKGNvbnN0IFJlbmRlck9i
amVjdCopOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBi
L1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCmluZGV4IDU5NDZkN2E4MjhjMmEzZTg2
MWE3NzdmYjdmZDRiZTQzMjU4MjI2ZDIuLjNmOWEyYWFmNjNmOWJjMzg3NTM1MDE1OWFhY2M0MTE5
MDZkZDkxNDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCisr
KyBiL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCkBAIC0xMDIsMjQgKzEwMiwyMyBA
QCBQYXNzUmVmUHRyPEdyYWRpZW50PiBDU1NHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjbwogICAgIHJldHVybiBncmFkaWVudC5yZWxlYXNlKCk7
CiB9CiAKLUltYWdlKiBDU1NHcmFkaWVudFZhbHVlOjppbWFnZShSZW5kZXJPYmplY3QqIHJlbmRl
cmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQorUGFzc1JlZlB0cjxJbWFnZT4gQ1NTR3JhZGllbnRW
YWx1ZTo6aW1hZ2UoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkK
IHsKICAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKHJlbmRlcmVyKSk7CiAKICAgICAvLyBO
ZWVkIHRvIGxvb2sgdXAgb3VyIHNpemUuICBDcmVhdGUgYSBzdHJpbmcgb2Ygd2lkdGgqaGVpZ2h0
IHRvIHVzZSBhcyBhIGhhc2gga2V5LgotICAgIEltYWdlKiByZXN1bHQgPSBnZXRJbWFnZShyZW5k
ZXJlciwgc2l6ZSk7CisgICAgUmVmUHRyPEltYWdlPiByZXN1bHQgPSBnZXRJbWFnZShyZW5kZXJl
ciwgc2l6ZSk7CiAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiAKICAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgYW4gaW1hZ2UuCiAg
ICAgUmVmUHRyPEltYWdlPiBuZXdJbWFnZSA9IEdlbmVyYXRlZEltYWdlOjpjcmVhdGUoY3JlYXRl
R3JhZGllbnQocmVuZGVyZXIsIHNpemUpLCBzaXplKTsKLSAgICByZXN1bHQgPSBuZXdJbWFnZS5n
ZXQoKTsKLSAgICBwdXRJbWFnZShzaXplLCBuZXdJbWFnZS5yZWxlYXNlKCkpOworICAgIHB1dElt
YWdlKHNpemUsIG5ld0ltYWdlKTsKIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJl
c3VsdC5yZWxlYXNlKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlU3RvcHMoY29u
c3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIGEsIGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBi
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oIGIvV2ViQ29yZS9j
c3MvQ1NTR3JhZGllbnRWYWx1ZS5oCmluZGV4IDgzYzE4MTU2MGFjMTYxZjIzZmJlOTA1ZDIxNWFm
NGQ5MzFmODIxMGEuLmMyNjNlMDI5ZTJjNGQxY2MyZmZlMjE3OTBhNzc2ODcyMGUwZTQzM2QgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAorKysgYi9XZWJDb3JlL2Nz
cy9DU1NHcmFkaWVudFZhbHVlLmgKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBJbWFnZSogaW1hZ2Uo
UmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
bWFnZT4gaW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpOwogCiAgICAgQ1NTR3Jh
ZGllbnRUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICB2b2lkIHNldFR5
cGUoQ1NTR3JhZGllbnRUeXBlIHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAgYi9XZWJDb3JlL2Nzcy9DU1NJ
bWFnZUdlbmVyYXRvclZhbHVlLmNwcAppbmRleCA0Y2YwODczYWQ0ZWYwOGJlYWNhNjYzOTkxZTQ2
MmYwOTY1YTQwM2UyLi4xM2NhNzcwMjg4MjA5ZTI0Y2ZiZGEyMzI1MmI4ZmQ2YjU0ZjgxNTZlIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcAorKysgYi9X
ZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcApAQCAtNzgsNyArNzgsNyBAQCB2
b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OnJlbW92ZUNsaWVudChSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKQogICAgIGRlcmVmKCk7CiB9CiAKLUltYWdlKiBDU1NJbWFnZUdlbmVyYXRvclZhbHVl
OjpnZXRJbWFnZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQor
UGFzc1JlZlB0cjxJbWFnZT4gQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Z2V0SW1hZ2UoUmVuZGVy
T2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBSZW5kZXJPYmpl
Y3RTaXplQ291bnRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmZpbmQocmVuZGVyZXIpOwog
ICAgIEFTU0VSVChpdCAhPSBtX2NsaWVudHMuZW5kKCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9j
c3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIGIvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZS5oCmluZGV4IGMwNTNiZmU0N2VhMWU0OGZhNzg3Nzk3ZDIzOWJiODQzMjNlMjJmOGEu
LjRjZWNiYjg2OWIzNzBiMzhlYWUwZDhlZThlMzI1M2IzZjg4MzYxYzUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NJ
bWFnZUdlbmVyYXRvclZhbHVlLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBhZGRDbGllbnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpOwogICAgIHZvaWQgcmVt
b3ZlQ2xpZW50KFJlbmRlck9iamVjdCopOwotICAgIHZpcnR1YWwgSW1hZ2UqIGltYWdlKFJlbmRl
ck9iamVjdCosIGNvbnN0IEludFNpemUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElt
YWdlPiBpbWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJikgPSAwOwogCiAgICAgU3R5
bGVHZW5lcmF0ZWRJbWFnZSogZ2VuZXJhdGVkSW1hZ2UoKTsKICAgICAKQEAgLTU0LDcgKzU0LDcg
QEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUoKTsKICAg
ICAKLSAgICBJbWFnZSogZ2V0SW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpOwor
ICAgIFBhc3NSZWZQdHI8SW1hZ2U+IGdldEltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IEludFNp
emUmKTsKICAgICB2b2lkIHB1dEltYWdlKGNvbnN0IEludFNpemUmLCBQYXNzUmVmUHRyPEltYWdl
Pik7CiAKICAgICB0eXBlZGVmIHBhaXI8SW50U2l6ZSwgaW50PiBTaXplQ291bnRQYWlyOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggNmI1YTNhM2M1ZjkzNDgyYWI3YjJhMGMxNjFk
OTFhZWIzNDEzZWVhOS4uZjc1NDVkY2QyN2RjN2M2YmJiMmMzYWY0MTFhMDJlYmM0ZWZjY2U2ZCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAorKysgYi9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC0yMDMsOSArMjAzLDYgQEAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoY29uc3QgU3Ry
aW5nJiB0eXBlLCBDYW52YXMKIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6d2lsbERyYXcoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChtX2ltYWdlQnVmZmVyKQotICAgICAgICBt
X2ltYWdlQnVmZmVyLT5jbGVhckltYWdlKCk7Ci0KICAgICBpZiAoUmVuZGVyQm94KiBybyA9IHJl
bmRlckJveCgpKSB7CiAgICAgICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IHJvLT5jb250ZW50Qm94
UmVjdCgpOwogICAgICAgICBGbG9hdFJlY3QgciA9IG1hcFJlY3QocmVjdCwgRmxvYXRSZWN0KDAs
IDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpLCBkZXN0UmVjdCk7CkBAIC0yNzgs
OSArMjc1LDkgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByKQogICAgIGlmIChoYXNDcmVhdGVkSW1hZ2VCdWZm
ZXIoKSkgewogICAgICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBidWZmZXIoKTsKICAg
ICAgICAgaWYgKGltYWdlQnVmZmVyKSB7Ci0gICAgICAgICAgICBJbWFnZSogaW1hZ2UgPSBpbWFn
ZUJ1ZmZlci0+aW1hZ2VGb3JSZW5kZXJpbmcoKTsKKyAgICAgICAgICAgIFJlZlB0cjxJbWFnZT4g
aW1hZ2UgPSBpbWFnZUJ1ZmZlci0+aW1hZ2UoKTsKICAgICAgICAgICAgIGlmIChpbWFnZSkKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIERldmljZUNvbG9yU3BhY2Us
IHIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgRGV2
aWNlQ29sb3JTcGFjZSwgcik7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5jcHAgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1BhdHRlcm4uY3BwCmluZGV4IDYyYTQ2MjAwOTc5YTViYjk5ZWUwYWY3Njc2NDU5ZTcxYTI2
Njk1ZDMuLjgxOGQ3ZDNiNzQwODNlMTdiOTcxZjA5YjQ3MWU5MGFmNGQ4MzJlM2QgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5jcHAKKysrIGIvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmNwcApAQCAtNTcsNyArNTcsNyBAQCB2b2lkIENhbnZh
c1BhdHRlcm46OnBhcnNlUmVwZXRpdGlvblR5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBy
ZXBlYXRYLCBib29sJgogICAgIGVjID0gU1lOVEFYX0VSUjsKIH0KIAotQ2FudmFzUGF0dGVybjo6
Q2FudmFzUGF0dGVybihJbWFnZSogaW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBi
b29sIG9yaWdpbkNsZWFuKQorQ2FudmFzUGF0dGVybjo6Q2FudmFzUGF0dGVybihQYXNzUmVmUHRy
PEltYWdlPiBpbWFnZSwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xl
YW4pCiAgICAgOiBtX3BhdHRlcm4oUGF0dGVybjo6Y3JlYXRlKGltYWdlLCByZXBlYXRYLCByZXBl
YXRZKSkKICAgICAsIG1fb3JpZ2luQ2xlYW4ob3JpZ2luQ2xlYW4pCiB7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaCBiL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUGF0dGVybi5oCmluZGV4IDkxZTA3OTRiYThkMDFlN2M5NGI5MjhjOTdiOTM1NTQ4YjUx
NWRmYmQuLjU4ODQ4YTk5MjUzMTU0YjE4YWMyMzE1NTlmNzNiZDI2ODg0OTIyY2QgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5oCisrKyBiL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUGF0dGVybi5oCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyB2b2lkIHBhcnNlUmVwZXRpdGlvblR5
cGUoY29uc3QgU3RyaW5nJiwgYm9vbCYgcmVwZWF0WCwgYm9vbCYgcmVwZWF0WSwgRXhjZXB0aW9u
Q29kZSYpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IGNyZWF0
ZShJbWFnZSogaW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNs
ZWFuKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBjcmVhdGUoUGFz
c1JlZlB0cjxJbWFnZT4gaW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9y
aWdpbkNsZWFuKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENh
bnZhc1BhdHRlcm4oaW1hZ2UsIHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFuKSk7CiAgICAg
ICAgIH0KQEAgLTUxLDcgKzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29s
IG9yaWdpbkNsZWFuKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5DbGVhbjsgfQogCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgQ2FudmFzUGF0dGVybihJbWFnZSosIGJvb2wgcmVwZWF0WCwgYm9vbCBy
ZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKTsKKyAgICAgICAgQ2FudmFzUGF0dGVybihQYXNzUmVm
UHRyPEltYWdlPiwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4p
OwogCiAgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBtX3BhdHRlcm47CiAgICAgICAgIGJvb2wgbV9v
cmlnaW5DbGVhbjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAppbmRleCAzYjA1MzQ4YzllMmE1MWM1OWE2ZWJmZTU5YzQ2ZDVmYjVjOWZlMzU1
Li4yZmIxMWRiYzNhMDIyNmQ2MWE3MDc5OTU2NGM2OTBlZDA4NzM4ZTY5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0xMjAzLDcg
KzEyMDMsMTMgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZShIVE1M
Q2FudmFzRWxlbWVudCogc291cmNlQ2FudmFzLCBjb25zdAogCiAgICAgc291cmNlQ2FudmFzLT5t
YWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpOwogCi0gICAgYy0+ZHJhd0ltYWdlKGJ1ZmZl
ci0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNvdXJjZVJlY3QsIHN0YXRl
KCkubV9nbG9iYWxDb21wb3NpdGUpOworICAgIC8vIElmIHRoZSB0YXJnZXQgY2FudmFzIGlzIHRo
ZSBzYW1lIGFzIHRoZSBzb3VyY2UgY2FudmFzLCBmaXJzdCBjb3B5IHRoZSBjb250ZW50cyBvZiB0
aGUgY2FudmFzLgorICAgIFJlZlB0cjxJbWFnZT4gc291cmNlQ2FudmFzSW1hZ2UoMCk7CisgICAg
aWYgKHNvdXJjZUNhbnZhcyA9PSBjYW52YXMoKSkKKyAgICAgICAgc291cmNlQ2FudmFzSW1hZ2Ug
PSBidWZmZXItPmNvcGllZEltYWdlKCk7CisgICAgZWxzZQorICAgICAgICBzb3VyY2VDYW52YXNJ
bWFnZSA9IGJ1ZmZlci0+aW1hZ2UoKTsKKyAgICBjLT5kcmF3SW1hZ2Uoc291cmNlQ2FudmFzSW1h
Z2UuZ2V0KCksIERldmljZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzb3VyY2VSZWN0LCBzdGF0ZSgp
Lm1fZ2xvYmFsQ29tcG9zaXRlKTsKICAgICB3aWxsRHJhdyhkZXN0UmVjdCk7IC8vIFRoaXMgY2Fs
bCBjb21lcyBhZnRlciBkcmF3SW1hZ2UsIHNpbmNlIHRoZSBidWZmZXIgd2UgZHJhdyBpbnRvIG1h
eSBiZSBvdXIgb3duLCBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgZGlydHkuCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQXJndWFibHkgd2lsbERyYXcgc2hvdWxkIGJl
Y29tZSBkaWREcmF3IGFuZCBvY2N1ciBhZnRlciBkcmF3aW5nIGNhbGxzIGFuZCBub3QgYmVmb3Jl
IHRoZW0gdG8gYXZvaWQgcHJvYmxlbXMgbGlrZSB0aGlzLgogfQpAQCAtMTQwMyw3ICsxNDA5LDcg
QEAgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNy
ZWF0ZVBhdHRlcm4oSFRNTENhbnZhc0VsZW0KICAgICBDYW52YXNQYXR0ZXJuOjpwYXJzZVJlcGV0
aXRpb25UeXBlKHJlcGV0aXRpb25UeXBlLCByZXBlYXRYLCByZXBlYXRZLCBlYyk7CiAgICAgaWYg
KGVjKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRl
KGNhbnZhcy0+YnVmZmVyKCktPmltYWdlKCksIHJlcGVhdFgsIHJlcGVhdFksIGNhbnZhcy0+b3Jp
Z2luQ2xlYW4oKSk7CisgICAgcmV0dXJuIENhbnZhc1BhdHRlcm46OmNyZWF0ZShjYW52YXMtPmJ1
ZmZlcigpLT5jb3BpZWRJbWFnZSgpLCByZXBlYXRYLCByZXBlYXRZLCBjYW52YXMtPm9yaWdpbkNs
ZWFuKCkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6d2lsbERyYXcoY29u
c3QgRmxvYXRSZWN0JiByLCB1bnNpZ25lZCBvcHRpb25zKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDVmOWFkOTFlODM3MDVlNTQ1NzE3ZmU4
YjM0MDdhN2NiNWFhNjNiNDEuLjU1YjRiNGJlZGU2Mzg4ZmVkMWY2ODFkNGJjYjEzOWZhMzM0ZjBk
YWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAK
QEAgLTE1OSw5ICsxNTksNiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRl
eHRDaGFuZ2VkKCkKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcygpCiB7CiAgICAgaWYgKG1fbWFya2VkQ2FudmFzRGlydHkpIHsKLSAgICAg
ICAgLy8gRklYTUU6IEl0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IHRvIGNsZWFyIHRoZSBpbWFn
ZSBiZWZvcmUgZG9pbmcgYSByZWFkYmFjay4KLSAgICAgICAgLy8gSW52ZXN0aWdhdGUgd2h5IHRo
aXMgaXMgbmVlZGVkIGFuZCByZW1vdmUgaWYgcG9zc2libGUuCi0gICAgICAgIGNhbnZhcygpLT5i
dWZmZXIoKS0+Y2xlYXJJbWFnZSgpOwogICAgICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFs
c2U7CiAgICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXModGhp
cyk7CiAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dl
bmVyYXRlZEltYWdlLmNwcAppbmRleCBjZDA3NDhlYjIyMTJhZTM5YWU0ZTE5NGUxM2JhYTI2ZjQ4
YTVjYjQ1Li4zZDYwYzI4NWFiZjdmOGJmYWFkMTViZTcyMjFjYTA3NjEwY2E1MDU2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcApAQCAtNjQsNyArNjQs
NyBAQCB2b2lkIEdlbmVyYXRlZEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUgogICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJl
Y3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWRqdXN0ZWRTaXplKSwgKm1fZ2VuZXJhdG9yLmdl
dCgpKTsKIAogICAgIC8vIEdyYWIgdGhlIGZpbmFsIGltYWdlIGZyb20gdGhlIGltYWdlIGJ1ZmZl
ci4KLSAgICBJbWFnZSogYml0bWFwID0gaW1hZ2VCdWZmZXItPmltYWdlKCk7CisgICAgUmVmUHRy
PEltYWdlPiBiaXRtYXAgPSBpbWFnZUJ1ZmZlci0+aW1hZ2UoKTsKIAogICAgIC8vIE5vdyBqdXN0
IGNhbGwgZHJhd1RpbGVkIG9uIHRoYXQgaW1hZ2UuCiAgICAgYml0bWFwLT5kcmF3UGF0dGVybihj
b250ZXh0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNv
bG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBkZXN0UmVjdCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmgKaW5kZXggYTU0YzcyMTM2YTA5YjE4M2FjNDE2MzI0YWJhM2I4ODgwNDkz
YmYxOC4uZGQ1NjJhZWIwMDdmMTliNDg5NzE5MTU1OTE0NmU5MmIyOTk1MGY0NyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtNzMsMTQgKzczLDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCgpIGNvbnN0Owog
Ci0gICAgICAgIEltYWdlKiBpbWFnZSgpIGNvbnN0OwotI2lmIFBMQVRGT1JNKFFUKQotICAgICAg
ICBJbWFnZSogaW1hZ2VGb3JSZW5kZXJpbmcoKSBjb25zdDsKLSNlbHNlCi0gICAgICAgIEltYWdl
KiBpbWFnZUZvclJlbmRlcmluZygpIGNvbnN0IHsgcmV0dXJuIGltYWdlKCk7IH0KLSNlbmRpZgot
Ci0gICAgICAgIHZvaWQgY2xlYXJJbWFnZSgpIHsgbV9pbWFnZS5jbGVhcigpOyB9CisgICAgICAg
IFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKCkgY29uc3Q7CisgICAgICAgIFBhc3NSZWZQdHI8SW1h
Z2U+IGNvcGllZEltYWdlKCkgY29uc3Q7CiAKICAgICAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+
IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAgICAg
IFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IElu
dFJlY3QmKSBjb25zdDsKQEAgLTEwMSw3ICs5NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICBJbnRTaXplIG1fc2l6ZTsKICAgICAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4g
bV9jb250ZXh0OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKIAogI2lm
ICFQTEFURk9STShDRykKICAgICAgICAgVmVjdG9yPGludD4gbV9saW5lYXJSZ2JMVVQ7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAppbmRleCBiYjA3MzA3M2VkNWQ2ZTVlMjY0ZmI0
ZjFlZjdhZjBiNzkyMzQzMDI4Li4yY2E0YzEzZWQ0YjNkMmI4MmU3ZjZiZGY5YzdmOWE2YzkxZDli
Njg2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAKQEAgLTMxLDcgKzMxLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXR0ZXJuOjpQYXR0ZXJuKEltYWdlKiBpbWFn
ZSwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFkpCitQYXR0ZXJuOjpQYXR0ZXJuKFBhc3NSZWZQ
dHI8SW1hZ2U+IGltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSkKICAgICA6IG1fdGls
ZUltYWdlKGltYWdlKQogICAgICwgbV9yZXBlYXRYKHJlcGVhdFgpCiAgICAgLCBtX3JlcGVhdFko
cmVwZWF0WSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgKaW5kZXggNDhlOGQ4YjYyNTMz
ZjQyMzkxNTVhYTI1OGNjYWE0MDYyMjBkMzMxMS4uM2M0YTBiODNhNGZiYTY3ZmJlMDdhM2UwNGY5
MzA5MTY3ZWY5OTlkNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0
ZXJuLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgKQEAgLTI5LDYg
KzI5LDcgQEAKICNkZWZpbmUgUGF0dGVybl9oCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKKyNpbmNsdWRlICJJbWFnZS5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNjMsMTIgKzY0LDkgQEAgdHlwZWRlZiB2b2lk
KiBQbGF0Zm9ybVBhdHRlcm5QdHI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQWZm
aW5lVHJhbnNmb3JtOwotY2xhc3MgSW1hZ2U7Ci0KIGNsYXNzIFBhdHRlcm4gOiBwdWJsaWMgUmVm
Q291bnRlZDxQYXR0ZXJuPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGF0dGVy
bj4gY3JlYXRlKEltYWdlKiB0aWxlSW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhdHRlcm4+IGNyZWF0ZShQYXNzUmVmUHRyPEltYWdlPiB0
aWxlSW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBQYXR0ZXJuKHRpbGVJbWFnZSwgcmVwZWF0WCwgcmVwZWF0WSkpOwog
ICAgIH0KQEAgLTkxLDcgKzg5LDcgQEAgcHVibGljOgogICAgIGJvb2wgcmVwZWF0WSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVwZWF0WTsgfQogCiBwcml2YXRlOgotICAgIFBhdHRlcm4oSW1hZ2UqLCBi
b29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSk7CisgICAgUGF0dGVybihQYXNzUmVmUHRyPEltYWdl
PiwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFkpOwogCiAgICAgUmVmUHRyPEltYWdlPiBtX3Rp
bGVJbWFnZTsKICAgICBib29sIG1fcmVwZWF0WDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCmluZGV4IDFhNDNlNTRiYWE0MWRh
ZTVlMzdjMWI1OTEwZTVlM2FhY2M5NTllMTcuLjAxOWRkOWY4M2U0NDlhYTc1ZDFlYWY3NTJhYjVh
NjAxNTdjYWViNmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkJhc2U2
NC5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNs
dWRlICJHUmVmUHRyQ2Fpcm8uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCkBAIC05Nywy
NiArOTgsMTkgQEAgR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0
CiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KIAotSW1hZ2UqIEltYWdlQnVmZmVyOjpp
bWFnZSgpIGNvbnN0CitQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25z
dAogewotICAgIGlmICghbV9pbWFnZSkgewotICAgICAgICAvLyBJdCdzIGFzc3VtZWQgdGhhdCBp
ZiBpbWFnZSgpIGlzIGNhbGxlZCwgdGhlIGFjdHVhbCByZW5kZXJpbmcgdG8gdGhlCi0gICAgICAg
IC8vIEdyYXBoaWNzQ29udGV4dCBtdXN0IGJlIGRvbmUuCi0gICAgICAgIEFTU0VSVChjb250ZXh0
KCkpOwotCi0gICAgICAgIC8vIFRoaXMgY3JlYXRlcyBhIENPUFkgb2YgdGhlIGltYWdlIGFuZCB3
aWxsIGNhY2hlIHRoYXQgY29weS4gVGhpcyBtZWFucwotICAgICAgICAvLyB0aGF0IGlmIHN1YnNl
cXVlbnQgb3BlcmF0aW9ucyB0YWtlIHBsYWNlIG9uIHRoZSBjb250ZXh0LCBuZWl0aGVyIHRoZQot
ICAgICAgICAvLyBjdXJyZW50bHktcmV0dXJuZWQgaW1hZ2UsIG5vciB0aGUgcmVzdWx0cyBvZiBm
dXR1cmUgaW1hZ2UoKSBjYWxscywKLSAgICAgICAgLy8gd2lsbCBjb250YWluIHRoYXQgb3BlcmF0
aW9uLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGlzIHNlZW1zIHNpbGx5LCBidXQgaXMgdGhl
IHdheSB0aGUgQ0cgcG9ydCB3b3JrczogaW1hZ2UoKSBpcwotICAgICAgICAvLyBpbnRlbmRlZCB0
byBiZSB1c2VkIG9ubHkgd2hlbiByZW5kZXJpbmcgaXMgImNvbXBsZXRlLiIKLSAgICAgICAgY2Fp
cm9fc3VyZmFjZV90KiBuZXdzdXJmYWNlID0gY29weVN1cmZhY2UobV9kYXRhLm1fc3VyZmFjZSk7
Ci0KLSAgICAgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3Vy
ZmFjZSBvbiBkZXN0cnVjdGlvbgotICAgICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0
ZShuZXdzdXJmYWNlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CisgICAgcmV0
dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUobV9kYXRhLm1fc3VyZmFjZSk7Cit9CisKK1Bhc3NSZWZQ
dHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3BpZWRJbWFnZSgpIGNvbnN0Cit7CisgICAgLy8gVGhp
cyBjcmVhdGVzIGEgQ09QWSBvZiB0aGUgaW1hZ2UgYW5kIHdpbGwgY2FjaGUgdGhhdCBjb3B5LiBU
aGlzIG1lYW5zCisgICAgLy8gdGhhdCBpZiBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgdGFrZSBwbGFj
ZSBvbiB0aGUgY29udGV4dCwgbmVpdGhlciB0aGUKKyAgICAvLyBjdXJyZW50bHktcmV0dXJuZWQg
aW1hZ2UsIG5vciB0aGUgcmVzdWx0cyBvZiBmdXR1cmUgaW1hZ2UoKSBjYWxscywKKyAgICAvLyB3
aWxsIGNvbnRhaW4gdGhhdCBvcGVyYXRpb24uCisgICAgR1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
IGNvcGllZFN1cmZhY2UgPSBhZG9wdEdSZWYoY29weVN1cmZhY2UobV9kYXRhLm1fc3VyZmFjZSkp
OworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcGllZFN1cmZhY2UuZ2V0KCkpOwog
fQogCiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qg
VmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDRy5jcHAKaW5kZXggZmViOGNlYzRiMWI4OTMzOGExMjU4NDIxYmQ2M2Fh
ZDYwY2E2Njc5MS4uMWI0ZjIxZDgyZmQwMzcwMzhlMTU2ODdmZTAxNDQyMjFmOGE5ZjJiNiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC0x
MTEsMTcgKzExMSwyMiBAQCBHcmFwaGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkg
Y29uc3QKICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi1JbWFnZSogSW1hZ2VCdWZm
ZXI6OmltYWdlKCkgY29uc3QKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjppbWFnZSgp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ltYWdlKSB7Ci0gICAgICAgIC8vIEl0J3MgYXNzdW1lZCB0
aGF0IGlmIGltYWdlKCkgaXMgY2FsbGVkLCB0aGUgYWN0dWFsIHJlbmRlcmluZyB0byB0aGUKLSAg
ICAgICAgLy8gR3JhcGhpY3NDb250ZXh0IG11c3QgYmUgZG9uZS4KLSAgICAgICAgQVNTRVJUKGNv
bnRleHQoKSk7Ci0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IENHQml0bWFwQ29udGV4dENy
ZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgICAgICAvLyBCaXRt
YXBJbWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBDR0ltYWdlIG9uIGRlc3RydWN0aW9u
Ci0gICAgICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UpOwotICAgIH0K
LSAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKKyAgICAvLyBJdCdzIGFzc3VtZWQgdGhhdCBpZiBp
bWFnZSgpIGlzIGNhbGxlZCwgdGhlIGFjdHVhbCByZW5kZXJpbmcgdG8gdGhlCisgICAgLy8gR3Jh
cGhpY3NDb250ZXh0IG11c3QgYmUgZG9uZS4KKyAgICBBU1NFUlQoY29udGV4dCgpKTsKKworICAg
IC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIENHSW1hZ2Ugb24gZGVz
dHJ1Y3Rpb24KKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShDR0JpdG1hcENvbnRleHRD
cmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKSk7Cit9CisKK1Bhc3NSZWZQ
dHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3BpZWRJbWFnZSgpIGNvbnN0Cit7CisgICAgLy8gQ0dC
aXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UgaXMgY3JlYXRlZCB3aXRoIGNvcHktb24td3JpdGUgc2Vt
YW50aWNzLCBzbyBpZgorICAgIC8vIHRoZSBjYWxsZXIgbW9kaWZpZXMgdGhlIHJlc3VsdGluZyBD
R0ltYWdlLCBDRyB3aWxsIGNvcHkgdGhlIGFjdHVhbCBieXRlcyBhdAorICAgIC8vIHRoYXQgdGlt
ZS4KKyAgICByZXR1cm4gaW1hZ2UoKTsKIH0KIAogdGVtcGxhdGUgPE11bHRpcGx5IG11bHRpcGxp
ZWQ+CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHAKaW5kZXggYzVhZTNiOWY0MGNiNTZkMGI5ODMyZjZhZjhlZjJlY2YyNDllYTRiNy4u
NWYwZWUwOTExODgzYWZlOWEzNGM3MTM4ZDk0OGM3YzhhNDc1YzQ3ZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMTY0
LDcgKzE2NCw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAg
ICAgaWYgKCFmaWx0ZXJDb250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBmaWx0ZXJDb250
ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JT
cGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAg
ICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKS5n
ZXQoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVk
U3ViUmVnaW9uKCkpKTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3Vs
dEltYWdlKCktPnNpemUoKSk7CiAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YShy
ZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0KSk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAppbmRl
eCAxOGRmM2IyZDljZDJkOGE5M2FiNWYxOGRjYmI0ZmZjYzNjMDQ0NGRhLi42YmNiZDIyZDEzZGVm
YTY0ZmE5NTdjMTc4YjQ4ZWU0NGMxYWIwMzM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTEzMSwyNiArMTMxLDI2IEBAIHZv
aWQgRkVDb21wb3NpdGU6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogICAgIEZsb2F0UmVjdCBzcmNS
ZWN0ID0gRmxvYXRSZWN0KDAuZiwgMC5mLCAtMS5mLCAtMS5mKTsKICAgICBzd2l0Y2ggKG1fdHlw
ZSkgewogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKLSAgICAgICAgZmlsdGVy
Q29udGV4dC0+ZHJhd0ltYWdlKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VD
b2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9uKCkp
KTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCkt
PmltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNj
YWxlZFN1YlJlZ2lvbigpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2lu
Mi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKS5nZXQoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3Vs
YXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigpKSk7CisgICAgICAgIGZpbHRl
ckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLmdldCgpLCBE
ZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdp
b24oKSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lO
OgogICAgICAgICBmaWx0ZXJDb250ZXh0LT5zYXZlKCk7CiAgICAgICAgIGZpbHRlckNvbnRleHQt
PmNsaXBUb0ltYWdlQnVmZmVyKGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJS
ZWdpb24oKSksIG1faW4yLT5yZXN1bHRJbWFnZSgpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+
ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIERldmljZUNvbG9yU3BhY2Us
IGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKSk7CisgICAgICAg
IGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLmdl
dCgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRT
dWJSZWdpb24oKSkpOwogICAgICAgICBmaWx0ZXJDb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgotICAgICAgICBmaWx0
ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNl
Q29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkp
KTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4yLT5yZXN1bHRJbWFnZSgp
LT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+
c2NhbGVkU3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVEZXN0aW5hdGlvbk91dCk7Cisg
ICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFn
ZSgpLmdldCgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5z
Y2FsZWRTdWJSZWdpb24oKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9p
bjItPnJlc3VsdEltYWdlKCktPmltYWdlKCkuZ2V0KCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1
bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBv
c2l0ZURlc3RpbmF0aW9uT3V0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lU
RV9PUEVSQVRPUl9BVE9QOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbjIt
PnJlc3VsdEltYWdlKCktPmltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdp
bmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0
LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFj
ZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpLCBzcmNSZWN0
LCBDb21wb3NpdGVTb3VyY2VBdG9wKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdl
KG1faW4yLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLmdldCgpLCBEZXZpY2VDb2xvclNwYWNlLCBj
YWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAgICAgICAg
ZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCkuZ2V0
KCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNjYWxlZFN1
YlJlZ2lvbigpKSwgc3JjUmVjdCwgQ29tcG9zaXRlU291cmNlQXRvcCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfWE9SOgotICAgICAgICBmaWx0ZXJDb250
ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIERldmljZUNvbG9y
U3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSkpOwot
ICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1h
Z2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVk
U3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVYT1IpOworICAgICAgICBmaWx0ZXJDb250
ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCkuZ2V0KCksIERldmlj
ZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24o
KSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2Uo
KS0+aW1hZ2UoKS5nZXQoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3Qo
bV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVYT1IpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6IHsKICAg
ICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVj
dChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKaW5kZXggYTE4NjRkNjJjYzEzNDBiNGRh
MDg5Y2I2ZjdhOTAyMDAyZmRiZGEyZi4uNDVlN2QwM2FhNzY1MDYzZGYwYzViZTYwNTYzZGIzZGI3
NjkwMjQ5NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUdyYXBoaWMuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmNwcApAQCAtNjAsNyArNjAsNyBAQCB2b2lkIFNvdXJjZUdyYXBoaWM6OmFw
cGx5KEZpbHRlciogZmlsdGVyKQogICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKGZpbHRlci0+c291cmNlSW1hZ2Uo
KS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgSW50UG9pbnQoKSk7CisgICAgZmlsdGVyQ29u
dGV4dC0+ZHJhd0ltYWdlKGZpbHRlci0+c291cmNlSW1hZ2UoKS0+aW1hZ2UoKS5nZXQoKSwgRGV2
aWNlQ29sb3JTcGFjZSwgSW50UG9pbnQoKSk7CiB9CiAKIHZvaWQgU291cmNlR3JhcGhpYzo6ZHVt
cCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVy
UXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcApp
bmRleCBiYzI1MDAzODZhMGFmOTI2NDcxNWIxZDlkM2I4YjFjNmMxZWY0YjU4Li44YzY5NzdkYzFi
MjM5YTA5MWIwMDI5NWRjMzA5NTVkMGM3Yjk1OTAyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAKQEAgLTk4LDI0ICs5OCwxNCBAQCBHcmFwaGlj
c0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKICAgICByZXR1cm4gbV9jb250
ZXh0LmdldCgpOwogfQogCi1JbWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlRm9yUmVuZGVyaW5nKCkg
Y29uc3QKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjppbWFnZSgpIGNvbnN0CiB7Ci0g
ICAgaWYgKCFtX2ltYWdlKQotICAgICAgICBtX2ltYWdlID0gU3RpbGxJbWFnZTo6Y3JlYXRlRm9y
UmVuZGVyaW5nKCZtX2RhdGEubV9waXhtYXApOwotCi0gICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7
CisgICAgcmV0dXJuIFN0aWxsSW1hZ2U6OmNyZWF0ZUZvclJlbmRlcmluZygmbV9kYXRhLm1fcGl4
bWFwKTsKIH0KIAotSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZSgpIGNvbnN0CitQYXNzUmVmUHRy
PEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29waWVkSW1hZ2UoKSBjb25zdAogewotICAgIGlmICghbV9p
bWFnZSkgewotICAgICAgICAvLyBJdCdzIGFzc3VtZWQgdGhhdCBpZiBpbWFnZSgpIGlzIGNhbGxl
ZCwgdGhlIGFjdHVhbCByZW5kZXJpbmcgdG8gdGhlCi0gICAgICAgIC8vIEdyYXBoaWNzQ29udGV4
dCBtdXN0IGJlIGRvbmUuCi0gICAgICAgIEFTU0VSVChjb250ZXh0KCkpOwotICAgICAgICBtX2lt
YWdlID0gU3RpbGxJbWFnZTo6Y3JlYXRlKG1fZGF0YS5tX3BpeG1hcCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIG1faW1hZ2UuZ2V0KCk7CisgICAgcmV0dXJuIFN0aWxsSW1hZ2U6OmNyZWF0ZShtX2Rh
dGEubV9waXhtYXApOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNv
bG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNr
aWEuaAppbmRleCA5ZmI2YThiMmZjMDdkM2FlMzZkY2FjYmI2MjNkNWQwZmUzNWM5ZTNmLi45ZTFj
NDA4OWE1ZTQ3ZDYwN2Q5ODdiMzE2OWFjMzY0YWU3Y2EyNTlkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNr
aWEuaApAQCAtNzEsNiArNzEsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJm1fbmF0aXZl
SW1hZ2U7CiAgICAgfQogCisgICAgLy8gU3BlY2lmaWVzIHRoZSB3YXkgdGhlIG1fbmF0aXZlSW1h
Z2UgbWVtYmVyIGlzIGluaXRpYWxpemVkLgorICAgIGVudW0gQ29weURlcHRoIHsKKyAgICAgICAg
U2hhbGxvd0NvcHksCisgICAgICAgIERlZXBDb3B5CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvcik7CiAKQEAgLTc5LDYgKzg1LDcgQEAgcHJpdmF0ZToKIAogICAg
IC8vIFVzZSBjcmVhdGUoKS4KICAgICBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYSgpIHsgfQor
ICAgIEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhKGNvbnN0IFNrQml0bWFwJiBiaXRtYXApOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAppbmRleCBlYWE5MWVjYmJkMTY1MDc3NjU4
MDk5OGQyNjM1Njg1NTUwODY0N2FlLi5jMWZlZGVmZGM0NTgyM2M1NjdkMDVhMWRmMjU1YTU1NDYw
MjQzNDk5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VC
dWZmZXJTa2lhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VC
dWZmZXJTa2lhLmNwcApAQCAtODcsMjAgKzg3LDIyIEBAIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VC
dWZmZXI6OmNvbnRleHQoKSBjb25zdAogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9CiAK
LUltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAorUGFzc1JlZlB0cjxJbWFnZT4gSW1h
Z2VCdWZmZXI6OmltYWdlKCkgY29uc3QKIHsKLSAgICBpZiAoIW1faW1hZ2UpIHsKLSAgICAgICAg
Ly8gVGhpcyBjcmVhdGVzIGEgQ09QWSBvZiB0aGUgaW1hZ2UgYW5kIHdpbGwgY2FjaGUgdGhhdCBj
b3B5LiBUaGlzIG1lYW5zCi0gICAgICAgIC8vIHRoYXQgaWYgc3Vic2VxdWVudCBvcGVyYXRpb25z
IHRha2UgcGxhY2Ugb24gdGhlIGNvbnRleHQsIG5laXRoZXIgdGhlCi0gICAgICAgIC8vIGN1cnJl
bnRseS1yZXR1cm5lZCBpbWFnZSwgbm9yIHRoZSByZXN1bHRzIG9mIGZ1dHVyZSBpbWFnZSgpIGNh
bGxzLAotICAgICAgICAvLyB3aWxsIGNvbnRhaW4gdGhhdCBvcGVyYXRpb24uCi0gICAgICAgIC8v
Ci0gICAgICAgIC8vIFRoaXMgc2VlbXMgc2lsbHksIGJ1dCBpcyB0aGUgd2F5IHRoZSBDRyBwb3J0
IHdvcmtzOiBpbWFnZSgpIGlzCi0gICAgICAgIC8vIGludGVuZGVkIHRvIGJlIHVzZWQgb25seSB3
aGVuIHJlbmRlcmluZyBpcyAiY29tcGxldGUuIgotICAgICAgICBtX2ltYWdlID0gQml0bWFwSW1h
Z2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZSgKLSAgICAgICAgICAgICptX2RhdGEubV9wbGF0Zm9y
bUNvbnRleHQuYml0bWFwKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKKyAg
ICByZXR1cm4gQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZSgKKyAgICAgICAgKm1f
ZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5iaXRtYXAoKSwKKyAgICAgICAgQml0bWFwSW1hZ2VTaW5n
bGVGcmFtZVNraWE6OlNoYWxsb3dDb3B5KTsKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VC
dWZmZXI6OmNvcGllZEltYWdlKCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGNyZWF0ZXMgYSBDT1BZ
IG9mIHRoZSBpbWFnZSBhbmQgd2lsbCBjYWNoZSB0aGF0IGNvcHkuIFRoaXMgbWVhbnMKKyAgICAv
LyB0aGF0IGlmIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyB0YWtlIHBsYWNlIG9uIHRoZSBjb250ZXh0
LCBuZWl0aGVyIHRoZQorICAgIC8vIGN1cnJlbnRseS1yZXR1cm5lZCBpbWFnZSwgbm9yIHRoZSBy
ZXN1bHRzIG9mIGZ1dHVyZSBpbWFnZSgpIGNhbGxzLAorICAgIC8vIHdpbGwgY29udGFpbiB0aGF0
IG9wZXJhdGlvbi4KKyAgICByZXR1cm4gQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0
ZSgKKyAgICAgICAgKm1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5iaXRtYXAoKSwKKyAgICAgICAg
Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OkRlZXBDb3B5KTsKIH0KIAogdm9pZCBJbWFnZUJ1
ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+JiBsb29r
VXBUYWJsZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZVNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAK
aW5kZXggYTI0ODVlNmFiNjI2NTA5ZGYwNzUzNjI2OWU5Y2RiZjgzZDRlNWU2Zi4uMDdiZTMzYTFh
MzhiZGJkMmI1NThiNTNiODJhMTc5NjI4MzAwZWM3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKQEAgLTUxNyw4ICs1MTcsMTcgQEAgdm9pZCBCaXRt
YXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsCiAgICAg
ICAgICAgICAgICAgICBXZWJDb3JlQ29tcG9zaXRlVG9Ta2lhQ29tcG9zaXRlKGNvbXBvc2l0ZU9w
KSk7CiB9CiAKLVBhc3NSZWZQdHI8Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE+IEJpdG1hcElt
YWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVhdGUoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCkKK0JpdG1h
cEltYWdlU2luZ2xlRnJhbWVTa2lhOjpCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYShjb25zdCBT
a0JpdG1hcCYgYml0bWFwKQorICAgIDogbV9uYXRpdmVJbWFnZShiaXRtYXApCiB7Cit9CisKK1Bh
c3NSZWZQdHI8Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE+IEJpdG1hcEltYWdlU2luZ2xlRnJh
bWVTa2lhOjpjcmVhdGUoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q29weURlcHRoIGRlcHRoKQoreworICAgIGlmIChkZXB0aCA9PSBTaGFsbG93Q29weSkKKyAgICAg
ICAgcmV0dXJuIG5ldyBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYShiaXRtYXApOworCiAgICAg
UmVmUHRyPEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhPiBpbWFnZShhZG9wdFJlZihuZXcgQml0
bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEoKSkpOwogICAgIGJpdG1hcC5jb3B5VG8oJmltYWdlLT5t
X25hdGl2ZUltYWdlLCBiaXRtYXAuY29uZmlnKCkpOwogICAgIHJldHVybiBpbWFnZS5yZWxlYXNl
KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggOTEx
N2VkOGM1OTM1NmY0MDM4MDk4MDM1ODJmM2Q0YjZjYjA2YTQwNC4uMmFkNTNkNTRhZDhmMmIxODMx
YmI5ODE5NTYzMGY0NmFjNWE0OGI2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcApAQCAtNjEzLDkgKzYxMyw5IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
CiAgICAgICAgICAgICBwaGFzZSArPSBkZXN0UmVjdC5sb2NhdGlvbigpIC0gZGVzdE9yaWdpbjsK
ICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wID0gb3AgPT0gQ29tcG9z
aXRlU291cmNlT3ZlciA/IGJnTGF5ZXItPmNvbXBvc2l0ZSgpIDogb3A7CiAgICAgICAgICAgICBS
ZW5kZXJPYmplY3QqIGNsaWVudEZvckJhY2tncm91bmRJbWFnZSA9IGJhY2tncm91bmRPYmplY3Qg
PyBiYWNrZ3JvdW5kT2JqZWN0IDogdGhpczsKLSAgICAgICAgICAgIEltYWdlKiBpbWFnZSA9IGJn
LT5pbWFnZShjbGllbnRGb3JCYWNrZ3JvdW5kSW1hZ2UsIHRpbGVTaXplKTsKLSAgICAgICAgICAg
IGJvb2wgdXNlTG93UXVhbGl0eVNjYWxpbmcgPSBzaG91bGRQYWludEF0TG93UXVhbGl0eShjb250
ZXh0LCBpbWFnZSwgdGlsZVNpemUpOwotICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RpbGVkSW1h
Z2UoaW1hZ2UsIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgZGVzdFJlY3QsIHBoYXNlLCB0aWxlU2l6
ZSwgY29tcG9zaXRlT3AsIHVzZUxvd1F1YWxpdHlTY2FsaW5nKTsKKyAgICAgICAgICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2UgPSBiZy0+aW1hZ2UoY2xpZW50Rm9yQmFja2dyb3VuZEltYWdlLCB0aWxl
U2l6ZSk7CisgICAgICAgICAgICBib29sIHVzZUxvd1F1YWxpdHlTY2FsaW5nID0gc2hvdWxkUGFp
bnRBdExvd1F1YWxpdHkoY29udGV4dCwgaW1hZ2UuZ2V0KCksIHRpbGVTaXplKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBzdHlsZSgpLT5jb2xvclNw
YWNlKCksIGRlc3RSZWN0LCBwaGFzZSwgdGlsZVNpemUsIGNvbXBvc2l0ZU9wLCB1c2VMb3dRdWFs
aXR5U2NhbGluZyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTg2Miw3ICs4NjIsNyBAQCBib29s
IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjZUltYWdlKEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZXh0LAogICAgIGJvb2wgZHJhd01pZGRsZSA9IChpbWFnZVdpZHRoIC0g
bGVmdFNsaWNlIC0gcmlnaHRTbGljZSkgPiAwICYmICh3IC0gbGVmdFdpZHRoIC0gcmlnaHRXaWR0
aCkgPiAwICYmCiAgICAgICAgICAgICAgICAgICAgICAgKGltYWdlSGVpZ2h0IC0gdG9wU2xpY2Ug
LSBib3R0b21TbGljZSkgPiAwICYmIChoIC0gdG9wV2lkdGggLSBib3R0b21XaWR0aCkgPiAwOwog
Ci0gICAgSW1hZ2UqIGltYWdlID0gc3R5bGVJbWFnZS0+aW1hZ2UodGhpcywgaW1hZ2VTaXplKTsK
KyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gc3R5bGVJbWFnZS0+aW1hZ2UodGhpcywgaW1hZ2VT
aXplKTsKICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBzdHlsZS0+Y29sb3JTcGFjZSgpOwog
CiAgICAgaWYgKGRyYXdMZWZ0KSB7CkBAIC04NzEsMTggKzg3MSwxOCBAQCBib29sIFJlbmRlckJv
eE1vZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjZUltYWdlKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0LAogICAgICAgICAvLyBUaGUgdG9wIGxlZnQgY29ybmVyIHJlY3QgaXMgKHR4LCB0
eSwgbGVmdFdpZHRoLCB0b3BXaWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8gdXNlIGZyb20g
d2l0aGluIHRoZSBpbWFnZSBpcyBvYnRhaW5lZCBmcm9tIG91ciBzbGljZSwgYW5kIGlzICgwLCAw
LCBsZWZ0U2xpY2UsIHRvcFNsaWNlKQogICAgICAgICBpZiAoZHJhd1RvcCkKLSAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBjb2xvclNwYWNlLCBJbnRSZWN0KHR4
LCB0eSwgbGVmdFdpZHRoLCB0b3BXaWR0aCksCisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQt
PmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgSW50UmVjdCh0eCwgdHksIGxlZnRX
aWR0aCwgdG9wV2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW50UmVjdCgwLCAwLCBsZWZ0U2xpY2UsIHRvcFNsaWNlKSwgb3ApOwogCiAgICAgICAgIC8vIFRo
ZSBib3R0b20gbGVmdCBjb3JuZXIgcmVjdCBpcyAodHgsIHR5ICsgaCAtIGJvdHRvbVdpZHRoLCBs
ZWZ0V2lkdGgsIGJvdHRvbVdpZHRoKQogICAgICAgICAvLyBUaGUgcmVjdCB0byB1c2UgZnJvbSB3
aXRoaW4gdGhlIGltYWdlIGlzICgwLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCBsZWZ0U2xp
Y2UsIGJvdG9tU2xpY2UpCiAgICAgICAgIGlmIChkcmF3Qm90dG9tKQotICAgICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIGNvbG9yU3BhY2UsIEludFJlY3QodHgsIHR5
ICsgaCAtIGJvdHRvbVdpZHRoLCBsZWZ0V2lkdGgsIGJvdHRvbVdpZHRoKSwKKyAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRS
ZWN0KHR4LCB0eSArIGggLSBib3R0b21XaWR0aCwgbGVmdFdpZHRoLCBib3R0b21XaWR0aCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDAsIGltYWdlSGVp
Z2h0IC0gYm90dG9tU2xpY2UsIGxlZnRTbGljZSwgYm90dG9tU2xpY2UpLCBvcCk7CiAKICAgICAg
ICAgLy8gUGFpbnQgdGhlIGxlZnQgZWRnZS4KICAgICAgICAgLy8gSGF2ZSB0byBzY2FsZSBhbmQg
dGlsZSBpbnRvIHRoZSBib3JkZXIgcmVjdC4KLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3
VGlsZWRJbWFnZShpbWFnZSwgY29sb3JTcGFjZSwgSW50UmVjdCh0eCwgdHkgKyB0b3BXaWR0aCwg
bGVmdFdpZHRoLAorICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdl
LmdldCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0KHR4LCB0eSArIHRvcFdpZHRoLCBsZWZ0V2lkdGgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCAtIHRvcFdpZHRoIC0g
Ym90dG9tV2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElu
dFJlY3QoMCwgdG9wU2xpY2UsIGxlZnRTbGljZSwgaW1hZ2VIZWlnaHQgLSB0b3BTbGljZSAtIGJv
dHRvbVNsaWNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFn
ZTo6U3RyZXRjaFRpbGUsIChJbWFnZTo6VGlsZVJ1bGUpdlJ1bGUsIG9wKTsKQEAgLTg5MywxNyAr
ODkzLDE3IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWNlSW1hZ2Uo
R3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCiAgICAgICAgIC8vIFRoZSB0b3Agcmln
aHQgY29ybmVyIHJlY3QgaXMgKHR4ICsgdyAtIHJpZ2h0V2lkdGgsIHR5LCByaWdodFdpZHRoLCB0
b3BXaWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8gdXNlIGZyb20gd2l0aGluIHRoZSBpbWFn
ZSBpcyBvYnRhaW5lZCBmcm9tIG91ciBzbGljZSwgYW5kIGlzIChpbWFnZVdpZHRoIC0gcmlnaHRT
bGljZSwgMCwgcmlnaHRTbGljZSwgdG9wU2xpY2UpCiAgICAgICAgIGlmIChkcmF3VG9wKQotICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIGNvbG9yU3BhY2UsIElu
dFJlY3QodHggKyB3IC0gcmlnaHRXaWR0aCwgdHksIHJpZ2h0V2lkdGgsIHRvcFdpZHRoKSwKKyAg
ICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBjb2xvclNw
YWNlLCBJbnRSZWN0KHR4ICsgdyAtIHJpZ2h0V2lkdGgsIHR5LCByaWdodFdpZHRoLCB0b3BXaWR0
aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KGltYWdl
V2lkdGggLSByaWdodFNsaWNlLCAwLCByaWdodFNsaWNlLCB0b3BTbGljZSksIG9wKTsKIAogICAg
ICAgICAvLyBUaGUgYm90dG9tIHJpZ2h0IGNvcm5lciByZWN0IGlzICh0eCArIHcgLSByaWdodFdp
ZHRoLCB0eSArIGggLSBib3R0b21XaWR0aCwgcmlnaHRXaWR0aCwgYm90dG9tV2lkdGgpCiAgICAg
ICAgIC8vIFRoZSByZWN0IHRvIHVzZSBmcm9tIHdpdGhpbiB0aGUgaW1hZ2UgaXMgKGltYWdlV2lk
dGggLSByaWdodFNsaWNlLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCByaWdodFNsaWNlLCBi
b3R0b21TbGljZSkKICAgICAgICAgaWYgKGRyYXdCb3R0b20pCi0gICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgY29sb3JTcGFjZSwgSW50UmVjdCh0eCArIHcgLSBy
aWdodFdpZHRoLCB0eSArIGggLSBib3R0b21XaWR0aCwgcmlnaHRXaWR0aCwgYm90dG9tV2lkdGgp
LAorICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIGNv
bG9yU3BhY2UsIEludFJlY3QodHggKyB3IC0gcmlnaHRXaWR0aCwgdHkgKyBoIC0gYm90dG9tV2lk
dGgsIHJpZ2h0V2lkdGgsIGJvdHRvbVdpZHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEludFJlY3QoaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UsIGltYWdlSGVpZ2h0
IC0gYm90dG9tU2xpY2UsIHJpZ2h0U2xpY2UsIGJvdHRvbVNsaWNlKSwgb3ApOwogCiAgICAgICAg
IC8vIFBhaW50IHRoZSByaWdodCBlZGdlLgotICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdU
aWxlZEltYWdlKGltYWdlLCBjb2xvclNwYWNlLCBJbnRSZWN0KHR4ICsgdyAtIHJpZ2h0V2lkdGgs
IHR5ICsgdG9wV2lkdGgsIHJpZ2h0V2lkdGgsCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJh
d1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIEludFJlY3QodHggKyB3IC0gcmln
aHRXaWR0aCwgdHkgKyB0b3BXaWR0aCwgcmlnaHRXaWR0aCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoIC0gdG9wV2lkdGggLSBib3R0b21XaWR0aCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdChpbWFnZVdpZHRoIC0gcmln
aHRTbGljZSwgdG9wU2xpY2UsIHJpZ2h0U2xpY2UsIGltYWdlSGVpZ2h0IC0gdG9wU2xpY2UgLSBi
b3R0b21TbGljZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1h
Z2U6OlN0cmV0Y2hUaWxlLCAoSW1hZ2U6OlRpbGVSdWxlKXZSdWxlLCBvcCk7CkBAIC05MTEsMjAg
KzkxMSwyMCBAQCBib29sIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjZUltYWdl
KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LAogCiAgICAgLy8gUGFpbnQgdGhlIHRv
cCBlZGdlLgogICAgIGlmIChkcmF3VG9wKQotICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdU
aWxlZEltYWdlKGltYWdlLCBjb2xvclNwYWNlLCBJbnRSZWN0KHR4ICsgbGVmdFdpZHRoLCB0eSwg
dyAtIGxlZnRXaWR0aCAtIHJpZ2h0V2lkdGgsIHRvcFdpZHRoKSwKKyAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgSW50UmVjdCh0
eCArIGxlZnRXaWR0aCwgdHksIHcgLSBsZWZ0V2lkdGggLSByaWdodFdpZHRoLCB0b3BXaWR0aCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdChsZWZ0U2xp
Y2UsIDAsIGltYWdlV2lkdGggLSByaWdodFNsaWNlIC0gbGVmdFNsaWNlLCB0b3BTbGljZSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEltYWdlOjpUaWxlUnVsZSlo
UnVsZSwgSW1hZ2U6OlN0cmV0Y2hUaWxlLCBvcCk7CiAKICAgICAvLyBQYWludCB0aGUgYm90dG9t
IGVkZ2UuCiAgICAgaWYgKGRyYXdCb3R0b20pCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJh
d1RpbGVkSW1hZ2UoaW1hZ2UsIGNvbG9yU3BhY2UsIEludFJlY3QodHggKyBsZWZ0V2lkdGgsIHR5
ICsgaCAtIGJvdHRvbVdpZHRoLAorICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZElt
YWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0KHR4ICsgbGVmdFdpZHRoLCB0eSAr
IGggLSBib3R0b21XaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3IC0gbGVmdFdpZHRoIC0gcmlnaHRXaWR0aCwgYm90dG9tV2lkdGgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QobGVmdFNsaWNlLCBpbWFnZUhlaWdo
dCAtIGJvdHRvbVNsaWNlLCBpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSAtIGxlZnRTbGljZSwgYm90
dG9tU2xpY2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbWFn
ZTo6VGlsZVJ1bGUpaFJ1bGUsIEltYWdlOjpTdHJldGNoVGlsZSwgb3ApOwogCiAgICAgLy8gUGFp
bnQgdGhlIG1pZGRsZS4KICAgICBpZiAoZHJhd01pZGRsZSkKLSAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZSwgY29sb3JTcGFjZSwgSW50UmVjdCh0eCArIGxlZnRX
aWR0aCwgdHkgKyB0b3BXaWR0aCwgdyAtIGxlZnRXaWR0aCAtIHJpZ2h0V2lkdGgsCisgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2Us
IEludFJlY3QodHggKyBsZWZ0V2lkdGgsIHR5ICsgdG9wV2lkdGgsIHcgLSBsZWZ0V2lkdGggLSBy
aWdodFdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggLSB0
b3BXaWR0aCAtIGJvdHRvbVdpZHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbnRSZWN0KGxlZnRTbGljZSwgdG9wU2xpY2UsIGltYWdlV2lkdGggLSByaWdodFNs
aWNlIC0gbGVmdFNsaWNlLCBpbWFnZUhlaWdodCAtIHRvcFNsaWNlIC0gYm90dG9tU2xpY2UpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbWFnZTo6VGlsZVJ1bGUp
aFJ1bGUsIChJbWFnZTo6VGlsZVJ1bGUpdlJ1bGUsIG9wKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcAppbmRleCAyMDczNDc5NjYwZjNjMGM4NjEyZGFhYmFlMTgxNTdlMDZmMjQ1ZjhiLi42YzY4
MjhlZjFlODUyYWMyN2ZlODIxNmNlNDQ4ZDNkMWU0ZTFhZjYzIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW1hZ2UuY3BwCkBAIC0xMDYsMTEgKzEwNiwxNCBAQCBib29sIFJlbmRlckltYWdlOjpzZXRJbWFn
ZVNpemVGb3JBbHRUZXh0KENhY2hlZEltYWdlKiBuZXdJbWFnZSAvKiA9IDAgKi8pCiAgICAgICAg
IGltYWdlSGVpZ2h0ID0gcGFkZGluZ0hlaWdodDsKICAgICB9CiAgIAotICAgIGlmIChuZXdJbWFn
ZSAmJiBuZXdJbWFnZS0+aW1hZ2UoKSkgewotICAgICAgICAvLyBpbWFnZVNpemUoKSByZXR1cm5z
IDAgZm9yIHRoZSBlcnJvciBpbWFnZS4gIFdlIG5lZWQgdGhlIHRydWUgc2l6ZSBvZiB0aGUKLSAg
ICAgICAgLy8gZXJyb3IgaW1hZ2UsIHNvIHdlIGhhdmUgdG8gZ2V0IGl0IGJ5IGdyYWJiaW5nIGlt
YWdlKCkgZGlyZWN0bHkuCi0gICAgICAgIGltYWdlV2lkdGggKz0gbmV3SW1hZ2UtPmltYWdlKCkt
PndpZHRoKCkgKiBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgICAgIGltYWdlSGVpZ2h0
ICs9IG5ld0ltYWdlLT5pbWFnZSgpLT5oZWlnaHQoKSAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KTsKKyAgICBpZiAobmV3SW1hZ2UpIHsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWcgPSBuZXdJ
bWFnZS0+aW1hZ2UoKTsKKyAgICAgICAgaWYgKGltZykgeworICAgICAgICAgICAgLy8gaW1hZ2VT
aXplKCkgcmV0dXJucyAwIGZvciB0aGUgZXJyb3IgaW1hZ2UuICBXZSBuZWVkIHRoZSB0cnVlIHNp
emUgb2YgdGhlCisgICAgICAgICAgICAvLyBlcnJvciBpbWFnZSwgc28gd2UgaGF2ZSB0byBnZXQg
aXQgYnkgZ3JhYmJpbmcgaW1hZ2UoKSBkaXJlY3RseS4KKyAgICAgICAgICAgIGltYWdlV2lkdGgg
Kz0gaW1nLT53aWR0aCgpICogc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICAgICAg
aW1hZ2VIZWlnaHQgKz0gaW1nLT5oZWlnaHQoKSAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsK
KyAgICAgICAgfQogICAgIH0KICAgCiAgICAgLy8gd2UgaGF2ZSBhbiBhbHQgYW5kIHRoZSB1c2Vy
IG1lYW50IGl0IChpdHMgbm90IGEgdGV4dCB3ZSBpbnZlbnRlZCkKQEAgLTI2NSw3ICsyNjgsNyBA
QCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBp
bnQgdHgsIGludCB0eSkKICAgICAgICAgICAgICAgICAgICAgY2VudGVyWSA9IDA7CiAgICAgICAg
ICAgICAgICAgaW1hZ2VYID0gbGVmdEJvcmRlciArIGxlZnRQYWQgKyBjZW50ZXJYICsgMTsKICAg
ICAgICAgICAgICAgICBpbWFnZVkgPSB0b3BCb3JkZXIgKyB0b3BQYWQgKyBjZW50ZXJZICsgMTsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UoKSwgc3R5bGUoKS0+Y29s
b3JTcGFjZSgpLCBJbnRQb2ludCh0eCArIGltYWdlWCwgdHkgKyBpbWFnZVkpKTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UoKS5nZXQoKSwgc3R5bGUoKS0+Y29sb3JT
cGFjZSgpLCBJbnRQb2ludCh0eCArIGltYWdlWCwgdHkgKyBpbWFnZVkpKTsKICAgICAgICAgICAg
ICAgICBlcnJvclBpY3R1cmVEcmF3biA9IHRydWU7CiAgICAgICAgICAgICB9CiAKQEAgLTI4OSw3
ICsyOTIsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBpbnQgdHgsIGludCB0eSkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0g
ZWxzZSBpZiAoaGFzSW1hZ2UoKSAmJiBjV2lkdGggPiAwICYmIGNIZWlnaHQgPiAwKSB7Ci0gICAg
ICAgIEltYWdlKiBpbWcgPSBpbWFnZShjV2lkdGgsIGNIZWlnaHQpOworICAgICAgICBSZWZQdHI8
SW1hZ2U+IGltZyA9IGltYWdlKGNXaWR0aCwgY0hlaWdodCk7CiAgICAgICAgIGlmICghaW1nIHx8
IGltZy0+aXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTM1NCwxNCArMzU3LDE0
IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIGlmICghaGFzSW1hZ2UoKSB8fCBlcnJvck9j
Y3VycmVkKCkgfHwgcmVjdC53aWR0aCgpIDw9IDAgfHwgcmVjdC5oZWlnaHQoKSA8PSAwKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBJbWFnZSogaW1nID0gaW1hZ2UocmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKTsKKyAgICBSZWZQdHI8SW1hZ2U+IGltZyA9IGltYWdlKHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSk7CiAgICAgaWYgKCFpbWcgfHwgaW1nLT5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbHQgPSAobm9kZSgpICYmIG5v
ZGUoKS0+aGFzVGFnTmFtZShpbWdUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQq
Pihub2RlKCkpIDogMDsKICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciA9
IGltYWdlRWx0ID8gaW1hZ2VFbHQtPmNvbXBvc2l0ZU9wZXJhdG9yKCkgOiBDb21wb3NpdGVTb3Vy
Y2VPdmVyOwotICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxpbmcgPSBzaG91bGRQYWludEF0TG93
UXVhbGl0eShjb250ZXh0LCB0aGlzLT5pbWFnZSgpLCByZWN0LnNpemUoKSk7Ci0gICAgY29udGV4
dC0+ZHJhd0ltYWdlKGltYWdlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSksIHN0eWxlKCkt
PmNvbG9yU3BhY2UoKSwgcmVjdCwgY29tcG9zaXRlT3BlcmF0b3IsIHVzZUxvd1F1YWxpdHlTY2Fs
aW5nKTsKKyAgICBib29sIHVzZUxvd1F1YWxpdHlTY2FsaW5nID0gc2hvdWxkUGFpbnRBdExvd1F1
YWxpdHkoY29udGV4dCwgaW1nLmdldCgpLCByZWN0LnNpemUoKSk7CisgICAgY29udGV4dC0+ZHJh
d0ltYWdlKGltZy5nZXQoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCByZWN0LCBjb21wb3NpdGVP
cGVyYXRvciwgdXNlTG93UXVhbGl0eVNjYWxpbmcpOwogfQogCiBpbnQgUmVuZGVySW1hZ2U6Om1p
bmltdW1SZXBsYWNlZEhlaWdodCgpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbWFnZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAppbmRleCBi
ODlhNjUyNDlkOTBkNDFjNzBjMjY1NWYzNDM4ZTRlZjZkMGQ1ZTkxLi4xOWZiNmUwZDg4ZGJmNTkx
ZjRlNWJmNjI4Yjg0Y2JkMDM5OTU4ODI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbWFnZS5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgKQEAgLTUy
LDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZvaWQgaGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJl
ZChUaW1lcjxSZW5kZXJJbWFnZT4qKTsKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgSW1hZ2Uq
IGltYWdlKGludCAvKiB3aWR0aCAqLyA9IDAsIGludCAvKiBoZWlnaHQgKi8gPSAwKSB7IHJldHVy
biBtX2NhY2hlZEltYWdlID8gbV9jYWNoZWRJbWFnZS0+aW1hZ2UoKSA6IG51bGxJbWFnZSgpOyB9
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZShpbnQgLyogd2lkdGggKi8gPSAw
LCBpbnQgLyogaGVpZ2h0ICovID0gMCkgeyByZXR1cm4gbV9jYWNoZWRJbWFnZSA/IG1fY2FjaGVk
SW1hZ2UtPmltYWdlKCkgOiBudWxsSW1hZ2UoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBlcnJvck9j
Y3VycmVkKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZSAmJiBtX2NhY2hlZEltYWdlLT5l
cnJvck9jY3VycmVkKCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBl
ZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9IDApOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2VHZW5lcmF0ZWRDb250ZW50LmggYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbWFnZUdlbmVyYXRlZENvbnRlbnQuaAppbmRleCA5ZjgzMzBkODE3YTY1MjFmZGJhZTNi
YWZjMDMxMmY3ZmU0ODNkMWIxLi40Y2NhNzcyNDJlNjI3ZTA0MWNlYjg0ODE2ZjM3NTEzOWZiMjU4
ZjViIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZUdlbmVyYXRlZENv
bnRlbnQuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZUdlbmVyYXRlZENvbnRl
bnQuaApAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhc0ltYWdl
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwg
SW1hZ2UqIGltYWdlKGludCB3ID0gMCwgaW50IGggPSAwKSB7IHJldHVybiBtX3N0eWxlSW1hZ2Ut
PmltYWdlKHRoaXMsIEludFNpemUodywgaCkpOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElt
YWdlPiBpbWFnZShpbnQgdyA9IDAsIGludCBoID0gMCkgeyByZXR1cm4gbV9zdHlsZUltYWdlLT5p
bWFnZSh0aGlzLCBJbnRTaXplKHcsIGgpKTsgfQogICAgIHZpcnR1YWwgYm9vbCBlcnJvck9jY3Vy
cmVkKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZUltYWdlLT5lcnJvck9jY3VycmVkKCk7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgdXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3R5bGVJbWFnZS0+dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpOyB9CiAgICAgdmlydHVhbCB2b2lk
IHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdCB7IG1fc3R5
bGVJbWFnZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKHNpemUpOyB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RNYXJrZXIuY3BwCmluZGV4IGUxNDhjODE5YjYwNTVmNjhkNTllZDRhYjI1ZmIwNzlk
NmNkZmYzMTEuLjA1NTJhYTc5ZTY4NWM4MDMxOTI2YWM4ODM5ZjNiNjBjMDQ2MDYwNzMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCkBAIC05ODgsNyArOTg4LDcgQEAgdm9p
ZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBp
bnQgdHkpCiAgICAgICAgIGlmIChzdHlsZSgpLT5oaWdobGlnaHQoKSAhPSBudWxsQXRvbSAmJiAh
cGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgICAgIHBhaW50
Q3VzdG9tSGlnaGxpZ2h0KHR4LCB0eSwgc3R5bGUoKS0+aGlnaGxpZ2h0KCksIHRydWUpOwogI2Vu
ZGlmCi0gICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2ltYWdlLT5pbWFnZSh0aGlzLCBtYXJr
ZXIuc2l6ZSgpKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBtYXJrZXIubG9jYXRpb24oKSk7Cisg
ICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2ltYWdlLT5pbWFnZSh0aGlzLCBtYXJrZXIuc2l6
ZSgpKS5nZXQoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBtYXJrZXIubG9jYXRpb24oKSk7CiAg
ICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUpIHsKICAgICAgICAg
ICAgIEludFJlY3Qgc2VsUmVjdCA9IGxvY2FsU2VsZWN0aW9uUmVjdCgpOwogICAgICAgICAgICAg
c2VsUmVjdC5tb3ZlKHR4LCB0eSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdJbWFnZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAKaW5k
ZXggNWE5MmUzM2YzMGRhYTZkMWY3ZWRkZTVmOGU5YjAwZGI1MTkxYTgxYS4uZjVmY2MyZDViZTVl
N2I1NTZlOTkzOTViMGZkNDAxMDM3MzI3M2IzNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lt
YWdlLmNwcApAQCAtOTEsMTQgKzkxLDE1IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnBhaW50KFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGludCkKICAgICAgICAgUGFpbnRJbmZvIHNhdmVkSW5m
byhwYWludEluZm8pOwogCiAgICAgICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9S
ZW5kZXJTVkdDb250ZW50KHRoaXMsIHBhaW50SW5mbykpIHsKKyAgICAgICAgICAgIFJlZlB0cjxJ
bWFnZT4gaW1nID0gaW1hZ2UoKTsKICAgICAgICAgICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IG1f
bG9jYWxCb3VuZHM7Ci0gICAgICAgICAgICBGbG9hdFJlY3Qgc3JjUmVjdCgwLCAwLCBpbWFnZSgp
LT53aWR0aCgpLCBpbWFnZSgpLT5oZWlnaHQoKSk7CisgICAgICAgICAgICBGbG9hdFJlY3Qgc3Jj
UmVjdCgwLCAwLCBpbWctPndpZHRoKCksIGltZy0+aGVpZ2h0KCkpOwogCiAgICAgICAgICAgICBT
VkdJbWFnZUVsZW1lbnQqIGltYWdlRWx0ID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4o
bm9kZSgpKTsKICAgICAgICAgICAgIGlmIChpbWFnZUVsdC0+cHJlc2VydmVBc3BlY3RSYXRpbygp
LmFsaWduKCkgIT0gU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFU
SU9fTk9ORSkKICAgICAgICAgICAgICAgICBpbWFnZUVsdC0+cHJlc2VydmVBc3BlY3RSYXRpbygp
LnRyYW5zZm9ybVJlY3QoZGVzdFJlY3QsIHNyY1JlY3QpOwogCi0gICAgICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGRlc3RSZWN0
LCBzcmNSZWN0KTsKKyAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2UoaW1n
LmdldCgpLCBEZXZpY2VDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCk7CiAgICAgICAgIH0K
ICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBw
YWludEluZm8sIHNhdmVkSW5mby5jb250ZXh0KTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggYmM1ZmVhZjAxNDc5MGE2YmM1MDY0
Njk4OWE4NWEyZmYxNmZhNTUxZS4uNWE0OTgzYjIyMjhiYjhhYmJlNDFjYTkyZmEyZTcyODY1N2Ux
MmFlZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNw
cApAQCAtMjcxLDcgKzI3MSw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RB
cHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvCiAjaWYgIVBMQVRG
T1JNKENHKQogICAgICAgICAgICAgcmVzdWx0SW1hZ2UtPnRyYW5zZm9ybUNvbG9yU3BhY2UoTGlu
ZWFyUkdCLCBEZXZpY2VSR0IpOwogI2VuZGlmCi0gICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1h
Z2UocmVzdWx0SW1hZ2UtPmltYWdlKCksIG9iamVjdC0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBs
YXN0RWZmZWN0LT5zdWJSZWdpb24oKSk7CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2Uo
cmVzdWx0SW1hZ2UtPmltYWdlKCkuZ2V0KCksIG9iamVjdC0+c3R5bGUoKS0+Y29sb3JTcGFjZSgp
LCBsYXN0RWZmZWN0LT5zdWJSZWdpb24oKSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCmluZGV4IDkwMmZmMDJj
NjZjZjRlZmMyNDc3M2M3ZDRiNDA1ODM5NDNkYWI5MGYuLjIzZDViZjI0NDgzNjM5YWNkMGU2NGU5
MTNiYzU0M2RjZDkyZjY3MDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlUGF0dGVybi5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVz
b3VyY2VQYXR0ZXJuLmNwcApAQCAtMzMxLDcgKzMzMSw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuOjpidWlsZFBhdHRlcm4oUGF0dGVybkRhdGEqIHBhdHRlcm5EYXRhLCBQYXNzT3du
UHRyCiAgICAgICAgIG5ld1RpbGVJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgwLCBwYXR0ZXJuRGF0
YS0+Ym91bmRhcmllcy5oZWlnaHQoKSk7CiAgICAgICAgIGZvciAoaW50IGogPSBudW1YOyBqID4g
MDsgLS1qKSB7CiAgICAgICAgICAgICBuZXdUaWxlSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUocGF0
dGVybkRhdGEtPmJvdW5kYXJpZXMud2lkdGgoKSwgMCk7Ci0gICAgICAgICAgICBuZXdUaWxlSW1h
Z2VDb250ZXh0LT5kcmF3SW1hZ2UodGlsZUltYWdlLT5pbWFnZSgpLCBzdHlsZSgpLT5jb2xvclNw
YWNlKCksIHRpbGVSZWN0LCB0aWxlUmVjdCk7CisgICAgICAgICAgICBuZXdUaWxlSW1hZ2VDb250
ZXh0LT5kcmF3SW1hZ2UodGlsZUltYWdlLT5pbWFnZSgpLmdldCgpLCBzdHlsZSgpLT5jb2xvclNw
YWNlKCksIHRpbGVSZWN0LCB0aWxlUmVjdCk7CiAgICAgICAgIH0KICAgICAgICAgbmV3VGlsZUlt
YWdlQ29udGV4dC0+dHJhbnNsYXRlKC1wYXR0ZXJuRGF0YS0+Ym91bmRhcmllcy53aWR0aCgpICog
bnVtWCwgMCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5
bGVDYWNoZWRJbWFnZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZElt
YWdlLmNwcAppbmRleCBiNTVjNWI5OGQ4YWY0MGM3YzAzMTIwZTc3YzU1OTlmN2E4YTM4ZDAzLi42
NjdjYWQ3Zjc0OTRkNWQxZjA4YmE4MjI1ODIwMDliMjBkOTFjMWQ4IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmNwcAorKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmNwcApAQCAtODQsNyArODQsNyBAQCB2b2lk
IFN0eWxlQ2FjaGVkSW1hZ2U6OnJlbW92ZUNsaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQog
ICAgIHJldHVybiBtX2ltYWdlLT5yZW1vdmVDbGllbnQocmVuZGVyZXIpOwogfQogCi1JbWFnZSog
U3R5bGVDYWNoZWRJbWFnZTo6aW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpIGNv
bnN0CitQYXNzUmVmUHRyPEltYWdlPiBTdHlsZUNhY2hlZEltYWdlOjppbWFnZShSZW5kZXJPYmpl
Y3QqLCBjb25zdCBJbnRTaXplJikgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbWFnZS0+aW1hZ2Uo
KTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1h
Z2UuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuaAppbmRleCAz
ZDIyODY4MGE2ZDA2ZjNhZTdmZjQwZmU2ODEwMDU3YTg0ZmRiMzQxLi5kMzRkZGQwZGY5Mzc2YzIz
ZTdlMzUyNTQ1YzE1NzUxODZjZjFlNzVlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TdHlsZUNhY2hlZEltYWdlLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5
bGVDYWNoZWRJbWFnZS5oCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmKTsKICAgICB2aXJ0dWFsIHZv
aWQgYWRkQ2xpZW50KFJlbmRlck9iamVjdCopOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGll
bnQoUmVuZGVyT2JqZWN0Kik7Ci0gICAgdmlydHVhbCBJbWFnZSogaW1hZ2UoUmVuZGVyT2JqZWN0
KiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbWFnZT4g
aW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0OwogICAgIAogcHJpdmF0
ZToKICAgICBTdHlsZUNhY2hlZEltYWdlKENhY2hlZEltYWdlKiBpbWFnZSkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuY3BwIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5jcHAKaW5kZXggNjEwZTczZDll
NmFjYjdiMzJiY2NiODFmMzhlYmJhMTkzZDhhODY1NS4uNjBiNGJlYmI1MWNhMDYzMGQ0NzBkNDFj
NTM3NzE5NjUxYjNkZDI1MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5
bGVHZW5lcmF0ZWRJbWFnZS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVH
ZW5lcmF0ZWRJbWFnZS5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBTdHlsZUdlbmVyYXRlZElt
YWdlOjpyZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICBtX2dlbmVyYXRv
ci0+cmVtb3ZlQ2xpZW50KHJlbmRlcmVyKTsKIH0KIAotSW1hZ2UqIFN0eWxlR2VuZXJhdGVkSW1h
Z2U6OmltYWdlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHNpemUpIGNv
bnN0CitQYXNzUmVmUHRyPEltYWdlPiBTdHlsZUdlbmVyYXRlZEltYWdlOjppbWFnZShSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogewogICAgIHJldHVy
biBtX2dlbmVyYXRvci0+aW1hZ2UocmVuZGVyZXIsIHNpemUpOwogfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5oIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5oCmluZGV4IDUzMmUzODNmMDRmN2I5MmFj
YWNmMTgwOGI3OGY2MGU5MTFlMmFlMWMuLjQ4MzZjNGY2MTE2NjRmNGM5YjhmMWQ3MzUxMGUzYzdk
NmFhNjIzNDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJh
dGVkSW1hZ2UuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZElt
YWdlLmgKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFn
ZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGRDbGll
bnQoUmVuZGVyT2JqZWN0Kik7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChSZW5kZXJP
YmplY3QqKTsKLSAgICB2aXJ0dWFsIEltYWdlKiBpbWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBJ
bnRTaXplJikgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZShSZW5k
ZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgogICAgIFN0
eWxlR2VuZXJhdGVkSW1hZ2UoQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogdmFsLCBib29sIGZpeGVk
U2l6ZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaCBi
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAppbmRleCBjYjkwMjg4MGY4MzQw
NmVmYTliZWU0OGI3M2U3NzRkOTQ3YzI2Nzk0Li40NzY5ODdmODE0ZGM0YmZlMzA2YmY2Zjc1Yzdi
ZTg5ODQzMDM3MWZmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUlt
YWdlLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCkBAIC01OCw3
ICs1OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXpl
KGNvbnN0IEludFNpemUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChSZW5kZXJP
YmplY3QqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChSZW5kZXJPYmplY3Qq
KSA9IDA7Ci0gICAgdmlydHVhbCBJbWFnZSogaW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50
U2l6ZSYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKFJl
bmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBXcmFw
cGVkSW1hZ2VQdHIgZGF0YSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNDYWNoZWRJ
bWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzR2VuZXJh
dGVkSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcCBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAKaW5kZXggNjQ5ZjY3MGUxMWNlY2RiZjJlN2E2NWJiNTI1
ZDFhYTc1NzNiMmQ2Yi4uNGQ0MjhkZGQxODhlYTQ2ODhmYzc0NDM0ZWJhM2I2MTg1MWIzZmFhZiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcAor
KysgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwCkBAIC03OSw3
ICs3OSw3IEBAIHZvaWQgRkVNZXJnZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tZXJnZUlucHV0cy5zaXplKCk7IGkrKykgewogICAgICAg
ICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX21lcmdlSW5wdXRz
W2ldLT5zY2FsZWRTdWJSZWdpb24oKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFn
ZShtX21lcmdlSW5wdXRzW2ldLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNw
YWNlLCBkZXN0UmVjdCk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX21lcmdl
SW5wdXRzW2ldLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLmdldCgpLCBEZXZpY2VDb2xvclNwYWNl
LCBkZXN0UmVjdCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcCBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVPZmZzZXQuY3BwCmluZGV4IGY2YzFhM2MwMWNmYTZjMDc1ZTczMDUwNDFjMjZmMDNjMDM0
ZWUwNDQuLjZiNGFkN2ZkYWM2MDJkNmI2MmNiMjcwZGQ2ZTdmZWU5YjA4YWEyMTggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwCisrKyBiL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwCkBAIC05MSw3ICs5MSw3
IEBAIHZvaWQgRkVPZmZzZXQ6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpLndpZHRoKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkuaGVp
Z2h0KCkpOwogCi0gICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdl
KCktPmltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGRzdFJlY3QpOworICAgIGZpbHRlckNvbnRl
eHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLmdldCgpLCBEZXZpY2VD
b2xvclNwYWNlLCBkc3RSZWN0KTsKIH0KIAogdm9pZCBGRU9mZnNldDo6ZHVtcCgpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAgYi9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAKaW5kZXggZmMxNzJlZWQxYmVlNTFm
Yjg1MzNjOTkyMmY4MTUwNGUzMjg5Yzk0ZC4uMGFiZWY3OGEwY2NmNjY2YWEyZTBmYmVmNjAzNjU4
N2QyYjc2NDczYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RVRpbGUuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNw
cApAQCAtNzIsNyArNzIsNyBAQCB2b2lkIEZFVGlsZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAK
ICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
dGlsZVJlY3Quc2l6ZSgpKTsKICAgICBHcmFwaGljc0NvbnRleHQqIHRpbGVJbWFnZUNvbnRleHQg
PSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKLSAgICB0aWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2Uo
bV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgSW50UG9pbnQo
KSk7CisgICAgdGlsZUltYWdlQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCkt
PmltYWdlKCkuZ2V0KCksIERldmljZUNvbG9yU3BhY2UsIEludFBvaW50KCkpOwogICAgIFJlZlB0
cjxQYXR0ZXJuPiBwYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZS0+aW1hZ2UoKSwg
dHJ1ZSwgdHJ1ZSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64253</attachid>
            <date>2010-08-12 13:27:23 -0700</date>
            <delta_ts>2010-08-13 13:26:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>55817</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA2NTE2MCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDIxNSw3ICsyMDIxNSw2IEBACiAJCQlpc2EgPSBQQlhQcm9qZWN0
OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJCMTEwMDhBOUVGQyAv
KiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovOwog
CQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKLQkJCWRldmVsb3BtZW50UmVn
aW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25S
ZWdpb25zID0gKAogCQkJCUVuZ2xpc2gsCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCShyZXZp
c2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTAsNyArOTAsMTEgQEAgSW1hZ2UqIENTU0NhbnZhc1ZhbHVlOjppbWFnZShSZW5k
ZXJPYmplYwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBlbHQgPSBlbGVtZW50KHJlbmRlcmVyLT5k
b2N1bWVudCgpKTsKICAgICBpZiAoIWVsdCB8fCAhZWx0LT5idWZmZXIoKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIGVsdC0+YnVmZmVyKCktPmltYWdlKCk7CisgICAgICAgIAorICAg
IC8vIEZJWE1FOiBGb3IgcGxhdGZvcm1zIHRoYXQgY2FuIHJlbmRlciBhIGxpdmUgaW1hZ2UsIHRo
aXMgaXMgcG9pbnRsZXNzbHkgc2xvdy4KKyAgICAvLyBUaGUgd2hvbGUgd2F5IHRoaXMgaXMgYXJj
aGl0ZWN0ZWQgaXMgc2lsbHkgZm9yIHRob3NlIHBsYXRmb3Jtcy4KKyAgICBSZWZQdHI8SW1hZ2U+
IGNvcGllZEltYWdlID0gZWx0LT5idWZmZXIoKS0+Y29waWVkSW1hZ2UoKTsKKyAgICByZXR1cm4g
Y29waWVkSW1hZ2UuZ2V0KCk7IAogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDkgKzIwOSw2
IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW4KIAogdm9pZCBIVE1M
Q2FudmFzRWxlbWVudDo6d2lsbERyYXcoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlm
IChtX2ltYWdlQnVmZmVyKQotICAgICAgICBtX2ltYWdlQnVmZmVyLT5jbGVhckltYWdlKCk7Ci0K
ICAgICBpZiAoUmVuZGVyQm94KiBybyA9IHJlbmRlckJveCgpKSB7CiAgICAgICAgIEZsb2F0UmVj
dCBkZXN0UmVjdCA9IHJvLT5jb250ZW50Qm94UmVjdCgpOwogICAgICAgICBGbG9hdFJlY3QgciA9
IG1hcFJlY3QocmVjdCwgRmxvYXRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVp
Z2h0KCkpLCBkZXN0UmVjdCk7CkBAIC0yODMsMTEgKzI4MCw4IEBAIHZvaWQgSFRNTENhbnZhc0Vs
ZW1lbnQ6OnBhaW50KEdyYXBoaWNzQ28KIAogICAgIGlmIChoYXNDcmVhdGVkSW1hZ2VCdWZmZXIo
KSkgewogICAgICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBidWZmZXIoKTsKLSAgICAg
ICAgaWYgKGltYWdlQnVmZmVyKSB7Ci0gICAgICAgICAgICBJbWFnZSogaW1hZ2UgPSBpbWFnZUJ1
ZmZlci0+aW1hZ2VGb3JSZW5kZXJpbmcoKTsKLSAgICAgICAgICAgIGlmIChpbWFnZSkKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIERldmljZUNvbG9yU3BhY2UsIHIp
OwotICAgICAgICB9CisgICAgICAgIGlmIChpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdl
QnVmZmVyLT5kcmF3KGNvbnRleHQsIERldmljZUNvbG9yU3BhY2UsIHIpOwogICAgIH0KIAogI2lm
IEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRl
cm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5j
cHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIENhbnZhc1BhdHRlcm46
OnBhcnNlUmVwZXRpdGlvblR5cGUoCiAgICAgZWMgPSBTWU5UQVhfRVJSOwogfQogCi1DYW52YXNQ
YXR0ZXJuOjpDYW52YXNQYXR0ZXJuKEltYWdlKiBpbWFnZSwgYm9vbCByZXBlYXRYLCBib29sIHJl
cGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCitDYW52YXNQYXR0ZXJuOjpDYW52YXNQYXR0ZXJuKFBh
c3NSZWZQdHI8SW1hZ2U+IGltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBv
cmlnaW5DbGVhbikKICAgICA6IG1fcGF0dGVybihQYXR0ZXJuOjpjcmVhdGUoaW1hZ2UsIHJlcGVh
dFgsIHJlcGVhdFkpKQogICAgICwgbV9vcmlnaW5DbGVhbihvcmlnaW5DbGVhbikKIHsKSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5oCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyB2
b2lkIHBhcnNlUmVwZXRpdGlvblR5cGUoY29uc3QgU3RyaW5nJiwgYm9vbCYgcmVwZWF0WCwgYm9v
bCYgcmVwZWF0WSwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENhbnZhc1BhdHRlcm4+IGNyZWF0ZShJbWFnZSogaW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCBy
ZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52
YXNQYXR0ZXJuPiBjcmVhdGUoUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UsIGJvb2wgcmVwZWF0WCwg
Ym9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1BhdHRlcm4oaW1hZ2UsIHJlcGVhdFgsIHJlcGVhdFks
IG9yaWdpbkNsZWFuKSk7CiAgICAgICAgIH0KQEAgLTUxLDcgKzUxLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBib29sIG9yaWdpbkNsZWFuKCkgY29uc3QgeyByZXR1cm4gbV9vcmln
aW5DbGVhbjsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQ2FudmFzUGF0dGVybihJbWFnZSos
IGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKTsKKyAgICAgICAg
Q2FudmFzUGF0dGVybihQYXNzUmVmUHRyPEltYWdlPiwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVh
dFksIGJvb2wgb3JpZ2luQ2xlYW4pOwogCiAgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBtX3BhdHRl
cm47CiAgICAgICAgIGJvb2wgbV9vcmlnaW5DbGVhbjsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDY1MTYwKQor
KysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjY0LDcgKzEyNjQsMTIgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmRyYXdJbWFnZQogCiAgICAgc291cmNlQ2FudmFzLT5tYWtlUmVuZGVyaW5nUmVzdWx0
c0F2YWlsYWJsZSgpOwogCi0gICAgYy0+ZHJhd0ltYWdlKGJ1ZmZlci0+aW1hZ2UoKSwgRGV2aWNl
Q29sb3JTcGFjZSwgZGVzdFJlY3QsIHNvdXJjZVJlY3QsIHN0YXRlKCkubV9nbG9iYWxDb21wb3Np
dGUpOworICAgIGlmIChjID09IGJ1ZmZlci0+Y29udGV4dCgpKSB7CisgICAgICAgIC8vIFdlJ3Jl
IGRyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlci4gIEluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmss
IHdlIG5lZWQgdG8gY29weSB0aGUgc291cmNlIGJ1ZmZlciBmaXJzdC4KKyAgICAgICAgUmVmUHRy
PEltYWdlPiBjb3BpZWRJbWFnZSA9IGJ1ZmZlci0+Y29waWVkSW1hZ2UoKTsKKyAgICAgICAgYy0+
ZHJhd0ltYWdlKGNvcGllZEltYWdlLmdldCgpLCBEZXZpY2VDb2xvclNwYWNlLCBkZXN0UmVjdCwg
c291cmNlUmVjdCwgc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSk7CisgICAgfSBlbHNlCisgICAg
ICAgIGJ1ZmZlci0+ZHJhdyhjLCAgRGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNvdXJjZVJl
Y3QsIHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUpOwogICAgIHdpbGxEcmF3KGRlc3RSZWN0KTsg
Ly8gVGhpcyBjYWxsIGNvbWVzIGFmdGVyIGRyYXdJbWFnZSwgc2luY2UgdGhlIGJ1ZmZlciB3ZSBk
cmF3IGludG8gbWF5IGJlIG91ciBvd24sIGFuZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCBpcyBk
aXJ0eS4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmd1YWJseSB3aWxsRHJh
dyBzaG91bGQgYmVjb21lIGRpZERyYXcgYW5kIG9jY3VyIGFmdGVyIGRyYXdpbmcgY2FsbHMgYW5k
IG5vdCBiZWZvcmUgdGhlbSB0byBhdm9pZCBwcm9ibGVtcyBsaWtlIHRoaXMuCiB9CkBAIC0xNDY0
LDcgKzE0NjksNyBAQCBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IENhbnZhc1JlbmRlcmluCiAg
ICAgQ2FudmFzUGF0dGVybjo6cGFyc2VSZXBldGl0aW9uVHlwZShyZXBldGl0aW9uVHlwZSwgcmVw
ZWF0WCwgcmVwZWF0WSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIENhbnZhc1BhdHRlcm46OmNyZWF0ZShjYW52YXMtPmJ1ZmZlcigpLT5pbWFnZSgpLCBy
ZXBlYXRYLCByZXBlYXRZLCBjYW52YXMtPm9yaWdpbkNsZWFuKCkpOworICAgIHJldHVybiBDYW52
YXNQYXR0ZXJuOjpjcmVhdGUoY2FudmFzLT5idWZmZXIoKS0+Y29waWVkSW1hZ2UoKSwgcmVwZWF0
WCwgcmVwZWF0WSwgY2FudmFzLT5vcmlnaW5DbGVhbigpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OndpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYgciwgdW5zaWduZWQgb3B0
aW9ucykKQEAgLTE4MjAsNyArMTgyNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkcmF3VGV4dEkKICAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+ZHJhd0JpZGlUZXh0KGZvbnQs
IHRleHRSdW4sIGxvY2F0aW9uKTsKIAogICAgICAgICBjLT5zYXZlKCk7Ci0gICAgICAgIGMtPmNs
aXBUb0ltYWdlQnVmZmVyKG1hc2tSZWN0LCBtYXNrSW1hZ2UuZ2V0KCkpOworICAgICAgICBtYXNr
SW1hZ2UtPmNsaXAoYywgbWFza1JlY3QpOwogICAgICAgICBkcmF3U3R5bGUtPmFwcGx5RmlsbENv
bG9yKGMpOwogICAgICAgICBjLT5maWxsUmVjdChtYXNrUmVjdCk7CiAgICAgICAgIGMtPnJlc3Rv
cmUoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNyArMTYxLDYgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaQogICAgIGlmIChtX21hcmtlZENhbnZh
c0RpcnR5KSB7CiAgICAgICAgIC8vIEZJWE1FOiBJdCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSB0
byBjbGVhciB0aGUgaW1hZ2UgYmVmb3JlIGRvaW5nIGEgcmVhZGJhY2suCiAgICAgICAgIC8vIElu
dmVzdGlnYXRlIHdoeSB0aGlzIGlzIG5lZWRlZCBhbmQgcmVtb3ZlIGlmIHBvc3NpYmxlLgotICAg
ICAgICBjYW52YXMoKS0+YnVmZmVyKCktPmNsZWFySW1hZ2UoKTsKICAgICAgICAgbV9tYXJrZWRD
YW52YXNEaXJ0eSA9IGZhbHNlOwogICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKHRoaXMpOwogICAgIH0KQEAgLTIxOTYsNyArMjE5NSw5IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHUKICAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5idWZmZXIoKS0+aW1hZ2UoKSwKKyAgICAK
KyAgICBSZWZQdHI8SW1hZ2U+IGNvcGllZEltYWdlID0gY2FudmFzLT5idWZmZXIoKS0+Y29waWVk
SW1hZ2UoKTsKKyAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgZm9ybWF0LCB0eXBlLCBjb3BpZWRJbWFnZS5nZXQoKSwKICAgICAgICAgICAgICAgICAgICBt
X3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIApAQCAtMjI5
NSw3ICsyMjk2LDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodQog
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICB0ZXhJbWFnZTJESW1w
bCh0YXJnZXQsIGxldmVsLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBjYW52YXMtPmJ1ZmZl
cigpLT5pbWFnZSgpLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZWMpOworICAgIAorICAgIFJl
ZlB0cjxJbWFnZT4gY29waWVkSW1hZ2UgPSBjYW52YXMtPmJ1ZmZlcigpLT5jb3BpZWRJbWFnZSgp
OworICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUsIGNvcGllZEltYWdlLmdldCgpLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZWMpOwog
fQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJn
ZXQsIHVuc2lnbmVkIGxldmVsLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywKQEAgLTI0NTUsNyAr
MjQ1OCw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTIKICAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdGV4U3ViSW1hZ2UyREltcGwo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmJ1
ZmZlcigpLT5pbWFnZSgpLAorICAgIAorICAgIFJlZlB0cjxJbWFnZT4gY29waWVkSW1hZ2UgPSBj
YW52YXMtPmJ1ZmZlcigpLT5jb3BpZWRJbWFnZSgpOworICAgIHRleFN1YkltYWdlMkRJbXBsKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY29waWVkSW1hZ2Uu
Z2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVt
dWx0aXBseUFscGhhLCBlYyk7CiB9CiAKQEAgLTI1NTQsNyArMjU1OSw5IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTIKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFLCBjYW52YXMtPmJ1ZmZlcigpLT5pbWFnZSgpLAorICAgIAorICAgIFJlZlB0
cjxJbWFnZT4gY29waWVkSW1hZ2UgPSBjYW52YXMtPmJ1ZmZlcigpLT5jb3BpZWRJbWFnZSgpOwor
ICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwg
Y29waWVkSW1hZ2UuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgZmxpcFksIHByZW11bHRp
cGx5QWxwaGEsIGVjKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5l
cmF0ZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
ZW5lcmF0ZWRJbWFnZS5jcHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDExICs2Myw4
IEBAIHZvaWQgR2VuZXJhdGVkSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWMKICAgICBHcmFwaGlj
c0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CiAgICAg
Z3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhZGp1c3Rl
ZFNpemUpLCAqbV9nZW5lcmF0b3IuZ2V0KCkpOwogCi0gICAgLy8gR3JhYiB0aGUgZmluYWwgaW1h
Z2UgZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgIEltYWdlKiBiaXRtYXAgPSBpbWFnZUJ1ZmZl
ci0+aW1hZ2UoKTsKLQotICAgIC8vIE5vdyBqdXN0IGNhbGwgZHJhd1RpbGVkIG9uIHRoYXQgaW1h
Z2UuCi0gICAgYml0bWFwLT5kcmF3UGF0dGVybihjb250ZXh0LCBhZGp1c3RlZFNyY1JlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBkZXN0
UmVjdCk7CisgICAgLy8gVGlsZSB0aGUgaW1hZ2UgYnVmZmVyIGludG8gdGhlIGNvbnRleHQuCisg
ICAgaW1hZ2VCdWZmZXItPmRyYXdQYXR0ZXJuKGNvbnRleHQsIGFkanVzdGVkU3JjUmVjdCwgcGF0
dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3AsIGRlc3RS
ZWN0KTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0OCw3ICsyNDgsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY2xpcE91dEVsbGlwc2VJblJlY3QoY29uc3Qg
SW50UmVjdCYpOwogICAgICAgICB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0
JiwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNvbnN0
IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0KTsKICAgICAg
ICAgdm9pZCBjbGlwUGF0aChXaW5kUnVsZSk7Ci0gICAgICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VCdWZmZXIqKTsKICAgICAgICAgdm9pZCBj
bGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiwgYm9v
bCBhbnRpYWxpYXMgPSB0cnVlKTsKIAogICAgICAgICBpbnQgdGV4dERyYXdpbmdNb2RlKCk7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1
MCw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZT4gbG9hZFBsYXRmb3Jt
VGhlbWVJY29uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzaXplKTsKICNlbmRpZgogCisgICAgdmly
dHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0KTsKKwogcHJvdGVjdGVkOgogICAgIEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gMCk7CiAK
QEAgLTE2Nyw5ICsxNzAsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIG1heUZpbGxX
aXRoU29saWRDb2xvcigpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBDb2xvciBzb2xp
ZENvbG9yKCkgY29uc3QgeyByZXR1cm4gQ29sb3IoKTsgfQogICAgIAotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7
Ci0KIHByaXZhdGU6CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOyAvLyBUaGUgZW5j
b2RlZCByYXcgZGF0YSBmb3IgdGhlIGltYWdlLiAKICAgICBJbWFnZU9ic2VydmVyKiBtX2ltYWdl
T2JzZXJ2ZXI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCShy
ZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBJbWFnZUJ1ZmZlcl9o
CiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckRhdGEuaCIKQEAgLTczLDE1ICs3NCw1MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkgY29uc3Q7CiAKLSAgICAgICAgSW1hZ2Uq
IGltYWdlKCkgY29uc3Q7Ci0jaWYgUExBVEZPUk0oUVQpCi0gICAgICAgIEltYWdlKiBpbWFnZUZv
clJlbmRlcmluZygpIGNvbnN0OworICAgICAgICBQYXNzUmVmUHRyPEltYWdlPiBjb3BpZWRJbWFn
ZSgpIGNvbnN0OyAvLyBSZXR1cm4gYSBuZXcgaW1hZ2UgdGhhdCBpcyBhIGNvcHkgb2YgdGhlIGJ1
ZmZlci4KKworICAgICAgICB2b2lkIGNsaXAoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JikgY29uc3Q7CisKKyAgICAgICAgLy8gVGhlIGRyYXdpbmcgbWV0aG9kcyBkcmF3IHRoZSBj
b250ZW50cyBvZiB0aGUgYnVmZmVyIHdpdGhvdXQgY29weWluZyBpdC4KKyAgICAgICAgdm9pZCBk
cmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IGNvbnN0IEludFBvaW50JiBwLCBDb21wb3NpdGVPcGVyYXRvciBvcCA9IENvbXBvc2l0ZVNvdXJj
ZU92ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRyYXcoY29udGV4dCwgc3R5bGVDb2xvclNw
YWNlLCBwLCBJbnRSZWN0KDAsIDAsIC0xLCAtMSksIG9wKTsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBjb25zdCBJbnRSZWN0JiByLCBDb21wb3NpdGVPcGVyYXRvciBvcCA9IENvbXBvc2l0
ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2UpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGRyYXcoY29udGV4dCwgc3R5bGVDb2xvclNwYWNlLCByLCBJbnRSZWN0KDAs
IDAsIC0xLCAtMSksIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AgPSBDb21wb3NpdGVTb3VyY2VPdmVyKQor
ICAgICAgICB7CisgICAgICAgICAgICBkcmF3KGNvbnRleHQsIHN0eWxlQ29sb3JTcGFjZSwgSW50
UmVjdChkZXN0UG9pbnQsIHNyY1JlY3Quc2l6ZSgpKSwgc3JjUmVjdCwgb3ApOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wID0gQ29tcG9zaXRlU291cmNl
T3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgZHJhdyhjb250ZXh0LCBzdHlsZUNvbG9yU3BhY2UsIEZsb2F0UmVjdChkZXN0UmVjdCks
IHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOworICAgICAgICB9CisgICAgICAgIAor
I2lmIFBMQVRGT1JNKENHKSB8fCBQTEFURk9STShRVCkKKyAgICAgICAgdm9pZCBkcmF3KEdyYXBo
aWNzQ29udGV4dCosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEs
IC0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgPSBD
b21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKKyAg
ICAgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0KTsKICNlbHNlCi0gICAgICAgIEltYWdlKiBpbWFnZUZvclJlbmRlcmluZygpIGNvbnN0IHsg
cmV0dXJuIGltYWdlKCk7IH0KKyAgICAgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AgPSBDb21wb3NpdGVTb3Vy
Y2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKQorICAgICAgICB7CisgICAg
ICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcGllZEltYWdlKCk7CisgICAgICAg
ICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2VDb3B5LmdldCgpLCBzdHlsZUNvbG9yU3BhY2Us
IGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29waWVkSW1hZ2UoKTsKKyAgICAgICAgICAgIGltYWdlQ29w
eS0+ZHJhd1BhdHRlcm4oY29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICAgICAgfQogI2VuZGlmCiAKLSAg
ICAgICAgdm9pZCBjbGVhckltYWdlKCkgeyBtX2ltYWdlLmNsZWFyKCk7IH0KLQogICAgICAgICBQ
YXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKICAgICAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldFByZW11bHRpcGxp
ZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogCkBAIC0xMDEsNyArMTM5LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIEludFNpemUgbV9zaXplOwogICAgICAgICBP
d25QdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Ci0gICAgICAgIG11dGFibGUgUmVmUHRy
PEltYWdlPiBtX2ltYWdlOwogCiAjaWYgIVBMQVRGT1JNKENHKQogICAgICAgICBWZWN0b3I8aW50
PiBtX2xpbmVhclJnYkxVVDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVy
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNw
cAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUGF0dGVybjo6UGF0dGVybihJbWFnZSogaW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCBy
ZXBlYXRZKQorUGF0dGVybjo6UGF0dGVybihQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSwgYm9vbCBy
ZXBlYXRYLCBib29sIHJlcGVhdFkpCiAgICAgOiBtX3RpbGVJbWFnZShpbWFnZSkKICAgICAsIG1f
cmVwZWF0WChyZXBlYXRYKQogICAgICwgbV9yZXBlYXRZKHJlcGVhdFkpCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2RlZmluZSBQYXR0ZXJuX2gKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1
ZGUgIkltYWdlLmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CkBAIC02NCwxMSArNjUsMTAgQEAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9y
bVBhdHRlcm5QdHI7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9y
bTsKLWNsYXNzIEltYWdlOwogCiBjbGFzcyBQYXR0ZXJuIDogcHVibGljIFJlZkNvdW50ZWQ8UGF0
dGVybj4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhdHRlcm4+IGNyZWF0ZShJ
bWFnZSogdGlsZUltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSkKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxQYXR0ZXJuPiBjcmVhdGUoUGFzc1JlZlB0cjxJbWFnZT4gdGlsZUltYWdlLCBi
b29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUGF0dGVybih0aWxlSW1hZ2UsIHJlcGVhdFgsIHJlcGVhdFkpKTsKICAgICB9CkBAIC05
MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICBib29sIHJlcGVhdFkoKSBjb25zdCB7IHJldHVybiBt
X3JlcGVhdFk7IH0KIAogcHJpdmF0ZToKLSAgICBQYXR0ZXJuKEltYWdlKiwgYm9vbCByZXBlYXRY
LCBib29sIHJlcGVhdFkpOworICAgIFBhdHRlcm4oUGFzc1JlZlB0cjxJbWFnZT4sIGJvb2wgcmVw
ZWF0WCwgYm9vbCByZXBlYXRZKTsKIAogICAgIFJlZlB0cjxJbWFnZT4gbV90aWxlSW1hZ2U7CiAg
ICAgYm9vbCBtX3JlcGVhdFg7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkocmV2aXNpb24gNjUxNjAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTA4LDE0ICs5MDgsNiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjCiAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgc2F2
ZWRGaWxsUnVsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikK
LXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
aGFkb3coRmxvYXRTaXplIGNvbnN0JiBzaXplLCBmbG9hdCwgQ29sb3IgY29uc3QmLCBDb2xvclNw
YWNlKQogewogICAgIC8vIENhaXJvIGRvZXNuJ3Qgc3VwcG9ydCBzaGFkb3dzIG5hdGl2ZWx5LCB0
aGV5IGFyZSBkcmF3biBtYW51YWxseSBpbiB0aGUgZHJhdyoKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkocmV2aXNp
b24gNjUxNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NywyNiArOTcsMTggQEAgR3JhcGhpY3NDb250
ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIAogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7
CiB9CiAKLUltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAorUGFzc1JlZlB0cjxJbWFn
ZT4gSW1hZ2VCdWZmZXI6OmNvcGllZEltYWdlKCkgY29uc3QKIHsKLSAgICBpZiAoIW1faW1hZ2Up
IHsKLSAgICAgICAgLy8gSXQncyBhc3N1bWVkIHRoYXQgaWYgaW1hZ2UoKSBpcyBjYWxsZWQsIHRo
ZSBhY3R1YWwgcmVuZGVyaW5nIHRvIHRoZQotICAgICAgICAvLyBHcmFwaGljc0NvbnRleHQgbXVz
dCBiZSBkb25lLgotICAgICAgICBBU1NFUlQoY29udGV4dCgpKTsKLQotICAgICAgICAvLyBUaGlz
IGNyZWF0ZXMgYSBDT1BZIG9mIHRoZSBpbWFnZSBhbmQgd2lsbCBjYWNoZSB0aGF0IGNvcHkuIFRo
aXMgbWVhbnMKLSAgICAgICAgLy8gdGhhdCBpZiBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgdGFrZSBw
bGFjZSBvbiB0aGUgY29udGV4dCwgbmVpdGhlciB0aGUKLSAgICAgICAgLy8gY3VycmVudGx5LXJl
dHVybmVkIGltYWdlLCBub3IgdGhlIHJlc3VsdHMgb2YgZnV0dXJlIGltYWdlKCkgY2FsbHMsCi0g
ICAgICAgIC8vIHdpbGwgY29udGFpbiB0aGF0IG9wZXJhdGlvbi4KLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gVGhpcyBzZWVtcyBzaWxseSwgYnV0IGlzIHRoZSB3YXkgdGhlIENHIHBvcnQgd29ya3M6
IGltYWdlKCkgaXMKLSAgICAgICAgLy8gaW50ZW5kZWQgdG8gYmUgdXNlZCBvbmx5IHdoZW4gcmVu
ZGVyaW5nIGlzICJjb21wbGV0ZS4iCi0gICAgICAgIGNhaXJvX3N1cmZhY2VfdCogbmV3c3VyZmFj
ZSA9IGNvcHlTdXJmYWNlKG1fZGF0YS5tX3N1cmZhY2UpOworICAgIC8vIEJpdG1hcEltYWdlIHdp
bGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1
cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShjb3B5U3VyZmFjZShtX2RhdGEubV9zdXJmYWNlKSk7Cit9
CiAKLSAgICAgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3Vy
ZmFjZSBvbiBkZXN0cnVjdGlvbgotICAgICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0
ZShuZXdzdXJmYWNlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7Cit2b2lkIElt
YWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JikgY29uc3QKK3sKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIEltYWdlQnVmZmVy
OjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tVcFRh
YmxlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1MywxOCAr
NzUzLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlYwogICAgIENH
Q29udGV4dEVPQ2xpcChjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBU
b0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXIqIGlt
YWdlQnVmZmVyKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdC54
KCksIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSk7Ci0gICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxh
dGZvcm1Db250ZXh0KCksIDEsIC0xKTsKLSAgICBDR0NvbnRleHRDbGlwVG9NYXNrKHBsYXRmb3Jt
Q29udGV4dCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCByZWN0LnNpemUoKSksIGltYWdlQnVm
ZmVyLT5pbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCkpOwotICAgIENHQ29udGV4dFNjYWxlQ1RNKHBs
YXRmb3JtQ29udGV4dCgpLCAxLCAtMSk7Ci0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRm
b3JtQ29udGV4dCgpLCAtcmVjdC54KCksIC1yZWN0LnkoKSAtIHJlY3QuaGVpZ2h0KCkpOwotfQot
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHJldmlzaW9uIDY1MTYwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsMTAgKzU2LDEwIEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25z
dCBJbnRTaXplJiAKICAgICAsIG1fc2l6ZShzaXplKQogewogICAgIHN1Y2Nlc3MgPSBmYWxzZTsg
IC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZmFpbHVyZS4KLSAgICB1bnNpZ25lZCBieXRlc1Bl
clJvdzsKICAgICBpZiAoc2l6ZS53aWR0aCgpIDwgMCB8fCBzaXplLmhlaWdodCgpIDwgMCkKICAg
ICAgICAgcmV0dXJuOwotICAgIGJ5dGVzUGVyUm93ID0gc2l6ZS53aWR0aCgpOworCisgICAgdW5z
aWduZWQgYnl0ZXNQZXJSb3cgPSBzaXplLndpZHRoKCk7CiAgICAgaWYgKGltYWdlQ29sb3JTcGFj
ZSAhPSBHcmF5U2NhbGUpIHsKICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IG92ZXJmbG93CiAg
ICAgICAgIGlmIChieXRlc1BlclJvdyA+IDB4M0ZGRkZGRkYpCkBAIC02Nyw2ICs2Nyw3IEBAIElt
YWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiAKICAgICAgICAgYnl0ZXNQZXJS
b3cgKj0gNDsKICAgICB9CiAKKyAgICBzaXplX3QgZGF0YVNpemUgPSBzaXplLmhlaWdodCgpICog
Ynl0ZXNQZXJSb3c7CiAgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKHNpemUuaGVpZ2h0KCksIGJ5dGVz
UGVyUm93KS5nZXRWYWx1ZShtX2RhdGEubV9kYXRhKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC04
NCwxNCArODUsMTYgQEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIAog
ICAgICAgICBjYXNlIExpbmVhclJHQjoKICAgICAgICAgICAgIGNvbG9yU3BhY2UuYWRvcHRDRihD
R0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlR2VuZXJpY1JHQkxpbmVhcikp
OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICNlbmRpZgogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgY29sb3JTcGFjZS5hZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURl
dmljZVJHQigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIENHQml0bWFwSW5m
byBiaXRtYXBJbmZvID0gKGltYWdlQ29sb3JTcGFjZSA9PSBHcmF5U2NhbGUpID8ga0NHSW1hZ2VB
bHBoYU5vbmUgOiBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7CiAgICAgUmV0YWluUHRy
PENHQ29udGV4dFJlZj4gY2dDb250ZXh0KEFkb3B0Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZSht
X2RhdGEubV9kYXRhLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDgsIGJ5dGVzUGVyUm93
LAotICAgICAgICBjb2xvclNwYWNlLmdldCgpLCAoaW1hZ2VDb2xvclNwYWNlID09IEdyYXlTY2Fs
ZSkgPyBrQ0dJbWFnZUFscGhhTm9uZSA6IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29sb3JTcGFjZS5nZXQoKSwgYml0bWFwSW5mbykpOwogICAgIGlmICgh
Y2dDb250ZXh0KQogICAgICAgICByZXR1cm47CiAKQEAgLTk5LDYgKzEwMiwxMiBAQCBJbWFnZUJ1
ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgCiAgICAgbV9jb250ZXh0LT5zY2FsZShG
bG9hdFNpemUoMSwgLTEpKTsKICAgICBtX2NvbnRleHQtPnRyYW5zbGF0ZSgwLCAtc2l6ZS5oZWln
aHQoKSk7CiAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgCisgICAgLy8gQ3JlYXRlIGEgbGl2ZSBp
bWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRhLgorICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJl
Zj4gZGF0YVByb3ZpZGVyKEFkb3B0Q0YsIENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwg
bV9kYXRhLm1fZGF0YSwgZGF0YVNpemUsIDApKTsKKyAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBD
R0ltYWdlQ3JlYXRlKG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDgsIGltYWdlQ29s
b3JTcGFjZSAhPSBHcmF5U2NhbGUgPyAzMiA6IDgsIGJ5dGVzUGVyUm93LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZS5nZXQoKSwgYml0bWFwSW5mbywg
ZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsK
KyAgICBtX2RhdGEubV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoY2dJbWFnZSk7CiB9CiAK
IEltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKQpAQCAtMTExLDE3ICsxMjAsMzUgQEAgR3JhcGhp
Y3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIAogICAgIHJldHVybiBtX2NvbnRleHQu
Z2V0KCk7CiB9CiAKLUltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAorUGFzc1JlZlB0
cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcGllZEltYWdlKCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
aW1hZ2UpIHsKLSAgICAgICAgLy8gSXQncyBhc3N1bWVkIHRoYXQgaWYgaW1hZ2UoKSBpcyBjYWxs
ZWQsIHRoZSBhY3R1YWwgcmVuZGVyaW5nIHRvIHRoZQotICAgICAgICAvLyBHcmFwaGljc0NvbnRl
eHQgbXVzdCBiZSBkb25lLgotICAgICAgICBBU1NFUlQoY29udGV4dCgpKTsKLSAgICAgICAgQ0dJ
bWFnZVJlZiBjZ0ltYWdlID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLT5w
bGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0
aGUgcGFzc2VkIGluIENHSW1hZ2Ugb24gZGVzdHJ1Y3Rpb24KLSAgICAgICAgbV9pbWFnZSA9IEJp
dG1hcEltYWdlOjpjcmVhdGUoY2dJbWFnZSk7Ci0gICAgfQotICAgIHJldHVybiBtX2ltYWdlLmdl
dCgpOworICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIENHSW1h
Z2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShDR0JpdG1h
cENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKSk7Cit9CisK
K3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRv
ciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCit7CisgICAgY29udGV4dC0+ZHJhd0ltYWdl
KG1fZGF0YS5tX2ltYWdlLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QpCit7CisgICAgbV9kYXRhLm1faW1hZ2UtPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7
Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgaWYgKGNvbnRleHQtPnBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0UmVmIHBsYXRmb3Jt
Q29udGV4dCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIENHQ29udGV4dFRyYW5z
bGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQsIHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0
KCkpOworICAgIENHQ29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCwgMSwgLTEpOworICAg
IENHQ29udGV4dENsaXBUb01hc2socGxhdGZvcm1Db250ZXh0LCBGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCByZWN0LnNpemUoKSksIG1fZGF0YS5tX2ltYWdlLT5nZXRDR0ltYWdlUmVmKCkpOworICAg
IENHQ29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCwgMSwgLTEpOworICAgIENHQ29udGV4
dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQsIC1yZWN0LngoKSwgLXJlY3QueSgpIC0gcmVj
dC5oZWlnaHQoKSk7CiB9CiAKIHRlbXBsYXRlIDxNdWx0aXBseSBtdWx0aXBsaWVkPgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YS5oCShyZXZp
c2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDkgQEAKICNpZm5kZWYgSW1hZ2VCdWZm
ZXJEYXRhX2gKICNkZWZpbmUgSW1hZ2VCdWZmZXJEYXRhX2gKIAorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKyNpbmNsdWRlICJJbWFnZS5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEludFNpemU7CkBAIC0zNSw2ICszOCw3IEBAIHB1YmxpYzoKICAgICBJbWFnZUJ1ZmZlckRhdGEo
Y29uc3QgSW50U2l6ZSYpOwogCiAgICAgdm9pZCogbV9kYXRhOworICAgIFJlZlB0cjxJbWFnZT4g
bV9pbWFnZTsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCShyZXZp
c2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgRkVDb2xv
ck1hdHJpeDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIKICAgICBpZiAoIWZpbHRlckNvbnRleHQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1
bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVj
dChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOworICAgIG1faW4tPnJlc3VsdEltYWdlKCktPmRy
YXcoZmlsdGVyQ29udGV4dCwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3Qo
bV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBv
aW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7CiAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+
IGltYWdlRGF0YShyZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VS
ZWN0KSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3Np
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvc2l0ZS5jcHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDI2ICsx
MzEsMjYgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAgICAgRmxv
YXRSZWN0IHNyY1JlY3QgPSBGbG9hdFJlY3QoMC5mLCAwLmYsIC0xLmYsIC0xLmYpOwogICAgIHN3
aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgotICAg
ICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdl
KCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRT
dWJSZWdpb24oKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVz
dWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1Jl
Y3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAgICAgICAgbV9pbjItPnJlc3VsdEltYWdl
KCktPmRyYXcoZmlsdGVyQ29udGV4dCwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2lu
Z1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigpKSk7CisgICAgICAgIG1faW4tPnJlc3VsdElt
YWdlKCktPmRyYXcoZmlsdGVyQ29udGV4dCwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJh
d2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoKICAgICAgICAgZmlsdGVyQ29udGV4dC0+c2F2
ZSgpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihjYWxjdWxhdGVE
cmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9uKCkpLCBtX2luMi0+cmVzdWx0SW1hZ2Uo
KSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgp
LT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5z
Y2FsZWRTdWJSZWdpb24oKSkpOworICAgICAgICBtX2luMi0+cmVzdWx0SW1hZ2UoKS0+Y2xpcChm
aWx0ZXJDb250ZXh0LCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9u
KCkpKTsKKyAgICAgICAgbV9pbi0+cmVzdWx0SW1hZ2UoKS0+ZHJhdyhmaWx0ZXJDb250ZXh0LCBE
ZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdp
b24oKSkpOwogICAgICAgICBmaWx0ZXJDb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgotICAgICAgICBmaWx0ZXJDb250
ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JT
cGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKLSAg
ICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5pbWFn
ZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVk
U3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVEZXN0aW5hdGlvbk91dCk7CisgICAgICAg
IG1faW4tPnJlc3VsdEltYWdlKCktPmRyYXcoZmlsdGVyQ29udGV4dCwgRGV2aWNlQ29sb3JTcGFj
ZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAgICAg
ICAgbV9pbjItPnJlc3VsdEltYWdlKCktPmRyYXcoZmlsdGVyQ29udGV4dCwgRGV2aWNlQ29sb3JT
cGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigpKSwgc3Jj
UmVjdCwgQ29tcG9zaXRlRGVzdGluYXRpb25PdXQpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJ
bWFnZShtX2luMi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2Fs
Y3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigpKSk7Ci0gICAgICAgIGZp
bHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZp
Y2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24o
KSksIHNyY1JlY3QsIENvbXBvc2l0ZVNvdXJjZUF0b3ApOworICAgICAgICBtX2luMi0+cmVzdWx0
SW1hZ2UoKS0+ZHJhdyhmaWx0ZXJDb250ZXh0LCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVE
cmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAgICAgICAgbV9pbi0+cmVz
dWx0SW1hZ2UoKS0+ZHJhdyhmaWx0ZXJDb250ZXh0LCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxh
dGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0
ZVNvdXJjZUF0b3ApOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX1hPUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4yLT5yZXN1bHRJ
bWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdCht
X2luMi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0lt
YWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1
bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKSwgc3JjUmVjdCwgQ29tcG9z
aXRlWE9SKTsKKyAgICAgICAgbV9pbjItPnJlc3VsdEltYWdlKCktPmRyYXcoZmlsdGVyQ29udGV4
dCwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1
YlJlZ2lvbigpKSk7CisgICAgICAgIG1faW4tPnJlc3VsdEltYWdlKCktPmRyYXcoZmlsdGVyQ29u
dGV4dCwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVk
U3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVYT1IpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6IHsKICAgICAgICAgSW50UmVj
dCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChtX2luLT5zY2Fs
ZWRTdWJSZWdpb24oKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlQWxwaGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjMsOSArNjMsOSBAQCB2b2lkIFNvdXJjZUFscGhhOjphcHBseShGaWx0ZXIqIGZpbHRlcikKIAog
ICAgIHNldElzQWxwaGFJbWFnZSh0cnVlKTsKIAotICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxv
YXRQb2ludCgpLCBmaWx0ZXItPnNvdXJjZUltYWdlKCktPmltYWdlKCktPnNpemUoKSk7CisgICAg
RmxvYXRSZWN0IGltYWdlUmVjdChGbG9hdFBvaW50KCksIGZpbHRlci0+c291cmNlSW1hZ2UoKS0+
c2l6ZSgpKTsKICAgICBmaWx0ZXJDb250ZXh0LT5zYXZlKCk7Ci0gICAgZmlsdGVyQ29udGV4dC0+
Y2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VSZWN0LCBmaWx0ZXItPnNvdXJjZUltYWdlKCkpOworICAg
IGZpbHRlci0+c291cmNlSW1hZ2UoKS0+Y2xpcChmaWx0ZXJDb250ZXh0LCBpbWFnZVJlY3QpOwog
ICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KGltYWdlUmVjdCwgQ29sb3I6OmJsYWNrLCBEZXZp
Y2VDb2xvclNwYWNlKTsKICAgICBmaWx0ZXJDb250ZXh0LT5yZXN0b3JlKCk7CiB9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMu
Y3BwCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VHcmFwaGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCB2b2lk
IFNvdXJjZUdyYXBoaWM6OmFwcGx5KEZpbHRlciogZmlsdGVyCiAgICAgaWYgKCFmaWx0ZXJDb250
ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UoZmls
dGVyLT5zb3VyY2VJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBJbnRQb2ludCgp
KTsKKyAgICBmaWx0ZXItPnNvdXJjZUltYWdlKCktPmRyYXcoZmlsdGVyQ29udGV4dCwgRGV2aWNl
Q29sb3JTcGFjZSwgSW50UG9pbnQoKSk7CiB9CiAKIHZvaWQgU291cmNlR3JhcGhpYzo6ZHVtcCgp
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dFF0LmNwcAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBA
QAogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiUGVu
LmgiCisjaW5jbHVkZSAiVHJhbnNwYXJlbmN5TGF5ZXIuaCIKIAogI2luY2x1ZGUgPFFCcnVzaD4K
ICNpbmNsdWRlIDxRRGVidWc+CkBAIC0xNjYsNDggKzE2Nyw2IEBAIHN0YXRpYyBpbmxpbmUgUXQ6
OkZpbGxSdWxlIHRvUXRGaWxsUnVsZSgKICAgICByZXR1cm4gUXQ6Ok9kZEV2ZW5GaWxsOwogfQog
Ci1zdHJ1Y3QgVHJhbnNwYXJlbmN5TGF5ZXIgOiBGYXN0QWxsb2NCYXNlIHsKLSAgICBUcmFuc3Bh
cmVuY3lMYXllcihjb25zdCBRUGFpbnRlciogcCwgY29uc3QgUVJlY3QgJnJlY3QsIHFyZWFsIG9w
YWNpdHksIFFQaXhtYXAmIGFscGhhTWFzaykKLSAgICAgICAgOiBwaXhtYXAocmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKQotICAgICAgICAsIG9wYWNpdHkob3BhY2l0eSkKLSAgICAgICAgLCBh
bHBoYU1hc2soYWxwaGFNYXNrKQotICAgICAgICAsIHNhdmVDb3VudGVyKDEpIC8vIHNlZSB0aGUg
Y29tbWVudCBmb3Igc2F2ZUNvdW50ZXIKLSAgICB7Ci0gICAgICAgIG9mZnNldCA9IHJlY3QudG9w
TGVmdCgpOwotICAgICAgICBwaXhtYXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwotICAgICAgICBw
YWludGVyLmJlZ2luKCZwaXhtYXApOwotICAgICAgICBwYWludGVyLnNldFJlbmRlckhpbnQoUVBh
aW50ZXI6OkFudGlhbGlhc2luZywgcC0+dGVzdFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlh
c2luZykpOwotICAgICAgICBwYWludGVyLnRyYW5zbGF0ZSgtb2Zmc2V0KTsKLSAgICAgICAgcGFp
bnRlci5zZXRQZW4ocC0+cGVuKCkpOwotICAgICAgICBwYWludGVyLnNldEJydXNoKHAtPmJydXNo
KCkpOwotICAgICAgICBwYWludGVyLnNldFRyYW5zZm9ybShwLT50cmFuc2Zvcm0oKSwgdHJ1ZSk7
Ci0gICAgICAgIHBhaW50ZXIuc2V0T3BhY2l0eShwLT5vcGFjaXR5KCkpOwotICAgICAgICBwYWlu
dGVyLnNldEZvbnQocC0+Zm9udCgpKTsKLSAgICAgICAgaWYgKHBhaW50ZXIucGFpbnRFbmdpbmUo
KS0+aGFzRmVhdHVyZShRUGFpbnRFbmdpbmU6OlBvcnRlckR1ZmYpKQotICAgICAgICAgICAgcGFp
bnRlci5zZXRDb21wb3NpdGlvbk1vZGUocC0+Y29tcG9zaXRpb25Nb2RlKCkpOwotICAgICAgICAv
LyBpZiB0aGUgcGF0aCBpcyBhbiBlbXB0eSByZWdpb24sIHRoaXMgYXNzaWdubWVudCBkaXNhYmxl
cyBhbGwgcGFpbnRpbmcKLSAgICAgICAgaWYgKCFwLT5jbGlwUGF0aCgpLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHBhaW50ZXIuc2V0Q2xpcFBhdGgocC0+Y2xpcFBhdGgoKSk7Ci0gICAgfQotCi0g
ICAgVHJhbnNwYXJlbmN5TGF5ZXIoKQotICAgIHsKLSAgICB9Ci0KLSAgICBRUGl4bWFwIHBpeG1h
cDsKLSAgICBRUG9pbnQgb2Zmc2V0OwotICAgIFFQYWludGVyIHBhaW50ZXI7Ci0gICAgcXJlYWwg
b3BhY2l0eTsKLSAgICAvLyBmb3IgY2xpcFRvSW1hZ2VCdWZmZXIKLSAgICBRUGl4bWFwIGFscGhh
TWFzazsKLSAgICAvLyBzYXZlQ291bnRlciBpcyBvbmx5IHVzZWQgaW4gY29tYmluYXRpb24gd2l0
aCBhbHBoYU1hc2sKLSAgICAvLyBvdGhlcndpc2UsIGl0cyB2YWx1ZSBpcyB1bnNwZWNpZmllZAot
ICAgIGludCBzYXZlQ291bnRlcjsKLXByaXZhdGU6Ci0gICAgVHJhbnNwYXJlbmN5TGF5ZXIoY29u
c3QgVHJhbnNwYXJlbmN5TGF5ZXIgJikge30KLSAgICBUcmFuc3BhcmVuY3lMYXllciAmIG9wZXJh
dG9yPShjb25zdCBUcmFuc3BhcmVuY3lMYXllciAmKSB7IHJldHVybiAqdGhpczsgfQotfTsKLQog
Y2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlIDogcHVibGljIE5vbmNvcHlhYmxl
IHsKIHB1YmxpYzoKICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoUVBhaW50ZXIq
IHBhaW50ZXIpOwpAQCAtMTIyNiwyMyArMTE4NSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwT3V0RWxsaXBzZUluUmUKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
VG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIGZsb2F0UmVjdCwgY29uc3QgSW1hZ2VCdWZm
ZXIqIGltYWdlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFFQaXhtYXAqIG5hdGl2ZUltYWdlID0gaW1hZ2UtPmltYWdlKCktPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgSW50UmVjdCByZWN0KGZsb2F0UmVjdCk7Ci0gICAgUVBpeG1hcCBhbHBoYU1h
c2sgPSAqbmF0aXZlSW1hZ2U7Ci0gICAgaWYgKGFscGhhTWFzay53aWR0aCgpICE9IHJlY3Qud2lk
dGgoKSB8fCBhbHBoYU1hc2suaGVpZ2h0KCkgIT0gcmVjdC5oZWlnaHQoKSkKLSAgICAgICAgYWxw
aGFNYXNrID0gYWxwaGFNYXNrLnNjYWxlZChyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwot
Ci0gICAgbV9kYXRhLT5sYXllcnMucHVzaChuZXcgVHJhbnNwYXJlbmN5TGF5ZXIobV9kYXRhLT5w
KCksIG1fZGF0YS0+cCgpLT50cmFuc2Zvcm0oKS5tYXBSZWN0KHJlY3QpLCAxLjAsIGFscGhhTWFz
aykpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAo
Y29uc3QgSW50UmVjdCYgcmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgdGhpY2tuZXNzKQogewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9JbWFnZUJ1ZmZlckRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyRGF0YS5oCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJEYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDkgQEAKICNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhX2gKICNkZWZpbmUgSW1h
Z2VCdWZmZXJEYXRhX2gKIAorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJJbWFn
ZS5oIgorCiAjaW5jbHVkZSA8UVBhaW50ZXI+CiAjaW5jbHVkZSA8UVBpeG1hcD4KIApAQCAtNDEs
NiArNDQsNyBAQCBwdWJsaWM6CiAKICAgICBRUGl4bWFwIG1fcGl4bWFwOwogICAgIE93blB0cjxR
UGFpbnRlcj4gbV9wYWludGVyOworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKIH07CiAKIH0g
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0ltYWdlQnVmZmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVn
aXN0cnkuaCIKICNpbmNsdWRlICJTdGlsbEltYWdlUXQuaCIKKyNpbmNsdWRlICJUcmFuc3BhcmVu
Y3lMYXllci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2luY2x1ZGUgPFFC
dWZmZXI+CkBAIC03NCw2ICs3NSw4IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRh
KGNvbnN0IEkKICAgICBicnVzaC5zZXRDb2xvcihRdDo6YmxhY2spOwogICAgIHBhaW50ZXItPnNl
dEJydXNoKGJydXNoKTsKICAgICBwYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6
OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VPdmVyKTsKKyAgICAKKyAgICBtX2RhdGEubV9pbWFnZSA9
IFN0aWxsSW1hZ2U6OmNyZWF0ZUZvclJlbmRlcmluZygmbV9kYXRhLm1fcGl4bWFwKTsKIH0KIAog
SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIEltYWdlQ29sb3JT
cGFjZSwgYm9vbCYgc3VjY2VzcykKQEAgLTk4LDI0ICsxMDEsMzggQEAgR3JhcGhpY3NDb250ZXh0
KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIAogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9
CiAKLUltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2VGb3JSZW5kZXJpbmcoKSBjb25zdAorUGFzc1Jl
ZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcGllZEltYWdlKCkgY29uc3QKIHsKLSAgICBpZiAo
IW1faW1hZ2UpCi0gICAgICAgIG1faW1hZ2UgPSBTdGlsbEltYWdlOjpjcmVhdGVGb3JSZW5kZXJp
bmcoJm1fZGF0YS5tX3BpeG1hcCk7CisgICAgcmV0dXJuIFN0aWxsSW1hZ2U6OmNyZWF0ZShtX2Rh
dGEubV9waXhtYXApOworfQogCi0gICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7Cit2b2lkIEltYWdl
QnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wg
dXNlTG93UXVhbGl0eVNjYWxlKQoreworICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2RhdGEubV9p
bWFnZS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxv
d1F1YWxpdHlTY2FsZSk7CiB9CiAKLUltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAor
dm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKCFtX2ltYWdlKSB7Ci0gICAg
ICAgIC8vIEl0J3MgYXNzdW1lZCB0aGF0IGlmIGltYWdlKCkgaXMgY2FsbGVkLCB0aGUgYWN0dWFs
IHJlbmRlcmluZyB0byB0aGUKLSAgICAgICAgLy8gR3JhcGhpY3NDb250ZXh0IG11c3QgYmUgZG9u
ZS4KLSAgICAgICAgQVNTRVJUKGNvbnRleHQoKSk7Ci0gICAgICAgIG1faW1hZ2UgPSBTdGlsbElt
YWdlOjpjcmVhdGUobV9kYXRhLm1fcGl4bWFwKTsKLSAgICB9CisgICAgbV9kYXRhLm1faW1hZ2Ut
PmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
dHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNs
aXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGZsb2F0UmVjdCkK
K3sKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBRUGl4bWFwKiBuYXRpdmVJbWFnZSA9IG1fZGF0YS5tX2ltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghbmF0aXZlSW1hZ2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIEludFJlY3QgcmVjdChmbG9hdFJlY3QpOworICAgIFFQaXhtYXAgYWxwaGFNYXNr
ID0gKm5hdGl2ZUltYWdlOworICAgIGlmIChhbHBoYU1hc2sud2lkdGgoKSAhPSByZWN0LndpZHRo
KCkgfHwgYWxwaGFNYXNrLmhlaWdodCgpICE9IHJlY3QuaGVpZ2h0KCkpCisgICAgICAgIGFscGhh
TWFzayA9IGFscGhhTWFzay5zY2FsZWQocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIAot
ICAgIHJldHVybiBtX2ltYWdlLmdldCgpOworICAgIG1fZGF0YS0+bGF5ZXJzLnB1c2gobmV3IFRy
YW5zcGFyZW5jeUxheWVyKG1fZGF0YS0+cCgpLCBtX2RhdGEtPnAoKS0+dHJhbnNmb3JtKCkubWFw
UmVjdChyZWN0KSwgMS4wLCBhbHBoYU1hc2spKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6cGxh
dGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+JiBsb29rVXBUYWJsZSkK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNwYXJlbmN5TGF5ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zcGFyZW5jeUxh
eWVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5z
cGFyZW5jeUxheWVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIDxzYW5kZmVsZEBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
RGlyayBTY2h1bHplIDx2YnM4NUBnbXguZGU+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFRyYW5zcGFyZW5jeUxheWVyX2gKKyNkZWZpbmUgVHJhbnNwYXJlbmN5
TGF5ZXJfaAorCisjaW5jbHVkZSA8UUJydXNoPgorI2luY2x1ZGUgPFFEZWJ1Zz4KKyNpbmNsdWRl
IDxRR3JhZGllbnQ+CisjaW5jbHVkZSA8UVBhaW50RGV2aWNlPgorI2luY2x1ZGUgPFFQYWludEVu
Z2luZT4KKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRUGFpbnRlclBhdGg+CisjaW5j
bHVkZSA8UVBpeG1hcD4KKyNpbmNsdWRlIDxRUG9seWdvbkY+CisjaW5jbHVkZSA8UVN0YWNrPgor
I2luY2x1ZGUgPFFWZWN0b3I+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFRyYW5z
cGFyZW5jeUxheWVyIDogRmFzdEFsbG9jQmFzZSB7CisgICAgVHJhbnNwYXJlbmN5TGF5ZXIoY29u
c3QgUVBhaW50ZXIqIHAsIGNvbnN0IFFSZWN0ICZyZWN0LCBxcmVhbCBvcGFjaXR5LCBRUGl4bWFw
JiBhbHBoYU1hc2spCisgICAgICAgIDogcGl4bWFwKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSkKKyAgICAgICAgLCBvcGFjaXR5KG9wYWNpdHkpCisgICAgICAgICwgYWxwaGFNYXNrKGFscGhh
TWFzaykKKyAgICAgICAgLCBzYXZlQ291bnRlcigxKSAvLyBzZWUgdGhlIGNvbW1lbnQgZm9yIHNh
dmVDb3VudGVyCisgICAgeworICAgICAgICBvZmZzZXQgPSByZWN0LnRvcExlZnQoKTsKKyAgICAg
ICAgcGl4bWFwLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgcGFpbnRlci5iZWdpbigm
cGl4bWFwKTsKKyAgICAgICAgcGFpbnRlci5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxp
YXNpbmcsIHAtPnRlc3RSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcpKTsKKyAgICAg
ICAgcGFpbnRlci50cmFuc2xhdGUoLW9mZnNldCk7CisgICAgICAgIHBhaW50ZXIuc2V0UGVuKHAt
PnBlbigpKTsKKyAgICAgICAgcGFpbnRlci5zZXRCcnVzaChwLT5icnVzaCgpKTsKKyAgICAgICAg
cGFpbnRlci5zZXRUcmFuc2Zvcm0ocC0+dHJhbnNmb3JtKCksIHRydWUpOworICAgICAgICBwYWlu
dGVyLnNldE9wYWNpdHkocC0+b3BhY2l0eSgpKTsKKyAgICAgICAgcGFpbnRlci5zZXRGb250KHAt
PmZvbnQoKSk7CisgICAgICAgIGlmIChwYWludGVyLnBhaW50RW5naW5lKCktPmhhc0ZlYXR1cmUo
UVBhaW50RW5naW5lOjpQb3J0ZXJEdWZmKSkKKyAgICAgICAgICAgIHBhaW50ZXIuc2V0Q29tcG9z
aXRpb25Nb2RlKHAtPmNvbXBvc2l0aW9uTW9kZSgpKTsKKyAgICAgICAgLy8gaWYgdGhlIHBhdGgg
aXMgYW4gZW1wdHkgcmVnaW9uLCB0aGlzIGFzc2lnbm1lbnQgZGlzYWJsZXMgYWxsIHBhaW50aW5n
CisgICAgICAgIGlmICghcC0+Y2xpcFBhdGgoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBwYWlu
dGVyLnNldENsaXBQYXRoKHAtPmNsaXBQYXRoKCkpOworICAgIH0KKworICAgIFRyYW5zcGFyZW5j
eUxheWVyKCkKKyAgICB7CisgICAgfQorCisgICAgUVBpeG1hcCBwaXhtYXA7CisgICAgUVBvaW50
IG9mZnNldDsKKyAgICBRUGFpbnRlciBwYWludGVyOworICAgIHFyZWFsIG9wYWNpdHk7CisgICAg
Ly8gZm9yIGNsaXBUb0ltYWdlQnVmZmVyCisgICAgUVBpeG1hcCBhbHBoYU1hc2s7CisgICAgLy8g
c2F2ZUNvdW50ZXIgaXMgb25seSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYWxwaGFNYXNrCisg
ICAgLy8gb3RoZXJ3aXNlLCBpdHMgdmFsdWUgaXMgdW5zcGVjaWZpZWQKKyAgICBpbnQgc2F2ZUNv
dW50ZXI7Citwcml2YXRlOgorICAgIFRyYW5zcGFyZW5jeUxheWVyKGNvbnN0IFRyYW5zcGFyZW5j
eUxheWVyICYpIHt9CisgICAgVHJhbnNwYXJlbmN5TGF5ZXIgJiBvcGVyYXRvcj0oY29uc3QgVHJh
bnNwYXJlbmN5TGF5ZXIgJikgeyByZXR1cm4gKnRoaXM7IH0KK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFRyYW5zcGFyZW5jeUxheWVyX2gKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5j
cHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dy
YXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTUsMTcgKzQ1NSw2IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChXaW5kUnVsZSAKICAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+Y2xpcFBhdGhBbnRpQWxpYXNlZChwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbWFnZUJ1ZmZlciogaW1hZ2VC
dWZmZXIpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0jaWYgT1MoTElOVVgpIHx8IE9TKFdJTkRPV1MpCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPmJl
Z2luTGF5ZXJDbGlwcGVkVG9JbWFnZShyZWN0LCBpbWFnZUJ1ZmZlcik7Ci0jZW5kaWYKLX0KLQog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFm
ZmluZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9u
IDY1MTYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tp
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDIwICs4NywxOSBAQCBHcmFwaGljc0NvbnRleHQq
IEltYWdlQnVmZmVyOjpjb250ZXh0KCkgCiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0K
IAotSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZSgpIGNvbnN0CitQYXNzUmVmUHRyPEltYWdlPiBJ
bWFnZUJ1ZmZlcjo6Y29waWVkSW1hZ2UoKSBjb25zdAogewotICAgIGlmICghbV9pbWFnZSkgewot
ICAgICAgICAvLyBUaGlzIGNyZWF0ZXMgYSBDT1BZIG9mIHRoZSBpbWFnZSBhbmQgd2lsbCBjYWNo
ZSB0aGF0IGNvcHkuIFRoaXMgbWVhbnMKLSAgICAgICAgLy8gdGhhdCBpZiBzdWJzZXF1ZW50IG9w
ZXJhdGlvbnMgdGFrZSBwbGFjZSBvbiB0aGUgY29udGV4dCwgbmVpdGhlciB0aGUKLSAgICAgICAg
Ly8gY3VycmVudGx5LXJldHVybmVkIGltYWdlLCBub3IgdGhlIHJlc3VsdHMgb2YgZnV0dXJlIGlt
YWdlKCkgY2FsbHMsCi0gICAgICAgIC8vIHdpbGwgY29udGFpbiB0aGF0IG9wZXJhdGlvbi4KLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gVGhpcyBzZWVtcyBzaWxseSwgYnV0IGlzIHRoZSB3YXkgdGhl
IENHIHBvcnQgd29ya3M6IGltYWdlKCkgaXMKLSAgICAgICAgLy8gaW50ZW5kZWQgdG8gYmUgdXNl
ZCBvbmx5IHdoZW4gcmVuZGVyaW5nIGlzICJjb21wbGV0ZS4iCi0gICAgICAgIG1faW1hZ2UgPSBC
aXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKAotICAgICAgICAgICAgKm1fZGF0YS5t
X3BsYXRmb3JtQ29udGV4dC5iaXRtYXAoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX2ltYWdlLmdl
dCgpOworICAgIHJldHVybiBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKCptX2Rh
dGEubV9wbGF0Zm9ybUNvbnRleHQuYml0bWFwKCkpOworfQorCit2b2lkIEltYWdlQnVmZmVyOjpj
bGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25z
dAoreworICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworI2lmIE9TKExJTlVYKSB8fCBPUyhXSU5ET1dTKQorICAgIGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5iZWdpbkxheWVyQ2xpcHBlZFRvSW1hZ2UocmVjdCwgdGhpcyk7CisjZW5kaWYK
IH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0
IFZlY3RvcjxpbnQ+JiBsb29rVXBUYWJsZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCShyZXZpc2lvbiA2NTE2MCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNzgsMTEgKzM3OCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52
YXNDbGlwKGNvbnN0IFAKICAgICBjbGlwKHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VCdWZmZXIq
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIEFmZmluZVRyYW5zZm9ybSBHcmFwaGlj
c0NvbnRleHQ6OmdldENUTSgpIGNvbnN0CiB7IAogI2lmIFVTRShXWEdDKQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCShyZXZpc2lvbiA2
NTE2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgyLDEyICs4MiwxNyBAQCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRv
RGF0YVVSTChjb25zdCBTdHJpCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1JbWFnZSogSW1h
Z2VCdWZmZXI6OmltYWdlKCkgY29uc3QKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpj
b3BpZWRJbWFnZSgpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4g
MDsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFJlY3QmKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIHZvaWQgSW1h
Z2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBWZWN0b3I8aW50PiYp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1Nj
cm9sbGJhclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1Nj
cm9sbGJhclRoZW1lTWFjLm1tCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
bWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsNyArMzk2LDcg
QEAgYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnQoU2Nyb2xsYmFyKgogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgICAgICBISVRoZW1lRHJhd1RyYWNrKCZ0cmFja0lu
Zm8sIDAsIGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLCBrSElUaGVt
ZU9yaWVudGF0aW9uTm9ybWFsKTsKLSAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlQnVm
ZmVyLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBzY3JvbGxiYXItPmZyYW1lUmVjdCgpLmxv
Y2F0aW9uKCkpOworICAgICAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhjb250ZXh0LCBEZXZpY2VDb2xv
clNwYWNlLCBzY3JvbGxiYXItPmZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpOwogICAgIH0KIAogICAg
IHJldHVybiB0cnVlOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMSw3ICs1MzEsNyBAQCB2b2lkIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllCiAgICAgICAgIAogICAgICAgICAvLyBU
aGUgbWFzayBoYXMgYmVlbiBjcmVhdGVkLiAgTm93IHdlIGp1c3QgbmVlZCB0byBjbGlwIHRvIGl0
LgogICAgICAgICBjb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQtPmNsaXBUb0ltYWdl
QnVmZmVyKG1hc2tSZWN0LCBtYXNrSW1hZ2UuZ2V0KCkpOworICAgICAgICBtYXNrSW1hZ2UtPmNs
aXAoY29udGV4dCwgbWFza1JlY3QpOwogICAgIH0KICAgICAKICAgICBTdHlsZUltYWdlKiBiZyA9
IGJnTGF5ZXItPmltYWdlKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5jcHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDcg
KzE3NCw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXAKICAgICBp
ZiAoIWNsaXBwZXJEYXRhLT5jbGlwTWFza0ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBjb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgY2xpcHBlckRhdGEt
PmNsaXBNYXNrSW1hZ2UuZ2V0KCkpOworICAgIGNsaXBwZXJEYXRhLT5jbGlwTWFza0ltYWdlLT5j
bGlwKGNvbnRleHQsIHJlcGFpbnRSZWN0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAkocmV2aXNp
b24gNjUxNjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwb3N0QXBwbHlSCiAjaWYgIVBMQVRGT1JNKENHKQogICAgICAgICAgICAgcmVz
dWx0SW1hZ2UtPnRyYW5zZm9ybUNvbG9yU3BhY2UoTGluZWFyUkdCLCBEZXZpY2VSR0IpOwogI2Vu
ZGlmCi0gICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UocmVzdWx0SW1hZ2UtPmltYWdlKCks
IG9iamVjdC0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBsYXN0RWZmZWN0LT5zdWJSZWdpb24oKSk7
CisgICAgICAgICAgICByZXN1bHRJbWFnZS0+ZHJhdyhjb250ZXh0LCBvYmplY3QtPnN0eWxlKCkt
PmNvbG9yU3BhY2UoKSwgbGFzdEVmZmVjdC0+c3ViUmVnaW9uKCkpOwogICAgICAgICB9CiAgICAg
fQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRp
ZW50LmNwcAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZUdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHN0
YXRpYyBpbmxpbmUgQWZmaW5lVHJhbnNmb3JtIGNsaXBUb1RleHQKICAgICAvLyBTbyB0aGUgYWN0
dWFsIG1hc2tpbmcgcHJvY2VzcyBoYXMgdG8gYmUgZG9uZSBpbiB0aGUgZGV2aWNlIGNvb3JkaW5h
dGUgc3BhY2UgYXMgd2VsbC4KICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtKGFic29sdXRl
VHJhbnNmb3JtRnJvbUNvbnRleHQoY29udGV4dCkpOwogICAgIGNvbnRleHQtPmNvbmNhdENUTSh0
cmFuc2Zvcm0uaW52ZXJzZSgpKTsKLSAgICBjb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcih0cmFu
c2Zvcm0ubWFwUmVjdCh0ZXh0Um9vdEJsb2NrLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpKSwgaW1hZ2VCdWZmZXIuZ2V0KCkpOworICAgIGltYWdlQnVmZmVyLT5jbGlwKGNvbnRleHQs
IHRyYW5zZm9ybS5tYXBSZWN0KHRleHRSb290QmxvY2stPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkpKTsKICAgICBjb250ZXh0LT5jb25jYXRDVE0odHJhbnNmb3JtKTsKIAogICAgIEFm
ZmluZVRyYW5zZm9ybSBtYXRyaXg7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIuY3BwCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcg
KzEwNSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5UmVzb3UKICAgICBp
ZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
Y29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIobWFza2VyRGF0YS0+bWFza1JlY3QsIG1hc2tlckRh
dGEtPm1hc2tJbWFnZS5nZXQoKSk7CisgICAgbWFza2VyRGF0YS0+bWFza0ltYWdlLT5jbGlwKGNv
bnRleHQsIG1hc2tlckRhdGEtPm1hc2tSZWN0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCShy
ZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0
dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OCwxNCArMjk4LDE1IEBAIFBhc3NPd25QdHI8
SW1hZ2VCdWZmZXI+IFJlbmRlclNWR1Jlc291cmMKIAogdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm46OmJ1aWxkUGF0dGVybihQYXR0ZXJuRGF0YSogcGF0dGVybkRhdGEsIFBhc3NPd25QdHI8
SW1hZ2VCdWZmZXI+IHRpbGVJbWFnZSkgY29uc3QKIHsKLSAgICBpZiAoIXRpbGVJbWFnZS0+aW1h
Z2UoKSkgeworICAgIFJlZlB0cjxJbWFnZT4gY29waWVkSW1hZ2UgPSB0aWxlSW1hZ2UtPmNvcGll
ZEltYWdlKCk7CisgICAgaWYgKCFjb3BpZWRJbWFnZSkgewogICAgICAgICBwYXR0ZXJuRGF0YS0+
cGF0dGVybiA9IDA7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBJbnRSZWN0IHRpbGVS
ZWN0ID0gdGlsZUltYWdlLT5pbWFnZSgpLT5yZWN0KCk7CisgICAgCisgICAgSW50UmVjdCB0aWxl
UmVjdCA9IGNvcGllZEltYWdlLT5yZWN0KCk7CiAgICAgaWYgKHRpbGVSZWN0LndpZHRoKCkgPD0g
cGF0dGVybkRhdGEtPmJvdW5kYXJpZXMud2lkdGgoKSAmJiB0aWxlUmVjdC5oZWlnaHQoKSA8PSBw
YXR0ZXJuRGF0YS0+Ym91bmRhcmllcy5oZWlnaHQoKSkgewotICAgICAgICBwYXR0ZXJuRGF0YS0+
cGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2UtPmltYWdlKCksIHRydWUsIHRydWUp
OworICAgICAgICBwYXR0ZXJuRGF0YS0+cGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZShjb3BpZWRJ
bWFnZSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMzMSwxMyAr
MzMyLDEzIEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpidWlsZFBhdHQKICAgICAg
ICAgbmV3VGlsZUltYWdlQ29udGV4dC0+dHJhbnNsYXRlKDAsIHBhdHRlcm5EYXRhLT5ib3VuZGFy
aWVzLmhlaWdodCgpKTsKICAgICAgICAgZm9yIChpbnQgaiA9IG51bVg7IGogPiAwOyAtLWopIHsK
ICAgICAgICAgICAgIG5ld1RpbGVJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZShwYXR0ZXJuRGF0YS0+
Ym91bmRhcmllcy53aWR0aCgpLCAwKTsKLSAgICAgICAgICAgIG5ld1RpbGVJbWFnZUNvbnRleHQt
PmRyYXdJbWFnZSh0aWxlSW1hZ2UtPmltYWdlKCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgdGls
ZVJlY3QsIHRpbGVSZWN0KTsKKyAgICAgICAgICAgIG5ld1RpbGVJbWFnZUNvbnRleHQtPmRyYXdJ
bWFnZShjb3BpZWRJbWFnZS5nZXQoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCB0aWxlUmVjdCwg
dGlsZVJlY3QpOwogICAgICAgICB9CiAgICAgICAgIG5ld1RpbGVJbWFnZUNvbnRleHQtPnRyYW5z
bGF0ZSgtcGF0dGVybkRhdGEtPmJvdW5kYXJpZXMud2lkdGgoKSAqIG51bVgsIDApOwogICAgIH0K
ICAgICBuZXdUaWxlSW1hZ2VDb250ZXh0LT5yZXN0b3JlKCk7CiAKLSAgICBwYXR0ZXJuRGF0YS0+
cGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZShuZXdUaWxlSW1hZ2UtPmltYWdlKCksIHRydWUsIHRy
dWUpOworICAgIHBhdHRlcm5EYXRhLT5wYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKG5ld1RpbGVJ
bWFnZS0+Y29waWVkSW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05NjMsNyArOTYzLDggQEAg
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0JhcihSZQogICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+dHJhbnNsYXRlKDIgKiByZWN0LngoKSArIHJlY3Qud2lkdGgoKSwgMCk7CiAg
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoLTEsIDEpKTsKICAgICB9
Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFnZShpbWFnZUJ1ZmZlci0+aW1hZ2UoKSwg
RGV2aWNlQ29sb3JTcGFjZSwgcmVjdC5sb2NhdGlvbigpKTsKKyAgICAKKyAgICBpbWFnZUJ1ZmZl
ci0+ZHJhdyhwYWludEluZm8uY29udGV4dCwgRGV2aWNlQ29sb3JTcGFjZSwgcmVjdC5sb2NhdGlv
bigpKTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgcmV0dXJuIGZh
bHNlOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gNjUxNjApCisr
KyBXZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
Nyw3ICsxMzcsNyBAQCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVJbWFnZUVsZW1lCiAg
ICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OnJlbmRlclN1YnRyZWVUb0ltYWdlKG1fdGFyZ2V0SW1h
Z2UuZ2V0KCksIHJlbmRlcmVyKTsKICAgICB9CiAKLSAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRl
KG1fdGFyZ2V0SW1hZ2UgPyBtX3RhcmdldEltYWdlLT5pbWFnZSgpIDogbV9jYWNoZWRJbWFnZS0+
aW1hZ2UoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKKyAgICByZXR1cm4gRkVJbWFnZTo6Y3Jl
YXRlKG1fdGFyZ2V0SW1hZ2UgPyBtX3RhcmdldEltYWdlLT5jb3BpZWRJbWFnZSgpIDogbV9jYWNo
ZWRJbWFnZS0+aW1hZ2UoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKIH0KIAogdm9pZCBTVkdG
RUltYWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtV
Ukw+JiB1cmxzKSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNp
b24gNjUxNjApCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyMSwxMiArMjIxLDEzIEBAIE5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRp
dmVJbWFnZUZvckMKICAgICBpZiAoIW1fZnJhbWVDYWNoZSkgewogICAgICAgICBpZiAoIW1fcGFn
ZSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBtX2ZyYW1lQ2FjaGUgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUoKSk7Ci0gICAgICAgIGlmICghbV9mcmFtZUNhY2hlKSAvLyBmYWls
ZWQgdG8gYWxsb2NhdGUgaW1hZ2UKKyAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpKTsKKyAgICAgICAgaWYgKCFpbWFnZUJ1
ZmZlcikgLy8gZmFpbGVkIHRvIGFsbG9jYXRlIGltYWdlCiAgICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgZHJhdyhtX2ZyYW1lQ2FjaGUtPmNvbnRleHQoKSwgcmVjdCgpLCByZWN0KCksIERl
dmljZUNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgICAgICBkcmF3KGltYWdl
QnVmZmVyLT5jb250ZXh0KCksIHJlY3QoKSwgcmVjdCgpLCBEZXZpY2VDb2xvclNwYWNlLCBDb21w
b3NpdGVTb3VyY2VPdmVyKTsKKyAgICAgICAgbV9mcmFtZUNhY2hlID0gaW1hZ2VCdWZmZXItPmNv
cGllZEltYWdlKCk7CiAgICAgfQotICAgIHJldHVybiBtX2ZyYW1lQ2FjaGUtPmltYWdlKCktPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgcmV0dXJuIG1fZnJhbWVDYWNoZS0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsgCiB9CiAKIGJvb2wgU1ZHSW1hZ2U6OmRhdGFDaGFu
Z2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCShy
ZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAK
ICAgICAgICAgT3duUHRyPFNWR0ltYWdlQ2hyb21lQ2xpZW50PiBtX2Nocm9tZUNsaWVudDsKICAg
ICAgICAgT3duUHRyPFBhZ2U+IG1fcGFnZTsKLSAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBt
X2ZyYW1lQ2FjaGU7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gbV9mcmFtZUNhY2hlOwogICAgIH07
CiB9CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNw
cAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
TWVyZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgRkVNZXJnZTo6
YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9t
ZXJnZUlucHV0cy5zaXplKCk7IGkrKykgewogICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBj
YWxjdWxhdGVEcmF3aW5nUmVjdChtX21lcmdlSW5wdXRzW2ldLT5zY2FsZWRTdWJSZWdpb24oKSk7
Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX21lcmdlSW5wdXRzW2ldLT5yZXN1
bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkZXN0UmVjdCk7CisgICAgICAg
IG1fbWVyZ2VJbnB1dHNbaV0tPnJlc3VsdEltYWdlKCktPmRyYXcoZmlsdGVyQ29udGV4dCwgRGV2
aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAJKHJldmlzaW9uIDY1MTYwKQorKysg
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBGRU9mZnNldDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbi0+c2NhbGVkU3ViUmVnaW9u
KCkud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luLT5zY2Fs
ZWRTdWJSZWdpb24oKS5oZWlnaHQoKSk7CiAKLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2Uo
bV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZHN0UmVjdCk7
CisgICAgbV9pbi0+cmVzdWx0SW1hZ2UoKS0+ZHJhdyhmaWx0ZXJDb250ZXh0LCBEZXZpY2VDb2xv
clNwYWNlLCBkc3RSZWN0KTsKIH0KIAogdm9pZCBGRU9mZnNldDo6ZHVtcCgpCkluZGV4OiBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwCShyZXZpc2lvbiA2NTE2MCkK
KysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzIsOCArNzIsOCBAQCB2b2lkIEZFVGlsZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIp
CiAKICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVh
dGUodGlsZVJlY3Quc2l6ZSgpKTsKICAgICBHcmFwaGljc0NvbnRleHQqIHRpbGVJbWFnZUNvbnRl
eHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKLSAgICB0aWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1h
Z2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgSW50UG9p
bnQoKSk7Ci0gICAgUmVmUHRyPFBhdHRlcm4+IHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGls
ZUltYWdlLT5pbWFnZSgpLCB0cnVlLCB0cnVlKTsKKyAgICBtX2luLT5yZXN1bHRJbWFnZSgpLT5k
cmF3KHRpbGVJbWFnZUNvbnRleHQsIERldmljZUNvbG9yU3BhY2UsIEludFBvaW50KCkpOworICAg
IFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZS0+Y29w
aWVkSW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4Owog
ICAgIG1hdHJpeC50cmFuc2xhdGUobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkueCgpIC0gc2NhbGVk
U3ViUmVnaW9uKCkueCgpLCBtX2luLT5zY2FsZWRTdWJSZWdpb24oKS55KCkgLSBzY2FsZWRTdWJS
ZWdpb24oKS55KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64370</attachid>
            <date>2010-08-13 13:26:49 -0700</date>
            <delta_ts>2010-08-13 14:39:47 -0700</delta_ts>
            <desc>New patch - incorporate suggestions</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>63077</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA2NTE2MCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC00MDMxLDcgKzQwMzEsNyBAQAogCQlCMkEwMTVBOTBBRjZDRDUzMDA2
QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMkEwMTU5MzBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250
ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QjJBMDE1QUEwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMDE1OTQwQUY2Q0Q1MzAwNkJD
RTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovOyB9OwogCQlCMkEwMTVBQjBBRjZDRDUzMDA2QkNF
MEUgLyogR3JhcGhpY3NUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjJBMDE1OTUwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCMkExMEI5
MjBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFn
ZUJ1ZmZlci5oICovOyB9OworCQlCMkExMEI5MjBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZm
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTEw
QjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQTEwQjk0MEIzODE4RDcwMDA5OUFBNCAv
KiBJbWFnZUJ1ZmZlckNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAq
LzsgfTsKIAkJQjJBMUYyQUEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTFGMkExMENF
RjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5jcHAgKi87IH07CiAJCUIyQTFGMkFCMENF
RjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMUYyQTIwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0Zv
bnRFbGVtZW50LmggKi87IH07CkBAIC00NzYzLDYgKzQ3NjMsNyBAQAogCQlCQ0E4QzgzMTExRTNE
NTMyMDA4MTJGQjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyQ2xpZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E4QzgzMDExRTNENTMyMDA4MTJG
QjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNBOENBNUYxMUU0RTZEMTAwODEyRkI3IC8q
IEJhY2tGb3J3YXJkTGlzdEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkNBOENBNUQxMUU0RTZEMTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkTGlz
dEltcGwuY3BwICovOyB9OwogCQlCQ0E4Q0E2MDExRTRFNkQxMDA4MTJGQjcgLyogQmFja0Zvcndh
cmRMaXN0SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNBOENBNUUxMUU0RTZEMTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkTGlzdEltcGwuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQ0E5NzkxNzEy
MTVEMDU1MDA1QzQ4NUMgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E5NzkxNjEyMTVEMDU1MDA1QzQ4NUMgLyogSW1h
Z2VCdWZmZXJEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQkNBQTkwQzMwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0FBOTBDMjBBN0VCQTYw
MDA4QjEyMjkgLyogU2Nyb2xsYmFyLmNwcCAqLzsgfTsKIAkJQkNBQ0YzQkMxMDcyOTIxQTAwQzBD
OEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0FDRjNCQTEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNv
bnRlbnRVUkxQYXR0ZXJuLmNwcCAqLzsgfTsKIAkJQkNBQ0YzQkQxMDcyOTIxQTAwQzBDOEEzIC8q
IFVzZXJDb250ZW50VVJMUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkNBQ0YzQkIxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJM
UGF0dGVybi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0xMDUwNCw2ICsxMDUwNSw3IEBACiAJCUJDQThDODMwMTFFM0Q1MzIwMDgxMkZCNyAvKiBC
YWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQmFja0ZvcndhcmRDb250cm9sbGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDQThDQTVEMTFFNEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExpc3RJbXBs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhY2tGb3J3YXJkTGlz
dEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0E4Q0E1RTExRTRFNkQx
MDA4MTJGQjcgLyogQmFja0ZvcndhcmRMaXN0SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCYWNrRm9yd2FyZExpc3RJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJDQTk3OTE2MTIxNUQwNTUwMDVDNDg1QyAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQUE5MEMyMEE3RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxi
YXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNjcm9sbGJhci5j
cHA7IHBhdGggPSBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwOyBzb3VyY2VUcmVlID0gU09VUkNFX1JP
T1Q7IH07CiAJCUJDQUNGM0JBMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29udGVudFVSTFBhdHRl
cm4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVXNlckNvbnRlbnRV
UkxQYXR0ZXJuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBQ0YzQkIxMDcy
OTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudFVSTFBhdHRlcm4uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE1NTkwLDYgKzE1NTkyLDcgQEAKIAkJCQlCMkVEOTc3MDBCMUY1NUNF
MDAyNTdEMEYgLyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwICovLAogCQkJCUE4MEQ2NzA3MEU5RTlE
RUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oICovLAogCQkJ
CUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLywKKwkJCQlC
Q0E5NzkxNjEyMTVEMDU1MDA1QzQ4NUMgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCiAJCQkJQjI3
NTM1MzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlQ0cuY3BwICovLAogCQkJCUIyNzUzNTMxMEIw
NTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCAqLywKIAkJCQk0QjM0ODA5MjBFRUY1
MEQ0MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDRy5oICovLApAQCAtMjAxNTYsNiArMjAxNTksNyBA
QAogCQkJCTJFRUQ1NzU4MTIxMDlFRTQwMDc2NTZCQiAvKiBCbG9iUmVnaXN0cnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJFRUQ1NzVDMTIxMDlFRjMwMDc2NTZCQiAvKiBCbG9iRGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTc4QjZGQ0ExMjEyODgyMTAwMTU5NUVGIC8qIEhUTUxWaWV3U291cmNl
UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0E5NzkxNzEyMTVEMDU1MDA1QzQ4NUMgLyog
SW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIwMjE1LDcgKzIwMjE5LDYgQEAK
IAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4
NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJv
amVjdCAiV2ViQ29yZSIgKi87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQi
OwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29k
aW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKSW5kZXg6IFdlYkNv
cmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1ND
YW52YXNWYWx1ZS5jcHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9jc3MvQ1NTQ2FudmFz
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIEltYWdlKiBDU1NDYW52
YXNWYWx1ZTo6aW1hZ2UoUmVuZGVyT2JqZWMKICAgICBIVE1MQ2FudmFzRWxlbWVudCogZWx0ID0g
ZWxlbWVudChyZW5kZXJlci0+ZG9jdW1lbnQoKSk7CiAgICAgaWYgKCFlbHQgfHwgIWVsdC0+YnVm
ZmVyKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBlbHQtPmJ1ZmZlcigpLT5pbWFn
ZSgpOworICAgIHJldHVybiBlbHQtPmNvcGllZEltYWdlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gNjUx
NjApCisrKyBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDksOCArMjA5LDcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogSFRNTENhbnZhc0Vs
ZW1lbgogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50Ojp3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiB7Ci0gICAgaWYgKG1faW1hZ2VCdWZmZXIpCi0gICAgICAgIG1faW1hZ2VCdWZmZXIt
PmNsZWFySW1hZ2UoKTsKKyAgICBtX2NvcGllZEltYWdlLmNsZWFyKCk7IC8vIENsZWFyIG91ciBp
bWFnZSBzbmFwc2hvdCBpZiB3ZSBoYXZlIG9uZS4KIAogICAgIGlmIChSZW5kZXJCb3gqIHJvID0g
cmVuZGVyQm94KCkpIHsKICAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gcm8tPmNvbnRlbnRC
b3hSZWN0KCk7CkBAIC0yODQsOSArMjgzLDEwIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnBh
aW50KEdyYXBoaWNzQ28KICAgICBpZiAoaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkpIHsKICAgICAg
ICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gYnVmZmVyKCk7CiAgICAgICAgIGlmIChpbWFn
ZUJ1ZmZlcikgewotICAgICAgICAgICAgSW1hZ2UqIGltYWdlID0gaW1hZ2VCdWZmZXItPmltYWdl
Rm9yUmVuZGVyaW5nKCk7Ci0gICAgICAgICAgICBpZiAoaW1hZ2UpCi0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBEZXZpY2VDb2xvclNwYWNlLCByKTsKKyAgICAgICAg
ICAgIGlmIChpbWFnZUJ1ZmZlci0+ZHJhd3NVc2luZ0NvcHkoKSkKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5kcmF3SW1hZ2UoY29waWVkSW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgcik7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVy
KGltYWdlQnVmZmVyLCBEZXZpY2VDb2xvclNwYWNlLCByKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtNDIwLDYgKzQyMCwxMyBAQCBJbWFnZUJ1ZmZlciogSFRNTENhbnZhc0VsZW1lbnQ6OmJ1ZmZl
cigpCiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiB9CiAKK0ltYWdlKiBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y29waWVkSW1hZ2UoKSBjb25zdAoreworICAgIGlmICghbV9jb3BpZWRJbWFn
ZSAmJiBidWZmZXIoKSkKKyAgICAgICAgbV9jb3BpZWRJbWFnZSA9IGJ1ZmZlcigpLT5jb3BpZWRJ
bWFnZSgpOworICAgIHJldHVybiBtX2NvcGllZEltYWdlLmdldCgpOworfQorCiBBZmZpbmVUcmFu
c2Zvcm0gSFRNTENhbnZhc0VsZW1lbnQ6OmJhc2VUcmFuc2Zvcm0oKSBjb25zdAogewogICAgIEFT
U0VSVChtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcik7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENh
bnZhc0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuaAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBjbGFzcyBDYW52YXNDb250ZXh0QXR0
cmlidXRlczsKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ7CiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQ7CiBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsKK2NsYXNzIEltYWdlOwogY2xhc3MgSW1h
Z2VCdWZmZXI7CiBjbGFzcyBJbnRTaXplOwogCkBAIC05Myw2ICs5NCw3IEBAIHB1YmxpYzoKICAg
ICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZXh0LmdldCgpOyB9CiAKICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyKCkgY29uc3Q7
CisgICAgSW1hZ2UqIGNvcGllZEltYWdlKCkgY29uc3Q7CiAKICAgICBJbnRSZWN0IGNvbnZlcnRM
b2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAgICAgSW50U2l6ZSBjb252
ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OwpAQCAtMTQ5LDYgKzE1
MSw4IEBAIHByaXZhdGU6CiAgICAgLy8gbV9jcmVhdGVkSW1hZ2VCdWZmZXIgbWVhbnMgd2UgdHJp
ZWQgdG8gbWFsbG9jIHRoZSBidWZmZXIuICBXZSBkaWRuJ3QgbmVjZXNzYXJpbHkgZ2V0IGl0Lgog
ICAgIG11dGFibGUgYm9vbCBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcjsKICAgICBtdXRhYmxlIE93
blB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKKyAgICAKKyAgICBtdXRhYmxlIFJlZlB0
cjxJbWFnZT4gbV9jb3BpZWRJbWFnZTsgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IGZvciBw
bGF0Zm9ybXMgdGhhdCBoYXZlIHRvIGNvcHkgdGhlIGltYWdlIGJ1ZmZlciB0byByZW5kZXIgKGFu
ZCBmb3IgQ1NTQ2FudmFzVmFsdWUpLgogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uY3BwCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3
LDcgQEAgdm9pZCBDYW52YXNQYXR0ZXJuOjpwYXJzZVJlcGV0aXRpb25UeXBlKAogICAgIGVjID0g
U1lOVEFYX0VSUjsKIH0KIAotQ2FudmFzUGF0dGVybjo6Q2FudmFzUGF0dGVybihJbWFnZSogaW1h
Z2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQorQ2FudmFz
UGF0dGVybjo6Q2FudmFzUGF0dGVybihQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSwgYm9vbCByZXBl
YXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCiAgICAgOiBtX3BhdHRlcm4oUGF0
dGVybjo6Y3JlYXRlKGltYWdlLCByZXBlYXRYLCByZXBlYXRZKSkKICAgICAsIG1fb3JpZ2luQ2xl
YW4ob3JpZ2luQ2xlYW4pCiB7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRl
cm4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaAko
cmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
cHVibGljOgogICAgICAgICBzdGF0aWMgdm9pZCBwYXJzZVJlcGV0aXRpb25UeXBlKGNvbnN0IFN0
cmluZyYsIGJvb2wmIHJlcGVhdFgsIGJvb2wmIHJlcGVhdFksIEV4Y2VwdGlvbkNvZGUmKTsKIAot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBjcmVhdGUoSW1hZ2UqIGlt
YWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gY3JlYXRlKFBhc3NSZWZQdHI8SW1h
Z2U+IGltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQYXR0ZXJu
KGltYWdlLCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikpOwogICAgICAgICB9CkBAIC01
MSw3ICs1MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBvcmlnaW5DbGVh
bigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luQ2xlYW47IH0KIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIENhbnZhc1BhdHRlcm4oSW1hZ2UqLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9v
bCBvcmlnaW5DbGVhbik7CisgICAgICAgIENhbnZhc1BhdHRlcm4oUGFzc1JlZlB0cjxJbWFnZT4s
IGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKTsKIAogICAgICAg
ICBSZWZQdHI8UGF0dGVybj4gbV9wYXR0ZXJuOwogICAgICAgICBib29sIG1fb3JpZ2luQ2xlYW47
CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2NCw3ICsxMjY0LDcgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogCiAgICAgc291cmNlQ2Fu
dmFzLT5tYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpOwogCi0gICAgYy0+ZHJhd0ltYWdl
KGJ1ZmZlci0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNvdXJjZVJlY3Qs
IHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUpOworICAgIGMtPmRyYXdJbWFnZUJ1ZmZlcihidWZm
ZXIsIERldmljZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzb3VyY2VSZWN0LCBzdGF0ZSgpLm1fZ2xv
YmFsQ29tcG9zaXRlKTsKICAgICB3aWxsRHJhdyhkZXN0UmVjdCk7IC8vIFRoaXMgY2FsbCBjb21l
cyBhZnRlciBkcmF3SW1hZ2UsIHNpbmNlIHRoZSBidWZmZXIgd2UgZHJhdyBpbnRvIG1heSBiZSBv
dXIgb3duLCBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgZGlydHkuCiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogQXJndWFibHkgd2lsbERyYXcgc2hvdWxkIGJlY29tZSBk
aWREcmF3IGFuZCBvY2N1ciBhZnRlciBkcmF3aW5nIGNhbGxzIGFuZCBub3QgYmVmb3JlIHRoZW0g
dG8gYXZvaWQgcHJvYmxlbXMgbGlrZSB0aGlzLgogfQpAQCAtMTQ2NCw3ICsxNDY0LDcgQEAgUGFz
c1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBDYW52YXNSZW5kZXJpbgogICAgIENhbnZhc1BhdHRlcm46
OnBhcnNlUmVwZXRpdGlvblR5cGUocmVwZXRpdGlvblR5cGUsIHJlcGVhdFgsIHJlcGVhdFksIGVj
KTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBDYW52YXNQYXR0
ZXJuOjpjcmVhdGUoY2FudmFzLT5idWZmZXIoKS0+aW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwg
Y2FudmFzLT5vcmlnaW5DbGVhbigpKTsKKyAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRl
KGNhbnZhcy0+YnVmZmVyKCktPmNvcGllZEltYWdlKCksIHJlcGVhdFgsIHJlcGVhdFksIGNhbnZh
cy0+b3JpZ2luQ2xlYW4oKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp3
aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmIHIsIHVuc2lnbmVkIG9wdGlvbnMpCkBAIC0xODIwLDcg
KzE4MjAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJCiAgICAg
ICAgIG1hc2tJbWFnZUNvbnRleHQtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlv
bik7CiAKICAgICAgICAgYy0+c2F2ZSgpOwotICAgICAgICBjLT5jbGlwVG9JbWFnZUJ1ZmZlciht
YXNrUmVjdCwgbWFza0ltYWdlLmdldCgpKTsKKyAgICAgICAgYy0+Y2xpcFRvSW1hZ2VCdWZmZXIo
bWFza0ltYWdlLmdldCgpLCBtYXNrUmVjdCk7CiAgICAgICAgIGRyYXdTdHlsZS0+YXBwbHlGaWxs
Q29sb3IoYyk7CiAgICAgICAgIGMtPmZpbGxSZWN0KG1hc2tSZWN0KTsKICAgICAgICAgYy0+cmVz
dG9yZSgpOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw5ICsxNTksNiBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRDCiB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQogewogICAgIGlmIChtX21h
cmtlZENhbnZhc0RpcnR5KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJdCBzaG91bGQgbm90IGJlIG5l
Y2Vzc2FyeSB0byBjbGVhciB0aGUgaW1hZ2UgYmVmb3JlIGRvaW5nIGEgcmVhZGJhY2suCi0gICAg
ICAgIC8vIEludmVzdGlnYXRlIHdoeSB0aGlzIGlzIG5lZWRlZCBhbmQgcmVtb3ZlIGlmIHBvc3Np
YmxlLgotICAgICAgICBjYW52YXMoKS0+YnVmZmVyKCktPmNsZWFySW1hZ2UoKTsKICAgICAgICAg
bV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwogICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKHRoaXMpOwogICAgIH0KQEAgLTIxOTYsNyArMjE5Myw5IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHUKICAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5idWZmZXIoKS0+aW1hZ2Uo
KSwKKyAgICAKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcGllZEltYWdlID0gY2FudmFzLT5idWZmZXIo
KS0+Y29waWVkSW1hZ2UoKTsKKyAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb3BpZWRJbWFnZS5nZXQoKSwKICAgICAgICAgICAg
ICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0K
IApAQCAtMjI5NSw3ICsyMjk0LDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleElt
YWdlMkQodQogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICB0ZXhJ
bWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBjYW52
YXMtPmJ1ZmZlcigpLT5pbWFnZSgpLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZWMpOworICAg
IAorICAgIFJlZlB0cjxJbWFnZT4gY29waWVkSW1hZ2UgPSBjYW52YXMtPmJ1ZmZlcigpLT5jb3Bp
ZWRJbWFnZSgpOworICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIGNvcGllZEltYWdlLmdldCgpLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBo
YSwgZWMpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1bnNp
Z25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywKQEAg
LTI0NTUsNyArMjQ1Niw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFn
ZTIKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdGV4U3ViSW1h
Z2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBj
YW52YXMtPmJ1ZmZlcigpLT5pbWFnZSgpLAorICAgIAorICAgIFJlZlB0cjxJbWFnZT4gY29waWVk
SW1hZ2UgPSBjYW52YXMtPmJ1ZmZlcigpLT5jb3BpZWRJbWFnZSgpOworICAgIHRleFN1YkltYWdl
MkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY29w
aWVkSW1hZ2UuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAKQEAgLTI1NTQsNyArMjU1Nyw5IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTIKICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFLCBjYW52YXMtPmJ1ZmZlcigpLT5pbWFnZSgpLAorICAgIAor
ICAgIFJlZlB0cjxJbWFnZT4gY29waWVkSW1hZ2UgPSBjYW52YXMtPmJ1ZmZlcigpLT5jb3BpZWRJ
bWFnZSgpOworICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSwgY29waWVkSW1hZ2UuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgZmxpcFks
IHByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYz
LDExICs2Myw4IEBAIHZvaWQgR2VuZXJhdGVkSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWMKICAg
ICBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0
KCk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgp
LCBhZGp1c3RlZFNpemUpLCAqbV9nZW5lcmF0b3IuZ2V0KCkpOwogCi0gICAgLy8gR3JhYiB0aGUg
ZmluYWwgaW1hZ2UgZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgIEltYWdlKiBiaXRtYXAgPSBp
bWFnZUJ1ZmZlci0+aW1hZ2UoKTsKLQotICAgIC8vIE5vdyBqdXN0IGNhbGwgZHJhd1RpbGVkIG9u
IHRoYXQgaW1hZ2UuCi0gICAgYml0bWFwLT5kcmF3UGF0dGVybihjb250ZXh0LCBhZGp1c3RlZFNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0
ZU9wLCBkZXN0UmVjdCk7CisgICAgLy8gVGlsZSB0aGUgaW1hZ2UgYnVmZmVyIGludG8gdGhlIGNv
bnRleHQuCisgICAgaW1hZ2VCdWZmZXItPmRyYXdQYXR0ZXJuKGNvbnRleHQsIGFkanVzdGVkU3Jj
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRl
T3AsIGRlc3RSZWN0KTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0Miw2
ICs0NDIsNTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYQogICAg
ICAgICByZXN0b3JlKCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXIqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3Qg
SW50UG9pbnQmIHAsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIGRyYXdJbWFnZUJ1ZmZl
cihpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBwLCBJbnRSZWN0KDAsIDAsIC0xLCAtMSksIG9wKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciog
aW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiByLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCit7CisgICAgZHJhd0lt
YWdlQnVmZmVyKGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIHIsIEludFJlY3QoMCwgMCwgLTEsIC0x
KSwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgY29uc3QgSW50UG9pbnQmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wKQoreworICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgc3R5bGVDb2xv
clNwYWNlLCBJbnRSZWN0KGRlc3QsIHNyY1JlY3Quc2l6ZSgpKSwgc3JjUmVjdCwgb3ApOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBpbWFn
ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3QsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxp
dHlTY2FsZSkKK3sKKyAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwg
RmxvYXRSZWN0KGRlc3QpLCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogaW1hZ2Us
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5
U2NhbGUpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2UpCisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgZmxvYXQgdHN3ID0gc3JjLndpZHRoKCk7CisgICAgZmxv
YXQgdHNoID0gc3JjLmhlaWdodCgpOworICAgIGZsb2F0IHR3ID0gZGVzdC53aWR0aCgpOworICAg
IGZsb2F0IHRoID0gZGVzdC5oZWlnaHQoKTsKKworICAgIGlmICh0c3cgPT0gLTEpCisgICAgICAg
IHRzdyA9IGltYWdlLT53aWR0aCgpOworICAgIGlmICh0c2ggPT0gLTEpCisgICAgICAgIHRzaCA9
IGltYWdlLT5oZWlnaHQoKTsKKworICAgIGlmICh0dyA9PSAtMSkKKyAgICAgICAgdHcgPSBpbWFn
ZS0+d2lkdGgoKTsKKyAgICBpZiAodGggPT0gLTEpCisgICAgICAgIHRoID0gaW1hZ2UtPmhlaWdo
dCgpOworCisgICAgaWYgKHVzZUxvd1F1YWxpdHlTY2FsZSkgeworICAgICAgICBzYXZlKCk7Cisg
ICAgICAgIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbk5vbmUpOwor
ICAgIH0KKworICAgIGltYWdlLT5kcmF3KHRoaXMsIHN0eWxlQ29sb3JTcGFjZSwgZGVzdCwgc3Jj
LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICAKKyAgICBpZiAodXNlTG93UXVhbGl0eVNj
YWxlKQorICAgICAgICByZXN0b3JlKCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRS
b3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVm
dCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsCiAgICAgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVm
dCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQpCiB7CkBAIC00NjAsNiArNTExLDEzIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QKICAgICBjbGlwT3V0KFBhdGg6
OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxl
ZnQsIGJvdHRvbVJpZ2h0KSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciogYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGJ1ZmZlci0+
Y2xpcCh0aGlzLCByZWN0KTsKK30KKwogaW50IEdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdN
b2RlKCkKIHsKICAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnRleHREcmF3aW5nTW9kZTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNp
b24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRGFzaEFycmF5Lmgi
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAj
aW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgpAQCAtMTI1LDcgKzEyNiw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKICAgICBjbGFzcyBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZTsKLSAgICBjbGFzcyBJbWFnZUJ1ZmZlcjsKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIFBh
dGg7CiAgICAgY2xhc3MgUGF0dGVybjsKQEAgLTIzOCw2ICsyMzgsMTMgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlOjpUaWxlUnVsZSBoUnVs
ZSA9IEltYWdlOjpTdHJldGNoVGlsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlID0gSW1hZ2U6OlN0
cmV0Y2hUaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9y
ID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7
CiAKKyAgICAgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmLCBDb21wb3NpdGVPcGVyYXRvciA9IENv
bXBvc2l0ZVNvdXJjZU92ZXIpOworICAgICAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiwgQ29tcG9z
aXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2Fs
ZSA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VP
dmVyKTsKKyAgICAgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9v
bCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAw
LCAtMSwgLTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRv
ciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2Up
OworCiAgICAgICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0
aW9uUXVhbGl0eSk7CiAgICAgICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoKSBjb25zdDsKIApAQCAtMjQ4LDggKzI1NSw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdm9pZCBjbGlwT3V0RWxsaXBzZUluUmVjdChjb25zdCBJbnRSZWN0Jik7
CiAgICAgICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmLCBjb25zdCBJ
bnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYg
Ym90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQpOwogICAgICAgICB2b2lkIGNs
aXBQYXRoKFdpbmRSdWxlKTsKLSAgICAgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBJbWFnZUJ1ZmZlciopOwogICAgICAgICB2b2lkIGNsaXBDb252ZXhQ
b2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqLCBib29sIGFudGlhbGlh
cyA9IHRydWUpOworICAgICAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwg
Y29uc3QgRmxvYXRSZWN0Jik7CiAKICAgICAgICAgaW50IHRleHREcmF3aW5nTW9kZSgpOwogICAg
ICAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShpbnQpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2UuaAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw2ICsxNTAsOSBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SW1hZ2U+IGxvYWRQbGF0Zm9ybVRoZW1lSWNvbihjb25zdCBjaGFy
KiBuYW1lLCBpbnQgc2l6ZSk7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBD
b21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CisKIHByb3RlY3Rl
ZDoKICAgICBJbWFnZShJbWFnZU9ic2VydmVyKiA9IDApOwogCkBAIC0xNjcsOSArMTcwLDYgQEAg
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKSB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgQ29sb3Igc29saWRDb2xvcigpIGNvbnN0IHsgcmV0
dXJuIENvbG9yKCk7IH0KICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOwotCiBwcml2YXRlOgogICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsgLy8gVGhlIGVuY29kZWQgcmF3IGRhdGEgZm9yIHRo
ZSBpbWFnZS4gCiAgICAgSW1hZ2VPYnNlcnZlciogbV9pbWFnZU9ic2VydmVyOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24gNjUzMjkpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgSW1hZ2VCdWZmZXJfaAogCiAjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIK
ICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCkBAIC03
MSwxNiArNzIsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB+SW1hZ2VCdWZmZXIo
KTsKIAogICAgICAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9CisgICAgICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9
CisgICAgICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0K
KyAgICAgICAgCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCgpIGNvbnN0OwogCi0g
ICAgICAgIEltYWdlKiBpbWFnZSgpIGNvbnN0OwotI2lmIFBMQVRGT1JNKFFUKQotICAgICAgICBJ
bWFnZSogaW1hZ2VGb3JSZW5kZXJpbmcoKSBjb25zdDsKLSNlbHNlCi0gICAgICAgIEltYWdlKiBp
bWFnZUZvclJlbmRlcmluZygpIGNvbnN0IHsgcmV0dXJuIGltYWdlKCk7IH0KLSNlbmRpZgotCi0g
ICAgICAgIHZvaWQgY2xlYXJJbWFnZSgpIHsgbV9pbWFnZS5jbGVhcigpOyB9CisgICAgICAgIGJv
b2wgZHJhd3NVc2luZ0NvcHkoKSBjb25zdDsgLy8gSWYgdGhlIGltYWdlIGJ1ZmZlciBoYXMgdG8g
cmVuZGVyIHVzaW5nIGEgY29waWVkIGltYWdlLCBpdCB3aWxsIHJldHVybiB0cnVlLgorICAgICAg
ICBQYXNzUmVmUHRyPEltYWdlPiBjb3BpZWRJbWFnZSgpIGNvbnN0OyAvLyBSZXR1cm4gYSBuZXcg
aW1hZ2UgdGhhdCBpcyBhIGNvcHkgb2YgdGhlIGJ1ZmZlci4KIAogICAgICAgICBQYXNzUmVmUHRy
PEltYWdlRGF0YT4gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmKSBjb25z
dDsKICAgICAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYpIGNvbnN0OwpAQCAtOTYsMTIgKzk0LDIzIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICNlbHNlCiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX3NpemUuaGVp
Z2h0KCkpOyB9CiAjZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgY2xpcChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKworICAgICAgICAvLyBUaGUg
ZHJhdyBtZXRob2QgZHJhd3MgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgd2l0aG91dCBjb3B5
aW5nIGl0LgorICAgICAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wg
dXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOworICAgICAgICB2b2lkIGRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOworICAgICAgICBmcmllbmQgY2xh
c3MgR3JhcGhpY3NDb250ZXh0OworICAgICAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7
CisKICAgICBwcml2YXRlOgogICAgICAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwogCiAgICAg
ICAgIEludFNpemUgbV9zaXplOwogICAgICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBtX2Nv
bnRleHQ7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogCiAjaWYgIVBM
QVRGT1JNKENHKQogICAgICAgICBWZWN0b3I8aW50PiBtX2xpbmVhclJnYkxVVDsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3
ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGF0dGVybjo6UGF0dGVybihJbWFn
ZSogaW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKQorUGF0dGVybjo6UGF0dGVybihQ
YXNzUmVmUHRyPEltYWdlPiBpbWFnZSwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFkpCiAgICAg
OiBtX3RpbGVJbWFnZShpbWFnZSkKICAgICAsIG1fcmVwZWF0WChyZXBlYXRYKQogICAgICwgbV9y
ZXBlYXRZKHJlcGVhdFkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkocmV2
aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBQYXR0ZXJuX2gKIAogI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkltYWdlLmgiCiAKICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC02NCwxMSAr
NjUsMTAgQEAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVBhdHRlcm5QdHI7CiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKLWNsYXNzIEltYWdlOwogCiBjbGFzcyBQ
YXR0ZXJuIDogcHVibGljIFJlZkNvdW50ZWQ8UGF0dGVybj4gewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFBhdHRlcm4+IGNyZWF0ZShJbWFnZSogdGlsZUltYWdlLCBib29sIHJlcGVh
dFgsIGJvb2wgcmVwZWF0WSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQYXR0ZXJuPiBjcmVhdGUo
UGFzc1JlZlB0cjxJbWFnZT4gdGlsZUltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSkK
ICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGF0dGVybih0aWxlSW1hZ2UsIHJl
cGVhdFgsIHJlcGVhdFkpKTsKICAgICB9CkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICBi
b29sIHJlcGVhdFkoKSBjb25zdCB7IHJldHVybiBtX3JlcGVhdFk7IH0KIAogcHJpdmF0ZToKLSAg
ICBQYXR0ZXJuKEltYWdlKiwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFkpOworICAgIFBhdHRl
cm4oUGFzc1JlZlB0cjxJbWFnZT4sIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKTsKIAogICAg
IFJlZlB0cjxJbWFnZT4gbV90aWxlSW1hZ2U7CiAgICAgYm9vbCBtX3JlcGVhdFg7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTA4
LDE0ICs5MDgsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjCiAg
ICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgc2F2ZWRGaWxsUnVsZSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coRmxvYXRTaXplIGNvbnN0JiBzaXpl
LCBmbG9hdCwgQ29sb3IgY29uc3QmLCBDb2xvclNwYWNlKQogewogICAgIC8vIENhaXJvIGRvZXNu
J3Qgc3VwcG9ydCBzaGFkb3dzIG5hdGl2ZWx5LCB0aGV5IGFyZSBkcmF3biBtYW51YWxseSBpbiB0
aGUgZHJhdyoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NywyNiArOTcsMzQgQEAgR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgp
IAogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9CiAKLUltYWdlKiBJbWFnZUJ1ZmZlcjo6
aW1hZ2UoKSBjb25zdAorYm9vbCBJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2luZ0NvcHkoKSBjb25zdAog
ewotICAgIGlmICghbV9pbWFnZSkgewotICAgICAgICAvLyBJdCdzIGFzc3VtZWQgdGhhdCBpZiBp
bWFnZSgpIGlzIGNhbGxlZCwgdGhlIGFjdHVhbCByZW5kZXJpbmcgdG8gdGhlCi0gICAgICAgIC8v
IEdyYXBoaWNzQ29udGV4dCBtdXN0IGJlIGRvbmUuCi0gICAgICAgIEFTU0VSVChjb250ZXh0KCkp
OwotCi0gICAgICAgIC8vIFRoaXMgY3JlYXRlcyBhIENPUFkgb2YgdGhlIGltYWdlIGFuZCB3aWxs
IGNhY2hlIHRoYXQgY29weS4gVGhpcyBtZWFucwotICAgICAgICAvLyB0aGF0IGlmIHN1YnNlcXVl
bnQgb3BlcmF0aW9ucyB0YWtlIHBsYWNlIG9uIHRoZSBjb250ZXh0LCBuZWl0aGVyIHRoZQotICAg
ICAgICAvLyBjdXJyZW50bHktcmV0dXJuZWQgaW1hZ2UsIG5vciB0aGUgcmVzdWx0cyBvZiBmdXR1
cmUgaW1hZ2UoKSBjYWxscywKLSAgICAgICAgLy8gd2lsbCBjb250YWluIHRoYXQgb3BlcmF0aW9u
LgotICAgICAgICAvLwotICAgICAgICAvLyBUaGlzIHNlZW1zIHNpbGx5LCBidXQgaXMgdGhlIHdh
eSB0aGUgQ0cgcG9ydCB3b3JrczogaW1hZ2UoKSBpcwotICAgICAgICAvLyBpbnRlbmRlZCB0byBi
ZSB1c2VkIG9ubHkgd2hlbiByZW5kZXJpbmcgaXMgImNvbXBsZXRlLiIKLSAgICAgICAgY2Fpcm9f
c3VyZmFjZV90KiBuZXdzdXJmYWNlID0gY29weVN1cmZhY2UobV9kYXRhLm1fc3VyZmFjZSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICAgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNl
IHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlvbgotICAgICAgICBtX2ltYWdlID0g
Qml0bWFwSW1hZ2U6OmNyZWF0ZShuZXdzdXJmYWNlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1faW1h
Z2UuZ2V0KCk7CitQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29waWVkSW1hZ2UoKSBj
b25zdAoreworICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1
cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShjb3B5
U3VyZmFjZShtX2RhdGEubV9zdXJmYWNlKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAs
IC0xLCAtMSksCisgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wID0g
Q29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSkKK3sK
KyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcGllZEltYWdlKCk7CisgICAgY29udGV4
dC0+ZHJhd0ltYWdlKGltYWdlQ29weS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KQoreworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29waWVkSW1hZ2Uo
KTsKKyAgICBpbWFnZUNvcHktPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiB9CiAKIHZv
aWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBWZWN0b3I8
aW50PiYgbG9va1VwVGFibGUpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzUzLDE4ICs3NTMsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3Vu
ZGVkUmVjCiAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBJ
bWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29u
dGV4dCgpLCByZWN0LngoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKTsKLSAgICBDR0NvbnRl
eHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgMSwgLTEpOwotICAgIENHQ29udGV4dENsaXBU
b01hc2socGxhdGZvcm1Db250ZXh0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHJlY3Quc2l6
ZSgpKSwgaW1hZ2VCdWZmZXItPmltYWdlKCktPmdldENHSW1hZ2VSZWYoKSk7Ci0gICAgQ0dDb250
ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIDEsIC0xKTsKLSAgICBDR0NvbnRleHRUcmFu
c2xhdGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIC1yZWN0LngoKSwgLXJlY3QueSgpIC0gcmVjdC5o
ZWlnaHQoKSk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkocmV2
aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMCArNTYsMTAgQEAgSW1hZ2VCdWZmZXI6Oklt
YWdlQnVmZmVyKGNvbnN0IEludFNpemUmIAogICAgICwgbV9zaXplKHNpemUpCiB7CiAgICAgc3Vj
Y2VzcyA9IGZhbHNlOyAgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBmYWlsdXJlLgotICAgIHVu
c2lnbmVkIGJ5dGVzUGVyUm93OwogICAgIGlmIChzaXplLndpZHRoKCkgPCAwIHx8IHNpemUuaGVp
Z2h0KCkgPCAwKQogICAgICAgICByZXR1cm47Ci0gICAgYnl0ZXNQZXJSb3cgPSBzaXplLndpZHRo
KCk7CisKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdyA9IHNpemUud2lkdGgoKTsKICAgICBpZiAo
aW1hZ2VDb2xvclNwYWNlICE9IEdyYXlTY2FsZSkgewogICAgICAgICAvLyBQcm90ZWN0IGFnYWlu
c3Qgb3ZlcmZsb3cKICAgICAgICAgaWYgKGJ5dGVzUGVyUm93ID4gMHgzRkZGRkZGRikKQEAgLTY3
LDYgKzY3LDcgQEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIAogICAg
ICAgICBieXRlc1BlclJvdyAqPSA0OwogICAgIH0KIAorICAgIHNpemVfdCBkYXRhU2l6ZSA9IHNp
emUuaGVpZ2h0KCkgKiBieXRlc1BlclJvdzsKICAgICBpZiAoIXRyeUZhc3RDYWxsb2Moc2l6ZS5o
ZWlnaHQoKSwgYnl0ZXNQZXJSb3cpLmdldFZhbHVlKG1fZGF0YS5tX2RhdGEpKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTg0LDE0ICs4NSwxNiBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29u
c3QgSW50U2l6ZSYgCiAgICAgICAgIGNhc2UgTGluZWFyUkdCOgogICAgICAgICAgICAgY29sb3JT
cGFjZS5hZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VHZW5l
cmljUkdCTGluZWFyKSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAogI2VuZGlm
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBjb2xvclNwYWNlLmFkb3B0Q0YoQ0dDb2xv
clNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCisg
ICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSAoaW1hZ2VDb2xvclNwYWNlID09IEdyYXlTY2Fs
ZSkgPyBrQ0dJbWFnZUFscGhhTm9uZSA6IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsK
ICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQoQWRvcHRDRiwgQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlKG1fZGF0YS5tX2RhdGEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwg
OCwgYnl0ZXNQZXJSb3csCi0gICAgICAgIGNvbG9yU3BhY2UuZ2V0KCksIChpbWFnZUNvbG9yU3Bh
Y2UgPT0gR3JheVNjYWxlKSA/IGtDR0ltYWdlQWxwaGFOb25lIDoga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRMYXN0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLmdldCgpLCBiaXRtYXBJbmZv
KSk7CiAgICAgaWYgKCFjZ0NvbnRleHQpCiAgICAgICAgIHJldHVybjsKIApAQCAtOTksNiArMTAy
LDEyIEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiAKICAgICBtX2Nv
bnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwogICAgIG1fY29udGV4dC0+dHJhbnNsYXRl
KDAsIC1zaXplLmhlaWdodCgpKTsKICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAKKyAgICAvLyBD
cmVhdGUgYSBsaXZlIGltYWdlIHRoYXQgd3JhcHMgdGhlIGRhdGEuCisgICAgUmV0YWluUHRyPENH
RGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXIoQWRvcHRDRiwgQ0dEYXRhUHJvdmlkZXJDcmVh
dGVXaXRoRGF0YSgwLCBtX2RhdGEubV9kYXRhLCBkYXRhU2l6ZSwgMCkpOworICAgIENHSW1hZ2VS
ZWYgY2dJbWFnZSA9IENHSW1hZ2VDcmVhdGUobV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSwgOCwgaW1hZ2VDb2xvclNwYWNlICE9IEdyYXlTY2FsZSA/IDMyIDogOCwgYnl0ZXNQZXJSb3cs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLmdldCgp
LCBiaXRtYXBJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRydWUsIGtDR1JlbmRlcmluZ0lu
dGVudERlZmF1bHQpOworICAgIG1fZGF0YS5tX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShj
Z0ltYWdlKTsKIH0KIAogSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpCkBAIC0xMTEsMTcgKzEy
MCw0NyBAQCBHcmFwaGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgCiAgICAgcmV0
dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KIAotSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZSgpIGNv
bnN0Citib29sIEltYWdlQnVmZmVyOjpkcmF3c1VzaW5nQ29weSgpIGNvbnN0CiB7Ci0gICAgaWYg
KCFtX2ltYWdlKSB7Ci0gICAgICAgIC8vIEl0J3MgYXNzdW1lZCB0aGF0IGlmIGltYWdlKCkgaXMg
Y2FsbGVkLCB0aGUgYWN0dWFsIHJlbmRlcmluZyB0byB0aGUKLSAgICAgICAgLy8gR3JhcGhpY3ND
b250ZXh0IG11c3QgYmUgZG9uZS4KLSAgICAgICAgQVNTRVJUKGNvbnRleHQoKSk7Ci0gICAgICAg
IENHSW1hZ2VSZWYgY2dJbWFnZSA9IENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQo
KS0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgICAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVh
c2UgdGhlIHBhc3NlZCBpbiBDR0ltYWdlIG9uIGRlc3RydWN0aW9uCi0gICAgICAgIG1faW1hZ2Ug
PSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UpOwotICAgIH0KLSAgICByZXR1cm4gbV9pbWFn
ZS5nZXQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdl
QnVmZmVyOjpjb3BpZWRJbWFnZSgpIGNvbnN0Cit7CisgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCBy
ZWxlYXNlIHRoZSBwYXNzZWQgaW4gQ0dJbWFnZSBvbiBkZXN0cnVjdGlvbgorICAgIHJldHVybiBC
aXRtYXBJbWFnZTo6Y3JlYXRlKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+
cGxhdGZvcm1Db250ZXh0KCkpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQqIGRlc3RDb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAorICAgICAgICAg
ICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2Nh
bGUpCit7CisgICAgaWYgKGRlc3RDb250ZXh0ID09IGNvbnRleHQoKSkgeworICAgICAgICAvLyBX
ZSdyZSBkcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIuICBJbiBvcmRlciBmb3IgdGhpcyB0byB3
b3JrLCB3ZSBuZWVkIHRvIGNvcHkgdGhlIHNvdXJjZSBidWZmZXIgZmlyc3QuCisgICAgICAgIFJl
ZlB0cjxJbWFnZT4gY29weSA9IGNvcGllZEltYWdlKCk7CisgICAgICAgIGRlc3RDb250ZXh0LT5k
cmF3SW1hZ2UoY29weS5nZXQoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3Qs
IG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOworICAgIH0gZWxzZQorICAgICAgICBkZXN0Q29udGV4
dC0+ZHJhd0ltYWdlKG1fZGF0YS5tX2ltYWdlLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKK30KKwordm9pZCBJbWFnZUJ1
ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0KQoreworICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkp
IHsKKyAgICAgICAgLy8gV2UncmUgZHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLiAgSW4gb3Jk
ZXIgZm9yIHRoaXMgdG8gd29yaywgd2UgbmVlZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVmZmVyIGZp
cnN0LgorICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3BpZWRJbWFnZSgpOworICAgICAg
ICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbV9kYXRhLm1faW1hZ2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBzcmNSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwor
fQorCit2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAoreworICAgIENHQ29udGV4dFJlZiBwbGF0Zm9ybUNv
bnRleHQgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRUcmFuc2xh
dGVDVE0ocGxhdGZvcm1Db250ZXh0LCByZWN0LngoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgp
KTsKKyAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQsIDEsIC0xKTsKKyAgICBD
R0NvbnRleHRDbGlwVG9NYXNrKHBsYXRmb3JtQ29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgcmVjdC5zaXplKCkpLCBtX2RhdGEubV9pbWFnZS0+Z2V0Q0dJbWFnZVJlZigpKTsKKyAgICBD
R0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQsIDEsIC0xKTsKKyAgICBDR0NvbnRleHRU
cmFuc2xhdGVDVE0ocGxhdGZvcm1Db250ZXh0LCAtcmVjdC54KCksIC1yZWN0LnkoKSAtIHJlY3Qu
aGVpZ2h0KCkpOwogfQogCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVsdGlwbGllZD4KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGEuaAkocmV2aXNp
b24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw5IEBACiAjaWZuZGVmIEltYWdlQnVmZmVy
RGF0YV9oCiAjZGVmaW5lIEltYWdlQnVmZmVyRGF0YV9oCiAKKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisjaW5jbHVkZSAiSW1hZ2UuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJ
bnRTaXplOwpAQCAtMzUsNiArMzgsNyBAQCBwdWJsaWM6CiAgICAgSW1hZ2VCdWZmZXJEYXRhKGNv
bnN0IEludFNpemUmKTsKIAogICAgIHZvaWQqIG1fZGF0YTsKKyAgICBSZWZQdHI8SW1hZ2U+IG1f
aW1hZ2U7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAkocmV2aXNp
b24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIEZFQ29sb3JN
YXRyaXg6OmFwcGx5KEZpbHRlciogZmlsdGVyCiAgICAgaWYgKCFmaWx0ZXJDb250ZXh0KQogICAg
ICAgICByZXR1cm47CiAKLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0
SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3Qo
bV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VC
dWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJh
d2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKIAogICAgIEludFJlY3QgaW1hZ2VS
ZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7CiAgICAgUGFzc1JlZlB0cjxJ
bWFnZURhdGE+IGltYWdlRGF0YShyZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoaW1hZ2VSZWN0KSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb3NpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTMxLDI2ICsxMzEsMjYgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIp
CiAgICAgRmxvYXRSZWN0IHNyY1JlY3QgPSBGbG9hdFJlY3QoMC5mLCAwLmYsIC0xLmYsIC0xLmYp
OwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9P
VkVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3VsdEltYWdl
KCktPmltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4y
LT5zY2FsZWRTdWJSZWdpb24oKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2Uo
bV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRl
RHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAgICAgICAgZmlsdGVyQ29u
dGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4yLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNw
YWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAg
ICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCks
IERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNjYWxlZFN1YlJl
Z2lvbigpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1Jf
SU46CiAgICAgICAgIGZpbHRlckNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgZmlsdGVyQ29udGV4
dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1
YlJlZ2lvbigpKSwgbV9pbjItPnJlc3VsdEltYWdlKCkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0
LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFj
ZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAgICAg
ICAgZmlsdGVyQ29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwg
Y2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigpKSk7CisgICAgICAg
IGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZp
Y2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24o
KSkpOwogICAgICAgICBmaWx0ZXJDb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgotICAgICAgICBmaWx0ZXJDb250ZXh0
LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFj
ZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgp
LCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3Vi
UmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVEZXN0aW5hdGlvbk91dCk7CisgICAgICAgIGZp
bHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VD
b2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkp
OworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbjItPnJlc3VsdElt
YWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2Fs
ZWRTdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0KTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICBm
aWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIERl
dmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdp
b24oKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1h
Z2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9p
bi0+c2NhbGVkU3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVTb3VyY2VBdG9wKTsKKyAg
ICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4yLT5yZXN1bHRJbWFnZSgp
LCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3Vi
UmVnaW9uKCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4t
PnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1f
aW4tPnNjYWxlZFN1YlJlZ2lvbigpKSwgc3JjUmVjdCwgQ29tcG9zaXRlU291cmNlQXRvcCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfWE9SOgotICAgICAg
ICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCks
IERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJS
ZWdpb24oKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0
SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3Qo
bV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVYT1IpOworICAgICAg
ICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbjItPnJlc3VsdEltYWdlKCksIERl
dmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdp
b24oKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVz
dWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+
c2NhbGVkU3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVYT1IpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6IHsKICAgICAgICAg
SW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChtX2lu
LT5zY2FsZWRTdWJSZWdpb24oKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlQWxwaGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjMsOSArNjMsOSBAQCB2b2lkIFNvdXJjZUFscGhhOjphcHBseShGaWx0ZXIqIGZpbHRl
cikKIAogICAgIHNldElzQWxwaGFJbWFnZSh0cnVlKTsKIAotICAgIEZsb2F0UmVjdCBpbWFnZVJl
Y3QoRmxvYXRQb2ludCgpLCBmaWx0ZXItPnNvdXJjZUltYWdlKCktPmltYWdlKCktPnNpemUoKSk7
CisgICAgRmxvYXRSZWN0IGltYWdlUmVjdChGbG9hdFBvaW50KCksIGZpbHRlci0+c291cmNlSW1h
Z2UoKS0+c2l6ZSgpKTsKICAgICBmaWx0ZXJDb250ZXh0LT5zYXZlKCk7Ci0gICAgZmlsdGVyQ29u
dGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VSZWN0LCBmaWx0ZXItPnNvdXJjZUltYWdlKCkp
OworICAgIGZpbHRlckNvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKGZpbHRlci0+c291cmNlSW1h
Z2UoKSwgaW1hZ2VSZWN0KTsKICAgICBmaWx0ZXJDb250ZXh0LT5maWxsUmVjdChpbWFnZVJlY3Qs
IENvbG9yOjpibGFjaywgRGV2aWNlQ29sb3JTcGFjZSk7CiAgICAgZmlsdGVyQ29udGV4dC0+cmVz
dG9yZSgpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUdyYXBoaWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYwLDcgKzYwLDcgQEAgdm9pZCBTb3VyY2VHcmFwaGljOjphcHBseShGaWx0ZXIqIGZpbHRlcgog
ICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmlsdGVyQ29u
dGV4dC0+ZHJhd0ltYWdlKGZpbHRlci0+c291cmNlSW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29s
b3JTcGFjZSwgSW50UG9pbnQoKSk7CisgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVy
KGZpbHRlci0+c291cmNlSW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgSW50UG9pbnQoKSk7CiB9
CiAKIHZvaWQgU291cmNlR3JhcGhpYzo6ZHVtcCgpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkocmV2aXNpb24gNjUzMjkp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE4NSwyMyArMTE4NSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0RWxsaXBzZUluUmUKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIGZsb2F0UmVjdCwgY29uc3QgSW1hZ2VC
dWZmZXIqIGltYWdlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFFQaXhtYXAqIG5hdGl2ZUltYWdlID0gaW1hZ2UtPmltYWdlKCktPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgSW50UmVjdCByZWN0KGZsb2F0UmVjdCk7Ci0gICAgUVBpeG1hcCBhbHBo
YU1hc2sgPSAqbmF0aXZlSW1hZ2U7Ci0gICAgaWYgKGFscGhhTWFzay53aWR0aCgpICE9IHJlY3Qu
d2lkdGgoKSB8fCBhbHBoYU1hc2suaGVpZ2h0KCkgIT0gcmVjdC5oZWlnaHQoKSkKLSAgICAgICAg
YWxwaGFNYXNrID0gYWxwaGFNYXNrLnNjYWxlZChyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
OwotCi0gICAgbV9kYXRhLT5sYXllcnMucHVzaChuZXcgVHJhbnNwYXJlbmN5TGF5ZXIobV9kYXRh
LT5wKCksIG1fZGF0YS0+cCgpLT50cmFuc2Zvcm0oKS5tYXBSZWN0KHJlY3QpLCAxLjAsIGFscGhh
TWFzaykpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENs
aXAoY29uc3QgSW50UmVjdCYgcmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdGhpY2tuZXNzKQogewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9JbWFnZUJ1ZmZlckRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyRGF0YS5oCShyZXZpc2lvbiA2NTMyOSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJEYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDkgQEAKICNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhX2gKICNkZWZpbmUg
SW1hZ2VCdWZmZXJEYXRhX2gKIAorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJJ
bWFnZS5oIgorCiAjaW5jbHVkZSA8UVBhaW50ZXI+CiAjaW5jbHVkZSA8UVBpeG1hcD4KIApAQCAt
NDEsNiArNDQsNyBAQCBwdWJsaWM6CiAKICAgICBRUGl4bWFwIG1fcGl4bWFwOwogICAgIE93blB0
cjxRUGFpbnRlcj4gbV9wYWludGVyOworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKIH07CiAK
IH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0ltYWdlQnVmZmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIk1JTUVUeXBl
UmVnaXN0cnkuaCIKICNpbmNsdWRlICJTdGlsbEltYWdlUXQuaCIKKyNpbmNsdWRlICJUcmFuc3Bh
cmVuY3lMYXllci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2luY2x1ZGUg
PFFCdWZmZXI+CkBAIC03NCw2ICs3NSw4IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJE
YXRhKGNvbnN0IEkKICAgICBicnVzaC5zZXRDb2xvcihRdDo6YmxhY2spOwogICAgIHBhaW50ZXIt
PnNldEJydXNoKGJydXNoKTsKICAgICBwYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50
ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VPdmVyKTsKKyAgICAKKyAgICBtX2RhdGEubV9pbWFn
ZSA9IFN0aWxsSW1hZ2U6OmNyZWF0ZUZvclJlbmRlcmluZygmbV9kYXRhLm1fcGl4bWFwKTsKIH0K
IAogSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIEltYWdlQ29s
b3JTcGFjZSwgYm9vbCYgc3VjY2VzcykKQEAgLTk4LDI0ICsxMDEsNTAgQEAgR3JhcGhpY3NDb250
ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIAogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7
CiB9CiAKLUltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2VGb3JSZW5kZXJpbmcoKSBjb25zdAorYm9v
bCBJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2luZ0NvcHkoKSBjb25zdAogewotICAgIGlmICghbV9pbWFn
ZSkKLSAgICAgICAgbV9pbWFnZSA9IFN0aWxsSW1hZ2U6OmNyZWF0ZUZvclJlbmRlcmluZygmbV9k
YXRhLm1fcGl4bWFwKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLSAgICByZXR1cm4gbV9pbWFn
ZS5nZXQoKTsKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3BpZWRJbWFnZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFN0aWxsSW1hZ2U6OmNyZWF0ZShtX2RhdGEubV9waXhtYXApOwog
fQogCi1JbWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6
OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNl
TG93UXVhbGl0eVNjYWxlKQogewotICAgIGlmICghbV9pbWFnZSkgewotICAgICAgICAvLyBJdCdz
IGFzc3VtZWQgdGhhdCBpZiBpbWFnZSgpIGlzIGNhbGxlZCwgdGhlIGFjdHVhbCByZW5kZXJpbmcg
dG8gdGhlCi0gICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dCBtdXN0IGJlIGRvbmUuCi0gICAgICAg
IEFTU0VSVChjb250ZXh0KCkpOwotICAgICAgICBtX2ltYWdlID0gU3RpbGxJbWFnZTo6Y3JlYXRl
KG1fZGF0YS5tX3BpeG1hcCk7Ci0gICAgfQorICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0
KCkpIHsKKyAgICAgICAgLy8gV2UncmUgZHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLiAgSW4g
b3JkZXIgZm9yIHRoaXMgdG8gd29yaywgd2UgbmVlZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVmZmVy
IGZpcnN0LgorICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3BpZWRJbWFnZSgpOworICAg
ICAgICBkZXN0Q29udGV4dC0+ZHJhd0ltYWdlKGNvcHkuZ2V0KCksIERldmljZUNvbG9yU3BhY2Us
IGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgZGVzdENvbnRleHQtPmRyYXdJbWFnZShtX2RhdGEubV9pbWFnZS5nZXQoKSwgc3R5
bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7
Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogZGVz
dENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICBpZiAoZGVzdENv
bnRleHQgPT0gY29udGV4dCgpKSB7CisgICAgICAgIC8vIFdlJ3JlIGRyYXdpbmcgaW50byBvdXIg
b3duIGJ1ZmZlci4gIEluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmssIHdlIG5lZWQgdG8gY29weSB0
aGUgc291cmNlIGJ1ZmZlciBmaXJzdC4KKyAgICAgICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gY29w
aWVkSW1hZ2UoKTsKKyAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIHNyY1Jl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVj
dCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fZGF0YS5tX2ltYWdlLT5kcmF3UGF0dGVybihkZXN0
Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFj
ZSwgb3AsIGRlc3RSZWN0KTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZmxvYXRSZWN0KQoreworICAgIFFQaXht
YXAqIG5hdGl2ZUltYWdlID0gbV9kYXRhLm1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CisgICAgaWYgKCFuYXRpdmVJbWFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50
UmVjdCByZWN0KGZsb2F0UmVjdCk7CisgICAgUVBpeG1hcCBhbHBoYU1hc2sgPSAqbmF0aXZlSW1h
Z2U7CisgICAgaWYgKGFscGhhTWFzay53aWR0aCgpICE9IHJlY3Qud2lkdGgoKSB8fCBhbHBoYU1h
c2suaGVpZ2h0KCkgIT0gcmVjdC5oZWlnaHQoKSkKKyAgICAgICAgYWxwaGFNYXNrID0gYWxwaGFN
YXNrLnNjYWxlZChyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogCi0gICAgcmV0dXJuIG1f
aW1hZ2UuZ2V0KCk7CisgICAgbV9kYXRhLT5sYXllcnMucHVzaChuZXcgVHJhbnNwYXJlbmN5TGF5
ZXIobV9kYXRhLT5wKCksIG1fZGF0YS0+cCgpLT50cmFuc2Zvcm0oKS5tYXBSZWN0KHJlY3QpLCAx
LjAsIGFscGhhTWFzaykpOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9y
bUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lh
LmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NiwxNyArNDU2LDYg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlIAogICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5jbGlwUGF0aEFudGlBbGlhc2VkKHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEltYWdlQnVmZmVyKiBpbWFn
ZUJ1ZmZlcikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSNpZiBPUyhMSU5VWCkgfHwgT1MoV0lORE9XUykKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
YmVnaW5MYXllckNsaXBwZWRUb0ltYWdlKHJlY3QsIGltYWdlQnVmZmVyKTsKLSNlbmRpZgotfQot
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
YWZmaW5lKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNp
b24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJT
a2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMjAgKzg3LDM1IEBAIEdyYXBoaWNzQ29udGV4
dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSAKICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwog
fQogCi1JbWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29uc3QKK2Jvb2wgSW1hZ2VCdWZmZXI6
OmRyYXdzVXNpbmdDb3B5KCkgY29uc3QKIHsKLSAgICBpZiAoIW1faW1hZ2UpIHsKLSAgICAgICAg
Ly8gVGhpcyBjcmVhdGVzIGEgQ09QWSBvZiB0aGUgaW1hZ2UgYW5kIHdpbGwgY2FjaGUgdGhhdCBj
b3B5LiBUaGlzIG1lYW5zCi0gICAgICAgIC8vIHRoYXQgaWYgc3Vic2VxdWVudCBvcGVyYXRpb25z
IHRha2UgcGxhY2Ugb24gdGhlIGNvbnRleHQsIG5laXRoZXIgdGhlCi0gICAgICAgIC8vIGN1cnJl
bnRseS1yZXR1cm5lZCBpbWFnZSwgbm9yIHRoZSByZXN1bHRzIG9mIGZ1dHVyZSBpbWFnZSgpIGNh
bGxzLAotICAgICAgICAvLyB3aWxsIGNvbnRhaW4gdGhhdCBvcGVyYXRpb24uCi0gICAgICAgIC8v
Ci0gICAgICAgIC8vIFRoaXMgc2VlbXMgc2lsbHksIGJ1dCBpcyB0aGUgd2F5IHRoZSBDRyBwb3J0
IHdvcmtzOiBpbWFnZSgpIGlzCi0gICAgICAgIC8vIGludGVuZGVkIHRvIGJlIHVzZWQgb25seSB3
aGVuIHJlbmRlcmluZyBpcyAiY29tcGxldGUuIgotICAgICAgICBtX2ltYWdlID0gQml0bWFwSW1h
Z2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZSgKLSAgICAgICAgICAgICptX2RhdGEubV9wbGF0Zm9y
bUNvbnRleHQuYml0bWFwKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcGll
ZEltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6
OmNyZWF0ZSgqbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LmJpdG1hcCgpKTsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkgY29uc3QKK3sKKyNpZiBPUyhMSU5VWCkgfHwgT1MoV0lORE9XUykKKyAgICBjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+YmVnaW5MYXllckNsaXBwZWRUb0ltYWdlKHJlY3QsIHRo
aXMpOworI2VuZGlmCit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAt
MSksCisgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wID0gQ29tcG9z
aXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSkKK3sKKyAgICBS
ZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcGllZEltYWdlKCk7CisgICAgY29udGV4dC0+ZHJh
d0ltYWdlKGltYWdlQ29weS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQ
YXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0KQoreworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29waWVkSW1hZ2UoKTsKKyAg
ICBpbWFnZUNvcHktPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiB9CiAKIHZvaWQgSW1h
Z2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBWZWN0b3I8aW50PiYg
bG9va1VwVGFibGUpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNz
Q29udGV4dFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4
L0dyYXBoaWNzQ29udGV4dFd4LmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzc4LDExICszNzgsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQ
CiAgICAgY2xpcChwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlQnVmZmVyKikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCiBBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRD
VE0oKSBjb25zdAogeyAKICNpZiBVU0UoV1hHQykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MiwxMiArODIsMzcgQEAgU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3Qg
U3RyaQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFn
ZSgpIGNvbnN0Citib29sIEltYWdlQnVmZmVyOjpkcmF3c1VzaW5nQ29weSgpIGNvbnN0Cit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxJ
bWFnZT4gSW1hZ2VCdWZmZXI6OmNvcGllZEltYWdlKCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogICAgIHJldHVybiAwOwogfQogCit2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AgPSBDb21wb3NpdGVTb3Vy
Y2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKQoreworICAgIFJlZlB0cjxJ
bWFnZT4gaW1hZ2VDb3B5ID0gY29waWVkSW1hZ2UoKTsKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2Uo
aW1hZ2VDb3B5LmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwg
dXNlTG93UXVhbGl0eVNjYWxlKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit7
CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUNvcHkgPSBjb3BpZWRJbWFnZSgpOworICAgIGltYWdl
Q29weS0+ZHJhd1BhdHRlcm4oY29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKK30KKwogdm9pZCBJbWFnZUJ1ZmZl
cjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+JikKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFy
VGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFy
VGhlbWVNYWMubW0JKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Ny
b2xsYmFyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM5Niw3ICszOTYsNyBAQCBib29s
IFNjcm9sbGJhclRoZW1lTWFjOjpwYWludChTY3JvbGxiYXIqCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgCiAgICAgICAgIEhJVGhlbWVEcmF3VHJhY2soJnRyYWNrSW5mbywgMCwg
aW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCksIGtISVRoZW1lT3JpZW50
YXRpb25Ob3JtYWwpOwotICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2VCdWZmZXItPmlt
YWdlKCksIERldmljZUNvbG9yU3BhY2UsIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCkubG9jYXRpb24o
KSk7CisgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5nZXQoKSwg
RGV2aWNlQ29sb3JTcGFjZSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5sb2NhdGlvbigpKTsKICAg
ICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzEsNyArNTMxLDcg
QEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZQogICAgICAgICAKICAg
ICAgICAgLy8gVGhlIG1hc2sgaGFzIGJlZW4gY3JlYXRlZC4gIE5vdyB3ZSBqdXN0IG5lZWQgdG8g
Y2xpcCB0byBpdC4KICAgICAgICAgY29udGV4dC0+c2F2ZSgpOwotICAgICAgICBjb250ZXh0LT5j
bGlwVG9JbWFnZUJ1ZmZlcihtYXNrUmVjdCwgbWFza0ltYWdlLmdldCgpKTsKKyAgICAgICAgY29u
dGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIobWFza0ltYWdlLmdldCgpLCBtYXNrUmVjdCk7CiAgICAg
fQogICAgIAogICAgIFN0eWxlSW1hZ2UqIGJnID0gYmdMYXllci0+aW1hZ2UoKTsKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkocmV2aXNp
b24gNjUxNjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNyArMTc0LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXI6OmFwcGx5Q2xpcAogICAgIGlmICghY2xpcHBlckRhdGEtPmNsaXBNYXNrSW1h
Z2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnRleHQtPmNsaXBUb0ltYWdlQnVm
ZmVyKHJlcGFpbnRSZWN0LCBjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJbWFnZS5nZXQoKSk7CisgICAg
Y29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoY2xpcHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UuZ2V0
KCksIHJlcGFpbnRSZWN0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAkocmV2aXNpb24gNjUxNjAp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
Ojpwb3N0QXBwbHlSCiAjaWYgIVBMQVRGT1JNKENHKQogICAgICAgICAgICAgcmVzdWx0SW1hZ2Ut
PnRyYW5zZm9ybUNvbG9yU3BhY2UoTGluZWFyUkdCLCBEZXZpY2VSR0IpOwogI2VuZGlmCi0gICAg
ICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UocmVzdWx0SW1hZ2UtPmltYWdlKCksIG9iamVjdC0+
c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBsYXN0RWZmZWN0LT5zdWJSZWdpb24oKSk7CisgICAgICAg
ICAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIocmVzdWx0SW1hZ2UsIG9iamVjdC0+c3R5bGUo
KS0+Y29sb3JTcGFjZSgpLCBsYXN0RWZmZWN0LT5zdWJSZWdpb24oKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQuY3BwCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDcgQEAg
c3RhdGljIGlubGluZSBBZmZpbmVUcmFuc2Zvcm0gY2xpcFRvVGV4dAogICAgIC8vIFNvIHRoZSBh
Y3R1YWwgbWFza2luZyBwcm9jZXNzIGhhcyB0byBiZSBkb25lIGluIHRoZSBkZXZpY2UgY29vcmRp
bmF0ZSBzcGFjZSBhcyB3ZWxsLgogICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0oYWJzb2x1
dGVUcmFuc2Zvcm1Gcm9tQ29udGV4dChjb250ZXh0KSk7CiAgICAgY29udGV4dC0+Y29uY2F0Q1RN
KHRyYW5zZm9ybS5pbnZlcnNlKCkpOwotICAgIGNvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKHRy
YW5zZm9ybS5tYXBSZWN0KHRleHRSb290QmxvY2stPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkpLCBpbWFnZUJ1ZmZlci5nZXQoKSk7CisgICAgY29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZm
ZXIoaW1hZ2VCdWZmZXIuZ2V0KCksIHRyYW5zZm9ybS5tYXBSZWN0KHRleHRSb290QmxvY2stPnJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKICAgICBjb250ZXh0LT5jb25jYXRDVE0o
dHJhbnNmb3JtKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCShyZXZpc2lvbiA2NTE2
MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXI6OmFwcGx5UmVzb3UKICAgICBpZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgY29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIobWFza2VyRGF0
YS0+bWFza1JlY3QsIG1hc2tlckRhdGEtPm1hc2tJbWFnZS5nZXQoKSk7CisgICAgY29udGV4dC0+
Y2xpcFRvSW1hZ2VCdWZmZXIobWFza2VyRGF0YS0+bWFza0ltYWdlLmdldCgpLCBtYXNrZXJEYXRh
LT5tYXNrUmVjdCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAkocmV2aXNpb24gNjUxNjApCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTgsMTQgKzI5OCwxNSBAQCBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBSZW5k
ZXJTVkdSZXNvdXJjCiAKIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpidWlsZFBhdHRl
cm4oUGF0dGVybkRhdGEqIHBhdHRlcm5EYXRhLCBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiB0aWxl
SW1hZ2UpIGNvbnN0CiB7Ci0gICAgaWYgKCF0aWxlSW1hZ2UtPmltYWdlKCkpIHsKKyAgICBSZWZQ
dHI8SW1hZ2U+IGNvcGllZEltYWdlID0gdGlsZUltYWdlLT5jb3BpZWRJbWFnZSgpOworICAgIGlm
ICghY29waWVkSW1hZ2UpIHsKICAgICAgICAgcGF0dGVybkRhdGEtPnBhdHRlcm4gPSAwOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotCi0gICAgSW50UmVjdCB0aWxlUmVjdCA9IHRpbGVJbWFnZS0+
aW1hZ2UoKS0+cmVjdCgpOworICAgIAorICAgIEludFJlY3QgdGlsZVJlY3QgPSBjb3BpZWRJbWFn
ZS0+cmVjdCgpOwogICAgIGlmICh0aWxlUmVjdC53aWR0aCgpIDw9IHBhdHRlcm5EYXRhLT5ib3Vu
ZGFyaWVzLndpZHRoKCkgJiYgdGlsZVJlY3QuaGVpZ2h0KCkgPD0gcGF0dGVybkRhdGEtPmJvdW5k
YXJpZXMuaGVpZ2h0KCkpIHsKLSAgICAgICAgcGF0dGVybkRhdGEtPnBhdHRlcm4gPSBQYXR0ZXJu
OjpjcmVhdGUodGlsZUltYWdlLT5pbWFnZSgpLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgcGF0dGVy
bkRhdGEtPnBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUoY29waWVkSW1hZ2UsIHRydWUsIHRydWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMzEsMTMgKzMzMiwxMyBAQCB2b2lkIFJl
bmRlclNWR1Jlc291cmNlUGF0dGVybjo6YnVpbGRQYXR0CiAgICAgICAgIG5ld1RpbGVJbWFnZUNv
bnRleHQtPnRyYW5zbGF0ZSgwLCBwYXR0ZXJuRGF0YS0+Ym91bmRhcmllcy5oZWlnaHQoKSk7CiAg
ICAgICAgIGZvciAoaW50IGogPSBudW1YOyBqID4gMDsgLS1qKSB7CiAgICAgICAgICAgICBuZXdU
aWxlSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUocGF0dGVybkRhdGEtPmJvdW5kYXJpZXMud2lkdGgo
KSwgMCk7Ci0gICAgICAgICAgICBuZXdUaWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2UodGlsZUlt
YWdlLT5pbWFnZSgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIHRpbGVSZWN0LCB0aWxlUmVjdCk7
CisgICAgICAgICAgICBuZXdUaWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2UoY29waWVkSW1hZ2Uu
Z2V0KCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgdGlsZVJlY3QsIHRpbGVSZWN0KTsKICAgICAg
ICAgfQogICAgICAgICBuZXdUaWxlSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLXBhdHRlcm5EYXRh
LT5ib3VuZGFyaWVzLndpZHRoKCkgKiBudW1YLCAwKTsKICAgICB9CiAgICAgbmV3VGlsZUltYWdl
Q29udGV4dC0+cmVzdG9yZSgpOwogCi0gICAgcGF0dGVybkRhdGEtPnBhdHRlcm4gPSBQYXR0ZXJu
OjpjcmVhdGUobmV3VGlsZUltYWdlLT5pbWFnZSgpLCB0cnVlLCB0cnVlKTsKKyAgICBwYXR0ZXJu
RGF0YS0+cGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZShuZXdUaWxlSW1hZ2UtPmNvcGllZEltYWdl
KCksIHRydWUsIHRydWUpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbQkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTYzLDcgKzk2Myw4IEBAIGJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50UHJvZ3Jlc3NCYXIoUmUKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5z
bGF0ZSgyICogcmVjdC54KCkgKyByZWN0LndpZHRoKCksIDApOwogICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+c2NhbGUoRmxvYXRTaXplKC0xLCAxKSk7CiAgICAgfQotICAgIHBhaW50SW5mby5j
b250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2VCdWZmZXItPmltYWdlKCksIERldmljZUNvbG9yU3BhY2Us
IHJlY3QubG9jYXRpb24oKSk7CisgICAgCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFn
ZUJ1ZmZlcihpbWFnZUJ1ZmZlci5nZXQoKSwgRGV2aWNlQ29sb3JTcGFjZSwgcmVjdC5sb2NhdGlv
bigpKTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgcmV0dXJuIGZh
bHNlOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gNjUxNjApCisr
KyBXZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
Nyw3ICsxMzcsNyBAQCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVJbWFnZUVsZW1lCiAg
ICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OnJlbmRlclN1YnRyZWVUb0ltYWdlKG1fdGFyZ2V0SW1h
Z2UuZ2V0KCksIHJlbmRlcmVyKTsKICAgICB9CiAKLSAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRl
KG1fdGFyZ2V0SW1hZ2UgPyBtX3RhcmdldEltYWdlLT5pbWFnZSgpIDogbV9jYWNoZWRJbWFnZS0+
aW1hZ2UoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKKyAgICByZXR1cm4gRkVJbWFnZTo6Y3Jl
YXRlKG1fdGFyZ2V0SW1hZ2UgPyBtX3RhcmdldEltYWdlLT5jb3BpZWRJbWFnZSgpIDogbV9jYWNo
ZWRJbWFnZS0+aW1hZ2UoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKIH0KIAogdm9pZCBTVkdG
RUltYWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtV
Ukw+JiB1cmxzKSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNp
b24gNjUxNjApCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyMSwxMiArMjIxLDEzIEBAIE5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRp
dmVJbWFnZUZvckMKICAgICBpZiAoIW1fZnJhbWVDYWNoZSkgewogICAgICAgICBpZiAoIW1fcGFn
ZSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBtX2ZyYW1lQ2FjaGUgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUoKSk7Ci0gICAgICAgIGlmICghbV9mcmFtZUNhY2hlKSAvLyBmYWls
ZWQgdG8gYWxsb2NhdGUgaW1hZ2UKKyAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSk7CisgICAgICAgIGlmICghYnVmZmVyKSAvLyBm
YWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBk
cmF3KG1fZnJhbWVDYWNoZS0+Y29udGV4dCgpLCByZWN0KCksIHJlY3QoKSwgRGV2aWNlQ29sb3JT
cGFjZSwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgICAgIGRyYXcoYnVmZmVyLT5jb250ZXh0
KCksIHJlY3QoKSwgcmVjdCgpLCBEZXZpY2VDb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VPdmVy
KTsKKyAgICAgICAgbV9mcmFtZUNhY2hlID0gYnVmZmVyLT5jb3BpZWRJbWFnZSgpOwogICAgIH0K
LSAgICByZXR1cm4gbV9mcmFtZUNhY2hlLT5pbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOworICAgIHJldHVybiBtX2ZyYW1lQ2FjaGUtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CiB9CiAKIGJvb2wgU1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2Vp
dmVkKQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCShyZXZpc2lvbiA2NTE2MCkKKysrIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMz
LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgSW1hZ2VCdWZmZXI7CiAg
ICAgY2xhc3MgUGFnZTsKICAgICBjbGFzcyBTVkdJbWFnZUNocm9tZUNsaWVudDsKICAgICAKQEAg
LTcyLDcgKzcxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgT3du
UHRyPFNWR0ltYWdlQ2hyb21lQ2xpZW50PiBtX2Nocm9tZUNsaWVudDsKICAgICAgICAgT3duUHRy
PFBhZ2U+IG1fcGFnZTsKLSAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtX2ZyYW1lQ2FjaGU7
CisgICAgICAgIFJlZlB0cjxJbWFnZT4gbV9mcmFtZUNhY2hlOwogICAgIH07CiB9CiAKSW5kZXg6
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcAkocmV2aXNpb24g
NjUxNjApCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgRkVNZXJnZTo6YXBwbHkoRmlsdGVy
KiBmaWx0ZXIpCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tZXJnZUlucHV0cy5z
aXplKCk7IGkrKykgewogICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBjYWxjdWxhdGVEcmF3
aW5nUmVjdChtX21lcmdlSW5wdXRzW2ldLT5zY2FsZWRTdWJSZWdpb24oKSk7Ci0gICAgICAgIGZp
bHRlckNvbnRleHQtPmRyYXdJbWFnZShtX21lcmdlSW5wdXRzW2ldLT5yZXN1bHRJbWFnZSgpLT5p
bWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkZXN0UmVjdCk7CisgICAgICAgIGZpbHRlckNvbnRl
eHQtPmRyYXdJbWFnZUJ1ZmZlcihtX21lcmdlSW5wdXRzW2ldLT5yZXN1bHRJbWFnZSgpLCBEZXZp
Y2VDb2xvclNwYWNlLCBkZXN0UmVjdCk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcAkocmV2aXNpb24gNjUxNjApCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIEZFT2Zmc2V0OjphcHBseShGaWx0ZXIqIGZpbHRlcikK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luLT5zY2FsZWRTdWJSZWdpb24o
KS53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW4tPnNjYWxl
ZFN1YlJlZ2lvbigpLmhlaWdodCgpKTsKIAotICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZSht
X2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkc3RSZWN0KTsK
KyAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwg
RGV2aWNlQ29sb3JTcGFjZSwgZHN0UmVjdCk7CiB9CiAKIHZvaWQgRkVPZmZzZXQ6OmR1bXAoKQpJ
bmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcAkocmV2aXNp
b24gNjUxNjApCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcyLDggKzcyLDggQEAgdm9pZCBGRVRpbGU6OmFwcGx5KEZpbHRl
ciogZmlsdGVyKQogCiAgICAgT3duUHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2UgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHRpbGVSZWN0LnNpemUoKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0KiB0aWxl
SW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlLT5jb250ZXh0KCk7Ci0gICAgdGlsZUltYWdlQ29udGV4
dC0+ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIERldmljZUNvbG9yU3Bh
Y2UsIEludFBvaW50KCkpOwotICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuID0gUGF0dGVybjo6
Y3JlYXRlKHRpbGVJbWFnZS0+aW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7CisgICAgdGlsZUltYWdlQ29u
dGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3Bh
Y2UsIEludFBvaW50KCkpOworICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuID0gUGF0dGVybjo6
Y3JlYXRlKHRpbGVJbWFnZS0+Y29waWVkSW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7CiAKICAgICBBZmZp
bmVUcmFuc2Zvcm0gbWF0cml4OwogICAgIG1hdHJpeC50cmFuc2xhdGUobV9pbi0+c2NhbGVkU3Vi
UmVnaW9uKCkueCgpIC0gc2NhbGVkU3ViUmVnaW9uKCkueCgpLCBtX2luLT5zY2FsZWRTdWJSZWdp
b24oKS55KCkgLSBzY2FsZWRTdWJSZWdpb24oKS55KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64376</attachid>
            <date>2010-08-13 14:39:47 -0700</date>
            <delta_ts>2010-08-16 10:15:59 -0700</delta_ts>
            <desc>Patch incorporating more feedback</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>62940</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA2NTE2MCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC00MDMxLDcgKzQwMzEsNyBAQAogCQlCMkEwMTVBOTBBRjZDRDUzMDA2
QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMkEwMTU5MzBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250
ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QjJBMDE1QUEwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMDE1OTQwQUY2Q0Q1MzAwNkJD
RTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovOyB9OwogCQlCMkEwMTVBQjBBRjZDRDUzMDA2QkNF
MEUgLyogR3JhcGhpY3NUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjJBMDE1OTUwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCMkExMEI5
MjBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFn
ZUJ1ZmZlci5oICovOyB9OworCQlCMkExMEI5MjBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZm
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTEw
QjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQTEwQjk0MEIzODE4RDcwMDA5OUFBNCAv
KiBJbWFnZUJ1ZmZlckNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAq
LzsgfTsKIAkJQjJBMUYyQUEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTFGMkExMENF
RjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5jcHAgKi87IH07CiAJCUIyQTFGMkFCMENF
RjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMUYyQTIwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0Zv
bnRFbGVtZW50LmggKi87IH07CkBAIC00NzYzLDYgKzQ3NjMsNyBAQAogCQlCQ0E4QzgzMTExRTNE
NTMyMDA4MTJGQjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyQ2xpZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E4QzgzMDExRTNENTMyMDA4MTJG
QjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNBOENBNUYxMUU0RTZEMTAwODEyRkI3IC8q
IEJhY2tGb3J3YXJkTGlzdEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkNBOENBNUQxMUU0RTZEMTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkTGlz
dEltcGwuY3BwICovOyB9OwogCQlCQ0E4Q0E2MDExRTRFNkQxMDA4MTJGQjcgLyogQmFja0Zvcndh
cmRMaXN0SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNBOENBNUUxMUU0RTZEMTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkTGlzdEltcGwuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQ0E5NzkxNzEy
MTVEMDU1MDA1QzQ4NUMgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E5NzkxNjEyMTVEMDU1MDA1QzQ4NUMgLyogSW1h
Z2VCdWZmZXJEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQkNBQTkwQzMwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0FBOTBDMjBBN0VCQTYw
MDA4QjEyMjkgLyogU2Nyb2xsYmFyLmNwcCAqLzsgfTsKIAkJQkNBQ0YzQkMxMDcyOTIxQTAwQzBD
OEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0FDRjNCQTEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNv
bnRlbnRVUkxQYXR0ZXJuLmNwcCAqLzsgfTsKIAkJQkNBQ0YzQkQxMDcyOTIxQTAwQzBDOEEzIC8q
IFVzZXJDb250ZW50VVJMUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkNBQ0YzQkIxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJM
UGF0dGVybi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0xMDUwNCw2ICsxMDUwNSw3IEBACiAJCUJDQThDODMwMTFFM0Q1MzIwMDgxMkZCNyAvKiBC
YWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQmFja0ZvcndhcmRDb250cm9sbGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDQThDQTVEMTFFNEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExpc3RJbXBs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhY2tGb3J3YXJkTGlz
dEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0E4Q0E1RTExRTRFNkQx
MDA4MTJGQjcgLyogQmFja0ZvcndhcmRMaXN0SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCYWNrRm9yd2FyZExpc3RJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJDQTk3OTE2MTIxNUQwNTUwMDVDNDg1QyAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQUE5MEMyMEE3RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxi
YXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNjcm9sbGJhci5j
cHA7IHBhdGggPSBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwOyBzb3VyY2VUcmVlID0gU09VUkNFX1JP
T1Q7IH07CiAJCUJDQUNGM0JBMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29udGVudFVSTFBhdHRl
cm4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVXNlckNvbnRlbnRV
UkxQYXR0ZXJuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBQ0YzQkIxMDcy
OTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudFVSTFBhdHRlcm4uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE1NTkwLDYgKzE1NTkyLDcgQEAKIAkJCQlCMkVEOTc3MDBCMUY1NUNF
MDAyNTdEMEYgLyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwICovLAogCQkJCUE4MEQ2NzA3MEU5RTlE
RUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oICovLAogCQkJ
CUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLywKKwkJCQlC
Q0E5NzkxNjEyMTVEMDU1MDA1QzQ4NUMgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCiAJCQkJQjI3
NTM1MzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlQ0cuY3BwICovLAogCQkJCUIyNzUzNTMxMEIw
NTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCAqLywKIAkJCQk0QjM0ODA5MjBFRUY1
MEQ0MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDRy5oICovLApAQCAtMjAxNTYsNiArMjAxNTksNyBA
QAogCQkJCTJFRUQ1NzU4MTIxMDlFRTQwMDc2NTZCQiAvKiBCbG9iUmVnaXN0cnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJFRUQ1NzVDMTIxMDlFRjMwMDc2NTZCQiAvKiBCbG9iRGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTc4QjZGQ0ExMjEyODgyMTAwMTU5NUVGIC8qIEhUTUxWaWV3U291cmNl
UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0E5NzkxNzEyMTVEMDU1MDA1QzQ4NUMgLyog
SW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIwMjE1LDcgKzIwMjE5LDYgQEAK
IAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4
NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJv
amVjdCAiV2ViQ29yZSIgKi87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQi
OwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29k
aW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKSW5kZXg6IFdlYkNv
cmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1ND
YW52YXNWYWx1ZS5jcHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9jc3MvQ1NTQ2FudmFz
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIEltYWdlKiBDU1NDYW52
YXNWYWx1ZTo6aW1hZ2UoUmVuZGVyT2JqZWMKICAgICBIVE1MQ2FudmFzRWxlbWVudCogZWx0ID0g
ZWxlbWVudChyZW5kZXJlci0+ZG9jdW1lbnQoKSk7CiAgICAgaWYgKCFlbHQgfHwgIWVsdC0+YnVm
ZmVyKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBlbHQtPmJ1ZmZlcigpLT5pbWFn
ZSgpOworICAgIHJldHVybiBlbHQtPmNvcGllZEltYWdlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gNjUx
NjApCisrKyBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDksOCArMjA5LDcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogSFRNTENhbnZhc0Vs
ZW1lbgogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50Ojp3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiB7Ci0gICAgaWYgKG1faW1hZ2VCdWZmZXIpCi0gICAgICAgIG1faW1hZ2VCdWZmZXIt
PmNsZWFySW1hZ2UoKTsKKyAgICBtX2NvcGllZEltYWdlLmNsZWFyKCk7IC8vIENsZWFyIG91ciBp
bWFnZSBzbmFwc2hvdCBpZiB3ZSBoYXZlIG9uZS4KIAogICAgIGlmIChSZW5kZXJCb3gqIHJvID0g
cmVuZGVyQm94KCkpIHsKICAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gcm8tPmNvbnRlbnRC
b3hSZWN0KCk7CkBAIC0yODQsOSArMjgzLDEwIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnBh
aW50KEdyYXBoaWNzQ28KICAgICBpZiAoaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkpIHsKICAgICAg
ICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gYnVmZmVyKCk7CiAgICAgICAgIGlmIChpbWFn
ZUJ1ZmZlcikgewotICAgICAgICAgICAgSW1hZ2UqIGltYWdlID0gaW1hZ2VCdWZmZXItPmltYWdl
Rm9yUmVuZGVyaW5nKCk7Ci0gICAgICAgICAgICBpZiAoaW1hZ2UpCi0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBEZXZpY2VDb2xvclNwYWNlLCByKTsKKyAgICAgICAg
ICAgIGlmIChpbWFnZUJ1ZmZlci0+ZHJhd3NVc2luZ0NvcHkoKSkKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5kcmF3SW1hZ2UoY29waWVkSW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgcik7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVy
KGltYWdlQnVmZmVyLCBEZXZpY2VDb2xvclNwYWNlLCByKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtNDIwLDYgKzQyMCwxOCBAQCBJbWFnZUJ1ZmZlciogSFRNTENhbnZhc0VsZW1lbnQ6OmJ1ZmZl
cigpCiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiB9CiAKK0ltYWdlKiBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y29waWVkSW1hZ2UoKSBjb25zdAoreworICAgIGlmICghbV9jb3BpZWRJbWFn
ZSAmJiBidWZmZXIoKSkKKyAgICAgICAgbV9jb3BpZWRJbWFnZSA9IGJ1ZmZlcigpLT5jb3B5SW1h
Z2UoKTsKKyAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQoKTsKK30KKwordm9pZCBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y2xlYXJDb3BpZWRJbWFnZSgpCit7CisgICAgbV9jb3BpZWRJbWFnZS5jbGVh
cigpOworfQorCiBBZmZpbmVUcmFuc2Zvcm0gSFRNTENhbnZhc0VsZW1lbnQ6OmJhc2VUcmFuc2Zv
cm0oKSBjb25zdAogewogICAgIEFTU0VSVChtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcik7CkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBj
bGFzcyBDYW52YXNDb250ZXh0QXR0cmlidXRlczsKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsKK2Ns
YXNzIEltYWdlOwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRTaXplOwogCkBAIC05Myw2
ICs5NCw4IEBAIHB1YmxpYzoKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdD
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAKICAgICBJbWFnZUJ1
ZmZlciogYnVmZmVyKCkgY29uc3Q7CisgICAgSW1hZ2UqIGNvcGllZEltYWdlKCkgY29uc3Q7Cisg
ICAgdm9pZCBjbGVhckNvcGllZEltYWdlKCk7CiAKICAgICBJbnRSZWN0IGNvbnZlcnRMb2dpY2Fs
VG9EZXZpY2UoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAgICAgSW50U2l6ZSBjb252ZXJ0TG9n
aWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OwpAQCAtMTQ5LDYgKzE1Miw4IEBA
IHByaXZhdGU6CiAgICAgLy8gbV9jcmVhdGVkSW1hZ2VCdWZmZXIgbWVhbnMgd2UgdHJpZWQgdG8g
bWFsbG9jIHRoZSBidWZmZXIuICBXZSBkaWRuJ3QgbmVjZXNzYXJpbHkgZ2V0IGl0LgogICAgIG11
dGFibGUgYm9vbCBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcjsKICAgICBtdXRhYmxlIE93blB0cjxJ
bWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKKyAgICAKKyAgICBtdXRhYmxlIFJlZlB0cjxJbWFn
ZT4gbV9jb3BpZWRJbWFnZTsgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IGZvciBwbGF0Zm9y
bXMgdGhhdCBoYXZlIHRvIGNvcHkgdGhlIGltYWdlIGJ1ZmZlciB0byByZW5kZXIgKGFuZCBmb3Ig
Q1NTQ2FudmFzVmFsdWUpLgogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1BhdHRlcm4uY3BwCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAg
dm9pZCBDYW52YXNQYXR0ZXJuOjpwYXJzZVJlcGV0aXRpb25UeXBlKAogICAgIGVjID0gU1lOVEFY
X0VSUjsKIH0KIAotQ2FudmFzUGF0dGVybjo6Q2FudmFzUGF0dGVybihJbWFnZSogaW1hZ2UsIGJv
b2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQorQ2FudmFzUGF0dGVy
bjo6Q2FudmFzUGF0dGVybihQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSwgYm9vbCByZXBlYXRYLCBi
b29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCiAgICAgOiBtX3BhdHRlcm4oUGF0dGVybjo6
Y3JlYXRlKGltYWdlLCByZXBlYXRYLCByZXBlYXRZKSkKICAgICAsIG1fb3JpZ2luQ2xlYW4ob3Jp
Z2luQ2xlYW4pCiB7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaAkocmV2aXNp
b24gNjUxNjApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBzdGF0aWMgdm9pZCBwYXJzZVJlcGV0aXRpb25UeXBlKGNvbnN0IFN0cmluZyYs
IGJvb2wmIHJlcGVhdFgsIGJvb2wmIHJlcGVhdFksIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBjcmVhdGUoSW1hZ2UqIGltYWdlLCBi
b29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gY3JlYXRlKFBhc3NSZWZQdHI8SW1hZ2U+IGlt
YWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQYXR0ZXJuKGltYWdl
LCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikpOwogICAgICAgICB9CkBAIC01MSw3ICs1
MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBvcmlnaW5DbGVhbigpIGNv
bnN0IHsgcmV0dXJuIG1fb3JpZ2luQ2xlYW47IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIENh
bnZhc1BhdHRlcm4oSW1hZ2UqLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmln
aW5DbGVhbik7CisgICAgICAgIENhbnZhc1BhdHRlcm4oUGFzc1JlZlB0cjxJbWFnZT4sIGJvb2wg
cmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKTsKIAogICAgICAgICBSZWZQ
dHI8UGF0dGVybj4gbV9wYXR0ZXJuOwogICAgICAgICBib29sIG1fb3JpZ2luQ2xlYW47CkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
CShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2NCw3ICsxMjY0LDcgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogCiAgICAgc291cmNlQ2FudmFzLT5t
YWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpOwogCi0gICAgYy0+ZHJhd0ltYWdlKGJ1ZmZl
ci0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNvdXJjZVJlY3QsIHN0YXRl
KCkubV9nbG9iYWxDb21wb3NpdGUpOworICAgIGMtPmRyYXdJbWFnZUJ1ZmZlcihidWZmZXIsIERl
dmljZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzb3VyY2VSZWN0LCBzdGF0ZSgpLm1fZ2xvYmFsQ29t
cG9zaXRlKTsKICAgICB3aWxsRHJhdyhkZXN0UmVjdCk7IC8vIFRoaXMgY2FsbCBjb21lcyBhZnRl
ciBkcmF3SW1hZ2UsIHNpbmNlIHRoZSBidWZmZXIgd2UgZHJhdyBpbnRvIG1heSBiZSBvdXIgb3du
LCBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgZGlydHkuCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogQXJndWFibHkgd2lsbERyYXcgc2hvdWxkIGJlY29tZSBkaWREcmF3
IGFuZCBvY2N1ciBhZnRlciBkcmF3aW5nIGNhbGxzIGFuZCBub3QgYmVmb3JlIHRoZW0gdG8gYXZv
aWQgcHJvYmxlbXMgbGlrZSB0aGlzLgogfQpAQCAtMTQ2NCw3ICsxNDY0LDcgQEAgUGFzc1JlZlB0
cjxDYW52YXNQYXR0ZXJuPiBDYW52YXNSZW5kZXJpbgogICAgIENhbnZhc1BhdHRlcm46OnBhcnNl
UmVwZXRpdGlvblR5cGUocmVwZXRpdGlvblR5cGUsIHJlcGVhdFgsIHJlcGVhdFksIGVjKTsKICAg
ICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBDYW52YXNQYXR0ZXJuOjpj
cmVhdGUoY2FudmFzLT5idWZmZXIoKS0+aW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwgY2FudmFz
LT5vcmlnaW5DbGVhbigpKTsKKyAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKGNhbnZh
cy0+Y29waWVkSW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwgY2FudmFzLT5vcmlnaW5DbGVhbigp
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OndpbGxEcmF3KGNvbnN0IEZs
b2F0UmVjdCYgciwgdW5zaWduZWQgb3B0aW9ucykKQEAgLTE4MjAsNyArMTgyMCw3IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEkKICAgICAgICAgbWFza0ltYWdlQ29u
dGV4dC0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uKTsKIAogICAgICAgICBj
LT5zYXZlKCk7Ci0gICAgICAgIGMtPmNsaXBUb0ltYWdlQnVmZmVyKG1hc2tSZWN0LCBtYXNrSW1h
Z2UuZ2V0KCkpOworICAgICAgICBjLT5jbGlwVG9JbWFnZUJ1ZmZlcihtYXNrSW1hZ2UuZ2V0KCks
IG1hc2tSZWN0KTsKICAgICAgICAgZHJhd1N0eWxlLT5hcHBseUZpbGxDb2xvcihjKTsKICAgICAg
ICAgYy0+ZmlsbFJlY3QobWFza1JlY3QpOwogICAgICAgICBjLT5yZXN0b3JlKCk7CkluZGV4OiBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lv
biA2NTE2MCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDkgKzE1OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjptYXJrQ29udGV4dEMKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpCiB7CiAgICAgaWYgKG1fbWFya2VkQ2FudmFzRGlydHkp
IHsKLSAgICAgICAgLy8gRklYTUU6IEl0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IHRvIGNsZWFy
IHRoZSBpbWFnZSBiZWZvcmUgZG9pbmcgYSByZWFkYmFjay4KLSAgICAgICAgLy8gSW52ZXN0aWdh
dGUgd2h5IHRoaXMgaXMgbmVlZGVkIGFuZCByZW1vdmUgaWYgcG9zc2libGUuCi0gICAgICAgIGNh
bnZhcygpLT5idWZmZXIoKS0+Y2xlYXJJbWFnZSgpOworICAgICAgICBjYW52YXMoKS0+Y2xlYXJD
b3BpZWRJbWFnZSgpOwogICAgICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7CiAgICAg
ICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXModGhpcyk7CiAgICAg
fQpAQCAtMjE5Niw3ICsyMTk0LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleElt
YWdlMkQodQogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICB0ZXhJ
bWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBj
YW52YXMtPmJ1ZmZlcigpLT5pbWFnZSgpLAorICAgIAorICAgIHRleEltYWdlMkRJbXBsKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1h
Z2UoKSwKICAgICAgICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEsIGVjKTsKIH0KIApAQCAtMjI5NSw3ICsyMjk0LDggQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkQodQogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFLCBjYW52YXMtPmJ1ZmZlcigpLT5pbWFnZSgpLCBmbGlwWSwgcHJlbXVsdGlw
bHlBbHBoYSwgZWMpOworICAgIAorICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwgZmxpcFksIHBy
ZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgSFRNTFZpZGVvRWxlbWVu
dCogdmlkZW8sCkBAIC0yNDU1LDcgKzI0NTUsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dGV4U3ViSW1hZ2UyCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZv
cm1hdCwgdHlwZSwgY2FudmFzLT5idWZmZXIoKS0+aW1hZ2UoKSwKKyAgICAKKyAgICB0ZXhTdWJJ
bWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUs
IGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwKICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0Zs
aXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIApAQCAtMjU1NCw3ICsyNTU1
LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMgogICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJn
ZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGNhbnZhcy0+YnVmZmVyKCktPmltYWdlKCks
CisgICAgCisgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCBjYW52YXMtPmNvcGllZEltYWdlKCksCiAgICAgICAgICAgICAgICAgICAgICAgZmxp
cFksIHByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDExICs2Myw4IEBAIHZvaWQgR2VuZXJhdGVkSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWMK
ICAgICBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250
ZXh0KCk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCBhZGp1c3RlZFNpemUpLCAqbV9nZW5lcmF0b3IuZ2V0KCkpOwogCi0gICAgLy8gR3JhYiB0
aGUgZmluYWwgaW1hZ2UgZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgIEltYWdlKiBiaXRtYXAg
PSBpbWFnZUJ1ZmZlci0+aW1hZ2UoKTsKLQotICAgIC8vIE5vdyBqdXN0IGNhbGwgZHJhd1RpbGVk
IG9uIHRoYXQgaW1hZ2UuCi0gICAgYml0bWFwLT5kcmF3UGF0dGVybihjb250ZXh0LCBhZGp1c3Rl
ZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBv
c2l0ZU9wLCBkZXN0UmVjdCk7CisgICAgLy8gVGlsZSB0aGUgaW1hZ2UgYnVmZmVyIGludG8gdGhl
IGNvbnRleHQuCisgICAgaW1hZ2VCdWZmZXItPmRyYXdQYXR0ZXJuKGNvbnRleHQsIGFkanVzdGVk
U3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9z
aXRlT3AsIGRlc3RSZWN0KTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
Miw2ICs0NDIsNTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYQog
ICAgICAgICByZXN0b3JlKCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXIqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29u
c3QgSW50UG9pbnQmIHAsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIGRyYXdJbWFnZUJ1
ZmZlcihpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBwLCBJbnRSZWN0KDAsIDAsIC0xLCAtMSksIG9w
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiByLCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCit7CisgICAgZHJh
d0ltYWdlQnVmZmVyKGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIHIsIEludFJlY3QoMCwgMCwgLTEs
IC0xKSwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29s
b3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgc3R5bGVD
b2xvclNwYWNlLCBJbnRSZWN0KGRlc3QsIHNyY1JlY3Quc2l6ZSgpKSwgc3JjUmVjdCwgb3ApOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBp
bWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3QsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1
YWxpdHlTY2FsZSkKK3sKKyAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIHN0eWxlQ29sb3JTcGFj
ZSwgRmxvYXRSZWN0KGRlc3QpLCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogaW1h
Z2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFs
aXR5U2NhbGUpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2UpCisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgZmxvYXQgdHN3ID0gc3JjLndpZHRoKCk7CisgICAg
ZmxvYXQgdHNoID0gc3JjLmhlaWdodCgpOworICAgIGZsb2F0IHR3ID0gZGVzdC53aWR0aCgpOwor
ICAgIGZsb2F0IHRoID0gZGVzdC5oZWlnaHQoKTsKKworICAgIGlmICh0c3cgPT0gLTEpCisgICAg
ICAgIHRzdyA9IGltYWdlLT53aWR0aCgpOworICAgIGlmICh0c2ggPT0gLTEpCisgICAgICAgIHRz
aCA9IGltYWdlLT5oZWlnaHQoKTsKKworICAgIGlmICh0dyA9PSAtMSkKKyAgICAgICAgdHcgPSBp
bWFnZS0+d2lkdGgoKTsKKyAgICBpZiAodGggPT0gLTEpCisgICAgICAgIHRoID0gaW1hZ2UtPmhl
aWdodCgpOworCisgICAgaWYgKHVzZUxvd1F1YWxpdHlTY2FsZSkgeworICAgICAgICBzYXZlKCk7
CisgICAgICAgIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbk5vbmUp
OworICAgIH0KKworICAgIGltYWdlLT5kcmF3KHRoaXMsIHN0eWxlQ29sb3JTcGFjZSwgZGVzdCwg
c3JjLCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICAKKyAgICBpZiAodXNlTG93UXVhbGl0
eVNjYWxlKQorICAgICAgICByZXN0b3JlKCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojph
ZGRSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9w
TGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsCiAgICAgY29uc3QgSW50U2l6ZSYgYm90dG9t
TGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQpCiB7CkBAIC00NjAsNiArNTExLDEzIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QKICAgICBjbGlwT3V0KFBh
dGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRv
bUxlZnQsIGJvdHRvbVJpZ2h0KSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7
CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGJ1ZmZl
ci0+Y2xpcCh0aGlzLCByZWN0KTsKK30KKwogaW50IEdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdp
bmdNb2RlKCkKIHsKICAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnRleHREcmF3aW5nTW9kZTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2
aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRGFzaEFycmF5
LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQYXRoLmgi
CiAjaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgpAQCAtMTI1LDcgKzEyNiw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKICAgICBjbGFzcyBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UHJp
dmF0ZTsKLSAgICBjbGFzcyBJbWFnZUJ1ZmZlcjsKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNz
IFBhdGg7CiAgICAgY2xhc3MgUGF0dGVybjsKQEAgLTIzOCw2ICsyMzgsMTMgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlOjpUaWxlUnVsZSBo
UnVsZSA9IEltYWdlOjpTdHJldGNoVGlsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlID0gSW1hZ2U6
OlN0cmV0Y2hUaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJh
dG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxz
ZSk7CiAKKyAgICAgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmLCBDb21wb3NpdGVPcGVyYXRvciA9
IENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgICAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiwgQ29t
cG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlT
Y2FsZSA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIq
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3Vy
Y2VPdmVyKTsKKyAgICAgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlciwg
Ym9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZHJhd0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgw
LCAwLCAtMSwgLTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVy
YXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gZmFs
c2UpOworCiAgICAgICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBv
bGF0aW9uUXVhbGl0eSk7CiAgICAgICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoKSBjb25zdDsKIApAQCAtMjQ4LDggKzI1NSw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGlwT3V0RWxsaXBzZUluUmVjdChjb25zdCBJbnRSZWN0
Jik7CiAgICAgICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmLCBjb25z
dCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6
ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQpOwogICAgICAgICB2b2lk
IGNsaXBQYXRoKFdpbmRSdWxlKTsKLSAgICAgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZUJ1ZmZlciopOwogICAgICAgICB2b2lkIGNsaXBDb252
ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqLCBib29sIGFudGlh
bGlhcyA9IHRydWUpOworICAgICAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
KiwgY29uc3QgRmxvYXRSZWN0Jik7CiAKICAgICAgICAgaW50IHRleHREcmF3aW5nTW9kZSgpOwog
ICAgICAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShpbnQpOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2UuaAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw2ICsxNTAsOSBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2U+IGxvYWRQbGF0Zm9ybVRoZW1lSWNvbihjb25zdCBj
aGFyKiBuYW1lLCBpbnQgc2l6ZSk7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CisKIHByb3Rl
Y3RlZDoKICAgICBJbWFnZShJbWFnZU9ic2VydmVyKiA9IDApOwogCkBAIC0xNjcsOSArMTcwLDYg
QEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKSB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgQ29sb3Igc29saWRDb2xvcigpIGNvbnN0IHsg
cmV0dXJuIENvbG9yKCk7IH0KICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOwotCiBwcml2YXRlOgogICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsgLy8gVGhlIGVuY29kZWQgcmF3IGRhdGEgZm9y
IHRoZSBpbWFnZS4gCiAgICAgSW1hZ2VPYnNlcnZlciogbV9pbWFnZU9ic2VydmVyOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24gNjUzMjkpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgSW1hZ2VCdWZmZXJfaAogCiAjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2Uu
aCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCkBA
IC03MSwxNiArNzIsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB+SW1hZ2VCdWZm
ZXIoKTsKIAogICAgICAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9CisgICAgICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgp
OyB9CisgICAgICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7
IH0KKyAgICAgICAgCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCgpIGNvbnN0Owog
Ci0gICAgICAgIEltYWdlKiBpbWFnZSgpIGNvbnN0OwotI2lmIFBMQVRGT1JNKFFUKQotICAgICAg
ICBJbWFnZSogaW1hZ2VGb3JSZW5kZXJpbmcoKSBjb25zdDsKLSNlbHNlCi0gICAgICAgIEltYWdl
KiBpbWFnZUZvclJlbmRlcmluZygpIGNvbnN0IHsgcmV0dXJuIGltYWdlKCk7IH0KLSNlbmRpZgot
Ci0gICAgICAgIHZvaWQgY2xlYXJJbWFnZSgpIHsgbV9pbWFnZS5jbGVhcigpOyB9CisgICAgICAg
IGJvb2wgZHJhd3NVc2luZ0NvcHkoKSBjb25zdDsgLy8gSWYgdGhlIGltYWdlIGJ1ZmZlciBoYXMg
dG8gcmVuZGVyIHVzaW5nIGEgY29waWVkIGltYWdlLCBpdCB3aWxsIHJldHVybiB0cnVlLgorICAg
ICAgICBQYXNzUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoKSBjb25zdDsgLy8gUmV0dXJuIGEgbmV3
IGltYWdlIHRoYXQgaXMgYSBjb3B5IG9mIHRoZSBidWZmZXIuCiAKICAgICAgICAgUGFzc1JlZlB0
cjxJbWFnZURhdGE+IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29u
c3Q7CiAgICAgICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKGNvbnN0IEludFJlY3QmKSBjb25zdDsKQEAgLTk2LDEyICs5NCwyMyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAjZWxzZQogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgp
IGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9zaXplLmhl
aWdodCgpKTsgfQogI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGNsaXAoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisKKyAgICAgICAgLy8gVGhl
IGRyYXcgbWV0aG9kIGRyYXdzIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIHdpdGhvdXQgY29w
eWluZyBpdC4KKyAgICAgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29s
IHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKKyAgICAgICAgZnJpZW5kIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEdlbmVyYXRlZEltYWdl
OworCiAgICAgcHJpdmF0ZToKICAgICAgICAgSW1hZ2VCdWZmZXJEYXRhIG1fZGF0YTsKIAogICAg
ICAgICBJbnRTaXplIG1fc2l6ZTsKICAgICAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gbV9j
b250ZXh0OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKIAogI2lmICFQ
TEFURk9STShDRykKICAgICAgICAgVmVjdG9yPGludD4gbV9saW5lYXJSZ2JMVVQ7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAJKHJldmlzaW9uIDY1MzI5KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhdHRlcm46OlBhdHRlcm4oSW1h
Z2UqIGltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSkKK1BhdHRlcm46OlBhdHRlcm4o
UGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKQogICAg
IDogbV90aWxlSW1hZ2UoaW1hZ2UpCiAgICAgLCBtX3JlcGVhdFgocmVwZWF0WCkKICAgICAsIG1f
cmVwZWF0WShyZXBlYXRZKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgJKHJl
dmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgUGF0dGVybl9oCiAKICNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJJbWFnZS5oIgogCiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNjQsMTEg
KzY1LDEwIEBAIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1QYXR0ZXJuUHRyOwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci1jbGFzcyBJbWFnZTsKIAogY2xhc3Mg
UGF0dGVybiA6IHB1YmxpYyBSZWZDb3VudGVkPFBhdHRlcm4+IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxQYXR0ZXJuPiBjcmVhdGUoSW1hZ2UqIHRpbGVJbWFnZSwgYm9vbCByZXBl
YXRYLCBib29sIHJlcGVhdFkpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGF0dGVybj4gY3JlYXRl
KFBhc3NSZWZQdHI8SW1hZ2U+IHRpbGVJbWFnZSwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFkp
CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBhdHRlcm4odGlsZUltYWdlLCBy
ZXBlYXRYLCByZXBlYXRZKSk7CiAgICAgfQpAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCByZXBlYXRZKCkgY29uc3QgeyByZXR1cm4gbV9yZXBlYXRZOyB9CiAKIHByaXZhdGU6Ci0g
ICAgUGF0dGVybihJbWFnZSosIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKTsKKyAgICBQYXR0
ZXJuKFBhc3NSZWZQdHI8SW1hZ2U+LCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSk7CiAKICAg
ICBSZWZQdHI8SW1hZ2U+IG1fdGlsZUltYWdlOwogICAgIGJvb2wgbV9yZXBlYXRYOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkw
OCwxNCArOTA4LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlYwog
ICAgIGNhaXJvX3NldF9maWxsX3J1bGUoY3IsIHNhdmVkRmlsbFJ1bGUpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KEZsb2F0U2l6ZSBjb25zdCYgc2l6
ZSwgZmxvYXQsIENvbG9yIGNvbnN0JiwgQ29sb3JTcGFjZSkKIHsKICAgICAvLyBDYWlybyBkb2Vz
bid0IHN1cHBvcnQgc2hhZG93cyBuYXRpdmVseSwgdGhleSBhcmUgZHJhd24gbWFudWFsbHkgaW4g
dGhlIGRyYXcqCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTcsMjYgKzk3LDM0IEBAIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQo
KSAKICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi1JbWFnZSogSW1hZ2VCdWZmZXI6
OmltYWdlKCkgY29uc3QKK2Jvb2wgSW1hZ2VCdWZmZXI6OmRyYXdzVXNpbmdDb3B5KCkgY29uc3QK
IHsKLSAgICBpZiAoIW1faW1hZ2UpIHsKLSAgICAgICAgLy8gSXQncyBhc3N1bWVkIHRoYXQgaWYg
aW1hZ2UoKSBpcyBjYWxsZWQsIHRoZSBhY3R1YWwgcmVuZGVyaW5nIHRvIHRoZQotICAgICAgICAv
LyBHcmFwaGljc0NvbnRleHQgbXVzdCBiZSBkb25lLgotICAgICAgICBBU1NFUlQoY29udGV4dCgp
KTsKLQotICAgICAgICAvLyBUaGlzIGNyZWF0ZXMgYSBDT1BZIG9mIHRoZSBpbWFnZSBhbmQgd2ls
bCBjYWNoZSB0aGF0IGNvcHkuIFRoaXMgbWVhbnMKLSAgICAgICAgLy8gdGhhdCBpZiBzdWJzZXF1
ZW50IG9wZXJhdGlvbnMgdGFrZSBwbGFjZSBvbiB0aGUgY29udGV4dCwgbmVpdGhlciB0aGUKLSAg
ICAgICAgLy8gY3VycmVudGx5LXJldHVybmVkIGltYWdlLCBub3IgdGhlIHJlc3VsdHMgb2YgZnV0
dXJlIGltYWdlKCkgY2FsbHMsCi0gICAgICAgIC8vIHdpbGwgY29udGFpbiB0aGF0IG9wZXJhdGlv
bi4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhpcyBzZWVtcyBzaWxseSwgYnV0IGlzIHRoZSB3
YXkgdGhlIENHIHBvcnQgd29ya3M6IGltYWdlKCkgaXMKLSAgICAgICAgLy8gaW50ZW5kZWQgdG8g
YmUgdXNlZCBvbmx5IHdoZW4gcmVuZGVyaW5nIGlzICJjb21wbGV0ZS4iCi0gICAgICAgIGNhaXJv
X3N1cmZhY2VfdCogbmV3c3VyZmFjZSA9IGNvcHlTdXJmYWNlKG1fZGF0YS5tX3N1cmZhY2UpOwor
ICAgIHJldHVybiB0cnVlOworfQogCi0gICAgICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFz
ZSB0aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KLSAgICAgICAgbV9pbWFnZSA9
IEJpdG1hcEltYWdlOjpjcmVhdGUobmV3c3VyZmFjZSk7Ci0gICAgfQotICAgIHJldHVybiBtX2lt
YWdlLmdldCgpOworUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSgpIGNv
bnN0Cit7CisgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3Vy
ZmFjZSBvbiBkZXN0cnVjdGlvbgorICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlT
dXJmYWNlKG1fZGF0YS5tX3N1cmZhY2UpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwg
LTEsIC0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AgPSBD
b21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKQorewor
ICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29waWVkSW1hZ2UoKTsKKyAgICBjb250ZXh0
LT5kcmF3SW1hZ2UoaW1hZ2VDb3B5LmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QpCit7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUNvcHkgPSBjb3BpZWRJbWFnZSgp
OworICAgIGltYWdlQ29weS0+ZHJhd1BhdHRlcm4oY29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKIH0KIAogdm9p
ZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3Rvcjxp
bnQ+JiBsb29rVXBUYWJsZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCShyZXZpc2lvbiA2NTMyOSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03NTMsMTggKzc1Myw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5k
ZWRSZWMKICAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IElt
YWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZvcm1Db250
ZXh0KCksIHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOwotICAgIENHQ29udGV4
dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCAxLCAtMSk7Ci0gICAgQ0dDb250ZXh0Q2xpcFRv
TWFzayhwbGF0Zm9ybUNvbnRleHQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVjdC5zaXpl
KCkpLCBpbWFnZUJ1ZmZlci0+aW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpKTsKLSAgICBDR0NvbnRl
eHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgMSwgLTEpOwotICAgIENHQ29udGV4dFRyYW5z
bGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgLXJlY3QueCgpLCAtcmVjdC55KCkgLSByZWN0Lmhl
aWdodCgpKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCShyZXZp
c2lvbiA2NTMyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
Ry5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDEwICs1NiwxMCBAQCBJbWFnZUJ1ZmZlcjo6SW1h
Z2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgCiAgICAgLCBtX3NpemUoc2l6ZSkKIHsKICAgICBzdWNj
ZXNzID0gZmFsc2U7ICAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGZhaWx1cmUuCi0gICAgdW5z
aWduZWQgYnl0ZXNQZXJSb3c7CiAgICAgaWYgKHNpemUud2lkdGgoKSA8IDAgfHwgc2l6ZS5oZWln
aHQoKSA8IDApCiAgICAgICAgIHJldHVybjsKLSAgICBieXRlc1BlclJvdyA9IHNpemUud2lkdGgo
KTsKKworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0gc2l6ZS53aWR0aCgpOwogICAgIGlmIChp
bWFnZUNvbG9yU3BhY2UgIT0gR3JheVNjYWxlKSB7CiAgICAgICAgIC8vIFByb3RlY3QgYWdhaW5z
dCBvdmVyZmxvdwogICAgICAgICBpZiAoYnl0ZXNQZXJSb3cgPiAweDNGRkZGRkZGKQpAQCAtNjcs
NiArNjcsNyBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgCiAgICAg
ICAgIGJ5dGVzUGVyUm93ICo9IDQ7CiAgICAgfQogCisgICAgc2l6ZV90IGRhdGFTaXplID0gc2l6
ZS5oZWlnaHQoKSAqIGJ5dGVzUGVyUm93OwogICAgIGlmICghdHJ5RmFzdENhbGxvYyhzaXplLmhl
aWdodCgpLCBieXRlc1BlclJvdykuZ2V0VmFsdWUobV9kYXRhLm1fZGF0YSkpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtODQsMTQgKzg1LDE2IEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25z
dCBJbnRTaXplJiAKICAgICAgICAgY2FzZSBMaW5lYXJSR0I6CiAgICAgICAgICAgICBjb2xvclNw
YWNlLmFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZUdlbmVy
aWNSR0JMaW5lYXIpKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCiAjZW5kaWYK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGNvbG9yU3BhY2UuYWRvcHRDRihDR0NvbG9y
U3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKKyAg
ICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbyA9IChpbWFnZUNvbG9yU3BhY2UgPT0gR3JheVNjYWxl
KSA/IGtDR0ltYWdlQWxwaGFOb25lIDoga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0Owog
ICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dChBZG9wdENGLCBDR0JpdG1hcENv
bnRleHRDcmVhdGUobV9kYXRhLm1fZGF0YSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCA4
LCBieXRlc1BlclJvdywKLSAgICAgICAgY29sb3JTcGFjZS5nZXQoKSwgKGltYWdlQ29sb3JTcGFj
ZSA9PSBHcmF5U2NhbGUpID8ga0NHSW1hZ2VBbHBoYU5vbmUgOiBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZExhc3QpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UuZ2V0KCksIGJpdG1hcEluZm8p
KTsKICAgICBpZiAoIWNnQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCkBAIC05OSw2ICsxMDIs
MTIgQEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIAogICAgIG1fY29u
dGV4dC0+c2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CiAgICAgbV9jb250ZXh0LT50cmFuc2xhdGUo
MCwgLXNpemUuaGVpZ2h0KCkpOwogICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgIAorICAgIC8vIENy
ZWF0ZSBhIGxpdmUgaW1hZ2UgdGhhdCB3cmFwcyB0aGUgZGF0YS4KKyAgICBSZXRhaW5QdHI8Q0dE
YXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlcihBZG9wdENGLCBDR0RhdGFQcm92aWRlckNyZWF0
ZVdpdGhEYXRhKDAsIG1fZGF0YS5tX2RhdGEsIGRhdGFTaXplLCAwKSk7CisgICAgQ0dJbWFnZVJl
ZiBjZ0ltYWdlID0gQ0dJbWFnZUNyZWF0ZShtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgp
LCA4LCBpbWFnZUNvbG9yU3BhY2UgIT0gR3JheVNjYWxlID8gMzIgOiA4LCBieXRlc1BlclJvdywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UuZ2V0KCks
IGJpdG1hcEluZm8sIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50
ZW50RGVmYXVsdCk7CisgICAgbV9kYXRhLm1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNn
SW1hZ2UpOwogfQogCiBJbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkKQEAgLTExMSwxNyArMTIw
LDQ3IEBAIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSAKICAgICByZXR1
cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi1JbWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29u
c3QKK2Jvb2wgSW1hZ2VCdWZmZXI6OmRyYXdzVXNpbmdDb3B5KCkgY29uc3QKIHsKLSAgICBpZiAo
IW1faW1hZ2UpIHsKLSAgICAgICAgLy8gSXQncyBhc3N1bWVkIHRoYXQgaWYgaW1hZ2UoKSBpcyBj
YWxsZWQsIHRoZSBhY3R1YWwgcmVuZGVyaW5nIHRvIHRoZQotICAgICAgICAvLyBHcmFwaGljc0Nv
bnRleHQgbXVzdCBiZSBkb25lLgotICAgICAgICBBU1NFUlQoY29udGV4dCgpKTsKLSAgICAgICAg
Q0dJbWFnZVJlZiBjZ0ltYWdlID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgp
LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFz
ZSB0aGUgcGFzc2VkIGluIENHSW1hZ2Ugb24gZGVzdHJ1Y3Rpb24KLSAgICAgICAgbV9pbWFnZSA9
IEJpdG1hcEltYWdlOjpjcmVhdGUoY2dJbWFnZSk7Ci0gICAgfQotICAgIHJldHVybiBtX2ltYWdl
LmdldCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VC
dWZmZXI6OmNvcHlJbWFnZSgpIGNvbnN0Cit7CisgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxl
YXNlIHRoZSBwYXNzZWQgaW4gQ0dJbWFnZSBvbiBkZXN0cnVjdGlvbgorICAgIHJldHVybiBCaXRt
YXBJbWFnZTo6Y3JlYXRlKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxh
dGZvcm1Db250ZXh0KCkpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQqIGRlc3RDb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAorICAgICAgICAgICAg
ICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUp
Cit7CisgICAgaWYgKGRlc3RDb250ZXh0ID09IGNvbnRleHQoKSkgeworICAgICAgICAvLyBXZSdy
ZSBkcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIuICBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3Jr
LCB3ZSBuZWVkIHRvIGNvcHkgdGhlIHNvdXJjZSBidWZmZXIgZmlyc3QuCisgICAgICAgIFJlZlB0
cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZSgpOworICAgICAgICBkZXN0Q29udGV4dC0+ZHJhd0lt
YWdlKGNvcHkuZ2V0KCksIERldmljZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwg
dXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZGVzdENvbnRleHQtPmRy
YXdJbWFnZShtX2RhdGEubV9pbWFnZS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCkKK3sKKyAgICBpZiAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSB7Cisg
ICAgICAgIC8vIFdlJ3JlIGRyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlci4gIEluIG9yZGVyIGZv
ciB0aGlzIHRvIHdvcmssIHdlIG5lZWQgdG8gY29weSB0aGUgc291cmNlIGJ1ZmZlciBmaXJzdC4K
KyAgICAgICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKCk7CisgICAgICAgIGNvcHkt
PmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFz
ZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOworICAgIH0gZWxzZQorICAgICAgICBt
X2RhdGEubV9pbWFnZS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7Cit9CisKK3Zv
aWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCA9
IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShw
bGF0Zm9ybUNvbnRleHQsIHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOworICAg
IENHQ29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCwgMSwgLTEpOworICAgIENHQ29udGV4
dENsaXBUb01hc2socGxhdGZvcm1Db250ZXh0LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCByZWN0
LnNpemUoKSksIG1fZGF0YS5tX2ltYWdlLT5nZXRDR0ltYWdlUmVmKCkpOworICAgIENHQ29udGV4
dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCwgMSwgLTEpOworICAgIENHQ29udGV4dFRyYW5zbGF0
ZUNUTShwbGF0Zm9ybUNvbnRleHQsIC1yZWN0LngoKSwgLXJlY3QueSgpIC0gcmVjdC5oZWlnaHQo
KSk7CiB9CiAKIHRlbXBsYXRlIDxNdWx0aXBseSBtdWx0aXBsaWVkPgpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YS5oCShyZXZpc2lvbiA2NTMy
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDkgQEAKICNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhX2gK
ICNkZWZpbmUgSW1hZ2VCdWZmZXJEYXRhX2gKIAorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlICJJbWFnZS5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEludFNpemU7
CkBAIC0zNSw2ICszOCw3IEBAIHB1YmxpYzoKICAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50
U2l6ZSYpOwogCiAgICAgdm9pZCogbV9kYXRhOworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsK
IH07CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCShyZXZpc2lvbiA2NTMy
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6
YXBwbHkoRmlsdGVyKiBmaWx0ZXIKICAgICBpZiAoIWZpbHRlckNvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgp
LT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5z
Y2FsZWRTdWJSZWdpb24oKSkpOworICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlciht
X2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVj
dChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50
UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKICAgICBQYXNzUmVmUHRyPEltYWdlRGF0
YT4gaW1hZ2VEYXRhKHJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFn
ZVJlY3QpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMjYg
KzEzMSwyNiBAQCB2b2lkIEZFQ29tcG9zaXRlOjphcHBseShGaWx0ZXIqIGZpbHRlcikKICAgICBG
bG9hdFJlY3Qgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLmYsIDAuZiwgLTEuZiwgLTEuZik7CiAgICAg
c3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6Ci0g
ICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luMi0+cmVzdWx0SW1hZ2UoKS0+aW1h
Z2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxl
ZFN1YlJlZ2lvbigpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5y
ZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5n
UmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5k
cmF3SW1hZ2VCdWZmZXIobV9pbjItPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNh
bGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSkpOworICAgICAgICBm
aWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNl
Q29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoKICAg
ICAgICAgZmlsdGVyQ29udGV4dC0+c2F2ZSgpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5jbGlw
VG9JbWFnZUJ1ZmZlcihjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9u
KCkpLCBtX2luMi0+cmVzdWx0SW1hZ2UoKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJ
bWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxj
dWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOworICAgICAgICBmaWx0
ZXJDb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBjYWxjdWxh
dGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAgICAgICAgZmlsdGVy
Q29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9y
U3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKSk7CiAg
ICAgICAgIGZpbHRlckNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJ
bWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxj
dWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOwotICAgICAgICBmaWx0
ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIERldmlj
ZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24o
KSksIHNyY1JlY3QsIENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0KTsKKyAgICAgICAgZmlsdGVyQ29u
dGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3Bh
Y2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKSk7CisgICAg
ICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luMi0+cmVzdWx0SW1hZ2UoKSwg
RGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJl
Z2lvbigpKSwgc3JjUmVjdCwgQ29tcG9zaXRlRGVzdGluYXRpb25PdXQpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIGZpbHRlckNv
bnRleHQtPmRyYXdJbWFnZShtX2luMi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29s
b3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigpKSk7
Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5p
bWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2Fs
ZWRTdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZVNvdXJjZUF0b3ApOworICAgICAgICBm
aWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbjItPnJlc3VsdEltYWdlKCksIERldmlj
ZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24o
KSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0
SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2Nh
bGVkU3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVTb3VyY2VBdG9wKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6Ci0gICAgICAgIGZpbHRl
ckNvbnRleHQtPmRyYXdJbWFnZShtX2luMi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNl
Q29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigp
KSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgp
LT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5z
Y2FsZWRTdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZVhPUik7CisgICAgICAgIGZpbHRl
ckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luMi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29s
b3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigpKSk7
CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFn
ZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRT
dWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZVhPUik7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzogewogICAgICAgICBJbnRSZWN0
IGVmZmVjdEFEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnNjYWxl
ZFN1YlJlZ2lvbigpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VBbHBoYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUFscGhhLmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Myw5ICs2Myw5IEBAIHZvaWQgU291cmNlQWxwaGE6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogCiAg
ICAgc2V0SXNBbHBoYUltYWdlKHRydWUpOwogCi0gICAgRmxvYXRSZWN0IGltYWdlUmVjdChGbG9h
dFBvaW50KCksIGZpbHRlci0+c291cmNlSW1hZ2UoKS0+aW1hZ2UoKS0+c2l6ZSgpKTsKKyAgICBG
bG9hdFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgZmlsdGVyLT5zb3VyY2VJbWFnZSgpLT5z
aXplKCkpOwogICAgIGZpbHRlckNvbnRleHQtPnNhdmUoKTsKLSAgICBmaWx0ZXJDb250ZXh0LT5j
bGlwVG9JbWFnZUJ1ZmZlcihpbWFnZVJlY3QsIGZpbHRlci0+c291cmNlSW1hZ2UoKSk7CisgICAg
ZmlsdGVyQ29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoZmlsdGVyLT5zb3VyY2VJbWFnZSgpLCBp
bWFnZVJlY3QpOwogICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KGltYWdlUmVjdCwgQ29sb3I6
OmJsYWNrLCBEZXZpY2VDb2xvclNwYWNlKTsKICAgICBmaWx0ZXJDb250ZXh0LT5yZXN0b3JlKCk7
CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhp
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUdyYXBoaWMuY3BwCShyZXZpc2lvbiA2NTMyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyAr
NjAsNyBAQCB2b2lkIFNvdXJjZUdyYXBoaWM6OmFwcGx5KEZpbHRlciogZmlsdGVyCiAgICAgaWYg
KCFmaWx0ZXJDb250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBmaWx0ZXJDb250ZXh0LT5k
cmF3SW1hZ2UoZmlsdGVyLT5zb3VyY2VJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNl
LCBJbnRQb2ludCgpKTsKKyAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoZmlsdGVy
LT5zb3VyY2VJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBJbnRQb2ludCgpKTsKIH0KIAogdm9p
ZCBTb3VyY2VHcmFwaGljOjpkdW1wKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCShyZXZpc2lvbiA2NTMyOSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTg1LDIzICsxMTg1LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBP
dXRFbGxpcHNlSW5SZQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0lt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgZmxvYXRSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlciog
aW1hZ2UpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgUVBpeG1hcCogbmF0aXZlSW1hZ2UgPSBpbWFnZS0+aW1hZ2UoKS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIW5hdGl2ZUltYWdlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBJbnRSZWN0IHJlY3QoZmxvYXRSZWN0KTsKLSAgICBRUGl4bWFwIGFscGhhTWFzayA9
ICpuYXRpdmVJbWFnZTsKLSAgICBpZiAoYWxwaGFNYXNrLndpZHRoKCkgIT0gcmVjdC53aWR0aCgp
IHx8IGFscGhhTWFzay5oZWlnaHQoKSAhPSByZWN0LmhlaWdodCgpKQotICAgICAgICBhbHBoYU1h
c2sgPSBhbHBoYU1hc2suc2NhbGVkKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0KLSAg
ICBtX2RhdGEtPmxheWVycy5wdXNoKG5ldyBUcmFuc3BhcmVuY3lMYXllcihtX2RhdGEtPnAoKSwg
bV9kYXRhLT5wKCktPnRyYW5zZm9ybSgpLm1hcFJlY3QocmVjdCksIDEuMCwgYWxwaGFNYXNrKSk7
Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChjb25z
dCBJbnRSZWN0JiByZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCB0aGlja25lc3MpCiB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0ltYWdlQnVmZmVyRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VCdWZmZXJEYXRhLmgJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlckRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsOSBAQAogI2lmbmRlZiBJbWFnZUJ1ZmZlckRhdGFfaAogI2RlZmluZSBJbWFnZUJ1
ZmZlckRhdGFfaAogCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgIkltYWdlLmgi
CisKICNpbmNsdWRlIDxRUGFpbnRlcj4KICNpbmNsdWRlIDxRUGl4bWFwPgogCkBAIC00MSw2ICs0
NCw3IEBAIHB1YmxpYzoKIAogICAgIFFQaXhtYXAgbV9waXhtYXA7CiAgICAgT3duUHRyPFFQYWlu
dGVyPiBtX3BhaW50ZXI7CisgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogfTsKIAogfSAgLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1h
Z2VCdWZmZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9JbWFnZUJ1ZmZlclF0LmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgogI2luY2x1ZGUgIlN0aWxsSW1hZ2VRdC5oIgorI2luY2x1ZGUgIlRyYW5zcGFyZW5jeUxh
eWVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaW5jbHVkZSA8UUJ1ZmZl
cj4KQEAgLTc0LDYgKzc1LDggQEAgSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29u
c3QgSQogICAgIGJydXNoLnNldENvbG9yKFF0OjpibGFjayk7CiAgICAgcGFpbnRlci0+c2V0QnJ1
c2goYnJ1c2gpOwogICAgIHBhaW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29t
cG9zaXRpb25Nb2RlX1NvdXJjZU92ZXIpOworICAgIAorICAgIG1fZGF0YS5tX2ltYWdlID0gU3Rp
bGxJbWFnZTo6Y3JlYXRlRm9yUmVuZGVyaW5nKCZtX2RhdGEubV9waXhtYXApOwogfQogCiBJbWFn
ZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSW1hZ2VDb2xvclNwYWNl
LCBib29sJiBzdWNjZXNzKQpAQCAtOTgsMjQgKzEwMSw1MCBAQCBHcmFwaGljc0NvbnRleHQqIElt
YWdlQnVmZmVyOjpjb250ZXh0KCkgCiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KIAot
SW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZUZvclJlbmRlcmluZygpIGNvbnN0Citib29sIEltYWdl
QnVmZmVyOjpkcmF3c1VzaW5nQ29weSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ltYWdlKQotICAg
ICAgICBtX2ltYWdlID0gU3RpbGxJbWFnZTo6Y3JlYXRlRm9yUmVuZGVyaW5nKCZtX2RhdGEubV9w
aXhtYXApOworICAgIHJldHVybiBmYWxzZTsKK30KIAotICAgIHJldHVybiBtX2ltYWdlLmdldCgp
OworUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFN0aWxsSW1hZ2U6OmNyZWF0ZShtX2RhdGEubV9waXhtYXApOwogfQogCi1JbWFn
ZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3Jh
cGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0
eVNjYWxlKQogewotICAgIGlmICghbV9pbWFnZSkgewotICAgICAgICAvLyBJdCdzIGFzc3VtZWQg
dGhhdCBpZiBpbWFnZSgpIGlzIGNhbGxlZCwgdGhlIGFjdHVhbCByZW5kZXJpbmcgdG8gdGhlCi0g
ICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dCBtdXN0IGJlIGRvbmUuCi0gICAgICAgIEFTU0VSVChj
b250ZXh0KCkpOwotICAgICAgICBtX2ltYWdlID0gU3RpbGxJbWFnZTo6Y3JlYXRlKG1fZGF0YS5t
X3BpeG1hcCk7Ci0gICAgfQorICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsKKyAg
ICAgICAgLy8gV2UncmUgZHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLiAgSW4gb3JkZXIgZm9y
IHRoaXMgdG8gd29yaywgd2UgbmVlZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVmZmVyIGZpcnN0Lgor
ICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3BpZWRJbWFnZSgpOworICAgICAgICBkZXN0
Q29udGV4dC0+ZHJhd0ltYWdlKGNvcHkuZ2V0KCksIERldmljZUNvbG9yU3BhY2UsIGRlc3RSZWN0
LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZGVzdENvbnRleHQtPmRyYXdJbWFnZShtX2RhdGEubV9pbWFnZS5nZXQoKSwgc3R5bGVDb2xvclNw
YWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Cit9CisKK3Zv
aWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogZGVzdENvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBv
cCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICBpZiAoZGVzdENvbnRleHQgPT0g
Y29udGV4dCgpKSB7CisgICAgICAgIC8vIFdlJ3JlIGRyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZl
ci4gIEluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmssIHdlIG5lZWQgdG8gY29weSB0aGUgc291cmNl
IGJ1ZmZlciBmaXJzdC4KKyAgICAgICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gY29waWVkSW1hZ2Uo
KTsKKyAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAg
fSBlbHNlCisgICAgICAgIG1fZGF0YS5tX2ltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwg
c3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRl
c3RSZWN0KTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZmxvYXRSZWN0KQoreworICAgIFFQaXhtYXAqIG5hdGl2
ZUltYWdlID0gbV9kYXRhLm1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Cisg
ICAgaWYgKCFuYXRpdmVJbWFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCByZWN0
KGZsb2F0UmVjdCk7CisgICAgUVBpeG1hcCBhbHBoYU1hc2sgPSAqbmF0aXZlSW1hZ2U7CisgICAg
aWYgKGFscGhhTWFzay53aWR0aCgpICE9IHJlY3Qud2lkdGgoKSB8fCBhbHBoYU1hc2suaGVpZ2h0
KCkgIT0gcmVjdC5oZWlnaHQoKSkKKyAgICAgICAgYWxwaGFNYXNrID0gYWxwaGFNYXNrLnNjYWxl
ZChyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogCi0gICAgcmV0dXJuIG1faW1hZ2UuZ2V0
KCk7CisgICAgbV9kYXRhLT5sYXllcnMucHVzaChuZXcgVHJhbnNwYXJlbmN5TGF5ZXIobV9kYXRh
LT5wKCksIG1fZGF0YS0+cCgpLT50cmFuc2Zvcm0oKS5tYXBSZWN0KHJlY3QpLCAxLjAsIGFscGhh
TWFzaykpOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3Bh
Y2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAkocmV2
aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3ND
b250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NiwxNyArNDU2LDYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlIAogICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5jbGlwUGF0aEFudGlBbGlhc2VkKHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikK
LXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBP
UyhMSU5VWCkgfHwgT1MoV0lORE9XUykKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+YmVnaW5MYXll
ckNsaXBwZWRUb0ltYWdlKHJlY3QsIGltYWdlQnVmZmVyKTsKLSNlbmRpZgotfQotCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lKQog
ewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gNjUzMjkp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODcsMjAgKzg3LDM1IEBAIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VC
dWZmZXI6OmNvbnRleHQoKSAKICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi1JbWFn
ZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29uc3QKK2Jvb2wgSW1hZ2VCdWZmZXI6OmRyYXdzVXNp
bmdDb3B5KCkgY29uc3QKIHsKLSAgICBpZiAoIW1faW1hZ2UpIHsKLSAgICAgICAgLy8gVGhpcyBj
cmVhdGVzIGEgQ09QWSBvZiB0aGUgaW1hZ2UgYW5kIHdpbGwgY2FjaGUgdGhhdCBjb3B5LiBUaGlz
IG1lYW5zCi0gICAgICAgIC8vIHRoYXQgaWYgc3Vic2VxdWVudCBvcGVyYXRpb25zIHRha2UgcGxh
Y2Ugb24gdGhlIGNvbnRleHQsIG5laXRoZXIgdGhlCi0gICAgICAgIC8vIGN1cnJlbnRseS1yZXR1
cm5lZCBpbWFnZSwgbm9yIHRoZSByZXN1bHRzIG9mIGZ1dHVyZSBpbWFnZSgpIGNhbGxzLAotICAg
ICAgICAvLyB3aWxsIGNvbnRhaW4gdGhhdCBvcGVyYXRpb24uCi0gICAgICAgIC8vCi0gICAgICAg
IC8vIFRoaXMgc2VlbXMgc2lsbHksIGJ1dCBpcyB0aGUgd2F5IHRoZSBDRyBwb3J0IHdvcmtzOiBp
bWFnZSgpIGlzCi0gICAgICAgIC8vIGludGVuZGVkIHRvIGJlIHVzZWQgb25seSB3aGVuIHJlbmRl
cmluZyBpcyAiY29tcGxldGUuIgotICAgICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2VTaW5nbGVG
cmFtZVNraWE6OmNyZWF0ZSgKLSAgICAgICAgICAgICptX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQu
Yml0bWFwKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVhdGUoKm1f
ZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5iaXRtYXAoKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6
OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNv
bnN0Cit7CisjaWYgT1MoTElOVVgpIHx8IE9TKFdJTkRPV1MpCisgICAgY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPmJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShyZWN0LCB0aGlzKTsKKyNlbmRp
ZgorfQorCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLAorICAgICAg
ICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCA9IENvbXBvc2l0ZVNvdXJjZU92
ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2UpCit7CisgICAgUmVmUHRyPEltYWdl
PiBpbWFnZUNvcHkgPSBjb3BpZWRJbWFnZSgpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFn
ZUNvcHkuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VM
b3dRdWFsaXR5U2NhbGUpOworfQorCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3sKKyAg
ICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcGllZEltYWdlKCk7CisgICAgaW1hZ2VDb3B5
LT5kcmF3UGF0dGVybihjb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpw
bGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxl
KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0Nv
bnRleHRXeC5jcHAJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3OCwxMSArMzc4
LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUAogICAgIGNsaXAo
cGF0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZUJ1ZmZlciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQogQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QK
IHsgCiAjaWYgVVNFKFdYR0MpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0lt
YWdlQnVmZmVyV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMTIg
KzgyLDM3IEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmkKICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiB9CiAKLUltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAor
Ym9vbCBJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2luZ0NvcHkoKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdl
QnVmZmVyOjpjb3B5SW1hZ2UoKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAg
cmV0dXJuIDA7CiB9CiAKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgRmxvYXRSZWN0JikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLAorICAgICAgICAgICAgICAg
ICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wg
dXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2UpCit7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUNv
cHkgPSBjb3BpZWRJbWFnZSgpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZUNvcHkuZ2V0
KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5
U2NhbGUpOworfQorCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICBSZWZQdHI8
SW1hZ2U+IGltYWdlQ29weSA9IGNvcGllZEltYWdlKCk7CisgICAgaW1hZ2VDb3B5LT5kcmF3UGF0
dGVybihjb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xv
clNwYWNlLCBvcCwgZGVzdFJlY3QpOworfQorCiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRy
YW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mKQogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQko
cmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzk2LDcgKzM5Niw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhl
bWVNYWM6OnBhaW50KFNjcm9sbGJhcioKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAKICAgICAgICAgSElUaGVtZURyYXdUcmFjaygmdHJhY2tJbmZvLCAwLCBpbWFnZUJ1ZmZlci0+
Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwga0hJVGhlbWVPcmllbnRhdGlvbk5vcm1hbCk7
Ci0gICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZUJ1ZmZlci0+aW1hZ2UoKSwgRGV2aWNl
Q29sb3JTcGFjZSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICAgICAg
Y29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLmdldCgpLCBEZXZpY2VDb2xvclNw
YWNlLCBzY3JvbGxiYXItPmZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpOwogICAgIH0KIAogICAgIHJl
dHVybiB0cnVlOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMSw3ICs1MzEsNyBAQCB2b2lkIFJlbmRl
ckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllCiAgICAgICAgIAogICAgICAgICAvLyBUaGUg
bWFzayBoYXMgYmVlbiBjcmVhdGVkLiAgTm93IHdlIGp1c3QgbmVlZCB0byBjbGlwIHRvIGl0Lgog
ICAgICAgICBjb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQtPmNsaXBUb0ltYWdlQnVm
ZmVyKG1hc2tSZWN0LCBtYXNrSW1hZ2UuZ2V0KCkpOworICAgICAgICBjb250ZXh0LT5jbGlwVG9J
bWFnZUJ1ZmZlcihtYXNrSW1hZ2UuZ2V0KCksIG1hc2tSZWN0KTsKICAgICB9CiAgICAgCiAgICAg
U3R5bGVJbWFnZSogYmcgPSBiZ0xheWVyLT5pbWFnZSgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCShyZXZpc2lvbiA2NTE2MCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3NCw3ICsxNzQsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6
YXBwbHlDbGlwCiAgICAgaWYgKCFjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJbWFnZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgY29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIocmVwYWludFJl
Y3QsIGNsaXBwZXJEYXRhLT5jbGlwTWFza0ltYWdlLmdldCgpKTsKKyAgICBjb250ZXh0LT5jbGlw
VG9JbWFnZUJ1ZmZlcihjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJbWFnZS5nZXQoKSwgcmVwYWludFJl
Y3QpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcxLDcgKzI3MSw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVIK
ICNpZiAhUExBVEZPUk0oQ0cpCiAgICAgICAgICAgICByZXN1bHRJbWFnZS0+dHJhbnNmb3JtQ29s
b3JTcGFjZShMaW5lYXJSR0IsIERldmljZVJHQik7CiAjZW5kaWYKLSAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdJbWFnZShyZXN1bHRJbWFnZS0+aW1hZ2UoKSwgb2JqZWN0LT5zdHlsZSgpLT5jb2xv
clNwYWNlKCksIGxhc3RFZmZlY3QtPnN1YlJlZ2lvbigpKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmRyYXdJbWFnZUJ1ZmZlcihyZXN1bHRJbWFnZSwgb2JqZWN0LT5zdHlsZSgpLT5jb2xvclNwYWNl
KCksIGxhc3RFZmZlY3QtPnN1YlJlZ2lvbigpKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAJKHJl
dmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBzdGF0aWMgaW5saW5l
IEFmZmluZVRyYW5zZm9ybSBjbGlwVG9UZXh0CiAgICAgLy8gU28gdGhlIGFjdHVhbCBtYXNraW5n
IHByb2Nlc3MgaGFzIHRvIGJlIGRvbmUgaW4gdGhlIGRldmljZSBjb29yZGluYXRlIHNwYWNlIGFz
IHdlbGwuCiAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9ybUZy
b21Db250ZXh0KGNvbnRleHQpKTsKICAgICBjb250ZXh0LT5jb25jYXRDVE0odHJhbnNmb3JtLmlu
dmVyc2UoKSk7Ci0gICAgY29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIodHJhbnNmb3JtLm1hcFJl
Y3QodGV4dFJvb3RCbG9jay0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSksIGltYWdl
QnVmZmVyLmdldCgpKTsKKyAgICBjb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZl
ci5nZXQoKSwgdHJhbnNmb3JtLm1hcFJlY3QodGV4dFJvb3RCbG9jay0+cmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSkpOwogICAgIGNvbnRleHQtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwog
CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDUsNyArMTA1LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlSZXNv
dQogICAgIGlmICghbWFza2VyRGF0YS0+bWFza0ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBjb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihtYXNrZXJEYXRhLT5tYXNrUmVjdCwg
bWFza2VyRGF0YS0+bWFza0ltYWdlLmdldCgpKTsKKyAgICBjb250ZXh0LT5jbGlwVG9JbWFnZUJ1
ZmZlcihtYXNrZXJEYXRhLT5tYXNrSW1hZ2UuZ2V0KCksIG1hc2tlckRhdGEtPm1hc2tSZWN0KTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
OCwxNCArMjk4LDE1IEBAIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IFJlbmRlclNWR1Jlc291cmMK
IAogdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmJ1aWxkUGF0dGVybihQYXR0ZXJuRGF0
YSogcGF0dGVybkRhdGEsIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFnZSkgY29uc3QK
IHsKLSAgICBpZiAoIXRpbGVJbWFnZS0+aW1hZ2UoKSkgeworICAgIFJlZlB0cjxJbWFnZT4gY29w
aWVkSW1hZ2UgPSB0aWxlSW1hZ2UtPmNvcHlJbWFnZSgpOworICAgIGlmICghY29waWVkSW1hZ2Up
IHsKICAgICAgICAgcGF0dGVybkRhdGEtPnBhdHRlcm4gPSAwOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotCi0gICAgSW50UmVjdCB0aWxlUmVjdCA9IHRpbGVJbWFnZS0+aW1hZ2UoKS0+cmVjdCgp
OworICAgIAorICAgIEludFJlY3QgdGlsZVJlY3QgPSBjb3BpZWRJbWFnZS0+cmVjdCgpOwogICAg
IGlmICh0aWxlUmVjdC53aWR0aCgpIDw9IHBhdHRlcm5EYXRhLT5ib3VuZGFyaWVzLndpZHRoKCkg
JiYgdGlsZVJlY3QuaGVpZ2h0KCkgPD0gcGF0dGVybkRhdGEtPmJvdW5kYXJpZXMuaGVpZ2h0KCkp
IHsKLSAgICAgICAgcGF0dGVybkRhdGEtPnBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUlt
YWdlLT5pbWFnZSgpLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgcGF0dGVybkRhdGEtPnBhdHRlcm4g
PSBQYXR0ZXJuOjpjcmVhdGUoY29waWVkSW1hZ2UsIHRydWUsIHRydWUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0zMzEsMTMgKzMzMiwxMyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNl
UGF0dGVybjo6YnVpbGRQYXR0CiAgICAgICAgIG5ld1RpbGVJbWFnZUNvbnRleHQtPnRyYW5zbGF0
ZSgwLCBwYXR0ZXJuRGF0YS0+Ym91bmRhcmllcy5oZWlnaHQoKSk7CiAgICAgICAgIGZvciAoaW50
IGogPSBudW1YOyBqID4gMDsgLS1qKSB7CiAgICAgICAgICAgICBuZXdUaWxlSW1hZ2VDb250ZXh0
LT50cmFuc2xhdGUocGF0dGVybkRhdGEtPmJvdW5kYXJpZXMud2lkdGgoKSwgMCk7Ci0gICAgICAg
ICAgICBuZXdUaWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2UodGlsZUltYWdlLT5pbWFnZSgpLCBz
dHlsZSgpLT5jb2xvclNwYWNlKCksIHRpbGVSZWN0LCB0aWxlUmVjdCk7CisgICAgICAgICAgICBu
ZXdUaWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2UoY29waWVkSW1hZ2UuZ2V0KCksIHN0eWxlKCkt
PmNvbG9yU3BhY2UoKSwgdGlsZVJlY3QsIHRpbGVSZWN0KTsKICAgICAgICAgfQogICAgICAgICBu
ZXdUaWxlSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLXBhdHRlcm5EYXRhLT5ib3VuZGFyaWVzLndp
ZHRoKCkgKiBudW1YLCAwKTsKICAgICB9CiAgICAgbmV3VGlsZUltYWdlQ29udGV4dC0+cmVzdG9y
ZSgpOwogCi0gICAgcGF0dGVybkRhdGEtPnBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUobmV3VGls
ZUltYWdlLT5pbWFnZSgpLCB0cnVlLCB0cnVlKTsKKyAgICBwYXR0ZXJuRGF0YS0+cGF0dGVybiA9
IFBhdHRlcm46OmNyZWF0ZShuZXdUaWxlSW1hZ2UtPmNvcHlJbWFnZSgpLCB0cnVlLCB0cnVlKTsK
IH0KIAogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDY1
MTYwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTk2Myw3ICs5NjMsOCBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNz
QmFyKFJlCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoMiAqIHJlY3QueCgp
ICsgcmVjdC53aWR0aCgpLCAwKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZs
b2F0U2l6ZSgtMSwgMSkpOwogICAgIH0KLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdl
KGltYWdlQnVmZmVyLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCByZWN0LmxvY2F0aW9uKCkp
OworICAgIAorICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZm
ZXIuZ2V0KCksIERldmljZUNvbG9yU3BhY2UsIHJlY3QubG9jYXRpb24oKSk7CiAKICAgICBwYWlu
dEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFdlYkNv
cmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9T
VkdGRUltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9zdmcvU1ZH
RkVJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgUGFz
c1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VFbGVtZQogICAgICAgICBTVkdSZW5kZXJT
dXBwb3J0OjpyZW5kZXJTdWJ0cmVlVG9JbWFnZShtX3RhcmdldEltYWdlLmdldCgpLCByZW5kZXJl
cik7CiAgICAgfQogCi0gICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZShtX3RhcmdldEltYWdlID8g
bV90YXJnZXRJbWFnZS0+aW1hZ2UoKSA6IG1fY2FjaGVkSW1hZ2UtPmltYWdlKCksIHByZXNlcnZl
QXNwZWN0UmF0aW8oKSk7CisgICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZShtX3RhcmdldEltYWdl
ID8gbV90YXJnZXRJbWFnZS0+Y29weUltYWdlKCkgOiBtX2NhY2hlZEltYWdlLT5pbWFnZSgpLCBw
cmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOwogfQogCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjphZGRT
dWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0Cklu
ZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDEyICsy
MjEsMTMgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQwogICAgIGlm
ICghbV9mcmFtZUNhY2hlKSB7CiAgICAgICAgIGlmICghbV9wYWdlKQogICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIG1fZnJhbWVDYWNoZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgp
KTsKLSAgICAgICAgaWYgKCFtX2ZyYW1lQ2FjaGUpIC8vIGZhaWxlZCB0byBhbGxvY2F0ZSBpbWFn
ZQorICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoc2l6ZSgpKTsKKyAgICAgICAgaWYgKCFidWZmZXIpIC8vIGZhaWxlZCB0byBhbGxvY2F0ZSBp
bWFnZQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGRyYXcobV9mcmFtZUNhY2hlLT5j
b250ZXh0KCksIHJlY3QoKSwgcmVjdCgpLCBEZXZpY2VDb2xvclNwYWNlLCBDb21wb3NpdGVTb3Vy
Y2VPdmVyKTsKKyAgICAgICAgZHJhdyhidWZmZXItPmNvbnRleHQoKSwgcmVjdCgpLCByZWN0KCks
IERldmljZUNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgICAgICBtX2ZyYW1l
Q2FjaGUgPSBidWZmZXItPmNvcHlJbWFnZSgpOwogICAgIH0KLSAgICByZXR1cm4gbV9mcmFtZUNh
Y2hlLT5pbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIHJldHVybiBt
X2ZyYW1lQ2FjaGUtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiB9CiAKIGJvb2wgU1ZH
SW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKQpJbmRleDogV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZS5oCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi0gICAgY2xhc3MgSW1hZ2VCdWZmZXI7CiAgICAgY2xhc3MgUGFnZTsKICAgICBj
bGFzcyBTVkdJbWFnZUNocm9tZUNsaWVudDsKICAgICAKQEAgLTcyLDcgKzcxLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgT3duUHRyPFNWR0ltYWdlQ2hyb21lQ2xp
ZW50PiBtX2Nocm9tZUNsaWVudDsKICAgICAgICAgT3duUHRyPFBhZ2U+IG1fcGFnZTsKLSAgICAg
ICAgT3duUHRyPEltYWdlQnVmZmVyPiBtX2ZyYW1lQ2FjaGU7CisgICAgICAgIFJlZlB0cjxJbWFn
ZT4gbV9mcmFtZUNhY2hlOwogICAgIH07CiB9CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3
ICs3OSw3IEBAIHZvaWQgRkVNZXJnZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tZXJnZUlucHV0cy5zaXplKCk7IGkrKykgewogICAgICAg
ICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX21lcmdlSW5wdXRz
W2ldLT5zY2FsZWRTdWJSZWdpb24oKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFn
ZShtX21lcmdlSW5wdXRzW2ldLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNw
YWNlLCBkZXN0UmVjdCk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlciht
X21lcmdlSW5wdXRzW2ldLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkZXN0UmVj
dCk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
T2Zmc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFT2Zmc2V0LmNwcAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCB2
b2lkIEZFT2Zmc2V0OjphcHBseShGaWx0ZXIqIGZpbHRlcikKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2luLT5zY2FsZWRTdWJSZWdpb24oKS53aWR0aCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpLmhlaWdodCgp
KTsKIAotICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5p
bWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkc3RSZWN0KTsKKyAgICBmaWx0ZXJDb250ZXh0LT5k
cmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZHN0
UmVjdCk7CiB9CiAKIHZvaWQgRkVPZmZzZXQ6OmR1bXAoKQpJbmRleDogV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcy
LDggKzcyLDggQEAgdm9pZCBGRVRpbGU6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogCiAgICAgT3du
UHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRpbGVSZWN0
LnNpemUoKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0KiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUlt
YWdlLT5jb250ZXh0KCk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4tPnJl
c3VsdEltYWdlKCktPmltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIEludFBvaW50KCkpOwotICAg
IFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZS0+aW1h
Z2UoKSwgdHJ1ZSwgdHJ1ZSk7CisgICAgdGlsZUltYWdlQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVy
KG1faW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIEludFBvaW50KCkpOworICAg
IFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZS0+Y29w
eUltYWdlKCksIHRydWUsIHRydWUpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKICAg
ICBtYXRyaXgudHJhbnNsYXRlKG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpLngoKSAtIHNjYWxlZFN1
YlJlZ2lvbigpLngoKSwgbV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkueSgpIC0gc2NhbGVkU3ViUmVn
aW9uKCkueSgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64502</attachid>
            <date>2010-08-16 10:15:59 -0700</date>
            <delta_ts>2010-08-16 11:32:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>76803</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTQzOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTM3IEBACisyMDEwLTA4LTE2ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM1MDcsIHN0b3AgSW1hZ2VCdWZm
ZXIgZnJvbSBjb3B5aW5nIGl0cyBkYXRhIHdoZW4gcmVuZGVyaW5nIGFmdGVyIGNhbnZhcyBjaGFu
Z2VzIGhhcHBlbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggcmVuYW1lcyBJbWFnZUJ1
ZmZlcjo6aW1hZ2UoKSB0byBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKCkuIFRoZSBuZXcgbWV0aG9k
IGFsd2F5cyByZXR1cm5zIGEgbmV3IGNvcHkgdGhhdCBpcyBhIGN1cnJlbnQKKyAgICAgICAgc25h
cHNob3Qgb2YgdGhlIEltYWdlQnVmZmVyLgorICAgICAgICAKKyAgICAgICAgVG8gZHJhdyBhbiBJ
bWFnZUJ1ZmZlciwgeW91IG5vdyB1c2UgbmV3IEdyYXBoaWNzQ29udGV4dCBjYWxsczogZHJhd0lt
YWdlQnVmZmVyLiAgUGxhdGZvcm1zIGNhbiB0aGVuIG9wdGltaXplIHRoZXNlIGNhbGxzIHRvIGRy
YXcKKyAgICAgICAgZWZmaWNpZW50bHkgd2l0aG91dCBoYXZpbmcgdG8gY29weSB0aGUgYml0cyBv
ZiB0aGUgSW1hZ2VCdWZmZXIgaW50byBhbiBJbWFnZS4KKyAgICAgICAgCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGNzcy9DU1NDYW52YXNWYWx1ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDYW52YXNWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OndpbGxEcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpyZXNldCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OnNldFN1cmZhY2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50Ojpjb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2Fu
dmFzRWxlbWVudDo6Y2xlYXJDb3BpZWRJbWFnZSk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzUGF0dGVybjo6Q2FudmFzUGF0dGVybik6CisgICAgICAgICog
aHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUGF0
dGVybjo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
cmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpj
cmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6ZHJhd1RleHRJbnRlcm5hbCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
ZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmF0ZWRJbWFnZTo6ZHJh
d1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50c0ludG9DYW52YXNCdWZmZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp3aWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aGVpZ2h0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9QYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OlBhdHRl
cm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhdHRlcm46OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OmRyYXdzVXNpbmdDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNsaXApOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHQzRENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpw
YWludFRvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdzVXNpbmdDb3B5KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJu
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjbGlwKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b2xvck1hdHJpeDo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUdyYXBoaWM6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NDb250ZXh0M0RNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdl
QnVmZmVyRGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVy
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdzVXNpbmdDb3B5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5SW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRy
YXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjbGlwKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3c1VzaW5nQ29weSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmRyYXdzVXNpbmdDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5SW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNsaXApOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNsaXBUb1RleHRNYXNrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZVBhdHRlcm4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuOjpidWlsZFBhdHRlcm4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNzQmFy
KToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaDoKKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFTWVyZ2U6OmFwcGx5KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9m
ZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6YXBwbHkpOgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RVRpbGU6OmFwcGx5KToKKwogMjAxMC0wOC0xMyAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3Vz
dGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jby51az4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5u
ZXRoIFJvaGRlIENocmlzdGlhbnNlbiBhbmQgTWFydGluIFJvYmluc29uLgpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY1MTYwKQorKysg
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTQwMzEsNyArNDAzMSw3IEBACiAJCUIyQTAxNUE5MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFw
aGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyQTAxNTkzMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc0NvbnRleHQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkEwMTVBQTBBRjZD
RDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkEwMTU5NDBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhp
Y3NUeXBlcy5jcHAgKi87IH07CiAJCUIyQTAxNUFCMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGlj
c1R5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkEwMTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUIyQTEwQjkyMEIzODE4QkQwMDA5
OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi87
IH07CisJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMTBCOTEwQjM4MThCRDAw
MDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQjJBMTBCOTQwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVy
Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJB
MTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovOyB9OwogCQlCMkEx
RjJBQTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZB
IC8qIFNWR0ZvbnRFbGVtZW50LmNwcCAqLzsgfTsKIAkJQjJBMUYyQUIwQ0VGMEFCRjAwNDQyRjZB
IC8qIFNWR0ZvbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMkExRjJBMjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCAq
LzsgfTsKQEAgLTQ3NjMsNiArNDc2Myw3IEBACiAJCUJDQThDODMxMTFFM0Q1MzIwMDgxMkZCNyAv
KiBCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQThDODMwMTFFM0Q1MzIwMDgxMkZCNyAvKiBCYWNrRm9y
d2FyZENvbnRyb2xsZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlCQ0E4Q0E1RjExRTRFNkQxMDA4MTJGQjcgLyogQmFja0ZvcndhcmRM
aXN0SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0E4Q0E1RDExRTRFNkQxMDA4MTJGQjcgLyogQmFja0ZvcndhcmRMaXN0SW1wbC5jcHAgKi87
IH07CiAJCUJDQThDQTYwMTFFNEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExpc3RJbXBsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E4Q0E1RTEx
RTRFNkQxMDA4MTJGQjcgLyogQmFja0ZvcndhcmRMaXN0SW1wbC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDQTk3OTE3MTIxNUQwNTUwMDVDNDg1
QyAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDQTk3OTE2MTIxNUQwNTUwMDVDNDg1QyAvKiBJbWFnZUJ1ZmZlckRhdGEu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0FB
OTBDMzBBN0VCQTYwMDA4QjEyMjkgLyogU2Nyb2xsYmFyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQUE5MEMyMEE3RUJBNjAwMDhCMTIyOSAvKiBT
Y3JvbGxiYXIuY3BwICovOyB9OwogCQlCQ0FDRjNCQzEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNv
bnRlbnRVUkxQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDQUNGM0JBMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29udGVudFVSTFBhdHRl
cm4uY3BwICovOyB9OwogCQlCQ0FDRjNCRDEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRV
UkxQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0FDRjNCQjEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwNTA0LDYg
KzEwNTA1LDcgQEAKIAkJQkNBOEM4MzAxMUUzRDUzMjAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29u
dHJvbGxlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWNrRm9y
d2FyZENvbnRyb2xsZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNB
OENBNUQxMUU0RTZEMTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkTGlzdEltcGwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFja0ZvcndhcmRMaXN0SW1wbC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQThDQTVFMTFFNEU2RDEwMDgxMkZCNyAvKiBC
YWNrRm9yd2FyZExpc3RJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJh
Y2tGb3J3YXJkTGlzdEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNBOTc5
MTYxMjE1RDA1NTAwNUM0ODVDIC8qIEltYWdlQnVmZmVyRGF0YS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkNBQTkwQzIwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU2Nyb2xsYmFyLmNwcDsgcGF0aCA9IHBs
YXRmb3JtL1Njcm9sbGJhci5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJQkNB
Q0YzQkExMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyQ29udGVudFVSTFBhdHRlcm4uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0FDRjNCQjEwNzI5MjFBMDBDMEM4QTMg
LyogVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFVzZXJDb250ZW50VVJMUGF0dGVybi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTU1OTAsNiArMTU1OTIsNyBAQAogCQkJCUIyRUQ5NzcwMEIxRjU1Q0UwMDI1N0QwRiAvKiBH
cmFwaGljc0NvbnRleHRDRy5jcHAgKi8sCiAJCQkJQTgwRDY3MDcwRTlFOURFQjAwRTQyMEYwIC8q
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi8sCiAJCQkJQjJBMTBCOTMwQjM4
MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLAorCQkJCUJDQTk3OTE2MTIxNUQw
NTUwMDVDNDg1QyAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLywKIAkJCQlCMjc1MzUzMDBCMDUzODE0
MDAyQ0U2NEYgLyogSW1hZ2VDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzEwQjA1MzgxNDAwMkNFNjRG
IC8qIEltYWdlU291cmNlQ0cuY3BwICovLAogCQkJCTRCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAv
KiBJbWFnZVNvdXJjZUNHLmggKi8sCkBAIC0yMDE1Niw2ICsyMDE1OSw3IEBACiAJCQkJMkVFRDU3
NTgxMjEwOUVFNDAwNzY1NkJCIC8qIEJsb2JSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MkVFRDU3NUMxMjEwOUVGMzAwNzY1NkJCIC8qIEJsb2JEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NzhCNkZDQTEyMTI4ODIxMDAxNTk1RUYgLyogSFRNTFZpZXdTb3VyY2VQYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUJDQTk3OTE3MTIxNUQwNTUwMDVDNDg1QyAvKiBJbWFnZUJ1ZmZlckRh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjAyMTUsNyArMjAyMTksNiBAQAogCQkJaXNhID0gUEJY
UHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4
QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3Jl
IiAqLzsKIAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7Ci0JCQlkZXZlbG9w
bWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJ
CWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApJbmRleDogV2ViQ29yZS9jc3MvQ1NTQ2Fu
dmFzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNw
cAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgSW1hZ2UqIENTU0NhbnZhc1ZhbHVlOjppbWFn
ZShSZW5kZXJPYmplYwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBlbHQgPSBlbGVtZW50KHJlbmRl
cmVyLT5kb2N1bWVudCgpKTsKICAgICBpZiAoIWVsdCB8fCAhZWx0LT5idWZmZXIoKSkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGVsdC0+YnVmZmVyKCktPmltYWdlKCk7CisgICAgcmV0
dXJuIGVsdC0+Y29waWVkSW1hZ2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw4ICsy
MDksNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVuCiAKIHZvaWQg
SFRNTENhbnZhc0VsZW1lbnQ6OndpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAg
ICBpZiAobV9pbWFnZUJ1ZmZlcikKLSAgICAgICAgbV9pbWFnZUJ1ZmZlci0+Y2xlYXJJbWFnZSgp
OworICAgIG1fY29waWVkSW1hZ2UuY2xlYXIoKTsgLy8gQ2xlYXIgb3VyIGltYWdlIHNuYXBzaG90
IGlmIHdlIGhhdmUgb25lLgogCiAgICAgaWYgKFJlbmRlckJveCogcm8gPSByZW5kZXJCb3goKSkg
ewogICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSByby0+Y29udGVudEJveFJlY3QoKTsKQEAg
LTIzOSwxNiArMjM4LDE3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KCkKICAgICBp
bnQgaCA9IGdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKS50b0ludCgmb2spOwogICAgIGlmICghb2sg
fHwgaCA8IDApCiAgICAgICAgIGggPSBEZWZhdWx0SGVpZ2h0OworICAgIAorICAgIGJvb2wgaGFk
SW1hZ2VCdWZmZXIgPSBoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKTsKIAogICAgIEludFNpemUgb2xk
U2l6ZSA9IHNpemUoKTsKLSAgICBzZXRTdXJmYWNlU2l6ZShJbnRTaXplKHcsIGgpKTsKKyAgICBz
ZXRTdXJmYWNlU2l6ZShJbnRTaXplKHcsIGgpKTsgLy8gVGhlIGltYWdlIGJ1ZmZlciBnZXRzIGNs
ZWFyZWQgaGVyZS4KIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0gICAgaWYgKG1fY29udGV4dCAm
JiBtX2NvbnRleHQtPmlzM2QoKSkKKyAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMz
ZCgpICYmIG9sZFNpemUgIT0gc2l6ZSgpKQogICAgICAgICBzdGF0aWNfY2FzdDxXZWJHTFJlbmRl
cmluZ0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkpLT5yZXNoYXBlKHdpZHRoKCksIGhlaWdodCgp
KTsKICNlbmRpZgogCi0gICAgYm9vbCBoYWRJbWFnZUJ1ZmZlciA9IGhhc0NyZWF0ZWRJbWFnZUJ1
ZmZlcigpOwogICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkpCiAgICAgICAg
IHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KG1fY29udGV4dC5nZXQoKSkt
PnJlc2V0KCk7CiAKQEAgLTI3NywyMyArMjc3LDIxIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6
OnBhaW50KEdyYXBoaWNzQ28KICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQzRCA9
IDA7CiAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzM2QoKSkgewogICAgICAgICBj
b250ZXh0M0QgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihtX2NvbnRleHQu
Z2V0KCkpOwotICAgICAgICBjb250ZXh0M0QtPmJlZ2luUGFpbnQoKTsKKyAgICAgICAgaWYgKCFj
b250ZXh0M0QtPnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY29udGV4dDNELT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogICAg
IH0KICNlbmRpZgogCiAgICAgaWYgKGhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcigpKSB7CiAgICAgICAg
IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGJ1ZmZlcigpOwogICAgICAgICBpZiAoaW1hZ2VC
dWZmZXIpIHsKLSAgICAgICAgICAgIEltYWdlKiBpbWFnZSA9IGltYWdlQnVmZmVyLT5pbWFnZUZv
clJlbmRlcmluZygpOwotICAgICAgICAgICAgaWYgKGltYWdlKQotICAgICAgICAgICAgICAgIGNv
bnRleHQtPmRyYXdJbWFnZShpbWFnZSwgRGV2aWNlQ29sb3JTcGFjZSwgcik7CisgICAgICAgICAg
ICBpZiAoaW1hZ2VCdWZmZXItPmRyYXdzVXNpbmdDb3B5KCkpCisgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZHJhd0ltYWdlKGNvcGllZEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIHIpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihp
bWFnZUJ1ZmZlciwgRGV2aWNlQ29sb3JTcGFjZSwgcik7CiAgICAgICAgIH0KICAgICB9Ci0KLSNp
ZiBFTkFCTEUoM0RfQ0FOVkFTKQotICAgIGlmIChjb250ZXh0M0QpCi0gICAgICAgIGNvbnRleHQz
RC0+ZW5kUGFpbnQoKTsKLSNlbmRpZgogfQogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykgICAgCkBA
IC0zMjUsNiArMzIzLDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0U3VyZmFjZVNpemUo
YwogICAgIG1fc2l6ZSA9IHNpemU7CiAgICAgbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgPSBmYWxz
ZTsKICAgICBtX2ltYWdlQnVmZmVyLmNsZWFyKCk7CisgICAgbV9jb3BpZWRJbWFnZS5jbGVhcigp
OwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHksIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAt
NDIwLDYgKzQxOSwxOCBAQCBJbWFnZUJ1ZmZlciogSFRNTENhbnZhc0VsZW1lbnQ6OmJ1ZmZlcigp
CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiB9CiAKK0ltYWdlKiBIVE1MQ2FudmFz
RWxlbWVudDo6Y29waWVkSW1hZ2UoKSBjb25zdAoreworICAgIGlmICghbV9jb3BpZWRJbWFnZSAm
JiBidWZmZXIoKSkKKyAgICAgICAgbV9jb3BpZWRJbWFnZSA9IGJ1ZmZlcigpLT5jb3B5SW1hZ2Uo
KTsKKyAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQoKTsKK30KKwordm9pZCBIVE1MQ2FudmFz
RWxlbWVudDo6Y2xlYXJDb3BpZWRJbWFnZSgpCit7CisgICAgbV9jb3BpZWRJbWFnZS5jbGVhcigp
OworfQorCiBBZmZpbmVUcmFuc2Zvcm0gSFRNTENhbnZhc0VsZW1lbnQ6OmJhc2VUcmFuc2Zvcm0o
KSBjb25zdAogewogICAgIEFTU0VSVChtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcik7CkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBjbGFz
cyBDYW52YXNDb250ZXh0QXR0cmlidXRlczsKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ7
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsKK2NsYXNz
IEltYWdlOwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRTaXplOwogCkBAIC05Myw2ICs5
NCw4IEBAIHB1YmxpYzoKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAKICAgICBJbWFnZUJ1ZmZl
ciogYnVmZmVyKCkgY29uc3Q7CisgICAgSW1hZ2UqIGNvcGllZEltYWdlKCkgY29uc3Q7CisgICAg
dm9pZCBjbGVhckNvcGllZEltYWdlKCk7CiAKICAgICBJbnRSZWN0IGNvbnZlcnRMb2dpY2FsVG9E
ZXZpY2UoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAgICAgSW50U2l6ZSBjb252ZXJ0TG9naWNh
bFRvRGV2aWNlKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OwpAQCAtMTQ5LDYgKzE1Miw4IEBAIHBy
aXZhdGU6CiAgICAgLy8gbV9jcmVhdGVkSW1hZ2VCdWZmZXIgbWVhbnMgd2UgdHJpZWQgdG8gbWFs
bG9jIHRoZSBidWZmZXIuICBXZSBkaWRuJ3QgbmVjZXNzYXJpbHkgZ2V0IGl0LgogICAgIG11dGFi
bGUgYm9vbCBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcjsKICAgICBtdXRhYmxlIE93blB0cjxJbWFn
ZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKKyAgICAKKyAgICBtdXRhYmxlIFJlZlB0cjxJbWFnZT4g
bV9jb3BpZWRJbWFnZTsgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IGZvciBwbGF0Zm9ybXMg
dGhhdCBoYXZlIHRvIGNvcHkgdGhlIGltYWdlIGJ1ZmZlciB0byByZW5kZXIgKGFuZCBmb3IgQ1NT
Q2FudmFzVmFsdWUpLgogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1BhdHRlcm4uY3BwCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgdm9p
ZCBDYW52YXNQYXR0ZXJuOjpwYXJzZVJlcGV0aXRpb25UeXBlKAogICAgIGVjID0gU1lOVEFYX0VS
UjsKIH0KIAotQ2FudmFzUGF0dGVybjo6Q2FudmFzUGF0dGVybihJbWFnZSogaW1hZ2UsIGJvb2wg
cmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQorQ2FudmFzUGF0dGVybjo6
Q2FudmFzUGF0dGVybihQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSwgYm9vbCByZXBlYXRYLCBib29s
IHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCiAgICAgOiBtX3BhdHRlcm4oUGF0dGVybjo6Y3Jl
YXRlKGltYWdlLCByZXBlYXRYLCByZXBlYXRZKSkKICAgICAsIG1fb3JpZ2luQ2xlYW4ob3JpZ2lu
Q2xlYW4pCiB7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaAkocmV2aXNpb24g
NjUxNjApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgog
ICAgICAgICBzdGF0aWMgdm9pZCBwYXJzZVJlcGV0aXRpb25UeXBlKGNvbnN0IFN0cmluZyYsIGJv
b2wmIHJlcGVhdFgsIGJvb2wmIHJlcGVhdFksIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBjcmVhdGUoSW1hZ2UqIGltYWdlLCBib29s
IHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gY3JlYXRlKFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdl
LCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQYXR0ZXJuKGltYWdlLCBy
ZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikpOwogICAgICAgICB9CkBAIC01MSw3ICs1MSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBvcmlnaW5DbGVhbigpIGNvbnN0
IHsgcmV0dXJuIG1fb3JpZ2luQ2xlYW47IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIENhbnZh
c1BhdHRlcm4oSW1hZ2UqLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5D
bGVhbik7CisgICAgICAgIENhbnZhc1BhdHRlcm4oUGFzc1JlZlB0cjxJbWFnZT4sIGJvb2wgcmVw
ZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKTsKIAogICAgICAgICBSZWZQdHI8
UGF0dGVybj4gbV9wYXR0ZXJuOwogICAgICAgICBib29sIG1fb3JpZ2luQ2xlYW47CkluZGV4OiBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShy
ZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2NCw3ICsxMjY0LDcgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogCiAgICAgc291cmNlQ2FudmFzLT5tYWtl
UmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpOwogCi0gICAgYy0+ZHJhd0ltYWdlKGJ1ZmZlci0+
aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNvdXJjZVJlY3QsIHN0YXRlKCku
bV9nbG9iYWxDb21wb3NpdGUpOworICAgIGMtPmRyYXdJbWFnZUJ1ZmZlcihidWZmZXIsIERldmlj
ZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzb3VyY2VSZWN0LCBzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9z
aXRlKTsKICAgICB3aWxsRHJhdyhkZXN0UmVjdCk7IC8vIFRoaXMgY2FsbCBjb21lcyBhZnRlciBk
cmF3SW1hZ2UsIHNpbmNlIHRoZSBidWZmZXIgd2UgZHJhdyBpbnRvIG1heSBiZSBvdXIgb3duLCBh
bmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgZGlydHkuCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogQXJndWFibHkgd2lsbERyYXcgc2hvdWxkIGJlY29tZSBkaWREcmF3IGFu
ZCBvY2N1ciBhZnRlciBkcmF3aW5nIGNhbGxzIGFuZCBub3QgYmVmb3JlIHRoZW0gdG8gYXZvaWQg
cHJvYmxlbXMgbGlrZSB0aGlzLgogfQpAQCAtMTQ2NCw3ICsxNDY0LDcgQEAgUGFzc1JlZlB0cjxD
YW52YXNQYXR0ZXJuPiBDYW52YXNSZW5kZXJpbgogICAgIENhbnZhc1BhdHRlcm46OnBhcnNlUmVw
ZXRpdGlvblR5cGUocmVwZXRpdGlvblR5cGUsIHJlcGVhdFgsIHJlcGVhdFksIGVjKTsKICAgICBp
ZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBDYW52YXNQYXR0ZXJuOjpjcmVh
dGUoY2FudmFzLT5idWZmZXIoKS0+aW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwgY2FudmFzLT5v
cmlnaW5DbGVhbigpKTsKKyAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKGNhbnZhcy0+
Y29waWVkSW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwgY2FudmFzLT5vcmlnaW5DbGVhbigpKTsK
IH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OndpbGxEcmF3KGNvbnN0IEZsb2F0
UmVjdCYgciwgdW5zaWduZWQgb3B0aW9ucykKQEAgLTE4MjAsNyArMTgyMCw3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEkKICAgICAgICAgbWFza0ltYWdlQ29udGV4
dC0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uKTsKIAogICAgICAgICBjLT5z
YXZlKCk7Ci0gICAgICAgIGMtPmNsaXBUb0ltYWdlQnVmZmVyKG1hc2tSZWN0LCBtYXNrSW1hZ2Uu
Z2V0KCkpOworICAgICAgICBjLT5jbGlwVG9JbWFnZUJ1ZmZlcihtYXNrSW1hZ2UuZ2V0KCksIG1h
c2tSZWN0KTsKICAgICAgICAgZHJhd1N0eWxlLT5hcHBseUZpbGxDb2xvcihjKTsKICAgICAgICAg
Yy0+ZmlsbFJlY3QobWFza1JlY3QpOwogICAgICAgICBjLT5yZXN0b3JlKCk7CkluZGV4OiBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA2
NTE2MCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTU4LDI3ICsxNTgsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6Om1hcmtDb250ZXh0QwogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQogewotICAgIGlmIChtX21hcmtlZENhbnZhc0RpcnR5
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJdCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSB0byBjbGVh
ciB0aGUgaW1hZ2UgYmVmb3JlIGRvaW5nIGEgcmVhZGJhY2suCi0gICAgICAgIC8vIEludmVzdGln
YXRlIHdoeSB0aGlzIGlzIG5lZWRlZCBhbmQgcmVtb3ZlIGlmIHBvc3NpYmxlLgotICAgICAgICBj
YW52YXMoKS0+YnVmZmVyKCktPmNsZWFySW1hZ2UoKTsKLSAgICAgICAgbV9tYXJrZWRDYW52YXNE
aXJ0eSA9IGZhbHNlOwotICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKHRoaXMpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJl
Z2luUGFpbnQoKQotewotICAgIGlmIChtX21hcmtlZENhbnZhc0RpcnR5KQotICAgICAgICBtX2Nv
bnRleHQtPmJlZ2luUGFpbnQodGhpcyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjplbmRQYWludCgpCi17Ci0gICAgaWYgKG1fbWFya2VkQ2FudmFzRGlydHkpIHsKLSAgICAgICAg
bV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwotICAgICAgICBtX2NvbnRleHQtPmVuZFBhaW50
KCk7Ci0gICAgfQorICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSkKKyAgICAgICAgcmV0dXJu
OworICAgIGNhbnZhcygpLT5jbGVhckNvcGllZEltYWdlKCk7CisgICAgbV9tYXJrZWRDYW52YXNE
aXJ0eSA9IGZhbHNlOworICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXModGhpcyk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKGludCB3
aWR0aCwgaW50IGhlaWdodCkKQEAgLTE5Miw2ICsxNzYsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cmVzaGFwZShpbnQgCiAgICAgICAgIG1fbmVlZHNVcGRhdGUgPSBmYWxzZTsKICAg
ICB9CiAgICAgCisgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IHRydWU7IC8vIFRoZSBpbWFnZSBi
dWZmZXIgZ290IGRlc3Ryb3llZCBzaW5jZSBvdXIgc2l6ZSBjaGFuZ2VkLCBzbyB3ZSBvYnZpb3Vz
bHkgbmVlZCB0byBkcmF3IHRvIGl0IGFnYWluLgorCiAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdp
ZHRoLCBoZWlnaHQpOwogfQogCkBAIC0yMTk2LDcgKzIxODIsOCBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+YnVmZmVyKCktPmltYWdlKCksCisgICAgCisgICAgdGV4
SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwg
Y2FudmFzLT5jb3BpZWRJbWFnZSgpLAogICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFks
IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogfQogCkBAIC0yMjk1LDcgKzIyODIsOCBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1CiAgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2
ZWwsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGNhbnZhcy0+YnVmZmVyKCktPmltYWdlKCks
IGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBlYyk7CisgICAgCisgICAgdGV4SW1hZ2UyREltcGwo
dGFyZ2V0LCBsZXZlbCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgY2FudmFzLT5jb3BpZWRJ
bWFnZSgpLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogfQogCiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVs
LCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywKQEAgLTI0NTUsNyArMjQ0Myw4IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTIKICAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmJ1ZmZlcigpLT5pbWFnZSgpLAor
ICAgIAorICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFnZSgpLAogICAgICAgICAgICAgICAg
ICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogfQog
CkBAIC0yNTU0LDcgKzI1NDMsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3Vi
SW1hZ2UyCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHRleFN1
YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgY2FudmFzLT5i
dWZmZXIoKS0+aW1hZ2UoKSwKKyAgICAKKyAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwKICAgICAgICAg
ICAgICAgICAgICAgICBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogfQogCkluZGV4OiBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDY1
MTYwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzA1LDEyICszMDUsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2
b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAKLSAgICAvLyBIZWxwZXJzIGZv
ciBub3RpZmljYXRpb24gYWJvdXQgcGFpbnQgZXZlbnRzLgotICAgIHZvaWQgYmVnaW5QYWludCgp
OwotICAgIHZvaWQgZW5kUGFpbnQoKTsKLQogICAgIHZvaWQgcmVtb3ZlT2JqZWN0KFdlYkdMT2Jq
ZWN0Kik7CiAKKyAgICBib29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRleHQtPnBhaW50c0ludG9DYW52YXNCdWZmZXIoKTsgfQorCiAgIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIFdlYkdMT2JqZWN0OwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjMsMTEgKzYzLDggQEAgdm9pZCBHZW5lcmF0ZWRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpYwog
ICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRl
eHQoKTsKICAgICBncmFwaGljc0NvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIGFkanVzdGVkU2l6ZSksICptX2dlbmVyYXRvci5nZXQoKSk7CiAKLSAgICAvLyBHcmFiIHRo
ZSBmaW5hbCBpbWFnZSBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgSW1hZ2UqIGJpdG1hcCA9
IGltYWdlQnVmZmVyLT5pbWFnZSgpOwotCi0gICAgLy8gTm93IGp1c3QgY2FsbCBkcmF3VGlsZWQg
b24gdGhhdCBpbWFnZS4KLSAgICBiaXRtYXAtPmRyYXdQYXR0ZXJuKGNvbnRleHQsIGFkanVzdGVk
U3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9z
aXRlT3AsIGRlc3RSZWN0KTsKKyAgICAvLyBUaWxlIHRoZSBpbWFnZSBidWZmZXIgaW50byB0aGUg
Y29udGV4dC4KKyAgICBpbWFnZUJ1ZmZlci0+ZHJhd1BhdHRlcm4oY29udGV4dCwgYWRqdXN0ZWRT
cmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3Np
dGVPcCwgZGVzdFJlY3QpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA2NTMyOSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtNzE4
LDExICs3MTgsMTEgQEAgcHVibGljOgogCiAgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKIAotICAgIC8vIEhlbHBl
cnMgZm9yIG5vdGlmaWNhdGlvbiBhYm91dCBwYWludCBldmVudHMKLSAgICB2b2lkIGJlZ2luUGFp
bnQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCk7Ci0gICAgdm9pZCBlbmRQYWludCgp
OwogI2lmIFBMQVRGT1JNKFFUKQogICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNv
bnN0IFFSZWN0JiByZWN0KSBjb25zdDsKKyAgICBib29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisjZWxzZQorICAgIGJvb2wgcGFpbnRzSW50b0NhbnZh
c0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAogICAgIC8vIFN1cHBv
cnQgZm9yIGJ1ZmZlciBjcmVhdGlvbiBhbmQgZGVsZXRpb24KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDY1MzI5KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdlbmVy
YXRvci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC00NDIsNiArNDQzLDU3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWEKICAgICAgICAgcmVz
dG9yZSgpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFBvaW50
JiBwLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sKKyAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2Us
IHN0eWxlQ29sb3JTcGFjZSwgcCwgSW50UmVjdCgwLCAwLCAtMSwgLTEpLCBvcCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIGltYWdlLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgciwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQoreworICAgIGRyYXdJbWFnZUJ1ZmZl
cihpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCByLCBJbnRSZWN0KDAsIDAsIC0xLCAtMSksIG9wLCB1
c2VMb3dRdWFsaXR5U2NhbGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNv
bnN0IEludFBvaW50JiBkZXN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVy
YXRvciBvcCkKK3sKKyAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwg
SW50UmVjdChkZXN0LCBzcmNSZWN0LnNpemUoKSksIHNyY1JlY3QsIG9wKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogaW1hZ2UsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0LCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUp
Cit7CisgICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIEZsb2F0UmVj
dChkZXN0KSwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIGltYWdlLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQor
eworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWltYWdlKQorICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIGZsb2F0IHRzdyA9IHNyYy53aWR0aCgpOworICAgIGZsb2F0IHRzaCA9
IHNyYy5oZWlnaHQoKTsKKyAgICBmbG9hdCB0dyA9IGRlc3Qud2lkdGgoKTsKKyAgICBmbG9hdCB0
aCA9IGRlc3QuaGVpZ2h0KCk7CisKKyAgICBpZiAodHN3ID09IC0xKQorICAgICAgICB0c3cgPSBp
bWFnZS0+d2lkdGgoKTsKKyAgICBpZiAodHNoID09IC0xKQorICAgICAgICB0c2ggPSBpbWFnZS0+
aGVpZ2h0KCk7CisKKyAgICBpZiAodHcgPT0gLTEpCisgICAgICAgIHR3ID0gaW1hZ2UtPndpZHRo
KCk7CisgICAgaWYgKHRoID09IC0xKQorICAgICAgICB0aCA9IGltYWdlLT5oZWlnaHQoKTsKKwor
ICAgIGlmICh1c2VMb3dRdWFsaXR5U2NhbGUpIHsKKyAgICAgICAgc2F2ZSgpOworICAgICAgICBz
ZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25Ob25lKTsKKyAgICB9CisK
KyAgICBpbWFnZS0+ZHJhdyh0aGlzLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3QsIHNyYywgb3AsIHVz
ZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgCisgICAgaWYgKHVzZUxvd1F1YWxpdHlTY2FsZSkKKyAg
ICAgICAgcmVzdG9yZSgpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJl
Y3RDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0
IEludFNpemUmIHRvcFJpZ2h0LAogICAgIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0
IEludFNpemUmIGJvdHRvbVJpZ2h0KQogewpAQCAtNDYwLDYgKzUxMiwxMyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0CiAgICAgY2xpcE91dChQYXRoOjpjcmVhdGVS
b3VuZGVkUmVjdGFuZ2xlKHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0
b21SaWdodCkpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXIqIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBidWZmZXItPmNsaXAodGhp
cywgcmVjdCk7Cit9CisKIGludCBHcmFwaGljc0NvbnRleHQ6OnRleHREcmF3aW5nTW9kZSgpCiB7
CiAgICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS50ZXh0RHJhd2luZ01vZGU7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDY1MzI5
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjM4LDYgKzIzOCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlID0gSW1hZ2U6OlN0cmV0
Y2hUaWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUgPSBJbWFnZTo6U3RyZXRjaFRpbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3Vy
Y2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKIAorICAgICAgICB2b2lk
IGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBjb25zdCBJbnRQb2ludCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zl
cik7CisgICAgICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvciA9IENv
bXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOworICAg
ICAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgICAgICB2
b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29t
cG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlT
Y2FsZSA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIq
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291
cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7CisKICAgICAgICAgdm9p
ZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KTsKICAg
ICAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNv
bnN0OwogCkBAIC0yNDgsOCArMjU1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIGNsaXBPdXRFbGxpcHNlSW5SZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBj
bGlwT3V0Um91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmIHRvcExlZnQs
IGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25z
dCBJbnRTaXplJiBib3R0b21SaWdodCk7CiAgICAgICAgIHZvaWQgY2xpcFBhdGgoV2luZFJ1bGUp
OwotICAgICAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEltYWdlQnVmZmVyKik7CiAgICAgICAgIHZvaWQgY2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51
bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCosIGJvb2wgYW50aWFsaWFzID0gdHJ1ZSk7CisgICAg
ICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3Qm
KTsKIAogICAgICAgICBpbnQgdGV4dERyYXdpbmdNb2RlKCk7CiAgICAgICAgIHZvaWQgc2V0VGV4
dERyYXdpbmdNb2RlKGludCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCShyZXZp
c2lvbiA2NTMyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUwLDYgKzE1MCw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJbWFnZT4gbG9hZFBsYXRmb3JtVGhlbWVJY29uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzaXpl
KTsKICNlbmRpZgogCisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKKwogcHJvdGVjdGVkOgogICAgIEltYWdlKElt
YWdlT2JzZXJ2ZXIqID0gMCk7CiAKQEAgLTE2Nyw5ICsxNzAsNiBAQCBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCBib29sIG1heUZpbGxXaXRoU29saWRDb2xvcigpIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBDb2xvciBzb2xpZENvbG9yKCkgY29uc3QgeyByZXR1cm4gQ29sb3IoKTsgfQog
ICAgIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCk7Ci0KIHByaXZhdGU6CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gbV9kYXRhOyAvLyBUaGUgZW5jb2RlZCByYXcgZGF0YSBmb3IgdGhlIGltYWdlLiAKICAgICBJ
bWFnZU9ic2VydmVyKiBtX2ltYWdlT2JzZXJ2ZXI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiA2NTMyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2RlZmluZSBJbWFnZUJ1ZmZlcl9oCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKQEAgLTcxLDE2ICs3MiwxMyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH5JbWFnZUJ1ZmZlcigpOwogCiAgICAgICAgIGNv
bnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICAgICAgaW50
IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndpZHRoKCk7IH0KKyAgICAgICAgaW50IGhl
aWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQorICAgICAgICAKICAgICAg
ICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkgY29uc3Q7CiAKLSAgICAgICAgSW1hZ2UqIGlt
YWdlKCkgY29uc3Q7Ci0jaWYgUExBVEZPUk0oUVQpCi0gICAgICAgIEltYWdlKiBpbWFnZUZvclJl
bmRlcmluZygpIGNvbnN0OwotI2Vsc2UKLSAgICAgICAgSW1hZ2UqIGltYWdlRm9yUmVuZGVyaW5n
KCkgY29uc3QgeyByZXR1cm4gaW1hZ2UoKTsgfQotI2VuZGlmCi0KLSAgICAgICAgdm9pZCBjbGVh
ckltYWdlKCkgeyBtX2ltYWdlLmNsZWFyKCk7IH0KKyAgICAgICAgYm9vbCBkcmF3c1VzaW5nQ29w
eSgpIGNvbnN0OyAvLyBJZiB0aGUgaW1hZ2UgYnVmZmVyIGhhcyB0byByZW5kZXIgdXNpbmcgYSBj
b3BpZWQgaW1hZ2UsIGl0IHdpbGwgcmV0dXJuIHRydWUuCisgICAgICAgIFBhc3NSZWZQdHI8SW1h
Z2U+IGNvcHlJbWFnZSgpIGNvbnN0OyAvLyBSZXR1cm4gYSBuZXcgaW1hZ2UgdGhhdCBpcyBhIGNv
cHkgb2YgdGhlIGJ1ZmZlci4KIAogICAgICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICAgICAgUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYp
IGNvbnN0OwpAQCAtOTYsMTIgKzk0LDIzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbHNlCiAg
ICAgICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZm
aW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX3NpemUuaGVpZ2h0KCkpOyB9CiAjZW5kaWYK
KworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgY2xpcChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBGbG9hdFJlY3QmKSBjb25zdDsKKworICAgICAgICAvLyBUaGUgZHJhdyBtZXRob2QgZHJhd3Mg
dGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgd2l0aG91dCBjb3B5aW5nIGl0LgorICAgICAgICB2
b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0
UmVjdCgwLCAwLCAtMSwgLTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3Np
dGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxl
ID0gZmFsc2UpOworICAgICAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QpOworICAgICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0
OworICAgICAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7CisKICAgICBwcml2YXRlOgog
ICAgICAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwogCiAgICAgICAgIEludFNpemUgbV9zaXpl
OwogICAgICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Ci0gICAgICAgIG11
dGFibGUgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogCiAjaWYgIVBMQVRGT1JNKENHKQogICAgICAg
ICBWZWN0b3I8aW50PiBtX2xpbmVhclJnYkxVVDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0dGVybi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QYXR0ZXJuLmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUGF0dGVybjo6UGF0dGVybihJbWFnZSogaW1hZ2UsIGJvb2wgcmVw
ZWF0WCwgYm9vbCByZXBlYXRZKQorUGF0dGVybjo6UGF0dGVybihQYXNzUmVmUHRyPEltYWdlPiBp
bWFnZSwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFkpCiAgICAgOiBtX3RpbGVJbWFnZShpbWFn
ZSkKICAgICAsIG1fcmVwZWF0WChyZXBlYXRYKQogICAgICwgbV9yZXBlYXRZKHJlcGVhdFkpCkBA
IC0zOSw3ICszOSw3IEBAIFBhdHRlcm46OlBhdHRlcm4oSW1hZ2UqIGltYWdlLCBib29sIHJlcGUK
ICAgICAsIG1fcGF0dGVybigwKQogI2VuZGlmCiB7Ci0gICAgQVNTRVJUKGltYWdlKTsKKyAgICBB
U1NFUlQobV90aWxlSW1hZ2UpOwogfQogCiBQYXR0ZXJuOjp+UGF0dGVybigpCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBA
QAogI2RlZmluZSBQYXR0ZXJuX2gKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2lu
Y2x1ZGUgIkltYWdlLmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CkBAIC02NCwxMSArNjUsMTAgQEAgdHlwZWRlZiB2b2lkKiBQbGF0
Zm9ybVBhdHRlcm5QdHI7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5z
Zm9ybTsKLWNsYXNzIEltYWdlOwogCiBjbGFzcyBQYXR0ZXJuIDogcHVibGljIFJlZkNvdW50ZWQ8
UGF0dGVybj4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhdHRlcm4+IGNyZWF0
ZShJbWFnZSogdGlsZUltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSkKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxQYXR0ZXJuPiBjcmVhdGUoUGFzc1JlZlB0cjxJbWFnZT4gdGlsZUltYWdl
LCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgUGF0dGVybih0aWxlSW1hZ2UsIHJlcGVhdFgsIHJlcGVhdFkpKTsKICAgICB9CkBA
IC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICBib29sIHJlcGVhdFkoKSBjb25zdCB7IHJldHVy
biBtX3JlcGVhdFk7IH0KIAogcHJpdmF0ZToKLSAgICBQYXR0ZXJuKEltYWdlKiwgYm9vbCByZXBl
YXRYLCBib29sIHJlcGVhdFkpOworICAgIFBhdHRlcm4oUGFzc1JlZlB0cjxJbWFnZT4sIGJvb2wg
cmVwZWF0WCwgYm9vbCByZXBlYXRZKTsKIAogICAgIFJlZlB0cjxJbWFnZT4gbV90aWxlSW1hZ2U7
CiAgICAgYm9vbCBtX3JlcGVhdFg7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkocmV2aXNpb24gNjUz
MjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTA4LDE0ICs5MDgsNiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjCiAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwg
c2F2ZWRGaWxsUnVsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZl
cikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TaGFkb3coRmxvYXRTaXplIGNvbnN0JiBzaXplLCBmbG9hdCwgQ29sb3IgY29uc3QmLCBDb2xv
clNwYWNlKQogewogICAgIC8vIENhaXJvIGRvZXNuJ3Qgc3VwcG9ydCBzaGFkb3dzIG5hdGl2ZWx5
LCB0aGV5IGFyZSBkcmF3biBtYW51YWxseSBpbiB0aGUgZHJhdyoKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkocmV2
aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NywyNiArOTcsMzQgQEAgR3JhcGhpY3ND
b250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIAogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0
KCk7CiB9CiAKLUltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAorYm9vbCBJbWFnZUJ1
ZmZlcjo6ZHJhd3NVc2luZ0NvcHkoKSBjb25zdAogewotICAgIGlmICghbV9pbWFnZSkgewotICAg
ICAgICAvLyBJdCdzIGFzc3VtZWQgdGhhdCBpZiBpbWFnZSgpIGlzIGNhbGxlZCwgdGhlIGFjdHVh
bCByZW5kZXJpbmcgdG8gdGhlCi0gICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dCBtdXN0IGJlIGRv
bmUuCi0gICAgICAgIEFTU0VSVChjb250ZXh0KCkpOwotCi0gICAgICAgIC8vIFRoaXMgY3JlYXRl
cyBhIENPUFkgb2YgdGhlIGltYWdlIGFuZCB3aWxsIGNhY2hlIHRoYXQgY29weS4gVGhpcyBtZWFu
cwotICAgICAgICAvLyB0aGF0IGlmIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyB0YWtlIHBsYWNlIG9u
IHRoZSBjb250ZXh0LCBuZWl0aGVyIHRoZQotICAgICAgICAvLyBjdXJyZW50bHktcmV0dXJuZWQg
aW1hZ2UsIG5vciB0aGUgcmVzdWx0cyBvZiBmdXR1cmUgaW1hZ2UoKSBjYWxscywKLSAgICAgICAg
Ly8gd2lsbCBjb250YWluIHRoYXQgb3BlcmF0aW9uLgotICAgICAgICAvLwotICAgICAgICAvLyBU
aGlzIHNlZW1zIHNpbGx5LCBidXQgaXMgdGhlIHdheSB0aGUgQ0cgcG9ydCB3b3JrczogaW1hZ2Uo
KSBpcwotICAgICAgICAvLyBpbnRlbmRlZCB0byBiZSB1c2VkIG9ubHkgd2hlbiByZW5kZXJpbmcg
aXMgImNvbXBsZXRlLiIKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBuZXdzdXJmYWNlID0gY29w
eVN1cmZhY2UobV9kYXRhLm1fc3VyZmFjZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICAg
ICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBk
ZXN0cnVjdGlvbgotICAgICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShuZXdzdXJm
YWNlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CitQYXNzUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKCkgY29uc3QKK3sKKyAgICAvLyBCaXRtYXBJbWFnZSB3
aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCisgICAgcmV0
dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY29weVN1cmZhY2UobV9kYXRhLm1fc3VyZmFjZSkpOwor
fQorCit2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3Ag
LCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKK3sKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29w
eSA9IGNvcGllZEltYWdlKCk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlQ29weS5nZXQo
KSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlT
Y2FsZSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQoreworICAgIFJlZlB0cjxJ
bWFnZT4gaW1hZ2VDb3B5ID0gY29waWVkSW1hZ2UoKTsKKyAgICBpbWFnZUNvcHktPmRyYXdQYXR0
ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9y
U3BhY2UsIG9wLCBkZXN0UmVjdCk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJh
bnNmb3JtQ29sb3JTcGFjZShjb25zdCBWZWN0b3I8aW50PiYgbG9va1VwVGFibGUpCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RD
Ry5jcHAJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHQzRENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw4IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50VG9DYW52YXMoY28KICAgICBDR0NvbnRleHRT
ZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LCBrQ0dJbnRlcnBvbGF0aW9uTm9uZSk7CiAg
ICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIHJlY3QsIGNnSW1hZ2UuZ2V0KCkpOwogICAg
IENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CisgICAgCisgICAgQ0dDb250ZXh0Rmx1
c2goY29udGV4dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCShyZXZp
c2lvbiA2NTMyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTMsMTggKzc1Myw2IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWMKICAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4
dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKLXsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0NvbnRleHRU
cmFuc2xhdGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3Qu
aGVpZ2h0KCkpOwotICAgIENHQ29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCAxLCAt
MSk7Ci0gICAgQ0dDb250ZXh0Q2xpcFRvTWFzayhwbGF0Zm9ybUNvbnRleHQoKSwgRmxvYXRSZWN0
KEZsb2F0UG9pbnQoKSwgcmVjdC5zaXplKCkpLCBpbWFnZUJ1ZmZlci0+aW1hZ2UoKS0+Z2V0Q0dJ
bWFnZVJlZigpKTsKLSAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgMSwg
LTEpOwotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgLXJlY3Qu
eCgpLCAtcmVjdC55KCkgLSByZWN0LmhlaWdodCgpKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwCShyZXZpc2lvbiA2NTMyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDQyICs1
Niw0NiBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgCiAgICAgLCBt
X3NpemUoc2l6ZSkKIHsKICAgICBzdWNjZXNzID0gZmFsc2U7ICAvLyBNYWtlIGVhcmx5IHJldHVy
biBtZWFuIGZhaWx1cmUuCi0gICAgdW5zaWduZWQgYnl0ZXNQZXJSb3c7CiAgICAgaWYgKHNpemUu
d2lkdGgoKSA8IDAgfHwgc2l6ZS5oZWlnaHQoKSA8IDApCiAgICAgICAgIHJldHVybjsKLSAgICBi
eXRlc1BlclJvdyA9IHNpemUud2lkdGgoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0g
c2l6ZS53aWR0aCgpOwogICAgIGlmIChpbWFnZUNvbG9yU3BhY2UgIT0gR3JheVNjYWxlKSB7CiAg
ICAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCBvdmVyZmxvdwogICAgICAgICBpZiAoYnl0ZXNQZXJS
b3cgPiAweDNGRkZGRkZGKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBieXRlc1BlclJv
dyAqPSA0OwogICAgIH0KKyAgICBtX2RhdGEubV9ieXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93Owog
CisgICAgc2l6ZV90IGRhdGFTaXplID0gc2l6ZS5oZWlnaHQoKSAqIGJ5dGVzUGVyUm93OwogICAg
IGlmICghdHJ5RmFzdENhbGxvYyhzaXplLmhlaWdodCgpLCBieXRlc1BlclJvdykuZ2V0VmFsdWUo
bV9kYXRhLm1fZGF0YSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVCgocmVpbnRlcnBy
ZXRfY2FzdDxzaXplX3Q+KG1fZGF0YS5tX2RhdGEpICYgMikgPT0gMCk7CiAKLSAgICBSZXRhaW5Q
dHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlOwogICAgIHN3aXRjaChpbWFnZUNvbG9yU3Bh
Y2UpIHsKICAgICAgICAgY2FzZSBEZXZpY2VSR0I6Ci0gICAgICAgICAgICBjb2xvclNwYWNlLmFk
b3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOworICAgICAgICAgICAgbV9kYXRh
Lm1fY29sb3JTcGFjZS5hZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdyYXlTY2FsZToKLSAgICAgICAgICAgIGNv
bG9yU3BhY2UuYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VHcmF5KCkpOworICAgICAg
ICAgICAgbV9kYXRhLm1fY29sb3JTcGFjZS5hZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmlj
ZUdyYXkoKSk7CiAgICAgICAgICAgICBicmVhazsKICNpZiAoKFBMQVRGT1JNKE1BQykgfHwgUExB
VEZPUk0oQ0hST01JVU0pKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikpCiAgICAgICAg
IGNhc2UgTGluZWFyUkdCOgotICAgICAgICAgICAgY29sb3JTcGFjZS5hZG9wdENGKENHQ29sb3JT
cGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VHZW5lcmljUkdCTGluZWFyKSk7CisgICAg
ICAgICAgICBtX2RhdGEubV9jb2xvclNwYWNlLmFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0
aE5hbWUoa0NHQ29sb3JTcGFjZUdlbmVyaWNSR0JMaW5lYXIpKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCiAjZW5kaWYKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGNv
bG9yU3BhY2UuYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CisgICAgICAg
ICAgICBtX2RhdGEubV9jb2xvclNwYWNlLmFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNl
UkdCKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgbV9kYXRhLm1fZ3JheVNj
YWxlID0gaW1hZ2VDb2xvclNwYWNlID09IEdyYXlTY2FsZTsKKyAgICBtX2RhdGEubV9iaXRtYXBJ
bmZvID0gbV9kYXRhLm1fZ3JheVNjYWxlID8ga0NHSW1hZ2VBbHBoYU5vbmUgOiBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZExhc3Q7CiAgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250
ZXh0KEFkb3B0Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZShtX2RhdGEubV9kYXRhLCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCksIDgsIGJ5dGVzUGVyUm93LAotICAgICAgICBjb2xvclNwYWNl
LmdldCgpLCAoaW1hZ2VDb2xvclNwYWNlID09IEdyYXlTY2FsZSkgPyBrQ0dJbWFnZUFscGhhTm9u
ZSA6IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRh
Lm1fY29sb3JTcGFjZS5nZXQoKSwgbV9kYXRhLm1fYml0bWFwSW5mbykpOwogICAgIGlmICghY2dD
b250ZXh0KQogICAgICAgICByZXR1cm47CiAKQEAgLTk5LDYgKzEwMyw5IEBAIEltYWdlQnVmZmVy
OjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiAKICAgICBtX2NvbnRleHQtPnNjYWxlKEZsb2F0
U2l6ZSgxLCAtMSkpOwogICAgIG1fY29udGV4dC0+dHJhbnNsYXRlKDAsIC1zaXplLmhlaWdodCgp
KTsKICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAKKyAgICAvLyBDcmVhdGUgYSBsaXZlIGltYWdl
IHRoYXQgd3JhcHMgdGhlIGRhdGEuCisgICAgbV9kYXRhLm1fZGF0YVByb3ZpZGVyLmFkb3B0Q0Yo
Q0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX2RhdGEubV9kYXRhLCBkYXRhU2l6ZSwg
MCkpOwogfQogCiBJbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkKQEAgLTExMSwxNyArMTE4LDU2
IEBAIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSAKICAgICByZXR1cm4g
bV9jb250ZXh0LmdldCgpOwogfQogCi1JbWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29uc3QK
K2Jvb2wgSW1hZ2VCdWZmZXI6OmRyYXdzVXNpbmdDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoKSBj
b25zdAoreworICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIENH
SW1hZ2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShDR0Jp
dG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKSk7Cit9
CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewotICAgIGlmICghbV9pbWFn
ZSkgewotICAgICAgICAvLyBJdCdzIGFzc3VtZWQgdGhhdCBpZiBpbWFnZSgpIGlzIGNhbGxlZCwg
dGhlIGFjdHVhbCByZW5kZXJpbmcgdG8gdGhlCi0gICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dCBt
dXN0IGJlIGRvbmUuCi0gICAgICAgIEFTU0VSVChjb250ZXh0KCkpOwotICAgICAgICBDR0ltYWdl
UmVmIGNnSW1hZ2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRm
b3JtQ29udGV4dCgpKTsKLSAgICAgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBw
YXNzZWQgaW4gQ0dJbWFnZSBvbiBkZXN0cnVjdGlvbgotICAgICAgICBtX2ltYWdlID0gQml0bWFw
SW1hZ2U6OmNyZWF0ZShjZ0ltYWdlKTsKKyAgICBpZiAoZGVzdENvbnRleHQgPT0gY29udGV4dCgp
KSB7CisgICAgICAgIC8vIFdlJ3JlIGRyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlci4gIEluIG9y
ZGVyIGZvciB0aGlzIHRvIHdvcmssIHdlIG5lZWQgdG8gY29weSB0aGUgc291cmNlIGJ1ZmZlciBm
aXJzdC4KKyAgICAgICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKCk7CisgICAgICAg
IGRlc3RDb250ZXh0LT5kcmF3SW1hZ2UoY29weS5nZXQoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcgPSBCaXRtYXBJbWFnZTo6Y3Jl
YXRlKENHSW1hZ2VDcmVhdGUobV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgOCwgbV9k
YXRhLm1fZ3JheVNjYWxlID8gOCA6IDMyLCBtX2RhdGEubV9ieXRlc1BlclJvdywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9k
YXRhLm1fY29sb3JTcGFjZS5nZXQoKSwgbV9kYXRhLm1fYml0bWFwSW5mbywgbV9kYXRhLm1fZGF0
YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Cisg
ICAgICAgIGRlc3RDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2VGb3JSZW5kZXJpbmcuZ2V0KCksIHN0
eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUp
OwogICAgIH0KLSAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
cjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0KQoreworICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsK
KyAgICAgICAgLy8gV2UncmUgZHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLiAgSW4gb3JkZXIg
Zm9yIHRoaXMgdG8gd29yaywgd2UgbmVlZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVmZmVyIGZpcnN0
LgorICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoKTsKKyAgICAgICAgY29w
eS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IEJpdG1hcEltYWdlOjpjcmVhdGUo
Q0dJbWFnZUNyZWF0ZShtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCA4LCBtX2RhdGEu
bV9ncmF5U2NhbGUgPyA4IDogMzIsIG1fZGF0YS5tX2J5dGVzUGVyUm93LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEu
bV9jb2xvclNwYWNlLmdldCgpLCBtX2RhdGEubV9iaXRtYXBJbmZvLCBtX2RhdGEubV9kYXRhUHJv
dmlkZXIuZ2V0KCksIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICAg
ICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBzcmNSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwor
ICAgIH0KK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gaW1hZ2UoQWRvcHRDRiwgQ0dJbWFnZUNyZWF0ZShtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpLCA4LCBtX2RhdGEubV9ncmF5U2NhbGUgPyA4IDogMzIsIG1fZGF0YS5tX2J5dGVz
UGVyUm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZGF0YS5tX2NvbG9yU3BhY2UuZ2V0KCksIG1fZGF0YS5tX2JpdG1hcEluZm8sIG1f
ZGF0YS5tX2RhdGFQcm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVm
YXVsdCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgQ0dDb250ZXh0
UmVmIHBsYXRmb3JtQ29udGV4dCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIENH
Q29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQsIHJlY3QueCgpLCByZWN0LnkoKSAr
IHJlY3QuaGVpZ2h0KCkpOworICAgIENHQ29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCwg
MSwgLTEpOworICAgIENHQ29udGV4dENsaXBUb01hc2socGxhdGZvcm1Db250ZXh0LCBGbG9hdFJl
Y3QoRmxvYXRQb2ludCgpLCByZWN0LnNpemUoKSksIGltYWdlLmdldCgpKTsKKyAgICBDR0NvbnRl
eHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQsIDEsIC0xKTsKKyAgICBDR0NvbnRleHRUcmFuc2xh
dGVDVE0ocGxhdGZvcm1Db250ZXh0LCAtcmVjdC54KCksIC1yZWN0LnkoKSAtIHJlY3QuaGVpZ2h0
KCkpOwogfQogCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVsdGlwbGllZD4KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGEuaAkocmV2aXNpb24gNjUz
MjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiwxNCBAQAogI2lmbmRlZiBJbWFnZUJ1ZmZlckRhdGFf
aAogI2RlZmluZSBJbWFnZUJ1ZmZlckRhdGFfaAogCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlICJJbWFnZS5oIgorCit0eXBlZGVm
IHN0cnVjdCBDR0NvbG9yU3BhY2UgKkNHQ29sb3JTcGFjZVJlZjsKK3R5cGVkZWYgc3RydWN0IENH
RGF0YVByb3ZpZGVyICpDR0RhdGFQcm92aWRlclJlZjsKK3R5cGVkZWYgdWludDMyX3QgQ0dCaXRt
YXBJbmZvOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEludFNpemU7CkBAIC0zNSw2
ICs0MywxMiBAQCBwdWJsaWM6CiAgICAgSW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmKTsK
IAogICAgIHZvaWQqIG1fZGF0YTsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJS
ZWY+IG1fZGF0YVByb3ZpZGVyOworICAgIENHQml0bWFwSW5mbyBtX2JpdG1hcEluZm87CisgICAg
Ym9vbCBtX2dyYXlTY2FsZTsKKyAgICB1bnNpZ25lZCBtX2J5dGVzUGVyUm93OworICAgIFJldGFp
blB0cjxDR0NvbG9yU3BhY2VSZWY+IG1fY29sb3JTcGFjZTsKIH07CiAKIH0gIC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCShyZXZpc2lvbiA2NTMyOSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTY0LDcgKzE2NCw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIK
ICAgICBpZiAoIWZpbHRlckNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZpbHRlckNv
bnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xv
clNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOwor
ICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBE
ZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdp
b24oKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2Uo
KS0+c2l6ZSgpKTsKICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhKHJlc3VsdElt
YWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZVJlY3QpKTsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkocmV2
aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMjYgKzEzMSwyNiBAQCB2b2lkIEZFQ29t
cG9zaXRlOjphcHBseShGaWx0ZXIqIGZpbHRlcikKICAgICBGbG9hdFJlY3Qgc3JjUmVjdCA9IEZs
b2F0UmVjdCgwLmYsIDAuZiwgLTEuZiwgLTEuZik7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQt
PmRyYXdJbWFnZShtX2luMi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFj
ZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigpKSk7Ci0gICAg
ICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgp
LCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJS
ZWdpb24oKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbjIt
PnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1f
aW4yLT5zY2FsZWRTdWJSZWdpb24oKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1h
Z2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRl
RHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoKICAgICAgICAgZmlsdGVyQ29udGV4dC0+
c2F2ZSgpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihjYWxjdWxh
dGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9uKCkpLCBtX2luMi0+cmVzdWx0SW1h
Z2UoKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFn
ZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2lu
LT5zY2FsZWRTdWJSZWdpb24oKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5jbGlwVG9JbWFn
ZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+
c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVm
ZmVyKG1faW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdp
bmdSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKSk7CiAgICAgICAgIGZpbHRlckNvbnRleHQt
PnJlc3RvcmUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFn
ZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2lu
LT5zY2FsZWRTdWJSZWdpb24oKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2Uo
bV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0
ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0
ZURlc3RpbmF0aW9uT3V0KTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVy
KG1faW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdS
ZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRy
YXdJbWFnZUJ1ZmZlcihtX2luMi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2Fs
Y3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigpKSwgc3JjUmVjdCwgQ29t
cG9zaXRlRGVzdGluYXRpb25PdXQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9T
SVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2lu
Mi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJh
d2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNw
YWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSksIHNyY1Jl
Y3QsIENvbXBvc2l0ZVNvdXJjZUF0b3ApOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1h
Z2VCdWZmZXIobV9pbjItPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0
ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSkpOworICAgICAgICBmaWx0ZXJD
b250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JT
cGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpLCBzcmNS
ZWN0LCBDb21wb3NpdGVTb3VyY2VBdG9wKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9YT1I6Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZSht
X2luMi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRl
RHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigpKSk7Ci0gICAgICAgIGZpbHRlckNv
bnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xv
clNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSksIHNy
Y1JlY3QsIENvbXBvc2l0ZVhPUik7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1
ZmZlcihtX2luMi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJh
d2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigpKSk7CisgICAgICAgIGZpbHRlckNvbnRl
eHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNl
LCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSksIHNyY1JlY3Qs
IENvbXBvc2l0ZVhPUik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BF
UkFUT1JfQVJJVEhNRVRJQzogewogICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9
IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKTsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNw
cAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlQWxwaGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw5ICs2Myw5IEBAIHZvaWQgU291
cmNlQWxwaGE6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogCiAgICAgc2V0SXNBbHBoYUltYWdlKHRy
dWUpOwogCi0gICAgRmxvYXRSZWN0IGltYWdlUmVjdChGbG9hdFBvaW50KCksIGZpbHRlci0+c291
cmNlSW1hZ2UoKS0+aW1hZ2UoKS0+c2l6ZSgpKTsKKyAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KEZs
b2F0UG9pbnQoKSwgZmlsdGVyLT5zb3VyY2VJbWFnZSgpLT5zaXplKCkpOwogICAgIGZpbHRlckNv
bnRleHQtPnNhdmUoKTsKLSAgICBmaWx0ZXJDb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihpbWFn
ZVJlY3QsIGZpbHRlci0+c291cmNlSW1hZ2UoKSk7CisgICAgZmlsdGVyQ29udGV4dC0+Y2xpcFRv
SW1hZ2VCdWZmZXIoZmlsdGVyLT5zb3VyY2VJbWFnZSgpLCBpbWFnZVJlY3QpOwogICAgIGZpbHRl
ckNvbnRleHQtPmZpbGxSZWN0KGltYWdlUmVjdCwgQ29sb3I6OmJsYWNrLCBEZXZpY2VDb2xvclNw
YWNlKTsKICAgICBmaWx0ZXJDb250ZXh0LT5yZXN0b3JlKCk7CiB9CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCShyZXZp
c2lvbiA2NTMyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCB2b2lkIFNvdXJjZUdy
YXBoaWM6OmFwcGx5KEZpbHRlciogZmlsdGVyCiAgICAgaWYgKCFmaWx0ZXJDb250ZXh0KQogICAg
ICAgICByZXR1cm47CiAKLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UoZmlsdGVyLT5zb3Vy
Y2VJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBJbnRQb2ludCgpKTsKKyAgICBm
aWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoZmlsdGVyLT5zb3VyY2VJbWFnZSgpLCBEZXZp
Y2VDb2xvclNwYWNlLCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBTb3VyY2VHcmFwaGljOjpkdW1w
KCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNE
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBo
aWNzQ29udGV4dDNETWFjLm1tCShyZXZpc2lvbiA2NTMyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODIsMTUgKzI4Miw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmUK
ICAgICAgICAgICAgICAgICAgIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgaW1h
Z2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpiZWdpblBhaW50KENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjplbmRQYWludCgpCi17Ci19Ci0KIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJD
b21wbGlhbnQoKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkocmV2
aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dDNEUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTIsMTUgKzUxMiw2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmUKICAgICBtX2ludGVybmFsLT5tX2dsV2lk
Z2V0LT5tYWtlQ3VycmVudCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiZWdpblBh
aW50KENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgcGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5kUGFp
bnQoKQotewotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewogICAgIG1faW50
ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkocmV2aXNpb24gNjUz
MjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE4NSwyMyArMTE4NSw2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwT3V0RWxsaXBzZUluUmUKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIGZsb2F0UmVjdCwgY29uc3QgSW1h
Z2VCdWZmZXIqIGltYWdlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFFQaXhtYXAqIG5hdGl2ZUltYWdlID0gaW1hZ2UtPmltYWdlKCktPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCByZWN0KGZsb2F0UmVjdCk7Ci0gICAgUVBpeG1hcCBh
bHBoYU1hc2sgPSAqbmF0aXZlSW1hZ2U7Ci0gICAgaWYgKGFscGhhTWFzay53aWR0aCgpICE9IHJl
Y3Qud2lkdGgoKSB8fCBhbHBoYU1hc2suaGVpZ2h0KCkgIT0gcmVjdC5oZWlnaHQoKSkKLSAgICAg
ICAgYWxwaGFNYXNrID0gYWxwaGFNYXNrLnNjYWxlZChyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpOwotCi0gICAgbV9kYXRhLT5sYXllcnMucHVzaChuZXcgVHJhbnNwYXJlbmN5TGF5ZXIobV9k
YXRhLT5wKCksIG1fZGF0YS0+cCgpLT50cmFuc2Zvcm0oKS5tYXBSZWN0KHJlY3QpLCAxLjAsIGFs
cGhhTWFzaykpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVj
dENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgdGhpY2tuZXNzKQogewpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlckRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyRGF0YS5oCShyZXZpc2lvbiA2NTMyOSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJEYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDkgQEAKICNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhX2gKICNkZWZp
bmUgSW1hZ2VCdWZmZXJEYXRhX2gKIAorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
ICJJbWFnZS5oIgorCiAjaW5jbHVkZSA8UVBhaW50ZXI+CiAjaW5jbHVkZSA8UVBpeG1hcD4KIApA
QCAtNDEsNiArNDQsNyBAQCBwdWJsaWM6CiAKICAgICBRUGl4bWFwIG1fcGl4bWFwOwogICAgIE93
blB0cjxRUGFpbnRlcj4gbV9wYWludGVyOworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKIH07
CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIk1JTUVU
eXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJTdGlsbEltYWdlUXQuaCIKKyNpbmNsdWRlICJUcmFu
c3BhcmVuY3lMYXllci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2luY2x1
ZGUgPFFCdWZmZXI+CkBAIC03NCw2ICs3NSw4IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZm
ZXJEYXRhKGNvbnN0IEkKICAgICBicnVzaC5zZXRDb2xvcihRdDo6YmxhY2spOwogICAgIHBhaW50
ZXItPnNldEJydXNoKGJydXNoKTsKICAgICBwYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBh
aW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VPdmVyKTsKKyAgICAKKyAgICBtX2RhdGEubV9p
bWFnZSA9IFN0aWxsSW1hZ2U6OmNyZWF0ZUZvclJlbmRlcmluZygmbV9kYXRhLm1fcGl4bWFwKTsK
IH0KIAogSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIEltYWdl
Q29sb3JTcGFjZSwgYm9vbCYgc3VjY2VzcykKQEAgLTk4LDI0ICsxMDEsNTAgQEAgR3JhcGhpY3ND
b250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIAogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0
KCk7CiB9CiAKLUltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2VGb3JSZW5kZXJpbmcoKSBjb25zdAor
Ym9vbCBJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2luZ0NvcHkoKSBjb25zdAogewotICAgIGlmICghbV9p
bWFnZSkKLSAgICAgICAgbV9pbWFnZSA9IFN0aWxsSW1hZ2U6OmNyZWF0ZUZvclJlbmRlcmluZygm
bV9kYXRhLm1fcGl4bWFwKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLSAgICByZXR1cm4gbV9p
bWFnZS5nZXQoKTsKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoKSBj
b25zdAoreworICAgIHJldHVybiBTdGlsbEltYWdlOjpjcmVhdGUobV9kYXRhLm1fcGl4bWFwKTsK
IH0KIAotSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZSgpIGNvbnN0Cit2b2lkIEltYWdlQnVmZmVy
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCogZGVzdENvbnRleHQsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsCisgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVz
ZUxvd1F1YWxpdHlTY2FsZSkKIHsKLSAgICBpZiAoIW1faW1hZ2UpIHsKLSAgICAgICAgLy8gSXQn
cyBhc3N1bWVkIHRoYXQgaWYgaW1hZ2UoKSBpcyBjYWxsZWQsIHRoZSBhY3R1YWwgcmVuZGVyaW5n
IHRvIHRoZQotICAgICAgICAvLyBHcmFwaGljc0NvbnRleHQgbXVzdCBiZSBkb25lLgotICAgICAg
ICBBU1NFUlQoY29udGV4dCgpKTsKLSAgICAgICAgbV9pbWFnZSA9IFN0aWxsSW1hZ2U6OmNyZWF0
ZShtX2RhdGEubV9waXhtYXApOwotICAgIH0KKyAgICBpZiAoZGVzdENvbnRleHQgPT0gY29udGV4
dCgpKSB7CisgICAgICAgIC8vIFdlJ3JlIGRyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlci4gIElu
IG9yZGVyIGZvciB0aGlzIHRvIHdvcmssIHdlIG5lZWQgdG8gY29weSB0aGUgc291cmNlIGJ1ZmZl
ciBmaXJzdC4KKyAgICAgICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gY29waWVkSW1hZ2UoKTsKKyAg
ICAgICAgZGVzdENvbnRleHQtPmRyYXdJbWFnZShjb3B5LmdldCgpLCBEZXZpY2VDb2xvclNwYWNl
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgfSBlbHNl
CisgICAgICAgIGRlc3RDb250ZXh0LT5kcmF3SW1hZ2UobV9kYXRhLm1faW1hZ2UuZ2V0KCksIHN0
eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUp
OworfQorCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGRl
c3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit7CisgICAgaWYgKGRlc3RD
b250ZXh0ID09IGNvbnRleHQoKSkgeworICAgICAgICAvLyBXZSdyZSBkcmF3aW5nIGludG8gb3Vy
IG93biBidWZmZXIuICBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCB3ZSBuZWVkIHRvIGNvcHkg
dGhlIHNvdXJjZSBidWZmZXIgZmlyc3QuCisgICAgICAgIFJlZlB0cjxJbWFnZT4gY29weSA9IGNv
cGllZEltYWdlKCk7CisgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBzcmNS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJl
Y3QpOworICAgIH0gZWxzZQorICAgICAgICBtX2RhdGEubV9pbWFnZS0+ZHJhd1BhdHRlcm4oZGVz
dENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3Bh
Y2UsIG9wLCBkZXN0UmVjdCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGZsb2F0UmVjdCkKK3sKKyAgICBRUGl4
bWFwKiBuYXRpdmVJbWFnZSA9IG1fZGF0YS5tX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOworICAgIGlmICghbmF0aXZlSW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIElu
dFJlY3QgcmVjdChmbG9hdFJlY3QpOworICAgIFFQaXhtYXAgYWxwaGFNYXNrID0gKm5hdGl2ZUlt
YWdlOworICAgIGlmIChhbHBoYU1hc2sud2lkdGgoKSAhPSByZWN0LndpZHRoKCkgfHwgYWxwaGFN
YXNrLmhlaWdodCgpICE9IHJlY3QuaGVpZ2h0KCkpCisgICAgICAgIGFscGhhTWFzayA9IGFscGhh
TWFzay5zY2FsZWQocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIAotICAgIHJldHVybiBt
X2ltYWdlLmdldCgpOworICAgIG1fZGF0YS0+bGF5ZXJzLnB1c2gobmV3IFRyYW5zcGFyZW5jeUxh
eWVyKG1fZGF0YS0+cCgpLCBtX2RhdGEtPnAoKS0+dHJhbnNmb3JtKCkubWFwUmVjdChyZWN0KSwg
MS4wLCBhbHBoYU1hc2spKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zv
cm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+JiBsb29rVXBUYWJsZSkKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tp
YS5jcHAJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTYsMTcgKzQ1Niw2
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChXaW5kUnVsZSAKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+Y2xpcFBhdGhBbnRpQWxpYXNlZChwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbWFnZUJ1ZmZlciogaW1h
Z2VCdWZmZXIpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0jaWYgT1MoTElOVVgpIHx8IE9TKFdJTkRPV1MpCi0gICAgcGxhdGZvcm1Db250ZXh0KCkt
PmJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShyZWN0LCBpbWFnZUJ1ZmZlcik7Ci0jZW5kaWYKLX0K
LQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGFmZmluZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlz
aW9uIDY1MzI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVy
U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDIwICs4NywzNSBAQCBHcmFwaGljc0NvbnRl
eHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgCiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsK
IH0KIAotSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZSgpIGNvbnN0Citib29sIEltYWdlQnVmZmVy
OjpkcmF3c1VzaW5nQ29weSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ltYWdlKSB7Ci0gICAgICAg
IC8vIFRoaXMgY3JlYXRlcyBhIENPUFkgb2YgdGhlIGltYWdlIGFuZCB3aWxsIGNhY2hlIHRoYXQg
Y29weS4gVGhpcyBtZWFucwotICAgICAgICAvLyB0aGF0IGlmIHN1YnNlcXVlbnQgb3BlcmF0aW9u
cyB0YWtlIHBsYWNlIG9uIHRoZSBjb250ZXh0LCBuZWl0aGVyIHRoZQotICAgICAgICAvLyBjdXJy
ZW50bHktcmV0dXJuZWQgaW1hZ2UsIG5vciB0aGUgcmVzdWx0cyBvZiBmdXR1cmUgaW1hZ2UoKSBj
YWxscywKLSAgICAgICAgLy8gd2lsbCBjb250YWluIHRoYXQgb3BlcmF0aW9uLgotICAgICAgICAv
LwotICAgICAgICAvLyBUaGlzIHNlZW1zIHNpbGx5LCBidXQgaXMgdGhlIHdheSB0aGUgQ0cgcG9y
dCB3b3JrczogaW1hZ2UoKSBpcwotICAgICAgICAvLyBpbnRlbmRlZCB0byBiZSB1c2VkIG9ubHkg
d2hlbiByZW5kZXJpbmcgaXMgImNvbXBsZXRlLiIKLSAgICAgICAgbV9pbWFnZSA9IEJpdG1hcElt
YWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVhdGUoCi0gICAgICAgICAgICAqbV9kYXRhLm1fcGxhdGZv
cm1Db250ZXh0LmJpdG1hcCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5
SW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6
Y3JlYXRlKCptX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuYml0bWFwKCkpOworfQorCit2b2lkIElt
YWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiByZWN0KSBjb25zdAoreworI2lmIE9TKExJTlVYKSB8fCBPUyhXSU5ET1dTKQorICAgIGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5iZWdpbkxheWVyQ2xpcHBlZFRvSW1hZ2UocmVjdCwgdGhp
cyk7CisjZW5kaWYKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsCisgICAgICAgICAgICAgICAgICAgICAg
IENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKK3sKKyAgICBS
ZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcGllZEltYWdlKCk7CisgICAgY29udGV4dC0+ZHJh
d0ltYWdlKGltYWdlQ29weS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQ
YXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0KQoreworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29waWVkSW1hZ2UoKTsKKyAg
ICBpbWFnZUNvcHktPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiB9CiAKIHZvaWQgSW1h
Z2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBWZWN0b3I8aW50PiYg
bG9va1VwVGFibGUpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNz
Q29udGV4dFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4
L0dyYXBoaWNzQ29udGV4dFd4LmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzc4LDExICszNzgsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQ
CiAgICAgY2xpcChwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlQnVmZmVyKikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCiBBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRD
VE0oKSBjb25zdAogeyAKICNpZiBVU0UoV1hHQykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MiwxMiArODIsMzcgQEAgU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3Qg
U3RyaQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFn
ZSgpIGNvbnN0Citib29sIEltYWdlQnVmZmVyOjpkcmF3c1VzaW5nQ29weSgpIGNvbnN0Cit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxJ
bWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSgpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICBDb21wb3Np
dGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCit7CisgICAgUmVmUHRyPElt
YWdlPiBpbWFnZUNvcHkgPSBjb3BpZWRJbWFnZSgpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZShp
bWFnZUNvcHkuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1
c2VMb3dRdWFsaXR5U2NhbGUpOworfQorCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3sK
KyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcGllZEltYWdlKCk7CisgICAgaW1hZ2VD
b3B5LT5kcmF3UGF0dGVybihjb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFz
ZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOworfQorCiB2b2lkIEltYWdlQnVmZmVy
OjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJU
aGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJU
aGVtZU1hYy5tbQkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9TY3Jv
bGxiYXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzk2LDcgKzM5Niw3IEBAIGJvb2wg
U2Nyb2xsYmFyVGhlbWVNYWM6OnBhaW50KFNjcm9sbGJhcioKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAKICAgICAgICAgSElUaGVtZURyYXdUcmFjaygmdHJhY2tJbmZvLCAwLCBp
bWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwga0hJVGhlbWVPcmllbnRh
dGlvbk5vcm1hbCk7Ci0gICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZUJ1ZmZlci0+aW1h
Z2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5sb2NhdGlvbigp
KTsKKyAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLmdldCgpLCBE
ZXZpY2VDb2xvclNwYWNlLCBzY3JvbGxiYXItPmZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpOwogICAg
IH0KIAogICAgIHJldHVybiB0cnVlOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMSw3ICs1MzEsNyBA
QCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllCiAgICAgICAgIAogICAg
ICAgICAvLyBUaGUgbWFzayBoYXMgYmVlbiBjcmVhdGVkLiAgTm93IHdlIGp1c3QgbmVlZCB0byBj
bGlwIHRvIGl0LgogICAgICAgICBjb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQtPmNs
aXBUb0ltYWdlQnVmZmVyKG1hc2tSZWN0LCBtYXNrSW1hZ2UuZ2V0KCkpOworICAgICAgICBjb250
ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihtYXNrSW1hZ2UuZ2V0KCksIG1hc2tSZWN0KTsKICAgICB9
CiAgICAgCiAgICAgU3R5bGVJbWFnZSogYmcgPSBiZ0xheWVyLT5pbWFnZSgpOwpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCShyZXZpc2lv
biA2NTE2MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNyBAQCBib29sIFJlbmRlclNWR1Jlc291
cmNlQ2xpcHBlcjo6YXBwbHlDbGlwCiAgICAgaWYgKCFjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJbWFn
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZm
ZXIocmVwYWludFJlY3QsIGNsaXBwZXJEYXRhLT5jbGlwTWFza0ltYWdlLmdldCgpKTsKKyAgICBj
b250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJbWFnZS5nZXQo
KSwgcmVwYWludFJlY3QpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCShyZXZpc2lvbiA2NTE2MCkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcxLDcgKzI3MSw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OnBvc3RBcHBseVIKICNpZiAhUExBVEZPUk0oQ0cpCiAgICAgICAgICAgICByZXN1bHRJbWFnZS0+
dHJhbnNmb3JtQ29sb3JTcGFjZShMaW5lYXJSR0IsIERldmljZVJHQik7CiAjZW5kaWYKLSAgICAg
ICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShyZXN1bHRJbWFnZS0+aW1hZ2UoKSwgb2JqZWN0LT5z
dHlsZSgpLT5jb2xvclNwYWNlKCksIGxhc3RFZmZlY3QtPnN1YlJlZ2lvbigpKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihyZXN1bHRJbWFnZSwgb2JqZWN0LT5zdHlsZSgp
LT5jb2xvclNwYWNlKCksIGxhc3RFZmZlY3QtPnN1YlJlZ2lvbigpKTsKICAgICAgICAgfQogICAg
IH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudC5jcHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VHcmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBz
dGF0aWMgaW5saW5lIEFmZmluZVRyYW5zZm9ybSBjbGlwVG9UZXh0CiAgICAgLy8gU28gdGhlIGFj
dHVhbCBtYXNraW5nIHByb2Nlc3MgaGFzIHRvIGJlIGRvbmUgaW4gdGhlIGRldmljZSBjb29yZGlu
YXRlIHNwYWNlIGFzIHdlbGwuCiAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybShhYnNvbHV0
ZVRyYW5zZm9ybUZyb21Db250ZXh0KGNvbnRleHQpKTsKICAgICBjb250ZXh0LT5jb25jYXRDVE0o
dHJhbnNmb3JtLmludmVyc2UoKSk7Ci0gICAgY29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIodHJh
bnNmb3JtLm1hcFJlY3QodGV4dFJvb3RCbG9jay0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSksIGltYWdlQnVmZmVyLmdldCgpKTsKKyAgICBjb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZl
cihpbWFnZUJ1ZmZlci5nZXQoKSwgdHJhbnNmb3JtLm1hcFJlY3QodGV4dFJvb3RCbG9jay0+cmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOwogICAgIGNvbnRleHQtPmNvbmNhdENUTSh0
cmFuc2Zvcm0pOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJKHJldmlzaW9uIDY1MTYw
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tl
cjo6YXBwbHlSZXNvdQogICAgIGlmICghbWFza2VyRGF0YS0+bWFza0ltYWdlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBjb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihtYXNrZXJEYXRh
LT5tYXNrUmVjdCwgbWFza2VyRGF0YS0+bWFza0ltYWdlLmdldCgpKTsKKyAgICBjb250ZXh0LT5j
bGlwVG9JbWFnZUJ1ZmZlcihtYXNrZXJEYXRhLT5tYXNrSW1hZ2UuZ2V0KCksIG1hc2tlckRhdGEt
Pm1hc2tSZWN0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCShyZXZpc2lvbiA2NTE2MCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5OCwxNCArMjk4LDE1IEBAIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IFJlbmRl
clNWR1Jlc291cmMKIAogdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmJ1aWxkUGF0dGVy
bihQYXR0ZXJuRGF0YSogcGF0dGVybkRhdGEsIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IHRpbGVJ
bWFnZSkgY29uc3QKIHsKLSAgICBpZiAoIXRpbGVJbWFnZS0+aW1hZ2UoKSkgeworICAgIFJlZlB0
cjxJbWFnZT4gY29waWVkSW1hZ2UgPSB0aWxlSW1hZ2UtPmNvcHlJbWFnZSgpOworICAgIGlmICgh
Y29waWVkSW1hZ2UpIHsKICAgICAgICAgcGF0dGVybkRhdGEtPnBhdHRlcm4gPSAwOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotCi0gICAgSW50UmVjdCB0aWxlUmVjdCA9IHRpbGVJbWFnZS0+aW1h
Z2UoKS0+cmVjdCgpOworICAgIAorICAgIEludFJlY3QgdGlsZVJlY3QgPSBjb3BpZWRJbWFnZS0+
cmVjdCgpOwogICAgIGlmICh0aWxlUmVjdC53aWR0aCgpIDw9IHBhdHRlcm5EYXRhLT5ib3VuZGFy
aWVzLndpZHRoKCkgJiYgdGlsZVJlY3QuaGVpZ2h0KCkgPD0gcGF0dGVybkRhdGEtPmJvdW5kYXJp
ZXMuaGVpZ2h0KCkpIHsKLSAgICAgICAgcGF0dGVybkRhdGEtPnBhdHRlcm4gPSBQYXR0ZXJuOjpj
cmVhdGUodGlsZUltYWdlLT5pbWFnZSgpLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgcGF0dGVybkRh
dGEtPnBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUoY29waWVkSW1hZ2UsIHRydWUsIHRydWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMzEsMTMgKzMzMiwxMyBAQCB2b2lkIFJlbmRl
clNWR1Jlc291cmNlUGF0dGVybjo6YnVpbGRQYXR0CiAgICAgICAgIG5ld1RpbGVJbWFnZUNvbnRl
eHQtPnRyYW5zbGF0ZSgwLCBwYXR0ZXJuRGF0YS0+Ym91bmRhcmllcy5oZWlnaHQoKSk7CiAgICAg
ICAgIGZvciAoaW50IGogPSBudW1YOyBqID4gMDsgLS1qKSB7CiAgICAgICAgICAgICBuZXdUaWxl
SW1hZ2VDb250ZXh0LT50cmFuc2xhdGUocGF0dGVybkRhdGEtPmJvdW5kYXJpZXMud2lkdGgoKSwg
MCk7Ci0gICAgICAgICAgICBuZXdUaWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2UodGlsZUltYWdl
LT5pbWFnZSgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIHRpbGVSZWN0LCB0aWxlUmVjdCk7Cisg
ICAgICAgICAgICBuZXdUaWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2UoY29waWVkSW1hZ2UuZ2V0
KCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgdGlsZVJlY3QsIHRpbGVSZWN0KTsKICAgICAgICAg
fQogICAgICAgICBuZXdUaWxlSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLXBhdHRlcm5EYXRhLT5i
b3VuZGFyaWVzLndpZHRoKCkgKiBudW1YLCAwKTsKICAgICB9CiAgICAgbmV3VGlsZUltYWdlQ29u
dGV4dC0+cmVzdG9yZSgpOwogCi0gICAgcGF0dGVybkRhdGEtPnBhdHRlcm4gPSBQYXR0ZXJuOjpj
cmVhdGUobmV3VGlsZUltYWdlLT5pbWFnZSgpLCB0cnVlLCB0cnVlKTsKKyAgICBwYXR0ZXJuRGF0
YS0+cGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZShuZXdUaWxlSW1hZ2UtPmNvcHlJbWFnZSgpLCB0
cnVlLCB0cnVlKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0J
KHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTk2Myw3ICs5NjMsOCBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludFByb2dyZXNzQmFyKFJlCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUo
MiAqIHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCAwKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNjYWxlKEZsb2F0U2l6ZSgtMSwgMSkpOwogICAgIH0KLSAgICBwYWludEluZm8uY29udGV4
dC0+ZHJhd0ltYWdlKGltYWdlQnVmZmVyLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCByZWN0
LmxvY2F0aW9uKCkpOworICAgIAorICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2VCdWZm
ZXIoaW1hZ2VCdWZmZXIuZ2V0KCksIERldmljZUNvbG9yU3BhY2UsIHJlY3QubG9jYXRpb24oKSk7
CiAKICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogICAgIHJldHVybiBmYWxzZTsK
SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2Vi
Q29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyAr
MTM3LDcgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VFbGVtZQogICAgICAg
ICBTVkdSZW5kZXJTdXBwb3J0OjpyZW5kZXJTdWJ0cmVlVG9JbWFnZShtX3RhcmdldEltYWdlLmdl
dCgpLCByZW5kZXJlcik7CiAgICAgfQogCi0gICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZShtX3Rh
cmdldEltYWdlID8gbV90YXJnZXRJbWFnZS0+aW1hZ2UoKSA6IG1fY2FjaGVkSW1hZ2UtPmltYWdl
KCksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSk7CisgICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZSht
X3RhcmdldEltYWdlID8gbV90YXJnZXRJbWFnZS0+Y29weUltYWdlKCkgOiBtX2NhY2hlZEltYWdl
LT5pbWFnZSgpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOwogfQogCiB2b2lkIFNWR0ZFSW1hZ2VF
bGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVy
bHMpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiA2NTE2
MCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIxLDEyICsyMjEsMTMgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdl
Rm9yQwogICAgIGlmICghbV9mcmFtZUNhY2hlKSB7CiAgICAgICAgIGlmICghbV9wYWdlKQogICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIG1fZnJhbWVDYWNoZSA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSgpKTsKLSAgICAgICAgaWYgKCFtX2ZyYW1lQ2FjaGUpIC8vIGZhaWxlZCB0byBh
bGxvY2F0ZSBpbWFnZQorICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSgpKTsKKyAgICAgICAgaWYgKCFidWZmZXIpIC8vIGZhaWxlZCB0
byBhbGxvY2F0ZSBpbWFnZQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGRyYXcobV9m
cmFtZUNhY2hlLT5jb250ZXh0KCksIHJlY3QoKSwgcmVjdCgpLCBEZXZpY2VDb2xvclNwYWNlLCBD
b21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICAgICAgZHJhdyhidWZmZXItPmNvbnRleHQoKSwgcmVj
dCgpLCByZWN0KCksIERldmljZUNvbG9yU3BhY2UsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAg
ICAgICBtX2ZyYW1lQ2FjaGUgPSBidWZmZXItPmNvcHlJbWFnZSgpOwogICAgIH0KLSAgICByZXR1
cm4gbV9mcmFtZUNhY2hlLT5pbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwor
ICAgIHJldHVybiBtX2ZyYW1lQ2FjaGUtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiB9
CiAKIGJvb2wgU1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKQpJbmRl
eDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgSW1hZ2VCdWZmZXI7CiAgICAgY2xhc3Mg
UGFnZTsKICAgICBjbGFzcyBTVkdJbWFnZUNocm9tZUNsaWVudDsKICAgICAKQEAgLTcyLDcgKzcx
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgT3duUHRyPFNWR0lt
YWdlQ2hyb21lQ2xpZW50PiBtX2Nocm9tZUNsaWVudDsKICAgICAgICAgT3duUHRyPFBhZ2U+IG1f
cGFnZTsKLSAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtX2ZyYW1lQ2FjaGU7CisgICAgICAg
IFJlZlB0cjxJbWFnZT4gbV9mcmFtZUNhY2hlOwogICAgIH07CiB9CiAKSW5kZXg6IFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcAkocmV2aXNpb24gNjUxNjApCisr
KyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgRkVNZXJnZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIp
CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tZXJnZUlucHV0cy5zaXplKCk7IGkr
KykgewogICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBjYWxjdWxhdGVEcmF3aW5nUmVjdCht
X21lcmdlSW5wdXRzW2ldLT5zY2FsZWRTdWJSZWdpb24oKSk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQtPmRyYXdJbWFnZShtX21lcmdlSW5wdXRzW2ldLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBE
ZXZpY2VDb2xvclNwYWNlLCBkZXN0UmVjdCk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJ
bWFnZUJ1ZmZlcihtX21lcmdlSW5wdXRzW2ldLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNw
YWNlLCBkZXN0UmVjdCk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEs
NyArOTEsNyBAQCB2b2lkIEZFT2Zmc2V0OjphcHBseShGaWx0ZXIqIGZpbHRlcikKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luLT5zY2FsZWRTdWJSZWdpb24oKS53aWR0aCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW4tPnNjYWxlZFN1YlJlZ2lv
bigpLmhlaWdodCgpKTsKIAotICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1
bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkc3RSZWN0KTsKKyAgICBmaWx0
ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29s
b3JTcGFjZSwgZHN0UmVjdCk7CiB9CiAKIHZvaWQgRkVPZmZzZXQ6OmR1bXAoKQpJbmRleDogV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcAkocmV2aXNpb24gNjUxNjAp
CisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDggKzcyLDggQEAgdm9pZCBGRVRpbGU6OmFwcGx5KEZpbHRlciogZmlsdGVy
KQogCiAgICAgT3duUHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHRpbGVSZWN0LnNpemUoKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0KiB0aWxlSW1hZ2VDb250
ZXh0ID0gdGlsZUltYWdlLT5jb250ZXh0KCk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC0+ZHJhd0lt
YWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIEludFBv
aW50KCkpOwotICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRp
bGVJbWFnZS0+aW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7CisgICAgdGlsZUltYWdlQ29udGV4dC0+ZHJh
d0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIEludFBv
aW50KCkpOworICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRp
bGVJbWFnZS0+Y29weUltYWdlKCksIHRydWUsIHRydWUpOwogCiAgICAgQWZmaW5lVHJhbnNmb3Jt
IG1hdHJpeDsKICAgICBtYXRyaXgudHJhbnNsYXRlKG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpLngo
KSAtIHNjYWxlZFN1YlJlZ2lvbigpLngoKSwgbV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkueSgpIC0g
c2NhbGVkU3ViUmVnaW9uKCkueSgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64505</attachid>
            <date>2010-08-16 11:32:50 -0700</date>
            <delta_ts>2010-08-16 13:41:42 -0700</delta_ts>
            <desc>Patch for real review</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>76087</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTQzOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTM1IEBACisyMDEwLTA4LTE2ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM1MDcsIHN0b3AgSW1hZ2VCdWZm
ZXIgZnJvbSBjb3B5aW5nIGl0cyBkYXRhIHdoZW4gcmVuZGVyaW5nIGFmdGVyIGNhbnZhcyBjaGFu
Z2VzIGhhcHBlbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggcmVuYW1lcyBJbWFnZUJ1
ZmZlcjo6aW1hZ2UoKSB0byBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKCkuIFRoZSBuZXcgbWV0aG9k
IGFsd2F5cyByZXR1cm5zIGEgbmV3IGNvcHkgdGhhdCBpcyBhIGN1cnJlbnQKKyAgICAgICAgc25h
cHNob3Qgb2YgdGhlIEltYWdlQnVmZmVyLgorICAgICAgICAKKyAgICAgICAgVG8gZHJhdyBhbiBJ
bWFnZUJ1ZmZlciwgeW91IG5vdyB1c2UgbmV3IEdyYXBoaWNzQ29udGV4dCBjYWxsczogZHJhd0lt
YWdlQnVmZmVyLiAgUGxhdGZvcm1zIGNhbiB0aGVuIG9wdGltaXplIHRoZXNlIGNhbGxzIHRvIGRy
YXcKKyAgICAgICAgZWZmaWNpZW50bHkgd2l0aG91dCBoYXZpbmcgdG8gY29weSB0aGUgYml0cyBv
ZiB0aGUgSW1hZ2VCdWZmZXIgaW50byBhbiBJbWFnZS4KKyAgICAgICAgCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGNzcy9DU1NDYW52YXNWYWx1ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDYW52YXNWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OndpbGxEcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpyZXNldCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OnNldFN1cmZhY2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50Ojpjb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2Fu
dmFzRWxlbWVudDo6Y2xlYXJDb3BpZWRJbWFnZSk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzUGF0dGVybjo6Q2FudmFzUGF0dGVybik6CisgICAgICAgICog
aHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUGF0
dGVybjo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
cmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpj
cmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6ZHJhd1RleHRJbnRlcm5hbCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
ZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmF0ZWRJbWFnZTo6ZHJh
d1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50c0ludG9DYW52YXNCdWZmZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp3aWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aGVpZ2h0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9QYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OlBhdHRl
cm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhdHRlcm46OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OmRyYXdzVXNpbmdDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNsaXApOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdzVXNpbmdDb3B5KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjbGlwKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGEuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb2xvck1hdHJpeDo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjphcHBseSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUdyYXBoaWM6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMv
R3JhcGhpY3NDb250ZXh0M0RNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0lt
YWdlQnVmZmVyRGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVm
ZmVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZl
ckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdzVXNpbmdDb3B5KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5SW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjbGlwKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3c1VzaW5nQ29weSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OmRyYXdzVXNpbmdDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNsaXApOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2Up
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNsaXBUb1RleHRNYXNrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuOjpidWlsZFBhdHRlcm4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNz
QmFyKToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
U1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaDoKKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFTWVyZ2U6OmFwcGx5KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6YXBwbHkpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRVRpbGU6OmFwcGx5KToKKwogMjAxMC0wOC0xMyAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8
Z3VzdGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jby51az4KIAogICAgICAgICBSZXZpZXdlZCBieSBL
ZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiBhbmQgTWFydGluIFJvYmluc29uLgpJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY1MTYwKQor
KysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTQwMzEsNyArNDAzMSw3IEBACiAJCUIyQTAxNUE5MEFGNkNENTMwMDZCQ0UwRSAvKiBH
cmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyQTAxNTkzMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc0NvbnRleHQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkEwMTVBQTBB
RjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkEwMTU5NDBBRjZDRDUzMDA2QkNFMEUgLyogR3Jh
cGhpY3NUeXBlcy5jcHAgKi87IH07CiAJCUIyQTAxNUFCMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFw
aGljc1R5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMkEwMTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUIyQTEwQjkyMEIzODE4QkQw
MDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmgg
Ki87IH07CisJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMTBCOTEwQjM4MThC
RDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJBMTBCOTQwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVm
ZmVyQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovOyB9OwogCQlC
MkExRjJBQTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMUYyQTEwQ0VGMEFCRjAwNDQy
RjZBIC8qIFNWR0ZvbnRFbGVtZW50LmNwcCAqLzsgfTsKIAkJQjJBMUYyQUIwQ0VGMEFCRjAwNDQy
RjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMkExRjJBMjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQu
aCAqLzsgfTsKQEAgLTQ3NjMsNiArNDc2Myw3IEBACiAJCUJDQThDODMxMTFFM0Q1MzIwMDgxMkZC
NyAvKiBCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQThDODMwMTFFM0Q1MzIwMDgxMkZCNyAvKiBCYWNr
Rm9yd2FyZENvbnRyb2xsZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlCQ0E4Q0E1RjExRTRFNkQxMDA4MTJGQjcgLyogQmFja0Zvcndh
cmRMaXN0SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0E4Q0E1RDExRTRFNkQxMDA4MTJGQjcgLyogQmFja0ZvcndhcmRMaXN0SW1wbC5jcHAg
Ki87IH07CiAJCUJDQThDQTYwMTFFNEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExpc3RJbXBs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E4Q0E1
RTExRTRFNkQxMDA4MTJGQjcgLyogQmFja0ZvcndhcmRMaXN0SW1wbC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDQTk3OTE3MTIxNUQwNTUwMDVD
NDg1QyAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDQTk3OTE2MTIxNUQwNTUwMDVDNDg1QyAvKiBJbWFnZUJ1ZmZlckRh
dGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlC
Q0FBOTBDMzBBN0VCQTYwMDA4QjEyMjkgLyogU2Nyb2xsYmFyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQUE5MEMyMEE3RUJBNjAwMDhCMTIyOSAv
KiBTY3JvbGxiYXIuY3BwICovOyB9OwogCQlCQ0FDRjNCQzEwNzI5MjFBMDBDMEM4QTMgLyogVXNl
ckNvbnRlbnRVUkxQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDQUNGM0JBMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29udGVudFVSTFBh
dHRlcm4uY3BwICovOyB9OwogCQlCQ0FDRjNCRDEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRl
bnRVUkxQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0FDRjNCQjEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwNTA0
LDYgKzEwNTA1LDcgQEAKIAkJQkNBOEM4MzAxMUUzRDUzMjAwODEyRkI3IC8qIEJhY2tGb3J3YXJk
Q29udHJvbGxlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWNr
Rm9yd2FyZENvbnRyb2xsZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkNBOENBNUQxMUU0RTZEMTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkTGlzdEltcGwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFja0ZvcndhcmRMaXN0SW1wbC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQThDQTVFMTFFNEU2RDEwMDgxMkZCNyAv
KiBCYWNrRm9yd2FyZExpc3RJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEJhY2tGb3J3YXJkTGlzdEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNB
OTc5MTYxMjE1RDA1NTAwNUM0ODVDIC8qIEltYWdlQnVmZmVyRGF0YS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkNBQTkwQzIwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU2Nyb2xsYmFyLmNwcDsgcGF0aCA9
IHBsYXRmb3JtL1Njcm9sbGJhci5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJ
QkNBQ0YzQkExMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyQ29udGVudFVSTFBhdHRlcm4u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0FDRjNCQjEwNzI5MjFBMDBDMEM4
QTMgLyogVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFVzZXJDb250ZW50VVJMUGF0dGVybi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTU1OTAsNiArMTU1OTIsNyBAQAogCQkJCUIyRUQ5NzcwMEIxRjU1Q0UwMDI1N0QwRiAv
KiBHcmFwaGljc0NvbnRleHRDRy5jcHAgKi8sCiAJCQkJQTgwRDY3MDcwRTlFOURFQjAwRTQyMEYw
IC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi8sCiAJCQkJQjJBMTBCOTMw
QjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLAorCQkJCUJDQTk3OTE2MTIx
NUQwNTUwMDVDNDg1QyAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLywKIAkJCQlCMjc1MzUzMDBCMDUz
ODE0MDAyQ0U2NEYgLyogSW1hZ2VDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzEwQjA1MzgxNDAwMkNF
NjRGIC8qIEltYWdlU291cmNlQ0cuY3BwICovLAogCQkJCTRCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0
MSAvKiBJbWFnZVNvdXJjZUNHLmggKi8sCkBAIC0yMDE1Niw2ICsyMDE1OSw3IEBACiAJCQkJMkVF
RDU3NTgxMjEwOUVFNDAwNzY1NkJCIC8qIEJsb2JSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMkVFRDU3NUMxMjEwOUVGMzAwNzY1NkJCIC8qIEJsb2JEYXRhLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NzhCNkZDQTEyMTI4ODIxMDAxNTk1RUYgLyogSFRNTFZpZXdTb3VyY2VQYXJzZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCUJDQTk3OTE3MTIxNUQwNTUwMDVDNDg1QyAvKiBJbWFnZUJ1ZmZl
ckRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjAyMTUsNyArMjAyMTksNiBAQAogCQkJaXNhID0g
UEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjEx
MDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJD
b3JlIiAqLzsKIAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7Ci0JCQlkZXZl
bG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsK
IAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApJbmRleDogV2ViQ29yZS9jc3MvQ1NT
Q2FudmFzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVl
LmNwcAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgSW1hZ2UqIENTU0NhbnZhc1ZhbHVlOjpp
bWFnZShSZW5kZXJPYmplYwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBlbHQgPSBlbGVtZW50KHJl
bmRlcmVyLT5kb2N1bWVudCgpKTsKICAgICBpZiAoIWVsdCB8fCAhZWx0LT5idWZmZXIoKSkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGVsdC0+YnVmZmVyKCktPmltYWdlKCk7CisgICAg
cmV0dXJuIGVsdC0+Y29waWVkSW1hZ2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2NTE2MCkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw4
ICsyMDksNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVuCiAKIHZv
aWQgSFRNTENhbnZhc0VsZW1lbnQ6OndpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBpZiAobV9pbWFnZUJ1ZmZlcikKLSAgICAgICAgbV9pbWFnZUJ1ZmZlci0+Y2xlYXJJbWFn
ZSgpOworICAgIG1fY29waWVkSW1hZ2UuY2xlYXIoKTsgLy8gQ2xlYXIgb3VyIGltYWdlIHNuYXBz
aG90IGlmIHdlIGhhdmUgb25lLgogCiAgICAgaWYgKFJlbmRlckJveCogcm8gPSByZW5kZXJCb3go
KSkgewogICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSByby0+Y29udGVudEJveFJlY3QoKTsK
QEAgLTIzOSwxNiArMjM4LDE3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KCkKICAg
ICBpbnQgaCA9IGdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKS50b0ludCgmb2spOwogICAgIGlmICgh
b2sgfHwgaCA8IDApCiAgICAgICAgIGggPSBEZWZhdWx0SGVpZ2h0OworICAgIAorICAgIGJvb2wg
aGFkSW1hZ2VCdWZmZXIgPSBoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKTsKIAogICAgIEludFNpemUg
b2xkU2l6ZSA9IHNpemUoKTsKLSAgICBzZXRTdXJmYWNlU2l6ZShJbnRTaXplKHcsIGgpKTsKKyAg
ICBzZXRTdXJmYWNlU2l6ZShJbnRTaXplKHcsIGgpKTsgLy8gVGhlIGltYWdlIGJ1ZmZlciBnZXRz
IGNsZWFyZWQgaGVyZS4KIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0gICAgaWYgKG1fY29udGV4
dCAmJiBtX2NvbnRleHQtPmlzM2QoKSkKKyAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+
aXMzZCgpICYmIG9sZFNpemUgIT0gc2l6ZSgpKQogICAgICAgICBzdGF0aWNfY2FzdDxXZWJHTFJl
bmRlcmluZ0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkpLT5yZXNoYXBlKHdpZHRoKCksIGhlaWdo
dCgpKTsKICNlbmRpZgogCi0gICAgYm9vbCBoYWRJbWFnZUJ1ZmZlciA9IGhhc0NyZWF0ZWRJbWFn
ZUJ1ZmZlcigpOwogICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkpCiAgICAg
ICAgIHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KG1fY29udGV4dC5nZXQo
KSktPnJlc2V0KCk7CiAKQEAgLTI3NywyMyArMjc3LDIxIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1l
bnQ6OnBhaW50KEdyYXBoaWNzQ28KICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQz
RCA9IDA7CiAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzM2QoKSkgewogICAgICAg
ICBjb250ZXh0M0QgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihtX2NvbnRl
eHQuZ2V0KCkpOwotICAgICAgICBjb250ZXh0M0QtPmJlZ2luUGFpbnQoKTsKKyAgICAgICAgaWYg
KCFjb250ZXh0M0QtPnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgY29udGV4dDNELT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwog
ICAgIH0KICNlbmRpZgogCiAgICAgaWYgKGhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcigpKSB7CiAgICAg
ICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGJ1ZmZlcigpOwogICAgICAgICBpZiAoaW1h
Z2VCdWZmZXIpIHsKLSAgICAgICAgICAgIEltYWdlKiBpbWFnZSA9IGltYWdlQnVmZmVyLT5pbWFn
ZUZvclJlbmRlcmluZygpOwotICAgICAgICAgICAgaWYgKGltYWdlKQotICAgICAgICAgICAgICAg
IGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgRGV2aWNlQ29sb3JTcGFjZSwgcik7CisgICAgICAg
ICAgICBpZiAoaW1hZ2VCdWZmZXItPmRyYXdzVXNpbmdDb3B5KCkpCisgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZHJhd0ltYWdlKGNvcGllZEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIHIpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZl
cihpbWFnZUJ1ZmZlciwgRGV2aWNlQ29sb3JTcGFjZSwgcik7CiAgICAgICAgIH0KICAgICB9Ci0K
LSNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotICAgIGlmIChjb250ZXh0M0QpCi0gICAgICAgIGNvbnRl
eHQzRC0+ZW5kUGFpbnQoKTsKLSNlbmRpZgogfQogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykgICAg
CkBAIC0zMjUsNiArMzIzLDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0U3VyZmFjZVNp
emUoYwogICAgIG1fc2l6ZSA9IHNpemU7CiAgICAgbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgPSBm
YWxzZTsKICAgICBtX2ltYWdlQnVmZmVyLmNsZWFyKCk7CisgICAgbV9jb3BpZWRJbWFnZS5jbGVh
cigpOwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHksIEV4Y2VwdGlvbkNvZGUmIGVjKQpA
QCAtNDIwLDYgKzQxOSwxOCBAQCBJbWFnZUJ1ZmZlciogSFRNTENhbnZhc0VsZW1lbnQ6OmJ1ZmZl
cigpCiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiB9CiAKK0ltYWdlKiBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y29waWVkSW1hZ2UoKSBjb25zdAoreworICAgIGlmICghbV9jb3BpZWRJbWFn
ZSAmJiBidWZmZXIoKSkKKyAgICAgICAgbV9jb3BpZWRJbWFnZSA9IGJ1ZmZlcigpLT5jb3B5SW1h
Z2UoKTsKKyAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQoKTsKK30KKwordm9pZCBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y2xlYXJDb3BpZWRJbWFnZSgpCit7CisgICAgbV9jb3BpZWRJbWFnZS5jbGVh
cigpOworfQorCiBBZmZpbmVUcmFuc2Zvcm0gSFRNTENhbnZhc0VsZW1lbnQ6OmJhc2VUcmFuc2Zv
cm0oKSBjb25zdAogewogICAgIEFTU0VSVChtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcik7CkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBj
bGFzcyBDYW52YXNDb250ZXh0QXR0cmlidXRlczsKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsKK2Ns
YXNzIEltYWdlOwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRTaXplOwogCkBAIC05Myw2
ICs5NCw4IEBAIHB1YmxpYzoKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdD
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAKICAgICBJbWFnZUJ1
ZmZlciogYnVmZmVyKCkgY29uc3Q7CisgICAgSW1hZ2UqIGNvcGllZEltYWdlKCkgY29uc3Q7Cisg
ICAgdm9pZCBjbGVhckNvcGllZEltYWdlKCk7CiAKICAgICBJbnRSZWN0IGNvbnZlcnRMb2dpY2Fs
VG9EZXZpY2UoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAgICAgSW50U2l6ZSBjb252ZXJ0TG9n
aWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OwpAQCAtMTQ5LDYgKzE1Miw4IEBA
IHByaXZhdGU6CiAgICAgLy8gbV9jcmVhdGVkSW1hZ2VCdWZmZXIgbWVhbnMgd2UgdHJpZWQgdG8g
bWFsbG9jIHRoZSBidWZmZXIuICBXZSBkaWRuJ3QgbmVjZXNzYXJpbHkgZ2V0IGl0LgogICAgIG11
dGFibGUgYm9vbCBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcjsKICAgICBtdXRhYmxlIE93blB0cjxJ
bWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKKyAgICAKKyAgICBtdXRhYmxlIFJlZlB0cjxJbWFn
ZT4gbV9jb3BpZWRJbWFnZTsgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IGZvciBwbGF0Zm9y
bXMgdGhhdCBoYXZlIHRvIGNvcHkgdGhlIGltYWdlIGJ1ZmZlciB0byByZW5kZXIgKGFuZCBmb3Ig
Q1NTQ2FudmFzVmFsdWUpLgogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1BhdHRlcm4uY3BwCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAg
dm9pZCBDYW52YXNQYXR0ZXJuOjpwYXJzZVJlcGV0aXRpb25UeXBlKAogICAgIGVjID0gU1lOVEFY
X0VSUjsKIH0KIAotQ2FudmFzUGF0dGVybjo6Q2FudmFzUGF0dGVybihJbWFnZSogaW1hZ2UsIGJv
b2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQorQ2FudmFzUGF0dGVy
bjo6Q2FudmFzUGF0dGVybihQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSwgYm9vbCByZXBlYXRYLCBi
b29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCiAgICAgOiBtX3BhdHRlcm4oUGF0dGVybjo6
Y3JlYXRlKGltYWdlLCByZXBlYXRYLCByZXBlYXRZKSkKICAgICAsIG1fb3JpZ2luQ2xlYW4ob3Jp
Z2luQ2xlYW4pCiB7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaAkocmV2aXNp
b24gNjUxNjApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBzdGF0aWMgdm9pZCBwYXJzZVJlcGV0aXRpb25UeXBlKGNvbnN0IFN0cmluZyYs
IGJvb2wmIHJlcGVhdFgsIGJvb2wmIHJlcGVhdFksIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBjcmVhdGUoSW1hZ2UqIGltYWdlLCBi
b29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gY3JlYXRlKFBhc3NSZWZQdHI8SW1hZ2U+IGlt
YWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQYXR0ZXJuKGltYWdl
LCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikpOwogICAgICAgICB9CkBAIC01MSw3ICs1
MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBvcmlnaW5DbGVhbigpIGNv
bnN0IHsgcmV0dXJuIG1fb3JpZ2luQ2xlYW47IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIENh
bnZhc1BhdHRlcm4oSW1hZ2UqLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmln
aW5DbGVhbik7CisgICAgICAgIENhbnZhc1BhdHRlcm4oUGFzc1JlZlB0cjxJbWFnZT4sIGJvb2wg
cmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKTsKIAogICAgICAgICBSZWZQ
dHI8UGF0dGVybj4gbV9wYXR0ZXJuOwogICAgICAgICBib29sIG1fb3JpZ2luQ2xlYW47CkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
CShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2NCw3ICsxMjY0LDcgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogCiAgICAgc291cmNlQ2FudmFzLT5t
YWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpOwogCi0gICAgYy0+ZHJhd0ltYWdlKGJ1ZmZl
ci0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNvdXJjZVJlY3QsIHN0YXRl
KCkubV9nbG9iYWxDb21wb3NpdGUpOworICAgIGMtPmRyYXdJbWFnZUJ1ZmZlcihidWZmZXIsIERl
dmljZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzb3VyY2VSZWN0LCBzdGF0ZSgpLm1fZ2xvYmFsQ29t
cG9zaXRlKTsKICAgICB3aWxsRHJhdyhkZXN0UmVjdCk7IC8vIFRoaXMgY2FsbCBjb21lcyBhZnRl
ciBkcmF3SW1hZ2UsIHNpbmNlIHRoZSBidWZmZXIgd2UgZHJhdyBpbnRvIG1heSBiZSBvdXIgb3du
LCBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgZGlydHkuCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogQXJndWFibHkgd2lsbERyYXcgc2hvdWxkIGJlY29tZSBkaWREcmF3
IGFuZCBvY2N1ciBhZnRlciBkcmF3aW5nIGNhbGxzIGFuZCBub3QgYmVmb3JlIHRoZW0gdG8gYXZv
aWQgcHJvYmxlbXMgbGlrZSB0aGlzLgogfQpAQCAtMTQ2NCw3ICsxNDY0LDcgQEAgUGFzc1JlZlB0
cjxDYW52YXNQYXR0ZXJuPiBDYW52YXNSZW5kZXJpbgogICAgIENhbnZhc1BhdHRlcm46OnBhcnNl
UmVwZXRpdGlvblR5cGUocmVwZXRpdGlvblR5cGUsIHJlcGVhdFgsIHJlcGVhdFksIGVjKTsKICAg
ICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBDYW52YXNQYXR0ZXJuOjpj
cmVhdGUoY2FudmFzLT5idWZmZXIoKS0+aW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwgY2FudmFz
LT5vcmlnaW5DbGVhbigpKTsKKyAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKGNhbnZh
cy0+Y29waWVkSW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwgY2FudmFzLT5vcmlnaW5DbGVhbigp
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OndpbGxEcmF3KGNvbnN0IEZs
b2F0UmVjdCYgciwgdW5zaWduZWQgb3B0aW9ucykKQEAgLTE4MjAsNyArMTgyMCw3IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEkKICAgICAgICAgbWFza0ltYWdlQ29u
dGV4dC0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uKTsKIAogICAgICAgICBj
LT5zYXZlKCk7Ci0gICAgICAgIGMtPmNsaXBUb0ltYWdlQnVmZmVyKG1hc2tSZWN0LCBtYXNrSW1h
Z2UuZ2V0KCkpOworICAgICAgICBjLT5jbGlwVG9JbWFnZUJ1ZmZlcihtYXNrSW1hZ2UuZ2V0KCks
IG1hc2tSZWN0KTsKICAgICAgICAgZHJhd1N0eWxlLT5hcHBseUZpbGxDb2xvcihjKTsKICAgICAg
ICAgYy0+ZmlsbFJlY3QobWFza1JlY3QpOwogICAgICAgICBjLT5yZXN0b3JlKCk7CkluZGV4OiBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lv
biA2NTE2MCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDI3ICsxNTgsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6Om1hcmtDb250ZXh0QwogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQogewotICAgIGlmIChtX21hcmtlZENhbnZhc0Rp
cnR5KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJdCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSB0byBj
bGVhciB0aGUgaW1hZ2UgYmVmb3JlIGRvaW5nIGEgcmVhZGJhY2suCi0gICAgICAgIC8vIEludmVz
dGlnYXRlIHdoeSB0aGlzIGlzIG5lZWRlZCBhbmQgcmVtb3ZlIGlmIHBvc3NpYmxlLgotICAgICAg
ICBjYW52YXMoKS0+YnVmZmVyKCktPmNsZWFySW1hZ2UoKTsKLSAgICAgICAgbV9tYXJrZWRDYW52
YXNEaXJ0eSA9IGZhbHNlOwotICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvQ2FudmFzKHRoaXMpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmJlZ2luUGFpbnQoKQotewotICAgIGlmIChtX21hcmtlZENhbnZhc0RpcnR5KQotICAgICAgICBt
X2NvbnRleHQtPmJlZ2luUGFpbnQodGhpcyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjplbmRQYWludCgpCi17Ci0gICAgaWYgKG1fbWFya2VkQ2FudmFzRGlydHkpIHsKLSAgICAg
ICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwotICAgICAgICBtX2NvbnRleHQtPmVuZFBh
aW50KCk7Ci0gICAgfQorICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSkKKyAgICAgICAgcmV0
dXJuOworICAgIGNhbnZhcygpLT5jbGVhckNvcGllZEltYWdlKCk7CisgICAgbV9tYXJrZWRDYW52
YXNEaXJ0eSA9IGZhbHNlOworICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXModGhpcyk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKQEAgLTE5MSw3ICsxNzUsOSBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cmVzaGFwZShpbnQgCiAjZW5kaWYKICAgICAgICAgbV9uZWVkc1VwZGF0ZSA9
IGZhbHNlOwogICAgIH0KLSAgICAKKworICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gbWFyayB0aGUg
Y2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0aGUgbmV3bHkgY3JlYXRlZCBpbWFnZSBidWZmZXIgd2ls
bCBhbHNvIHN0YXJ0IG9mZgorICAgIC8vIGNsZWFyIChhbmQgdGhpcyBtYXRjaGVzIHdoYXQgcmVz
aGFwZSB3aWxsIGRvKS4KICAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CiB9
CiAKQEAgLTIxOTYsNyArMjE4Miw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJ
bWFnZTJEKHUKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdGV4
SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwg
Y2FudmFzLT5idWZmZXIoKS0+aW1hZ2UoKSwKKyAgICAKKyAgICB0ZXhJbWFnZTJESW1wbCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZElt
YWdlKCksCiAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0
aXBseUFscGhhLCBlYyk7CiB9CiAKQEAgLTIyOTUsNyArMjI4Miw4IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHUKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSwgY2FudmFzLT5idWZmZXIoKS0+aW1hZ2UoKSwgZmxpcFksIHByZW11bHRp
cGx5QWxwaGEsIGVjKTsKKyAgICAKKyAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBjYW52YXMtPmNvcGllZEltYWdlKCksIGZsaXBZLCBw
cmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIEhUTUxWaWRlb0VsZW1l
bnQqIHZpZGVvLApAQCAtMjQ1NSw3ICsyNDQzLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleFN1YkltYWdlMgogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBm
b3JtYXQsIHR5cGUsIGNhbnZhcy0+YnVmZmVyKCktPmltYWdlKCksCisgICAgCisgICAgdGV4U3Vi
SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBl
LCBjYW52YXMtPmNvcGllZEltYWdlKCksCiAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tG
bGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAKQEAgLTI1NTQsNyArMjU0
Myw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTIKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdGV4U3ViSW1hZ2UyREltcGwodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBjYW52YXMtPmJ1ZmZlcigpLT5pbWFnZSgp
LAorICAgIAorICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSwgY2FudmFzLT5jb3BpZWRJbWFnZSgpLAogICAgICAgICAgICAgICAgICAgICAgIGZs
aXBZLCBwcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDUsMTIgKzMwNSwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoKTsKIAotICAgIC8vIEhlbHBlcnMgZm9yIG5vdGlmaWNhdGlvbiBh
Ym91dCBwYWludCBldmVudHMuCi0gICAgdm9pZCBiZWdpblBhaW50KCk7Ci0gICAgdm9pZCBlbmRQ
YWludCgpOwotCiAgICAgdm9pZCByZW1vdmVPYmplY3QoV2ViR0xPYmplY3QqKTsKIAorICAgIGJv
b2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC0+cGFp
bnRzSW50b0NhbnZhc0J1ZmZlcigpOyB9CisKICAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
V2ViR0xPYmplY3Q7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVk
SW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJh
dGVkSW1hZ2UuY3BwCShyZXZpc2lvbiA2NTMyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR2VuZXJhdGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MywxMSArNjMsOCBAQCB2
b2lkIEdlbmVyYXRlZEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljCiAgICAgR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwogICAgIGdyYXBo
aWNzQ29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWRqdXN0ZWRTaXpl
KSwgKm1fZ2VuZXJhdG9yLmdldCgpKTsKIAotICAgIC8vIEdyYWIgdGhlIGZpbmFsIGltYWdlIGZy
b20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICBJbWFnZSogYml0bWFwID0gaW1hZ2VCdWZmZXItPmlt
YWdlKCk7Ci0KLSAgICAvLyBOb3cganVzdCBjYWxsIGRyYXdUaWxlZCBvbiB0aGF0IGltYWdlLgot
ICAgIGJpdG1hcC0+ZHJhd1BhdHRlcm4oY29udGV4dCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCwgZGVzdFJlY3Qp
OworICAgIC8vIFRpbGUgdGhlIGltYWdlIGJ1ZmZlciBpbnRvIHRoZSBjb250ZXh0LgorICAgIGlt
YWdlQnVmZmVyLT5kcmF3UGF0dGVybihjb250ZXh0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBkZXN0UmVjdCk7
CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmgJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MTgsMTEgKzcxOCwxMSBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpOwogCi0gICAgLy8gSGVscGVycyBmb3Igbm90aWZpY2F0
aW9uIGFib3V0IHBhaW50IGV2ZW50cwotICAgIHZvaWQgYmVnaW5QYWludChDYW52YXNSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KTsKLSAgICB2b2lkIGVuZFBhaW50KCk7CiAjaWYgUExBVEZPUk0o
UVQpCiAgICAgdm9pZCBwYWludChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVJlY3QmIHJlY3Qp
IGNvbnN0OworICAgIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KKyNlbHNlCisgICAgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiAgICAgLy8gU3VwcG9ydCBmb3IgYnVmZmVyIGNy
ZWF0aW9uIGFuZCBkZWxldGlvbgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTQ0Miw2ICs0NDMsNTcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYQogICAgICAgICByZXN0b3JlKCk7CiB9CiAKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIGltYWdlLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIHAsIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wKQoreworICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgc3R5bGVDb2xvclNwYWNl
LCBwLCBJbnRSZWN0KDAsIDAsIC0xLCAtMSksIG9wKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiByLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1
c2VMb3dRdWFsaXR5U2NhbGUpCit7CisgICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBzdHlsZUNv
bG9yU3BhY2UsIHIsIEludFJlY3QoMCwgMCwgLTEsIC0xKSwgb3AsIHVzZUxvd1F1YWxpdHlTY2Fs
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXIqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIGRl
c3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAg
IGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBJbnRSZWN0KGRlc3QsIHNy
Y1JlY3Quc2l6ZSgpKSwgc3JjUmVjdCwgb3ApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKK3sKKyAgICBkcmF3SW1h
Z2VCdWZmZXIoaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwgRmxvYXRSZWN0KGRlc3QpLCBzcmNSZWN0
LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21wb3Np
dGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCit7CisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
ZmxvYXQgdHN3ID0gc3JjLndpZHRoKCk7CisgICAgZmxvYXQgdHNoID0gc3JjLmhlaWdodCgpOwor
ICAgIGZsb2F0IHR3ID0gZGVzdC53aWR0aCgpOworICAgIGZsb2F0IHRoID0gZGVzdC5oZWlnaHQo
KTsKKworICAgIGlmICh0c3cgPT0gLTEpCisgICAgICAgIHRzdyA9IGltYWdlLT53aWR0aCgpOwor
ICAgIGlmICh0c2ggPT0gLTEpCisgICAgICAgIHRzaCA9IGltYWdlLT5oZWlnaHQoKTsKKworICAg
IGlmICh0dyA9PSAtMSkKKyAgICAgICAgdHcgPSBpbWFnZS0+d2lkdGgoKTsKKyAgICBpZiAodGgg
PT0gLTEpCisgICAgICAgIHRoID0gaW1hZ2UtPmhlaWdodCgpOworCisgICAgaWYgKHVzZUxvd1F1
YWxpdHlTY2FsZSkgeworICAgICAgICBzYXZlKCk7CisgICAgICAgIHNldEltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbk5vbmUpOworICAgIH0KKworICAgIGltYWdlLT5kcmF3
KHRoaXMsIHN0eWxlQ29sb3JTcGFjZSwgZGVzdCwgc3JjLCBvcCwgdXNlTG93UXVhbGl0eVNjYWxl
KTsKKyAgICAKKyAgICBpZiAodXNlTG93UXVhbGl0eVNjYWxlKQorICAgICAgICByZXN0b3JlKCk7
Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50
UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmln
aHQsCiAgICAgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9t
UmlnaHQpCiB7CkBAIC00NjAsNiArNTEyLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
T3V0Um91bmRlZFJlY3QKICAgICBjbGlwT3V0KFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUo
cmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CiB9CiAK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogYnVm
ZmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGJ1ZmZlci0+Y2xpcCh0aGlzLCByZWN0KTsKK30KKwog
aW50IEdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdNb2RlKCkKIHsKICAgICByZXR1cm4gbV9j
b21tb24tPnN0YXRlLnRleHREcmF3aW5nTW9kZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgs
NiArMjM4LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUgPSBJbWFnZTo6U3RyZXRjaFRpbGUsIEltYWdlOjpU
aWxlUnVsZSB2UnVsZSA9IEltYWdlOjpTdHJldGNoVGlsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNl
TG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOwogCisgICAgICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFBvaW50
JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICAgICAgdm9p
ZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgY29uc3QgSW50UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zl
ciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZHJhd0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9w
ZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgICAgIHZvaWQgZHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciA9
IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOwor
ICAgICAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVz
ZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKKwogICAgICAgICB2b2lkIHNldEltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOwogICAgICAgICBJbnRlcnBvbGF0
aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3Q7CiAKQEAgLTI0OCw4
ICsyNTUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY2xpcE91dEVsbGlw
c2VJblJlY3QoY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2b2lkIGNsaXBPdXRSb3VuZGVkUmVj
dChjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYg
dG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRv
bVJpZ2h0KTsKICAgICAgICAgdm9pZCBjbGlwUGF0aChXaW5kUnVsZSk7Ci0gICAgICAgIHZvaWQg
Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VCdWZmZXIqKTsK
ICAgICAgICAgdm9pZCBjbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBG
bG9hdFBvaW50KiwgYm9vbCBhbnRpYWxpYXMgPSB0cnVlKTsKKyAgICAgICAgdm9pZCBjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYpOwogCiAgICAgICAgIGlu
dCB0ZXh0RHJhd2luZ01vZGUoKTsKICAgICAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoaW50
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHJldmlzaW9uIDY1MzI5KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAs
NiArMTUwLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlPiBsb2FkUGxh
dGZvcm1UaGVtZUljb24oY29uc3QgY2hhciogbmFtZSwgaW50IHNpemUpOwogI2VuZGlmCiAKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QpOworCiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2UoSW1hZ2VPYnNlcnZlciogPSAw
KTsKIApAQCAtMTY3LDkgKzE3MCw2IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgbWF5
RmlsbFdpdGhTb2xpZENvbG9yKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIENvbG9y
IHNvbGlkQ29sb3IoKSBjb25zdCB7IHJldHVybiBDb2xvcigpOyB9CiAgICAgCi0gICAgdmlydHVh
bCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0KTsKLQogcHJpdmF0ZToKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7IC8vIFRo
ZSBlbmNvZGVkIHJhdyBkYXRhIGZvciB0aGUgaW1hZ2UuIAogICAgIEltYWdlT2JzZXJ2ZXIqIG1f
aW1hZ2VPYnNlcnZlcjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIEltYWdlQnVm
ZmVyX2gKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyRGF0YS5oIgpAQCAtNzEsMTYgKzcyLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgfkltYWdlQnVmZmVyKCk7CiAKICAgICAgICAgY29uc3QgSW50U2l6ZSYgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgICAgICBpbnQgd2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQorICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplLmhlaWdodCgpOyB9CisgICAgICAgIAogICAgICAgICBHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQoKSBjb25zdDsKIAotICAgICAgICBJbWFnZSogaW1hZ2UoKSBjb25zdDsKLSNp
ZiBQTEFURk9STShRVCkKLSAgICAgICAgSW1hZ2UqIGltYWdlRm9yUmVuZGVyaW5nKCkgY29uc3Q7
Ci0jZWxzZQotICAgICAgICBJbWFnZSogaW1hZ2VGb3JSZW5kZXJpbmcoKSBjb25zdCB7IHJldHVy
biBpbWFnZSgpOyB9Ci0jZW5kaWYKLQotICAgICAgICB2b2lkIGNsZWFySW1hZ2UoKSB7IG1faW1h
Z2UuY2xlYXIoKTsgfQorICAgICAgICBib29sIGRyYXdzVXNpbmdDb3B5KCkgY29uc3Q7IC8vIElm
IHRoZSBpbWFnZSBidWZmZXIgaGFzIHRvIHJlbmRlciB1c2luZyBhIGNvcGllZCBpbWFnZSwgaXQg
d2lsbCByZXR1cm4gdHJ1ZS4KKyAgICAgICAgUGFzc1JlZlB0cjxJbWFnZT4gY29weUltYWdlKCkg
Y29uc3Q7IC8vIFJldHVybiBhIG5ldyBpbWFnZSB0aGF0IGlzIGEgY29weSBvZiB0aGUgYnVmZmVy
LgogCiAgICAgICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4g
Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CkBAIC05Niwx
MiArOTQsMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2Vsc2UKICAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwg
MCwgMCwgLTEsIDAsIG1fc2l6ZS5oZWlnaHQoKSk7IH0KICNlbmRpZgorCisgICAgcHJpdmF0ZToK
KyAgICAgICAgdm9pZCBjbGlwKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpIGNv
bnN0OworCisgICAgICAgIC8vIFRoZSBkcmF3IG1ldGhvZCBkcmF3cyB0aGUgY29udGVudHMgb2Yg
dGhlIGJ1ZmZlciB3aXRob3V0IGNvcHlpbmcgaXQuCisgICAgICAgIHZvaWQgZHJhdyhHcmFwaGlj
c0NvbnRleHQqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAt
MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29t
cG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7CisgICAg
ICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCk7CisgICAgICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisgICAgICAgIGZyaWVu
ZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIEltYWdlQnVm
ZmVyRGF0YSBtX2RhdGE7CiAKICAgICAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgICAgIE93blB0
cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8SW1h
Z2U+IG1faW1hZ2U7CiAKICNpZiAhUExBVEZPUk0oQ0cpCiAgICAgICAgIFZlY3RvcjxpbnQ+IG1f
bGluZWFyUmdiTFVUOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwCShy
ZXZpc2lvbiA2NTMyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1QYXR0ZXJuOjpQYXR0ZXJuKEltYWdlKiBpbWFnZSwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVh
dFkpCitQYXR0ZXJuOjpQYXR0ZXJuKFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlLCBib29sIHJlcGVh
dFgsIGJvb2wgcmVwZWF0WSkKICAgICA6IG1fdGlsZUltYWdlKGltYWdlKQogICAgICwgbV9yZXBl
YXRYKHJlcGVhdFgpCiAgICAgLCBtX3JlcGVhdFkocmVwZWF0WSkKQEAgLTM5LDcgKzM5LDcgQEAg
UGF0dGVybjo6UGF0dGVybihJbWFnZSogaW1hZ2UsIGJvb2wgcmVwZQogICAgICwgbV9wYXR0ZXJu
KDApCiAjZW5kaWYKIHsKLSAgICBBU1NFUlQoaW1hZ2UpOworICAgIEFTU0VSVChtX3RpbGVJbWFn
ZSk7CiB9CiAKIFBhdHRlcm46On5QYXR0ZXJuKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0dGVybi5oCShyZXZpc2lvbiA2NTMyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIFBhdHRl
cm5faAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIK
IAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KQEAgLTY0LDExICs2NSwxMCBAQCB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtUGF0dGVyblB0cjsK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwotY2xhc3MgSW1h
Z2U7CiAKIGNsYXNzIFBhdHRlcm4gOiBwdWJsaWMgUmVmQ291bnRlZDxQYXR0ZXJuPiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGF0dGVybj4gY3JlYXRlKEltYWdlKiB0aWxlSW1h
Z2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBh
dHRlcm4+IGNyZWF0ZShQYXNzUmVmUHRyPEltYWdlPiB0aWxlSW1hZ2UsIGJvb2wgcmVwZWF0WCwg
Ym9vbCByZXBlYXRZKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYXR0ZXJu
KHRpbGVJbWFnZSwgcmVwZWF0WCwgcmVwZWF0WSkpOwogICAgIH0KQEAgLTkxLDcgKzkxLDcgQEAg
cHVibGljOgogICAgIGJvb2wgcmVwZWF0WSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwZWF0WTsgfQog
CiBwcml2YXRlOgotICAgIFBhdHRlcm4oSW1hZ2UqLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0
WSk7CisgICAgUGF0dGVybihQYXNzUmVmUHRyPEltYWdlPiwgYm9vbCByZXBlYXRYLCBib29sIHJl
cGVhdFkpOwogCiAgICAgUmVmUHRyPEltYWdlPiBtX3RpbGVJbWFnZTsKICAgICBib29sIG1fcmVw
ZWF0WDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiA2NTMyOSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MDgsMTQgKzkwOCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5l
clJvdW5kZWRSZWMKICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBzYXZlZEZpbGxSdWxlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQotewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhGbG9hdFNp
emUgY29uc3QmIHNpemUsIGZsb2F0LCBDb2xvciBjb25zdCYsIENvbG9yU3BhY2UpCiB7CiAgICAg
Ly8gQ2Fpcm8gZG9lc24ndCBzdXBwb3J0IHNoYWRvd3MgbmF0aXZlbHksIHRoZXkgYXJlIGRyYXdu
IG1hbnVhbGx5IGluIHRoZSBkcmF3KgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA2NTMyOSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk3LDI2ICs5NywzNCBAQCBHcmFwaGljc0NvbnRleHQqIEltYWdlQnVm
ZmVyOjpjb250ZXh0KCkgCiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KIAotSW1hZ2Uq
IEltYWdlQnVmZmVyOjppbWFnZSgpIGNvbnN0Citib29sIEltYWdlQnVmZmVyOjpkcmF3c1VzaW5n
Q29weSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ltYWdlKSB7Ci0gICAgICAgIC8vIEl0J3MgYXNz
dW1lZCB0aGF0IGlmIGltYWdlKCkgaXMgY2FsbGVkLCB0aGUgYWN0dWFsIHJlbmRlcmluZyB0byB0
aGUKLSAgICAgICAgLy8gR3JhcGhpY3NDb250ZXh0IG11c3QgYmUgZG9uZS4KLSAgICAgICAgQVNT
RVJUKGNvbnRleHQoKSk7Ci0KLSAgICAgICAgLy8gVGhpcyBjcmVhdGVzIGEgQ09QWSBvZiB0aGUg
aW1hZ2UgYW5kIHdpbGwgY2FjaGUgdGhhdCBjb3B5LiBUaGlzIG1lYW5zCi0gICAgICAgIC8vIHRo
YXQgaWYgc3Vic2VxdWVudCBvcGVyYXRpb25zIHRha2UgcGxhY2Ugb24gdGhlIGNvbnRleHQsIG5l
aXRoZXIgdGhlCi0gICAgICAgIC8vIGN1cnJlbnRseS1yZXR1cm5lZCBpbWFnZSwgbm9yIHRoZSBy
ZXN1bHRzIG9mIGZ1dHVyZSBpbWFnZSgpIGNhbGxzLAotICAgICAgICAvLyB3aWxsIGNvbnRhaW4g
dGhhdCBvcGVyYXRpb24uCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoaXMgc2VlbXMgc2lsbHks
IGJ1dCBpcyB0aGUgd2F5IHRoZSBDRyBwb3J0IHdvcmtzOiBpbWFnZSgpIGlzCi0gICAgICAgIC8v
IGludGVuZGVkIHRvIGJlIHVzZWQgb25seSB3aGVuIHJlbmRlcmluZyBpcyAiY29tcGxldGUuIgot
ICAgICAgICBjYWlyb19zdXJmYWNlX3QqIG5ld3N1cmZhY2UgPSBjb3B5U3VyZmFjZShtX2RhdGEu
bV9zdXJmYWNlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgICAgICAvLyBCaXRtYXBJbWFn
ZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCi0gICAg
ICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKG5ld3N1cmZhY2UpOwotICAgIH0KLSAg
ICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpj
b3B5SW1hZ2UoKSBjb25zdAoreworICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUg
cGFzc2VkIGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6
OmNyZWF0ZShjb3B5U3VyZmFjZShtX2RhdGEubV9zdXJmYWNlKSk7Cit9CisKK3ZvaWQgSW1hZ2VC
dWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmKSBj
b25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRy
YXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAorICAg
ICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCAsIGJvb2wgdXNlTG93UXVh
bGl0eVNjYWxlKQoreworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29waWVkSW1hZ2Uo
KTsKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2VDb3B5LmdldCgpLCBzdHlsZUNvbG9yU3Bh
Y2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKK30KKwordm9p
ZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUNvcHkg
PSBjb3BpZWRJbWFnZSgpOworICAgIGltYWdlQ29weS0+ZHJhd1BhdHRlcm4oY29udGV4dCwgc3Jj
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RS
ZWN0KTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNl
KGNvbnN0IFZlY3RvcjxpbnQ+JiBsb29rVXBUYWJsZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCShyZXZpc2lvbiA2NTMy
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NTMsMTggKzc1Myw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjphZGRJbm5lclJvdW5kZWRSZWMKICAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKLXsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0NvbnRleHRUcmFuc2xhdGVD
VE0ocGxhdGZvcm1Db250ZXh0KCksIHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkp
OwotICAgIENHQ29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCAxLCAtMSk7Ci0gICAg
Q0dDb250ZXh0Q2xpcFRvTWFzayhwbGF0Zm9ybUNvbnRleHQoKSwgRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgcmVjdC5zaXplKCkpLCBpbWFnZUJ1ZmZlci0+aW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigp
KTsKLSAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgMSwgLTEpOwotICAg
IENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgLXJlY3QueCgpLCAtcmVj
dC55KCkgLSByZWN0LmhlaWdodCgpKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwCShyZXZpc2lvbiA2NTMyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDExIEBAIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIHZvaWQg
cmVsZWFzZUltYWdlRGF0YSh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KQoreworICAg
IGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKK30KKwogSW1hZ2VCdWZmZXJEYXRh
OjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpCiAgICAgOiBtX2RhdGEoMCkKIHsKQEAg
LTU2LDQyICs2MSw0NiBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYg
CiAgICAgLCBtX3NpemUoc2l6ZSkKIHsKICAgICBzdWNjZXNzID0gZmFsc2U7ICAvLyBNYWtlIGVh
cmx5IHJldHVybiBtZWFuIGZhaWx1cmUuCi0gICAgdW5zaWduZWQgYnl0ZXNQZXJSb3c7CiAgICAg
aWYgKHNpemUud2lkdGgoKSA8IDAgfHwgc2l6ZS5oZWlnaHQoKSA8IDApCiAgICAgICAgIHJldHVy
bjsKLSAgICBieXRlc1BlclJvdyA9IHNpemUud2lkdGgoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVz
UGVyUm93ID0gc2l6ZS53aWR0aCgpOwogICAgIGlmIChpbWFnZUNvbG9yU3BhY2UgIT0gR3JheVNj
YWxlKSB7CiAgICAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCBvdmVyZmxvdwogICAgICAgICBpZiAo
Ynl0ZXNQZXJSb3cgPiAweDNGRkZGRkZGKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBi
eXRlc1BlclJvdyAqPSA0OwogICAgIH0KKyAgICBtX2RhdGEubV9ieXRlc1BlclJvdyA9IGJ5dGVz
UGVyUm93OwogCisgICAgc2l6ZV90IGRhdGFTaXplID0gc2l6ZS5oZWlnaHQoKSAqIGJ5dGVzUGVy
Um93OwogICAgIGlmICghdHJ5RmFzdENhbGxvYyhzaXplLmhlaWdodCgpLCBieXRlc1BlclJvdyku
Z2V0VmFsdWUobV9kYXRhLm1fZGF0YSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVCgo
cmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KG1fZGF0YS5tX2RhdGEpICYgMikgPT0gMCk7CiAKLSAg
ICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlOwogICAgIHN3aXRjaChpbWFn
ZUNvbG9yU3BhY2UpIHsKICAgICAgICAgY2FzZSBEZXZpY2VSR0I6Ci0gICAgICAgICAgICBjb2xv
clNwYWNlLmFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOworICAgICAgICAg
ICAgbV9kYXRhLm1fY29sb3JTcGFjZS5hZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJH
QigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdyYXlTY2FsZToKLSAgICAg
ICAgICAgIGNvbG9yU3BhY2UuYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VHcmF5KCkp
OworICAgICAgICAgICAgbV9kYXRhLm1fY29sb3JTcGFjZS5hZG9wdENGKENHQ29sb3JTcGFjZUNy
ZWF0ZURldmljZUdyYXkoKSk7CiAgICAgICAgICAgICBicmVhazsKICNpZiAoKFBMQVRGT1JNKE1B
QykgfHwgUExBVEZPUk0oQ0hST01JVU0pKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikp
CiAgICAgICAgIGNhc2UgTGluZWFyUkdCOgotICAgICAgICAgICAgY29sb3JTcGFjZS5hZG9wdENG
KENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VHZW5lcmljUkdCTGluZWFy
KSk7CisgICAgICAgICAgICBtX2RhdGEubV9jb2xvclNwYWNlLmFkb3B0Q0YoQ0dDb2xvclNwYWNl
Q3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZUdlbmVyaWNSR0JMaW5lYXIpKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCiAjZW5kaWYKICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGNvbG9yU3BhY2UuYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7
CisgICAgICAgICAgICBtX2RhdGEubV9jb2xvclNwYWNlLmFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3Jl
YXRlRGV2aWNlUkdCKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgbV9kYXRh
Lm1fZ3JheVNjYWxlID0gaW1hZ2VDb2xvclNwYWNlID09IEdyYXlTY2FsZTsKKyAgICBtX2RhdGEu
bV9iaXRtYXBJbmZvID0gbV9kYXRhLm1fZ3JheVNjYWxlID8ga0NHSW1hZ2VBbHBoYU5vbmUgOiBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7CiAgICAgUmV0YWluUHRyPENHQ29udGV4dFJl
Zj4gY2dDb250ZXh0KEFkb3B0Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZShtX2RhdGEubV9kYXRh
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDgsIGJ5dGVzUGVyUm93LAotICAgICAgICBj
b2xvclNwYWNlLmdldCgpLCAoaW1hZ2VDb2xvclNwYWNlID09IEdyYXlTY2FsZSkgPyBrQ0dJbWFn
ZUFscGhhTm9uZSA6IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9kYXRhLm1fY29sb3JTcGFjZS5nZXQoKSwgbV9kYXRhLm1fYml0bWFwSW5mbykpOwogICAg
IGlmICghY2dDb250ZXh0KQogICAgICAgICByZXR1cm47CiAKQEAgLTk5LDExICsxMDgsMTMgQEAg
SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIAogICAgIG1fY29udGV4dC0+
c2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CiAgICAgbV9jb250ZXh0LT50cmFuc2xhdGUoMCwgLXNp
emUuaGVpZ2h0KCkpOwogICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgIAorICAgIC8vIENyZWF0ZSBh
IGxpdmUgaW1hZ2UgdGhhdCB3cmFwcyB0aGUgZGF0YS4KKyAgICBtX2RhdGEubV9kYXRhUHJvdmlk
ZXIuYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1fZGF0YS5tX2RhdGEs
IGRhdGFTaXplLCByZWxlYXNlSW1hZ2VEYXRhKSk7CiB9CiAKIEltYWdlQnVmZmVyOjp+SW1hZ2VC
dWZmZXIoKQogewotICAgIGZhc3RGcmVlKG1fZGF0YS5tX2RhdGEpOwogfQogCiBHcmFwaGljc0Nv
bnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKQEAgLTExMSwxNyArMTIyLDU5IEBA
IEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSAKICAgICByZXR1cm4gbV9j
b250ZXh0LmdldCgpOwogfQogCi1JbWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29uc3QKK2Jv
b2wgSW1hZ2VCdWZmZXI6OmRyYXdzVXNpbmdDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoKSBjb25z
dAoreworICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIENHSW1h
Z2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShDR0JpdG1h
cENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKSk7Cit9CisK
K3N0YXRpYyBDR0ltYWdlUmVmIGNnSW1hZ2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW1h
Z2VCdWZmZXJEYXRhJiBkYXRhKQogewotICAgIGlmICghbV9pbWFnZSkgewotICAgICAgICAvLyBJ
dCdzIGFzc3VtZWQgdGhhdCBpZiBpbWFnZSgpIGlzIGNhbGxlZCwgdGhlIGFjdHVhbCByZW5kZXJp
bmcgdG8gdGhlCi0gICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dCBtdXN0IGJlIGRvbmUuCi0gICAg
ICAgIEFTU0VSVChjb250ZXh0KCkpOwotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBDR0Jp
dG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAg
ICAgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gQ0dJbWFnZSBv
biBkZXN0cnVjdGlvbgotICAgICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShjZ0lt
YWdlKTsKKyAgICByZXR1cm4gQ0dJbWFnZUNyZWF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCksIDgsIGRhdGEubV9ncmF5U2NhbGUgPyA4IDogMzIsIGRhdGEubV9ieXRlc1BlclJvdywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1fY29sb3JTcGFjZS5nZXQoKSwgZGF0YS5tX2Jp
dG1hcEluZm8sIGRhdGEubV9kYXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRydWUsIGtDR1JlbmRlcmlu
Z0ludGVudERlZmF1bHQpOworfQorCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCogZGVzdENvbnRleHQsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsCisgICAgICAgICAgICAg
ICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkK
K3sKKyAgICBpZiAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSB7CisgICAgICAgIC8vIFdlJ3Jl
IGRyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlci4gIEluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmss
IHdlIG5lZWQgdG8gY29weSB0aGUgc291cmNlIGJ1ZmZlciBmaXJzdC4KKyAgICAgICAgUmVmUHRy
PEltYWdlPiBjb3B5ID0gY29weUltYWdlKCk7CisgICAgICAgIGRlc3RDb250ZXh0LT5kcmF3SW1h
Z2UoY29weS5nZXQoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1
c2VMb3dRdWFsaXR5U2NhbGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIFJlZlB0cjxJbWFnZT4g
aW1hZ2VGb3JSZW5kZXJpbmcgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UobV9zaXplLCBt
X2RhdGEpKTsKKyAgICAgICAgZGVzdENvbnRleHQtPmRyYXdJbWFnZShpbWFnZUZvclJlbmRlcmlu
Zy5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1
YWxpdHlTY2FsZSk7CisgICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qp
Cit7CisgICAgaWYgKGRlc3RDb250ZXh0ID09IGNvbnRleHQoKSkgeworICAgICAgICAvLyBXZSdy
ZSBkcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIuICBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3Jr
LCB3ZSBuZWVkIHRvIGNvcHkgdGhlIHNvdXJjZSBidWZmZXIgZmlyc3QuCisgICAgICAgIFJlZlB0
cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZSgpOworICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihk
ZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JT
cGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBSZWZQdHI8SW1hZ2U+
IGltYWdlRm9yUmVuZGVyaW5nID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShjZ0ltYWdlKG1fc2l6ZSwg
bV9kYXRhKSk7CisgICAgICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihkZXN0Q29u
dGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwg
b3AsIGRlc3RSZWN0KTsKICAgICB9Ci0gICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7Cit9CisKK3Zv
aWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKEFk
b3B0Q0YsIGNnSW1hZ2UobV9zaXplLCBtX2RhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgIENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQgPSBjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZvcm1Db250
ZXh0LCByZWN0LngoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKTsKKyAgICBDR0NvbnRleHRT
Y2FsZUNUTShwbGF0Zm9ybUNvbnRleHQsIDEsIC0xKTsKKyAgICBDR0NvbnRleHRDbGlwVG9NYXNr
KHBsYXRmb3JtQ29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVjdC5zaXplKCkpLCBp
bWFnZS5nZXQoKSk7CisgICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0LCAxLCAt
MSk7CisgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCwgLXJlY3QueCgp
LCAtcmVjdC55KCkgLSByZWN0LmhlaWdodCgpKTsKIH0KIAogdGVtcGxhdGUgPE11bHRpcGx5IG11
bHRpcGxpZWQ+CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJEYXRhLmgJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTQgQEAK
ICNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhX2gKICNkZWZpbmUgSW1hZ2VCdWZmZXJEYXRhX2gKIAor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5j
bHVkZSAiSW1hZ2UuaCIKKwordHlwZWRlZiBzdHJ1Y3QgQ0dDb2xvclNwYWNlICpDR0NvbG9yU3Bh
Y2VSZWY7Cit0eXBlZGVmIHN0cnVjdCBDR0RhdGFQcm92aWRlciAqQ0dEYXRhUHJvdmlkZXJSZWY7
Cit0eXBlZGVmIHVpbnQzMl90IENHQml0bWFwSW5mbzsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBJbnRTaXplOwpAQCAtMzUsNiArNDMsMTIgQEAgcHVibGljOgogICAgIEltYWdlQnVm
ZmVyRGF0YShjb25zdCBJbnRTaXplJik7CiAKICAgICB2b2lkKiBtX2RhdGE7CisgICAgCisgICAg
UmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBtX2RhdGFQcm92aWRlcjsKKyAgICBDR0JpdG1h
cEluZm8gbV9iaXRtYXBJbmZvOworICAgIGJvb2wgbV9ncmF5U2NhbGU7CisgICAgdW5zaWduZWQg
bV9ieXRlc1BlclJvdzsKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBtX2NvbG9yU3Bh
Y2U7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAkocmV2aXNpb24g
NjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJp
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIEZFQ29sb3JNYXRy
aXg6OmFwcGx5KEZpbHRlciogZmlsdGVyCiAgICAgaWYgKCFmaWx0ZXJDb250ZXh0KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1h
Z2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9p
bi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZm
ZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2lu
Z1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0
KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7CiAgICAgUGFzc1JlZlB0cjxJbWFn
ZURhdGE+IGltYWdlRGF0YShyZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
aW1hZ2VSZWN0KSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5jcHAJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMx
LDI2ICsxMzEsMjYgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAg
ICAgRmxvYXRSZWN0IHNyY1JlY3QgPSBGbG9hdFJlY3QoMC5mLCAwLmYsIC0xLmYsIC0xLmYpOwog
ICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVS
OgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCkt
PmltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5z
Y2FsZWRTdWJSZWdpb24oKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9p
bi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJh
d2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4
dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4yLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNl
LCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAgICAg
ICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCksIERl
dmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lv
bigpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46
CiAgICAgICAgIGZpbHRlckNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+
Y2xpcFRvSW1hZ2VCdWZmZXIoY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJl
Z2lvbigpKSwgbV9pbjItPnJlc3VsdEltYWdlKCkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5k
cmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwg
Y2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAgICAgICAg
ZmlsdGVyQ29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwgY2Fs
Y3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigpKSk7CisgICAgICAgIGZp
bHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VD
b2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkp
OwogICAgICAgICBmaWx0ZXJDb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5k
cmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwg
Y2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKLSAgICAgICAg
ZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBE
ZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVn
aW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVEZXN0aW5hdGlvbk91dCk7CisgICAgICAgIGZpbHRl
ckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xv
clNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOwor
ICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbjItPnJlc3VsdEltYWdl
KCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRT
dWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0KTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICBmaWx0
ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIERldmlj
ZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24o
KSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2Uo
KS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+
c2NhbGVkU3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVTb3VyY2VBdG9wKTsKKyAgICAg
ICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4yLT5yZXN1bHRJbWFnZSgpLCBE
ZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVn
aW9uKCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJl
c3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4t
PnNjYWxlZFN1YlJlZ2lvbigpKSwgc3JjUmVjdCwgQ29tcG9zaXRlU291cmNlQXRvcCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfWE9SOgotICAgICAgICBm
aWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIERl
dmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdp
b24oKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1h
Z2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9p
bi0+c2NhbGVkU3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVYT1IpOworICAgICAgICBm
aWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbjItPnJlc3VsdEltYWdlKCksIERldmlj
ZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24o
KSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0
SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2Nh
bGVkU3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVYT1IpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6IHsKICAgICAgICAgSW50
UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChtX2luLT5z
Y2FsZWRTdWJSZWdpb24oKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlQWxwaGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMsOSArNjMsOSBAQCB2b2lkIFNvdXJjZUFscGhhOjphcHBseShGaWx0ZXIqIGZpbHRlcikK
IAogICAgIHNldElzQWxwaGFJbWFnZSh0cnVlKTsKIAotICAgIEZsb2F0UmVjdCBpbWFnZVJlY3Qo
RmxvYXRQb2ludCgpLCBmaWx0ZXItPnNvdXJjZUltYWdlKCktPmltYWdlKCktPnNpemUoKSk7Cisg
ICAgRmxvYXRSZWN0IGltYWdlUmVjdChGbG9hdFBvaW50KCksIGZpbHRlci0+c291cmNlSW1hZ2Uo
KS0+c2l6ZSgpKTsKICAgICBmaWx0ZXJDb250ZXh0LT5zYXZlKCk7Ci0gICAgZmlsdGVyQ29udGV4
dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VSZWN0LCBmaWx0ZXItPnNvdXJjZUltYWdlKCkpOwor
ICAgIGZpbHRlckNvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKGZpbHRlci0+c291cmNlSW1hZ2Uo
KSwgaW1hZ2VSZWN0KTsKICAgICBmaWx0ZXJDb250ZXh0LT5maWxsUmVjdChpbWFnZVJlY3QsIENv
bG9yOjpibGFjaywgRGV2aWNlQ29sb3JTcGFjZSk7CiAgICAgZmlsdGVyQ29udGV4dC0+cmVzdG9y
ZSgpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdy
YXBoaWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VHcmFwaGljLmNwcAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDcgKzYwLDcgQEAgdm9pZCBTb3VyY2VHcmFwaGljOjphcHBseShGaWx0ZXIqIGZpbHRlcgogICAg
IGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmlsdGVyQ29udGV4
dC0+ZHJhd0ltYWdlKGZpbHRlci0+c291cmNlSW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JT
cGFjZSwgSW50UG9pbnQoKSk7CisgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGZp
bHRlci0+c291cmNlSW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgSW50UG9pbnQoKSk7CiB9CiAK
IHZvaWQgU291cmNlR3JhcGhpYzo6ZHVtcCgpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQkocmV2aXNpb24gNjUz
MjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgyLDE1ICsyODIsNiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpwYWludFJlbmRlcmluZ1JlCiAgICAgICAgICAgICAgICAgICBjYW52YXMtPndpZHRo
KCksIGNhbnZhcy0+aGVpZ2h0KCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29u
dGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmVnaW5QYWludChDYW52YXNS
ZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQotewotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5kUGFpbnQoKQotewotfQotCiBib29sIEdy
YXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKIHsKICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0M0RRdC5jcHAJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTEyLDE1ICs1MTIsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJl
CiAgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6YmVnaW5QYWludChDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KQotewotICAgIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KCkKLXsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKIHsKICAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHRRdC5jcHAJKHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExODUsMjMgKzEx
ODUsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dEVsbGlwc2VJblJlCiAgICAgfQog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRS
ZWN0JiBmbG9hdFJlY3QsIGNvbnN0IEltYWdlQnVmZmVyKiBpbWFnZSkKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRUGl4bWFwKiBuYXRpdmVJ
bWFnZSA9IGltYWdlLT5pbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAg
IGlmICghbmF0aXZlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgcmVjdChm
bG9hdFJlY3QpOwotICAgIFFQaXhtYXAgYWxwaGFNYXNrID0gKm5hdGl2ZUltYWdlOwotICAgIGlm
IChhbHBoYU1hc2sud2lkdGgoKSAhPSByZWN0LndpZHRoKCkgfHwgYWxwaGFNYXNrLmhlaWdodCgp
ICE9IHJlY3QuaGVpZ2h0KCkpCi0gICAgICAgIGFscGhhTWFzayA9IGFscGhhTWFzay5zY2FsZWQo
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQotICAgIG1fZGF0YS0+bGF5ZXJzLnB1c2go
bmV3IFRyYW5zcGFyZW5jeUxheWVyKG1fZGF0YS0+cCgpLCBtX2RhdGEtPnAoKS0+dHJhbnNmb3Jt
KCkubWFwUmVjdChyZWN0KSwgMS4wLCBhbHBoYU1hc2spKTsKLX0KLQogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRoaWNrbmVzcykK
IHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJEYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlckRh
dGEuaAkocmV2aXNpb24gNjUzMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0lt
YWdlQnVmZmVyRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw5IEBACiAjaWZuZGVm
IEltYWdlQnVmZmVyRGF0YV9oCiAjZGVmaW5lIEltYWdlQnVmZmVyRGF0YV9oCiAKKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSAiSW1hZ2UuaCIKKwogI2luY2x1ZGUgPFFQYWludGVy
PgogI2luY2x1ZGUgPFFQaXhtYXA+CiAKQEAgLTQxLDYgKzQ0LDcgQEAgcHVibGljOgogCiAgICAg
UVBpeG1hcCBtX3BpeG1hcDsKICAgICBPd25QdHI8UVBhaW50ZXI+IG1fcGFpbnRlcjsKKyAgICBS
ZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCShy
ZXZpc2lvbiA2NTMyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZm
ZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiU3RpbGxJ
bWFnZVF0LmgiCisjaW5jbHVkZSAiVHJhbnNwYXJlbmN5TGF5ZXIuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKICNpbmNsdWRlIDxRQnVmZmVyPgpAQCAtNzQsNiArNzUsOCBAQCBJ
bWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJCiAgICAgYnJ1c2guc2V0Q29s
b3IoUXQ6OmJsYWNrKTsKICAgICBwYWludGVyLT5zZXRCcnVzaChicnVzaCk7CiAgICAgcGFpbnRl
ci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlT3Zl
cik7CisgICAgCisgICAgbV9kYXRhLm1faW1hZ2UgPSBTdGlsbEltYWdlOjpjcmVhdGVGb3JSZW5k
ZXJpbmcoJm1fZGF0YS5tX3BpeG1hcCk7CiB9CiAKIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihj
b25zdCBJbnRTaXplJiBzaXplLCBJbWFnZUNvbG9yU3BhY2UsIGJvb2wmIHN1Y2Nlc3MpCkBAIC05
OCwyNCArMTAxLDUwIEBAIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSAK
ICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi1JbWFnZSogSW1hZ2VCdWZmZXI6Omlt
YWdlRm9yUmVuZGVyaW5nKCkgY29uc3QKK2Jvb2wgSW1hZ2VCdWZmZXI6OmRyYXdzVXNpbmdDb3B5
KCkgY29uc3QKIHsKLSAgICBpZiAoIW1faW1hZ2UpCi0gICAgICAgIG1faW1hZ2UgPSBTdGlsbElt
YWdlOjpjcmVhdGVGb3JSZW5kZXJpbmcoJm1fZGF0YS5tX3BpeG1hcCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQogCi0gICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CitQYXNzUmVmUHRyPEltYWdlPiBJ
bWFnZUJ1ZmZlcjo6Y29weUltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3RpbGxJbWFnZTo6
Y3JlYXRlKG1fZGF0YS5tX3BpeG1hcCk7CiB9CiAKLUltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2Uo
KSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGRlc3RDb250
ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICBDb21w
b3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7Ci0gICAgaWYgKCFt
X2ltYWdlKSB7Ci0gICAgICAgIC8vIEl0J3MgYXNzdW1lZCB0aGF0IGlmIGltYWdlKCkgaXMgY2Fs
bGVkLCB0aGUgYWN0dWFsIHJlbmRlcmluZyB0byB0aGUKLSAgICAgICAgLy8gR3JhcGhpY3NDb250
ZXh0IG11c3QgYmUgZG9uZS4KLSAgICAgICAgQVNTRVJUKGNvbnRleHQoKSk7Ci0gICAgICAgIG1f
aW1hZ2UgPSBTdGlsbEltYWdlOjpjcmVhdGUobV9kYXRhLm1fcGl4bWFwKTsKLSAgICB9CisgICAg
aWYgKGRlc3RDb250ZXh0ID09IGNvbnRleHQoKSkgeworICAgICAgICAvLyBXZSdyZSBkcmF3aW5n
IGludG8gb3VyIG93biBidWZmZXIuICBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCB3ZSBuZWVk
IHRvIGNvcHkgdGhlIHNvdXJjZSBidWZmZXIgZmlyc3QuCisgICAgICAgIFJlZlB0cjxJbWFnZT4g
Y29weSA9IGNvcGllZEltYWdlKCk7CisgICAgICAgIGRlc3RDb250ZXh0LT5kcmF3SW1hZ2UoY29w
eS5nZXQoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dR
dWFsaXR5U2NhbGUpOworICAgIH0gZWxzZQorICAgICAgICBkZXN0Q29udGV4dC0+ZHJhd0ltYWdl
KG1fZGF0YS5tX2ltYWdlLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0KQoreworICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsKKyAgICAgICAg
Ly8gV2UncmUgZHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLiAgSW4gb3JkZXIgZm9yIHRoaXMg
dG8gd29yaywgd2UgbmVlZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVmZmVyIGZpcnN0LgorICAgICAg
ICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3BpZWRJbWFnZSgpOworICAgICAgICBjb3B5LT5kcmF3
UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0
eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9kYXRh
Lm1faW1hZ2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOworfQorCit2b2lkIElt
YWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBmbG9hdFJlY3QpCit7CisgICAgUVBpeG1hcCogbmF0aXZlSW1hZ2UgPSBtX2RhdGEubV9pbWFn
ZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IHJlY3QoZmxvYXRSZWN0KTsKKyAgICBRUGl4
bWFwIGFscGhhTWFzayA9ICpuYXRpdmVJbWFnZTsKKyAgICBpZiAoYWxwaGFNYXNrLndpZHRoKCkg
IT0gcmVjdC53aWR0aCgpIHx8IGFscGhhTWFzay5oZWlnaHQoKSAhPSByZWN0LmhlaWdodCgpKQor
ICAgICAgICBhbHBoYU1hc2sgPSBhbHBoYU1hc2suc2NhbGVkKHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSk7CiAKLSAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKKyAgICBtX2RhdGEtPmxheWVy
cy5wdXNoKG5ldyBUcmFuc3BhcmVuY3lMYXllcihtX2RhdGEtPnAoKSwgbV9kYXRhLT5wKCktPnRy
YW5zZm9ybSgpLm1hcFJlY3QocmVjdCksIDEuMCwgYWxwaGFNYXNrKSk7CiB9CiAKIHZvaWQgSW1h
Z2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBWZWN0b3I8aW50PiYg
bG9va1VwVGFibGUpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCShyZXZpc2lvbiA2NTMyOSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDU2LDE3ICs0NTYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBh
dGgoV2luZFJ1bGUgCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNsaXBQYXRoQW50aUFsaWFzZWQo
cGF0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFJlY3QmIHJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQotewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIE9TKExJTlVYKSB8fCBPUyhXSU5ET1dT
KQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5iZWdpbkxheWVyQ2xpcHBlZFRvSW1hZ2UocmVjdCwg
aW1hZ2VCdWZmZXIpOwotI2VuZGlmCi19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhZmZpbmUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZl
clNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9J
bWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiA2NTMyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nywy
MCArODcsMzUgQEAgR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIAogICAg
IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9CiAKLUltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2Uo
KSBjb25zdAorYm9vbCBJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2luZ0NvcHkoKSBjb25zdAogewotICAg
IGlmICghbV9pbWFnZSkgewotICAgICAgICAvLyBUaGlzIGNyZWF0ZXMgYSBDT1BZIG9mIHRoZSBp
bWFnZSBhbmQgd2lsbCBjYWNoZSB0aGF0IGNvcHkuIFRoaXMgbWVhbnMKLSAgICAgICAgLy8gdGhh
dCBpZiBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgdGFrZSBwbGFjZSBvbiB0aGUgY29udGV4dCwgbmVp
dGhlciB0aGUKLSAgICAgICAgLy8gY3VycmVudGx5LXJldHVybmVkIGltYWdlLCBub3IgdGhlIHJl
c3VsdHMgb2YgZnV0dXJlIGltYWdlKCkgY2FsbHMsCi0gICAgICAgIC8vIHdpbGwgY29udGFpbiB0
aGF0IG9wZXJhdGlvbi4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhpcyBzZWVtcyBzaWxseSwg
YnV0IGlzIHRoZSB3YXkgdGhlIENHIHBvcnQgd29ya3M6IGltYWdlKCkgaXMKLSAgICAgICAgLy8g
aW50ZW5kZWQgdG8gYmUgdXNlZCBvbmx5IHdoZW4gcmVuZGVyaW5nIGlzICJjb21wbGV0ZS4iCi0g
ICAgICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKAotICAg
ICAgICAgICAgKm1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5iaXRtYXAoKSk7Ci0gICAgfQotICAg
IHJldHVybiBtX2ltYWdlLmdldCgpOworICAgIHJldHVybiB0cnVlOworfQorCitQYXNzUmVmUHRy
PEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQml0
bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZSgqbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0
LmJpdG1hcCgpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK3sKKyNpZiBPUyhMSU5VWCkg
fHwgT1MoV0lORE9XUykKKyAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+YmVnaW5MYXll
ckNsaXBwZWRUb0ltYWdlKHJlY3QsIHRoaXMpOworI2VuZGlmCit9CisKK3ZvaWQgSW1hZ2VCdWZm
ZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LAorICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VM
b3dRdWFsaXR5U2NhbGUpCit7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUNvcHkgPSBjb3BpZWRJ
bWFnZSgpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZUNvcHkuZ2V0KCksIHN0eWxlQ29s
b3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOworfQor
Cit2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBv
cCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
Q29weSA9IGNvcGllZEltYWdlKCk7CisgICAgaW1hZ2VDb3B5LT5kcmF3UGF0dGVybihjb250ZXh0
LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwg
ZGVzdFJlY3QpOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9y
U3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHJldmlzaW9u
IDY1MzI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRX
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3OCwxMSArMzc4LDYgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUAogICAgIGNsaXAocGF0aCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJ
bWFnZUJ1ZmZlciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogQWZmaW5lVHJhbnNm
b3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QKIHsgCiAjaWYgVVNFKFdYR0MpCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJ
KHJldmlzaW9uIDY1MzI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1
ZmZlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMTIgKzgyLDM3IEBAIFN0cmluZyBJbWFn
ZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmkKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAK
LUltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAorYm9vbCBJbWFnZUJ1ZmZlcjo6ZHJh
d3NVc2luZ0NvcHkoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoKSBj
b25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQg
SW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JikgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0
eVNjYWxlKQoreworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29waWVkSW1hZ2UoKTsK
KyAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2VDb3B5LmdldCgpLCBzdHlsZUNvbG9yU3BhY2Us
IGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUNvcHkgPSBj
b3BpZWRJbWFnZSgpOworICAgIGltYWdlQ29weS0+ZHJhd1BhdHRlcm4oY29udGV4dCwgc3JjUmVj
dCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0
KTsKK30KKwogdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNv
bnN0IFZlY3RvcjxpbnQ+JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0JKHJldmlzaW9uIDY1MTYwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTM5Niw3ICszOTYsNyBAQCBib29sIFNjcm9sbGJhclRoZW1lTWFjOjpwYWludChTY3JvbGxi
YXIqCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIEhJVGhlbWVE
cmF3VHJhY2soJnRyYWNrSW5mbywgMCwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1D
b250ZXh0KCksIGtISVRoZW1lT3JpZW50YXRpb25Ob3JtYWwpOwotICAgICAgICBjb250ZXh0LT5k
cmF3SW1hZ2UoaW1hZ2VCdWZmZXItPmltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIHNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7CisgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1
ZmZlcihpbWFnZUJ1ZmZlci5nZXQoKSwgRGV2aWNlQ29sb3JTcGFjZSwgc2Nyb2xsYmFyLT5mcmFt
ZVJlY3QoKS5sb2NhdGlvbigpKTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDY1MTYw
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MzEsNyArNTMxLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFp
bnRGaWxsTGF5ZQogICAgICAgICAKICAgICAgICAgLy8gVGhlIG1hc2sgaGFzIGJlZW4gY3JlYXRl
ZC4gIE5vdyB3ZSBqdXN0IG5lZWQgdG8gY2xpcCB0byBpdC4KICAgICAgICAgY29udGV4dC0+c2F2
ZSgpOwotICAgICAgICBjb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihtYXNrUmVjdCwgbWFza0lt
YWdlLmdldCgpKTsKKyAgICAgICAgY29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIobWFza0ltYWdl
LmdldCgpLCBtYXNrUmVjdCk7CiAgICAgfQogICAgIAogICAgIFN0eWxlSW1hZ2UqIGJnID0gYmdM
YXllci0+aW1hZ2UoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyLmNwcAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNyArMTc0
LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcAogICAgIGlmICgh
Y2xpcHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGNvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBjbGlwcGVyRGF0YS0+Y2xp
cE1hc2tJbWFnZS5nZXQoKSk7CisgICAgY29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoY2xpcHBl
ckRhdGEtPmNsaXBNYXNrSW1hZ2UuZ2V0KCksIHJlcGFpbnRSZWN0KTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyLmNwcAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lk
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSCiAjaWYgIVBMQVRGT1JNKENHKQog
ICAgICAgICAgICAgcmVzdWx0SW1hZ2UtPnRyYW5zZm9ybUNvbG9yU3BhY2UoTGluZWFyUkdCLCBE
ZXZpY2VSR0IpOwogI2VuZGlmCi0gICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UocmVzdWx0
SW1hZ2UtPmltYWdlKCksIG9iamVjdC0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBsYXN0RWZmZWN0
LT5zdWJSZWdpb24oKSk7CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIocmVz
dWx0SW1hZ2UsIG9iamVjdC0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBsYXN0RWZmZWN0LT5zdWJS
ZWdpb24oKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCShyZXZpc2lvbiA2NTE2MCkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjMsNyArMTIzLDcgQEAgc3RhdGljIGlubGluZSBBZmZpbmVUcmFuc2Zvcm0gY2xp
cFRvVGV4dAogICAgIC8vIFNvIHRoZSBhY3R1YWwgbWFza2luZyBwcm9jZXNzIGhhcyB0byBiZSBk
b25lIGluIHRoZSBkZXZpY2UgY29vcmRpbmF0ZSBzcGFjZSBhcyB3ZWxsLgogICAgIEFmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm1Gcm9tQ29udGV4dChjb250ZXh0KSk7
CiAgICAgY29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybS5pbnZlcnNlKCkpOwotICAgIGNvbnRl
eHQtPmNsaXBUb0ltYWdlQnVmZmVyKHRyYW5zZm9ybS5tYXBSZWN0KHRleHRSb290QmxvY2stPnJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpLCBpbWFnZUJ1ZmZlci5nZXQoKSk7CisgICAg
Y29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIuZ2V0KCksIHRyYW5zZm9ybS5t
YXBSZWN0KHRleHRSb290QmxvY2stPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsK
ICAgICBjb250ZXh0LT5jb25jYXRDVE0odHJhbnNmb3JtKTsKIAogICAgIEFmZmluZVRyYW5zZm9y
bSBtYXRyaXg7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuY3BwCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlTWFza2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIGJv
b2wgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5UmVzb3UKICAgICBpZiAoIW1hc2tlckRh
dGEtPm1hc2tJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29udGV4dC0+Y2xp
cFRvSW1hZ2VCdWZmZXIobWFza2VyRGF0YS0+bWFza1JlY3QsIG1hc2tlckRhdGEtPm1hc2tJbWFn
ZS5nZXQoKSk7CisgICAgY29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIobWFza2VyRGF0YS0+bWFz
a0ltYWdlLmdldCgpLCBtYXNrZXJEYXRhLT5tYXNrUmVjdCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJu
LmNwcAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNv
dXJjZVBhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTgsMTQgKzI5OCwxNSBAQCBQYXNz
T3duUHRyPEltYWdlQnVmZmVyPiBSZW5kZXJTVkdSZXNvdXJjCiAKIHZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VQYXR0ZXJuOjpidWlsZFBhdHRlcm4oUGF0dGVybkRhdGEqIHBhdHRlcm5EYXRhLCBQYXNz
T3duUHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2UpIGNvbnN0CiB7Ci0gICAgaWYgKCF0aWxlSW1h
Z2UtPmltYWdlKCkpIHsKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcGllZEltYWdlID0gdGlsZUltYWdl
LT5jb3B5SW1hZ2UoKTsKKyAgICBpZiAoIWNvcGllZEltYWdlKSB7CiAgICAgICAgIHBhdHRlcm5E
YXRhLT5wYXR0ZXJuID0gMDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIEludFJlY3Qg
dGlsZVJlY3QgPSB0aWxlSW1hZ2UtPmltYWdlKCktPnJlY3QoKTsKKyAgICAKKyAgICBJbnRSZWN0
IHRpbGVSZWN0ID0gY29waWVkSW1hZ2UtPnJlY3QoKTsKICAgICBpZiAodGlsZVJlY3Qud2lkdGgo
KSA8PSBwYXR0ZXJuRGF0YS0+Ym91bmRhcmllcy53aWR0aCgpICYmIHRpbGVSZWN0LmhlaWdodCgp
IDw9IHBhdHRlcm5EYXRhLT5ib3VuZGFyaWVzLmhlaWdodCgpKSB7Ci0gICAgICAgIHBhdHRlcm5E
YXRhLT5wYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZS0+aW1hZ2UoKSwgdHJ1ZSwg
dHJ1ZSk7CisgICAgICAgIHBhdHRlcm5EYXRhLT5wYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKGNv
cGllZEltYWdlLCB0cnVlLCB0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzMx
LDEzICszMzIsMTMgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmJ1aWxkUGF0dAog
ICAgICAgICBuZXdUaWxlSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoMCwgcGF0dGVybkRhdGEtPmJv
dW5kYXJpZXMuaGVpZ2h0KCkpOwogICAgICAgICBmb3IgKGludCBqID0gbnVtWDsgaiA+IDA7IC0t
aikgewogICAgICAgICAgICAgbmV3VGlsZUltYWdlQ29udGV4dC0+dHJhbnNsYXRlKHBhdHRlcm5E
YXRhLT5ib3VuZGFyaWVzLndpZHRoKCksIDApOwotICAgICAgICAgICAgbmV3VGlsZUltYWdlQ29u
dGV4dC0+ZHJhd0ltYWdlKHRpbGVJbWFnZS0+aW1hZ2UoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgp
LCB0aWxlUmVjdCwgdGlsZVJlY3QpOworICAgICAgICAgICAgbmV3VGlsZUltYWdlQ29udGV4dC0+
ZHJhd0ltYWdlKGNvcGllZEltYWdlLmdldCgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIHRpbGVS
ZWN0LCB0aWxlUmVjdCk7CiAgICAgICAgIH0KICAgICAgICAgbmV3VGlsZUltYWdlQ29udGV4dC0+
dHJhbnNsYXRlKC1wYXR0ZXJuRGF0YS0+Ym91bmRhcmllcy53aWR0aCgpICogbnVtWCwgMCk7CiAg
ICAgfQogICAgIG5ld1RpbGVJbWFnZUNvbnRleHQtPnJlc3RvcmUoKTsKIAotICAgIHBhdHRlcm5E
YXRhLT5wYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKG5ld1RpbGVJbWFnZS0+aW1hZ2UoKSwgdHJ1
ZSwgdHJ1ZSk7CisgICAgcGF0dGVybkRhdGEtPnBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUobmV3
VGlsZUltYWdlLT5jb3B5SW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05NjMsNyArOTYzLDgg
QEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0JhcihSZQogICAgICAgICBwYWlu
dEluZm8uY29udGV4dC0+dHJhbnNsYXRlKDIgKiByZWN0LngoKSArIHJlY3Qud2lkdGgoKSwgMCk7
CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoLTEsIDEpKTsKICAg
ICB9Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFnZShpbWFnZUJ1ZmZlci0+aW1hZ2Uo
KSwgRGV2aWNlQ29sb3JTcGFjZSwgcmVjdC5sb2NhdGlvbigpKTsKKyAgICAKKyAgICBwYWludElu
Zm8uY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLmdldCgpLCBEZXZpY2VDb2xv
clNwYWNlLCByZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3Rv
cmUoKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA2NTE2MCkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRUltYWdlRWxlbWUKICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6cmVuZGVyU3VidHJl
ZVRvSW1hZ2UobV90YXJnZXRJbWFnZS5nZXQoKSwgcmVuZGVyZXIpOwogICAgIH0KIAotICAgIHJl
dHVybiBGRUltYWdlOjpjcmVhdGUobV90YXJnZXRJbWFnZSA/IG1fdGFyZ2V0SW1hZ2UtPmltYWdl
KCkgOiBtX2NhY2hlZEltYWdlLT5pbWFnZSgpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOworICAg
IHJldHVybiBGRUltYWdlOjpjcmVhdGUobV90YXJnZXRJbWFnZSA/IG1fdGFyZ2V0SW1hZ2UtPmNv
cHlJbWFnZSgpIDogbV9jYWNoZWRJbWFnZS0+aW1hZ2UoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygp
KTsKIH0KIAogdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVV
UkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlLmNwcAkocmV2aXNpb24gNjUxNjApCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSwxMiArMjIxLDEzIEBAIE5hdGl2ZUltYWdl
UHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckMKICAgICBpZiAoIW1fZnJhbWVDYWNoZSkgewog
ICAgICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBtX2Zy
YW1lQ2FjaGUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSk7Ci0gICAgICAgIGlmICghbV9m
cmFtZUNhY2hlKSAvLyBmYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UKKyAgICAgICAgT3duUHRyPElt
YWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSk7CisgICAgICAg
IGlmICghYnVmZmVyKSAvLyBmYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UKICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICBkcmF3KG1fZnJhbWVDYWNoZS0+Y29udGV4dCgpLCByZWN0KCksIHJl
Y3QoKSwgRGV2aWNlQ29sb3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgICAgIGRy
YXcoYnVmZmVyLT5jb250ZXh0KCksIHJlY3QoKSwgcmVjdCgpLCBEZXZpY2VDb2xvclNwYWNlLCBD
b21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICAgICAgbV9mcmFtZUNhY2hlID0gYnVmZmVyLT5jb3B5
SW1hZ2UoKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fZnJhbWVDYWNoZS0+aW1hZ2UoKS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICByZXR1cm4gbV9mcmFtZUNhY2hlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOwogfQogCiBib29sIFNWR0ltYWdlOjpkYXRhQ2hhbmdlZChi
b29sIGFsbERhdGFSZWNlaXZlZCkKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNp
b24gNjUxNjApCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw3ICszMyw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNz
IEltYWdlQnVmZmVyOwogICAgIGNsYXNzIFBhZ2U7CiAgICAgY2xhc3MgU1ZHSW1hZ2VDaHJvbWVD
bGllbnQ7CiAgICAgCkBAIC03Miw3ICs3MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgCiAgICAgICAgIE93blB0cjxTVkdJbWFnZUNocm9tZUNsaWVudD4gbV9jaHJvbWVDbGllbnQ7
CiAgICAgICAgIE93blB0cjxQYWdlPiBtX3BhZ2U7Ci0gICAgICAgIE93blB0cjxJbWFnZUJ1ZmZl
cj4gbV9mcmFtZUNhY2hlOworICAgICAgICBSZWZQdHI8SW1hZ2U+IG1fZnJhbWVDYWNoZTsKICAg
ICB9OwogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJn
ZS5jcHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRU1lcmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCB2b2lkIEZFTWVy
Z2U6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbWVyZ2VJbnB1dHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0
ID0gY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9tZXJnZUlucHV0c1tpXS0+c2NhbGVkU3ViUmVnaW9u
KCkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9tZXJnZUlucHV0c1tpXS0+
cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QpOworICAg
ICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9tZXJnZUlucHV0c1tpXS0+cmVz
dWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QpOwogICAgIH0KIH0KIApJbmRl
eDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAJKHJldmlz
aW9uIDY1MTYwKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBGRU9mZnNldDo6YXBwbHko
RmlsdGVyKiBmaWx0ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbi0+
c2NhbGVkU3ViUmVnaW9uKCkud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luLT5zY2FsZWRTdWJSZWdpb24oKS5oZWlnaHQoKSk7CiAKLSAgICBmaWx0ZXJDb250
ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JT
cGFjZSwgZHN0UmVjdCk7CisgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4t
PnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGRzdFJlY3QpOwogfQogCiB2b2lkIEZF
T2Zmc2V0OjpkdW1wKCkKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVU
aWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
VGlsZS5jcHAJKHJldmlzaW9uIDY1MTYwKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRVRpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw4ICs3Miw4IEBAIHZvaWQgRkVU
aWxlOjphcHBseShGaWx0ZXIqIGZpbHRlcikKIAogICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gdGls
ZUltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0aWxlUmVjdC5zaXplKCkpOwogICAgIEdyYXBo
aWNzQ29udGV4dCogdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOwotICAg
IHRpbGVJbWFnZUNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgp
LCBEZXZpY2VDb2xvclNwYWNlLCBJbnRQb2ludCgpKTsKLSAgICBSZWZQdHI8UGF0dGVybj4gcGF0
dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2UtPmltYWdlKCksIHRydWUsIHRydWUpOwor
ICAgIHRpbGVJbWFnZUNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgp
LCBEZXZpY2VDb2xvclNwYWNlLCBJbnRQb2ludCgpKTsKKyAgICBSZWZQdHI8UGF0dGVybj4gcGF0
dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2UtPmNvcHlJbWFnZSgpLCB0cnVlLCB0cnVl
KTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7CiAgICAgbWF0cml4LnRyYW5zbGF0ZSht
X2luLT5zY2FsZWRTdWJSZWdpb24oKS54KCkgLSBzY2FsZWRTdWJSZWdpb24oKS54KCksIG1faW4t
PnNjYWxlZFN1YlJlZ2lvbigpLnkoKSAtIHNjYWxlZFN1YlJlZ2lvbigpLnkoKSk7Cg==
</data>
<flag name="review"
          id="53087"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64512</attachid>
            <date>2010-08-16 13:21:55 -0700</date>
            <delta_ts>2010-08-16 13:28:48 -0700</delta_ts>
            <desc>ToT changed some things, had to resync.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>73621</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTQ0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMzIEBACisyMDEwLTA4LTE2ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNTA3LCBzdG9wIEltYWdlQnVm
ZmVyIGZyb20gY29weWluZyBpdHMgZGF0YSB3aGVuIHJlbmRlcmluZyBhZnRlciBjYW52YXMgY2hh
bmdlcyBoYXBwZW4uCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIHJlbmFtZXMgSW1hZ2VC
dWZmZXI6OmltYWdlKCkgdG8gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSgpLiBUaGUgbmV3IG1ldGhv
ZCBhbHdheXMgcmV0dXJucyBhIG5ldyBjb3B5IHRoYXQgaXMgYSBjdXJyZW50CisgICAgICAgIHNu
YXBzaG90IG9mIHRoZSBJbWFnZUJ1ZmZlci4KKyAgICAgICAgCisgICAgICAgIFRvIGRyYXcgYW4g
SW1hZ2VCdWZmZXIsIHlvdSBub3cgdXNlIG5ldyBHcmFwaGljc0NvbnRleHQgY2FsbHM6IGRyYXdJ
bWFnZUJ1ZmZlci4gIFBsYXRmb3JtcyBjYW4gdGhlbiBvcHRpbWl6ZSB0aGVzZSBjYWxscyB0byBk
cmF3CisgICAgICAgIGVmZmljaWVudGx5IHdpdGhvdXQgaGF2aW5nIHRvIGNvcHkgdGhlIGJpdHMg
b2YgdGhlIEltYWdlQnVmZmVyIGludG8gYW4gSW1hZ2UuCisKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0NTU0NhbnZhc1ZhbHVlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjppbWFnZSk6CisgICAgICAgICog
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6d2lsbERyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6c2V0U3VyZmFjZVNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNvcGllZEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjbGVhckNvcGllZEltYWdlKToKKyAgICAgICAg
KiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
UGF0dGVybi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNQYXR0ZXJuOjpDYW52YXNQYXR0
ZXJuKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmg6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNQYXR0ZXJuOjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEludGVybmFsKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdl
bmVyYXRlZEltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xp
cFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRzSW50b0NhbnZhc0J1
ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpoZWlnaHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGF0dGVybjo6UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVy
bi5oOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2luZ0NvcHkpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2lu
Z0NvcHkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNs
aXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjphcHBseSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvc2l0ZTo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlQWxwaGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmFwcGx5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6YXBwbHkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJEYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckRhdGE6OkltYWdlQnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
ZHJhd3NVc2luZ0NvcHkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmNsaXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3ND
b250ZXh0U2tpYS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1
ZmZlclNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdzVXNpbmdD
b3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5SW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2luZ0NvcHkpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9TY3JvbGxiYXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
TWFjOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXll
ckV4dGVuZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlD
bGlwcGluZ1RvQ29udGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpw
b3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
R3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xpcFRvVGV4dE1hc2spOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmJ1aWxkUGF0dGVybik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFn
ZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9T
VkdJbWFnZS5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0
OjphcHBseSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHkpOgorCiAyMDEwLTA4LTE2ICBLZXZpbiBP
bGxpdmllciAgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgogCiAgICAgICAgIFt3eF0gQnVpbGQg
Zml4LCBkbyBub3QgYnVpbGQgV2ViQ29yZSBhcyBhIGNvbnZlbmllbmNlIGxpYnJhcnkgYXMgdGhp
cyBsZWFkcyB0bwpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDY1NDQ1KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQwMzgsNyArNDAzOCw3IEBACiAJCUIyQTAxNUE5
MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTAxNTkzMEFGNkNENTMwMDZCQ0UwRSAvKiBH
cmFwaGljc0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCMkEwMTVBQTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkEwMTU5NDBB
RjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5jcHAgKi87IH07CiAJCUIyQTAxNUFCMEFG
NkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkEwMTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhp
Y3NUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMTBCOTEwQjM4MThCRDAwMDk5
QUE0IC8qIEltYWdlQnVmZmVyLmggKi87IH07CisJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAv
KiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJBMTBCOTQwQjM4MThE
NzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVm
ZmVyQ0cuY3BwICovOyB9OwogCQlCMkExRjJBQTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmNwcCAqLzsgfTsKIAkJ
QjJBMUYyQUIwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkExRjJBMjBDRUYwQUJGMDA0NDJG
NkEgLyogU1ZHRm9udEVsZW1lbnQuaCAqLzsgfTsKQEAgLTQ3NzAsNiArNDc3MCw3IEBACiAJCUJD
QThDODMxMTFFM0Q1MzIwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQThDODMwMTFF
M0Q1MzIwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0E4Q0E1RjExRTRFNkQx
MDA4MTJGQjcgLyogQmFja0ZvcndhcmRMaXN0SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E4Q0E1RDExRTRFNkQxMDA4MTJGQjcgLyogQmFj
a0ZvcndhcmRMaXN0SW1wbC5jcHAgKi87IH07CiAJCUJDQThDQTYwMTFFNEU2RDEwMDgxMkZCNyAv
KiBCYWNrRm9yd2FyZExpc3RJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0E4Q0E1RTExRTRFNkQxMDA4MTJGQjcgLyogQmFja0ZvcndhcmRMaXN0
SW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUJDQTk3OTE3MTIxNUQwNTUwMDVDNDg1QyAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTk3OTE2MTIxNUQwNTUwMDVD
NDg1QyAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlCQ0FBOTBDMzBBN0VCQTYwMDA4QjEyMjkgLyogU2Nyb2xsYmFy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQUE5
MEMyMEE3RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxiYXIuY3BwICovOyB9OwogCQlCQ0FDRjNCQzEw
NzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQUNGM0JBMTA3MjkyMUEwMEMwQzhB
MyAvKiBVc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwICovOyB9OwogCQlCQ0FDRjNCRDEwNzI5MjFB
MDBDMEM4QTMgLyogVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0FDRjNCQjEwNzI5MjFBMDBDMEM4QTMgLyogVXNl
ckNvbnRlbnRVUkxQYXR0ZXJuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTEwNTIyLDYgKzEwNTIzLDcgQEAKIAkJQkNBOEM4MzAxMUUzRDUzMjAw
ODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBOENBNUQxMUU0RTZEMTAwODEyRkI3IC8qIEJhY2tGb3J3
YXJkTGlzdEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFj
a0ZvcndhcmRMaXN0SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQThD
QTVFMTFFNEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExpc3RJbXBsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhY2tGb3J3YXJkTGlzdEltcGwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQkNBOTc5MTYxMjE1RDA1NTAwNUM0ODVDIC8qIEltYWdlQnVmZmVy
RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBQTkwQzIwQTdFQkE2MDAwOEIxMjI5
IC8qIFNjcm9sbGJhci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
U2Nyb2xsYmFyLmNwcDsgcGF0aCA9IHBsYXRmb3JtL1Njcm9sbGJhci5jcHA7IHNvdXJjZVRyZWUg
PSBTT1VSQ0VfUk9PVDsgfTsKIAkJQkNBQ0YzQkExMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250
ZW50VVJMUGF0dGVybi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBV
c2VyQ29udGVudFVSTFBhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
Q0FDRjNCQjEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJDb250ZW50VVJMUGF0dGVybi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU2MTEsNiArMTU2MTMsNyBAQAogCQkJCUIyRUQ5
NzcwMEIxRjU1Q0UwMDI1N0QwRiAvKiBHcmFwaGljc0NvbnRleHRDRy5jcHAgKi8sCiAJCQkJQTgw
RDY3MDcwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNH
LmggKi8sCiAJCQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3Bw
ICovLAorCQkJCUJDQTk3OTE2MTIxNUQwNTUwMDVDNDg1QyAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAq
LywKIAkJCQlCMjc1MzUzMDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VDRy5jcHAgKi8sCiAJCQkJ
QjI3NTM1MzEwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlQ0cuY3BwICovLAogCQkJCTRC
MzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggKi8sCkBAIC0yMDE4Miw2
ICsyMDE4NSw3IEBACiAJCQkJOTdERDREODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNFMTcyRTAxMTEzNkU4Q0UwMDYyQTUzMyAvKiBab29tTW9k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzUwQjU2MTcxMjExOUQyMzAwOEI0NkUwIC8qIEdyb3Vw
U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDQTk3OTE3MTIxNUQwNTUwMDVDNDg1QyAv
KiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9jc3MvQ1NT
Q2FudmFzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVl
LmNwcAkocmV2aXNpb24gNjU0NDUpCisrKyBXZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgSW1hZ2UqIENTU0NhbnZhc1ZhbHVlOjpp
bWFnZShSZW5kZXJPYmplYwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBlbHQgPSBlbGVtZW50KHJl
bmRlcmVyLT5kb2N1bWVudCgpKTsKICAgICBpZiAoIWVsdCB8fCAhZWx0LT5idWZmZXIoKSkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGVsdC0+YnVmZmVyKCktPmltYWdlKCk7CisgICAg
cmV0dXJuIGVsdC0+Y29waWVkSW1hZ2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2NTQ0NSkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw4
ICsyMDksNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVuCiAKIHZv
aWQgSFRNTENhbnZhc0VsZW1lbnQ6OndpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBpZiAobV9pbWFnZUJ1ZmZlcikKLSAgICAgICAgbV9pbWFnZUJ1ZmZlci0+Y2xlYXJJbWFn
ZSgpOworICAgIG1fY29waWVkSW1hZ2UuY2xlYXIoKTsgLy8gQ2xlYXIgb3VyIGltYWdlIHNuYXBz
aG90IGlmIHdlIGhhdmUgb25lLgogCiAgICAgaWYgKFJlbmRlckJveCogcm8gPSByZW5kZXJCb3go
KSkgewogICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSByby0+Y29udGVudEJveFJlY3QoKTsK
QEAgLTI0MiwxMCArMjQxLDEwIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KCkKICAg
ICAgICAgaCA9IERlZmF1bHRIZWlnaHQ7CiAKICAgICBJbnRTaXplIG9sZFNpemUgPSBzaXplKCk7
Ci0gICAgc2V0U3VyZmFjZVNpemUoSW50U2l6ZSh3LCBoKSk7CisgICAgc2V0U3VyZmFjZVNpemUo
SW50U2l6ZSh3LCBoKSk7IC8vIFRoZSBpbWFnZSBidWZmZXIgZ2V0cyBjbGVhcmVkIGhlcmUuCiAK
ICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5p
czNkKCkpCisgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzM2QoKSAmJiBvbGRTaXpl
ICE9IHNpemUoKSkKICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4o
bV9jb250ZXh0LmdldCgpKS0+cmVzaGFwZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAjZW5kaWYKIApA
QCAtMjc3LDIzICsyNzYsMjEgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnQoR3JhcGhp
Y3NDbwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dDNEID0gMDsKICAgICBpZiAo
bV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMzZCgpKSB7CiAgICAgICAgIGNvbnRleHQzRCA9IHN0
YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSk7Ci0gICAg
ICAgIGNvbnRleHQzRC0+YmVnaW5QYWludCgpOworICAgICAgICBpZiAoIWNvbnRleHQzRC0+cGFp
bnRzSW50b0NhbnZhc0J1ZmZlcigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjb250
ZXh0M0QtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAgICAgfQogI2VuZGlmCiAK
ICAgICBpZiAoaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkpIHsKICAgICAgICAgSW1hZ2VCdWZmZXIq
IGltYWdlQnVmZmVyID0gYnVmZmVyKCk7CiAgICAgICAgIGlmIChpbWFnZUJ1ZmZlcikgewotICAg
ICAgICAgICAgSW1hZ2UqIGltYWdlID0gaW1hZ2VCdWZmZXItPmltYWdlRm9yUmVuZGVyaW5nKCk7
Ci0gICAgICAgICAgICBpZiAoaW1hZ2UpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0lt
YWdlKGltYWdlLCBEZXZpY2VDb2xvclNwYWNlLCByKTsKKyAgICAgICAgICAgIGlmIChpbWFnZUJ1
ZmZlci0+ZHJhd3NVc2luZ0NvcHkoKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1h
Z2UoY29waWVkSW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgcik7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBE
ZXZpY2VDb2xvclNwYWNlLCByKTsKICAgICAgICAgfQogICAgIH0KLQotI2lmIEVOQUJMRSgzRF9D
QU5WQVMpCi0gICAgaWYgKGNvbnRleHQzRCkKLSAgICAgICAgY29udGV4dDNELT5lbmRQYWludCgp
OwotI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKSAgICAKQEAgLTMyNSw2ICszMjIs
NyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRTdXJmYWNlU2l6ZShjCiAgICAgbV9zaXpl
ID0gc2l6ZTsKICAgICBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciA9IGZhbHNlOwogICAgIG1faW1h
Z2VCdWZmZXIuY2xlYXIoKTsKKyAgICBtX2NvcGllZEltYWdlLmNsZWFyKCk7CiB9CiAKIFN0cmlu
ZyBIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNv
bnN0IGRvdWJsZSogcXVhbGl0eSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC00MjAsNiArNDE4LDE4
IEBAIEltYWdlQnVmZmVyKiBIVE1MQ2FudmFzRWxlbWVudDo6YnVmZmVyKCkKICAgICByZXR1cm4g
bV9pbWFnZUJ1ZmZlci5nZXQoKTsKIH0KIAorSW1hZ2UqIEhUTUxDYW52YXNFbGVtZW50Ojpjb3Bp
ZWRJbWFnZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NvcGllZEltYWdlICYmIGJ1ZmZlcigpKQor
ICAgICAgICBtX2NvcGllZEltYWdlID0gYnVmZmVyKCktPmNvcHlJbWFnZSgpOworICAgIHJldHVy
biBtX2NvcGllZEltYWdlLmdldCgpOworfQorCit2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjbGVh
ckNvcGllZEltYWdlKCkKK3sKKyAgICBtX2NvcGllZEltYWdlLmNsZWFyKCk7Cit9CisKIEFmZmlu
ZVRyYW5zZm9ybSBIVE1MQ2FudmFzRWxlbWVudDo6YmFzZVRyYW5zZm9ybSgpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5oCShyZXZpc2lvbiA2NTQ0NSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIGNsYXNzIENhbnZhc0NvbnRl
eHRBdHRyaWJ1dGVzOwogY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKIGNsYXNzIEhUTUxDYW52YXNFbGVtZW50OworY2xhc3MgSW1hZ2U7CiBjbGFz
cyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIEludFNpemU7CiAKQEAgLTkzLDYgKzk0LDggQEAgcHVibGlj
OgogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KIAogICAgIEltYWdlQnVmZmVyKiBidWZmZXIoKSBj
b25zdDsKKyAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdDsKKyAgICB2b2lkIGNsZWFyQ29w
aWVkSW1hZ2UoKTsKIAogICAgIEludFJlY3QgY29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBG
bG9hdFJlY3QmKSBjb25zdDsKICAgICBJbnRTaXplIGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29u
c3QgRmxvYXRTaXplJikgY29uc3Q7CkBAIC0xNDksNiArMTUyLDggQEAgcHJpdmF0ZToKICAgICAv
LyBtX2NyZWF0ZWRJbWFnZUJ1ZmZlciBtZWFucyB3ZSB0cmllZCB0byBtYWxsb2MgdGhlIGJ1ZmZl
ci4gIFdlIGRpZG4ndCBuZWNlc3NhcmlseSBnZXQgaXQuCiAgICAgbXV0YWJsZSBib29sIG1faGFz
Q3JlYXRlZEltYWdlQnVmZmVyOwogICAgIG11dGFibGUgT3duUHRyPEltYWdlQnVmZmVyPiBtX2lt
YWdlQnVmZmVyOworICAgIAorICAgIG11dGFibGUgUmVmUHRyPEltYWdlPiBtX2NvcGllZEltYWdl
OyAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkgZm9yIHBsYXRmb3JtcyB0aGF0IGhhdmUgdG8g
Y29weSB0aGUgaW1hZ2UgYnVmZmVyIHRvIHJlbmRlciAoYW5kIGZvciBDU1NDYW52YXNWYWx1ZSku
CiB9OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Bh
dHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVy
bi5jcHAJKHJldmlzaW9uIDY1NDQ1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQYXR0
ZXJuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIENhbnZhc1BhdHRl
cm46OnBhcnNlUmVwZXRpdGlvblR5cGUoCiAgICAgZWMgPSBTWU5UQVhfRVJSOwogfQogCi1DYW52
YXNQYXR0ZXJuOjpDYW52YXNQYXR0ZXJuKEltYWdlKiBpbWFnZSwgYm9vbCByZXBlYXRYLCBib29s
IHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCitDYW52YXNQYXR0ZXJuOjpDYW52YXNQYXR0ZXJu
KFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9v
bCBvcmlnaW5DbGVhbikKICAgICA6IG1fcGF0dGVybihQYXR0ZXJuOjpjcmVhdGUoaW1hZ2UsIHJl
cGVhdFgsIHJlcGVhdFkpKQogICAgICwgbV9vcmlnaW5DbGVhbihvcmlnaW5DbGVhbikKIHsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5oCShyZXZpc2lvbiA2NTQ0NSkKKysrIFdl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRp
YyB2b2lkIHBhcnNlUmVwZXRpdGlvblR5cGUoY29uc3QgU3RyaW5nJiwgYm9vbCYgcmVwZWF0WCwg
Ym9vbCYgcmVwZWF0WSwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENhbnZhc1BhdHRlcm4+IGNyZWF0ZShJbWFnZSogaW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9v
bCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
YW52YXNQYXR0ZXJuPiBjcmVhdGUoUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UsIGJvb2wgcmVwZWF0
WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1BhdHRlcm4oaW1hZ2UsIHJlcGVhdFgsIHJlcGVh
dFksIG9yaWdpbkNsZWFuKSk7CiAgICAgICAgIH0KQEAgLTUxLDcgKzUxLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBib29sIG9yaWdpbkNsZWFuKCkgY29uc3QgeyByZXR1cm4gbV9v
cmlnaW5DbGVhbjsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQ2FudmFzUGF0dGVybihJbWFn
ZSosIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKTsKKyAgICAg
ICAgQ2FudmFzUGF0dGVybihQYXNzUmVmUHRyPEltYWdlPiwgYm9vbCByZXBlYXRYLCBib29sIHJl
cGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pOwogCiAgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBtX3Bh
dHRlcm47CiAgICAgICAgIGJvb2wgbV9vcmlnaW5DbGVhbjsKSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDY1NDQ1
KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjY0LDcgKzEyNjQsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZHJhd0ltYWdlCiAKICAgICBzb3VyY2VDYW52YXMtPm1ha2VSZW5kZXJpbmdSZXN1
bHRzQXZhaWxhYmxlKCk7CiAKLSAgICBjLT5kcmF3SW1hZ2UoYnVmZmVyLT5pbWFnZSgpLCBEZXZp
Y2VDb2xvclNwYWNlLCBkZXN0UmVjdCwgc291cmNlUmVjdCwgc3RhdGUoKS5tX2dsb2JhbENvbXBv
c2l0ZSk7CisgICAgYy0+ZHJhd0ltYWdlQnVmZmVyKGJ1ZmZlciwgRGV2aWNlQ29sb3JTcGFjZSwg
ZGVzdFJlY3QsIHNvdXJjZVJlY3QsIHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUpOwogICAgIHdp
bGxEcmF3KGRlc3RSZWN0KTsgLy8gVGhpcyBjYWxsIGNvbWVzIGFmdGVyIGRyYXdJbWFnZSwgc2lu
Y2UgdGhlIGJ1ZmZlciB3ZSBkcmF3IGludG8gbWF5IGJlIG91ciBvd24sIGFuZCB3ZSBuZWVkIHRv
IG1ha2Ugc3VyZSBpdCBpcyBkaXJ0eS4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBBcmd1YWJseSB3aWxsRHJhdyBzaG91bGQgYmVjb21lIGRpZERyYXcgYW5kIG9jY3VyIGFmdGVy
IGRyYXdpbmcgY2FsbHMgYW5kIG5vdCBiZWZvcmUgdGhlbSB0byBhdm9pZCBwcm9ibGVtcyBsaWtl
IHRoaXMuCiB9CkBAIC0xNDY0LDcgKzE0NjQsNyBAQCBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+
IENhbnZhc1JlbmRlcmluCiAgICAgQ2FudmFzUGF0dGVybjo6cGFyc2VSZXBldGl0aW9uVHlwZShy
ZXBldGl0aW9uVHlwZSwgcmVwZWF0WCwgcmVwZWF0WSwgZWMpOwogICAgIGlmIChlYykKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIENhbnZhc1BhdHRlcm46OmNyZWF0ZShjYW52YXMtPmJ1
ZmZlcigpLT5pbWFnZSgpLCByZXBlYXRYLCByZXBlYXRZLCBjYW52YXMtPm9yaWdpbkNsZWFuKCkp
OworICAgIHJldHVybiBDYW52YXNQYXR0ZXJuOjpjcmVhdGUoY2FudmFzLT5jb3BpZWRJbWFnZSgp
LCByZXBlYXRYLCByZXBlYXRZLCBjYW52YXMtPm9yaWdpbkNsZWFuKCkpOwogfQogCiB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6d2lsbERyYXcoY29uc3QgRmxvYXRSZWN0JiByLCB1bnNp
Z25lZCBvcHRpb25zKQpAQCAtMTgyMCw3ICsxODIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmRyYXdUZXh0SQogICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5kcmF3QmlkaVRl
eHQoZm9udCwgdGV4dFJ1biwgbG9jYXRpb24pOwogCiAgICAgICAgIGMtPnNhdmUoKTsKLSAgICAg
ICAgYy0+Y2xpcFRvSW1hZ2VCdWZmZXIobWFza1JlY3QsIG1hc2tJbWFnZS5nZXQoKSk7CisgICAg
ICAgIGMtPmNsaXBUb0ltYWdlQnVmZmVyKG1hc2tJbWFnZS5nZXQoKSwgbWFza1JlY3QpOwogICAg
ICAgICBkcmF3U3R5bGUtPmFwcGx5RmlsbENvbG9yKGMpOwogICAgICAgICBjLT5maWxsUmVjdCht
YXNrUmVjdCk7CiAgICAgICAgIGMtPnJlc3RvcmUoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDY1NDQ1KQorKysgV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTgsMjcgKzE1OCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0Nv
bnRleHRDCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcygpCiB7Ci0gICAgaWYgKG1fbWFya2VkQ2FudmFzRGlydHkpIHsKLSAgICAgICAg
Ly8gRklYTUU6IEl0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IHRvIGNsZWFyIHRoZSBpbWFnZSBi
ZWZvcmUgZG9pbmcgYSByZWFkYmFjay4KLSAgICAgICAgLy8gSW52ZXN0aWdhdGUgd2h5IHRoaXMg
aXMgbmVlZGVkIGFuZCByZW1vdmUgaWYgcG9zc2libGUuCi0gICAgICAgIGNhbnZhcygpLT5idWZm
ZXIoKS0+Y2xlYXJJbWFnZSgpOwotICAgICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7
Ci0gICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXModGhpcyk7
Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmVnaW5QYWludCgpCi17
Ci0gICAgaWYgKG1fbWFya2VkQ2FudmFzRGlydHkpCi0gICAgICAgIG1fY29udGV4dC0+YmVnaW5Q
YWludCh0aGlzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuZFBhaW50KCkK
LXsKLSAgICBpZiAobV9tYXJrZWRDYW52YXNEaXJ0eSkgewotICAgICAgICBtX21hcmtlZENhbnZh
c0RpcnR5ID0gZmFsc2U7Ci0gICAgICAgIG1fY29udGV4dC0+ZW5kUGFpbnQoKTsKLSAgICB9Cisg
ICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5KQorICAgICAgICByZXR1cm47CisgICAgY2FudmFz
KCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKKyAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7
CisgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyh0aGlzKTsKIH0K
IAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQpAQCAtMTkxLDcgKzE3NSw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNo
YXBlKGludCAKICNlbmRpZgogICAgICAgICBtX25lZWRzVXBkYXRlID0gZmFsc2U7CiAgICAgfQot
ICAgIAorCisgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGlydHks
IHNpbmNlIHRoZSBuZXdseSBjcmVhdGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQgb2Zm
CisgICAgLy8gY2xlYXIgKGFuZCB0aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8pLgog
ICAgIG1fY29udGV4dC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKIH0KIApAQCAtMjE5Nyw3ICsy
MTgzLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodQogICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICB0ZXhJbWFnZTJESW1wbCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmJ1ZmZlcigp
LT5pbWFnZSgpLAorICAgIAorICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwKICAgICAgICAg
ICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsK
IH0KIApAQCAtMjM0Nyw3ICsyMzM0LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eFN1YkltYWdlMgogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICB0
ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQs
IHR5cGUsIGNhbnZhcy0+YnVmZmVyKCktPmltYWdlKCksCisgICAgCisgICAgdGV4U3ViSW1hZ2Uy
REltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBjYW52
YXMtPmNvcGllZEltYWdlKCksCiAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gNjU0NDUpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzksMTIgKzI3OSwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKIAotICAgIC8vIEhlbHBlcnMgZm9yIG5vdGlmaWNhdGlv
biBhYm91dCBwYWludCBldmVudHMuCi0gICAgdm9pZCBiZWdpblBhaW50KCk7Ci0gICAgdm9pZCBl
bmRQYWludCgpOwotCiAgICAgdm9pZCByZW1vdmVPYmplY3QoV2ViR0xPYmplY3QqKTsKIAorICAg
IGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC0+
cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpOyB9CisKICAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgV2ViR0xPYmplY3Q7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJh
dGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2Vu
ZXJhdGVkSW1hZ2UuY3BwCShyZXZpc2lvbiA2NTQ0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MywxMSArNjMsOCBA
QCB2b2lkIEdlbmVyYXRlZEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljCiAgICAgR3JhcGhpY3ND
b250ZXh0KiBncmFwaGljc0NvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwogICAgIGdy
YXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWRqdXN0ZWRT
aXplKSwgKm1fZ2VuZXJhdG9yLmdldCgpKTsKIAotICAgIC8vIEdyYWIgdGhlIGZpbmFsIGltYWdl
IGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICBJbWFnZSogYml0bWFwID0gaW1hZ2VCdWZmZXIt
PmltYWdlKCk7Ci0KLSAgICAvLyBOb3cganVzdCBjYWxsIGRyYXdUaWxlZCBvbiB0aGF0IGltYWdl
LgotICAgIGJpdG1hcC0+ZHJhd1BhdHRlcm4oY29udGV4dCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCwgZGVzdFJl
Y3QpOworICAgIC8vIFRpbGUgdGhlIGltYWdlIGJ1ZmZlciBpbnRvIHRoZSBjb250ZXh0LgorICAg
IGltYWdlQnVmZmVyLT5kcmF3UGF0dGVybihjb250ZXh0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBkZXN0UmVj
dCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmgJKHJldmlzaW9uIDY1NDQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MTgsMTEgKzcxOCwxMSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpOwogCi0gICAgLy8gSGVscGVycyBmb3Igbm90aWZp
Y2F0aW9uIGFib3V0IHBhaW50IGV2ZW50cwotICAgIHZvaWQgYmVnaW5QYWludChDYW52YXNSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKLSAgICB2b2lkIGVuZFBhaW50KCk7CiAjaWYgUExBVEZP
Uk0oUVQpCiAgICAgdm9pZCBwYWludChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVJlY3QmIHJl
Y3QpIGNvbnN0OworICAgIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KKyNlbHNlCisgICAgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiAgICAgLy8gU3VwcG9ydCBmb3IgYnVmZmVy
IGNyZWF0aW9uIGFuZCBkZWxldGlvbgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gNjU0NDUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR2VuZXJhdG9yLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTQ0Miw2ICs0NDMsNTcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYQogICAgICAgICByZXN0b3JlKCk7CiB9CiAK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIGltYWdl
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIHAsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wKQoreworICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgc3R5bGVDb2xvclNw
YWNlLCBwLCBJbnRSZWN0KDAsIDAsIC0xLCAtMSksIG9wKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiByLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9v
bCB1c2VMb3dRdWFsaXR5U2NhbGUpCit7CisgICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBzdHls
ZUNvbG9yU3BhY2UsIHIsIEludFJlY3QoMCwgMCwgLTEsIC0xKSwgb3AsIHVzZUxvd1F1YWxpdHlT
Y2FsZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXIqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQm
IGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQorewor
ICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBJbnRSZWN0KGRlc3Qs
IHNyY1JlY3Quc2l6ZSgpKSwgc3JjUmVjdCwgb3ApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKK3sKKyAgICBkcmF3
SW1hZ2VCdWZmZXIoaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwgRmxvYXRSZWN0KGRlc3QpLCBzcmNS
ZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgZmxvYXQgdHN3ID0gc3JjLndpZHRoKCk7CisgICAgZmxvYXQgdHNoID0gc3JjLmhlaWdodCgp
OworICAgIGZsb2F0IHR3ID0gZGVzdC53aWR0aCgpOworICAgIGZsb2F0IHRoID0gZGVzdC5oZWln
aHQoKTsKKworICAgIGlmICh0c3cgPT0gLTEpCisgICAgICAgIHRzdyA9IGltYWdlLT53aWR0aCgp
OworICAgIGlmICh0c2ggPT0gLTEpCisgICAgICAgIHRzaCA9IGltYWdlLT5oZWlnaHQoKTsKKwor
ICAgIGlmICh0dyA9PSAtMSkKKyAgICAgICAgdHcgPSBpbWFnZS0+d2lkdGgoKTsKKyAgICBpZiAo
dGggPT0gLTEpCisgICAgICAgIHRoID0gaW1hZ2UtPmhlaWdodCgpOworCisgICAgaWYgKHVzZUxv
d1F1YWxpdHlTY2FsZSkgeworICAgICAgICBzYXZlKCk7CisgICAgICAgIHNldEltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbk5vbmUpOworICAgIH0KKworICAgIGltYWdlLT5k
cmF3KHRoaXMsIHN0eWxlQ29sb3JTcGFjZSwgZGVzdCwgc3JjLCBvcCwgdXNlTG93UXVhbGl0eVNj
YWxlKTsKKyAgICAKKyAgICBpZiAodXNlTG93UXVhbGl0eVNjYWxlKQorICAgICAgICByZXN0b3Jl
KCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRSb3VuZGVkUmVjdENsaXAoY29uc3Qg
SW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9w
UmlnaHQsCiAgICAgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90
dG9tUmlnaHQpCiB7CkBAIC00NjAsNiArNTEyLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwT3V0Um91bmRlZFJlY3QKICAgICBjbGlwT3V0KFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5n
bGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CiB9
CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciog
YnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGJ1ZmZlci0+Y2xpcCh0aGlzLCByZWN0KTsKK30K
KwogaW50IEdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdNb2RlKCkKIHsKICAgICByZXR1cm4g
bV9jb21tb24tPnN0YXRlLnRleHREcmF3aW5nTW9kZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gNjU0NDUpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzgsNiArMjM4LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUgPSBJbWFnZTo6U3RyZXRjaFRpbGUsIEltYWdl
OjpUaWxlUnVsZSB2UnVsZSA9IEltYWdlOjpTdHJldGNoVGlsZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wg
dXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOwogCisgICAgICAgIHZvaWQgZHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFBv
aW50JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICAgICAg
dm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgY29uc3QgSW50UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNl
T3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZHJh
d0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0
ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgICAgIHZvaWQgZHJhd0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IElu
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRv
ciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2Up
OworICAgICAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29s
IHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKKwogICAgICAgICB2b2lkIHNldEltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOwogICAgICAgICBJbnRlcnBv
bGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3Q7CiAKQEAgLTI0
OCw4ICsyNTUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY2xpcE91dEVs
bGlwc2VJblJlY3QoY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2b2lkIGNsaXBPdXRSb3VuZGVk
UmVjdChjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6
ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJv
dHRvbVJpZ2h0KTsKICAgICAgICAgdm9pZCBjbGlwUGF0aChXaW5kUnVsZSk7Ci0gICAgICAgIHZv
aWQgY2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VCdWZmZXIq
KTsKICAgICAgICAgdm9pZCBjbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25z
dCBGbG9hdFBvaW50KiwgYm9vbCBhbnRpYWxpYXMgPSB0cnVlKTsKKyAgICAgICAgdm9pZCBjbGlw
VG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYpOwogCiAgICAgICAg
IGludCB0ZXh0RHJhd2luZ01vZGUoKTsKICAgICAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUo
aW50KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHJldmlzaW9uIDY1NDQ1KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTAsNiArMTUwLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlPiBsb2Fk
UGxhdGZvcm1UaGVtZUljb24oY29uc3QgY2hhciogbmFtZSwgaW50IHNpemUpOwogI2VuZGlmCiAK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QpOworCiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2UoSW1hZ2VPYnNlcnZlciog
PSAwKTsKIApAQCAtMTY3LDkgKzE3MCw2IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wg
bWF5RmlsbFdpdGhTb2xpZENvbG9yKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIENv
bG9yIHNvbGlkQ29sb3IoKSBjb25zdCB7IHJldHVybiBDb2xvcigpOyB9CiAgICAgCi0gICAgdmly
dHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0KTsKLQogcHJpdmF0ZToKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7IC8v
IFRoZSBlbmNvZGVkIHJhdyBkYXRhIGZvciB0aGUgaW1hZ2UuIAogICAgIEltYWdlT2JzZXJ2ZXIq
IG1faW1hZ2VPYnNlcnZlcjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmgJKHJldmlzaW9uIDY1NDQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIEltYWdl
QnVmZmVyX2gKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1
ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgpAQCAtNzEsMTYgKzcyLDEzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgfkltYWdlQnVmZmVyKCk7CiAKICAgICAgICAgY29uc3QgSW50U2l6ZSYg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgICAgICBpbnQgd2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQorICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplLmhlaWdodCgpOyB9CisgICAgICAgIAogICAgICAgICBHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQoKSBjb25zdDsKIAotICAgICAgICBJbWFnZSogaW1hZ2UoKSBjb25zdDsK
LSNpZiBQTEFURk9STShRVCkKLSAgICAgICAgSW1hZ2UqIGltYWdlRm9yUmVuZGVyaW5nKCkgY29u
c3Q7Ci0jZWxzZQotICAgICAgICBJbWFnZSogaW1hZ2VGb3JSZW5kZXJpbmcoKSBjb25zdCB7IHJl
dHVybiBpbWFnZSgpOyB9Ci0jZW5kaWYKLQotICAgICAgICB2b2lkIGNsZWFySW1hZ2UoKSB7IG1f
aW1hZ2UuY2xlYXIoKTsgfQorICAgICAgICBib29sIGRyYXdzVXNpbmdDb3B5KCkgY29uc3Q7IC8v
IElmIHRoZSBpbWFnZSBidWZmZXIgaGFzIHRvIHJlbmRlciB1c2luZyBhIGNvcGllZCBpbWFnZSwg
aXQgd2lsbCByZXR1cm4gdHJ1ZS4KKyAgICAgICAgUGFzc1JlZlB0cjxJbWFnZT4gY29weUltYWdl
KCkgY29uc3Q7IC8vIFJldHVybiBhIG5ldyBpbWFnZSB0aGF0IGlzIGEgY29weSBvZiB0aGUgYnVm
ZmVyLgogCiAgICAgICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgICAgICBQYXNzUmVmUHRyPEltYWdlRGF0
YT4gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CkBAIC05
NiwxMiArOTQsMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2Vsc2UKICAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0o
MSwgMCwgMCwgLTEsIDAsIG1fc2l6ZS5oZWlnaHQoKSk7IH0KICNlbmRpZgorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgdm9pZCBjbGlwKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYp
IGNvbnN0OworCisgICAgICAgIC8vIFRoZSBkcmF3IG1ldGhvZCBkcmF3cyB0aGUgY29udGVudHMg
b2YgdGhlIGJ1ZmZlciB3aXRob3V0IGNvcHlpbmcgaXQuCisgICAgICAgIHZvaWQgZHJhdyhHcmFw
aGljc0NvbnRleHQqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0x
LCAtMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yID0g
Q29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7Cisg
ICAgICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCk7CisgICAgICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisgICAgICAgIGZy
aWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIEltYWdl
QnVmZmVyRGF0YSBtX2RhdGE7CiAKICAgICAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgICAgIE93
blB0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8
SW1hZ2U+IG1faW1hZ2U7CiAKICNpZiAhUExBVEZPUk0oQ0cpCiAgICAgICAgIFZlY3RvcjxpbnQ+
IG1fbGluZWFyUmdiTFVUOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3Bw
CShyZXZpc2lvbiA2NTQ0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1QYXR0ZXJuOjpQYXR0ZXJuKEltYWdlKiBpbWFnZSwgYm9vbCByZXBlYXRYLCBib29sIHJl
cGVhdFkpCitQYXR0ZXJuOjpQYXR0ZXJuKFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlLCBib29sIHJl
cGVhdFgsIGJvb2wgcmVwZWF0WSkKICAgICA6IG1fdGlsZUltYWdlKGltYWdlKQogICAgICwgbV9y
ZXBlYXRYKHJlcGVhdFgpCiAgICAgLCBtX3JlcGVhdFkocmVwZWF0WSkKQEAgLTM5LDcgKzM5LDcg
QEAgUGF0dGVybjo6UGF0dGVybihJbWFnZSogaW1hZ2UsIGJvb2wgcmVwZQogICAgICwgbV9wYXR0
ZXJuKDApCiAjZW5kaWYKIHsKLSAgICBBU1NFUlQoaW1hZ2UpOworICAgIEFTU0VSVChtX3RpbGVJ
bWFnZSk7CiB9CiAKIFBhdHRlcm46On5QYXR0ZXJuKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0dGVybi5oCShyZXZpc2lvbiA2NTQ0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIFBh
dHRlcm5faAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiSW1hZ2Uu
aCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KQEAgLTY0LDExICs2NSwxMCBAQCB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtUGF0dGVyblB0
cjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwotY2xhc3Mg
SW1hZ2U7CiAKIGNsYXNzIFBhdHRlcm4gOiBwdWJsaWMgUmVmQ291bnRlZDxQYXR0ZXJuPiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGF0dGVybj4gY3JlYXRlKEltYWdlKiB0aWxl
SW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFBhdHRlcm4+IGNyZWF0ZShQYXNzUmVmUHRyPEltYWdlPiB0aWxlSW1hZ2UsIGJvb2wgcmVwZWF0
WCwgYm9vbCByZXBlYXRZKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYXR0
ZXJuKHRpbGVJbWFnZSwgcmVwZWF0WCwgcmVwZWF0WSkpOwogICAgIH0KQEAgLTkxLDcgKzkxLDcg
QEAgcHVibGljOgogICAgIGJvb2wgcmVwZWF0WSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwZWF0WTsg
fQogCiBwcml2YXRlOgotICAgIFBhdHRlcm4oSW1hZ2UqLCBib29sIHJlcGVhdFgsIGJvb2wgcmVw
ZWF0WSk7CisgICAgUGF0dGVybihQYXNzUmVmUHRyPEltYWdlPiwgYm9vbCByZXBlYXRYLCBib29s
IHJlcGVhdFkpOwogCiAgICAgUmVmUHRyPEltYWdlPiBtX3RpbGVJbWFnZTsKICAgICBib29sIG1f
cmVwZWF0WDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiA2NTQ0NSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MDgsMTQgKzkwOCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJ
bm5lclJvdW5kZWRSZWMKICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBzYXZlZEZpbGxSdWxl
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQotewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhGbG9h
dFNpemUgY29uc3QmIHNpemUsIGZsb2F0LCBDb2xvciBjb25zdCYsIENvbG9yU3BhY2UpCiB7CiAg
ICAgLy8gQ2Fpcm8gZG9lc24ndCBzdXBwb3J0IHNoYWRvd3MgbmF0aXZlbHksIHRoZXkgYXJlIGRy
YXduIG1hbnVhbGx5IGluIHRoZSBkcmF3KgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA2NTQ0NSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk3LDI2ICs5NywzNCBAQCBHcmFwaGljc0NvbnRleHQqIEltYWdl
QnVmZmVyOjpjb250ZXh0KCkgCiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KIAotSW1h
Z2UqIEltYWdlQnVmZmVyOjppbWFnZSgpIGNvbnN0Citib29sIEltYWdlQnVmZmVyOjpkcmF3c1Vz
aW5nQ29weSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ltYWdlKSB7Ci0gICAgICAgIC8vIEl0J3Mg
YXNzdW1lZCB0aGF0IGlmIGltYWdlKCkgaXMgY2FsbGVkLCB0aGUgYWN0dWFsIHJlbmRlcmluZyB0
byB0aGUKLSAgICAgICAgLy8gR3JhcGhpY3NDb250ZXh0IG11c3QgYmUgZG9uZS4KLSAgICAgICAg
QVNTRVJUKGNvbnRleHQoKSk7Ci0KLSAgICAgICAgLy8gVGhpcyBjcmVhdGVzIGEgQ09QWSBvZiB0
aGUgaW1hZ2UgYW5kIHdpbGwgY2FjaGUgdGhhdCBjb3B5LiBUaGlzIG1lYW5zCi0gICAgICAgIC8v
IHRoYXQgaWYgc3Vic2VxdWVudCBvcGVyYXRpb25zIHRha2UgcGxhY2Ugb24gdGhlIGNvbnRleHQs
IG5laXRoZXIgdGhlCi0gICAgICAgIC8vIGN1cnJlbnRseS1yZXR1cm5lZCBpbWFnZSwgbm9yIHRo
ZSByZXN1bHRzIG9mIGZ1dHVyZSBpbWFnZSgpIGNhbGxzLAotICAgICAgICAvLyB3aWxsIGNvbnRh
aW4gdGhhdCBvcGVyYXRpb24uCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoaXMgc2VlbXMgc2ls
bHksIGJ1dCBpcyB0aGUgd2F5IHRoZSBDRyBwb3J0IHdvcmtzOiBpbWFnZSgpIGlzCi0gICAgICAg
IC8vIGludGVuZGVkIHRvIGJlIHVzZWQgb25seSB3aGVuIHJlbmRlcmluZyBpcyAiY29tcGxldGUu
IgotICAgICAgICBjYWlyb19zdXJmYWNlX3QqIG5ld3N1cmZhY2UgPSBjb3B5U3VyZmFjZShtX2Rh
dGEubV9zdXJmYWNlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgICAgICAvLyBCaXRtYXBJ
bWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCi0g
ICAgICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKG5ld3N1cmZhY2UpOwotICAgIH0K
LSAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVy
Ojpjb3B5SW1hZ2UoKSBjb25zdAoreworICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0
aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1cm4gQml0bWFwSW1h
Z2U6OmNyZWF0ZShjb3B5U3VyZmFjZShtX2RhdGEubV9zdXJmYWNlKSk7Cit9CisKK3ZvaWQgSW1h
Z2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6
OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAor
ICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCAsIGJvb2wgdXNlTG93
UXVhbGl0eVNjYWxlKQoreworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdl
KCk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlQ29weS5nZXQoKSwgc3R5bGVDb2xvclNw
YWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Cit9CisKK3Zv
aWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQoreworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5
ID0gY29weUltYWdlKCk7CisgICAgaW1hZ2VDb3B5LT5kcmF3UGF0dGVybihjb250ZXh0LCBzcmNS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJl
Y3QpOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2Uo
Y29uc3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHJldmlzaW9uIDY1NDQ1
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc1MywxOCArNzUzLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmFkZElubmVyUm91bmRlZFJlYwogICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQotewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNU
TShwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdC54KCksIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSk7
Ci0gICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIDEsIC0xKTsKLSAgICBD
R0NvbnRleHRDbGlwVG9NYXNrKHBsYXRmb3JtQ29udGV4dCgpLCBGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCByZWN0LnNpemUoKSksIGltYWdlQnVmZmVyLT5pbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCkp
OwotICAgIENHQ29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCAxLCAtMSk7Ci0gICAg
Q0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCAtcmVjdC54KCksIC1yZWN0
LnkoKSAtIHJlY3QuaGVpZ2h0KCkpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDRy5jcHAJKHJldmlzaW9uIDY1NDQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsMTEgQEAgdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgdm9pZCBy
ZWxlYXNlSW1hZ2VEYXRhKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpCit7CisgICAg
ZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOworfQorCiBJbWFnZUJ1ZmZlckRhdGE6
OkltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJikKICAgICA6IG1fZGF0YSgwKQogewpAQCAt
NTYsNDIgKzYxLDQ2IEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiAK
ICAgICAsIG1fc2l6ZShzaXplKQogewogICAgIHN1Y2Nlc3MgPSBmYWxzZTsgIC8vIE1ha2UgZWFy
bHkgcmV0dXJuIG1lYW4gZmFpbHVyZS4KLSAgICB1bnNpZ25lZCBieXRlc1BlclJvdzsKICAgICBp
ZiAoc2l6ZS53aWR0aCgpIDwgMCB8fCBzaXplLmhlaWdodCgpIDwgMCkKICAgICAgICAgcmV0dXJu
OwotICAgIGJ5dGVzUGVyUm93ID0gc2l6ZS53aWR0aCgpOworCisgICAgdW5zaWduZWQgYnl0ZXNQ
ZXJSb3cgPSBzaXplLndpZHRoKCk7CiAgICAgaWYgKGltYWdlQ29sb3JTcGFjZSAhPSBHcmF5U2Nh
bGUpIHsKICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IG92ZXJmbG93CiAgICAgICAgIGlmIChi
eXRlc1BlclJvdyA+IDB4M0ZGRkZGRkYpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJ5
dGVzUGVyUm93ICo9IDQ7CiAgICAgfQorICAgIG1fZGF0YS5tX2J5dGVzUGVyUm93ID0gYnl0ZXNQ
ZXJSb3c7CiAKKyAgICBzaXplX3QgZGF0YVNpemUgPSBzaXplLmhlaWdodCgpICogYnl0ZXNQZXJS
b3c7CiAgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKHNpemUuaGVpZ2h0KCksIGJ5dGVzUGVyUm93KS5n
ZXRWYWx1ZShtX2RhdGEubV9kYXRhKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKChy
ZWludGVycHJldF9jYXN0PHNpemVfdD4obV9kYXRhLm1fZGF0YSkgJiAyKSA9PSAwKTsKIAotICAg
IFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2U7CiAgICAgc3dpdGNoKGltYWdl
Q29sb3JTcGFjZSkgewogICAgICAgICBjYXNlIERldmljZVJHQjoKLSAgICAgICAgICAgIGNvbG9y
U3BhY2UuYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CisgICAgICAgICAg
ICBtX2RhdGEubV9jb2xvclNwYWNlLmFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdC
KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR3JheVNjYWxlOgotICAgICAg
ICAgICAgY29sb3JTcGFjZS5hZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmljZUdyYXkoKSk7
CisgICAgICAgICAgICBtX2RhdGEubV9jb2xvclNwYWNlLmFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3Jl
YXRlRGV2aWNlR3JheSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogI2lmICgoUExBVEZPUk0oTUFD
KSB8fCBQTEFURk9STShDSFJPTUlVTSkpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSkK
ICAgICAgICAgY2FzZSBMaW5lYXJSR0I6Ci0gICAgICAgICAgICBjb2xvclNwYWNlLmFkb3B0Q0Yo
Q0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZUdlbmVyaWNSR0JMaW5lYXIp
KTsKKyAgICAgICAgICAgIG1fZGF0YS5tX2NvbG9yU3BhY2UuYWRvcHRDRihDR0NvbG9yU3BhY2VD
cmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlR2VuZXJpY1JHQkxpbmVhcikpOwogICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKICNlbmRpZgogICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgY29sb3JTcGFjZS5hZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsK
KyAgICAgICAgICAgIG1fZGF0YS5tX2NvbG9yU3BhY2UuYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVh
dGVEZXZpY2VSR0IoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBtX2RhdGEu
bV9ncmF5U2NhbGUgPSBpbWFnZUNvbG9yU3BhY2UgPT0gR3JheVNjYWxlOworICAgIG1fZGF0YS5t
X2JpdG1hcEluZm8gPSBtX2RhdGEubV9ncmF5U2NhbGUgPyBrQ0dJbWFnZUFscGhhTm9uZSA6IGtD
R0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVm
PiBjZ0NvbnRleHQoQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fZGF0YS5tX2RhdGEs
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJSb3csCi0gICAgICAgIGNv
bG9yU3BhY2UuZ2V0KCksIChpbWFnZUNvbG9yU3BhY2UgPT0gR3JheVNjYWxlKSA/IGtDR0ltYWdl
QWxwaGFOb25lIDoga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2RhdGEubV9jb2xvclNwYWNlLmdldCgpLCBtX2RhdGEubV9iaXRtYXBJbmZvKSk7CiAgICAg
aWYgKCFjZ0NvbnRleHQpCiAgICAgICAgIHJldHVybjsKIApAQCAtOTksMTEgKzEwOCwxMyBAQCBJ
bWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgCiAgICAgbV9jb250ZXh0LT5z
Y2FsZShGbG9hdFNpemUoMSwgLTEpKTsKICAgICBtX2NvbnRleHQtPnRyYW5zbGF0ZSgwLCAtc2l6
ZS5oZWlnaHQoKSk7CiAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgCisgICAgLy8gQ3JlYXRlIGEg
bGl2ZSBpbWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRhLgorICAgIG1fZGF0YS5tX2RhdGFQcm92aWRl
ci5hZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLm1fZGF0YSwg
ZGF0YVNpemUsIHJlbGVhc2VJbWFnZURhdGEpKTsKIH0KIAogSW1hZ2VCdWZmZXI6On5JbWFnZUJ1
ZmZlcigpCiB7Ci0gICAgZmFzdEZyZWUobV9kYXRhLm1fZGF0YSk7CiB9CiAKIEdyYXBoaWNzQ29u
dGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdApAQCAtMTExLDE3ICsxMjIsNTkgQEAg
R3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIAogICAgIHJldHVybiBtX2Nv
bnRleHQuZ2V0KCk7CiB9CiAKLUltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAorYm9v
bCBJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2luZ0NvcHkoKSBjb25zdAoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSgpIGNvbnN0
Cit7CisgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gQ0dJbWFn
ZSBvbiBkZXN0cnVjdGlvbgorICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKENHQml0bWFw
Q29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpKTsKK30KKwor
c3RhdGljIENHSW1hZ2VSZWYgY2dJbWFnZShjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJbWFn
ZUJ1ZmZlckRhdGEmIGRhdGEpCiB7Ci0gICAgaWYgKCFtX2ltYWdlKSB7Ci0gICAgICAgIC8vIEl0
J3MgYXNzdW1lZCB0aGF0IGlmIGltYWdlKCkgaXMgY2FsbGVkLCB0aGUgYWN0dWFsIHJlbmRlcmlu
ZyB0byB0aGUKLSAgICAgICAgLy8gR3JhcGhpY3NDb250ZXh0IG11c3QgYmUgZG9uZS4KLSAgICAg
ICAgQVNTRVJUKGNvbnRleHQoKSk7Ci0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IENHQml0
bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAg
ICAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBDR0ltYWdlIG9u
IGRlc3RydWN0aW9uCi0gICAgICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1h
Z2UpOworICAgIHJldHVybiBDR0ltYWdlQ3JlYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSwgOCwgZGF0YS5tX2dyYXlTY2FsZSA/IDggOiAzMiwgZGF0YS5tX2J5dGVzUGVyUm93LAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGEubV9jb2xvclNwYWNlLmdldCgpLCBkYXRhLm1fYml0
bWFwSW5mbywgZGF0YS5tX2RhdGFQcm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5n
SW50ZW50RGVmYXVsdCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250
ZXh0KiBkZXN0Q29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQor
eworICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsKKyAgICAgICAgLy8gV2UncmUg
ZHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLiAgSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yaywg
d2UgbmVlZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVmZmVyIGZpcnN0LgorICAgICAgICBSZWZQdHI8
SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoKTsKKyAgICAgICAgZGVzdENvbnRleHQtPmRyYXdJbWFn
ZShjb3B5LmdldCgpLCBEZXZpY2VDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVz
ZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBp
bWFnZUZvclJlbmRlcmluZyA9IEJpdG1hcEltYWdlOjpjcmVhdGUoY2dJbWFnZShtX3NpemUsIG1f
ZGF0YSkpOworICAgICAgICBkZXN0Q29udGV4dC0+ZHJhd0ltYWdlKGltYWdlRm9yUmVuZGVyaW5n
LmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVh
bGl0eVNjYWxlKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCogZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
K3sKKyAgICBpZiAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSB7CisgICAgICAgIC8vIFdlJ3Jl
IGRyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlci4gIEluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmss
IHdlIG5lZWQgdG8gY29weSB0aGUgc291cmNlIGJ1ZmZlciBmaXJzdC4KKyAgICAgICAgUmVmUHRy
PEltYWdlPiBjb3B5ID0gY29weUltYWdlKCk7CisgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRl
c3RDb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNw
YWNlLCBvcCwgZGVzdFJlY3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIFJlZlB0cjxJbWFnZT4g
aW1hZ2VGb3JSZW5kZXJpbmcgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UobV9zaXplLCBt
X2RhdGEpKTsKKyAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RDb250
ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBv
cCwgZGVzdFJlY3QpOwogICAgIH0KLSAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKK30KKwordm9p
ZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UoQWRv
cHRDRiwgY2dJbWFnZShtX3NpemUsIG1fZGF0YSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCA9IGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpOworICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRl
eHQsIHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOworICAgIENHQ29udGV4dFNj
YWxlQ1RNKHBsYXRmb3JtQ29udGV4dCwgMSwgLTEpOworICAgIENHQ29udGV4dENsaXBUb01hc2so
cGxhdGZvcm1Db250ZXh0LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCByZWN0LnNpemUoKSksIGlt
YWdlLmdldCgpKTsKKyAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQsIDEsIC0x
KTsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZvcm1Db250ZXh0LCAtcmVjdC54KCks
IC1yZWN0LnkoKSAtIHJlY3QuaGVpZ2h0KCkpOwogfQogCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVs
dGlwbGllZD4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckRhdGEuaAkocmV2aXNpb24gNjU0NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiwxNCBAQAog
I2lmbmRlZiBJbWFnZUJ1ZmZlckRhdGFfaAogI2RlZmluZSBJbWFnZUJ1ZmZlckRhdGFfaAogCisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNs
dWRlICJJbWFnZS5oIgorCit0eXBlZGVmIHN0cnVjdCBDR0NvbG9yU3BhY2UgKkNHQ29sb3JTcGFj
ZVJlZjsKK3R5cGVkZWYgc3RydWN0IENHRGF0YVByb3ZpZGVyICpDR0RhdGFQcm92aWRlclJlZjsK
K3R5cGVkZWYgdWludDMyX3QgQ0dCaXRtYXBJbmZvOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEludFNpemU7CkBAIC0zNSw2ICs0MywxMiBAQCBwdWJsaWM6CiAgICAgSW1hZ2VCdWZm
ZXJEYXRhKGNvbnN0IEludFNpemUmKTsKIAogICAgIHZvaWQqIG1fZGF0YTsKKyAgICAKKyAgICBS
ZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IG1fZGF0YVByb3ZpZGVyOworICAgIENHQml0bWFw
SW5mbyBtX2JpdG1hcEluZm87CisgICAgYm9vbCBtX2dyYXlTY2FsZTsKKyAgICB1bnNpZ25lZCBt
X2J5dGVzUGVyUm93OworICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IG1fY29sb3JTcGFj
ZTsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCShyZXZpc2lvbiA2
NTQ0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgRkVDb2xvck1hdHJp
eDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIKICAgICBpZiAoIWZpbHRlckNvbnRleHQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFn
ZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2lu
LT5zY2FsZWRTdWJSZWdpb24oKSkpOworICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZl
cihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5n
UmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3Qo
SW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKICAgICBQYXNzUmVmUHRyPEltYWdl
RGF0YT4gaW1hZ2VEYXRhKHJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShp
bWFnZVJlY3QpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvc2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmNwcAkocmV2aXNpb24gNjU0NDUpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEs
MjYgKzEzMSwyNiBAQCB2b2lkIEZFQ29tcG9zaXRlOjphcHBseShGaWx0ZXIqIGZpbHRlcikKICAg
ICBGbG9hdFJlY3Qgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLmYsIDAuZiwgLTEuZiwgLTEuZik7CiAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6
Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luMi0+cmVzdWx0SW1hZ2UoKS0+
aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNj
YWxlZFN1YlJlZ2lvbigpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2lu
LT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3
aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0
LT5kcmF3SW1hZ2VCdWZmZXIobV9pbjItPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2Us
IGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSkpOworICAgICAg
ICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwgRGV2
aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9u
KCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoK
ICAgICAgICAgZmlsdGVyQ29udGV4dC0+c2F2ZSgpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5j
bGlwVG9JbWFnZUJ1ZmZlcihjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVn
aW9uKCkpLCBtX2luMi0+cmVzdWx0SW1hZ2UoKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRy
YXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBj
YWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOworICAgICAgICBm
aWx0ZXJDb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBjYWxj
dWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAgICAgICAgZmls
dGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCksIERldmljZUNv
bG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKSk7
CiAgICAgICAgIGZpbHRlckNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRy
YXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBj
YWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOwotICAgICAgICBm
aWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIERl
dmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdp
b24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0KTsKKyAgICAgICAgZmlsdGVy
Q29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9y
U3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKSk7Cisg
ICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luMi0+cmVzdWx0SW1hZ2Uo
KSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1
YlJlZ2lvbigpKSwgc3JjUmVjdCwgQ29tcG9zaXRlRGVzdGluYXRpb25PdXQpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIGZpbHRl
ckNvbnRleHQtPmRyYXdJbWFnZShtX2luMi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNl
Q29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigp
KSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgp
LT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5z
Y2FsZWRTdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZVNvdXJjZUF0b3ApOworICAgICAg
ICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbjItPnJlc3VsdEltYWdlKCksIERl
dmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdp
b24oKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVz
dWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+
c2NhbGVkU3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVTb3VyY2VBdG9wKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6Ci0gICAgICAgIGZp
bHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luMi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2
aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lv
bigpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFn
ZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2lu
LT5zY2FsZWRTdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZVhPUik7CisgICAgICAgIGZp
bHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luMi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNl
Q29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigp
KSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJ
bWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2Fs
ZWRTdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZVhPUik7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzogewogICAgICAgICBJbnRS
ZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnNj
YWxlZFN1YlJlZ2lvbigpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAkocmV2aXNpb24gNjU0NDUpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Myw5ICs2Myw5IEBAIHZvaWQgU291cmNlQWxwaGE6OmFwcGx5KEZpbHRlciogZmlsdGVyKQog
CiAgICAgc2V0SXNBbHBoYUltYWdlKHRydWUpOwogCi0gICAgRmxvYXRSZWN0IGltYWdlUmVjdChG
bG9hdFBvaW50KCksIGZpbHRlci0+c291cmNlSW1hZ2UoKS0+aW1hZ2UoKS0+c2l6ZSgpKTsKKyAg
ICBGbG9hdFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgZmlsdGVyLT5zb3VyY2VJbWFnZSgp
LT5zaXplKCkpOwogICAgIGZpbHRlckNvbnRleHQtPnNhdmUoKTsKLSAgICBmaWx0ZXJDb250ZXh0
LT5jbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZVJlY3QsIGZpbHRlci0+c291cmNlSW1hZ2UoKSk7Cisg
ICAgZmlsdGVyQ29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoZmlsdGVyLT5zb3VyY2VJbWFnZSgp
LCBpbWFnZVJlY3QpOwogICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KGltYWdlUmVjdCwgQ29s
b3I6OmJsYWNrLCBEZXZpY2VDb2xvclNwYWNlKTsKICAgICBmaWx0ZXJDb250ZXh0LT5yZXN0b3Jl
KCk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3Jh
cGhpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuY3BwCShyZXZpc2lvbiA2NTQ0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAs
NyArNjAsNyBAQCB2b2lkIFNvdXJjZUdyYXBoaWM6OmFwcGx5KEZpbHRlciogZmlsdGVyCiAgICAg
aWYgKCFmaWx0ZXJDb250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBmaWx0ZXJDb250ZXh0
LT5kcmF3SW1hZ2UoZmlsdGVyLT5zb3VyY2VJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNw
YWNlLCBJbnRQb2ludCgpKTsKKyAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoZmls
dGVyLT5zb3VyY2VJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBJbnRQb2ludCgpKTsKIH0KIAog
dm9pZCBTb3VyY2VHcmFwaGljOjpkdW1wKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCShyZXZpc2lvbiA2NTQ0
NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yODIsMTUgKzI4Miw2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmUKICAgICAgICAgICAgICAgICAgIGNhbnZhcy0+d2lkdGgo
KSwgY2FudmFzLT5oZWlnaHQoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250
ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiZWdpblBhaW50KENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCgpCi17Ci19Ci0KIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAogewogICAgIHJldHVybiBm
YWxzZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
M0RRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcAkocmV2aXNpb24gNjU0NDUpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MTIsMTUgKzUxMiw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmUK
ICAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpiZWdpblBhaW50KENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQpCi17Ci0gICAgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZW5kUGFpbnQoKQotewotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0KQogewogICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dFF0LmNwcAkocmV2aXNpb24gNjU0NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxMywyMyArMTIx
Myw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0RWxsaXBzZUluUmUKICAgICB9CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJl
Y3QmIGZsb2F0UmVjdCwgY29uc3QgSW1hZ2VCdWZmZXIqIGltYWdlKQotewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFFQaXhtYXAqIG5hdGl2ZUlt
YWdlID0gaW1hZ2UtPmltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAg
aWYgKCFuYXRpdmVJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCByZWN0KGZs
b2F0UmVjdCk7Ci0gICAgUVBpeG1hcCBhbHBoYU1hc2sgPSAqbmF0aXZlSW1hZ2U7Ci0gICAgaWYg
KGFscGhhTWFzay53aWR0aCgpICE9IHJlY3Qud2lkdGgoKSB8fCBhbHBoYU1hc2suaGVpZ2h0KCkg
IT0gcmVjdC5oZWlnaHQoKSkKLSAgICAgICAgYWxwaGFNYXNrID0gYWxwaGFNYXNrLnNjYWxlZChy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotCi0gICAgbV9kYXRhLT5sYXllcnMucHVzaChu
ZXcgVHJhbnNwYXJlbmN5TGF5ZXIobV9kYXRhLT5wKCksIG1fZGF0YS0+cCgpLT50cmFuc2Zvcm0o
KS5tYXBSZWN0KHJlY3QpLCAxLjAsIGFscGhhTWFzaykpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGhpY2tuZXNzKQog
ewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlckRhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyRGF0
YS5oCShyZXZpc2lvbiA2NTQ0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1h
Z2VCdWZmZXJEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDkgQEAKICNpZm5kZWYg
SW1hZ2VCdWZmZXJEYXRhX2gKICNkZWZpbmUgSW1hZ2VCdWZmZXJEYXRhX2gKIAorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJJbWFnZS5oIgorCiAjaW5jbHVkZSA8UVBhaW50ZXI+
CiAjaW5jbHVkZSA8UVBpeG1hcD4KIApAQCAtNDEsNiArNDQsNyBAQCBwdWJsaWM6CiAKICAgICBR
UGl4bWFwIG1fcGl4bWFwOwogICAgIE93blB0cjxRUGFpbnRlcj4gbV9wYWludGVyOworICAgIFJl
ZlB0cjxJbWFnZT4gbV9pbWFnZTsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHJl
dmlzaW9uIDY1NDQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZl
clF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkltYWdl
RGF0YS5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJTdGlsbElt
YWdlUXQuaCIKKyNpbmNsdWRlICJUcmFuc3BhcmVuY3lMYXllci5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogI2luY2x1ZGUgPFFCdWZmZXI+CkBAIC03NCw2ICs3NSw4IEBAIElt
YWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEkKICAgICBicnVzaC5zZXRDb2xv
cihRdDo6YmxhY2spOwogICAgIHBhaW50ZXItPnNldEJydXNoKGJydXNoKTsKICAgICBwYWludGVy
LT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VPdmVy
KTsKKyAgICAKKyAgICBtX2RhdGEubV9pbWFnZSA9IFN0aWxsSW1hZ2U6OmNyZWF0ZUZvclJlbmRl
cmluZygmbV9kYXRhLm1fcGl4bWFwKTsKIH0KIAogSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNv
bnN0IEludFNpemUmIHNpemUsIEltYWdlQ29sb3JTcGFjZSwgYm9vbCYgc3VjY2VzcykKQEAgLTk4
LDI0ICsxMDEsNTAgQEAgR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIAog
ICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9CiAKLUltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1h
Z2VGb3JSZW5kZXJpbmcoKSBjb25zdAorYm9vbCBJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2luZ0NvcHko
KSBjb25zdAogewotICAgIGlmICghbV9pbWFnZSkKLSAgICAgICAgbV9pbWFnZSA9IFN0aWxsSW1h
Z2U6OmNyZWF0ZUZvclJlbmRlcmluZygmbV9kYXRhLm1fcGl4bWFwKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CiAKLSAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKK1Bhc3NSZWZQdHI8SW1hZ2U+IElt
YWdlQnVmZmVyOjpjb3B5SW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBTdGlsbEltYWdlOjpj
cmVhdGUobV9kYXRhLm1fcGl4bWFwKTsKIH0KIAotSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZSgp
IGNvbnN0Cit2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogZGVzdENvbnRl
eHQsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsCisgICAgICAgICAgICAgICAgICAgICAgIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsKLSAgICBpZiAoIW1f
aW1hZ2UpIHsKLSAgICAgICAgLy8gSXQncyBhc3N1bWVkIHRoYXQgaWYgaW1hZ2UoKSBpcyBjYWxs
ZWQsIHRoZSBhY3R1YWwgcmVuZGVyaW5nIHRvIHRoZQotICAgICAgICAvLyBHcmFwaGljc0NvbnRl
eHQgbXVzdCBiZSBkb25lLgotICAgICAgICBBU1NFUlQoY29udGV4dCgpKTsKLSAgICAgICAgbV9p
bWFnZSA9IFN0aWxsSW1hZ2U6OmNyZWF0ZShtX2RhdGEubV9waXhtYXApOwotICAgIH0KKyAgICBp
ZiAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSB7CisgICAgICAgIC8vIFdlJ3JlIGRyYXdpbmcg
aW50byBvdXIgb3duIGJ1ZmZlci4gIEluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmssIHdlIG5lZWQg
dG8gY29weSB0aGUgc291cmNlIGJ1ZmZlciBmaXJzdC4KKyAgICAgICAgUmVmUHRyPEltYWdlPiBj
b3B5ID0gY29weUltYWdlKCk7CisgICAgICAgIGRlc3RDb250ZXh0LT5kcmF3SW1hZ2UoY29weS5n
ZXQoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFs
aXR5U2NhbGUpOworICAgIH0gZWxzZQorICAgICAgICBkZXN0Q29udGV4dC0+ZHJhd0ltYWdlKG1f
ZGF0YS5tX2ltYWdlLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBv
cCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0KQoreworICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsKKyAgICAgICAgLy8g
V2UncmUgZHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLiAgSW4gb3JkZXIgZm9yIHRoaXMgdG8g
d29yaywgd2UgbmVlZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVmZmVyIGZpcnN0LgorICAgICAgICBS
ZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoKTsKKyAgICAgICAgY29weS0+ZHJhd1BhdHRl
cm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNv
bG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fZGF0YS5tX2lt
YWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKK30KKwordm9pZCBJbWFnZUJ1
ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZmxv
YXRSZWN0KQoreworICAgIFFQaXhtYXAqIG5hdGl2ZUltYWdlID0gbV9kYXRhLm1faW1hZ2UtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFuYXRpdmVJbWFnZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgSW50UmVjdCByZWN0KGZsb2F0UmVjdCk7CisgICAgUVBpeG1hcCBh
bHBoYU1hc2sgPSAqbmF0aXZlSW1hZ2U7CisgICAgaWYgKGFscGhhTWFzay53aWR0aCgpICE9IHJl
Y3Qud2lkdGgoKSB8fCBhbHBoYU1hc2suaGVpZ2h0KCkgIT0gcmVjdC5oZWlnaHQoKSkKKyAgICAg
ICAgYWxwaGFNYXNrID0gYWxwaGFNYXNrLnNjYWxlZChyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpOwogCi0gICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CisgICAgbV9kYXRhLT5sYXllcnMucHVz
aChuZXcgVHJhbnNwYXJlbmN5TGF5ZXIobV9kYXRhLT5wKCksIG1fZGF0YS0+cCgpLT50cmFuc2Zv
cm0oKS5tYXBSZWN0KHJlY3QpLCAxLjAsIGFscGhhTWFzaykpOwogfQogCiB2b2lkIEltYWdlQnVm
ZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tV
cFRhYmxlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29u
dGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAkocmV2aXNpb24gNjU0NDUpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1NiwxNyArNDU2LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdp
bmRSdWxlIAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUGF0aEFudGlBbGlhc2VkKHBhdGgp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBPUyhMSU5VWCkgfHwgT1MoV0lORE9XUykKLSAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+YmVnaW5MYXllckNsaXBwZWRUb0ltYWdlKHJlY3QsIGltYWdl
QnVmZmVyKTsKLSNlbmRpZgotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VC
dWZmZXJTa2lhLmNwcAkocmV2aXNpb24gNjU0NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMjAgKzg3
LDM1IEBAIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSAKICAgICByZXR1
cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi1JbWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29u
c3QKK2Jvb2wgSW1hZ2VCdWZmZXI6OmRyYXdzVXNpbmdDb3B5KCkgY29uc3QKIHsKLSAgICBpZiAo
IW1faW1hZ2UpIHsKLSAgICAgICAgLy8gVGhpcyBjcmVhdGVzIGEgQ09QWSBvZiB0aGUgaW1hZ2Ug
YW5kIHdpbGwgY2FjaGUgdGhhdCBjb3B5LiBUaGlzIG1lYW5zCi0gICAgICAgIC8vIHRoYXQgaWYg
c3Vic2VxdWVudCBvcGVyYXRpb25zIHRha2UgcGxhY2Ugb24gdGhlIGNvbnRleHQsIG5laXRoZXIg
dGhlCi0gICAgICAgIC8vIGN1cnJlbnRseS1yZXR1cm5lZCBpbWFnZSwgbm9yIHRoZSByZXN1bHRz
IG9mIGZ1dHVyZSBpbWFnZSgpIGNhbGxzLAotICAgICAgICAvLyB3aWxsIGNvbnRhaW4gdGhhdCBv
cGVyYXRpb24uCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoaXMgc2VlbXMgc2lsbHksIGJ1dCBp
cyB0aGUgd2F5IHRoZSBDRyBwb3J0IHdvcmtzOiBpbWFnZSgpIGlzCi0gICAgICAgIC8vIGludGVu
ZGVkIHRvIGJlIHVzZWQgb25seSB3aGVuIHJlbmRlcmluZyBpcyAiY29tcGxldGUuIgotICAgICAg
ICBtX2ltYWdlID0gQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZSgKLSAgICAgICAg
ICAgICptX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuYml0bWFwKCkpOwotICAgIH0KLSAgICByZXR1
cm4gbV9pbWFnZS5nZXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxJbWFn
ZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJpdG1hcElt
YWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVhdGUoKm1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5iaXRt
YXAoKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Cit7CisjaWYgT1MoTElOVVgpIHx8IE9T
KFdJTkRPV1MpCisgICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmJlZ2luTGF5ZXJDbGlw
cGVkVG9JbWFnZShyZWN0LCB0aGlzKTsKKyNlbmRpZgorfQorCit2b2lkIEltYWdlQnVmZmVyOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVh
bGl0eVNjYWxlKQoreworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdlKCk7
CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlQ29weS5nZXQoKSwgc3R5bGVDb2xvclNwYWNl
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Cit9CisKK3ZvaWQg
SW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KQoreworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0g
Y29weUltYWdlKCk7CisgICAgaW1hZ2VDb3B5LT5kcmF3UGF0dGVybihjb250ZXh0LCBzcmNSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3Qp
OwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29u
c3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHJldmlzaW9uIDY1NDQ1KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3OCwxMSArMzc4LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNh
bnZhc0NsaXAoY29uc3QgUAogICAgIGNsaXAocGF0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZUJ1ZmZl
ciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogQWZmaW5lVHJhbnNmb3JtIEdyYXBo
aWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QKIHsgCiAjaWYgVVNFKFdYR0MpCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHJldmlzaW9u
IDY1NDQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODIsMTIgKzgyLDM2IEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6
dG9EYXRhVVJMKGNvbnN0IFN0cmkKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLUltYWdlKiBJ
bWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAorYm9vbCBJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2luZ0Nv
cHkoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitQYXNzUmVmUHRyPEltYWdlPiBJ
bWFnZUJ1ZmZlcjo6Y29weUltYWdlKCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
ICAgIHJldHVybiAwOwogfQogCit2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsCisgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKK3sKKyAgICBSZWZQdHI8SW1hZ2U+IGlt
YWdlQ29weSA9IGNvcHlJbWFnZSgpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZUNvcHku
Z2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFs
aXR5U2NhbGUpOworfQorCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICBSZWZQ
dHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcHlJbWFnZSgpOworICAgIGltYWdlQ29weS0+ZHJhd1Bh
dHRlcm4oY29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29s
b3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKK30KKwogdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1U
cmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+JikKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0J
KHJldmlzaW9uIDY1NDQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM5Niw3ICszOTYsNyBAQCBib29sIFNjcm9sbGJhclRo
ZW1lTWFjOjpwYWludChTY3JvbGxiYXIqCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgCiAgICAgICAgIEhJVGhlbWVEcmF3VHJhY2soJnRyYWNrSW5mbywgMCwgaW1hZ2VCdWZmZXIt
PmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCksIGtISVRoZW1lT3JpZW50YXRpb25Ob3JtYWwp
OwotICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2VCdWZmZXItPmltYWdlKCksIERldmlj
ZUNvbG9yU3BhY2UsIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7CisgICAgICAg
IGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5nZXQoKSwgRGV2aWNlQ29sb3JT
cGFjZSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5sb2NhdGlvbigpKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAJKHJldmlzaW9uIDY1NDQ1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzEsNyArNTMxLDcgQEAgdm9pZCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZQogICAgICAgICAKICAgICAgICAgLy8gVGhl
IG1hc2sgaGFzIGJlZW4gY3JlYXRlZC4gIE5vdyB3ZSBqdXN0IG5lZWQgdG8gY2xpcCB0byBpdC4K
ICAgICAgICAgY29udGV4dC0+c2F2ZSgpOwotICAgICAgICBjb250ZXh0LT5jbGlwVG9JbWFnZUJ1
ZmZlcihtYXNrUmVjdCwgbWFza0ltYWdlLmdldCgpKTsKKyAgICAgICAgY29udGV4dC0+Y2xpcFRv
SW1hZ2VCdWZmZXIobWFza0ltYWdlLmdldCgpLCBtYXNrUmVjdCk7CiAgICAgfQogICAgIAogICAg
IFN0eWxlSW1hZ2UqIGJnID0gYmdMYXllci0+aW1hZ2UoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkocmV2aXNpb24gNjU0NDUpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6
OmFwcGx5Q2xpcAogICAgIGlmICghY2xpcHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGNvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKHJlcGFpbnRS
ZWN0LCBjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJbWFnZS5nZXQoKSk7CisgICAgY29udGV4dC0+Y2xp
cFRvSW1hZ2VCdWZmZXIoY2xpcHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UuZ2V0KCksIHJlcGFpbnRS
ZWN0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAkocmV2aXNpb24gNjU0NDUpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3MCw3ICsyNzAsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlS
CiAjaWYgIVBMQVRGT1JNKENHKQogICAgICAgICAgICAgcmVzdWx0SW1hZ2UtPnRyYW5zZm9ybUNv
bG9yU3BhY2UoTGluZWFyUkdCLCBEZXZpY2VSR0IpOwogI2VuZGlmCi0gICAgICAgICAgICBjb250
ZXh0LT5kcmF3SW1hZ2UocmVzdWx0SW1hZ2UtPmltYWdlKCksIG9iamVjdC0+c3R5bGUoKS0+Y29s
b3JTcGFjZSgpLCBsYXN0RWZmZWN0LT5zdWJSZWdpb24oKSk7CisgICAgICAgICAgICBjb250ZXh0
LT5kcmF3SW1hZ2VCdWZmZXIocmVzdWx0SW1hZ2UsIG9iamVjdC0+c3R5bGUoKS0+Y29sb3JTcGFj
ZSgpLCBsYXN0RWZmZWN0LT5zdWJSZWdpb24oKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAkocmV2
aXNpb24gNjU0NDUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsMTQgKzI5NywxNSBAQCBQYXNzT3duUHRyPElt
YWdlQnVmZmVyPiBSZW5kZXJTVkdSZXNvdXJjCiAKIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuOjpidWlsZFBhdHRlcm4oUGF0dGVybkRhdGEqIHBhdHRlcm5EYXRhLCBQYXNzT3duUHRyPElt
YWdlQnVmZmVyPiB0aWxlSW1hZ2UpIGNvbnN0CiB7Ci0gICAgaWYgKCF0aWxlSW1hZ2UtPmltYWdl
KCkpIHsKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcGllZEltYWdlID0gdGlsZUltYWdlLT5jb3B5SW1h
Z2UoKTsKKyAgICBpZiAoIWNvcGllZEltYWdlKSB7CiAgICAgICAgIHBhdHRlcm5EYXRhLT5wYXR0
ZXJuID0gMDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIEludFJlY3QgdGlsZVJlY3Qg
PSB0aWxlSW1hZ2UtPmltYWdlKCktPnJlY3QoKTsKKyAgICAKKyAgICBJbnRSZWN0IHRpbGVSZWN0
ID0gY29waWVkSW1hZ2UtPnJlY3QoKTsKICAgICBpZiAodGlsZVJlY3Qud2lkdGgoKSA8PSBwYXR0
ZXJuRGF0YS0+Ym91bmRhcmllcy53aWR0aCgpICYmIHRpbGVSZWN0LmhlaWdodCgpIDw9IHBhdHRl
cm5EYXRhLT5ib3VuZGFyaWVzLmhlaWdodCgpKSB7Ci0gICAgICAgIHBhdHRlcm5EYXRhLT5wYXR0
ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZS0+aW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7Cisg
ICAgICAgIHBhdHRlcm5EYXRhLT5wYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKGNvcGllZEltYWdl
LCB0cnVlLCB0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzMwLDEzICszMzEs
MTMgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmJ1aWxkUGF0dAogICAgICAgICBu
ZXdUaWxlSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoMCwgcGF0dGVybkRhdGEtPmJvdW5kYXJpZXMu
aGVpZ2h0KCkpOwogICAgICAgICBmb3IgKGludCBqID0gbnVtWDsgaiA+IDA7IC0taikgewogICAg
ICAgICAgICAgbmV3VGlsZUltYWdlQ29udGV4dC0+dHJhbnNsYXRlKHBhdHRlcm5EYXRhLT5ib3Vu
ZGFyaWVzLndpZHRoKCksIDApOwotICAgICAgICAgICAgbmV3VGlsZUltYWdlQ29udGV4dC0+ZHJh
d0ltYWdlKHRpbGVJbWFnZS0+aW1hZ2UoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCB0aWxlUmVj
dCwgdGlsZVJlY3QpOworICAgICAgICAgICAgbmV3VGlsZUltYWdlQ29udGV4dC0+ZHJhd0ltYWdl
KGNvcGllZEltYWdlLmdldCgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIHRpbGVSZWN0LCB0aWxl
UmVjdCk7CiAgICAgICAgIH0KICAgICAgICAgbmV3VGlsZUltYWdlQ29udGV4dC0+dHJhbnNsYXRl
KC1wYXR0ZXJuRGF0YS0+Ym91bmRhcmllcy53aWR0aCgpICogbnVtWCwgMCk7CiAgICAgfQogICAg
IG5ld1RpbGVJbWFnZUNvbnRleHQtPnJlc3RvcmUoKTsKIAotICAgIHBhdHRlcm5EYXRhLT5wYXR0
ZXJuID0gUGF0dGVybjo6Y3JlYXRlKG5ld1RpbGVJbWFnZS0+aW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7
CisgICAgcGF0dGVybkRhdGEtPnBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUobmV3VGlsZUltYWdl
LT5jb3B5SW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiA2NTQ0NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05NjMsNyArOTYzLDggQEAgYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0JhcihSZQogICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+dHJhbnNsYXRlKDIgKiByZWN0LngoKSArIHJlY3Qud2lkdGgoKSwgMCk7CiAgICAgICAg
IHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoLTEsIDEpKTsKICAgICB9Ci0gICAg
cGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFnZShpbWFnZUJ1ZmZlci0+aW1hZ2UoKSwgRGV2aWNl
Q29sb3JTcGFjZSwgcmVjdC5sb2NhdGlvbigpKTsKKyAgICAKKyAgICBwYWludEluZm8uY29udGV4
dC0+ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLmdldCgpLCBEZXZpY2VDb2xvclNwYWNlLCBy
ZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKICAg
ICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRv
b2xzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRv
b2xzLmNwcAkocmV2aXNpb24gNjU0NDUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbWFnZUJ1
ZmZlclRvb2xzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCB2b2lkIFNWR0lt
YWdlQnVmZmVyVG9vbHM6OmNsaXBUb0ltYWdlQnVmCiAgICAgLy8gVGhlIG1hc2sgaW1hZ2UgaGFz
IGJlZW4gY3JlYXRlZCBpbiB0aGUgZGV2aWNlIGNvb3JkaW5hdGUgc3BhY2UsIGFzIHRoZSBpbWFn
ZSBzaG91bGQgbm90IGJlIHNjYWxlZC4KICAgICAvLyBTbyB0aGUgYWN0dWFsIG1hc2tpbmcgcHJv
Y2VzcyBoYXMgdG8gYmUgZG9uZSBpbiB0aGUgZGV2aWNlIGNvb3JkaW5hdGUgc3BhY2UgYXMgd2Vs
bC4KICAgICBjb250ZXh0LT5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zvcm0uaW52ZXJzZSgpKTsK
LSAgICBjb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihhYnNvbHV0ZVRhcmdldFJlY3QsIGltYWdl
QnVmZmVyKTsKKyAgICBjb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgYWJz
b2x1dGVUYXJnZXRSZWN0KTsKICAgICBjb250ZXh0LT5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zv
cm0pOwogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NTQ0
NSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM3LDcgKzEzNyw3IEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUltYWdlRWxl
bWUKICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6cmVuZGVyU3VidHJlZVRvSW1hZ2UobV90YXJn
ZXRJbWFnZS5nZXQoKSwgcmVuZGVyZXIpOwogICAgIH0KIAotICAgIHJldHVybiBGRUltYWdlOjpj
cmVhdGUobV90YXJnZXRJbWFnZSA/IG1fdGFyZ2V0SW1hZ2UtPmltYWdlKCkgOiBtX2NhY2hlZElt
YWdlLT5pbWFnZSgpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOworICAgIHJldHVybiBGRUltYWdl
OjpjcmVhdGUobV90YXJnZXRJbWFnZSA/IG1fdGFyZ2V0SW1hZ2UtPmNvcHlJbWFnZSgpIDogbV9j
YWNoZWRJbWFnZS0+aW1hZ2UoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKIH0KIAogdm9pZCBT
VkdGRUltYWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0
PEtVUkw+JiB1cmxzKSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2
aXNpb24gNjU0NDUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyMSwxMiArMjIxLDEzIEBAIE5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpu
YXRpdmVJbWFnZUZvckMKICAgICBpZiAoIW1fZnJhbWVDYWNoZSkgewogICAgICAgICBpZiAoIW1f
cGFnZSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBtX2ZyYW1lQ2FjaGUgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSk7Ci0gICAgICAgIGlmICghbV9mcmFtZUNhY2hlKSAvLyBm
YWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UKKyAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSk7CisgICAgICAgIGlmICghYnVmZmVyKSAv
LyBmYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICBkcmF3KG1fZnJhbWVDYWNoZS0+Y29udGV4dCgpLCByZWN0KCksIHJlY3QoKSwgRGV2aWNlQ29s
b3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgICAgIGRyYXcoYnVmZmVyLT5jb250
ZXh0KCksIHJlY3QoKSwgcmVjdCgpLCBEZXZpY2VDb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VP
dmVyKTsKKyAgICAgICAgbV9mcmFtZUNhY2hlID0gYnVmZmVyLT5jb3B5SW1hZ2UoKTsKICAgICB9
Ci0gICAgcmV0dXJuIG1fZnJhbWVDYWNoZS0+aW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKKyAgICByZXR1cm4gbV9mcmFtZUNhY2hlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOwogfQogCiBib29sIFNWR0ltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNl
aXZlZCkKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gNjU0NDUpCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICsz
Myw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEltYWdlQnVmZmVyOwog
ICAgIGNsYXNzIFBhZ2U7CiAgICAgY2xhc3MgU1ZHSW1hZ2VDaHJvbWVDbGllbnQ7CiAgICAgCkBA
IC03Miw3ICs3MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIE93
blB0cjxTVkdJbWFnZUNocm9tZUNsaWVudD4gbV9jaHJvbWVDbGllbnQ7CiAgICAgICAgIE93blB0
cjxQYWdlPiBtX3BhZ2U7Ci0gICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9mcmFtZUNhY2hl
OworICAgICAgICBSZWZQdHI8SW1hZ2U+IG1fZnJhbWVDYWNoZTsKICAgICB9OwogfQogCkluZGV4
OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAJKHJldmlzaW9u
IDY1NDQ1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCB2b2lkIEZFTWVyZ2U6OmFwcGx5KEZpbHRl
ciogZmlsdGVyKQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWVyZ2VJbnB1dHMu
c2l6ZSgpOyBpKyspIHsKICAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gY2FsY3VsYXRlRHJh
d2luZ1JlY3QobV9tZXJnZUlucHV0c1tpXS0+c2NhbGVkU3ViUmVnaW9uKCkpOwotICAgICAgICBm
aWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9tZXJnZUlucHV0c1tpXS0+cmVzdWx0SW1hZ2UoKS0+
aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QpOworICAgICAgICBmaWx0ZXJDb250
ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9tZXJnZUlucHV0c1tpXS0+cmVzdWx0SW1hZ2UoKSwgRGV2
aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAJKHJldmlzaW9uIDY1NDQ1KQorKysg
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBGRU9mZnNldDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbi0+c2NhbGVkU3ViUmVnaW9u
KCkud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luLT5zY2Fs
ZWRTdWJSZWdpb24oKS5oZWlnaHQoKSk7CiAKLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2Uo
bV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZHN0UmVjdCk7
CisgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCks
IERldmljZUNvbG9yU3BhY2UsIGRzdFJlY3QpOwogfQogCiB2b2lkIEZFT2Zmc2V0OjpkdW1wKCkK
SW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAJKHJldmlz
aW9uIDY1NDQ1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03Miw4ICs3Miw4IEBAIHZvaWQgRkVUaWxlOjphcHBseShGaWx0
ZXIqIGZpbHRlcikKIAogICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gdGlsZUltYWdlID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZSh0aWxlUmVjdC5zaXplKCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCogdGls
ZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOwotICAgIHRpbGVJbWFnZUNvbnRl
eHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNw
YWNlLCBJbnRQb2ludCgpKTsKLSAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybiA9IFBhdHRlcm46
OmNyZWF0ZSh0aWxlSW1hZ2UtPmltYWdlKCksIHRydWUsIHRydWUpOworICAgIHRpbGVJbWFnZUNv
bnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNw
YWNlLCBJbnRQb2ludCgpKTsKKyAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybiA9IFBhdHRlcm46
OmNyZWF0ZSh0aWxlSW1hZ2UtPmNvcHlJbWFnZSgpLCB0cnVlLCB0cnVlKTsKIAogICAgIEFmZmlu
ZVRyYW5zZm9ybSBtYXRyaXg7CiAgICAgbWF0cml4LnRyYW5zbGF0ZShtX2luLT5zY2FsZWRTdWJS
ZWdpb24oKS54KCkgLSBzY2FsZWRTdWJSZWdpb24oKS54KCksIG1faW4tPnNjYWxlZFN1YlJlZ2lv
bigpLnkoKSAtIHNjYWxlZFN1YlJlZ2lvbigpLnkoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64515</attachid>
            <date>2010-08-16 13:28:48 -0700</date>
            <delta_ts>2010-08-16 13:40:53 -0700</delta_ts>
            <desc>Argh, project file changed again.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>73621</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTQ0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMzIEBACisyMDEwLTA4LTE2ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNTA3LCBzdG9wIEltYWdlQnVm
ZmVyIGZyb20gY29weWluZyBpdHMgZGF0YSB3aGVuIHJlbmRlcmluZyBhZnRlciBjYW52YXMgY2hh
bmdlcyBoYXBwZW4uCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIHJlbmFtZXMgSW1hZ2VC
dWZmZXI6OmltYWdlKCkgdG8gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSgpLiBUaGUgbmV3IG1ldGhv
ZCBhbHdheXMgcmV0dXJucyBhIG5ldyBjb3B5IHRoYXQgaXMgYSBjdXJyZW50CisgICAgICAgIHNu
YXBzaG90IG9mIHRoZSBJbWFnZUJ1ZmZlci4KKyAgICAgICAgCisgICAgICAgIFRvIGRyYXcgYW4g
SW1hZ2VCdWZmZXIsIHlvdSBub3cgdXNlIG5ldyBHcmFwaGljc0NvbnRleHQgY2FsbHM6IGRyYXdJ
bWFnZUJ1ZmZlci4gIFBsYXRmb3JtcyBjYW4gdGhlbiBvcHRpbWl6ZSB0aGVzZSBjYWxscyB0byBk
cmF3CisgICAgICAgIGVmZmljaWVudGx5IHdpdGhvdXQgaGF2aW5nIHRvIGNvcHkgdGhlIGJpdHMg
b2YgdGhlIEltYWdlQnVmZmVyIGludG8gYW4gSW1hZ2UuCisKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0NTU0NhbnZhc1ZhbHVlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjppbWFnZSk6CisgICAgICAgICog
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6d2lsbERyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6c2V0U3VyZmFjZVNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNvcGllZEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjbGVhckNvcGllZEltYWdlKToKKyAgICAgICAg
KiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
UGF0dGVybi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNQYXR0ZXJuOjpDYW52YXNQYXR0
ZXJuKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmg6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNQYXR0ZXJuOjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEludGVybmFsKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdl
bmVyYXRlZEltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xp
cFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRzSW50b0NhbnZhc0J1
ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpoZWlnaHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGF0dGVybjo6UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVy
bi5oOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2luZ0NvcHkpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2lu
Z0NvcHkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNs
aXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjphcHBseSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvc2l0ZTo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlQWxwaGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmFwcGx5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6YXBwbHkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJEYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckRhdGE6OkltYWdlQnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
ZHJhd3NVc2luZ0NvcHkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmNsaXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3ND
b250ZXh0U2tpYS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1
ZmZlclNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdzVXNpbmdD
b3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5SW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2luZ0NvcHkpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9TY3JvbGxiYXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
TWFjOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXll
ckV4dGVuZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlD
bGlwcGluZ1RvQ29udGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpw
b3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
R3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xpcFRvVGV4dE1hc2spOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmJ1aWxkUGF0dGVybik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFn
ZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9T
VkdJbWFnZS5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0
OjphcHBseSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHkpOgorCiAyMDEwLTA4LTE2ICBQYXVsIFNh
d2F5YSAgPHBzYXdheWFAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IENocmlzIE1h
cnJpbi4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiA2NTQ0OCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MDQwLDcgKzQwNDAsNyBAQAogCQlCMkEwMTVBOTBBRjZD
RDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkEwMTU5MzBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhp
Y3NDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQjJBMDE1QUEwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMDE1OTQwQUY2Q0Q1
MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovOyB9OwogCQlCMkEwMTVBQjBBRjZDRDUz
MDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjJBMDE1OTUwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlw
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlC
MkExMEI5MjBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAv
KiBJbWFnZUJ1ZmZlci5oICovOyB9OworCQlCMkExMEI5MjBCMzgxOEJEMDAwOTlBQTQgLyogSW1h
Z2VCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQTEwQjk0MEIzODE4RDcwMDA5
OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNH
LmNwcCAqLzsgfTsKIAkJQjJBMUYyQUEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTFG
MkExMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5jcHAgKi87IH07CiAJCUIyQTFG
MkFCMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMUYyQTIwQ0VGMEFCRjAwNDQyRjZBIC8q
IFNWR0ZvbnRFbGVtZW50LmggKi87IH07CkBAIC00NzcyLDYgKzQ3NzIsNyBAQAogCQlCQ0E4Qzgz
MTExRTNENTMyMDA4MTJGQjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyQ2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E4QzgzMDExRTNENTMy
MDA4MTJGQjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyQ2xpZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNBOENBNUYxMUU0RTZEMTAwODEy
RkI3IC8qIEJhY2tGb3J3YXJkTGlzdEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBOENBNUQxMUU0RTZEMTAwODEyRkI3IC8qIEJhY2tGb3J3
YXJkTGlzdEltcGwuY3BwICovOyB9OwogCQlCQ0E4Q0E2MDExRTRFNkQxMDA4MTJGQjcgLyogQmFj
a0ZvcndhcmRMaXN0SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNBOENBNUUxMUU0RTZEMTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkTGlzdEltcGwu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQ0E5
NzkxNzEyMTVEMDU1MDA1QzQ4NUMgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E5NzkxNjEyMTVEMDU1MDA1QzQ4NUMg
LyogSW1hZ2VCdWZmZXJEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQkNBQTkwQzMwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0FBOTBDMjBB
N0VCQTYwMDA4QjEyMjkgLyogU2Nyb2xsYmFyLmNwcCAqLzsgfTsKIAkJQkNBQ0YzQkMxMDcyOTIx
QTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0FDRjNCQTEwNzI5MjFBMDBDMEM4QTMgLyog
VXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcCAqLzsgfTsKIAkJQkNBQ0YzQkQxMDcyOTIxQTAwQzBD
OEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBQ0YzQkIxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250
ZW50VVJMUGF0dGVybi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0xMDUyNiw2ICsxMDUyNyw3IEBACiAJCUJDQThDODMwMTFFM0Q1MzIwMDgxMkZC
NyAvKiBCYWNrRm9yd2FyZENvbnRyb2xsZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQmFja0ZvcndhcmRDb250cm9sbGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDQThDQTVEMTFFNEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExp
c3RJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhY2tGb3J3
YXJkTGlzdEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0E4Q0E1RTEx
RTRFNkQxMDA4MTJGQjcgLyogQmFja0ZvcndhcmRMaXN0SW1wbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBCYWNrRm9yd2FyZExpc3RJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUJDQTk3OTE2MTIxNUQwNTUwMDVDNDg1QyAvKiBJbWFnZUJ1ZmZlckRhdGEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQUE5MEMyMEE3RUJBNjAwMDhCMTIyOSAvKiBT
Y3JvbGxiYXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNjcm9s
bGJhci5jcHA7IHBhdGggPSBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwOyBzb3VyY2VUcmVlID0gU09V
UkNFX1JPT1Q7IH07CiAJCUJDQUNGM0JBMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29udGVudFVS
TFBhdHRlcm4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVXNlckNv
bnRlbnRVUkxQYXR0ZXJuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBQ0Yz
QkIxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudFVSTFBhdHRlcm4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NjE1LDYgKzE1NjE3LDcgQEAKIAkJCQlCMkVEOTc3MDBC
MUY1NUNFMDAyNTdEMEYgLyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwICovLAogCQkJCUE4MEQ2NzA3
MEU5RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oICov
LAogCQkJCUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLywK
KwkJCQlCQ0E5NzkxNjEyMTVEMDU1MDA1QzQ4NUMgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCiAJ
CQkJQjI3NTM1MzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlQ0cuY3BwICovLAogCQkJCUIyNzUz
NTMxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCAqLywKIAkJCQk0QjM0ODA5
MjBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDRy5oICovLApAQCAtMjAxODgsNiArMjAx
OTEsNyBAQAogCQkJCTk3REQ0RDg3MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDRTE3MkUwMTExMzZFOENFMDA2MkE1MzMgLyogWm9vbU1vZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUM1MEI1NjE3MTIxMTlEMjMwMDhCNDZFMCAvKiBHcm91cFNldHRp
bmdzLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0E5NzkxNzEyMTVEMDU1MDA1QzQ4NUMgLyogSW1h
Z2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTA3MDdFNzEyMTlDMDQzMDBEOTBF
NTEgLyogQU5HTEVXZWJLaXRCcmlkZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NT
Q2FudmFzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVl
LmNwcAkocmV2aXNpb24gNjU0NDgpCisrKyBXZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgSW1hZ2UqIENTU0NhbnZhc1ZhbHVlOjpp
bWFnZShSZW5kZXJPYmplYwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBlbHQgPSBlbGVtZW50KHJl
bmRlcmVyLT5kb2N1bWVudCgpKTsKICAgICBpZiAoIWVsdCB8fCAhZWx0LT5idWZmZXIoKSkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGVsdC0+YnVmZmVyKCktPmltYWdlKCk7CisgICAg
cmV0dXJuIGVsdC0+Y29waWVkSW1hZ2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2NTQ0OCkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw4
ICsyMDksNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVuCiAKIHZv
aWQgSFRNTENhbnZhc0VsZW1lbnQ6OndpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBpZiAobV9pbWFnZUJ1ZmZlcikKLSAgICAgICAgbV9pbWFnZUJ1ZmZlci0+Y2xlYXJJbWFn
ZSgpOworICAgIG1fY29waWVkSW1hZ2UuY2xlYXIoKTsgLy8gQ2xlYXIgb3VyIGltYWdlIHNuYXBz
aG90IGlmIHdlIGhhdmUgb25lLgogCiAgICAgaWYgKFJlbmRlckJveCogcm8gPSByZW5kZXJCb3go
KSkgewogICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSByby0+Y29udGVudEJveFJlY3QoKTsK
QEAgLTI0MiwxMCArMjQxLDEwIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KCkKICAg
ICAgICAgaCA9IERlZmF1bHRIZWlnaHQ7CiAKICAgICBJbnRTaXplIG9sZFNpemUgPSBzaXplKCk7
Ci0gICAgc2V0U3VyZmFjZVNpemUoSW50U2l6ZSh3LCBoKSk7CisgICAgc2V0U3VyZmFjZVNpemUo
SW50U2l6ZSh3LCBoKSk7IC8vIFRoZSBpbWFnZSBidWZmZXIgZ2V0cyBjbGVhcmVkIGhlcmUuCiAK
ICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5p
czNkKCkpCisgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzM2QoKSAmJiBvbGRTaXpl
ICE9IHNpemUoKSkKICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4o
bV9jb250ZXh0LmdldCgpKS0+cmVzaGFwZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAjZW5kaWYKIApA
QCAtMjc3LDIzICsyNzYsMjEgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnQoR3JhcGhp
Y3NDbwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dDNEID0gMDsKICAgICBpZiAo
bV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMzZCgpKSB7CiAgICAgICAgIGNvbnRleHQzRCA9IHN0
YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSk7Ci0gICAg
ICAgIGNvbnRleHQzRC0+YmVnaW5QYWludCgpOworICAgICAgICBpZiAoIWNvbnRleHQzRC0+cGFp
bnRzSW50b0NhbnZhc0J1ZmZlcigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjb250
ZXh0M0QtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAgICAgfQogI2VuZGlmCiAK
ICAgICBpZiAoaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkpIHsKICAgICAgICAgSW1hZ2VCdWZmZXIq
IGltYWdlQnVmZmVyID0gYnVmZmVyKCk7CiAgICAgICAgIGlmIChpbWFnZUJ1ZmZlcikgewotICAg
ICAgICAgICAgSW1hZ2UqIGltYWdlID0gaW1hZ2VCdWZmZXItPmltYWdlRm9yUmVuZGVyaW5nKCk7
Ci0gICAgICAgICAgICBpZiAoaW1hZ2UpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0lt
YWdlKGltYWdlLCBEZXZpY2VDb2xvclNwYWNlLCByKTsKKyAgICAgICAgICAgIGlmIChpbWFnZUJ1
ZmZlci0+ZHJhd3NVc2luZ0NvcHkoKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1h
Z2UoY29waWVkSW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgcik7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBE
ZXZpY2VDb2xvclNwYWNlLCByKTsKICAgICAgICAgfQogICAgIH0KLQotI2lmIEVOQUJMRSgzRF9D
QU5WQVMpCi0gICAgaWYgKGNvbnRleHQzRCkKLSAgICAgICAgY29udGV4dDNELT5lbmRQYWludCgp
OwotI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKSAgICAKQEAgLTMyNSw2ICszMjIs
NyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRTdXJmYWNlU2l6ZShjCiAgICAgbV9zaXpl
ID0gc2l6ZTsKICAgICBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciA9IGZhbHNlOwogICAgIG1faW1h
Z2VCdWZmZXIuY2xlYXIoKTsKKyAgICBtX2NvcGllZEltYWdlLmNsZWFyKCk7CiB9CiAKIFN0cmlu
ZyBIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNv
bnN0IGRvdWJsZSogcXVhbGl0eSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC00MjAsNiArNDE4LDE4
IEBAIEltYWdlQnVmZmVyKiBIVE1MQ2FudmFzRWxlbWVudDo6YnVmZmVyKCkKICAgICByZXR1cm4g
bV9pbWFnZUJ1ZmZlci5nZXQoKTsKIH0KIAorSW1hZ2UqIEhUTUxDYW52YXNFbGVtZW50Ojpjb3Bp
ZWRJbWFnZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NvcGllZEltYWdlICYmIGJ1ZmZlcigpKQor
ICAgICAgICBtX2NvcGllZEltYWdlID0gYnVmZmVyKCktPmNvcHlJbWFnZSgpOworICAgIHJldHVy
biBtX2NvcGllZEltYWdlLmdldCgpOworfQorCit2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjbGVh
ckNvcGllZEltYWdlKCkKK3sKKyAgICBtX2NvcGllZEltYWdlLmNsZWFyKCk7Cit9CisKIEFmZmlu
ZVRyYW5zZm9ybSBIVE1MQ2FudmFzRWxlbWVudDo6YmFzZVRyYW5zZm9ybSgpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5oCShyZXZpc2lvbiA2NTQ0OCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIGNsYXNzIENhbnZhc0NvbnRl
eHRBdHRyaWJ1dGVzOwogY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKIGNsYXNzIEhUTUxDYW52YXNFbGVtZW50OworY2xhc3MgSW1hZ2U7CiBjbGFz
cyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIEludFNpemU7CiAKQEAgLTkzLDYgKzk0LDggQEAgcHVibGlj
OgogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KIAogICAgIEltYWdlQnVmZmVyKiBidWZmZXIoKSBj
b25zdDsKKyAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdDsKKyAgICB2b2lkIGNsZWFyQ29w
aWVkSW1hZ2UoKTsKIAogICAgIEludFJlY3QgY29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBG
bG9hdFJlY3QmKSBjb25zdDsKICAgICBJbnRTaXplIGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29u
c3QgRmxvYXRTaXplJikgY29uc3Q7CkBAIC0xNDksNiArMTUyLDggQEAgcHJpdmF0ZToKICAgICAv
LyBtX2NyZWF0ZWRJbWFnZUJ1ZmZlciBtZWFucyB3ZSB0cmllZCB0byBtYWxsb2MgdGhlIGJ1ZmZl
ci4gIFdlIGRpZG4ndCBuZWNlc3NhcmlseSBnZXQgaXQuCiAgICAgbXV0YWJsZSBib29sIG1faGFz
Q3JlYXRlZEltYWdlQnVmZmVyOwogICAgIG11dGFibGUgT3duUHRyPEltYWdlQnVmZmVyPiBtX2lt
YWdlQnVmZmVyOworICAgIAorICAgIG11dGFibGUgUmVmUHRyPEltYWdlPiBtX2NvcGllZEltYWdl
OyAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkgZm9yIHBsYXRmb3JtcyB0aGF0IGhhdmUgdG8g
Y29weSB0aGUgaW1hZ2UgYnVmZmVyIHRvIHJlbmRlciAoYW5kIGZvciBDU1NDYW52YXNWYWx1ZSku
CiB9OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Bh
dHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVy
bi5jcHAJKHJldmlzaW9uIDY1NDQ4KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQYXR0
ZXJuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIENhbnZhc1BhdHRl
cm46OnBhcnNlUmVwZXRpdGlvblR5cGUoCiAgICAgZWMgPSBTWU5UQVhfRVJSOwogfQogCi1DYW52
YXNQYXR0ZXJuOjpDYW52YXNQYXR0ZXJuKEltYWdlKiBpbWFnZSwgYm9vbCByZXBlYXRYLCBib29s
IHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCitDYW52YXNQYXR0ZXJuOjpDYW52YXNQYXR0ZXJu
KFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9v
bCBvcmlnaW5DbGVhbikKICAgICA6IG1fcGF0dGVybihQYXR0ZXJuOjpjcmVhdGUoaW1hZ2UsIHJl
cGVhdFgsIHJlcGVhdFkpKQogICAgICwgbV9vcmlnaW5DbGVhbihvcmlnaW5DbGVhbikKIHsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5oCShyZXZpc2lvbiA2NTQ0OCkKKysrIFdl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRp
YyB2b2lkIHBhcnNlUmVwZXRpdGlvblR5cGUoY29uc3QgU3RyaW5nJiwgYm9vbCYgcmVwZWF0WCwg
Ym9vbCYgcmVwZWF0WSwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENhbnZhc1BhdHRlcm4+IGNyZWF0ZShJbWFnZSogaW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9v
bCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
YW52YXNQYXR0ZXJuPiBjcmVhdGUoUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UsIGJvb2wgcmVwZWF0
WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1BhdHRlcm4oaW1hZ2UsIHJlcGVhdFgsIHJlcGVh
dFksIG9yaWdpbkNsZWFuKSk7CiAgICAgICAgIH0KQEAgLTUxLDcgKzUxLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBib29sIG9yaWdpbkNsZWFuKCkgY29uc3QgeyByZXR1cm4gbV9v
cmlnaW5DbGVhbjsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQ2FudmFzUGF0dGVybihJbWFn
ZSosIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKTsKKyAgICAg
ICAgQ2FudmFzUGF0dGVybihQYXNzUmVmUHRyPEltYWdlPiwgYm9vbCByZXBlYXRYLCBib29sIHJl
cGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pOwogCiAgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBtX3Bh
dHRlcm47CiAgICAgICAgIGJvb2wgbV9vcmlnaW5DbGVhbjsKSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDY1NDQ4
KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjY0LDcgKzEyNjQsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZHJhd0ltYWdlCiAKICAgICBzb3VyY2VDYW52YXMtPm1ha2VSZW5kZXJpbmdSZXN1
bHRzQXZhaWxhYmxlKCk7CiAKLSAgICBjLT5kcmF3SW1hZ2UoYnVmZmVyLT5pbWFnZSgpLCBEZXZp
Y2VDb2xvclNwYWNlLCBkZXN0UmVjdCwgc291cmNlUmVjdCwgc3RhdGUoKS5tX2dsb2JhbENvbXBv
c2l0ZSk7CisgICAgYy0+ZHJhd0ltYWdlQnVmZmVyKGJ1ZmZlciwgRGV2aWNlQ29sb3JTcGFjZSwg
ZGVzdFJlY3QsIHNvdXJjZVJlY3QsIHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUpOwogICAgIHdp
bGxEcmF3KGRlc3RSZWN0KTsgLy8gVGhpcyBjYWxsIGNvbWVzIGFmdGVyIGRyYXdJbWFnZSwgc2lu
Y2UgdGhlIGJ1ZmZlciB3ZSBkcmF3IGludG8gbWF5IGJlIG91ciBvd24sIGFuZCB3ZSBuZWVkIHRv
IG1ha2Ugc3VyZSBpdCBpcyBkaXJ0eS4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBBcmd1YWJseSB3aWxsRHJhdyBzaG91bGQgYmVjb21lIGRpZERyYXcgYW5kIG9jY3VyIGFmdGVy
IGRyYXdpbmcgY2FsbHMgYW5kIG5vdCBiZWZvcmUgdGhlbSB0byBhdm9pZCBwcm9ibGVtcyBsaWtl
IHRoaXMuCiB9CkBAIC0xNDY0LDcgKzE0NjQsNyBAQCBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+
IENhbnZhc1JlbmRlcmluCiAgICAgQ2FudmFzUGF0dGVybjo6cGFyc2VSZXBldGl0aW9uVHlwZShy
ZXBldGl0aW9uVHlwZSwgcmVwZWF0WCwgcmVwZWF0WSwgZWMpOwogICAgIGlmIChlYykKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIENhbnZhc1BhdHRlcm46OmNyZWF0ZShjYW52YXMtPmJ1
ZmZlcigpLT5pbWFnZSgpLCByZXBlYXRYLCByZXBlYXRZLCBjYW52YXMtPm9yaWdpbkNsZWFuKCkp
OworICAgIHJldHVybiBDYW52YXNQYXR0ZXJuOjpjcmVhdGUoY2FudmFzLT5jb3BpZWRJbWFnZSgp
LCByZXBlYXRYLCByZXBlYXRZLCBjYW52YXMtPm9yaWdpbkNsZWFuKCkpOwogfQogCiB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6d2lsbERyYXcoY29uc3QgRmxvYXRSZWN0JiByLCB1bnNp
Z25lZCBvcHRpb25zKQpAQCAtMTgyMCw3ICsxODIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmRyYXdUZXh0SQogICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5kcmF3QmlkaVRl
eHQoZm9udCwgdGV4dFJ1biwgbG9jYXRpb24pOwogCiAgICAgICAgIGMtPnNhdmUoKTsKLSAgICAg
ICAgYy0+Y2xpcFRvSW1hZ2VCdWZmZXIobWFza1JlY3QsIG1hc2tJbWFnZS5nZXQoKSk7CisgICAg
ICAgIGMtPmNsaXBUb0ltYWdlQnVmZmVyKG1hc2tJbWFnZS5nZXQoKSwgbWFza1JlY3QpOwogICAg
ICAgICBkcmF3U3R5bGUtPmFwcGx5RmlsbENvbG9yKGMpOwogICAgICAgICBjLT5maWxsUmVjdCht
YXNrUmVjdCk7CiAgICAgICAgIGMtPnJlc3RvcmUoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDY1NDQ4KQorKysgV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTgsMjcgKzE1OCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0Nv
bnRleHRDCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcygpCiB7Ci0gICAgaWYgKG1fbWFya2VkQ2FudmFzRGlydHkpIHsKLSAgICAgICAg
Ly8gRklYTUU6IEl0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IHRvIGNsZWFyIHRoZSBpbWFnZSBi
ZWZvcmUgZG9pbmcgYSByZWFkYmFjay4KLSAgICAgICAgLy8gSW52ZXN0aWdhdGUgd2h5IHRoaXMg
aXMgbmVlZGVkIGFuZCByZW1vdmUgaWYgcG9zc2libGUuCi0gICAgICAgIGNhbnZhcygpLT5idWZm
ZXIoKS0+Y2xlYXJJbWFnZSgpOwotICAgICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7
Ci0gICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXModGhpcyk7
Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmVnaW5QYWludCgpCi17
Ci0gICAgaWYgKG1fbWFya2VkQ2FudmFzRGlydHkpCi0gICAgICAgIG1fY29udGV4dC0+YmVnaW5Q
YWludCh0aGlzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuZFBhaW50KCkK
LXsKLSAgICBpZiAobV9tYXJrZWRDYW52YXNEaXJ0eSkgewotICAgICAgICBtX21hcmtlZENhbnZh
c0RpcnR5ID0gZmFsc2U7Ci0gICAgICAgIG1fY29udGV4dC0+ZW5kUGFpbnQoKTsKLSAgICB9Cisg
ICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5KQorICAgICAgICByZXR1cm47CisgICAgY2FudmFz
KCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKKyAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7
CisgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyh0aGlzKTsKIH0K
IAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQpAQCAtMTkxLDcgKzE3NSw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNo
YXBlKGludCAKICNlbmRpZgogICAgICAgICBtX25lZWRzVXBkYXRlID0gZmFsc2U7CiAgICAgfQot
ICAgIAorCisgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGlydHks
IHNpbmNlIHRoZSBuZXdseSBjcmVhdGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQgb2Zm
CisgICAgLy8gY2xlYXIgKGFuZCB0aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8pLgog
ICAgIG1fY29udGV4dC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKIH0KIApAQCAtMjE5Nyw3ICsy
MTgzLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodQogICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICB0ZXhJbWFnZTJESW1wbCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmJ1ZmZlcigp
LT5pbWFnZSgpLAorICAgIAorICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwKICAgICAgICAg
ICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsK
IH0KIApAQCAtMjM0Nyw3ICsyMzM0LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eFN1YkltYWdlMgogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICB0
ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQs
IHR5cGUsIGNhbnZhcy0+YnVmZmVyKCktPmltYWdlKCksCisgICAgCisgICAgdGV4U3ViSW1hZ2Uy
REltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBjYW52
YXMtPmNvcGllZEltYWdlKCksCiAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gNjU0NDgpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzksMTIgKzI3OSwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKIAotICAgIC8vIEhlbHBlcnMgZm9yIG5vdGlmaWNhdGlv
biBhYm91dCBwYWludCBldmVudHMuCi0gICAgdm9pZCBiZWdpblBhaW50KCk7Ci0gICAgdm9pZCBl
bmRQYWludCgpOwotCiAgICAgdm9pZCByZW1vdmVPYmplY3QoV2ViR0xPYmplY3QqKTsKIAorICAg
IGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC0+
cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpOyB9CisKICAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgV2ViR0xPYmplY3Q7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJh
dGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2Vu
ZXJhdGVkSW1hZ2UuY3BwCShyZXZpc2lvbiA2NTQ0OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MywxMSArNjMsOCBA
QCB2b2lkIEdlbmVyYXRlZEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljCiAgICAgR3JhcGhpY3ND
b250ZXh0KiBncmFwaGljc0NvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwogICAgIGdy
YXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWRqdXN0ZWRT
aXplKSwgKm1fZ2VuZXJhdG9yLmdldCgpKTsKIAotICAgIC8vIEdyYWIgdGhlIGZpbmFsIGltYWdl
IGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICBJbWFnZSogYml0bWFwID0gaW1hZ2VCdWZmZXIt
PmltYWdlKCk7Ci0KLSAgICAvLyBOb3cganVzdCBjYWxsIGRyYXdUaWxlZCBvbiB0aGF0IGltYWdl
LgotICAgIGJpdG1hcC0+ZHJhd1BhdHRlcm4oY29udGV4dCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCwgZGVzdFJl
Y3QpOworICAgIC8vIFRpbGUgdGhlIGltYWdlIGJ1ZmZlciBpbnRvIHRoZSBjb250ZXh0LgorICAg
IGltYWdlQnVmZmVyLT5kcmF3UGF0dGVybihjb250ZXh0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBkZXN0UmVj
dCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmgJKHJldmlzaW9uIDY1NDQ4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MjAsMTEgKzcyMCwxMSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpOwogCi0gICAgLy8gSGVscGVycyBmb3Igbm90aWZp
Y2F0aW9uIGFib3V0IHBhaW50IGV2ZW50cwotICAgIHZvaWQgYmVnaW5QYWludChDYW52YXNSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKLSAgICB2b2lkIGVuZFBhaW50KCk7CiAjaWYgUExBVEZP
Uk0oUVQpCiAgICAgdm9pZCBwYWludChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVJlY3QmIHJl
Y3QpIGNvbnN0OworICAgIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KKyNlbHNlCisgICAgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiAgICAgLy8gU3VwcG9ydCBmb3IgYnVmZmVy
IGNyZWF0aW9uIGFuZCBkZWxldGlvbgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gNjU0NDgpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR2VuZXJhdG9yLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTQ0Miw2ICs0NDMsNTcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYQogICAgICAgICByZXN0b3JlKCk7CiB9CiAK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIGltYWdl
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIHAsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wKQoreworICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgc3R5bGVDb2xvclNw
YWNlLCBwLCBJbnRSZWN0KDAsIDAsIC0xLCAtMSksIG9wKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiByLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9v
bCB1c2VMb3dRdWFsaXR5U2NhbGUpCit7CisgICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBzdHls
ZUNvbG9yU3BhY2UsIHIsIEludFJlY3QoMCwgMCwgLTEsIC0xKSwgb3AsIHVzZUxvd1F1YWxpdHlT
Y2FsZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXIqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQm
IGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQorewor
ICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBJbnRSZWN0KGRlc3Qs
IHNyY1JlY3Quc2l6ZSgpKSwgc3JjUmVjdCwgb3ApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKK3sKKyAgICBkcmF3
SW1hZ2VCdWZmZXIoaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwgRmxvYXRSZWN0KGRlc3QpLCBzcmNS
ZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgZmxvYXQgdHN3ID0gc3JjLndpZHRoKCk7CisgICAgZmxvYXQgdHNoID0gc3JjLmhlaWdodCgp
OworICAgIGZsb2F0IHR3ID0gZGVzdC53aWR0aCgpOworICAgIGZsb2F0IHRoID0gZGVzdC5oZWln
aHQoKTsKKworICAgIGlmICh0c3cgPT0gLTEpCisgICAgICAgIHRzdyA9IGltYWdlLT53aWR0aCgp
OworICAgIGlmICh0c2ggPT0gLTEpCisgICAgICAgIHRzaCA9IGltYWdlLT5oZWlnaHQoKTsKKwor
ICAgIGlmICh0dyA9PSAtMSkKKyAgICAgICAgdHcgPSBpbWFnZS0+d2lkdGgoKTsKKyAgICBpZiAo
dGggPT0gLTEpCisgICAgICAgIHRoID0gaW1hZ2UtPmhlaWdodCgpOworCisgICAgaWYgKHVzZUxv
d1F1YWxpdHlTY2FsZSkgeworICAgICAgICBzYXZlKCk7CisgICAgICAgIHNldEltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbk5vbmUpOworICAgIH0KKworICAgIGltYWdlLT5k
cmF3KHRoaXMsIHN0eWxlQ29sb3JTcGFjZSwgZGVzdCwgc3JjLCBvcCwgdXNlTG93UXVhbGl0eVNj
YWxlKTsKKyAgICAKKyAgICBpZiAodXNlTG93UXVhbGl0eVNjYWxlKQorICAgICAgICByZXN0b3Jl
KCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRSb3VuZGVkUmVjdENsaXAoY29uc3Qg
SW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9w
UmlnaHQsCiAgICAgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90
dG9tUmlnaHQpCiB7CkBAIC00NjAsNiArNTEyLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwT3V0Um91bmRlZFJlY3QKICAgICBjbGlwT3V0KFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5n
bGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CiB9
CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciog
YnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGJ1ZmZlci0+Y2xpcCh0aGlzLCByZWN0KTsKK30K
KwogaW50IEdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdNb2RlKCkKIHsKICAgICByZXR1cm4g
bV9jb21tb24tPnN0YXRlLnRleHREcmF3aW5nTW9kZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gNjU0NDgpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzgsNiArMjM4LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUgPSBJbWFnZTo6U3RyZXRjaFRpbGUsIEltYWdl
OjpUaWxlUnVsZSB2UnVsZSA9IEltYWdlOjpTdHJldGNoVGlsZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wg
dXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOwogCisgICAgICAgIHZvaWQgZHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFBv
aW50JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICAgICAg
dm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgY29uc3QgSW50UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNl
T3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZHJh
d0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0
ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgICAgIHZvaWQgZHJhd0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IElu
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRv
ciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2Up
OworICAgICAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29s
IHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKKwogICAgICAgICB2b2lkIHNldEltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOwogICAgICAgICBJbnRlcnBv
bGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3Q7CiAKQEAgLTI0
OCw4ICsyNTUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY2xpcE91dEVs
bGlwc2VJblJlY3QoY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2b2lkIGNsaXBPdXRSb3VuZGVk
UmVjdChjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6
ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJv
dHRvbVJpZ2h0KTsKICAgICAgICAgdm9pZCBjbGlwUGF0aChXaW5kUnVsZSk7Ci0gICAgICAgIHZv
aWQgY2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VCdWZmZXIq
KTsKICAgICAgICAgdm9pZCBjbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25z
dCBGbG9hdFBvaW50KiwgYm9vbCBhbnRpYWxpYXMgPSB0cnVlKTsKKyAgICAgICAgdm9pZCBjbGlw
VG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYpOwogCiAgICAgICAg
IGludCB0ZXh0RHJhd2luZ01vZGUoKTsKICAgICAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUo
aW50KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHJldmlzaW9uIDY1NDQ4KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTAsNiArMTUwLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlPiBsb2Fk
UGxhdGZvcm1UaGVtZUljb24oY29uc3QgY2hhciogbmFtZSwgaW50IHNpemUpOwogI2VuZGlmCiAK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QpOworCiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2UoSW1hZ2VPYnNlcnZlciog
PSAwKTsKIApAQCAtMTY3LDkgKzE3MCw2IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wg
bWF5RmlsbFdpdGhTb2xpZENvbG9yKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIENv
bG9yIHNvbGlkQ29sb3IoKSBjb25zdCB7IHJldHVybiBDb2xvcigpOyB9CiAgICAgCi0gICAgdmly
dHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0KTsKLQogcHJpdmF0ZToKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7IC8v
IFRoZSBlbmNvZGVkIHJhdyBkYXRhIGZvciB0aGUgaW1hZ2UuIAogICAgIEltYWdlT2JzZXJ2ZXIq
IG1faW1hZ2VPYnNlcnZlcjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmgJKHJldmlzaW9uIDY1NDQ4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIEltYWdl
QnVmZmVyX2gKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1
ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgpAQCAtNzEsMTYgKzcyLDEzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgfkltYWdlQnVmZmVyKCk7CiAKICAgICAgICAgY29uc3QgSW50U2l6ZSYg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgICAgICBpbnQgd2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQorICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplLmhlaWdodCgpOyB9CisgICAgICAgIAogICAgICAgICBHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQoKSBjb25zdDsKIAotICAgICAgICBJbWFnZSogaW1hZ2UoKSBjb25zdDsK
LSNpZiBQTEFURk9STShRVCkKLSAgICAgICAgSW1hZ2UqIGltYWdlRm9yUmVuZGVyaW5nKCkgY29u
c3Q7Ci0jZWxzZQotICAgICAgICBJbWFnZSogaW1hZ2VGb3JSZW5kZXJpbmcoKSBjb25zdCB7IHJl
dHVybiBpbWFnZSgpOyB9Ci0jZW5kaWYKLQotICAgICAgICB2b2lkIGNsZWFySW1hZ2UoKSB7IG1f
aW1hZ2UuY2xlYXIoKTsgfQorICAgICAgICBib29sIGRyYXdzVXNpbmdDb3B5KCkgY29uc3Q7IC8v
IElmIHRoZSBpbWFnZSBidWZmZXIgaGFzIHRvIHJlbmRlciB1c2luZyBhIGNvcGllZCBpbWFnZSwg
aXQgd2lsbCByZXR1cm4gdHJ1ZS4KKyAgICAgICAgUGFzc1JlZlB0cjxJbWFnZT4gY29weUltYWdl
KCkgY29uc3Q7IC8vIFJldHVybiBhIG5ldyBpbWFnZSB0aGF0IGlzIGEgY29weSBvZiB0aGUgYnVm
ZmVyLgogCiAgICAgICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgICAgICBQYXNzUmVmUHRyPEltYWdlRGF0
YT4gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CkBAIC05
NiwxMiArOTQsMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2Vsc2UKICAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0o
MSwgMCwgMCwgLTEsIDAsIG1fc2l6ZS5oZWlnaHQoKSk7IH0KICNlbmRpZgorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgdm9pZCBjbGlwKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYp
IGNvbnN0OworCisgICAgICAgIC8vIFRoZSBkcmF3IG1ldGhvZCBkcmF3cyB0aGUgY29udGVudHMg
b2YgdGhlIGJ1ZmZlciB3aXRob3V0IGNvcHlpbmcgaXQuCisgICAgICAgIHZvaWQgZHJhdyhHcmFw
aGljc0NvbnRleHQqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0x
LCAtMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yID0g
Q29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7Cisg
ICAgICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCk7CisgICAgICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisgICAgICAgIGZy
aWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIEltYWdl
QnVmZmVyRGF0YSBtX2RhdGE7CiAKICAgICAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgICAgIE93
blB0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8
SW1hZ2U+IG1faW1hZ2U7CiAKICNpZiAhUExBVEZPUk0oQ0cpCiAgICAgICAgIFZlY3RvcjxpbnQ+
IG1fbGluZWFyUmdiTFVUOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3Bw
CShyZXZpc2lvbiA2NTQ0OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1QYXR0ZXJuOjpQYXR0ZXJuKEltYWdlKiBpbWFnZSwgYm9vbCByZXBlYXRYLCBib29sIHJl
cGVhdFkpCitQYXR0ZXJuOjpQYXR0ZXJuKFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlLCBib29sIHJl
cGVhdFgsIGJvb2wgcmVwZWF0WSkKICAgICA6IG1fdGlsZUltYWdlKGltYWdlKQogICAgICwgbV9y
ZXBlYXRYKHJlcGVhdFgpCiAgICAgLCBtX3JlcGVhdFkocmVwZWF0WSkKQEAgLTM5LDcgKzM5LDcg
QEAgUGF0dGVybjo6UGF0dGVybihJbWFnZSogaW1hZ2UsIGJvb2wgcmVwZQogICAgICwgbV9wYXR0
ZXJuKDApCiAjZW5kaWYKIHsKLSAgICBBU1NFUlQoaW1hZ2UpOworICAgIEFTU0VSVChtX3RpbGVJ
bWFnZSk7CiB9CiAKIFBhdHRlcm46On5QYXR0ZXJuKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0dGVybi5oCShyZXZpc2lvbiA2NTQ0OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIFBh
dHRlcm5faAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiSW1hZ2Uu
aCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KQEAgLTY0LDExICs2NSwxMCBAQCB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtUGF0dGVyblB0
cjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwotY2xhc3Mg
SW1hZ2U7CiAKIGNsYXNzIFBhdHRlcm4gOiBwdWJsaWMgUmVmQ291bnRlZDxQYXR0ZXJuPiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGF0dGVybj4gY3JlYXRlKEltYWdlKiB0aWxl
SW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFBhdHRlcm4+IGNyZWF0ZShQYXNzUmVmUHRyPEltYWdlPiB0aWxlSW1hZ2UsIGJvb2wgcmVwZWF0
WCwgYm9vbCByZXBlYXRZKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYXR0
ZXJuKHRpbGVJbWFnZSwgcmVwZWF0WCwgcmVwZWF0WSkpOwogICAgIH0KQEAgLTkxLDcgKzkxLDcg
QEAgcHVibGljOgogICAgIGJvb2wgcmVwZWF0WSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwZWF0WTsg
fQogCiBwcml2YXRlOgotICAgIFBhdHRlcm4oSW1hZ2UqLCBib29sIHJlcGVhdFgsIGJvb2wgcmVw
ZWF0WSk7CisgICAgUGF0dGVybihQYXNzUmVmUHRyPEltYWdlPiwgYm9vbCByZXBlYXRYLCBib29s
IHJlcGVhdFkpOwogCiAgICAgUmVmUHRyPEltYWdlPiBtX3RpbGVJbWFnZTsKICAgICBib29sIG1f
cmVwZWF0WDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiA2NTQ0OCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MDgsMTQgKzkwOCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJ
bm5lclJvdW5kZWRSZWMKICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBzYXZlZEZpbGxSdWxl
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQotewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhGbG9h
dFNpemUgY29uc3QmIHNpemUsIGZsb2F0LCBDb2xvciBjb25zdCYsIENvbG9yU3BhY2UpCiB7CiAg
ICAgLy8gQ2Fpcm8gZG9lc24ndCBzdXBwb3J0IHNoYWRvd3MgbmF0aXZlbHksIHRoZXkgYXJlIGRy
YXduIG1hbnVhbGx5IGluIHRoZSBkcmF3KgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA2NTQ0OCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk3LDI2ICs5NywzNCBAQCBHcmFwaGljc0NvbnRleHQqIEltYWdl
QnVmZmVyOjpjb250ZXh0KCkgCiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KIAotSW1h
Z2UqIEltYWdlQnVmZmVyOjppbWFnZSgpIGNvbnN0Citib29sIEltYWdlQnVmZmVyOjpkcmF3c1Vz
aW5nQ29weSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ltYWdlKSB7Ci0gICAgICAgIC8vIEl0J3Mg
YXNzdW1lZCB0aGF0IGlmIGltYWdlKCkgaXMgY2FsbGVkLCB0aGUgYWN0dWFsIHJlbmRlcmluZyB0
byB0aGUKLSAgICAgICAgLy8gR3JhcGhpY3NDb250ZXh0IG11c3QgYmUgZG9uZS4KLSAgICAgICAg
QVNTRVJUKGNvbnRleHQoKSk7Ci0KLSAgICAgICAgLy8gVGhpcyBjcmVhdGVzIGEgQ09QWSBvZiB0
aGUgaW1hZ2UgYW5kIHdpbGwgY2FjaGUgdGhhdCBjb3B5LiBUaGlzIG1lYW5zCi0gICAgICAgIC8v
IHRoYXQgaWYgc3Vic2VxdWVudCBvcGVyYXRpb25zIHRha2UgcGxhY2Ugb24gdGhlIGNvbnRleHQs
IG5laXRoZXIgdGhlCi0gICAgICAgIC8vIGN1cnJlbnRseS1yZXR1cm5lZCBpbWFnZSwgbm9yIHRo
ZSByZXN1bHRzIG9mIGZ1dHVyZSBpbWFnZSgpIGNhbGxzLAotICAgICAgICAvLyB3aWxsIGNvbnRh
aW4gdGhhdCBvcGVyYXRpb24uCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoaXMgc2VlbXMgc2ls
bHksIGJ1dCBpcyB0aGUgd2F5IHRoZSBDRyBwb3J0IHdvcmtzOiBpbWFnZSgpIGlzCi0gICAgICAg
IC8vIGludGVuZGVkIHRvIGJlIHVzZWQgb25seSB3aGVuIHJlbmRlcmluZyBpcyAiY29tcGxldGUu
IgotICAgICAgICBjYWlyb19zdXJmYWNlX3QqIG5ld3N1cmZhY2UgPSBjb3B5U3VyZmFjZShtX2Rh
dGEubV9zdXJmYWNlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgICAgICAvLyBCaXRtYXBJ
bWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCi0g
ICAgICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKG5ld3N1cmZhY2UpOwotICAgIH0K
LSAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVy
Ojpjb3B5SW1hZ2UoKSBjb25zdAoreworICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0
aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1cm4gQml0bWFwSW1h
Z2U6OmNyZWF0ZShjb3B5U3VyZmFjZShtX2RhdGEubV9zdXJmYWNlKSk7Cit9CisKK3ZvaWQgSW1h
Z2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6
OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAor
ICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCAsIGJvb2wgdXNlTG93
UXVhbGl0eVNjYWxlKQoreworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdl
KCk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlQ29weS5nZXQoKSwgc3R5bGVDb2xvclNw
YWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Cit9CisKK3Zv
aWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQoreworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5
ID0gY29weUltYWdlKCk7CisgICAgaW1hZ2VDb3B5LT5kcmF3UGF0dGVybihjb250ZXh0LCBzcmNS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJl
Y3QpOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2Uo
Y29uc3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHJldmlzaW9uIDY1NDQ4
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc1MywxOCArNzUzLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmFkZElubmVyUm91bmRlZFJlYwogICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQotewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNU
TShwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdC54KCksIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSk7
Ci0gICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIDEsIC0xKTsKLSAgICBD
R0NvbnRleHRDbGlwVG9NYXNrKHBsYXRmb3JtQ29udGV4dCgpLCBGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCByZWN0LnNpemUoKSksIGltYWdlQnVmZmVyLT5pbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCkp
OwotICAgIENHQ29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCAxLCAtMSk7Ci0gICAg
Q0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCAtcmVjdC54KCksIC1yZWN0
LnkoKSAtIHJlY3QuaGVpZ2h0KCkpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDRy5jcHAJKHJldmlzaW9uIDY1NDQ4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsMTEgQEAgdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgdm9pZCBy
ZWxlYXNlSW1hZ2VEYXRhKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpCit7CisgICAg
ZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOworfQorCiBJbWFnZUJ1ZmZlckRhdGE6
OkltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJikKICAgICA6IG1fZGF0YSgwKQogewpAQCAt
NTYsNDIgKzYxLDQ2IEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiAK
ICAgICAsIG1fc2l6ZShzaXplKQogewogICAgIHN1Y2Nlc3MgPSBmYWxzZTsgIC8vIE1ha2UgZWFy
bHkgcmV0dXJuIG1lYW4gZmFpbHVyZS4KLSAgICB1bnNpZ25lZCBieXRlc1BlclJvdzsKICAgICBp
ZiAoc2l6ZS53aWR0aCgpIDwgMCB8fCBzaXplLmhlaWdodCgpIDwgMCkKICAgICAgICAgcmV0dXJu
OwotICAgIGJ5dGVzUGVyUm93ID0gc2l6ZS53aWR0aCgpOworCisgICAgdW5zaWduZWQgYnl0ZXNQ
ZXJSb3cgPSBzaXplLndpZHRoKCk7CiAgICAgaWYgKGltYWdlQ29sb3JTcGFjZSAhPSBHcmF5U2Nh
bGUpIHsKICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IG92ZXJmbG93CiAgICAgICAgIGlmIChi
eXRlc1BlclJvdyA+IDB4M0ZGRkZGRkYpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJ5
dGVzUGVyUm93ICo9IDQ7CiAgICAgfQorICAgIG1fZGF0YS5tX2J5dGVzUGVyUm93ID0gYnl0ZXNQ
ZXJSb3c7CiAKKyAgICBzaXplX3QgZGF0YVNpemUgPSBzaXplLmhlaWdodCgpICogYnl0ZXNQZXJS
b3c7CiAgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKHNpemUuaGVpZ2h0KCksIGJ5dGVzUGVyUm93KS5n
ZXRWYWx1ZShtX2RhdGEubV9kYXRhKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKChy
ZWludGVycHJldF9jYXN0PHNpemVfdD4obV9kYXRhLm1fZGF0YSkgJiAyKSA9PSAwKTsKIAotICAg
IFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2U7CiAgICAgc3dpdGNoKGltYWdl
Q29sb3JTcGFjZSkgewogICAgICAgICBjYXNlIERldmljZVJHQjoKLSAgICAgICAgICAgIGNvbG9y
U3BhY2UuYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CisgICAgICAgICAg
ICBtX2RhdGEubV9jb2xvclNwYWNlLmFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdC
KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR3JheVNjYWxlOgotICAgICAg
ICAgICAgY29sb3JTcGFjZS5hZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmljZUdyYXkoKSk7
CisgICAgICAgICAgICBtX2RhdGEubV9jb2xvclNwYWNlLmFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3Jl
YXRlRGV2aWNlR3JheSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogI2lmICgoUExBVEZPUk0oTUFD
KSB8fCBQTEFURk9STShDSFJPTUlVTSkpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSkK
ICAgICAgICAgY2FzZSBMaW5lYXJSR0I6Ci0gICAgICAgICAgICBjb2xvclNwYWNlLmFkb3B0Q0Yo
Q0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZUdlbmVyaWNSR0JMaW5lYXIp
KTsKKyAgICAgICAgICAgIG1fZGF0YS5tX2NvbG9yU3BhY2UuYWRvcHRDRihDR0NvbG9yU3BhY2VD
cmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlR2VuZXJpY1JHQkxpbmVhcikpOwogICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKICNlbmRpZgogICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgY29sb3JTcGFjZS5hZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsK
KyAgICAgICAgICAgIG1fZGF0YS5tX2NvbG9yU3BhY2UuYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVh
dGVEZXZpY2VSR0IoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBtX2RhdGEu
bV9ncmF5U2NhbGUgPSBpbWFnZUNvbG9yU3BhY2UgPT0gR3JheVNjYWxlOworICAgIG1fZGF0YS5t
X2JpdG1hcEluZm8gPSBtX2RhdGEubV9ncmF5U2NhbGUgPyBrQ0dJbWFnZUFscGhhTm9uZSA6IGtD
R0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVm
PiBjZ0NvbnRleHQoQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fZGF0YS5tX2RhdGEs
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJSb3csCi0gICAgICAgIGNv
bG9yU3BhY2UuZ2V0KCksIChpbWFnZUNvbG9yU3BhY2UgPT0gR3JheVNjYWxlKSA/IGtDR0ltYWdl
QWxwaGFOb25lIDoga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2RhdGEubV9jb2xvclNwYWNlLmdldCgpLCBtX2RhdGEubV9iaXRtYXBJbmZvKSk7CiAgICAg
aWYgKCFjZ0NvbnRleHQpCiAgICAgICAgIHJldHVybjsKIApAQCAtOTksMTEgKzEwOCwxMyBAQCBJ
bWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgCiAgICAgbV9jb250ZXh0LT5z
Y2FsZShGbG9hdFNpemUoMSwgLTEpKTsKICAgICBtX2NvbnRleHQtPnRyYW5zbGF0ZSgwLCAtc2l6
ZS5oZWlnaHQoKSk7CiAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgCisgICAgLy8gQ3JlYXRlIGEg
bGl2ZSBpbWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRhLgorICAgIG1fZGF0YS5tX2RhdGFQcm92aWRl
ci5hZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLm1fZGF0YSwg
ZGF0YVNpemUsIHJlbGVhc2VJbWFnZURhdGEpKTsKIH0KIAogSW1hZ2VCdWZmZXI6On5JbWFnZUJ1
ZmZlcigpCiB7Ci0gICAgZmFzdEZyZWUobV9kYXRhLm1fZGF0YSk7CiB9CiAKIEdyYXBoaWNzQ29u
dGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdApAQCAtMTExLDE3ICsxMjIsNTkgQEAg
R3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIAogICAgIHJldHVybiBtX2Nv
bnRleHQuZ2V0KCk7CiB9CiAKLUltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAorYm9v
bCBJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2luZ0NvcHkoKSBjb25zdAoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSgpIGNvbnN0
Cit7CisgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gQ0dJbWFn
ZSBvbiBkZXN0cnVjdGlvbgorICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKENHQml0bWFw
Q29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpKTsKK30KKwor
c3RhdGljIENHSW1hZ2VSZWYgY2dJbWFnZShjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJbWFn
ZUJ1ZmZlckRhdGEmIGRhdGEpCiB7Ci0gICAgaWYgKCFtX2ltYWdlKSB7Ci0gICAgICAgIC8vIEl0
J3MgYXNzdW1lZCB0aGF0IGlmIGltYWdlKCkgaXMgY2FsbGVkLCB0aGUgYWN0dWFsIHJlbmRlcmlu
ZyB0byB0aGUKLSAgICAgICAgLy8gR3JhcGhpY3NDb250ZXh0IG11c3QgYmUgZG9uZS4KLSAgICAg
ICAgQVNTRVJUKGNvbnRleHQoKSk7Ci0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IENHQml0
bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAg
ICAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBDR0ltYWdlIG9u
IGRlc3RydWN0aW9uCi0gICAgICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1h
Z2UpOworICAgIHJldHVybiBDR0ltYWdlQ3JlYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSwgOCwgZGF0YS5tX2dyYXlTY2FsZSA/IDggOiAzMiwgZGF0YS5tX2J5dGVzUGVyUm93LAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGEubV9jb2xvclNwYWNlLmdldCgpLCBkYXRhLm1fYml0
bWFwSW5mbywgZGF0YS5tX2RhdGFQcm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5n
SW50ZW50RGVmYXVsdCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250
ZXh0KiBkZXN0Q29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQor
eworICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsKKyAgICAgICAgLy8gV2UncmUg
ZHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLiAgSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yaywg
d2UgbmVlZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVmZmVyIGZpcnN0LgorICAgICAgICBSZWZQdHI8
SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoKTsKKyAgICAgICAgZGVzdENvbnRleHQtPmRyYXdJbWFn
ZShjb3B5LmdldCgpLCBEZXZpY2VDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVz
ZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBp
bWFnZUZvclJlbmRlcmluZyA9IEJpdG1hcEltYWdlOjpjcmVhdGUoY2dJbWFnZShtX3NpemUsIG1f
ZGF0YSkpOworICAgICAgICBkZXN0Q29udGV4dC0+ZHJhd0ltYWdlKGltYWdlRm9yUmVuZGVyaW5n
LmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVh
bGl0eVNjYWxlKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCogZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
K3sKKyAgICBpZiAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSB7CisgICAgICAgIC8vIFdlJ3Jl
IGRyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlci4gIEluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmss
IHdlIG5lZWQgdG8gY29weSB0aGUgc291cmNlIGJ1ZmZlciBmaXJzdC4KKyAgICAgICAgUmVmUHRy
PEltYWdlPiBjb3B5ID0gY29weUltYWdlKCk7CisgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRl
c3RDb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNw
YWNlLCBvcCwgZGVzdFJlY3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIFJlZlB0cjxJbWFnZT4g
aW1hZ2VGb3JSZW5kZXJpbmcgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UobV9zaXplLCBt
X2RhdGEpKTsKKyAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RDb250
ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBv
cCwgZGVzdFJlY3QpOwogICAgIH0KLSAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKK30KKwordm9p
ZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UoQWRv
cHRDRiwgY2dJbWFnZShtX3NpemUsIG1fZGF0YSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCA9IGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpOworICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRl
eHQsIHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOworICAgIENHQ29udGV4dFNj
YWxlQ1RNKHBsYXRmb3JtQ29udGV4dCwgMSwgLTEpOworICAgIENHQ29udGV4dENsaXBUb01hc2so
cGxhdGZvcm1Db250ZXh0LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCByZWN0LnNpemUoKSksIGlt
YWdlLmdldCgpKTsKKyAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQsIDEsIC0x
KTsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZvcm1Db250ZXh0LCAtcmVjdC54KCks
IC1yZWN0LnkoKSAtIHJlY3QuaGVpZ2h0KCkpOwogfQogCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVs
dGlwbGllZD4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckRhdGEuaAkocmV2aXNpb24gNjU0NDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiwxNCBAQAog
I2lmbmRlZiBJbWFnZUJ1ZmZlckRhdGFfaAogI2RlZmluZSBJbWFnZUJ1ZmZlckRhdGFfaAogCisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNs
dWRlICJJbWFnZS5oIgorCit0eXBlZGVmIHN0cnVjdCBDR0NvbG9yU3BhY2UgKkNHQ29sb3JTcGFj
ZVJlZjsKK3R5cGVkZWYgc3RydWN0IENHRGF0YVByb3ZpZGVyICpDR0RhdGFQcm92aWRlclJlZjsK
K3R5cGVkZWYgdWludDMyX3QgQ0dCaXRtYXBJbmZvOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEludFNpemU7CkBAIC0zNSw2ICs0MywxMiBAQCBwdWJsaWM6CiAgICAgSW1hZ2VCdWZm
ZXJEYXRhKGNvbnN0IEludFNpemUmKTsKIAogICAgIHZvaWQqIG1fZGF0YTsKKyAgICAKKyAgICBS
ZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IG1fZGF0YVByb3ZpZGVyOworICAgIENHQml0bWFw
SW5mbyBtX2JpdG1hcEluZm87CisgICAgYm9vbCBtX2dyYXlTY2FsZTsKKyAgICB1bnNpZ25lZCBt
X2J5dGVzUGVyUm93OworICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IG1fY29sb3JTcGFj
ZTsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCShyZXZpc2lvbiA2
NTQ0OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgRkVDb2xvck1hdHJp
eDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIKICAgICBpZiAoIWZpbHRlckNvbnRleHQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFn
ZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2lu
LT5zY2FsZWRTdWJSZWdpb24oKSkpOworICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZl
cihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5n
UmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3Qo
SW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKICAgICBQYXNzUmVmUHRyPEltYWdl
RGF0YT4gaW1hZ2VEYXRhKHJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShp
bWFnZVJlY3QpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvc2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmNwcAkocmV2aXNpb24gNjU0NDgpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEs
MjYgKzEzMSwyNiBAQCB2b2lkIEZFQ29tcG9zaXRlOjphcHBseShGaWx0ZXIqIGZpbHRlcikKICAg
ICBGbG9hdFJlY3Qgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLmYsIDAuZiwgLTEuZiwgLTEuZik7CiAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6
Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luMi0+cmVzdWx0SW1hZ2UoKS0+
aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNj
YWxlZFN1YlJlZ2lvbigpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2lu
LT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3
aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0
LT5kcmF3SW1hZ2VCdWZmZXIobV9pbjItPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2Us
IGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSkpOworICAgICAg
ICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwgRGV2
aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9u
KCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoK
ICAgICAgICAgZmlsdGVyQ29udGV4dC0+c2F2ZSgpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5j
bGlwVG9JbWFnZUJ1ZmZlcihjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVn
aW9uKCkpLCBtX2luMi0+cmVzdWx0SW1hZ2UoKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRy
YXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBj
YWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOworICAgICAgICBm
aWx0ZXJDb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBjYWxj
dWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAgICAgICAgZmls
dGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCksIERldmljZUNv
bG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKSk7
CiAgICAgICAgIGZpbHRlckNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRy
YXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBj
YWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOwotICAgICAgICBm
aWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIERl
dmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdp
b24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0KTsKKyAgICAgICAgZmlsdGVy
Q29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9y
U3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKSk7Cisg
ICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luMi0+cmVzdWx0SW1hZ2Uo
KSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1
YlJlZ2lvbigpKSwgc3JjUmVjdCwgQ29tcG9zaXRlRGVzdGluYXRpb25PdXQpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIGZpbHRl
ckNvbnRleHQtPmRyYXdJbWFnZShtX2luMi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNl
Q29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigp
KSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgp
LT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5z
Y2FsZWRTdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZVNvdXJjZUF0b3ApOworICAgICAg
ICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbjItPnJlc3VsdEltYWdlKCksIERl
dmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdp
b24oKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVz
dWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+
c2NhbGVkU3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVTb3VyY2VBdG9wKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6Ci0gICAgICAgIGZp
bHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luMi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2
aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lv
bigpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFn
ZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2lu
LT5zY2FsZWRTdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZVhPUik7CisgICAgICAgIGZp
bHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luMi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNl
Q29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigp
KSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJ
bWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2Fs
ZWRTdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZVhPUik7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzogewogICAgICAgICBJbnRS
ZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnNj
YWxlZFN1YlJlZ2lvbigpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAkocmV2aXNpb24gNjU0NDgpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Myw5ICs2Myw5IEBAIHZvaWQgU291cmNlQWxwaGE6OmFwcGx5KEZpbHRlciogZmlsdGVyKQog
CiAgICAgc2V0SXNBbHBoYUltYWdlKHRydWUpOwogCi0gICAgRmxvYXRSZWN0IGltYWdlUmVjdChG
bG9hdFBvaW50KCksIGZpbHRlci0+c291cmNlSW1hZ2UoKS0+aW1hZ2UoKS0+c2l6ZSgpKTsKKyAg
ICBGbG9hdFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgZmlsdGVyLT5zb3VyY2VJbWFnZSgp
LT5zaXplKCkpOwogICAgIGZpbHRlckNvbnRleHQtPnNhdmUoKTsKLSAgICBmaWx0ZXJDb250ZXh0
LT5jbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZVJlY3QsIGZpbHRlci0+c291cmNlSW1hZ2UoKSk7Cisg
ICAgZmlsdGVyQ29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoZmlsdGVyLT5zb3VyY2VJbWFnZSgp
LCBpbWFnZVJlY3QpOwogICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KGltYWdlUmVjdCwgQ29s
b3I6OmJsYWNrLCBEZXZpY2VDb2xvclNwYWNlKTsKICAgICBmaWx0ZXJDb250ZXh0LT5yZXN0b3Jl
KCk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3Jh
cGhpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuY3BwCShyZXZpc2lvbiA2NTQ0OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAs
NyArNjAsNyBAQCB2b2lkIFNvdXJjZUdyYXBoaWM6OmFwcGx5KEZpbHRlciogZmlsdGVyCiAgICAg
aWYgKCFmaWx0ZXJDb250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBmaWx0ZXJDb250ZXh0
LT5kcmF3SW1hZ2UoZmlsdGVyLT5zb3VyY2VJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNw
YWNlLCBJbnRQb2ludCgpKTsKKyAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoZmls
dGVyLT5zb3VyY2VJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBJbnRQb2ludCgpKTsKIH0KIAog
dm9pZCBTb3VyY2VHcmFwaGljOjpkdW1wKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCShyZXZpc2lvbiA2NTQ0
OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsMTUgKzMwNyw2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmUKICAgICAgICAgICAgICAgICAgIGNhbnZhcy0+d2lkdGgo
KSwgY2FudmFzLT5oZWlnaHQoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250
ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiZWdpblBhaW50KENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCgpCi17Ci19Ci0KIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAogewogICAgIHJldHVybiBm
YWxzZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
M0RRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcAkocmV2aXNpb24gNjU0NDgpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MTIsMTUgKzUxMiw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmUK
ICAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpiZWdpblBhaW50KENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQpCi17Ci0gICAgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZW5kUGFpbnQoKQotewotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0KQogewogICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dFF0LmNwcAkocmV2aXNpb24gNjU0NDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxMywyMyArMTIx
Myw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0RWxsaXBzZUluUmUKICAgICB9CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJl
Y3QmIGZsb2F0UmVjdCwgY29uc3QgSW1hZ2VCdWZmZXIqIGltYWdlKQotewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFFQaXhtYXAqIG5hdGl2ZUlt
YWdlID0gaW1hZ2UtPmltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAg
aWYgKCFuYXRpdmVJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCByZWN0KGZs
b2F0UmVjdCk7Ci0gICAgUVBpeG1hcCBhbHBoYU1hc2sgPSAqbmF0aXZlSW1hZ2U7Ci0gICAgaWYg
KGFscGhhTWFzay53aWR0aCgpICE9IHJlY3Qud2lkdGgoKSB8fCBhbHBoYU1hc2suaGVpZ2h0KCkg
IT0gcmVjdC5oZWlnaHQoKSkKLSAgICAgICAgYWxwaGFNYXNrID0gYWxwaGFNYXNrLnNjYWxlZChy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotCi0gICAgbV9kYXRhLT5sYXllcnMucHVzaChu
ZXcgVHJhbnNwYXJlbmN5TGF5ZXIobV9kYXRhLT5wKCksIG1fZGF0YS0+cCgpLT50cmFuc2Zvcm0o
KS5tYXBSZWN0KHJlY3QpLCAxLjAsIGFscGhhTWFzaykpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGhpY2tuZXNzKQog
ewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlckRhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyRGF0
YS5oCShyZXZpc2lvbiA2NTQ0OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1h
Z2VCdWZmZXJEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDkgQEAKICNpZm5kZWYg
SW1hZ2VCdWZmZXJEYXRhX2gKICNkZWZpbmUgSW1hZ2VCdWZmZXJEYXRhX2gKIAorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJJbWFnZS5oIgorCiAjaW5jbHVkZSA8UVBhaW50ZXI+
CiAjaW5jbHVkZSA8UVBpeG1hcD4KIApAQCAtNDEsNiArNDQsNyBAQCBwdWJsaWM6CiAKICAgICBR
UGl4bWFwIG1fcGl4bWFwOwogICAgIE93blB0cjxRUGFpbnRlcj4gbV9wYWludGVyOworICAgIFJl
ZlB0cjxJbWFnZT4gbV9pbWFnZTsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHJl
dmlzaW9uIDY1NDQ4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZl
clF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkltYWdl
RGF0YS5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJTdGlsbElt
YWdlUXQuaCIKKyNpbmNsdWRlICJUcmFuc3BhcmVuY3lMYXllci5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogI2luY2x1ZGUgPFFCdWZmZXI+CkBAIC03NCw2ICs3NSw4IEBAIElt
YWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEkKICAgICBicnVzaC5zZXRDb2xv
cihRdDo6YmxhY2spOwogICAgIHBhaW50ZXItPnNldEJydXNoKGJydXNoKTsKICAgICBwYWludGVy
LT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VPdmVy
KTsKKyAgICAKKyAgICBtX2RhdGEubV9pbWFnZSA9IFN0aWxsSW1hZ2U6OmNyZWF0ZUZvclJlbmRl
cmluZygmbV9kYXRhLm1fcGl4bWFwKTsKIH0KIAogSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNv
bnN0IEludFNpemUmIHNpemUsIEltYWdlQ29sb3JTcGFjZSwgYm9vbCYgc3VjY2VzcykKQEAgLTk4
LDI0ICsxMDEsNTAgQEAgR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIAog
ICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9CiAKLUltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1h
Z2VGb3JSZW5kZXJpbmcoKSBjb25zdAorYm9vbCBJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2luZ0NvcHko
KSBjb25zdAogewotICAgIGlmICghbV9pbWFnZSkKLSAgICAgICAgbV9pbWFnZSA9IFN0aWxsSW1h
Z2U6OmNyZWF0ZUZvclJlbmRlcmluZygmbV9kYXRhLm1fcGl4bWFwKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CiAKLSAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKK1Bhc3NSZWZQdHI8SW1hZ2U+IElt
YWdlQnVmZmVyOjpjb3B5SW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBTdGlsbEltYWdlOjpj
cmVhdGUobV9kYXRhLm1fcGl4bWFwKTsKIH0KIAotSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZSgp
IGNvbnN0Cit2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogZGVzdENvbnRl
eHQsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsCisgICAgICAgICAgICAgICAgICAgICAgIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsKLSAgICBpZiAoIW1f
aW1hZ2UpIHsKLSAgICAgICAgLy8gSXQncyBhc3N1bWVkIHRoYXQgaWYgaW1hZ2UoKSBpcyBjYWxs
ZWQsIHRoZSBhY3R1YWwgcmVuZGVyaW5nIHRvIHRoZQotICAgICAgICAvLyBHcmFwaGljc0NvbnRl
eHQgbXVzdCBiZSBkb25lLgotICAgICAgICBBU1NFUlQoY29udGV4dCgpKTsKLSAgICAgICAgbV9p
bWFnZSA9IFN0aWxsSW1hZ2U6OmNyZWF0ZShtX2RhdGEubV9waXhtYXApOwotICAgIH0KKyAgICBp
ZiAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSB7CisgICAgICAgIC8vIFdlJ3JlIGRyYXdpbmcg
aW50byBvdXIgb3duIGJ1ZmZlci4gIEluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmssIHdlIG5lZWQg
dG8gY29weSB0aGUgc291cmNlIGJ1ZmZlciBmaXJzdC4KKyAgICAgICAgUmVmUHRyPEltYWdlPiBj
b3B5ID0gY29weUltYWdlKCk7CisgICAgICAgIGRlc3RDb250ZXh0LT5kcmF3SW1hZ2UoY29weS5n
ZXQoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFs
aXR5U2NhbGUpOworICAgIH0gZWxzZQorICAgICAgICBkZXN0Q29udGV4dC0+ZHJhd0ltYWdlKG1f
ZGF0YS5tX2ltYWdlLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBv
cCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0KQoreworICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsKKyAgICAgICAgLy8g
V2UncmUgZHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLiAgSW4gb3JkZXIgZm9yIHRoaXMgdG8g
d29yaywgd2UgbmVlZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVmZmVyIGZpcnN0LgorICAgICAgICBS
ZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoKTsKKyAgICAgICAgY29weS0+ZHJhd1BhdHRl
cm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNv
bG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fZGF0YS5tX2lt
YWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKK30KKwordm9pZCBJbWFnZUJ1
ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZmxv
YXRSZWN0KQoreworICAgIFFQaXhtYXAqIG5hdGl2ZUltYWdlID0gbV9kYXRhLm1faW1hZ2UtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFuYXRpdmVJbWFnZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgSW50UmVjdCByZWN0KGZsb2F0UmVjdCk7CisgICAgUVBpeG1hcCBh
bHBoYU1hc2sgPSAqbmF0aXZlSW1hZ2U7CisgICAgaWYgKGFscGhhTWFzay53aWR0aCgpICE9IHJl
Y3Qud2lkdGgoKSB8fCBhbHBoYU1hc2suaGVpZ2h0KCkgIT0gcmVjdC5oZWlnaHQoKSkKKyAgICAg
ICAgYWxwaGFNYXNrID0gYWxwaGFNYXNrLnNjYWxlZChyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpOwogCi0gICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CisgICAgbV9kYXRhLT5sYXllcnMucHVz
aChuZXcgVHJhbnNwYXJlbmN5TGF5ZXIobV9kYXRhLT5wKCksIG1fZGF0YS0+cCgpLT50cmFuc2Zv
cm0oKS5tYXBSZWN0KHJlY3QpLCAxLjAsIGFscGhhTWFzaykpOwogfQogCiB2b2lkIEltYWdlQnVm
ZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tV
cFRhYmxlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29u
dGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAkocmV2aXNpb24gNjU0NDgpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1NiwxNyArNDU2LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdp
bmRSdWxlIAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUGF0aEFudGlBbGlhc2VkKHBhdGgp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBPUyhMSU5VWCkgfHwgT1MoV0lORE9XUykKLSAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+YmVnaW5MYXllckNsaXBwZWRUb0ltYWdlKHJlY3QsIGltYWdl
QnVmZmVyKTsKLSNlbmRpZgotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VC
dWZmZXJTa2lhLmNwcAkocmV2aXNpb24gNjU0NDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMjAgKzg3
LDM1IEBAIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSAKICAgICByZXR1
cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi1JbWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29u
c3QKK2Jvb2wgSW1hZ2VCdWZmZXI6OmRyYXdzVXNpbmdDb3B5KCkgY29uc3QKIHsKLSAgICBpZiAo
IW1faW1hZ2UpIHsKLSAgICAgICAgLy8gVGhpcyBjcmVhdGVzIGEgQ09QWSBvZiB0aGUgaW1hZ2Ug
YW5kIHdpbGwgY2FjaGUgdGhhdCBjb3B5LiBUaGlzIG1lYW5zCi0gICAgICAgIC8vIHRoYXQgaWYg
c3Vic2VxdWVudCBvcGVyYXRpb25zIHRha2UgcGxhY2Ugb24gdGhlIGNvbnRleHQsIG5laXRoZXIg
dGhlCi0gICAgICAgIC8vIGN1cnJlbnRseS1yZXR1cm5lZCBpbWFnZSwgbm9yIHRoZSByZXN1bHRz
IG9mIGZ1dHVyZSBpbWFnZSgpIGNhbGxzLAotICAgICAgICAvLyB3aWxsIGNvbnRhaW4gdGhhdCBv
cGVyYXRpb24uCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoaXMgc2VlbXMgc2lsbHksIGJ1dCBp
cyB0aGUgd2F5IHRoZSBDRyBwb3J0IHdvcmtzOiBpbWFnZSgpIGlzCi0gICAgICAgIC8vIGludGVu
ZGVkIHRvIGJlIHVzZWQgb25seSB3aGVuIHJlbmRlcmluZyBpcyAiY29tcGxldGUuIgotICAgICAg
ICBtX2ltYWdlID0gQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZSgKLSAgICAgICAg
ICAgICptX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuYml0bWFwKCkpOwotICAgIH0KLSAgICByZXR1
cm4gbV9pbWFnZS5nZXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxJbWFn
ZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJpdG1hcElt
YWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVhdGUoKm1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5iaXRt
YXAoKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Cit7CisjaWYgT1MoTElOVVgpIHx8IE9T
KFdJTkRPV1MpCisgICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmJlZ2luTGF5ZXJDbGlw
cGVkVG9JbWFnZShyZWN0LCB0aGlzKTsKKyNlbmRpZgorfQorCit2b2lkIEltYWdlQnVmZmVyOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVh
bGl0eVNjYWxlKQoreworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdlKCk7
CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlQ29weS5nZXQoKSwgc3R5bGVDb2xvclNwYWNl
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Cit9CisKK3ZvaWQg
SW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KQoreworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0g
Y29weUltYWdlKCk7CisgICAgaW1hZ2VDb3B5LT5kcmF3UGF0dGVybihjb250ZXh0LCBzcmNSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3Qp
OwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29u
c3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHJldmlzaW9uIDY1NDQ4KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3OCwxMSArMzc4LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNh
bnZhc0NsaXAoY29uc3QgUAogICAgIGNsaXAocGF0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZUJ1ZmZl
ciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogQWZmaW5lVHJhbnNmb3JtIEdyYXBo
aWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QKIHsgCiAjaWYgVVNFKFdYR0MpCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHJldmlzaW9u
IDY1NDQ4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODIsMTIgKzgyLDM2IEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6
dG9EYXRhVVJMKGNvbnN0IFN0cmkKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLUltYWdlKiBJ
bWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAorYm9vbCBJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2luZ0Nv
cHkoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitQYXNzUmVmUHRyPEltYWdlPiBJ
bWFnZUJ1ZmZlcjo6Y29weUltYWdlKCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
ICAgIHJldHVybiAwOwogfQogCit2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsCisgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKK3sKKyAgICBSZWZQdHI8SW1hZ2U+IGlt
YWdlQ29weSA9IGNvcHlJbWFnZSgpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZUNvcHku
Z2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFs
aXR5U2NhbGUpOworfQorCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICBSZWZQ
dHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcHlJbWFnZSgpOworICAgIGltYWdlQ29weS0+ZHJhd1Bh
dHRlcm4oY29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29s
b3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKK30KKwogdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1U
cmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+JikKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0J
KHJldmlzaW9uIDY1NDQ4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM5Niw3ICszOTYsNyBAQCBib29sIFNjcm9sbGJhclRo
ZW1lTWFjOjpwYWludChTY3JvbGxiYXIqCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgCiAgICAgICAgIEhJVGhlbWVEcmF3VHJhY2soJnRyYWNrSW5mbywgMCwgaW1hZ2VCdWZmZXIt
PmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCksIGtISVRoZW1lT3JpZW50YXRpb25Ob3JtYWwp
OwotICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2VCdWZmZXItPmltYWdlKCksIERldmlj
ZUNvbG9yU3BhY2UsIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7CisgICAgICAg
IGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5nZXQoKSwgRGV2aWNlQ29sb3JT
cGFjZSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5sb2NhdGlvbigpKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAJKHJldmlzaW9uIDY1NDQ4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzEsNyArNTMxLDcgQEAgdm9pZCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZQogICAgICAgICAKICAgICAgICAgLy8gVGhl
IG1hc2sgaGFzIGJlZW4gY3JlYXRlZC4gIE5vdyB3ZSBqdXN0IG5lZWQgdG8gY2xpcCB0byBpdC4K
ICAgICAgICAgY29udGV4dC0+c2F2ZSgpOwotICAgICAgICBjb250ZXh0LT5jbGlwVG9JbWFnZUJ1
ZmZlcihtYXNrUmVjdCwgbWFza0ltYWdlLmdldCgpKTsKKyAgICAgICAgY29udGV4dC0+Y2xpcFRv
SW1hZ2VCdWZmZXIobWFza0ltYWdlLmdldCgpLCBtYXNrUmVjdCk7CiAgICAgfQogICAgIAogICAg
IFN0eWxlSW1hZ2UqIGJnID0gYmdMYXllci0+aW1hZ2UoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkocmV2aXNpb24gNjU0NDgpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6
OmFwcGx5Q2xpcAogICAgIGlmICghY2xpcHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGNvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKHJlcGFpbnRS
ZWN0LCBjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJbWFnZS5nZXQoKSk7CisgICAgY29udGV4dC0+Y2xp
cFRvSW1hZ2VCdWZmZXIoY2xpcHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UuZ2V0KCksIHJlcGFpbnRS
ZWN0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAkocmV2aXNpb24gNjU0NDgpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3MCw3ICsyNzAsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlS
CiAjaWYgIVBMQVRGT1JNKENHKQogICAgICAgICAgICAgcmVzdWx0SW1hZ2UtPnRyYW5zZm9ybUNv
bG9yU3BhY2UoTGluZWFyUkdCLCBEZXZpY2VSR0IpOwogI2VuZGlmCi0gICAgICAgICAgICBjb250
ZXh0LT5kcmF3SW1hZ2UocmVzdWx0SW1hZ2UtPmltYWdlKCksIG9iamVjdC0+c3R5bGUoKS0+Y29s
b3JTcGFjZSgpLCBsYXN0RWZmZWN0LT5zdWJSZWdpb24oKSk7CisgICAgICAgICAgICBjb250ZXh0
LT5kcmF3SW1hZ2VCdWZmZXIocmVzdWx0SW1hZ2UsIG9iamVjdC0+c3R5bGUoKS0+Y29sb3JTcGFj
ZSgpLCBsYXN0RWZmZWN0LT5zdWJSZWdpb24oKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAkocmV2
aXNpb24gNjU0NDgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsMTQgKzI5NywxNSBAQCBQYXNzT3duUHRyPElt
YWdlQnVmZmVyPiBSZW5kZXJTVkdSZXNvdXJjCiAKIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuOjpidWlsZFBhdHRlcm4oUGF0dGVybkRhdGEqIHBhdHRlcm5EYXRhLCBQYXNzT3duUHRyPElt
YWdlQnVmZmVyPiB0aWxlSW1hZ2UpIGNvbnN0CiB7Ci0gICAgaWYgKCF0aWxlSW1hZ2UtPmltYWdl
KCkpIHsKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcGllZEltYWdlID0gdGlsZUltYWdlLT5jb3B5SW1h
Z2UoKTsKKyAgICBpZiAoIWNvcGllZEltYWdlKSB7CiAgICAgICAgIHBhdHRlcm5EYXRhLT5wYXR0
ZXJuID0gMDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIEludFJlY3QgdGlsZVJlY3Qg
PSB0aWxlSW1hZ2UtPmltYWdlKCktPnJlY3QoKTsKKyAgICAKKyAgICBJbnRSZWN0IHRpbGVSZWN0
ID0gY29waWVkSW1hZ2UtPnJlY3QoKTsKICAgICBpZiAodGlsZVJlY3Qud2lkdGgoKSA8PSBwYXR0
ZXJuRGF0YS0+Ym91bmRhcmllcy53aWR0aCgpICYmIHRpbGVSZWN0LmhlaWdodCgpIDw9IHBhdHRl
cm5EYXRhLT5ib3VuZGFyaWVzLmhlaWdodCgpKSB7Ci0gICAgICAgIHBhdHRlcm5EYXRhLT5wYXR0
ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZS0+aW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7Cisg
ICAgICAgIHBhdHRlcm5EYXRhLT5wYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKGNvcGllZEltYWdl
LCB0cnVlLCB0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzMwLDEzICszMzEs
MTMgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmJ1aWxkUGF0dAogICAgICAgICBu
ZXdUaWxlSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoMCwgcGF0dGVybkRhdGEtPmJvdW5kYXJpZXMu
aGVpZ2h0KCkpOwogICAgICAgICBmb3IgKGludCBqID0gbnVtWDsgaiA+IDA7IC0taikgewogICAg
ICAgICAgICAgbmV3VGlsZUltYWdlQ29udGV4dC0+dHJhbnNsYXRlKHBhdHRlcm5EYXRhLT5ib3Vu
ZGFyaWVzLndpZHRoKCksIDApOwotICAgICAgICAgICAgbmV3VGlsZUltYWdlQ29udGV4dC0+ZHJh
d0ltYWdlKHRpbGVJbWFnZS0+aW1hZ2UoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCB0aWxlUmVj
dCwgdGlsZVJlY3QpOworICAgICAgICAgICAgbmV3VGlsZUltYWdlQ29udGV4dC0+ZHJhd0ltYWdl
KGNvcGllZEltYWdlLmdldCgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIHRpbGVSZWN0LCB0aWxl
UmVjdCk7CiAgICAgICAgIH0KICAgICAgICAgbmV3VGlsZUltYWdlQ29udGV4dC0+dHJhbnNsYXRl
KC1wYXR0ZXJuRGF0YS0+Ym91bmRhcmllcy53aWR0aCgpICogbnVtWCwgMCk7CiAgICAgfQogICAg
IG5ld1RpbGVJbWFnZUNvbnRleHQtPnJlc3RvcmUoKTsKIAotICAgIHBhdHRlcm5EYXRhLT5wYXR0
ZXJuID0gUGF0dGVybjo6Y3JlYXRlKG5ld1RpbGVJbWFnZS0+aW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7
CisgICAgcGF0dGVybkRhdGEtPnBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUobmV3VGlsZUltYWdl
LT5jb3B5SW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiA2NTQ0OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05NjMsNyArOTYzLDggQEAgYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0JhcihSZQogICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+dHJhbnNsYXRlKDIgKiByZWN0LngoKSArIHJlY3Qud2lkdGgoKSwgMCk7CiAgICAgICAg
IHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoLTEsIDEpKTsKICAgICB9Ci0gICAg
cGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFnZShpbWFnZUJ1ZmZlci0+aW1hZ2UoKSwgRGV2aWNl
Q29sb3JTcGFjZSwgcmVjdC5sb2NhdGlvbigpKTsKKyAgICAKKyAgICBwYWludEluZm8uY29udGV4
dC0+ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLmdldCgpLCBEZXZpY2VDb2xvclNwYWNlLCBy
ZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKICAg
ICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRv
b2xzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRv
b2xzLmNwcAkocmV2aXNpb24gNjU0NDgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbWFnZUJ1
ZmZlclRvb2xzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCB2b2lkIFNWR0lt
YWdlQnVmZmVyVG9vbHM6OmNsaXBUb0ltYWdlQnVmCiAgICAgLy8gVGhlIG1hc2sgaW1hZ2UgaGFz
IGJlZW4gY3JlYXRlZCBpbiB0aGUgZGV2aWNlIGNvb3JkaW5hdGUgc3BhY2UsIGFzIHRoZSBpbWFn
ZSBzaG91bGQgbm90IGJlIHNjYWxlZC4KICAgICAvLyBTbyB0aGUgYWN0dWFsIG1hc2tpbmcgcHJv
Y2VzcyBoYXMgdG8gYmUgZG9uZSBpbiB0aGUgZGV2aWNlIGNvb3JkaW5hdGUgc3BhY2UgYXMgd2Vs
bC4KICAgICBjb250ZXh0LT5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zvcm0uaW52ZXJzZSgpKTsK
LSAgICBjb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihhYnNvbHV0ZVRhcmdldFJlY3QsIGltYWdl
QnVmZmVyKTsKKyAgICBjb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgYWJz
b2x1dGVUYXJnZXRSZWN0KTsKICAgICBjb250ZXh0LT5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zv
cm0pOwogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NTQ0
OCkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM3LDcgKzEzNyw3IEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUltYWdlRWxl
bWUKICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6cmVuZGVyU3VidHJlZVRvSW1hZ2UobV90YXJn
ZXRJbWFnZS5nZXQoKSwgcmVuZGVyZXIpOwogICAgIH0KIAotICAgIHJldHVybiBGRUltYWdlOjpj
cmVhdGUobV90YXJnZXRJbWFnZSA/IG1fdGFyZ2V0SW1hZ2UtPmltYWdlKCkgOiBtX2NhY2hlZElt
YWdlLT5pbWFnZSgpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOworICAgIHJldHVybiBGRUltYWdl
OjpjcmVhdGUobV90YXJnZXRJbWFnZSA/IG1fdGFyZ2V0SW1hZ2UtPmNvcHlJbWFnZSgpIDogbV9j
YWNoZWRJbWFnZS0+aW1hZ2UoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKIH0KIAogdm9pZCBT
VkdGRUltYWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0
PEtVUkw+JiB1cmxzKSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2
aXNpb24gNjU0NDgpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyMSwxMiArMjIxLDEzIEBAIE5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpu
YXRpdmVJbWFnZUZvckMKICAgICBpZiAoIW1fZnJhbWVDYWNoZSkgewogICAgICAgICBpZiAoIW1f
cGFnZSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBtX2ZyYW1lQ2FjaGUgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSk7Ci0gICAgICAgIGlmICghbV9mcmFtZUNhY2hlKSAvLyBm
YWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UKKyAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSk7CisgICAgICAgIGlmICghYnVmZmVyKSAv
LyBmYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICBkcmF3KG1fZnJhbWVDYWNoZS0+Y29udGV4dCgpLCByZWN0KCksIHJlY3QoKSwgRGV2aWNlQ29s
b3JTcGFjZSwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgICAgIGRyYXcoYnVmZmVyLT5jb250
ZXh0KCksIHJlY3QoKSwgcmVjdCgpLCBEZXZpY2VDb2xvclNwYWNlLCBDb21wb3NpdGVTb3VyY2VP
dmVyKTsKKyAgICAgICAgbV9mcmFtZUNhY2hlID0gYnVmZmVyLT5jb3B5SW1hZ2UoKTsKICAgICB9
Ci0gICAgcmV0dXJuIG1fZnJhbWVDYWNoZS0+aW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKKyAgICByZXR1cm4gbV9mcmFtZUNhY2hlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOwogfQogCiBib29sIFNWR0ltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNl
aXZlZCkKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gNjU0NDgpCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICsz
Myw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEltYWdlQnVmZmVyOwog
ICAgIGNsYXNzIFBhZ2U7CiAgICAgY2xhc3MgU1ZHSW1hZ2VDaHJvbWVDbGllbnQ7CiAgICAgCkBA
IC03Miw3ICs3MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIE93
blB0cjxTVkdJbWFnZUNocm9tZUNsaWVudD4gbV9jaHJvbWVDbGllbnQ7CiAgICAgICAgIE93blB0
cjxQYWdlPiBtX3BhZ2U7Ci0gICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9mcmFtZUNhY2hl
OworICAgICAgICBSZWZQdHI8SW1hZ2U+IG1fZnJhbWVDYWNoZTsKICAgICB9OwogfQogCkluZGV4
OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAJKHJldmlzaW9u
IDY1NDQ4KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCB2b2lkIEZFTWVyZ2U6OmFwcGx5KEZpbHRl
ciogZmlsdGVyKQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWVyZ2VJbnB1dHMu
c2l6ZSgpOyBpKyspIHsKICAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gY2FsY3VsYXRlRHJh
d2luZ1JlY3QobV9tZXJnZUlucHV0c1tpXS0+c2NhbGVkU3ViUmVnaW9uKCkpOwotICAgICAgICBm
aWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9tZXJnZUlucHV0c1tpXS0+cmVzdWx0SW1hZ2UoKS0+
aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QpOworICAgICAgICBmaWx0ZXJDb250
ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9tZXJnZUlucHV0c1tpXS0+cmVzdWx0SW1hZ2UoKSwgRGV2
aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAJKHJldmlzaW9uIDY1NDQ4KQorKysg
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBGRU9mZnNldDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbi0+c2NhbGVkU3ViUmVnaW9u
KCkud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luLT5zY2Fs
ZWRTdWJSZWdpb24oKS5oZWlnaHQoKSk7CiAKLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2Uo
bV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZHN0UmVjdCk7
CisgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCks
IERldmljZUNvbG9yU3BhY2UsIGRzdFJlY3QpOwogfQogCiB2b2lkIEZFT2Zmc2V0OjpkdW1wKCkK
SW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAJKHJldmlz
aW9uIDY1NDQ4KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03Miw4ICs3Miw4IEBAIHZvaWQgRkVUaWxlOjphcHBseShGaWx0
ZXIqIGZpbHRlcikKIAogICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gdGlsZUltYWdlID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZSh0aWxlUmVjdC5zaXplKCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCogdGls
ZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOwotICAgIHRpbGVJbWFnZUNvbnRl
eHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNw
YWNlLCBJbnRQb2ludCgpKTsKLSAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybiA9IFBhdHRlcm46
OmNyZWF0ZSh0aWxlSW1hZ2UtPmltYWdlKCksIHRydWUsIHRydWUpOworICAgIHRpbGVJbWFnZUNv
bnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNw
YWNlLCBJbnRQb2ludCgpKTsKKyAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybiA9IFBhdHRlcm46
OmNyZWF0ZSh0aWxlSW1hZ2UtPmNvcHlJbWFnZSgpLCB0cnVlLCB0cnVlKTsKIAogICAgIEFmZmlu
ZVRyYW5zZm9ybSBtYXRyaXg7CiAgICAgbWF0cml4LnRyYW5zbGF0ZShtX2luLT5zY2FsZWRTdWJS
ZWdpb24oKS54KCkgLSBzY2FsZWRTdWJSZWdpb24oKS54KCksIG1faW4tPnNjYWxlZFN1YlJlZ2lv
bigpLnkoKSAtIHNjYWxlZFN1YlJlZ2lvbigpLnkoKSk7Cg==
</data>
<flag name="review"
          id="53103"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>