<?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>43864</bug_id>
          
          <creation_ts>2010-08-11 11:19:35 -0700</creation_ts>
          <short_desc>[chromium] Canvas2D does not support images larger than system&apos;s GPU max texture size</short_desc>
          <delta_ts>2010-08-19 09:41:08 -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>Layout and Rendering</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="Vincent Scheib">scheib</reporter>
          <assigned_to name="Vincent Scheib">scheib</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>jamesr</cc>
    
    <cc>levin</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>263349</commentid>
    <comment_count>0</comment_count>
    <who name="Vincent Scheib">scheib</who>
    <bug_when>2010-08-11 11:19:35 -0700</bug_when>
    <thetext>GPU acceleration of Canvas2D is limited by the maximum size of a texture that can be manipulated by a GPU. Source images must be split into tiles and managed as if they were logically one large image.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263361</commentid>
    <comment_count>1</comment_count>
      <attachid>64139</attachid>
    <who name="Vincent Scheib">scheib</who>
    <bug_when>2010-08-11 11:45:10 -0700</bug_when>
    <thetext>Created attachment 64139
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263363</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-11 11:47:40 -0700</bug_when>
    <thetext>Attachment 64139 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
/tests/TilingDataTest.cpp:185:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:186:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:187:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:188:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:190:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:191:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:192:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:193:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:194:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:196:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:197:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:201:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:202:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:204:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:205:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:206:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:207:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:209:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:210:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:211:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:212:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:214:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:215:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:216:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:217:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:218:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:220:  Extra space after ( in function call  [whitespace/parens] [4]
WebKit/chromium/tests/TilingDataTest.cpp:221:  Extra space after ( in function call  [whitespace/parens] [4]
Total errors found: 141 in 8 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>263465</commentid>
    <comment_count>3</comment_count>
      <attachid>64164</attachid>
    <who name="Vincent Scheib">scheib</who>
    <bug_when>2010-08-11 14:50:53 -0700</bug_when>
    <thetext>Created attachment 64164
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263466</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-11 14:51:55 -0700</bug_when>
    <thetext>Attachment 64164 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/tests/TilingDataTest.cpp:33:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 12 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>263535</commentid>
    <comment_count>5</comment_count>
      <attachid>64177</attachid>
    <who name="Vincent Scheib">scheib</who>
    <bug_when>2010-08-11 17:41:29 -0700</bug_when>
    <thetext>Created attachment 64177
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263538</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-11 17:46:31 -0700</bug_when>
    <thetext>Attachment 64177 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/tests/TilingDataTest.cpp:33:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 12 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>263545</commentid>
    <comment_count>7</comment_count>
      <attachid>64177</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-11 18:12:21 -0700</bug_when>
    <thetext>Comment on attachment 64177
Patch

&gt; diff --git a/WebCore/platform/graphics/chromium/GLES2Canvas.cpp b/WebCore/platform/graphics/chromium/GLES2Canvas.cpp
&gt;  
&gt; +    m_context-&gt;vertexAttribPointer(m_texPositionLocation, 3, GraphicsContext3D::FLOAT, false, 0, 0);
&gt; +
&gt; +    m_context-&gt;enableVertexAttribArray(m_texPositionLocation);
&gt; +
&gt; +    const TilingData&amp; tiles = texture-&gt;tiles();
&gt; +    IntRect tileIdxRect = tiles.overlappedTileIndices(srcRect);
&gt; +
&gt; +    for (int y = tileIdxRect.y(); y &lt;= tileIdxRect.bottom(); y++)
&gt; +        for (int x = tileIdxRect.x(); x &lt;= tileIdxRect.right(); x++)
&gt; +            drawTexturedRectTile(texture, tiles.tileIndex(x, y), srcRect, dstRect, transform);
&gt; +}
&gt; +
&gt; +void GLES2Canvas::drawTexturedRectTile(GLES2Texture* texture, int tile, const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, const AffineTransform&amp; transform)
&gt; +{
&gt; +    if (dstRect.isEmpty())
&gt; +        return;
&gt; +
&gt; +    const TilingData tiles = texture-&gt;tiles();

It&apos;s strange that we grab texture-&gt;tiles() in drawTexturedRect(), then call drawTexturedRectTile() which then grabs texture-&gt;tiles() again.  Feels like we should only do this once.

Also, did you mean to copy TilingData here or did you mean const TilingData&amp; tiles = ...?  I feel more likely the latter.

&gt; +
&gt; +    texture-&gt;bindTile(tile);
&gt; +
&gt; +    FloatRect srcRectClippedInTileSpace;
&gt; +    FloatRect dstRectIntersected;
&gt; +    tiles.intersectDrawQuad(srcRect, dstRect, tile, srcRectClippedInTileSpace, dstRectIntersected);

Please make intersectDrawQuad() take its out parameters by pointer rather than non-const reference so that it&apos;s easier to tell at this callsite which parameters are being modified by the function.

&gt; diff --git a/WebCore/platform/graphics/chromium/GLES2Texture.cpp b/WebCore/platform/graphics/chromium/GLES2Texture.cpp
&gt; index 5e8a141dd282f294413a851f124ba80df7fd1d40..9ebbc78d19b7d867aede16fb7ab38ca8b48c0ce3 100644
&gt; --- a/WebCore/platform/graphics/chromium/GLES2Texture.cpp
&gt; +++ b/WebCore/platform/graphics/chromium/GLES2Texture.cpp
&gt; @@ -35,42 +35,61 @@
&gt;  #include &quot;GLES2Texture.h&quot;
&gt;  
&gt;  #include &quot;GraphicsContext3D.h&quot;
&gt; -
&gt; +#include &quot;IntRect.h&quot;
&gt;  #include &lt;wtf/OwnArrayPtr.h&gt;
&gt;  
&gt;  namespace WebCore {
&gt;  
&gt; -GLES2Texture::GLES2Texture(GraphicsContext3D* context, unsigned textureId, Format format, int width, int height)
&gt; +
&gt; +GLES2Texture::GLES2Texture(GraphicsContext3D* context, const Vector&lt;unsigned int&gt;&amp; tileTextureIds, Format format, int width, int height, int maxTextureSize)
&gt;      : m_context(context)
&gt; -    , m_textureId(textureId)
&gt;      , m_format(format)
&gt; -    , m_width(width)
&gt; -    , m_height(height)
&gt; +    , m_tiles(maxTextureSize, width, height, true)

It looks like we always set the borderTexels parameter to &apos;true&apos; currently (outside of test code).  Will we ever set this to false?  If we aren&apos;t then it might be simpler to drop the parameter.

&gt;  PassRefPtr&lt;GLES2Texture&gt; GLES2Texture::create(GraphicsContext3D* context, Format format, int width, int height)

&gt; +    TilingData tiling(maxTextureSize, width, height, true);
&gt; +    int numTiles = tiling.numTiles();
&gt; +
&gt; +    Vector&lt;unsigned int&gt; textureIds(numTiles);

Nit: it&apos;s kind of a bummer to stack-allocate a vector, populate it with a bunch of values, and then in the TilingData constructor do a deep copy of this vector into another vector and then throw the stack-allocated one away.  I think it&apos;d be nicer to have GLES2Texture have an OwnPtr&lt;Vector&lt;...&gt; &gt; and pass in a heap-allocated vector so we only have to fill it out once.  Same goes for TilingData.


&gt; +    textureIds.fill(0, numTiles);
&gt; +    for (int i = 0; i &lt; numTiles; i++)
&gt; +         textureIds[i] = context-&gt;createTexture();
&gt; +
&gt; +    for (int i = 0; i &lt; numTiles; i++) {
&gt; +        unsigned int textureId = textureIds.begin()[i];

Not sure why we have two loops from i..numTiles here.  Also, I think the .begin() here is spurious - looks like you want textureIds[i].

&gt; +        if (!textureId) {
Should probably check for this at createTexture() time.

&gt; +            for (int i = 0; i &lt; numTiles; i++)
&gt; +                context-&gt;deleteTexture(textureIds[i]);
&gt; +            return 0;
&gt; +        }
&gt;  
&gt; -    return adoptRef(new GLES2Texture(context, textureId, format, width, height));
&gt; +        IntRect tileBoundsWithBorder = tiling.tileBoundsWithBorder(i);
&gt; +
&gt; +        context-&gt;bindTexture(GraphicsContext3D::TEXTURE_2D, textureId);
&gt; +        context-&gt;texImage2D(GraphicsContext3D::TEXTURE_2D,
&gt; +            0,
&gt; +            GraphicsContext3D::RGBA,
&gt; +            tileBoundsWithBorder.width(),
&gt; +            tileBoundsWithBorder.height(),
&gt; +            0,
&gt; +            GraphicsContext3D::RGBA,
&gt; +            GraphicsContext3D::UNSIGNED_BYTE,
&gt; +            0);

I think it&apos;s more efficient to go ahead and set the texParameter()s we want for this texture here rather than setting them on every bindTexture().

&gt; +    }
&gt; +    return adoptRef(new GLES2Texture(context, textureIds, format, width, height, maxTextureSize));
&gt;  }
&gt;  
&gt;  static void convertFormat(GLES2Texture::Format format, unsigned int* glFormat, unsigned int* glType, bool* swizzle)
&gt; @@ -94,31 +113,65 @@ static void convertFormat(GLES2Texture::Format format, unsigned int* glFormat, u
&gt;      }
&gt;  }
&gt;  
&gt;  void GLES2Texture::load(void* pixels)
&gt;  {
&gt; +    uint32_t* pixels32 = static_cast&lt;uint32_t*&gt;(pixels);
&gt;      unsigned int glFormat, glType;
&gt;      bool swizzle;
&gt;      convertFormat(m_format, &amp;glFormat, &amp;glType, &amp;swizzle);
&gt; -    m_context-&gt;bindTexture(GraphicsContext3D::TEXTURE_2D, m_textureId);
&gt;      if (swizzle) {
&gt;          ASSERT(glFormat == GraphicsContext3D::RGBA &amp;&amp; glType == GraphicsContext3D::UNSIGNED_BYTE);
&gt;          // FIXME:  This could use PBO&apos;s to save doing an extra copy here.
&gt; -        int size = m_width * m_height;
&gt; -        unsigned* pixels32 = static_cast&lt;unsigned*&gt;(pixels);
&gt; -        OwnArrayPtr&lt;unsigned&gt; buf(new unsigned[size]);
&gt; -        unsigned* bufptr = buf.get();
&gt; -        for (int i = 0; i &lt; size; ++i) {
&gt; -            unsigned pixel = pixels32[i];
&gt; -            bufptr[i] = pixel &amp; 0xFF00FF00 | ((pixel &amp; 0x00FF0000) &gt;&gt; 16) | ((pixel &amp; 0x000000FF) &lt;&lt; 16);
&gt; -        }
&gt; -        m_context-&gt;texSubImage2D(GraphicsContext3D::TEXTURE_2D, 0, 0, 0, m_width, m_height, glFormat, glType, buf.get());
&gt; -    } else
&gt; -        m_context-&gt;texSubImage2D(GraphicsContext3D::TEXTURE_2D, 0, 0, 0, m_width, m_height, glFormat, glType, pixels);
&gt; +    }
&gt; +    uint32_t* tempBuff = new uint32_t[m_tiles.maxTextureSize()*m_tiles.maxTextureSize()];

Use an OwnArrayPtr&lt;&gt; here to avoid having to do the delete[].  This&apos;ll save us from memory leaks if we have to early-out of this function in the future.

&gt; +
&gt; +    for (int i = 0; i &lt; m_tiles.numTiles(); i++) {
&gt; +        IntRect tileBoundsWithBorder = m_tiles.tileBoundsWithBorder(i);
&gt; +
&gt; +        uint32_t* uploadBuff = 0;
&gt; +        if (swizzle)
&gt; +            uploadBuff = copySubRect&lt;true&gt;(
&gt; +            pixels32, tileBoundsWithBorder.x(), tileBoundsWithBorder.y(),
&gt; +            tempBuff, tileBoundsWithBorder.width(), tileBoundsWithBorder.height(), m_tiles.totalSizeX());
&gt; +        else
&gt; +            uploadBuff = copySubRect&lt;false&gt;(
&gt; +            pixels32, tileBoundsWithBorder.x(), tileBoundsWithBorder.y(),
&gt; +            tempBuff, tileBoundsWithBorder.width(), tileBoundsWithBorder.height(), m_tiles.totalSizeX());
&gt; +
&gt; +        m_context-&gt;bindTexture(GraphicsContext3D::TEXTURE_2D, m_tileTextureIds[i]);
&gt; +        m_context-&gt;texSubImage2D(GraphicsContext3D::TEXTURE_2D, 0, 0, 0,
&gt; +            tileBoundsWithBorder.width(),
&gt; +            tileBoundsWithBorder.height(), glFormat, glType, uploadBuff);
&gt; +    }
&gt; +
&gt; +    delete[] tempBuff;
&gt;  }
&gt; diff --git a/WebCore/platform/graphics/chromium/GLES2Texture.h b/WebCore/platform/graphics/chromium/GLES2Texture.h
&gt;      void load(void* pixels);
&gt;      Format format() const { return m_format; }
&gt; -    int width() const { return m_width; }
&gt; -    int height() const { return m_height; }

I think we still want to have width()/height() exposed on GLES2Texture (even if they just call to TilingData under the hood).

&gt; +    const TilingData&amp; tiles() const { return m_tiles; }
&gt;  private:
&gt; -    GLES2Texture(GraphicsContext3D*, unsigned textureId, Format, int width, int height);
&gt; +    GLES2Texture(GraphicsContext3D*, const Vector&lt;unsigned int&gt;&amp; tileTextureIds, Format format, int width, int height, int maxTextureSize);
&gt;      GraphicsContext3D* m_context;
&gt; -    unsigned m_textureId;
&gt;      Format m_format;
&gt; -    int m_width;
&gt; -    int m_height;
&gt; +    TilingData m_tiles;
&gt; +    Vector&lt;unsigned int&gt; m_tileTextureIds;
&gt;  };
&gt;  
&gt;  }
&gt; diff --git a/WebCore/platform/graphics/chromium/TilingData.cpp b/WebCore/platform/graphics/chromium/TilingData.cpp
&gt; +IntRect TilingData::tileBoundsWithBorder(int tile) const
&gt; +{
&gt; +    IntRect bounds = tileBounds(tile);
&gt; +
&gt; +    if (m_borderTexels) {
&gt; +        int x1 = bounds.x();
&gt; +        int x2 = bounds.right();
&gt; +        int y1 = bounds.y();
&gt; +        int y2 = bounds.bottom();
&gt; +
&gt; +        if (tileXIndex(tile) &gt; 0)
&gt; +            x1--;

If m_borderTexels is an arbitrary int, don&apos;t we want to do x1 -= m_borderTexels;?  I may not be following the math perfectly.  If m_borderTexels is only ever 0 or 1 it should be a bool.

&gt; +        if (tileXIndex(tile) &lt; (numTilesX()-1))
&gt; +            x2++;
&gt; +        if (tileYIndex(tile) &gt; 0)
&gt; +            y1--;
&gt; +        if (tileYIndex(tile) &lt; (numTilesY()-1))
&gt; +            y2++;
&gt; +
&gt; +        bounds = IntRect(x1, y1, x2-x1, y2-y1);
&gt; +    }
&gt; +
&gt; +    return bounds;
&gt; +}
&gt; +
&gt; +IntRect TilingData::overlappedTileIndices(const WebCore::FloatRect &amp;srcRect) const
&gt; +{
&gt; +    return overlappedTileIndices(IntRect(
&gt; +        static_cast&lt;int&gt;(srcRect.x()),
&gt; +        static_cast&lt;int&gt;(srcRect.y()),
&gt; +        static_cast&lt;int&gt;(ceil(srcRect.width())),
&gt; +        static_cast&lt;int&gt;(ceil(srcRect.height()))));

There&apos;s an enclosingIntRect() function to go from FloatRect-&gt;IntRect that I believe does what you want here.  It&apos;s in FloatRect.h

&gt; +void TilingData::intersectDrawQuad(const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, int tile,
&gt; +                                   FloatRect&amp; newSrc, FloatRect&amp; newDst) const
&gt; +{
&gt; +    // Intersect with tile
&gt; +    FloatRect tileBounds = this-&gt;tileBounds(tile);
&gt; +    FloatRect srcRectIntersected = srcRect;
&gt; +    srcRectIntersected.intersect(tileBounds);
&gt; +
&gt; +    if (srcRectIntersected.isEmpty()) {
&gt; +        newSrc = newDst = FloatRect(0, 0, 0, 0);
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    float srcRectIntersectedNormX = (srcRectIntersected.x() - srcRect.x()) / srcRect.width();
&gt; +    float srcRectIntersectedNormY = (srcRectIntersected.y() - srcRect.y()) / srcRect.height();
&gt; +    float srcRectIntersectedNormW = srcRectIntersected.width() / srcRect.width();
&gt; +    float srcRectIntersectedNormH = srcRectIntersected.height() / srcRect.height();
&gt; +
&gt; +    newSrc = srcRectIntersected;
&gt; +    newSrc.move(-tileBounds.x(), -tileBounds.y());
&gt; +    if (m_borderTexels) {
&gt; +        if (tileXIndex(tile) &gt; 0)
&gt; +            newSrc.move(1, 0);

Is 1 a magic value, or is this supposed to be moved by m_borderTexels?

&gt; +        if (tileYIndex(tile) &gt; 0)
&gt; +            newSrc.move(0, 1);
&gt; +    }
&gt; +
&gt; +    newDst = FloatRect(
&gt; +        srcRectIntersectedNormX * dstRect.width() + dstRect.x(),
&gt; +        srcRectIntersectedNormY * dstRect.height() + dstRect.y(),
&gt; +        srcRectIntersectedNormW * dstRect.width(),
&gt; +        srcRectIntersectedNormH * dstRect.height());
&gt; +}
&gt; +
&gt; +}

&gt; diff --git a/WebCore/platform/graphics/chromium/TilingData.h b/WebCore/platform/graphics/chromium/TilingData.h

&gt; +class TilingData {

If possible, make this inherit from Noncopyable.  It&apos;s a cheap class to copy today, but it looks like we never need to copy this now and it&apos;s probably best to keep it that way in case the class has to grow.

&gt; +public:
&gt; +    TilingData(int maxTextureSize, int totalSizeX, int totalSizeY, bool borderTexels);
&gt; +    int maxTextureSize() const { return m_maxTextureSize; }
&gt; +    int totalSizeX() const { return m_totalSizeX; }
&gt; +    int totalSizeY() const { return m_totalSizeY; }
&gt; +
&gt; +    int numTiles() const { return numTilesX() * numTilesY(); }
&gt; +    int numTilesX() const { return m_numTilesX; }
&gt; +    int numTilesY() const { return m_numTilesY; }
&gt; +    int tileIndex(int x, int y) const { return x + y * numTilesX(); }
&gt; +    int tileXIndex(int tile) const { assertTile(tile); return tile % numTilesX(); }
&gt; +    int tileYIndex(int tile) const { assertTile(tile); return tile / numTilesX(); }
&gt; +    int tileXIndexFromSrcCoord(int) const;
&gt; +    int tileYIndexFromSrcCoord(int) const;
&gt; +
&gt; +    IntRect tileBounds(int tile) const;
&gt; +    IntRect tileBoundsWithBorder(int tile) const;
&gt; +    FloatRect tileBoundsNormalized(int tile) const;
&gt; +    int tilePositionX(int xIndex) const;
&gt; +    int tilePositionY(int yIndex) const;
&gt; +    int tileSizeX(int xIndex) const;
&gt; +    int tileSizeY(int yIndex) const;
&gt; +    IntRect overlappedTileIndices(const IntRect&amp; srcRect) const;
&gt; +    IntRect overlappedTileIndices(const FloatRect&amp; srcRect) const;
&gt; +
&gt; +    // Given a set of source and destination coordinates for a drawing quad
&gt; +    // in texel units, returns adjusted data to render just the one tile.
&gt; +    void intersectDrawQuad(const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, int tile, FloatRect&amp; newSrc, FloatRect&amp; newDst) const;

(also mentioned this above) - this should take its out parameters (newSrc, newDst) as pointers to FloatRects instead of non-const references.  This makes it easier to tell what things will get modified at callsites to this function.

&gt; +
&gt; +private:
&gt; +    TilingData() : m_maxTextureSize(0), m_totalSizeX(0), m_totalSizeY(0) {}
&gt; +    void assertTile(int tile) const { ASSERT(tile &gt;= 0 &amp;&amp; tile &lt; numTiles()); }
&gt; +
&gt; +    int m_maxTextureSize;
&gt; +    int m_totalSizeX;
&gt; +    int m_totalSizeY;
&gt; +    int m_borderTexels;
&gt; +
&gt; +    // computed values:
&gt; +    int m_numTilesX;
&gt; +    int m_numTilesY;
&gt; +};
&gt; +
&gt; +}
&gt; +
&gt; +#endif // TilingData_h
&gt; diff --git a/WebCore/platform/graphics/skia/ImageSkia.cpp b/WebCore/platform/graphics/skia/ImageSkia.cpp
&gt; index 024bf50dc1333a20aa2daae1ac7e5a4f5eec0e10..b514b1a6b61b5d70cbd877cb3b1164a3be1d517b 100644
&gt; --- a/WebCore/platform/graphics/skia/ImageSkia.cpp
&gt; +++ b/WebCore/platform/graphics/skia/ImageSkia.cpp
&gt; @@ -465,18 +465,18 @@ void BitmapImage::draw(GraphicsContext* ctxt, const FloatRect&amp; dstRect,
&gt;      if (!bm)
&gt;          return;  // It&apos;s too early and we don&apos;t have an image yet.
&gt;  
&gt; -#if  USE(GLES2_RENDERING)
&gt; -    if (ctxt-&gt;platformContext()-&gt;useGPU()) {
&gt; -        drawBitmapGLES2(ctxt, bm, srcRect, dstRect, colorSpace, compositeOp);
&gt; -        return;
&gt; -    }
&gt; -#endif
&gt;      FloatRect normDstRect = normalizeRect(dstRect);
&gt;      FloatRect normSrcRect = normalizeRect(srcRect);
&gt;  
&gt;      if (normSrcRect.isEmpty() || normDstRect.isEmpty())
&gt;          return;  // Nothing to draw.
&gt;  
&gt; +#if  USE(GLES2_RENDERING)
&gt; +    if (ctxt-&gt;platformContext()-&gt;useGPU()) {
&gt; +        drawBitmapGLES2(ctxt, bm, normSrcRect, normDstRect, colorSpace, compositeOp);
&gt; +        return;
&gt; +    }
&gt; +#endif
&gt;      ctxt-&gt;platformContext()-&gt;prepareForSoftwareDraw();
&gt;  
&gt;      paintSkBitmap(ctxt-&gt;platformContext(),
&gt; diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
&gt; index b5247d5ed62e0982545241323653261ec666de1b..1f87b7529ba6128bddb2a9bf08d37b91566b7cc3 100644
&gt; --- a/WebKit/chromium/ChangeLog
&gt; +++ b/WebKit/chromium/ChangeLog
&gt; @@ -1,3 +1,14 @@
&gt; +2010-08-11  Vincent Scheib  &lt;scheib@chromium.org&gt;
&gt; +
&gt; +        Canvas2D does not support images larger than system&apos;s GPU max texture size
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=43864
&gt; +
&gt; +        Unit tests for TilingData class.
&gt; +
&gt; +        * WebKit.gyp:
&gt; +        * tests/TilingDataTest.cpp: Added.
&gt; +        (WebCore::TEST):
&gt; +
&gt;  2010-08-10  Aaron Boodman  &lt;aa@chromium.org&gt;
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263611</commentid>
    <comment_count>8</comment_count>
      <attachid>64177</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-08-11 23:00:10 -0700</bug_when>
    <thetext>Comment on attachment 64177
Patch

r- based on James&apos; feedback alone.


nits:
Please make sure to add spaces around operators. For example, &quot;2*m_borderTexels&quot; is done in a few places and there are many places where there aren&apos;t spaces around +, -, *.

If the clause of an if (or else) statement spans more than one physical line it needs braces around it. Here&apos;s one such example:
154         if (swizzle)
 155             uploadBuff = copySubRect&lt;true&gt;(
 156             pixels32, tileBoundsWithBorder.x(), tileBoundsWithBorder.y(),
 157             tempBuff, tileBoundsWithBorder.width(), tileBoundsWithBorder.height(), m_tiles.totalSizeX());

There are others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264090</commentid>
    <comment_count>9</comment_count>
      <attachid>64285</attachid>
    <who name="Vincent Scheib">scheib</who>
    <bug_when>2010-08-12 17:10:24 -0700</bug_when>
    <thetext>Created attachment 64285
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264091</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-12 17:11:39 -0700</bug_when>
    <thetext>Attachment 64285 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/tests/TilingDataTest.cpp:33:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 12 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>264093</commentid>
    <comment_count>11</comment_count>
    <who name="Vincent Scheib">scheib</who>
    <bug_when>2010-08-12 17:14:43 -0700</bug_when>
    <thetext>Comments addressed inline:


&gt; &gt; +void GLES2Canvas::drawTexturedRectTile(GLES2Texture* texture, int tile,
&gt; const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, const AffineTransform&amp;
&gt; transform)
&gt; &gt; +{
&gt; &gt; +    if (dstRect.isEmpty())
&gt; &gt; +        return;
&gt; &gt; +
&gt; &gt; +    const TilingData tiles = texture-&gt;tiles();
&gt;
&gt; It&apos;s strange that we grab texture-&gt;tiles() in drawTexturedRect(), then call
&gt; drawTexturedRectTile() which then grabs texture-&gt;tiles() again.  Feels like
&gt; we should only do this once.
&gt;
&gt;
Fixing to be a reference. The call is just for code convenience,
texture-&gt;tiles() is intended to be used directly as a const reference, there
is no cost to accessing it at multiple frames in the stack. Passing the
reference as a parameter would take as many or more bytes in code and be
equal or less easy for the compiler to ignore.


&gt; +    tiles.intersectDrawQuad(srcRect, dstRect, tile,
&gt; srcRectClippedInTileSpace, dstRectIntersected);
&gt;
&gt; Please make intersectDrawQuad() take its out parameters by pointer


done

&gt; +GLES2Texture::GLES2Texture(GraphicsContext3D* context, const
&gt; Vector&lt;unsigned int&gt;&amp; tileTextureIds, Format format, int width, int height,
&gt; int maxTextureSize)
&gt; &gt;      : m_context(context)
&gt; &gt; -    , m_textureId(textureId)
&gt; &gt;      , m_format(format)
&gt; &gt; -    , m_width(width)
&gt; &gt; -    , m_height(height)
&gt; &gt; +    , m_tiles(maxTextureSize, width, height, true)
&gt;
&gt; It looks like we always set the borderTexels parameter to &apos;true&apos; currently
&gt; (outside of test code).  Will we ever set this to false?  If we aren&apos;t then
&gt; it might be simpler to drop the parameter.
&gt;
&gt;
I expect the compositor to be able to use this class, and it will not use
border texels.



&gt; &gt;  PassRefPtr&lt;GLES2Texture&gt; GLES2Texture::create(GraphicsContext3D*
&gt; context, Format format, int width, int height)
&gt; &gt; +    Vector&lt;unsigned int&gt; textureIds(numTiles);
&gt;
&gt; ... nicer to have GLES2Texture have an OwnPtr&lt;Vector&lt;...&gt; &gt; and pass in a
&gt; heap-allocated vector so we only have to fill it out once.  Same goes for
&gt; TilingData.
&gt;
&gt;
Done for the Vector.
TilingData has no heap allocation, and has trivial constructor cost.
TilingData is just convenience math, and is cheaper to construct than to
heap allocate.



&gt; &gt; +    textureIds.fill(0, numTiles);
&gt; &gt; +    for (int i = 0; i &lt; numTiles; i++)
&gt; &gt; +         textureIds[i] = context-&gt;createTexture();
&gt; &gt; +
&gt; &gt; +    for (int i = 0; i &lt; numTiles; i++) {
&gt; &gt; +        unsigned int textureId = textureIds.begin()[i];
&gt;
&gt; Not sure why we have two loops from i..numTiles here.  Also, I think the
&gt; .begin() here is spurious - looks like you want textureIds[i].
&gt;
&gt;
Fixed, it was legacy from GLES (could array allocate) vs GraphicsContext3D.


&gt; +        if (!textureId) {
&gt; Should probably check for this at createTexture() time.
&gt;
&gt;
Fixed.



&gt; &gt; +        context-&gt;bindTexture(GraphicsContext3D::TEXTURE_2D, textureId);
&gt; &gt; +        context-&gt;texImage2D(GraphicsContext3D::TEXTURE_2D,
&gt; &gt; +            0,
&gt; &gt; +            GraphicsContext3D::RGBA,
&gt; &gt; +            tileBoundsWithBorder.width(),
&gt; &gt; +            tileBoundsWithBorder.height(),
&gt; &gt; +            0,
&gt; &gt; +            GraphicsContext3D::RGBA,
&gt; &gt; +            GraphicsContext3D::UNSIGNED_BYTE,
&gt; &gt; +            0);
&gt;
&gt; I think it&apos;s more efficient to go ahead and set the texParameter()s we want
&gt; for this texture here rather than setting them on every bindTexture().
&gt;
&gt;
We need to do it near the draw call. This state applies to the &quot;active
texture&quot; not the particular texture bound with texture ID.
e.g.
bind(1)
texParameter(foo)
bind(2)
texParameter(bar)
bind(1)
  // texParameter is still bar, not the foo that was set after bind(1)

&gt; +    uint32_t* tempBuff = new
&gt; uint32_t[m_tiles.maxTextureSize()*m_tiles.maxTextureSize()];
&gt;
&gt; Use an OwnArrayPtr&lt;&gt;
&gt;

Done.

&gt; diff --git a/WebCore/platform/graphics/chromium/GLES2Texture.h
&gt; b/WebCore/platform/graphics/chromium/GLES2Texture.h
&gt; &gt;      void load(void* pixels);
&gt; &gt;      Format format() const { return m_format; }
&gt; &gt; -    int width() const { return m_width; }
&gt; &gt; -    int height() const { return m_height; }
&gt;
&gt; I think we still want to have width()/height() exposed on GLES2Texture
&gt; (even if they just call to TilingData under the hood).
&gt;
&gt;
I disagree, I want client code to explicitly work with the tiled nature of
the texture. No easy bugs due to .width() compiling and someone only testing
with normal sized textures.

&gt; diff --git a/WebCore/platform/graphics/chromium/TilingData.cpp
&gt; b/WebCore/platform/graphics/chromium/TilingData.cpp
&gt;
&gt; If m_borderTexels is an arbitrary int, don&apos;t we want to do x1 -=
&gt; m_borderTexels;?  I may not be following the math perfectly.  If
&gt; m_borderTexels is only ever 0 or 1 it should be a bool.
&gt;
&gt;
Done.

&gt; +    return overlappedTileIndices(IntRect(
&gt; &gt; +        static_cast&lt;int&gt;(srcRect.x()),
&gt; &gt; +        static_cast&lt;int&gt;(srcRect.y()),
&gt; &gt; +        static_cast&lt;int&gt;(ceil(srcRect.width())),
&gt; &gt; +        static_cast&lt;int&gt;(ceil(srcRect.height()))));
&gt;
&gt; There&apos;s an enclosingIntRect() function to go from FloatRect-&gt;IntRect that I
&gt; believe does what you want here.  It&apos;s in FloatRect.h
&gt;
&gt;
Done.

&gt; +    if (m_borderTexels) {
&gt; &gt; +        if (tileXIndex(tile) &gt; 0)
&gt; &gt; +            newSrc.move(1, 0);
&gt;
&gt; Is 1 a magic value, or is this supposed to be moved by m_borderTexels?
&gt;

Reworked to:
    newSrc-&gt;move(
        -tileBounds.x() + m_borderTexels * (tileXIndex(tile) &gt; 0),
        -tileBounds.y() + m_borderTexels * (tileYIndex(tile) &gt; 0));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264096</commentid>
    <comment_count>12</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-08-12 17:23:27 -0700</bug_when>
    <thetext>nit: several places in WebCore/platform/graphics/chromium/TilingData.cpp don&apos;t put spaces around &quot;-&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264101</commentid>
    <comment_count>13</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-08-12 17:30:09 -0700</bug_when>
    <thetext>One more nit:  PassOwnPtr&lt;Vector&lt;unsigned int&gt;&gt;

I&apos;m surprised that this isn&apos;t causing compilers issues. I&apos;ve always had to put a space between the two &gt;&gt;. (I would do that just to make sure no compilers have troubles.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264107</commentid>
    <comment_count>14</comment_count>
      <attachid>64285</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-12 17:55:22 -0700</bug_when>
    <thetext>Comment on attachment 64285
Patch

&gt; diff --git a/WebCore/platform/graphics/chromium/GLES2Canvas.h b/WebCore/platform/graphics/chromium/GLES2Canvas.h
&gt; index cea90aeaabb26147f1f243267180925cc8aa733c..0ad07fcdbfed99ad6ecd7e5746001fbbadafbe7c 100644
&gt; --- a/WebCore/platform/graphics/chromium/GLES2Canvas.h
&gt; +++ b/WebCore/platform/graphics/chromium/GLES2Canvas.h
&gt; @@ -81,6 +81,7 @@ public:
&gt;      GLES2Texture* getTexture(NativeImagePtr);
&gt;  
&gt;  private:
&gt; +    void drawTexturedRectTile(GLES2Texture* texture, int tile, const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, const AffineTransform&amp;);
&gt;      void applyCompositeOperator(CompositeOperator);
&gt;      void checkGLError(const char* header);
&gt;      unsigned getQuadVertices();
&gt; diff --git a/WebCore/platform/graphics/chromium/GLES2Texture.cpp b/WebCore/platform/graphics/chromium/GLES2Texture.cpp
&gt; index 5e8a141dd282f294413a851f124ba80df7fd1d40..7a2cad3772d23496aef349642c59cf781ac37a55 100644
&gt; --- a/WebCore/platform/graphics/chromium/GLES2Texture.cpp
&gt; +++ b/WebCore/platform/graphics/chromium/GLES2Texture.cpp
&gt; @@ -35,42 +35,60 @@
&gt;  #include &quot;GLES2Texture.h&quot;
&gt;  
&gt;  #include &quot;GraphicsContext3D.h&quot;
&gt; -
&gt; +#include &quot;IntRect.h&quot;
&gt;  #include &lt;wtf/OwnArrayPtr.h&gt;
&gt;  
&gt;  namespace WebCore {
&gt;  
&gt; -GLES2Texture::GLES2Texture(GraphicsContext3D* context, unsigned textureId, Format format, int width, int height)
&gt; +
&gt; +GLES2Texture::GLES2Texture(GraphicsContext3D* context, PassOwnPtr&lt;Vector&lt;unsigned int&gt;&gt; tileTextureIds, Format format, int width, int height, int maxTextureSize)

You need to say PassOwnPtr&lt;Vector&lt;unsigned int&gt; &gt; (space between the &gt;&apos;s), sadly.  C++0x allows the syntax you used but not all of our compilers do yet :(

&gt;  GLES2Texture::~GLES2Texture()
&gt;  {
&gt; -    m_context-&gt;deleteTexture(m_textureId);
&gt; +    for (unsigned int i = 0; i &lt; m_tileTextureIds-&gt;size(); i++)
&gt; +        m_context-&gt;deleteTexture(m_tileTextureIds-&gt;at(i));

Just &apos;unsigned&apos;, not &apos;unsigned int&apos;.  If you used an iterator here you could avoid having to do &quot;-&gt;at()&quot;.

&gt;  PassRefPtr&lt;GLES2Texture&gt; GLES2Texture::create(GraphicsContext3D* context, Format format, int width, int height)
&gt;  {
&gt; -    int max;
&gt; -    context-&gt;getIntegerv(GraphicsContext3D::MAX_TEXTURE_SIZE, &amp;max);
&gt; -    if (width &gt; max || height &gt; max) {
&gt; -        ASSERT(!&quot;texture too big&quot;);
&gt; -        return 0;
&gt; -    }
&gt; +    int maxTextureSize = 0;
&gt; +    context-&gt;getIntegerv(GraphicsContext3D::MAX_TEXTURE_SIZE, &amp;maxTextureSize);
&gt;  
&gt; -    unsigned textureId = context-&gt;createTexture();
&gt; -    if (!textureId)
&gt; -        return 0;
&gt; +    TilingData tiling(maxTextureSize, width, height, true);
&gt; +    int numTiles = tiling.numTiles();
&gt;  
&gt; -    context-&gt;bindTexture(GraphicsContext3D::TEXTURE_2D, textureId);
&gt; -    context-&gt;texImage2D(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D::RGBA, width, height, 0, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE, 0);
&gt; +    PassOwnPtr&lt;Vector&lt;unsigned int&gt;&gt; textureIds = new Vector&lt;unsigned int&gt;(numTiles);

&quot;&gt; &gt;&quot;


&gt;  static void convertFormat(GLES2Texture::Format format, unsigned int* glFormat, unsigned int* glType, bool* swizzle)
&gt; @@ -94,31 +112,65 @@ static void convertFormat(GLES2Texture::Format format, unsigned int* glFormat, u
&gt;      }
&gt;  }
&gt;  
&gt;  void GLES2Texture::load(void* pixels)
&gt;  {
&gt; +    uint32_t* pixels32 = static_cast&lt;uint32_t*&gt;(pixels);
&gt;      unsigned int glFormat, glType;
&gt;      bool swizzle;
&gt;      convertFormat(m_format, &amp;glFormat, &amp;glType, &amp;swizzle);
&gt; -    m_context-&gt;bindTexture(GraphicsContext3D::TEXTURE_2D, m_textureId);
&gt;      if (swizzle) {
&gt;          ASSERT(glFormat == GraphicsContext3D::RGBA &amp;&amp; glType == GraphicsContext3D::UNSIGNED_BYTE);
&gt;          // FIXME:  This could use PBO&apos;s to save doing an extra copy here.
&gt; -        int size = m_width * m_height;
&gt; -        unsigned* pixels32 = static_cast&lt;unsigned*&gt;(pixels);
&gt; -        OwnArrayPtr&lt;unsigned&gt; buf(new unsigned[size]);
&gt; -        unsigned* bufptr = buf.get();
&gt; -        for (int i = 0; i &lt; size; ++i) {
&gt; -            unsigned pixel = pixels32[i];
&gt; -            bufptr[i] = pixel &amp; 0xFF00FF00 | ((pixel &amp; 0x00FF0000) &gt;&gt; 16) | ((pixel &amp; 0x000000FF) &lt;&lt; 16);
&gt; +    }
&gt; +    OwnArrayPtr&lt;uint32_t&gt; tempBuff = 
&gt; +        OwnArrayPtr&lt;uint32_t&gt;(new uint32_t[m_tiles.maxTextureSize() * m_tiles.maxTextureSize()]);

A slightly terser to do this is:

OwnArrayPtr&lt;uint32_t&gt; tempBuff(new uint32_t[m_tiles.maxTextureSize() * m_tiles.maxTextureSize()]);

&gt; diff --git a/WebCore/platform/graphics/chromium/GLES2Texture.h b/WebCore/platform/graphics/chromium/GLES2Texture.h
&gt; +
&gt; +int TilingData::tileSizeX(int xIndex) const
&gt; +    if (!xIndex &amp;&amp; m_numTilesX &gt; 1)
&gt; +        return m_maxTextureSize - m_borderTexels;
&gt; +    if (xIndex &lt; numTilesX() - 1)
&gt; +        return m_maxTextureSize - 2 * m_borderTexels;

Doing math on a bool is a little too subtle - I can see this is why you had m_borderTexels defined as an int before.  IIRC C++ says that this always does what you expect but it&apos;s very tricky.  I think you should do (m_borderTexels ? 1 : 0) and the like.  It&apos;s not as concise but the next person through this function will appreciate being explicit.

&gt; +int TilingData::tileSizeY(int yIndex) const

&gt; +        return m_maxTextureSize - m_borderTexels;
&gt; +    if (yIndex &lt; numTilesY() - 1)
&gt; +        return m_maxTextureSize - 2 * m_borderTexels;

Same here.

&gt; +void TilingData::intersectDrawQuad(const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, int tile,
&gt; +                                   FloatRect* newSrc, FloatRect* newDst) const
&gt; +{

&gt; +    *newSrc = srcRectIntersected;
&gt; +    newSrc-&gt;move(
&gt; +        -tileBounds.x() + m_borderTexels * (tileXIndex(tile) &gt; 0), 
&gt; +        -tileBounds.y() + m_borderTexels * (tileYIndex(tile) &gt; 0));

This is doubly subtle since it&apos;s multiplying a bool by another bool and then using that in arithmetic.  This should be expanded out.

&gt; diff --git a/WebCore/platform/graphics/chromium/TilingData.h b/WebCore/platform/graphics/chromium/TilingData.h
&gt; +    bool m_borderTexels;

Could this be made more more obviously predicate?  Maybe m_hasBorderTexels.  From the name I&apos;d guess this was a numerical value, not a boolean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264110</commentid>
    <comment_count>15</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-08-12 18:02:54 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 64285 [details])
&gt; &gt; +    PassOwnPtr&lt;Vector&lt;unsigned int&gt;&gt; textureIds = new Vector&lt;unsigned int&gt;(numTiles);
&gt; 
&gt; &quot;&gt; &gt;&quot;

This should be OwnPtr instead of PassOwnPtr.

PassOwnPtr/OwnPtr are analogous to PassRefPtr/RefPtr (and you should never have a local variable which is a PassRefPtr -- http://webkit.org/coding/RefPtr.html).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264113</commentid>
    <comment_count>16</comment_count>
      <attachid>64285</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-12 18:21:12 -0700</bug_when>
    <thetext>Comment on attachment 64285
Patch

r- for the nits.  This feels very close!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264452</commentid>
    <comment_count>17</comment_count>
      <attachid>64361</attachid>
    <who name="Vincent Scheib">scheib</who>
    <bug_when>2010-08-13 11:50:17 -0700</bug_when>
    <thetext>Created attachment 64361
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264455</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-13 11:53:20 -0700</bug_when>
    <thetext>Attachment 64361 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/tests/TilingDataTest.cpp:33:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 12 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>264561</commentid>
    <comment_count>19</comment_count>
    <who name="Vincent Scheib">scheib</who>
    <bug_when>2010-08-13 17:39:26 -0700</bug_when>
    <thetext>New patch:

&quot;-&quot; -&gt; &quot; - &quot;.

&quot;&gt;&gt;&quot; -&gt; &quot;&gt; &gt;&quot;.

&gt; Doing math on a bool is a little too subtle

Reverted back to int with comment in header, rearranged logic involving booleans to use ? :.

&quot;unsigned int&quot; has 2 to 1 existing dominance in WebCore over &quot;unsigned&quot;.

&gt; Terse assignmenet
Done.

OwnPtr used instead of PassOwnPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264656</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-14 01:11:39 -0700</bug_when>
    <thetext>Attachment 64361 did not build on chromium:
Build output: http://queues.webkit.org/results/3731139</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264744</commentid>
    <comment_count>21</comment_count>
      <attachid>64429</attachid>
    <who name="Vincent Scheib">scheib</who>
    <bug_when>2010-08-14 14:17:14 -0700</bug_when>
    <thetext>Created attachment 64429
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264745</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-14 14:19:57 -0700</bug_when>
    <thetext>Attachment 64429 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/tests/TilingDataTest.cpp:33:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 13 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>264977</commentid>
    <comment_count>23</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-16 01:08:43 -0700</bug_when>
    <thetext>Looks good to me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265125</commentid>
    <comment_count>24</comment_count>
      <attachid>64429</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-08-16 08:53:43 -0700</bug_when>
    <thetext>Comment on attachment 64429
Patch

if it&apos;s good enough for James, it&apos;s good enough for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265131</commentid>
    <comment_count>25</comment_count>
      <attachid>64429</attachid>
    <who name="Vincent Scheib">scheib</who>
    <bug_when>2010-08-16 09:01:01 -0700</bug_when>
    <thetext>Comment on attachment 64429
Patch

commit-queue request</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265174</commentid>
    <comment_count>26</comment_count>
      <attachid>64429</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-16 11:21:25 -0700</bug_when>
    <thetext>Comment on attachment 64429
Patch

Rejecting patch 64429 from commit-queue.

Unexpected failure when processing patch!  Please file a bug against webkit-patch.
Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--build&apos;, &apos;--non-interactive&apos;, &apos;--ignore-builders&apos;, &apos;--build-style=both&apos;, &apos;--quiet&apos;, 64429, &apos;--test&apos;, &apos;--parent-command=commit-queue&apos;, &apos;--no-update&apos;]&quot; exit_code: 1
Logging in as eseidel@chromium.org...
Fetching: https://bugs.webkit.org/attachment.cgi?id=64429&amp;action=edit
Fetching: https://bugs.webkit.org/show_bug.cgi?id=43864&amp;ctype=xml
Processing 1 patch from 1 bug.
Cleaning working directory
Processing patch 64429 from bug 43864.
ERROR: /Users/eseidel/Projects/CommitQueue/WebKit/chromium/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265199</commentid>
    <comment_count>27</comment_count>
      <attachid>64509</attachid>
    <who name="Vincent Scheib">scheib</who>
    <bug_when>2010-08-16 12:39:22 -0700</bug_when>
    <thetext>Created attachment 64509
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265200</commentid>
    <comment_count>28</comment_count>
      <attachid>64509</attachid>
    <who name="Vincent Scheib">scheib</who>
    <bug_when>2010-08-16 12:40:22 -0700</bug_when>
    <thetext>Comment on attachment 64509
Patch

Updated ChangeLog to enable commit-queue to pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265201</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-16 12:42:20 -0700</bug_when>
    <thetext>Attachment 64509 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/tests/TilingDataTest.cpp:33:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 13 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>265243</commentid>
    <comment_count>30</comment_count>
      <attachid>64509</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-16 14:37:16 -0700</bug_when>
    <thetext>Comment on attachment 64509
Patch

Clearing flags on attachment: 64509

Committed r65455: &lt;http://trac.webkit.org/changeset/65455&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265244</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-16 14:37:22 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266792</commentid>
    <comment_count>32</comment_count>
      <attachid>64865</attachid>
    <who name="Vincent Scheib">scheib</who>
    <bug_when>2010-08-19 09:36:51 -0700</bug_when>
    <thetext>Created attachment 64865
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266793</commentid>
    <comment_count>33</comment_count>
      <attachid>64865</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-08-19 09:41:08 -0700</bug_when>
    <thetext>Comment on attachment 64865
Patch

This bug has already been resolved/fixed. Please attach your patch to a new bug.

In fact, I think you already created a new bug for this issue :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64139</attachid>
            <date>2010-08-11 11:45:10 -0700</date>
            <delta_ts>2010-08-11 14:50:50 -0700</delta_ts>
            <desc>patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>35725</size>
            <attacher name="Vincent Scheib">scheib</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmQzMTIyNC4uZGM4NzcxNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMC0wOC0xMSAgVmluY2VudCBTY2hl
aWIgIDxzY2hlaWJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENhbnZhczJEIGRvZXMgbm90IHN1cHBvcnQgaW1hZ2VzIGxhcmdl
ciB0aGFuIHN5c3RlbSdzIEdQVSBtYXggdGV4dHVyZSBzaXplCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mzg2NAorCisgICAgICAgIEEgbmV3IGNsYXNz
ICJUaWxpbmdEYXRhIiBoYXMgYmVlbiBjcmVhdGVkIHRoYXQgcHJvdmlkZXMgbG9naWMgZm9yIAor
ICAgICAgICBzcGxpdHRpbmcgYSBsYXJnZSBpbWFnZSBpbnRvIGEgc2VyaWVzIG9mIHNtYWxsZXIg
dGlsZXMuCisgICAgICAgIAorICAgICAgICBHTEVTMlRleHR1cmUgYW5kIENMRVMyQ2FudmFzIGFy
ZSBtb2RpZmllZCB0byB1c2UgdGhlIFRpbGluZ0RhdGEgdG8KKyAgICAgICAgc3BsaXQgaW1hZ2Vz
IG9uIHRleHR1cmUgdXBsb2FkIGFuZCByZW5kZXIgb25lIGxvZ2ljYWwgaW1hZ2UgYXMgbWFueSBz
bWFsbGVyCisgICAgICAgIGltYWdlcy4KKworICAgICAgICBUaWxpbmdEYXRhIGlzIHRlc3RlZCB2
aWEgdW5pdCB0ZXN0cyBpbiBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsaW5nRGF0YVRlc3QuY3Bw
CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2Fu
dmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0VGlsZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29tcHV0ZU51bVRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGlu
Z0RhdGE6OlRpbGluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZVhJ
bmRleEZyb21TcmNDb29yZCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxlWUlu
ZGV4RnJvbVNyY0Nvb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OnRpbGVCb3Vu
ZHMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZUJvdW5kc1dpdGhCb3JkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZUJvdW5kc05vcm1hbGl6ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZVBvc2l0aW9uWCk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxlUG9zaXRpb25ZKToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGluZ0RhdGE6OnRpbGVTaXplWCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxl
U2l6ZVkpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6b3ZlcmxhcHBlZFRpbGVJbmRp
Y2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OmludGVyc2VjdERyYXdRdWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkdMRVMyVGV4dHVyZTo6R0xFUzJUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdMRVMyVGV4dHVyZTo6fkdMRVMyVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHTEVTMlRleHR1cmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3B5U3ViUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OmxvYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6R0xFUzJUZXh0dXJlOjpiaW5kVGlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR0xFUzJUZXh0dXJlLmg6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjpt
YXhUZXh0dXJlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0b3RhbFNpemVY
KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OnRvdGFsU2l6ZVkpOgorICAgICAgICAo
V2ViQ29yZTo6VGlsaW5nRGF0YTo6bnVtVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5n
RGF0YTo6bnVtVGlsZXNYKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6Om51bVRpbGVz
WSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxlSW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZVhJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxp
bmdEYXRhOjp0aWxlWUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OlRpbGlu
Z0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6YXNzZXJ0VGlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OnRpbGVzKToKKwogMjAxMC0wOC0xMCAgUGF0cmlj
ayBHYW5zdGVyZXIgIDxwYXJvZ2FAcGFyb2dhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBT
YW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HTEVTMkNhbnZhcy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dM
RVMyQ2FudmFzLmNwcAppbmRleCA4YTliZGUxLi41ZDA3YjBkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcApAQCAtMzgsMTQgKzM4
LDE1IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR0xFUzJUZXh0dXJlLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJVaW50MTZBcnJheS5oIgogCiAj
ZGVmaW5lIF9VU0VfTUFUSF9ERUZJTkVTCiAjaW5jbHVkZSA8bWF0aC5oPgogCi0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yMjEs
NyArMjIyLDYgQEAgdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdChHTEVTMlRleHR1
cmUqIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmUKICAgICBjaGVja0dMRXJyb3IoImds
VXNlUHJvZ3JhbSIpOwogCiAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMCk7Ci0gICAgdGV4dHVyZS0+YmluZCgpOwogCiAgICAgbV9jb250ZXh0
LT51bmlmb3JtMWkobV90ZXhTYW1wbGVyTG9jYXRpb24sIDApOwogICAgIGNoZWNrR0xFcnJvcigi
Z2xVbmlmb3JtMWkiKTsKQEAgLTIyOSwyOCArMjI5LDUxIEBAIHZvaWQgR0xFUzJDYW52YXM6OmRy
YXdUZXh0dXJlZFJlY3QoR0xFUzJUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV90ZXhBbHBoYUxvY2F0aW9uLCBhbHBoYSk7
CiAgICAgY2hlY2tHTEVycm9yKCJnbFVuaWZvcm0xZiBmb3IgYWxwaGEiKTsKIAorICAgIG1fY29u
dGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihtX3RleFBvc2l0aW9uTG9jYXRpb24sIDMsIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOworCisgICAgbV9jb250ZXh0LT5lbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShtX3RleFBvc2l0aW9uTG9jYXRpb24pOworCisgICAgY29uc3Qg
VGlsaW5nRGF0YSYgdGlsZXMgPSB0ZXh0dXJlLT50aWxlcygpOworICAgIEludFJlY3QgdGlsZUlk
eFJlY3QgPSB0aWxlcy5vdmVybGFwcGVkVGlsZUluZGljZXMoc3JjUmVjdCk7CisKKyAgICBmb3Ig
KGludCB5ID0gdGlsZUlkeFJlY3QueSgpOyB5IDw9IHRpbGVJZHhSZWN0LmJvdHRvbSgpOyB5Kysp
CisgICAgICAgIGZvciAoaW50IHggPSB0aWxlSWR4UmVjdC54KCk7IHggPD0gdGlsZUlkeFJlY3Qu
cmlnaHQoKTsgeCsrKQorICAgICAgICAgICAgZHJhd1RleHR1cmVkUmVjdFRpbGUodGV4dHVyZSwg
dGlsZXMudGlsZUluZGV4KHgsIHkpLCBzcmNSZWN0LCBkc3RSZWN0LCB0cmFuc2Zvcm0pOworfQor
Cit2b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0VGlsZShHTEVTMlRleHR1cmUqIHRl
eHR1cmUsIGludCB0aWxlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7CisgICAgaWYg
KGRzdFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBUaWxpbmdE
YXRhIHRpbGVzID0gdGV4dHVyZS0+dGlsZXMoKTsKKworICAgIHRleHR1cmUtPmJpbmRUaWxlKHRp
bGUpOworCisgICAgRmxvYXRSZWN0IHNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2U7CisgICAgRmxv
YXRSZWN0IGRzdFJlY3RJbnRlcnNlY3RlZDsKKyAgICB0aWxlcy5pbnRlcnNlY3REcmF3UXVhZChz
cmNSZWN0LCBkc3RSZWN0LCB0aWxlLCBzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlLCBkc3RSZWN0
SW50ZXJzZWN0ZWQpOworCisgICAgSW50UmVjdCB0aWxlQm91bmRzV2l0aEJvcmRlciA9IHRpbGVz
LnRpbGVCb3VuZHNXaXRoQm9yZGVyKHRpbGUpOworCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJp
eChtX2ZsaXBNYXRyaXgpOwogICAgIG1hdHJpeC5tdWx0TGVmdCh0cmFuc2Zvcm0pOwotICAgIG1h
dHJpeC50cmFuc2xhdGUoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpKTsKLSAgICBtYXRyaXguc2Nh
bGUoZHN0UmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpKTsKKyAgICBtYXRyaXgudHJhbnNs
YXRlKGRzdFJlY3RJbnRlcnNlY3RlZC54KCksIGRzdFJlY3RJbnRlcnNlY3RlZC55KCkpOworICAg
IG1hdHJpeC5zY2FsZShkc3RSZWN0SW50ZXJzZWN0ZWQud2lkdGgoKSwgZHN0UmVjdEludGVyc2Vj
dGVkLmhlaWdodCgpKTsKICAgICBmbG9hdCBtYXRbOV07CiAgICAgYWZmaW5lVG8zeDMobWF0cml4
LCBtYXQpOwogICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihtX3RleE1hdHJpeExvY2F0
aW9uLCBmYWxzZSAvKnRyYW5zcG9zZSovLCBtYXQsIDEgLypjb3VudCovKTsKICAgICBjaGVja0dM
RXJyb3IoImdsVW5pZm9ybU1hdHJpeDNmdiIpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHRleE1h
dHJpeDsKLSAgICB0ZXhNYXRyaXguc2NhbGUoMS4wZiAvIHRleHR1cmUtPndpZHRoKCksIDEuMGYg
LyB0ZXh0dXJlLT5oZWlnaHQoKSk7Ci0gICAgdGV4TWF0cml4LnRyYW5zbGF0ZShzcmNSZWN0Lngo
KSwgc3JjUmVjdC55KCkpOwotICAgIHRleE1hdHJpeC5zY2FsZShzcmNSZWN0LndpZHRoKCksIHNy
Y1JlY3QuaGVpZ2h0KCkpOworICAgIHRleE1hdHJpeC5zY2FsZSgxLjBmIC8gdGlsZUJvdW5kc1dp
dGhCb3JkZXIud2lkdGgoKSwgMS4wZiAvIHRpbGVCb3VuZHNXaXRoQm9yZGVyLmhlaWdodCgpKTsK
KyAgICB0ZXhNYXRyaXgudHJhbnNsYXRlKHNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2UueCgpLCBz
cmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlLnkoKSk7CisgICAgdGV4TWF0cml4LnNjYWxlKHNyY1Jl
Y3RDbGlwcGVkSW5UaWxlU3BhY2Uud2lkdGgoKSwgc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZS5o
ZWlnaHQoKSk7CiAgICAgZmxvYXQgdGV4TWF0WzldOwogICAgIGFmZmluZVRvM3gzKHRleE1hdHJp
eCwgdGV4TWF0KTsKICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobV90ZXhUZXhNYXRy
aXhMb2NhdGlvbiwgZmFsc2UgLyp0cmFuc3Bvc2UqLywgdGV4TWF0LCAxIC8qY291bnQqLyk7CiAg
ICAgY2hlY2tHTEVycm9yKCJnbFVuaWZvcm1NYXRyaXgzZnYiKTsKIAotICAgIG1fY29udGV4dC0+
dmVydGV4QXR0cmliUG9pbnRlcihtX3RleFBvc2l0aW9uTG9jYXRpb24sIDMsIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOwotCi0gICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShtX3RleFBvc2l0aW9uTG9jYXRpb24pOwotCiAgICAgbV9jb250ZXh0LT5k
cmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgNiwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKTsKICAgICBjaGVja0dMRXJyb3IoImdsRHJhd0VsZW1l
bnRzIik7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dMRVMyQ2FudmFzLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMy
Q2FudmFzLmgKaW5kZXggY2VhOTBhZS4uMGFkMDdmYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaApAQCAtODEsNiArODEsNyBAQCBwdWJs
aWM6CiAgICAgR0xFUzJUZXh0dXJlKiBnZXRUZXh0dXJlKE5hdGl2ZUltYWdlUHRyKTsKIAogcHJp
dmF0ZToKKyAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3RUaWxlKEdMRVMyVGV4dHVyZSogdGV4dHVy
ZSwgaW50IHRpbGUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKICAgICB2b2lkIGFwcGx5Q29tcG9zaXRl
T3BlcmF0b3IoQ29tcG9zaXRlT3BlcmF0b3IpOwogICAgIHZvaWQgY2hlY2tHTEVycm9yKGNvbnN0
IGNoYXIqIGhlYWRlcik7CiAgICAgdW5zaWduZWQgZ2V0UXVhZFZlcnRpY2VzKCk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5jcHAKaW5k
ZXggNWU4YTE0MS4uMjA2OWRmOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HTEVTMlRleHR1cmUuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmNwcApAQCAtMzQsNDMgKzM0LDI1MCBAQAogCiAjaW5j
bHVkZSAiR0xFUzJUZXh0dXJlLmgiCiAKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgotCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUg
PGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KIAordXNpbmcgbmFtZXNw
YWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1HTEVTMlRleHR1cmU6OkdMRVMyVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgdGV4dHVyZUlkLCBGb3Jt
YXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCitzdGF0aWMgaW50IGNvbXB1dGVOdW1U
aWxlcyhpbnQgbWF4VGV4dHVyZVNpemUsIGludCB0b3RhbFNpemUsIGludCBib3JkZXJUZXhlbHMp
Cit7CisgICAgcmV0dXJuIG1heCgxLCAxICsgKHRvdGFsU2l6ZSAtIDEgLSAyKmJvcmRlclRleGVs
cykgLyAobWF4VGV4dHVyZVNpemUgLSAyKmJvcmRlclRleGVscykpOworfQorCitUaWxpbmdEYXRh
OjpUaWxpbmdEYXRhKGludCBtYXhUZXh0dXJlU2l6ZSwgaW50IHRvdGFsU2l6ZVgsIGludCB0b3Rh
bFNpemVZLCBib29sIGJvcmRlclRleGVscykKKyAgICA6IG1fbWF4VGV4dHVyZVNpemUobWF4VGV4
dHVyZVNpemUpCisgICAgLCBtX3RvdGFsU2l6ZVgodG90YWxTaXplWCkKKyAgICAsIG1fdG90YWxT
aXplWSh0b3RhbFNpemVZKQorICAgICwgbV9ib3JkZXJUZXhlbHMoYm9yZGVyVGV4ZWxzID8gMSA6
IDApCit7CisgICAgbV9udW1UaWxlc1ggPSBjb21wdXRlTnVtVGlsZXMobWF4VGV4dHVyZVNpemUs
IG1fdG90YWxTaXplWCwgbV9ib3JkZXJUZXhlbHMpOworICAgIG1fbnVtVGlsZXNZID0gY29tcHV0
ZU51bVRpbGVzKG1heFRleHR1cmVTaXplLCBtX3RvdGFsU2l6ZVksIG1fYm9yZGVyVGV4ZWxzKTsK
K30KKworaW50IFRpbGluZ0RhdGE6OnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoaW50IHNyY1Bvcykg
Y29uc3QKK3sKKyAgICBpbnQgeCA9IChzcmNQb3MgLSBtX2JvcmRlclRleGVscykgLyAobV9tYXhU
ZXh0dXJlU2l6ZSAtIDIqbV9ib3JkZXJUZXhlbHMpOworICAgIHJldHVybiBtaW4obWF4KHgsIDAp
LCBudW1UaWxlc1goKS0xKTsKK30KKworaW50IFRpbGluZ0RhdGE6OnRpbGVZSW5kZXhGcm9tU3Jj
Q29vcmQoaW50IHNyY1BvcykgY29uc3QKK3sKKyAgICBpbnQgeSA9IChzcmNQb3MgLSBtX2JvcmRl
clRleGVscykgLyAobV9tYXhUZXh0dXJlU2l6ZSAtIDIqbV9ib3JkZXJUZXhlbHMpOworICAgIHJl
dHVybiBtaW4obWF4KHksIDApLCBudW1UaWxlc1koKS0xKTsKK30KKworSW50UmVjdCBUaWxpbmdE
YXRhOjp0aWxlQm91bmRzKGludCB0aWxlKSBjb25zdAoreworICAgIGFzc2VydFRpbGUodGlsZSk7
CisgICAgaW50IGl4ID0gdGlsZVhJbmRleCh0aWxlKTsKKyAgICBpbnQgaXkgPSB0aWxlWUluZGV4
KHRpbGUpOworICAgIGludCB4ID0gdGlsZVBvc2l0aW9uWChpeCk7CisgICAgaW50IHkgPSB0aWxl
UG9zaXRpb25ZKGl5KTsKKyAgICBpbnQgd2lkdGggPSB0aWxlU2l6ZVgoaXgpOworICAgIGludCBo
ZWlnaHQgPSB0aWxlU2l6ZVkoaXkpOworICAgIEFTU0VSVCh4ID49IDAgJiYgeSA+PSAwICYmIHdp
ZHRoID49IDAgJiYgaGVpZ2h0ID49IDApOworICAgIEFTU0VSVCh4IDw9IHRvdGFsU2l6ZVgoKSAm
JiB5IDw9IHRvdGFsU2l6ZVkoKSk7CisgICAgcmV0dXJuIEludFJlY3QoeCwgeSwgd2lkdGgsIGhl
aWdodCk7Cit9CisKK0ludFJlY3QgVGlsaW5nRGF0YTo6dGlsZUJvdW5kc1dpdGhCb3JkZXIoaW50
IHRpbGUpIGNvbnN0Cit7CisgICAgSW50UmVjdCBib3VuZHMgPSB0aWxlQm91bmRzKHRpbGUpOwor
CisgICAgaWYgKG1fYm9yZGVyVGV4ZWxzKSB7CisgICAgICAgIGludCB4MSA9IGJvdW5kcy54KCk7
CisgICAgICAgIGludCB4MiA9IGJvdW5kcy5yaWdodCgpOworICAgICAgICBpbnQgeTEgPSBib3Vu
ZHMueSgpOworICAgICAgICBpbnQgeTIgPSBib3VuZHMuYm90dG9tKCk7CisKKyAgICAgICAgaWYg
KHRpbGVYSW5kZXgodGlsZSkgPiAwKQorICAgICAgICAgICAgeDEtLTsKKyAgICAgICAgaWYgKHRp
bGVYSW5kZXgodGlsZSkgPCAobnVtVGlsZXNYKCktMSkpCisgICAgICAgICAgICB4MisrOworICAg
ICAgICBpZiAodGlsZVlJbmRleCh0aWxlKSA+IDApCisgICAgICAgICAgICB5MS0tOworICAgICAg
ICBpZiAodGlsZVlJbmRleCh0aWxlKSA8IChudW1UaWxlc1koKS0xKSkKKyAgICAgICAgICAgIHky
Kys7CisKKyAgICAgICAgYm91bmRzID0gSW50UmVjdCh4MSwgeTEsIHgyLXgxLCB5Mi15MSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGJvdW5kczsKK30KKworRmxvYXRSZWN0IFRpbGluZ0RhdGE6OnRp
bGVCb3VuZHNOb3JtYWxpemVkKGludCB0aWxlKSBjb25zdAoreworICAgIGFzc2VydFRpbGUodGls
ZSk7CisgICAgRmxvYXRSZWN0IGJvdW5kcyh0aWxlQm91bmRzKHRpbGUpKTsKKyAgICBib3VuZHMu
c2NhbGUoMS4wZiAvIG1fdG90YWxTaXplWCwgMS4wZiAvIG1fdG90YWxTaXplWSk7CisgICAgcmV0
dXJuIGJvdW5kczsKK30KKworaW50IFRpbGluZ0RhdGE6OnRpbGVQb3NpdGlvblgoaW50IHhJbmRl
eCkgY29uc3QKK3sKKyAgICBBU1NFUlQoeEluZGV4ID49IDAgJiYgeEluZGV4IDwgbnVtVGlsZXNY
KCkpOworCisgICAgaWYgKCF4SW5kZXgpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB0
aWxlUG9zaXRpb25YKHhJbmRleC0xKSArIHRpbGVTaXplWCh4SW5kZXgtMSk7Cit9CisKK2ludCBU
aWxpbmdEYXRhOjp0aWxlUG9zaXRpb25ZKGludCB5SW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KHlJbmRleCA+PSAwICYmIHlJbmRleCA8IG51bVRpbGVzWSgpKTsKKworICAgIGlmICgheUluZGV4
KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gdGlsZVBvc2l0aW9uWCh5SW5kZXgtMSkg
KyB0aWxlU2l6ZVkoeUluZGV4LTEpOworfQorCitpbnQgVGlsaW5nRGF0YTo6dGlsZVNpemVYKGlu
dCB4SW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHhJbmRleCA+PSAwICYmIHhJbmRleCA8IG51
bVRpbGVzWCgpKTsKKworICAgIGludCBzaXplID0gbWF4VGV4dHVyZVNpemUoKTsKKyAgICBzaXpl
ID0gbWluKHNpemUsIHRvdGFsU2l6ZVgoKSk7CisKKyAgICBpZiAoeEluZGV4ID09IDAgJiYgbV9u
dW1UaWxlc1ggPT0gMSkKKyAgICAgICAgcmV0dXJuIG1fdG90YWxTaXplWDsKKyAgICBpZiAoeElu
ZGV4ID09IDAgJiYgbV9udW1UaWxlc1ggPiAxKQorICAgICAgICByZXR1cm4gbV9tYXhUZXh0dXJl
U2l6ZSAtIG1fYm9yZGVyVGV4ZWxzOworICAgIGlmICh4SW5kZXggPCBudW1UaWxlc1goKSAtIDEp
CisgICAgICAgIHJldHVybiBtX21heFRleHR1cmVTaXplIC0gMiAqIG1fYm9yZGVyVGV4ZWxzOwor
ICAgIGlmICh4SW5kZXggPT0gbnVtVGlsZXNYKCkgLSAxKQorICAgICAgICByZXR1cm4gbV90b3Rh
bFNpemVYIC0gdGlsZVBvc2l0aW9uWCh4SW5kZXgpOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBUaWxpbmdEYXRhOjp0aWxlU2l6ZVkoaW50IHlJ
bmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoeUluZGV4ID49IDAgJiYgeUluZGV4IDwgbnVtVGls
ZXNZKCkpOworCisgICAgaW50IHNpemUgPSBtYXhUZXh0dXJlU2l6ZSgpOworICAgIHNpemUgPSBt
aW4oc2l6ZSwgdG90YWxTaXplWSgpKTsKKworICAgIGlmICh5SW5kZXggPT0gMCAmJiBtX251bVRp
bGVzWSA9PSAxKQorICAgICAgICByZXR1cm4gbV90b3RhbFNpemVZOworICAgIGlmICh5SW5kZXgg
PT0gMCAmJiBtX251bVRpbGVzWSA+IDEpCisgICAgICAgIHJldHVybiBtX21heFRleHR1cmVTaXpl
IC0gbV9ib3JkZXJUZXhlbHM7CisgICAgaWYgKHlJbmRleCA8IG51bVRpbGVzWSgpIC0gMSkKKyAg
ICAgICAgcmV0dXJuIG1fbWF4VGV4dHVyZVNpemUgLSAyICogbV9ib3JkZXJUZXhlbHM7CisgICAg
aWYgKHlJbmRleCA9PSBudW1UaWxlc1koKSAtIDEpCisgICAgICAgIHJldHVybiBtX3RvdGFsU2l6
ZVkgLSB0aWxlUG9zaXRpb25ZKHlJbmRleCk7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gMDsKK30KKworSW50UmVjdCBUaWxpbmdEYXRhOjpvdmVybGFwcGVkVGlsZUlu
ZGljZXMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCAmc3JjUmVjdCkgY29uc3QKK3sKKyAgICBpbnQg
eCA9IHRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoc3JjUmVjdC54KCkpOworICAgIGludCB5ID0gdGls
ZVlJbmRleEZyb21TcmNDb29yZChzcmNSZWN0LnkoKSk7CisgICAgaW50IHIgPSB0aWxlWEluZGV4
RnJvbVNyY0Nvb3JkKHNyY1JlY3QucmlnaHQoKSk7CisgICAgaW50IGIgPSB0aWxlWUluZGV4RnJv
bVNyY0Nvb3JkKHNyY1JlY3QuYm90dG9tKCkpOworICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHIt
eCwgYi15KTsKK30KKworSW50UmVjdCBUaWxpbmdEYXRhOjpvdmVybGFwcGVkVGlsZUluZGljZXMo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0ICZzcmNSZWN0KSBjb25zdAoreworICAgIHJldHVybiBv
dmVybGFwcGVkVGlsZUluZGljZXMoSW50UmVjdCgKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihz
cmNSZWN0LngoKSksCisgICAgICAgIHN0YXRpY19jYXN0PGludD4oc3JjUmVjdC55KCkpLAorICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc3JjUmVjdC53aWR0aCgpKSksCisgICAgICAgIHN0
YXRpY19jYXN0PGludD4oY2VpbChzcmNSZWN0LmhlaWdodCgpKSkpKTsKK30KKwordm9pZCBUaWxp
bmdEYXRhOjppbnRlcnNlY3REcmF3UXVhZChjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwgaW50IHRpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZsb2F0UmVjdCYgbmV3U3JjLCBGbG9hdFJlY3QmIG5ld0RzdCkgY29uc3QKK3sK
KyAgICAvLyBJbnRlcnNlY3Qgd2l0aCB0aWxlCisgICAgRmxvYXRSZWN0IHRpbGVCb3VuZHMgPSB0
aGlzLT50aWxlQm91bmRzKHRpbGUpOworICAgIEZsb2F0UmVjdCBzcmNSZWN0SW50ZXJzZWN0ZWQg
PSBzcmNSZWN0OworICAgIHNyY1JlY3RJbnRlcnNlY3RlZC5pbnRlcnNlY3QodGlsZUJvdW5kcyk7
CisKKyAgICBpZiAoc3JjUmVjdEludGVyc2VjdGVkLmlzRW1wdHkoKSkgeworICAgICAgICBuZXdT
cmMgPSBuZXdEc3QgPSBGbG9hdFJlY3QoMCwgMCwgMCwgMCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBmbG9hdCBzcmNSZWN0SW50ZXJzZWN0ZWROb3JtWCA9IChzcmNSZWN0SW50ZXJz
ZWN0ZWQueCgpIC0gc3JjUmVjdC54KCkpIC8gc3JjUmVjdC53aWR0aCgpOworICAgIGZsb2F0IHNy
Y1JlY3RJbnRlcnNlY3RlZE5vcm1ZID0gKHNyY1JlY3RJbnRlcnNlY3RlZC55KCkgLSBzcmNSZWN0
LnkoKSkgLyBzcmNSZWN0LmhlaWdodCgpOworICAgIGZsb2F0IHNyY1JlY3RJbnRlcnNlY3RlZE5v
cm1XID0gc3JjUmVjdEludGVyc2VjdGVkLndpZHRoKCkgLyBzcmNSZWN0LndpZHRoKCk7CisgICAg
ZmxvYXQgc3JjUmVjdEludGVyc2VjdGVkTm9ybUggPSBzcmNSZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0
KCkgLyBzcmNSZWN0LmhlaWdodCgpOworCisgICAgbmV3U3JjID0gc3JjUmVjdEludGVyc2VjdGVk
OworICAgIG5ld1NyYy5tb3ZlKC10aWxlQm91bmRzLngoKSwgLXRpbGVCb3VuZHMueSgpKTsKKyAg
ICBpZiAobV9ib3JkZXJUZXhlbHMpIHsKKyAgICAgICAgaWYgKHRpbGVYSW5kZXgodGlsZSkgPiAw
KQorICAgICAgICAgICAgbmV3U3JjLm1vdmUoMSwgMCk7CisgICAgICAgIGlmICh0aWxlWUluZGV4
KHRpbGUpID4gMCkKKyAgICAgICAgICAgIG5ld1NyYy5tb3ZlKDAsIDEpOworICAgIH0KKworICAg
IG5ld0RzdCA9IEZsb2F0UmVjdCgKKyAgICAgICAgc3JjUmVjdEludGVyc2VjdGVkTm9ybVggKiBk
c3RSZWN0LndpZHRoKCkgKyBkc3RSZWN0LngoKSwKKyAgICAgICAgc3JjUmVjdEludGVyc2VjdGVk
Tm9ybVkgKiBkc3RSZWN0LmhlaWdodCgpICsgZHN0UmVjdC55KCksCisgICAgICAgIHNyY1JlY3RJ
bnRlcnNlY3RlZE5vcm1XICogZHN0UmVjdC53aWR0aCgpLAorICAgICAgICBzcmNSZWN0SW50ZXJz
ZWN0ZWROb3JtSCAqIGRzdFJlY3QuaGVpZ2h0KCkpOworfQorCisKK0dMRVMyVGV4dHVyZTo6R0xF
UzJUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBWZWN0b3I8dW5zaWdu
ZWQgaW50PiYgdGlsZVRleHR1cmVJZHMsIEZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhl
aWdodCwgaW50IG1heFRleHR1cmVTaXplKQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAg
LCBtX3RleHR1cmVJZCh0ZXh0dXJlSWQpCiAgICAgLCBtX2Zvcm1hdChmb3JtYXQpCi0gICAgLCBt
X3dpZHRoKHdpZHRoKQotICAgICwgbV9oZWlnaHQoaGVpZ2h0KQorICAgICwgbV90aWxlcyhtYXhU
ZXh0dXJlU2l6ZSwgd2lkdGgsIGhlaWdodCwgdHJ1ZSkKKyAgICAsIG1fdGlsZVRleHR1cmVJZHMo
dGlsZVRleHR1cmVJZHMpCiB7CiB9CiAKIEdMRVMyVGV4dHVyZTo6fkdMRVMyVGV4dHVyZSgpCiB7
Ci0gICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKG1fdGV4dHVyZUlkKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IG1fdGlsZVRleHR1cmVJZHMuc2l6ZSgpOyBpKyspCisgICAg
ICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX3RpbGVUZXh0dXJlSWRzW2ldKTsKIH0KIAog
UGFzc1JlZlB0cjxHTEVTMlRleHR1cmU+IEdMRVMyVGV4dHVyZTo6Y3JlYXRlKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCBGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7
Ci0gICAgaW50IG1heDsKLSAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1RFWFRVUkVfU0laRSwgJm1heCk7Ci0gICAgaWYgKHdpZHRoID4gbWF4IHx8IGhlaWdo
dCA+IG1heCkgewotICAgICAgICBBU1NFUlQoISJ0ZXh0dXJlIHRvbyBiaWciKTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQorICAgIGludCBtYXhUZXh0dXJlU2l6ZSA9IDA7CisgICAgY29udGV4
dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtYXhU
ZXh0dXJlU2l6ZSk7CiAKLSAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSBjb250ZXh0LT5jcmVhdGVU
ZXh0dXJlKCk7Ci0gICAgaWYgKCF0ZXh0dXJlSWQpCi0gICAgICAgIHJldHVybiAwOworICAgIFRp
bGluZ0RhdGEgdGlsaW5nKG1heFRleHR1cmVTaXplLCB3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKKyAg
ICBpbnQgbnVtVGlsZXMgPSB0aWxpbmcubnVtVGlsZXMoKTsKKworICAgIFZlY3Rvcjx1bnNpZ25l
ZCBpbnQ+IHRleHR1cmVJZHMobnVtVGlsZXMpOworICAgIHRleHR1cmVJZHMuZmlsbCgwLCBudW1U
aWxlcyk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1UaWxlczsgaSsrKQorICAgICAgICAg
dGV4dHVyZUlkc1tpXSA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKKworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbnVtVGlsZXM7IGkrKykgeworICAgICAgICB1bnNpZ25lZCBpbnQgdGV4dHVy
ZUlkID0gdGV4dHVyZUlkcy5iZWdpbigpW2ldOworICAgICAgICBpZiAoIXRleHR1cmVJZCkgewor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1UaWxlczsgaSsrKQorICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmRlbGV0ZVRleHR1cmUodGV4dHVyZUlkc1tpXSk7CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQogCi0gICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCk7Ci0gICAgY29udGV4dC0+dGV4SW1h
Z2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIHdpZHRoLCBoZWlnaHQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7CisgICAgICAgIEludFJlY3QgdGlsZUJvdW5k
c1dpdGhCb3JkZXIgPSB0aWxpbmcudGlsZUJvdW5kc1dpdGhCb3JkZXIoaSk7CiAKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEdMRVMyVGV4dHVyZShjb250ZXh0LCB0ZXh0dXJlSWQsIGZvcm1hdCwg
d2lkdGgsIGhlaWdodCkpOworICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKKyAgICAgICAgY29udGV4dC0+dGV4SW1h
Z2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwKKyAgICAgICAgICAgIDAsCisgICAg
ICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwKKyAgICAgICAgICAgIHRpbGVCb3VuZHNX
aXRoQm9yZGVyLndpZHRoKCksCisgICAgICAgICAgICB0aWxlQm91bmRzV2l0aEJvcmRlci5oZWln
aHQoKSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLAorICAgICAg
ICAgICAgMCk7CisgICAgfQorICAgIHJldHVybiBhZG9wdFJlZihuZXcgR0xFUzJUZXh0dXJlKGNv
bnRleHQsIHRleHR1cmVJZHMsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgbWF4VGV4dHVyZVNpemUp
KTsKIH0KIAogc3RhdGljIHZvaWQgY29udmVydEZvcm1hdChHTEVTMlRleHR1cmU6OkZvcm1hdCBm
b3JtYXQsIHVuc2lnbmVkIGludCogZ2xGb3JtYXQsIHVuc2lnbmVkIGludCogZ2xUeXBlLCBib29s
KiBzd2l6emxlKQpAQCAtOTQsMzEgKzMwMSw2NSBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0Rm9ybWF0
KEdMRVMyVGV4dHVyZTo6Rm9ybWF0IGZvcm1hdCwgdW5zaWduZWQgaW50KiBnbEZvcm1hdCwgdQog
ICAgIH0KIH0KIAordGVtcGxhdGUgPGJvb2wgc3dpenpsZT4KK3VpbnQzMl90KiBDb3B5U3ViUmVj
dCh1aW50MzJfdCogc3JjLCBpbnQgc3JjWCwgaW50IHNyY1ksIHVpbnQzMl90KiBkc3QsIGludCB3
aWR0aCwgaW50IGhlaWdodCwgaW50IHNyY1N0cmlkZSkKK3sKKyAgICB1aW50MzJfdCogc3JjT2Zm
c2V0ID0gc3JjICsgc3JjWCArIHNyY1kgKiBzcmNTdHJpZGU7CisKKyAgICBpZiAoIXN3aXp6bGUg
JiYgd2lkdGggPT0gc3JjU3RyaWRlKQorICAgICAgICByZXR1cm4gc3JjT2Zmc2V0OworCisgICAg
dWludDMyX3QqIGRzdFBpeGVsID0gZHN0OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aCA7IHgrKykgeworICAg
ICAgICAgICAgdWludDMyX3QgcGl4ZWwgPSBzcmNPZmZzZXRbeCArIHkgKiBzcmNTdHJpZGVdOwor
ICAgICAgICAgICAgaWYgKHN3aXp6bGUpCisgICAgICAgICAgICAgICAgKmRzdFBpeGVsID0gcGl4
ZWwgJiAweEZGMDBGRjAwIHwgKChwaXhlbCAmIDB4MDBGRjAwMDApID4+IDE2KSB8ICgocGl4ZWwg
JiAweDAwMDAwMEZGKSA8PCAxNik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
KmRzdFBpeGVsID0gcGl4ZWw7CisgICAgICAgICAgICBkc3RQaXhlbCsrOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBkc3Q7Cit9CisKIHZvaWQgR0xFUzJUZXh0dXJlOjpsb2FkKHZvaWQq
IHBpeGVscykKIHsKKyAgICB1aW50MzJfdCogcGl4ZWxzMzIgPSBzdGF0aWNfY2FzdDx1aW50MzJf
dCo+KHBpeGVscyk7CiAgICAgdW5zaWduZWQgaW50IGdsRm9ybWF0LCBnbFR5cGU7CiAgICAgYm9v
bCBzd2l6emxlOwogICAgIGNvbnZlcnRGb3JtYXQobV9mb3JtYXQsICZnbEZvcm1hdCwgJmdsVHlw
ZSwgJnN3aXp6bGUpOwotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKICAgICBpZiAoc3dpenpsZSkgewogICAgICAg
ICBBU1NFUlQoZ2xGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgZ2xUeXBlID09
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKICAgICAgICAgLy8gRklYTUU6ICBU
aGlzIGNvdWxkIHVzZSBQQk8ncyB0byBzYXZlIGRvaW5nIGFuIGV4dHJhIGNvcHkgaGVyZS4KLSAg
ICAgICAgaW50IHNpemUgPSBtX3dpZHRoICogbV9oZWlnaHQ7Ci0gICAgICAgIHVuc2lnbmVkKiBw
aXhlbHMzMiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkKj4ocGl4ZWxzKTsKLSAgICAgICAgT3duQXJy
YXlQdHI8dW5zaWduZWQ+IGJ1ZihuZXcgdW5zaWduZWRbc2l6ZV0pOwotICAgICAgICB1bnNpZ25l
ZCogYnVmcHRyID0gYnVmLmdldCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWwgPSBwaXhlbHMzMltpXTsKLSAgICAg
ICAgICAgIGJ1ZnB0cltpXSA9IHBpeGVsICYgMHhGRjAwRkYwMCB8ICgocGl4ZWwgJiAweDAwRkYw
MDAwKSA+PiAxNikgfCAoKHBpeGVsICYgMHgwMDAwMDBGRikgPDwgMTYpOwotICAgICAgICB9Ci0g
ICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgMCwgMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIGJ1Zi5n
ZXQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQsIGds
Rm9ybWF0LCBnbFR5cGUsIHBpeGVscyk7CisgICAgfQorICAgIHVpbnQzMl90KiB0ZW1wQnVmZiA9
IG5ldyB1aW50MzJfdFttX3RpbGVzLm1heFRleHR1cmVTaXplKCkqbV90aWxlcy5tYXhUZXh0dXJl
U2l6ZSgpXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV90aWxlcy5udW1UaWxlcygpOyBp
KyspIHsKKyAgICAgICAgSW50UmVjdCB0aWxlQm91bmRzV2l0aEJvcmRlciA9IG1fdGlsZXMudGls
ZUJvdW5kc1dpdGhCb3JkZXIoaSk7CisKKyAgICAgICAgdWludDMyX3QqIHVwbG9hZEJ1ZmYgPSAw
OworICAgICAgICBpZiAoc3dpenpsZSkKKyAgICAgICAgICAgIHVwbG9hZEJ1ZmYgPSBDb3B5U3Vi
UmVjdDx0cnVlPigKKyAgICAgICAgICAgIHBpeGVsczMyLCB0aWxlQm91bmRzV2l0aEJvcmRlci54
KCksIHRpbGVCb3VuZHNXaXRoQm9yZGVyLnkoKSwKKyAgICAgICAgICAgIHRlbXBCdWZmLCB0aWxl
Qm91bmRzV2l0aEJvcmRlci53aWR0aCgpLCB0aWxlQm91bmRzV2l0aEJvcmRlci5oZWlnaHQoKSwg
bV90aWxlcy50b3RhbFNpemVYKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB1cGxvYWRC
dWZmID0gQ29weVN1YlJlY3Q8ZmFsc2U+KAorICAgICAgICAgICAgcGl4ZWxzMzIsIHRpbGVCb3Vu
ZHNXaXRoQm9yZGVyLngoKSwgdGlsZUJvdW5kc1dpdGhCb3JkZXIueSgpLAorICAgICAgICAgICAg
dGVtcEJ1ZmYsIHRpbGVCb3VuZHNXaXRoQm9yZGVyLndpZHRoKCksIHRpbGVCb3VuZHNXaXRoQm9y
ZGVyLmhlaWdodCgpLCBtX3RpbGVzLnRvdGFsU2l6ZVgoKSk7CisKKyAgICAgICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90aWxlVGV4dHVy
ZUlkc1tpXSk7CisgICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwKKyAgICAgICAgICAgIHRpbGVCb3VuZHNXaXRoQm9y
ZGVyLndpZHRoKCksCisgICAgICAgICAgICB0aWxlQm91bmRzV2l0aEJvcmRlci5oZWlnaHQoKSwg
Z2xGb3JtYXQsIGdsVHlwZSwgdXBsb2FkQnVmZik7CisgICAgfQorCisgICAgZGVsZXRlW10gdGVt
cEJ1ZmY7CiB9CiAKLXZvaWQgR0xFUzJUZXh0dXJlOjpiaW5kKCkKK3ZvaWQgR0xFUzJUZXh0dXJl
OjpiaW5kVGlsZShpbnQgdGlsZSkKIHsKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CisgICAgbV9jb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90aWxlVGV4dHVyZUlk
c1t0aWxlXSk7CiAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFw
aGljc0NvbnRleHQzRDo6TElORUFSKTsKICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01B
R19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwogICAgIG1fY29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVy
ZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUuaApp
bmRleCA0ZDM1MWNkLi5mZTAwMmY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmgKQEAgLTM1LDI3ICszNSw3MyBAQAogCiAjaW5jbHVk
ZSAiUmVmQ291bnRlZC5oIgogI2luY2x1ZGUgIlJlZlB0ci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAK
K2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEludFJlY3Q7CisKK2NsYXNzIFRpbGluZ0RhdGEgewor
cHVibGljOgorICAgIFRpbGluZ0RhdGEoaW50IG1heFRleHR1cmVTaXplLCBpbnQgdG90YWxTaXpl
WCwgaW50IHRvdGFsU2l6ZVksIGJvb2wgYm9yZGVyVGV4ZWxzKTsKKyAgICBpbnQgbWF4VGV4dHVy
ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX21heFRleHR1cmVTaXplOyB9CisgICAgaW50IHRvdGFs
U2l6ZVgoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsU2l6ZVg7IH0KKyAgICBpbnQgdG90YWxTaXpl
WSgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxTaXplWTsgfQorCisgICAgaW50IG51bVRpbGVzKCkg
Y29uc3QgeyByZXR1cm4gbnVtVGlsZXNYKCkgKiBudW1UaWxlc1koKTsgfQorICAgIGludCBudW1U
aWxlc1goKSBjb25zdCB7IHJldHVybiBtX251bVRpbGVzWDsgfQorICAgIGludCBudW1UaWxlc1ko
KSBjb25zdCB7IHJldHVybiBtX251bVRpbGVzWTsgfQorICAgIGludCB0aWxlSW5kZXgoaW50IHgs
IGludCB5KSBjb25zdCB7IHJldHVybiB4ICsgeSAqIG51bVRpbGVzWCgpOyB9CisgICAgaW50IHRp
bGVYSW5kZXgoaW50IHRpbGUpIGNvbnN0IHsgYXNzZXJ0VGlsZSh0aWxlKTsgcmV0dXJuIHRpbGUg
JSBudW1UaWxlc1goKTsgfQorICAgIGludCB0aWxlWUluZGV4KGludCB0aWxlKSBjb25zdCB7IGFz
c2VydFRpbGUodGlsZSk7IHJldHVybiB0aWxlIC8gbnVtVGlsZXNYKCk7IH0KKyAgICBpbnQgdGls
ZVhJbmRleEZyb21TcmNDb29yZChpbnQpIGNvbnN0OworICAgIGludCB0aWxlWUluZGV4RnJvbVNy
Y0Nvb3JkKGludCkgY29uc3Q7CisKKyAgICBJbnRSZWN0IHRpbGVCb3VuZHMoaW50IHRpbGUpIGNv
bnN0OworICAgIEludFJlY3QgdGlsZUJvdW5kc1dpdGhCb3JkZXIoaW50IHRpbGUpIGNvbnN0Owor
ICAgIEZsb2F0UmVjdCB0aWxlQm91bmRzTm9ybWFsaXplZChpbnQgdGlsZSkgY29uc3Q7CisgICAg
aW50IHRpbGVQb3NpdGlvblgoaW50IHhJbmRleCkgY29uc3Q7CisgICAgaW50IHRpbGVQb3NpdGlv
blkoaW50IHlJbmRleCkgY29uc3Q7CisgICAgaW50IHRpbGVTaXplWChpbnQgeEluZGV4KSBjb25z
dDsKKyAgICBpbnQgdGlsZVNpemVZKGludCB5SW5kZXgpIGNvbnN0OworICAgIEludFJlY3Qgb3Zl
cmxhcHBlZFRpbGVJbmRpY2VzKGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0OworICAgIElu
dFJlY3Qgb3ZlcmxhcHBlZFRpbGVJbmRpY2VzKGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29u
c3Q7CisKKyAgICAvLyBHaXZlbiBhIHNldCBvZiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGNvb3Jk
aW5hdGVzIGZvciBhIGRyYXdpbmcgcXVhZAorICAgIC8vIGluIHRleGVsIHVuaXRzLCByZXR1cm5z
IGFkanVzdGVkIGRhdGEgdG8gcmVuZGVyIGp1c3QgdGhlIG9uZSB0aWxlLgorICAgIHZvaWQgaW50
ZXJzZWN0RHJhd1F1YWQoY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IGRzdFJlY3QsIGludCB0aWxlLCBGbG9hdFJlY3QmIG5ld1NyYywgRmxvYXRSZWN0JiBuZXdEc3Qp
IGNvbnN0OworCitwcml2YXRlOgorICAgIFRpbGluZ0RhdGEoKSA6IG1fbWF4VGV4dHVyZVNpemUo
MCksIG1fdG90YWxTaXplWCgwKSwgbV90b3RhbFNpemVZKDApIHt9CisgICAgdm9pZCBhc3NlcnRU
aWxlKGludCB0aWxlKSBjb25zdCB7IEFTU0VSVCh0aWxlID49IDAgJiYgdGlsZSA8IG51bVRpbGVz
KCkpOyB9CisKKyAgICBpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKKyAgICBpbnQgbV90b3RhbFNpemVY
OworICAgIGludCBtX3RvdGFsU2l6ZVk7CisgICAgaW50IG1fYm9yZGVyVGV4ZWxzOworCisgICAg
Ly8gY29tcHV0ZWQgdmFsdWVzOgorICAgIGludCBtX251bVRpbGVzWDsKKyAgICBpbnQgbV9udW1U
aWxlc1k7Cit9OworCiBjbGFzcyBHTEVTMlRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRlZDxHTEVT
MlRleHR1cmU+IHsKIHB1YmxpYzoKICAgICB+R0xFUzJUZXh0dXJlKCk7CiAgICAgZW51bSBGb3Jt
YXQgeyBSR0JBOCwgQkdSQTggfTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHTEVTMlRleHR1cmU+
IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCosIEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsKLSAgICB2b2lkIGJpbmQoKTsKKyAgICB2b2lkIGJpbmRUaWxlKGludCB0aWxlKTsKICAgICB2
b2lkIGxvYWQodm9pZCogcGl4ZWxzKTsKICAgICBGb3JtYXQgZm9ybWF0KCkgY29uc3QgeyByZXR1
cm4gbV9mb3JtYXQ7IH0KLSAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9
Ci0gICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CisgICAgY29uc3Qg
VGlsaW5nRGF0YSYgdGlsZXMoKSBjb25zdCB7IHJldHVybiBtX3RpbGVzOyB9CiBwcml2YXRlOgot
ICAgIEdMRVMyVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHRleHR1cmVJZCwg
Rm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIEdMRVMyVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRCosIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCBpbnQ+JiB0aWxlVGV4dHVyZUlkcywg
Rm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWF4VGV4dHVyZVNpemUp
OwogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Ci0gICAgdW5zaWduZWQgbV90ZXh0
dXJlSWQ7CiAgICAgRm9ybWF0IG1fZm9ybWF0OwotICAgIGludCBtX3dpZHRoOwotICAgIGludCBt
X2hlaWdodDsKKyAgICBUaWxpbmdEYXRhIG1fdGlsZXM7CisgICAgVmVjdG9yPHVuc2lnbmVkIGlu
dD4gbV90aWxlVGV4dHVyZUlkczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDExMzYyOWIuLmU3
MWUxZGMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA4LTExICBWaW5jZW50
IFNjaGVpYiAgPHNjaGVpYkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ2FudmFzMkQgZG9lcyBu
b3Qgc3VwcG9ydCBpbWFnZXMgbGFyZ2VyIHRoYW4gc3lzdGVtJ3MgR1BVIG1heCB0ZXh0dXJlIHNp
emUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzODY0
CisKKyAgICAgICAgVW5pdCB0ZXN0cyBmb3IgVGlsaW5nRGF0YSBjbGFzcy4KKworICAgICAgICAq
IFdlYktpdC5neXA6CisgICAgICAgICogdGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDEwLTA4LTEwICBKaWFuIExpICA8amlhbmxp
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBBbm90aGVyIGNocm9taXVtIGJ1aWxkIGZpeC4KZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAKaW5kZXggZWI1YWJiZS4uMmEwZjUzMSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAKKysrIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTcxNiw2
ICs3MTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5j
cHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAndGVzdHMvUnVuQWxsVGVzdHMuY3BwJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICd0ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAnLAogICAgICAgICAgICAgICAg
ICAgICBdLAogICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKICAgICAgICAgICAg
ICAgICAgICAgICAgIFsnT1M9PSJ3aW4iJywgewpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1RpbGluZ0RhdGFUZXN0LmNwcCBiL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxpbmdE
YXRhVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjNkNjFlNQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxpbmdEYXRhVGVzdC5j
cHAKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxndGVz
dC9ndGVzdC5oPgorCisjaW5jbHVkZSAiR0xFUzJUZXh0dXJlLmgiCisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitURVNUKFRpbGluZ0RhdGFUZXN0LCBudW1UaWxl
c19Ob1RpbGluZykKK3sKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgxNiwgMTYsIDE2LCBm
YWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMTYsIDE1LCAx
NSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMTYsIDE2
LCAxNiwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMTYs
ICAxLCAxNiwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRh
KDE1LCAxNSwgMTUsIHRydWUpLm51bVRpbGVzKCkpOworfQorCitURVNUKFRpbGluZ0RhdGFUZXN0
LCBudW1UaWxlc19UaWxpbmdOb0JvcmRlcnMpCit7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0Rh
dGEoIDQsICAxLCAgNCwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxp
bmdEYXRhKCA0LCAgMiwgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwg
VGlsaW5nRGF0YSggNCwgIDMsICA0LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VR
KDEsIFRpbGluZ0RhdGEoIDQsICA0LCAgNCwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVD
VF9FUSgyLCBUaWxpbmdEYXRhKCA0LCAgNSwgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBF
WFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSggNCwgIDYsICA0LCBmYWxzZSkubnVtVGlsZXMoKSk7Cisg
ICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoIDQsICA3LCAgNCwgZmFsc2UpLm51bVRpbGVzKCkp
OworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKCA0LCAgOCwgIDQsIGZhbHNlKS5udW1UaWxl
cygpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSggNCwgIDksICA0LCBmYWxzZSkubnVt
VGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoIDQsIDEwLCAgNCwgZmFsc2Up
Lm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKCA0LCAxMSwgIDQsIGZh
bHNlKS5udW1UaWxlcygpKTsKKworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKCA1LCAgMSwg
IDUsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSggNSwg
IDIsICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEo
IDUsICAzLCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdE
YXRhKCA1LCAgNCwgIDUsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGls
aW5nRGF0YSggNSwgIDUsICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDIs
IFRpbGluZ0RhdGEoIDUsICA2LCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9F
USgyLCBUaWxpbmdEYXRhKCA1LCAgNywgIDUsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBF
Q1RfRVEoMiwgVGlsaW5nRGF0YSggNSwgIDgsICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAg
RVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoIDUsICA5LCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOwor
ICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKCA1LCAxMCwgIDUsIGZhbHNlKS5udW1UaWxlcygp
KTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSggNSwgMTEsICA1LCBmYWxzZSkubnVtVGls
ZXMoKSk7CisKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgxNiwgMTYsIDE2LCBmYWxzZSku
bnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMTcsIDE2LCAxNiwgZmFs
c2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDE1LCAxNiwgMTYs
IGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSggOCwgMTYs
IDE2LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDYsIFRpbGluZ0RhdGEoIDgs
IDE3LCAxNiwgZmFsc2UpLm51bVRpbGVzKCkpOworfQorCitURVNUKFRpbGluZ0RhdGFUZXN0LCBu
dW1UaWxlc19UaWxpbmdXaXRoQm9yZGVycykKK3sKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0
YSggMywgIDEsICAzLCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5n
RGF0YSggMywgIDIsICAzLCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGls
aW5nRGF0YSggMywgIDMsICAzLCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwg
VGlsaW5nRGF0YSggMywgIDQsICAzLCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEo
MywgVGlsaW5nRGF0YSggMywgIDUsICAzLCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1Rf
RVEoNCwgVGlsaW5nRGF0YSggMywgIDYsICAzLCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBF
Q1RfRVEoNSwgVGlsaW5nRGF0YSggMywgIDcsICAzLCB0cnVlKS5udW1UaWxlcygpKTsKKworICAg
IEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKCA0LCAgMSwgIDQsIHRydWUpLm51bVRpbGVzKCkpOwor
ICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKCA0LCAgMiwgIDQsIHRydWUpLm51bVRpbGVzKCkp
OworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKCA0LCAgMywgIDQsIHRydWUpLm51bVRpbGVz
KCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKCA0LCAgNCwgIDQsIHRydWUpLm51bVRp
bGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKCA0LCAgNSwgIDQsIHRydWUpLm51
bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKCA0LCAgNiwgIDQsIHRydWUp
Lm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKCA0LCAgNywgIDQsIHRy
dWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKCA0LCAgOCwgIDQs
IHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKCA0LCAgOSwg
IDQsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKCA0LCAx
MCwgIDQsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKCA0
LCAxMSwgIDQsIHRydWUpLm51bVRpbGVzKCkpOworCisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0Rh
dGEoIDUsICAxLCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGlu
Z0RhdGEoIDUsICAyLCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRp
bGluZ0RhdGEoIDUsICAzLCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEs
IFRpbGluZ0RhdGEoIDUsICA0LCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VR
KDEsIFRpbGluZ0RhdGEoIDUsICA1LCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNU
X0VRKDIsIFRpbGluZ0RhdGEoIDUsICA2LCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQ
RUNUX0VRKDIsIFRpbGluZ0RhdGEoIDUsICA3LCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAg
RVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoIDUsICA4LCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7Cisg
ICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoIDUsICA5LCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7
CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoIDUsIDEwLCAgNSwgdHJ1ZSkubnVtVGlsZXMo
KSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoIDUsIDExLCAgNSwgdHJ1ZSkubnVtVGls
ZXMoKSk7Cit9CisKK1RFU1QoVGlsaW5nRGF0YVRlc3QsIHRpbGVYSW5kZXhGcm9tU3JjQ29vcmQp
Cit7CisgICAgRVhQRUNUX0VRKDAsIFRpbGluZ0RhdGEoIDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVY
SW5kZXhGcm9tU3JjQ29vcmQoIDApKTsKKyAgICBFWFBFQ1RfRVEoMCwgVGlsaW5nRGF0YSggMywg
MTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCggMSkpOworICAgIEVYUEVDVF9F
USgwLCBUaWxpbmdEYXRhKCAzLCAxMCwgMTAsIGZhbHNlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3Jk
KCAyKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoIDMsIDEwLCAxMCwgZmFsc2UpLnRp
bGVYSW5kZXhGcm9tU3JjQ29vcmQoIDMpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgg
MywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCggNCkpOworICAgIEVYUEVD
VF9FUSgxLCBUaWxpbmdEYXRhKCAzLCAxMCwgMTAsIGZhbHNlKS50aWxlWEluZGV4RnJvbVNyY0Nv
b3JkKCA1KSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoIDMsIDEwLCAxMCwgZmFsc2Up
LnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoIDYpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0
YSggMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCggNykpOworICAgIEVY
UEVDVF9FUSgyLCBUaWxpbmdEYXRhKCAzLCAxMCwgMTAsIGZhbHNlKS50aWxlWEluZGV4RnJvbVNy
Y0Nvb3JkKCA4KSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoIDMsIDEwLCAxMCwgZmFs
c2UpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoIDkpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5n
RGF0YSggMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCgxMCkpOworICAg
IEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKCAzLCAxMCwgMTAsIGZhbHNlKS50aWxlWEluZGV4RnJv
bVNyY0Nvb3JkKDExKSk7CisKKyAgICBFWFBFQ1RfRVEoMCwgVGlsaW5nRGF0YSggMywgMTAsIDEw
LCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKCAwKSk7CisgICAgRVhQRUNUX0VRKDAsIFRp
bGluZ0RhdGEoIDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCggMSkpOwor
ICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKCAzLCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhG
cm9tU3JjQ29vcmQoIDIpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSggMywgMTAsIDEw
LCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKCAzKSk7CisgICAgRVhQRUNUX0VRKDMsIFRp
bGluZ0RhdGEoIDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCggNCkpOwor
ICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKCAzLCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhG
cm9tU3JjQ29vcmQoIDUpKTsKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSggMywgMTAsIDEw
LCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKCA2KSk7CisgICAgRVhQRUNUX0VRKDYsIFRp
bGluZ0RhdGEoIDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCggNykpOwor
ICAgIEVYUEVDVF9FUSg3LCBUaWxpbmdEYXRhKCAzLCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhG
cm9tU3JjQ29vcmQoIDgpKTsKKyAgICBFWFBFQ1RfRVEoNywgVGlsaW5nRGF0YSggMywgMTAsIDEw
LCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKCA5KSk7CisgICAgRVhQRUNUX0VRKDcsIFRp
bGluZ0RhdGEoIDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCgxMCkpOwor
ICAgIEVYUEVDVF9FUSg3LCBUaWxpbmdEYXRhKCAzLCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhG
cm9tU3JjQ29vcmQoMTEpKTsKK30KK1RFU1QoVGlsaW5nRGF0YVRlc3QsIHRpbGVZSW5kZXhGcm9t
U3JjQ29vcmQpCit7CisgICAgRVhQRUNUX0VRKDAsIFRpbGluZ0RhdGEoIDMsIDEwLCAxMCwgZmFs
c2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoIDApKTsKKyAgICBFWFBFQ1RfRVEoMCwgVGlsaW5n
RGF0YSggMywgMTAsIDEwLCBmYWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCggMSkpOworICAg
IEVYUEVDVF9FUSgwLCBUaWxpbmdEYXRhKCAzLCAxMCwgMTAsIGZhbHNlKS50aWxlWUluZGV4RnJv
bVNyY0Nvb3JkKCAyKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoIDMsIDEwLCAxMCwg
ZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoIDMpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGls
aW5nRGF0YSggMywgMTAsIDEwLCBmYWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCggNCkpOwor
ICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKCAzLCAxMCwgMTAsIGZhbHNlKS50aWxlWUluZGV4
RnJvbVNyY0Nvb3JkKCA1KSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoIDMsIDEwLCAx
MCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoIDYpKTsKKyAgICBFWFBFQ1RfRVEoMiwg
VGlsaW5nRGF0YSggMywgMTAsIDEwLCBmYWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCggNykp
OworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKCAzLCAxMCwgMTAsIGZhbHNlKS50aWxlWUlu
ZGV4RnJvbVNyY0Nvb3JkKCA4KSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoIDMsIDEw
LCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoIDkpKTsKKyAgICBFWFBFQ1RfRVEo
MywgVGlsaW5nRGF0YSggMywgMTAsIDEwLCBmYWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCgx
MCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKCAzLCAxMCwgMTAsIGZhbHNlKS50aWxl
WUluZGV4RnJvbVNyY0Nvb3JkKDExKSk7CisKKyAgICBFWFBFQ1RfRVEoMCwgVGlsaW5nRGF0YSgg
MywgMTAsIDEwLCB0cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKCAwKSk7CisgICAgRVhQRUNU
X0VRKDAsIFRpbGluZ0RhdGEoIDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29y
ZCggMSkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKCAzLCAxMCwgMTAsIHRydWUpLnRp
bGVZSW5kZXhGcm9tU3JjQ29vcmQoIDIpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSgg
MywgMTAsIDEwLCB0cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKCAzKSk7CisgICAgRVhQRUNU
X0VRKDMsIFRpbGluZ0RhdGEoIDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29y
ZCggNCkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKCAzLCAxMCwgMTAsIHRydWUpLnRp
bGVZSW5kZXhGcm9tU3JjQ29vcmQoIDUpKTsKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSgg
MywgMTAsIDEwLCB0cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKCA2KSk7CisgICAgRVhQRUNU
X0VRKDYsIFRpbGluZ0RhdGEoIDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29y
ZCggNykpOworICAgIEVYUEVDVF9FUSg3LCBUaWxpbmdEYXRhKCAzLCAxMCwgMTAsIHRydWUpLnRp
bGVZSW5kZXhGcm9tU3JjQ29vcmQoIDgpKTsKKyAgICBFWFBFQ1RfRVEoNywgVGlsaW5nRGF0YSgg
MywgMTAsIDEwLCB0cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKCA5KSk7CisgICAgRVhQRUNU
X0VRKDcsIFRpbGluZ0RhdGEoIDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29y
ZCgxMCkpOworICAgIEVYUEVDVF9FUSg3LCBUaWxpbmdEYXRhKCAzLCAxMCwgMTAsIHRydWUpLnRp
bGVZSW5kZXhGcm9tU3JjQ29vcmQoMTEpKTsKK30KKworVEVTVChUaWxpbmdEYXRhVGVzdCwgdGls
ZVNpemVYKQoreworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKCA1LCAgNSwgIDUsIGZhbHNl
KS50aWxlU2l6ZVgoMCkpOworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKCA1LCAgNSwgIDUs
IHRydWUpLnRpbGVTaXplWCgwKSk7CisKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSggNSwg
IDYsICA2LCBmYWxzZSkudGlsZVNpemVYKDApKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0
YSggNSwgIDYsICA2LCBmYWxzZSkudGlsZVNpemVYKDEpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGls
aW5nRGF0YSggNSwgIDYsICA2LCB0cnVlKS50aWxlU2l6ZVgoMCkpOworICAgIEVYUEVDVF9FUSgy
LCBUaWxpbmdEYXRhKCA1LCAgNiwgIDYsIHRydWUpLnRpbGVTaXplWCgxKSk7CisKKyAgICBFWFBF
Q1RfRVEoNSwgVGlsaW5nRGF0YSggNSwgIDgsICA4LCBmYWxzZSkudGlsZVNpemVYKDApKTsKKyAg
ICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSggNSwgIDgsICA4LCBmYWxzZSkudGlsZVNpemVYKDEp
KTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSggNSwgIDgsICA4LCB0cnVlKS50aWxlU2l6
ZVgoMCkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKCA1LCAgOCwgIDgsIHRydWUpLnRp
bGVTaXplWCgxKSk7CisKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSggNSwgMTAsIDEwLCBm
YWxzZSkudGlsZVNpemVYKDApKTsKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSggNSwgMTAs
IDEwLCBmYWxzZSkudGlsZVNpemVYKDEpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSgg
NSwgMTAsIDEwLCB0cnVlKS50aWxlU2l6ZVgoMCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdE
YXRhKCA1LCAxMCwgMTAsIHRydWUpLnRpbGVTaXplWCgxKSk7CisgICAgRVhQRUNUX0VRKDMsIFRp
bGluZ0RhdGEoIDUsIDEwLCAxMCwgdHJ1ZSkudGlsZVNpemVYKDIpKTsKKworICAgIEVYUEVDVF9F
USg0LCBUaWxpbmdEYXRhKCA1LCAxMSwgMTEsIHRydWUpLnRpbGVTaXplWCgyKSk7CisgICAgRVhQ
RUNUX0VRKDMsIFRpbGluZ0RhdGEoIDUsIDEyLCAxMiwgdHJ1ZSkudGlsZVNpemVYKDIpKTsKK30K
K1RFU1QoVGlsaW5nRGF0YVRlc3QsIHRpbGVTaXplWSkKK3sKKyAgICBFWFBFQ1RfRVEoNSwgVGls
aW5nRGF0YSggNSwgIDUsICA1LCBmYWxzZSkudGlsZVNpemVZKDApKTsKKyAgICBFWFBFQ1RfRVEo
NSwgVGlsaW5nRGF0YSggNSwgIDUsICA1LCB0cnVlKS50aWxlU2l6ZVkoMCkpOworCisgICAgRVhQ
RUNUX0VRKDUsIFRpbGluZ0RhdGEoIDUsICA2LCAgNiwgZmFsc2UpLnRpbGVTaXplWSgwKSk7Cisg
ICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoIDUsICA2LCAgNiwgZmFsc2UpLnRpbGVTaXplWSgx
KSk7CisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoIDUsICA2LCAgNiwgdHJ1ZSkudGlsZVNp
emVZKDApKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSggNSwgIDYsICA2LCB0cnVlKS50
aWxlU2l6ZVkoMSkpOworCisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoIDUsICA4LCAgOCwg
ZmFsc2UpLnRpbGVTaXplWSgwKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoIDUsICA4
LCAgOCwgZmFsc2UpLnRpbGVTaXplWSgxKSk7CisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEo
IDUsICA4LCAgOCwgdHJ1ZSkudGlsZVNpemVZKDApKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5n
RGF0YSggNSwgIDgsICA4LCB0cnVlKS50aWxlU2l6ZVkoMSkpOworCisgICAgRVhQRUNUX0VRKDUs
IFRpbGluZ0RhdGEoIDUsIDEwLCAxMCwgZmFsc2UpLnRpbGVTaXplWSgwKSk7CisgICAgRVhQRUNU
X0VRKDUsIFRpbGluZ0RhdGEoIDUsIDEwLCAxMCwgZmFsc2UpLnRpbGVTaXplWSgxKSk7CisgICAg
RVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoIDUsIDEwLCAxMCwgdHJ1ZSkudGlsZVNpemVZKDApKTsK
KyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSggNSwgMTAsIDEwLCB0cnVlKS50aWxlU2l6ZVko
MSkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKCA1LCAxMCwgMTAsIHRydWUpLnRpbGVT
aXplWSgyKSk7CisKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSggNSwgMTEsIDExLCB0cnVl
KS50aWxlU2l6ZVkoMikpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKCA1LCAxMiwgMTIs
IHRydWUpLnRpbGVTaXplWSgyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64164</attachid>
            <date>2010-08-11 14:50:53 -0700</date>
            <delta_ts>2010-08-11 17:41:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43864-20100811145052.patch</filename>
            <type>text/plain</type>
            <size>41950</size>
            <attacher name="Vincent Scheib">scheib</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YmYxNmM1MWM1ZWM0ZjViOWQzMTMwMTIxNWU1ZWMwZjkyOTk0ZWQ4Yi4uZmI4ODc2ZjVkOTllMGUw
N2I2ODFhZmRmNzVjZTgzODk3OTFmOTRlNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMC0wOC0xMSAgVmlu
Y2VudCBTY2hlaWIgIDxzY2hlaWJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENhbnZhczJEIGRvZXMgbm90IHN1cHBvcnQgaW1h
Z2VzIGxhcmdlciB0aGFuIHN5c3RlbSdzIEdQVSBtYXggdGV4dHVyZSBzaXplCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mzg2NAorCisgICAgICAgIEEg
bmV3IGNsYXNzICJUaWxpbmdEYXRhIiBoYXMgYmVlbiBjcmVhdGVkIHRoYXQgcHJvdmlkZXMgbG9n
aWMgZm9yIAorICAgICAgICBzcGxpdHRpbmcgYSBsYXJnZSBpbWFnZSBpbnRvIGEgc2VyaWVzIG9m
IHNtYWxsZXIgdGlsZXMuCisgICAgICAgIAorICAgICAgICBHTEVTMlRleHR1cmUgYW5kIENMRVMy
Q2FudmFzIGFyZSBtb2RpZmllZCB0byB1c2UgdGhlIFRpbGluZ0RhdGEgdG8KKyAgICAgICAgc3Bs
aXQgaW1hZ2VzIG9uIHRleHR1cmUgdXBsb2FkIGFuZCByZW5kZXIgb25lIGxvZ2ljYWwgaW1hZ2Ug
YXMgbWFueSBzbWFsbGVyCisgICAgICAgIGltYWdlcy4KKworICAgICAgICBUaWxpbmdEYXRhIGlz
IHRlc3RlZCB2aWEgdW5pdCB0ZXN0cyBpbiBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsaW5nRGF0
YVRlc3QuY3BwCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dMRVMyQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4
dHVyZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRS
ZWN0VGlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52
YXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZU51bVRpbGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGluZ0RhdGE6OlRpbGluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0
YTo6dGlsZVhJbmRleEZyb21TcmNDb29yZCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRh
Ojp0aWxlWUluZGV4RnJvbVNyY0Nvb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6
OnRpbGVCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZUJvdW5kc1dp
dGhCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZUJvdW5kc05vcm1h
bGl6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZVBvc2l0aW9uWCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxlUG9zaXRpb25ZKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGluZ0RhdGE6OnRpbGVTaXplWCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdE
YXRhOjp0aWxlU2l6ZVkpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6b3ZlcmxhcHBl
ZFRpbGVJbmRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OmludGVyc2VjdERy
YXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyVGV4dHVyZTo6R0xFUzJUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdMRVMyVGV4dHVyZTo6fkdMRVMyVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3B5
U3ViUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OmxvYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6R0xFUzJUZXh0dXJlOjpiaW5kVGlsZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmg6CisgICAgICAgIChXZWJDb3JlOjpUaWxp
bmdEYXRhOjptYXhUZXh0dXJlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0
b3RhbFNpemVYKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OnRvdGFsU2l6ZVkpOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6bnVtVGlsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6VGlsaW5nRGF0YTo6bnVtVGlsZXNYKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6
Om51bVRpbGVzWSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxlSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZVhJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxpbmdEYXRhOjp0aWxlWUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0Rh
dGE6OlRpbGluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6YXNzZXJ0VGls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OnRpbGVzKToKKwogMjAxMC0wOC0x
MCAgQWFyb24gQm9vZG1hbiAgPGFhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXZpZCBIeWF0dC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggYTJmYWY1MzE3OTlmNjg5ZmE5ODYxZjJmZWI0NTkzYzAyYTMy
ZTcyMi4uMTE3NGU0OWY1MGFiOGM1MmU0YzQ4ODJkM2UyYzMxYjQ5N2ZkYTEzNCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIy
MzAsNiArMjIzMCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UGxhdGZvcm1JY29uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsaW5nRGF0YS5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxpbmdEYXRhLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zZm9ybUxheWVyQ2hy
b21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNw
YXJlbmN5V2luLmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dMRVMyQ2FudmFzLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR0xFUzJDYW52YXMuY3BwCmluZGV4IDhhOWJkZTFmOGZjNjQ0NmUzYzIwNDk5MTU0YjA1MjRi
ODYxYTkyYjUuLjVkMDdiMGRkYzcyNjZjNTJjZWQ4NzNlMGRkYWUyYmFmYWU2ZDE0Y2MgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3Bw
CkBAIC0zOCwxNCArMzgsMTUgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJH
TEVTMlRleHR1cmUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUg
IkludFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlVpbnQx
NkFycmF5LmgiCiAKICNkZWZpbmUgX1VTRV9NQVRIX0RFRklORVMKICNpbmNsdWRlIDxtYXRoLmg+
CiAKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL093bkFycmF5
UHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTIyMSw3ICsyMjIsNiBAQCB2b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRS
ZWN0KEdMRVMyVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZQogICAgIGNo
ZWNrR0xFcnJvcigiZ2xVc2VQcm9ncmFtIik7CiAKICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKLSAgICB0ZXh0dXJlLT5iaW5kKCk7CiAK
ICAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShtX3RleFNhbXBsZXJMb2NhdGlvbiwgMCk7CiAgICAg
Y2hlY2tHTEVycm9yKCJnbFVuaWZvcm0xaSIpOwpAQCAtMjI5LDI4ICsyMjksNTEgQEAgdm9pZCBH
TEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdChHTEVTMlRleHR1cmUqIHRleHR1cmUsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmUKICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihtX3RleEFscGhhTG9j
YXRpb24sIGFscGhhKTsKICAgICBjaGVja0dMRXJyb3IoImdsVW5pZm9ybTFmIGZvciBhbHBoYSIp
OwogCisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKG1fdGV4UG9zaXRpb25Mb2Nh
dGlvbiwgMywgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisKKyAgICBt
X2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fdGV4UG9zaXRpb25Mb2NhdGlvbik7
CisKKyAgICBjb25zdCBUaWxpbmdEYXRhJiB0aWxlcyA9IHRleHR1cmUtPnRpbGVzKCk7CisgICAg
SW50UmVjdCB0aWxlSWR4UmVjdCA9IHRpbGVzLm92ZXJsYXBwZWRUaWxlSW5kaWNlcyhzcmNSZWN0
KTsKKworICAgIGZvciAoaW50IHkgPSB0aWxlSWR4UmVjdC55KCk7IHkgPD0gdGlsZUlkeFJlY3Qu
Ym90dG9tKCk7IHkrKykKKyAgICAgICAgZm9yIChpbnQgeCA9IHRpbGVJZHhSZWN0LngoKTsgeCA8
PSB0aWxlSWR4UmVjdC5yaWdodCgpOyB4KyspCisgICAgICAgICAgICBkcmF3VGV4dHVyZWRSZWN0
VGlsZSh0ZXh0dXJlLCB0aWxlcy50aWxlSW5kZXgoeCwgeSksIHNyY1JlY3QsIGRzdFJlY3QsIHRy
YW5zZm9ybSk7Cit9CisKK3ZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3RUaWxlKEdM
RVMyVGV4dHVyZSogdGV4dHVyZSwgaW50IHRpbGUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKK3sKKyAgICBpZiAoZHN0UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGNvbnN0IFRpbGluZ0RhdGEgdGlsZXMgPSB0ZXh0dXJlLT50aWxlcygpOworCisgICAgdGV4dHVy
ZS0+YmluZFRpbGUodGlsZSk7CisKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdENsaXBwZWRJblRpbGVT
cGFjZTsKKyAgICBGbG9hdFJlY3QgZHN0UmVjdEludGVyc2VjdGVkOworICAgIHRpbGVzLmludGVy
c2VjdERyYXdRdWFkKHNyY1JlY3QsIGRzdFJlY3QsIHRpbGUsIHNyY1JlY3RDbGlwcGVkSW5UaWxl
U3BhY2UsIGRzdFJlY3RJbnRlcnNlY3RlZCk7CisKKyAgICBJbnRSZWN0IHRpbGVCb3VuZHNXaXRo
Qm9yZGVyID0gdGlsZXMudGlsZUJvdW5kc1dpdGhCb3JkZXIodGlsZSk7CisKICAgICBBZmZpbmVU
cmFuc2Zvcm0gbWF0cml4KG1fZmxpcE1hdHJpeCk7CiAgICAgbWF0cml4Lm11bHRMZWZ0KHRyYW5z
Zm9ybSk7Ci0gICAgbWF0cml4LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwot
ICAgIG1hdHJpeC5zY2FsZShkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkpOworICAg
IG1hdHJpeC50cmFuc2xhdGUoZHN0UmVjdEludGVyc2VjdGVkLngoKSwgZHN0UmVjdEludGVyc2Vj
dGVkLnkoKSk7CisgICAgbWF0cml4LnNjYWxlKGRzdFJlY3RJbnRlcnNlY3RlZC53aWR0aCgpLCBk
c3RSZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0KCkpOwogICAgIGZsb2F0IG1hdFs5XTsKICAgICBhZmZp
bmVUbzN4MyhtYXRyaXgsIG1hdCk7CiAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KG1f
dGV4TWF0cml4TG9jYXRpb24sIGZhbHNlIC8qdHJhbnNwb3NlKi8sIG1hdCwgMSAvKmNvdW50Ki8p
OwogICAgIGNoZWNrR0xFcnJvcigiZ2xVbmlmb3JtTWF0cml4M2Z2Iik7CiAKICAgICBBZmZpbmVU
cmFuc2Zvcm0gdGV4TWF0cml4OwotICAgIHRleE1hdHJpeC5zY2FsZSgxLjBmIC8gdGV4dHVyZS0+
d2lkdGgoKSwgMS4wZiAvIHRleHR1cmUtPmhlaWdodCgpKTsKLSAgICB0ZXhNYXRyaXgudHJhbnNs
YXRlKHNyY1JlY3QueCgpLCBzcmNSZWN0LnkoKSk7Ci0gICAgdGV4TWF0cml4LnNjYWxlKHNyY1Jl
Y3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSk7CisgICAgdGV4TWF0cml4LnNjYWxlKDEuMGYg
LyB0aWxlQm91bmRzV2l0aEJvcmRlci53aWR0aCgpLCAxLjBmIC8gdGlsZUJvdW5kc1dpdGhCb3Jk
ZXIuaGVpZ2h0KCkpOworICAgIHRleE1hdHJpeC50cmFuc2xhdGUoc3JjUmVjdENsaXBwZWRJblRp
bGVTcGFjZS54KCksIHNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2UueSgpKTsKKyAgICB0ZXhNYXRy
aXguc2NhbGUoc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZS53aWR0aCgpLCBzcmNSZWN0Q2xpcHBl
ZEluVGlsZVNwYWNlLmhlaWdodCgpKTsKICAgICBmbG9hdCB0ZXhNYXRbOV07CiAgICAgYWZmaW5l
VG8zeDModGV4TWF0cml4LCB0ZXhNYXQpOwogICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNm
dihtX3RleFRleE1hdHJpeExvY2F0aW9uLCBmYWxzZSAvKnRyYW5zcG9zZSovLCB0ZXhNYXQsIDEg
Lypjb3VudCovKTsKICAgICBjaGVja0dMRXJyb3IoImdsVW5pZm9ybU1hdHJpeDNmdiIpOwogCi0g
ICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKG1fdGV4UG9zaXRpb25Mb2NhdGlvbiwg
MywgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7Ci0KLSAgICBtX2NvbnRl
eHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fdGV4UG9zaXRpb25Mb2NhdGlvbik7Ci0KICAg
ICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCA2
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDApOwogICAgIGNoZWNrR0xFcnJv
cigiZ2xEcmF3RWxlbWVudHMiKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR0xFUzJDYW52YXMuaAppbmRleCBjZWE5MGFlYWFiYjI2MTQ3ZjFmMjQzMjY3MTgw
OTI1Y2M4YWE3MzNjLi4wYWQwN2ZjZGJmZWQ5OWFkNmVjZDdlNTc0NjAwMWZiYmFkYWZiZTdjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFz
LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5o
CkBAIC04MSw2ICs4MSw3IEBAIHB1YmxpYzoKICAgICBHTEVTMlRleHR1cmUqIGdldFRleHR1cmUo
TmF0aXZlSW1hZ2VQdHIpOwogCiBwcml2YXRlOgorICAgIHZvaWQgZHJhd1RleHR1cmVkUmVjdFRp
bGUoR0xFUzJUZXh0dXJlKiB0ZXh0dXJlLCBpbnQgdGlsZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwog
ICAgIHZvaWQgYXBwbHlDb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVPcGVyYXRvcik7CiAgICAg
dm9pZCBjaGVja0dMRXJyb3IoY29uc3QgY2hhciogaGVhZGVyKTsKICAgICB1bnNpZ25lZCBnZXRR
dWFkVmVydGljZXMoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR0xFUzJUZXh0dXJlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR0xFUzJUZXh0dXJlLmNwcAppbmRleCA1ZThhMTQxZGQyODJmMjk0NDEzYTg1MWYxMjRiYTgw
ZGY3ZmQxZDQwLi5mY2YxNmEzZmVlZmNmZjA2ZDY0M2QwNmNiNThhY2IxNjY5ZDNkNjVjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUu
Y3BwCkBAIC0zNSw0MiArMzUsNjEgQEAKICNpbmNsdWRlICJHTEVTMlRleHR1cmUuaCIKIAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5j
bHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR0xFUzJU
ZXh0dXJlOjpHTEVTMlRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVk
IHRleHR1cmVJZCwgRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorCitHTEVT
MlRleHR1cmU6OkdMRVMyVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3Qg
VmVjdG9yPHVuc2lnbmVkIGludD4mIHRpbGVUZXh0dXJlSWRzLCBGb3JtYXQgZm9ybWF0LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGludCBtYXhUZXh0dXJlU2l6ZSkKICAgICA6IG1fY29udGV4dChj
b250ZXh0KQotICAgICwgbV90ZXh0dXJlSWQodGV4dHVyZUlkKQogICAgICwgbV9mb3JtYXQoZm9y
bWF0KQotICAgICwgbV93aWR0aCh3aWR0aCkKLSAgICAsIG1faGVpZ2h0KGhlaWdodCkKKyAgICAs
IG1fdGlsZXMobWF4VGV4dHVyZVNpemUsIHdpZHRoLCBoZWlnaHQsIHRydWUpCisgICAgLCBtX3Rp
bGVUZXh0dXJlSWRzKHRpbGVUZXh0dXJlSWRzKQogewogfQogCiBHTEVTMlRleHR1cmU6On5HTEVT
MlRleHR1cmUoKQogewotICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX3RleHR1cmVJZCk7
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtX3RpbGVUZXh0dXJlSWRzLnNpemUo
KTsgaSsrKQorICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV90aWxlVGV4dHVyZUlk
c1tpXSk7CiB9CiAKIFBhc3NSZWZQdHI8R0xFUzJUZXh0dXJlPiBHTEVTMlRleHR1cmU6OmNyZWF0
ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQogewotICAgIGludCBtYXg7Ci0gICAgY29udGV4dC0+Z2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtYXgpOwotICAgIGlmICh3aWR0aCA+
IG1heCB8fCBoZWlnaHQgPiBtYXgpIHsKLSAgICAgICAgQVNTRVJUKCEidGV4dHVyZSB0b28gYmln
Iik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHVuc2lnbmVkIHRleHR1cmVJZCA9
IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKLSAgICBpZiAoIXRleHR1cmVJZCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKLSAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgd2lkdGgs
IGhlaWdodCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFLCAwKTsKKyAgICBpbnQgbWF4VGV4dHVyZVNpemUgPSAwOworICAgIGNvbnRl
eHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbWF4
VGV4dHVyZVNpemUpOworCisgICAgVGlsaW5nRGF0YSB0aWxpbmcobWF4VGV4dHVyZVNpemUsIHdp
ZHRoLCBoZWlnaHQsIHRydWUpOworICAgIGludCBudW1UaWxlcyA9IHRpbGluZy5udW1UaWxlcygp
OworCisgICAgVmVjdG9yPHVuc2lnbmVkIGludD4gdGV4dHVyZUlkcyhudW1UaWxlcyk7CisgICAg
dGV4dHVyZUlkcy5maWxsKDAsIG51bVRpbGVzKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51
bVRpbGVzOyBpKyspCisgICAgICAgICB0ZXh0dXJlSWRzW2ldID0gY29udGV4dC0+Y3JlYXRlVGV4
dHVyZSgpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1UaWxlczsgaSsrKSB7CisgICAg
ICAgIHVuc2lnbmVkIGludCB0ZXh0dXJlSWQgPSB0ZXh0dXJlSWRzLmJlZ2luKClbaV07CisgICAg
ICAgIGlmICghdGV4dHVyZUlkKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51
bVRpbGVzOyBpKyspCisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlVGV4dHVyZSh0ZXh0
dXJlSWRzW2ldKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEdMRVMyVGV4dHVyZShjb250ZXh0LCB0ZXh0dXJlSWQsIGZvcm1hdCwg
d2lkdGgsIGhlaWdodCkpOworICAgICAgICBJbnRSZWN0IHRpbGVCb3VuZHNXaXRoQm9yZGVyID0g
dGlsaW5nLnRpbGVCb3VuZHNXaXRoQm9yZGVyKGkpOworCisgICAgICAgIGNvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpOworICAgICAg
ICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELAorICAg
ICAgICAgICAgMCwKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLAorICAgICAg
ICAgICAgdGlsZUJvdW5kc1dpdGhCb3JkZXIud2lkdGgoKSwKKyAgICAgICAgICAgIHRpbGVCb3Vu
ZHNXaXRoQm9yZGVyLmhlaWdodCgpLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLAorICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsCisgICAgICAgICAgICAwKTsKKyAgICB9CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBHTEVTMlRleHR1cmUoY29udGV4dCwgdGV4dHVyZUlkcywgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBtYXhUZXh0dXJlU2l6ZSkpOwogfQogCiBzdGF0aWMgdm9pZCBjb252ZXJ0Rm9ybWF0KEdMRVMy
VGV4dHVyZTo6Rm9ybWF0IGZvcm1hdCwgdW5zaWduZWQgaW50KiBnbEZvcm1hdCwgdW5zaWduZWQg
aW50KiBnbFR5cGUsIGJvb2wqIHN3aXp6bGUpCkBAIC05NCwzMSArMTEzLDY1IEBAIHN0YXRpYyB2
b2lkIGNvbnZlcnRGb3JtYXQoR0xFUzJUZXh0dXJlOjpGb3JtYXQgZm9ybWF0LCB1bnNpZ25lZCBp
bnQqIGdsRm9ybWF0LCB1CiAgICAgfQogfQogCit0ZW1wbGF0ZSA8Ym9vbCBzd2l6emxlPgordWlu
dDMyX3QqIENvcHlTdWJSZWN0KHVpbnQzMl90KiBzcmMsIGludCBzcmNYLCBpbnQgc3JjWSwgdWlu
dDMyX3QqIGRzdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3JjU3RyaWRlKQoreworICAg
IHVpbnQzMl90KiBzcmNPZmZzZXQgPSBzcmMgKyBzcmNYICsgc3JjWSAqIHNyY1N0cmlkZTsKKwor
ICAgIGlmICghc3dpenpsZSAmJiB3aWR0aCA9PSBzcmNTdHJpZGUpCisgICAgICAgIHJldHVybiBz
cmNPZmZzZXQ7CisKKyAgICB1aW50MzJfdCogZHN0UGl4ZWwgPSBkc3Q7CisgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoIDsgeCsrKSB7CisgICAgICAgICAgICB1aW50MzJfdCBwaXhlbCA9IHNyY09mZnNldFt4ICsg
eSAqIHNyY1N0cmlkZV07CisgICAgICAgICAgICBpZiAoc3dpenpsZSkKKyAgICAgICAgICAgICAg
ICAqZHN0UGl4ZWwgPSBwaXhlbCAmIDB4RkYwMEZGMDAgfCAoKHBpeGVsICYgMHgwMEZGMDAwMCkg
Pj4gMTYpIHwgKChwaXhlbCAmIDB4MDAwMDAwRkYpIDw8IDE2KTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAqZHN0UGl4ZWwgPSBwaXhlbDsKKyAgICAgICAgICAgIGRzdFBpeGVs
Kys7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGRzdDsKK30KKwogdm9pZCBHTEVTMlRl
eHR1cmU6OmxvYWQodm9pZCogcGl4ZWxzKQogeworICAgIHVpbnQzMl90KiBwaXhlbHMzMiA9IHN0
YXRpY19jYXN0PHVpbnQzMl90Kj4ocGl4ZWxzKTsKICAgICB1bnNpZ25lZCBpbnQgZ2xGb3JtYXQs
IGdsVHlwZTsKICAgICBib29sIHN3aXp6bGU7CiAgICAgY29udmVydEZvcm1hdChtX2Zvcm1hdCwg
JmdsRm9ybWF0LCAmZ2xUeXBlLCAmc3dpenpsZSk7Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpOwogICAgIGlmIChz
d2l6emxlKSB7CiAgICAgICAgIEFTU0VSVChnbEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSAmJiBnbFR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwogICAg
ICAgICAvLyBGSVhNRTogIFRoaXMgY291bGQgdXNlIFBCTydzIHRvIHNhdmUgZG9pbmcgYW4gZXh0
cmEgY29weSBoZXJlLgotICAgICAgICBpbnQgc2l6ZSA9IG1fd2lkdGggKiBtX2hlaWdodDsKLSAg
ICAgICAgdW5zaWduZWQqIHBpeGVsczMyID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQqPihwaXhlbHMp
OwotICAgICAgICBPd25BcnJheVB0cjx1bnNpZ25lZD4gYnVmKG5ldyB1bnNpZ25lZFtzaXplXSk7
Ci0gICAgICAgIHVuc2lnbmVkKiBidWZwdHIgPSBidWYuZ2V0KCk7Ci0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBwaXhlbCA9IHBp
eGVsczMyW2ldOwotICAgICAgICAgICAgYnVmcHRyW2ldID0gcGl4ZWwgJiAweEZGMDBGRjAwIHwg
KChwaXhlbCAmIDB4MDBGRjAwMDApID4+IDE2KSB8ICgocGl4ZWwgJiAweDAwMDAwMEZGKSA8PCAx
Nik7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCBtX3dpZHRoLCBtX2hlaWdodCwgZ2xGb3Jt
YXQsIGdsVHlwZSwgYnVmLmdldCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9jb250ZXh0LT50
ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCBtX3dp
ZHRoLCBtX2hlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgcGl4ZWxzKTsKKyAgICB9CisgICAgdWlu
dDMyX3QqIHRlbXBCdWZmID0gbmV3IHVpbnQzMl90W21fdGlsZXMubWF4VGV4dHVyZVNpemUoKSpt
X3RpbGVzLm1heFRleHR1cmVTaXplKCldOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3Rp
bGVzLm51bVRpbGVzKCk7IGkrKykgeworICAgICAgICBJbnRSZWN0IHRpbGVCb3VuZHNXaXRoQm9y
ZGVyID0gbV90aWxlcy50aWxlQm91bmRzV2l0aEJvcmRlcihpKTsKKworICAgICAgICB1aW50MzJf
dCogdXBsb2FkQnVmZiA9IDA7CisgICAgICAgIGlmIChzd2l6emxlKQorICAgICAgICAgICAgdXBs
b2FkQnVmZiA9IENvcHlTdWJSZWN0PHRydWU+KAorICAgICAgICAgICAgcGl4ZWxzMzIsIHRpbGVC
b3VuZHNXaXRoQm9yZGVyLngoKSwgdGlsZUJvdW5kc1dpdGhCb3JkZXIueSgpLAorICAgICAgICAg
ICAgdGVtcEJ1ZmYsIHRpbGVCb3VuZHNXaXRoQm9yZGVyLndpZHRoKCksIHRpbGVCb3VuZHNXaXRo
Qm9yZGVyLmhlaWdodCgpLCBtX3RpbGVzLnRvdGFsU2l6ZVgoKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHVwbG9hZEJ1ZmYgPSBDb3B5U3ViUmVjdDxmYWxzZT4oCisgICAgICAgICAgICBw
aXhlbHMzMiwgdGlsZUJvdW5kc1dpdGhCb3JkZXIueCgpLCB0aWxlQm91bmRzV2l0aEJvcmRlci55
KCksCisgICAgICAgICAgICB0ZW1wQnVmZiwgdGlsZUJvdW5kc1dpdGhCb3JkZXIud2lkdGgoKSwg
dGlsZUJvdW5kc1dpdGhCb3JkZXIuaGVpZ2h0KCksIG1fdGlsZXMudG90YWxTaXplWCgpKTsKKwor
ICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBtX3RpbGVUZXh0dXJlSWRzW2ldKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLAorICAgICAgICAgICAg
dGlsZUJvdW5kc1dpdGhCb3JkZXIud2lkdGgoKSwKKyAgICAgICAgICAgIHRpbGVCb3VuZHNXaXRo
Qm9yZGVyLmhlaWdodCgpLCBnbEZvcm1hdCwgZ2xUeXBlLCB1cGxvYWRCdWZmKTsKKyAgICB9CisK
KyAgICBkZWxldGVbXSB0ZW1wQnVmZjsKIH0KIAotdm9pZCBHTEVTMlRleHR1cmU6OmJpbmQoKQor
dm9pZCBHTEVTMlRleHR1cmU6OmJpbmRUaWxlKGludCB0aWxlKQogewotICAgIG1fY29udGV4dC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsK
KyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBtX3RpbGVUZXh0dXJlSWRzW3RpbGVdKTsKICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwogICAgIG1fY29udGV4dC0+
dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CiAg
ICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpD
TEFNUF9UT19FREdFKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR0xFUzJUZXh0dXJlLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dMRVMyVGV4dHVyZS5oCmluZGV4IDRkMzUxY2RkMzdkOWUxOWRmNWY0OGJiOTRiZWQ0NzczYjY4
MGVkOGMuLmQ5NmUwZTVjNDAyZTM3NzMzZThjOGQ3ZWZiYjMyNWIwMTFmY2Y5MzIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmgKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUuaApAQCAt
MzUsNiArMzUsOCBAQAogCiAjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgogI2luY2x1ZGUgIlJlZlB0
ci5oIgorI2luY2x1ZGUgIlRpbGluZ0RhdGEuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwpAQCAtNDQsMTgg
KzQ2LDE2IEBAIHB1YmxpYzoKICAgICB+R0xFUzJUZXh0dXJlKCk7CiAgICAgZW51bSBGb3JtYXQg
eyBSR0JBOCwgQkdSQTggfTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHTEVTMlRleHR1cmU+IGNy
ZWF0ZShHcmFwaGljc0NvbnRleHQzRCosIEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsK
LSAgICB2b2lkIGJpbmQoKTsKKyAgICB2b2lkIGJpbmRUaWxlKGludCB0aWxlKTsKICAgICB2b2lk
IGxvYWQodm9pZCogcGl4ZWxzKTsKICAgICBGb3JtYXQgZm9ybWF0KCkgY29uc3QgeyByZXR1cm4g
bV9mb3JtYXQ7IH0KLSAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9Ci0g
ICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CisgICAgY29uc3QgVGls
aW5nRGF0YSYgdGlsZXMoKSBjb25zdCB7IHJldHVybiBtX3RpbGVzOyB9CiBwcml2YXRlOgotICAg
IEdMRVMyVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHRleHR1cmVJZCwgRm9y
bWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIEdMRVMyVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRCosIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCBpbnQ+JiB0aWxlVGV4dHVyZUlkcywgRm9y
bWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWF4VGV4dHVyZVNpemUpOwog
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Ci0gICAgdW5zaWduZWQgbV90ZXh0dXJl
SWQ7CiAgICAgRm9ybWF0IG1fZm9ybWF0OwotICAgIGludCBtX3dpZHRoOwotICAgIGludCBtX2hl
aWdodDsKKyAgICBUaWxpbmdEYXRhIG1fdGlsZXM7CisgICAgVmVjdG9yPHVuc2lnbmVkIGludD4g
bV90aWxlVGV4dHVyZUlkczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGlsaW5nRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGluZ0RhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmMDBmMTRiNDkwN2M4MzI2
ZmU2NTNhM2FhNWY1ZjY2ODQxMzM0MDUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGluZ0RhdGEuY3BwCkBAIC0wLDAgKzEsMjI2IEBACisv
KgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaWxpbmdEYXRhLmgiCisKKyNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgor
Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBp
bnQgY29tcHV0ZU51bVRpbGVzKGludCBtYXhUZXh0dXJlU2l6ZSwgaW50IHRvdGFsU2l6ZSwgaW50
IGJvcmRlclRleGVscykKK3sKKyAgICByZXR1cm4gbWF4KDEsIDEgKyAodG90YWxTaXplIC0gMSAt
IDIqYm9yZGVyVGV4ZWxzKSAvIChtYXhUZXh0dXJlU2l6ZSAtIDIqYm9yZGVyVGV4ZWxzKSk7Cit9
CisKK1RpbGluZ0RhdGE6OlRpbGluZ0RhdGEoaW50IG1heFRleHR1cmVTaXplLCBpbnQgdG90YWxT
aXplWCwgaW50IHRvdGFsU2l6ZVksIGJvb2wgYm9yZGVyVGV4ZWxzKQorICAgIDogbV9tYXhUZXh0
dXJlU2l6ZShtYXhUZXh0dXJlU2l6ZSkKKyAgICAsIG1fdG90YWxTaXplWCh0b3RhbFNpemVYKQor
ICAgICwgbV90b3RhbFNpemVZKHRvdGFsU2l6ZVkpCisgICAgLCBtX2JvcmRlclRleGVscyhib3Jk
ZXJUZXhlbHMgPyAxIDogMCkKK3sKKyAgICBtX251bVRpbGVzWCA9IGNvbXB1dGVOdW1UaWxlcyht
YXhUZXh0dXJlU2l6ZSwgbV90b3RhbFNpemVYLCBtX2JvcmRlclRleGVscyk7CisgICAgbV9udW1U
aWxlc1kgPSBjb21wdXRlTnVtVGlsZXMobWF4VGV4dHVyZVNpemUsIG1fdG90YWxTaXplWSwgbV9i
b3JkZXJUZXhlbHMpOworfQorCitpbnQgVGlsaW5nRGF0YTo6dGlsZVhJbmRleEZyb21TcmNDb29y
ZChpbnQgc3JjUG9zKSBjb25zdAoreworICAgIGludCB4ID0gKHNyY1BvcyAtIG1fYm9yZGVyVGV4
ZWxzKSAvIChtX21heFRleHR1cmVTaXplIC0gMiptX2JvcmRlclRleGVscyk7CisgICAgcmV0dXJu
IG1pbihtYXgoeCwgMCksIG51bVRpbGVzWCgpLTEpOworfQorCitpbnQgVGlsaW5nRGF0YTo6dGls
ZVlJbmRleEZyb21TcmNDb29yZChpbnQgc3JjUG9zKSBjb25zdAoreworICAgIGludCB5ID0gKHNy
Y1BvcyAtIG1fYm9yZGVyVGV4ZWxzKSAvIChtX21heFRleHR1cmVTaXplIC0gMiptX2JvcmRlclRl
eGVscyk7CisgICAgcmV0dXJuIG1pbihtYXgoeSwgMCksIG51bVRpbGVzWSgpLTEpOworfQorCitJ
bnRSZWN0IFRpbGluZ0RhdGE6OnRpbGVCb3VuZHMoaW50IHRpbGUpIGNvbnN0Cit7CisgICAgYXNz
ZXJ0VGlsZSh0aWxlKTsKKyAgICBpbnQgaXggPSB0aWxlWEluZGV4KHRpbGUpOworICAgIGludCBp
eSA9IHRpbGVZSW5kZXgodGlsZSk7CisgICAgaW50IHggPSB0aWxlUG9zaXRpb25YKGl4KTsKKyAg
ICBpbnQgeSA9IHRpbGVQb3NpdGlvblkoaXkpOworICAgIGludCB3aWR0aCA9IHRpbGVTaXplWChp
eCk7CisgICAgaW50IGhlaWdodCA9IHRpbGVTaXplWShpeSk7CisgICAgQVNTRVJUKHggPj0gMCAm
JiB5ID49IDAgJiYgd2lkdGggPj0gMCAmJiBoZWlnaHQgPj0gMCk7CisgICAgQVNTRVJUKHggPD0g
dG90YWxTaXplWCgpICYmIHkgPD0gdG90YWxTaXplWSgpKTsKKyAgICByZXR1cm4gSW50UmVjdCh4
LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworSW50UmVjdCBUaWxpbmdEYXRhOjp0aWxlQm91bmRz
V2l0aEJvcmRlcihpbnQgdGlsZSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IGJvdW5kcyA9IHRpbGVC
b3VuZHModGlsZSk7CisKKyAgICBpZiAobV9ib3JkZXJUZXhlbHMpIHsKKyAgICAgICAgaW50IHgx
ID0gYm91bmRzLngoKTsKKyAgICAgICAgaW50IHgyID0gYm91bmRzLnJpZ2h0KCk7CisgICAgICAg
IGludCB5MSA9IGJvdW5kcy55KCk7CisgICAgICAgIGludCB5MiA9IGJvdW5kcy5ib3R0b20oKTsK
KworICAgICAgICBpZiAodGlsZVhJbmRleCh0aWxlKSA+IDApCisgICAgICAgICAgICB4MS0tOwor
ICAgICAgICBpZiAodGlsZVhJbmRleCh0aWxlKSA8IChudW1UaWxlc1goKS0xKSkKKyAgICAgICAg
ICAgIHgyKys7CisgICAgICAgIGlmICh0aWxlWUluZGV4KHRpbGUpID4gMCkKKyAgICAgICAgICAg
IHkxLS07CisgICAgICAgIGlmICh0aWxlWUluZGV4KHRpbGUpIDwgKG51bVRpbGVzWSgpLTEpKQor
ICAgICAgICAgICAgeTIrKzsKKworICAgICAgICBib3VuZHMgPSBJbnRSZWN0KHgxLCB5MSwgeDIt
eDEsIHkyLXkxKTsKKyAgICB9CisKKyAgICByZXR1cm4gYm91bmRzOworfQorCitGbG9hdFJlY3Qg
VGlsaW5nRGF0YTo6dGlsZUJvdW5kc05vcm1hbGl6ZWQoaW50IHRpbGUpIGNvbnN0Cit7CisgICAg
YXNzZXJ0VGlsZSh0aWxlKTsKKyAgICBGbG9hdFJlY3QgYm91bmRzKHRpbGVCb3VuZHModGlsZSkp
OworICAgIGJvdW5kcy5zY2FsZSgxLjBmIC8gbV90b3RhbFNpemVYLCAxLjBmIC8gbV90b3RhbFNp
emVZKTsKKyAgICByZXR1cm4gYm91bmRzOworfQorCitpbnQgVGlsaW5nRGF0YTo6dGlsZVBvc2l0
aW9uWChpbnQgeEluZGV4KSBjb25zdAoreworICAgIEFTU0VSVCh4SW5kZXggPj0gMCAmJiB4SW5k
ZXggPCBudW1UaWxlc1goKSk7CisKKyAgICBpZiAoIXhJbmRleCkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIHRpbGVQb3NpdGlvblgoeEluZGV4LTEpICsgdGlsZVNpemVYKHhJbmRleC0x
KTsKK30KKworaW50IFRpbGluZ0RhdGE6OnRpbGVQb3NpdGlvblkoaW50IHlJbmRleCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoeUluZGV4ID49IDAgJiYgeUluZGV4IDwgbnVtVGlsZXNZKCkpOworCisg
ICAgaWYgKCF5SW5kZXgpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB0aWxlUG9zaXRp
b25YKHlJbmRleC0xKSArIHRpbGVTaXplWSh5SW5kZXgtMSk7Cit9CisKK2ludCBUaWxpbmdEYXRh
Ojp0aWxlU2l6ZVgoaW50IHhJbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoeEluZGV4ID49IDAg
JiYgeEluZGV4IDwgbnVtVGlsZXNYKCkpOworCisgICAgaW50IHNpemUgPSBtYXhUZXh0dXJlU2l6
ZSgpOworICAgIHNpemUgPSBtaW4oc2l6ZSwgdG90YWxTaXplWCgpKTsKKworICAgIGlmICgheElu
ZGV4ICYmIG1fbnVtVGlsZXNYID09IDEpCisgICAgICAgIHJldHVybiBtX3RvdGFsU2l6ZVg7Cisg
ICAgaWYgKCF4SW5kZXggJiYgbV9udW1UaWxlc1ggPiAxKQorICAgICAgICByZXR1cm4gbV9tYXhU
ZXh0dXJlU2l6ZSAtIG1fYm9yZGVyVGV4ZWxzOworICAgIGlmICh4SW5kZXggPCBudW1UaWxlc1go
KSAtIDEpCisgICAgICAgIHJldHVybiBtX21heFRleHR1cmVTaXplIC0gMiAqIG1fYm9yZGVyVGV4
ZWxzOworICAgIGlmICh4SW5kZXggPT0gbnVtVGlsZXNYKCkgLSAxKQorICAgICAgICByZXR1cm4g
bV90b3RhbFNpemVYIC0gdGlsZVBvc2l0aW9uWCh4SW5kZXgpOworCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBUaWxpbmdEYXRhOjp0aWxlU2l6ZVko
aW50IHlJbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoeUluZGV4ID49IDAgJiYgeUluZGV4IDwg
bnVtVGlsZXNZKCkpOworCisgICAgaW50IHNpemUgPSBtYXhUZXh0dXJlU2l6ZSgpOworICAgIHNp
emUgPSBtaW4oc2l6ZSwgdG90YWxTaXplWSgpKTsKKworICAgIGlmICgheUluZGV4ICYmIG1fbnVt
VGlsZXNZID09IDEpCisgICAgICAgIHJldHVybiBtX3RvdGFsU2l6ZVk7CisgICAgaWYgKCF5SW5k
ZXggJiYgbV9udW1UaWxlc1kgPiAxKQorICAgICAgICByZXR1cm4gbV9tYXhUZXh0dXJlU2l6ZSAt
IG1fYm9yZGVyVGV4ZWxzOworICAgIGlmICh5SW5kZXggPCBudW1UaWxlc1koKSAtIDEpCisgICAg
ICAgIHJldHVybiBtX21heFRleHR1cmVTaXplIC0gMiAqIG1fYm9yZGVyVGV4ZWxzOworICAgIGlm
ICh5SW5kZXggPT0gbnVtVGlsZXNZKCkgLSAxKQorICAgICAgICByZXR1cm4gbV90b3RhbFNpemVZ
IC0gdGlsZVBvc2l0aW9uWSh5SW5kZXgpOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK0ludFJlY3QgVGlsaW5nRGF0YTo6b3ZlcmxhcHBlZFRpbGVJbmRp
Y2VzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QgJnNyY1JlY3QpIGNvbnN0Cit7CisgICAgaW50IHgg
PSB0aWxlWEluZGV4RnJvbVNyY0Nvb3JkKHNyY1JlY3QueCgpKTsKKyAgICBpbnQgeSA9IHRpbGVZ
SW5kZXhGcm9tU3JjQ29vcmQoc3JjUmVjdC55KCkpOworICAgIGludCByID0gdGlsZVhJbmRleEZy
b21TcmNDb29yZChzcmNSZWN0LnJpZ2h0KCkpOworICAgIGludCBiID0gdGlsZVlJbmRleEZyb21T
cmNDb29yZChzcmNSZWN0LmJvdHRvbSgpKTsKKyAgICByZXR1cm4gSW50UmVjdCh4LCB5LCByLXgs
IGIteSk7Cit9CisKK0ludFJlY3QgVGlsaW5nRGF0YTo6b3ZlcmxhcHBlZFRpbGVJbmRpY2VzKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCAmc3JjUmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3Zl
cmxhcHBlZFRpbGVJbmRpY2VzKEludFJlY3QoCisgICAgICAgIHN0YXRpY19jYXN0PGludD4oc3Jj
UmVjdC54KCkpLAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHNyY1JlY3QueSgpKSwKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50PihjZWlsKHNyY1JlY3Qud2lkdGgoKSkpLAorICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KGNlaWwoc3JjUmVjdC5oZWlnaHQoKSkpKSk7Cit9CisKK3ZvaWQgVGlsaW5n
RGF0YTo6aW50ZXJzZWN0RHJhd1F1YWQoY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIGludCB0aWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGbG9hdFJlY3QmIG5ld1NyYywgRmxvYXRSZWN0JiBuZXdEc3QpIGNvbnN0Cit7Cisg
ICAgLy8gSW50ZXJzZWN0IHdpdGggdGlsZQorICAgIEZsb2F0UmVjdCB0aWxlQm91bmRzID0gdGhp
cy0+dGlsZUJvdW5kcyh0aWxlKTsKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdEludGVyc2VjdGVkID0g
c3JjUmVjdDsKKyAgICBzcmNSZWN0SW50ZXJzZWN0ZWQuaW50ZXJzZWN0KHRpbGVCb3VuZHMpOwor
CisgICAgaWYgKHNyY1JlY3RJbnRlcnNlY3RlZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbmV3U3Jj
ID0gbmV3RHN0ID0gRmxvYXRSZWN0KDAsIDAsIDAsIDApOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgZmxvYXQgc3JjUmVjdEludGVyc2VjdGVkTm9ybVggPSAoc3JjUmVjdEludGVyc2Vj
dGVkLngoKSAtIHNyY1JlY3QueCgpKSAvIHNyY1JlY3Qud2lkdGgoKTsKKyAgICBmbG9hdCBzcmNS
ZWN0SW50ZXJzZWN0ZWROb3JtWSA9IChzcmNSZWN0SW50ZXJzZWN0ZWQueSgpIC0gc3JjUmVjdC55
KCkpIC8gc3JjUmVjdC5oZWlnaHQoKTsKKyAgICBmbG9hdCBzcmNSZWN0SW50ZXJzZWN0ZWROb3Jt
VyA9IHNyY1JlY3RJbnRlcnNlY3RlZC53aWR0aCgpIC8gc3JjUmVjdC53aWR0aCgpOworICAgIGZs
b2F0IHNyY1JlY3RJbnRlcnNlY3RlZE5vcm1IID0gc3JjUmVjdEludGVyc2VjdGVkLmhlaWdodCgp
IC8gc3JjUmVjdC5oZWlnaHQoKTsKKworICAgIG5ld1NyYyA9IHNyY1JlY3RJbnRlcnNlY3RlZDsK
KyAgICBuZXdTcmMubW92ZSgtdGlsZUJvdW5kcy54KCksIC10aWxlQm91bmRzLnkoKSk7CisgICAg
aWYgKG1fYm9yZGVyVGV4ZWxzKSB7CisgICAgICAgIGlmICh0aWxlWEluZGV4KHRpbGUpID4gMCkK
KyAgICAgICAgICAgIG5ld1NyYy5tb3ZlKDEsIDApOworICAgICAgICBpZiAodGlsZVlJbmRleCh0
aWxlKSA+IDApCisgICAgICAgICAgICBuZXdTcmMubW92ZSgwLCAxKTsKKyAgICB9CisKKyAgICBu
ZXdEc3QgPSBGbG9hdFJlY3QoCisgICAgICAgIHNyY1JlY3RJbnRlcnNlY3RlZE5vcm1YICogZHN0
UmVjdC53aWR0aCgpICsgZHN0UmVjdC54KCksCisgICAgICAgIHNyY1JlY3RJbnRlcnNlY3RlZE5v
cm1ZICogZHN0UmVjdC5oZWlnaHQoKSArIGRzdFJlY3QueSgpLAorICAgICAgICBzcmNSZWN0SW50
ZXJzZWN0ZWROb3JtVyAqIGRzdFJlY3Qud2lkdGgoKSwKKyAgICAgICAgc3JjUmVjdEludGVyc2Vj
dGVkTm9ybUggKiBkc3RSZWN0LmhlaWdodCgpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxpbmdEYXRhLmggYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGluZ0RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQpp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MmQ4MzljZjk4
MWYwZGI3MmYxOGRiZTI2MzQyZjM1ZTI4NTdhZTE0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxpbmdEYXRhLmgKQEAgLTAsMCArMSw4NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFRpbGluZ0RhdGFfaAorI2RlZmluZSBUaWxpbmdEYXRhX2gKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBJbnRSZWN0OworCitjbGFzcyBU
aWxpbmdEYXRhIHsKK3B1YmxpYzoKKyAgICBUaWxpbmdEYXRhKGludCBtYXhUZXh0dXJlU2l6ZSwg
aW50IHRvdGFsU2l6ZVgsIGludCB0b3RhbFNpemVZLCBib29sIGJvcmRlclRleGVscyk7CisgICAg
aW50IG1heFRleHR1cmVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXhUZXh0dXJlU2l6ZTsgfQor
ICAgIGludCB0b3RhbFNpemVYKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbFNpemVYOyB9CisgICAg
aW50IHRvdGFsU2l6ZVkoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsU2l6ZVk7IH0KKworICAgIGlu
dCBudW1UaWxlcygpIGNvbnN0IHsgcmV0dXJuIG51bVRpbGVzWCgpICogbnVtVGlsZXNZKCk7IH0K
KyAgICBpbnQgbnVtVGlsZXNYKCkgY29uc3QgeyByZXR1cm4gbV9udW1UaWxlc1g7IH0KKyAgICBp
bnQgbnVtVGlsZXNZKCkgY29uc3QgeyByZXR1cm4gbV9udW1UaWxlc1k7IH0KKyAgICBpbnQgdGls
ZUluZGV4KGludCB4LCBpbnQgeSkgY29uc3QgeyByZXR1cm4geCArIHkgKiBudW1UaWxlc1goKTsg
fQorICAgIGludCB0aWxlWEluZGV4KGludCB0aWxlKSBjb25zdCB7IGFzc2VydFRpbGUodGlsZSk7
IHJldHVybiB0aWxlICUgbnVtVGlsZXNYKCk7IH0KKyAgICBpbnQgdGlsZVlJbmRleChpbnQgdGls
ZSkgY29uc3QgeyBhc3NlcnRUaWxlKHRpbGUpOyByZXR1cm4gdGlsZSAvIG51bVRpbGVzWCgpOyB9
CisgICAgaW50IHRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoaW50KSBjb25zdDsKKyAgICBpbnQgdGls
ZVlJbmRleEZyb21TcmNDb29yZChpbnQpIGNvbnN0OworCisgICAgSW50UmVjdCB0aWxlQm91bmRz
KGludCB0aWxlKSBjb25zdDsKKyAgICBJbnRSZWN0IHRpbGVCb3VuZHNXaXRoQm9yZGVyKGludCB0
aWxlKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgdGlsZUJvdW5kc05vcm1hbGl6ZWQoaW50IHRpbGUp
IGNvbnN0OworICAgIGludCB0aWxlUG9zaXRpb25YKGludCB4SW5kZXgpIGNvbnN0OworICAgIGlu
dCB0aWxlUG9zaXRpb25ZKGludCB5SW5kZXgpIGNvbnN0OworICAgIGludCB0aWxlU2l6ZVgoaW50
IHhJbmRleCkgY29uc3Q7CisgICAgaW50IHRpbGVTaXplWShpbnQgeUluZGV4KSBjb25zdDsKKyAg
ICBJbnRSZWN0IG92ZXJsYXBwZWRUaWxlSW5kaWNlcyhjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBj
b25zdDsKKyAgICBJbnRSZWN0IG92ZXJsYXBwZWRUaWxlSW5kaWNlcyhjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QpIGNvbnN0OworCisgICAgLy8gR2l2ZW4gYSBzZXQgb2Ygc291cmNlIGFuZCBkZXN0
aW5hdGlvbiBjb29yZGluYXRlcyBmb3IgYSBkcmF3aW5nIHF1YWQKKyAgICAvLyBpbiB0ZXhlbCB1
bml0cywgcmV0dXJucyBhZGp1c3RlZCBkYXRhIHRvIHJlbmRlciBqdXN0IHRoZSBvbmUgdGlsZS4K
KyAgICB2b2lkIGludGVyc2VjdERyYXdRdWFkKGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBpbnQgdGlsZSwgRmxvYXRSZWN0JiBuZXdTcmMsIEZsb2F0
UmVjdCYgbmV3RHN0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBUaWxpbmdEYXRhKCkgOiBtX21h
eFRleHR1cmVTaXplKDApLCBtX3RvdGFsU2l6ZVgoMCksIG1fdG90YWxTaXplWSgwKSB7fQorICAg
IHZvaWQgYXNzZXJ0VGlsZShpbnQgdGlsZSkgY29uc3QgeyBBU1NFUlQodGlsZSA+PSAwICYmIHRp
bGUgPCBudW1UaWxlcygpKTsgfQorCisgICAgaW50IG1fbWF4VGV4dHVyZVNpemU7CisgICAgaW50
IG1fdG90YWxTaXplWDsKKyAgICBpbnQgbV90b3RhbFNpemVZOworICAgIGludCBtX2JvcmRlclRl
eGVsczsKKworICAgIC8vIGNvbXB1dGVkIHZhbHVlczoKKyAgICBpbnQgbV9udW1UaWxlc1g7Cisg
ICAgaW50IG1fbnVtVGlsZXNZOworfTsKKworfQorCisjZW5kaWYgLy8gVGlsaW5nRGF0YV9oCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCmluZGV4IDAyNGJm
NTBkYzEzMzNhMjBhYTJkYWFlMWFjN2U1YTRmNWVlYzBlMTAuLmI1MTRiMWE2YjYxYjVkNzBjYmQ4
NzdjYjNiMTE2NGEzYmUxZDUxN2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZVNraWEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9JbWFnZVNraWEuY3BwCkBAIC00NjUsMTggKzQ2NSwxOCBAQCB2b2lkIEJpdG1hcEltYWdlOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LAogICAg
IGlmICghYm0pCiAgICAgICAgIHJldHVybjsgIC8vIEl0J3MgdG9vIGVhcmx5IGFuZCB3ZSBkb24n
dCBoYXZlIGFuIGltYWdlIHlldC4KIAotI2lmICBVU0UoR0xFUzJfUkVOREVSSU5HKQotICAgIGlm
IChjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpIHsKLSAgICAgICAgZHJhd0JpdG1h
cEdMRVMyKGN0eHQsIGJtLCBzcmNSZWN0LCBkc3RSZWN0LCBjb2xvclNwYWNlLCBjb21wb3NpdGVP
cCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKICAgICBGbG9hdFJlY3Qgbm9ybURz
dFJlY3QgPSBub3JtYWxpemVSZWN0KGRzdFJlY3QpOwogICAgIEZsb2F0UmVjdCBub3JtU3JjUmVj
dCA9IG5vcm1hbGl6ZVJlY3Qoc3JjUmVjdCk7CiAKICAgICBpZiAobm9ybVNyY1JlY3QuaXNFbXB0
eSgpIHx8IG5vcm1Ec3RSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOyAgLy8gTm90aGlu
ZyB0byBkcmF3LgogCisjaWYgIFVTRShHTEVTMl9SRU5ERVJJTkcpCisgICAgaWYgKGN0eHQtPnBs
YXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSkgeworICAgICAgICBkcmF3Qml0bWFwR0xFUzIoY3R4
dCwgYm0sIG5vcm1TcmNSZWN0LCBub3JtRHN0UmVjdCwgY29sb3JTcGFjZSwgY29tcG9zaXRlT3Ap
OworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCiAgICAgY3R4dC0+cGxhdGZvcm1Db250
ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKIAogICAgIHBhaW50U2tCaXRtYXAoY3R4
dC0+cGxhdGZvcm1Db250ZXh0KCksCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBiNTI0N2Q1ZWQ2MmUwOTgyNTQ1
MjQxMzIzNjUzMjYxZWM2NjZkZTFiLi4xZjg3Yjc1MjliYTYxMjhiZGRiMmE5YmYwOGQzN2I5MTU2
NmI3Y2MzIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wOC0xMSAgVmluY2Vu
dCBTY2hlaWIgIDxzY2hlaWJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIENhbnZhczJEIGRvZXMg
bm90IHN1cHBvcnQgaW1hZ2VzIGxhcmdlciB0aGFuIHN5c3RlbSdzIEdQVSBtYXggdGV4dHVyZSBz
aXplCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mzg2
NAorCisgICAgICAgIFVuaXQgdGVzdHMgZm9yIFRpbGluZ0RhdGEgY2xhc3MuCisKKyAgICAgICAg
KiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHRlc3RzL1RpbGluZ0RhdGFUZXN0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMC0wOC0xMCAgQWFyb24gQm9vZG1hbiAg
PGFhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBIeWF0dC4KZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAKaW5kZXggMTIzYWVkNTk4ZWMxZjg1MDdiYTI4YzhkMTRjZjk0ZTg1M2NkNzI0MS4u
ODJkZGJmNjY4Njg4ZTY1ZDNkNDhiNzMyNjNmZmE2MWU4NGIwYThjZiAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAK
QEAgLTcwNiw2ICs3MDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0tleWJv
YXJkVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNw
cCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvUnVuQWxsVGVzdHMuY3BwJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAnLAogICAgICAg
ICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKICAg
ICAgICAgICAgICAgICAgICAgICAgIFsnT1M9PSJ3aW4iJywgewpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RpbGluZ0RhdGFUZXN0LmNwcCBiL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9UaWxpbmdEYXRhVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDYzNTQyYmE1ZDYzODk5MWRiNDY1ZTMw
NTBhNzUxNmJiY2ZiYWZhMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9UaWxpbmdEYXRhVGVzdC5jcHAKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJHTEVTMlRleHR1cmUuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworVEVTVChUaWxpbmdE
YXRhVGVzdCwgbnVtVGlsZXNfTm9UaWxpbmcpCit7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0Rh
dGEoMTYsIDE2LCAxNiwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxp
bmdEYXRhKDE2LCAxNSwgMTUsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBU
aWxpbmdEYXRhKDE2LCAxNiwgMTYsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgx
LCBUaWxpbmdEYXRhKDE2LCAgMSwgMTYsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1Rf
RVEoMSwgVGlsaW5nRGF0YSgxNSwgMTUsIDE1LCB0cnVlKS5udW1UaWxlcygpKTsKK30KKworVEVT
VChUaWxpbmdEYXRhVGVzdCwgbnVtVGlsZXNfVGlsaW5nTm9Cb3JkZXJzKQoreworICAgIEVYUEVD
VF9FUSgxLCBUaWxpbmdEYXRhKDQsICAxLCAgNCwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVY
UEVDVF9FUSgxLCBUaWxpbmdEYXRhKDQsICAyLCAgNCwgZmFsc2UpLm51bVRpbGVzKCkpOworICAg
IEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDQsICAzLCAgNCwgZmFsc2UpLm51bVRpbGVzKCkpOwor
ICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDQsICA0LCAgNCwgZmFsc2UpLm51bVRpbGVzKCkp
OworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDQsICA1LCAgNCwgZmFsc2UpLm51bVRpbGVz
KCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDQsICA2LCAgNCwgZmFsc2UpLm51bVRp
bGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDQsICA3LCAgNCwgZmFsc2UpLm51
bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDQsICA4LCAgNCwgZmFsc2Up
Lm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDQsICA5LCAgNCwgZmFs
c2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDQsIDEwLCAgNCwg
ZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDQsIDExLCAg
NCwgZmFsc2UpLm51bVRpbGVzKCkpOworCisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoNSwg
IDEsICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEo
NSwgIDIsICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0Rh
dGEoNSwgIDMsICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGlu
Z0RhdGEoNSwgIDQsICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRp
bGluZ0RhdGEoNSwgIDUsICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDIs
IFRpbGluZ0RhdGEoNSwgIDYsICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VR
KDIsIFRpbGluZ0RhdGEoNSwgIDcsICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNU
X0VRKDIsIFRpbGluZ0RhdGEoNSwgIDgsICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQ
RUNUX0VRKDIsIFRpbGluZ0RhdGEoNSwgIDksICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAg
RVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNSwgMTAsICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7Cisg
ICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNSwgMTEsICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7
CisKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgxNiwgMTYsIDE2LCBmYWxzZSkubnVtVGls
ZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMTcsIDE2LCAxNiwgZmFsc2UpLm51
bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDE1LCAxNiwgMTYsIGZhbHNl
KS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSg4LCAxNiwgMTYsIGZh
bHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoNiwgVGlsaW5nRGF0YSg4LCAxNywgMTYs
IGZhbHNlKS5udW1UaWxlcygpKTsKK30KKworVEVTVChUaWxpbmdEYXRhVGVzdCwgbnVtVGlsZXNf
VGlsaW5nV2l0aEJvcmRlcnMpCit7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMywgIDEs
ICAzLCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgzLCAg
MiwgIDMsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDMs
ICAzLCAgMywgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEo
MywgIDQsICAzLCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0
YSgzLCAgNSwgIDMsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdE
YXRhKDMsICA2LCAgMywgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDUsIFRpbGlu
Z0RhdGEoMywgIDcsICAzLCB0cnVlKS5udW1UaWxlcygpKTsKKworICAgIEVYUEVDVF9FUSgxLCBU
aWxpbmdEYXRhKDQsICAxLCAgNCwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEs
IFRpbGluZ0RhdGEoNCwgIDIsICA0LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEo
MSwgVGlsaW5nRGF0YSg0LCAgMywgIDQsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9F
USgxLCBUaWxpbmdEYXRhKDQsICA0LCAgNCwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNU
X0VRKDIsIFRpbGluZ0RhdGEoNCwgIDUsICA0LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBF
Q1RfRVEoMiwgVGlsaW5nRGF0YSg0LCAgNiwgIDQsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVY
UEVDVF9FUSgzLCBUaWxpbmdEYXRhKDQsICA3LCAgNCwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAg
RVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNCwgIDgsICA0LCB0cnVlKS5udW1UaWxlcygpKTsKKyAg
ICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSg0LCAgOSwgIDQsIHRydWUpLm51bVRpbGVzKCkpOwor
ICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDQsIDEwLCAgNCwgdHJ1ZSkubnVtVGlsZXMoKSk7
CisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoNCwgMTEsICA0LCB0cnVlKS5udW1UaWxlcygp
KTsKKworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICAxLCAgNSwgdHJ1ZSkubnVtVGls
ZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoNSwgIDIsICA1LCB0cnVlKS5udW1U
aWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg1LCAgMywgIDUsIHRydWUpLm51
bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICA0LCAgNSwgdHJ1ZSku
bnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoNSwgIDUsICA1LCB0cnVl
KS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSg1LCAgNiwgIDUsIHRy
dWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDUsICA3LCAgNSwg
dHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNSwgIDgsICA1
LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg1LCAgOSwg
IDUsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDUsIDEw
LCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNSwg
MTEsICA1LCB0cnVlKS5udW1UaWxlcygpKTsKK30KKworVEVTVChUaWxpbmdEYXRhVGVzdCwgdGls
ZVhJbmRleEZyb21TcmNDb29yZCkKK3sKKyAgICBFWFBFQ1RfRVEoMCwgVGlsaW5nRGF0YSgzLCAx
MCwgMTAsIGZhbHNlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDApKTsKKyAgICBFWFBFQ1RfRVEo
MCwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDEp
KTsKKyAgICBFWFBFQ1RfRVEoMCwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWElu
ZGV4RnJvbVNyY0Nvb3JkKDIpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgzLCAxMCwg
MTAsIGZhbHNlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDMpKTsKKyAgICBFWFBFQ1RfRVEoMSwg
VGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDQpKTsK
KyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWEluZGV4
RnJvbVNyY0Nvb3JkKDUpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSgzLCAxMCwgMTAs
IGZhbHNlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDYpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGls
aW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDcpKTsKKyAg
ICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWEluZGV4RnJv
bVNyY0Nvb3JkKDgpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZh
bHNlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDkpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5n
RGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDEwKSk7CisgICAg
RVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21T
cmNDb29yZCgxMSkpOworCisgICAgRVhQRUNUX0VRKDAsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0
cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDApKTsKKyAgICBFWFBFQ1RfRVEoMCwgVGlsaW5n
RGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoMSkpOworICAgIEVY
UEVDVF9FUSgxLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZyb21TcmND
b29yZCgyKSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50
aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDMpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSgz
LCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoNCkpOworICAgIEVYUEVDVF9F
USg0LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCg1
KSk7CisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWElu
ZGV4RnJvbVNyY0Nvb3JkKDYpKTsKKyAgICBFWFBFQ1RfRVEoNiwgVGlsaW5nRGF0YSgzLCAxMCwg
MTAsIHRydWUpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoNykpOworICAgIEVYUEVDVF9FUSg3LCBU
aWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCg4KSk7Cisg
ICAgRVhQRUNUX0VRKDcsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWEluZGV4RnJv
bVNyY0Nvb3JkKDkpKTsKKyAgICBFWFBFQ1RfRVEoNywgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRy
dWUpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoMTApKTsKKyAgICBFWFBFQ1RfRVEoNywgVGlsaW5n
RGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoMTEpKTsKK30KK1RF
U1QoVGlsaW5nRGF0YVRlc3QsIHRpbGVZSW5kZXhGcm9tU3JjQ29vcmQpCit7CisgICAgRVhQRUNU
X0VRKDAsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29y
ZCgwKSk7CisgICAgRVhQRUNUX0VRKDAsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGls
ZVlJbmRleEZyb21TcmNDb29yZCgxKSk7CisgICAgRVhQRUNUX0VRKDAsIFRpbGluZ0RhdGEoMywg
MTAsIDEwLCBmYWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCgyKSk7CisgICAgRVhQRUNUX0VR
KDEsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCgz
KSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVlJ
bmRleEZyb21TcmNDb29yZCg0KSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMywgMTAs
IDEwLCBmYWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCg1KSk7CisgICAgRVhQRUNUX0VRKDIs
IFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCg2KSk7
CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVlJbmRl
eEZyb21TcmNDb29yZCg3KSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoMywgMTAsIDEw
LCBmYWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCg4KSk7CisgICAgRVhQRUNUX0VRKDMsIFRp
bGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCg5KSk7Cisg
ICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVlJbmRleEZy
b21TcmNDb29yZCgxMCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwg
ZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoMTEpKTsKKworICAgIEVYUEVDVF9FUSgwLCBU
aWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCgwKSk7Cisg
ICAgRVhQRUNUX0VRKDAsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWUluZGV4RnJv
bVNyY0Nvb3JkKDEpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRy
dWUpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoMikpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdE
YXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCgzKSk7CisgICAgRVhQ
RUNUX0VRKDMsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nv
b3JkKDQpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRp
bGVZSW5kZXhGcm9tU3JjQ29vcmQoNSkpOworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDMs
IDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCg2KSk7CisgICAgRVhQRUNUX0VR
KDYsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDcp
KTsKKyAgICBFWFBFQ1RfRVEoNywgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVZSW5k
ZXhGcm9tU3JjQ29vcmQoOCkpOworICAgIEVYUEVDVF9FUSg3LCBUaWxpbmdEYXRhKDMsIDEwLCAx
MCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCg5KSk7CisgICAgRVhQRUNUX0VRKDcsIFRp
bGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDEwKSk7Cisg
ICAgRVhQRUNUX0VRKDcsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWUluZGV4RnJv
bVNyY0Nvb3JkKDExKSk7Cit9CisKK1RFU1QoVGlsaW5nRGF0YVRlc3QsIHRpbGVTaXplWCkKK3sK
KyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSg1LCAgNSwgIDUsIGZhbHNlKS50aWxlU2l6ZVgo
MCkpOworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUsICA1LCAgNSwgdHJ1ZSkudGlsZVNp
emVYKDApKTsKKworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUsICA2LCAgNiwgZmFsc2Up
LnRpbGVTaXplWCgwKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoNSwgIDYsICA2LCBm
YWxzZSkudGlsZVNpemVYKDEpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSg1LCAgNiwg
IDYsIHRydWUpLnRpbGVTaXplWCgwKSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNSwg
IDYsICA2LCB0cnVlKS50aWxlU2l6ZVgoMSkpOworCisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0Rh
dGEoNSwgIDgsICA4LCBmYWxzZSkudGlsZVNpemVYKDApKTsKKyAgICBFWFBFQ1RfRVEoMywgVGls
aW5nRGF0YSg1LCAgOCwgIDgsIGZhbHNlKS50aWxlU2l6ZVgoMSkpOworICAgIEVYUEVDVF9FUSg0
LCBUaWxpbmdEYXRhKDUsICA4LCAgOCwgdHJ1ZSkudGlsZVNpemVYKDApKTsKKyAgICBFWFBFQ1Rf
RVEoNCwgVGlsaW5nRGF0YSg1LCAgOCwgIDgsIHRydWUpLnRpbGVTaXplWCgxKSk7CisKKyAgICBF
WFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSg1LCAxMCwgMTAsIGZhbHNlKS50aWxlU2l6ZVgoMCkpOwor
ICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUsIDEwLCAxMCwgZmFsc2UpLnRpbGVTaXplWCgx
KSk7CisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoNSwgMTAsIDEwLCB0cnVlKS50aWxlU2l6
ZVgoMCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDUsIDEwLCAxMCwgdHJ1ZSkudGls
ZVNpemVYKDEpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg1LCAxMCwgMTAsIHRydWUp
LnRpbGVTaXplWCgyKSk7CisKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSg1LCAxMSwgMTEs
IHRydWUpLnRpbGVTaXplWCgyKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNSwgMTIs
IDEyLCB0cnVlKS50aWxlU2l6ZVgoMikpOworfQorVEVTVChUaWxpbmdEYXRhVGVzdCwgdGlsZVNp
emVZKQoreworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUsICA1LCAgNSwgZmFsc2UpLnRp
bGVTaXplWSgwKSk7CisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoNSwgIDUsICA1LCB0cnVl
KS50aWxlU2l6ZVkoMCkpOworCisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoNSwgIDYsICA2
LCBmYWxzZSkudGlsZVNpemVZKDApKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg1LCAg
NiwgIDYsIGZhbHNlKS50aWxlU2l6ZVkoMSkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRh
KDUsICA2LCAgNiwgdHJ1ZSkudGlsZVNpemVZKDApKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5n
RGF0YSg1LCAgNiwgIDYsIHRydWUpLnRpbGVTaXplWSgxKSk7CisKKyAgICBFWFBFQ1RfRVEoNSwg
VGlsaW5nRGF0YSg1LCAgOCwgIDgsIGZhbHNlKS50aWxlU2l6ZVkoMCkpOworICAgIEVYUEVDVF9F
USgzLCBUaWxpbmdEYXRhKDUsICA4LCAgOCwgZmFsc2UpLnRpbGVTaXplWSgxKSk7CisgICAgRVhQ
RUNUX0VRKDQsIFRpbGluZ0RhdGEoNSwgIDgsICA4LCB0cnVlKS50aWxlU2l6ZVkoMCkpOworICAg
IEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDUsICA4LCAgOCwgdHJ1ZSkudGlsZVNpemVZKDEpKTsK
KworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUsIDEwLCAxMCwgZmFsc2UpLnRpbGVTaXpl
WSgwKSk7CisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoNSwgMTAsIDEwLCBmYWxzZSkudGls
ZVNpemVZKDEpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSg1LCAxMCwgMTAsIHRydWUp
LnRpbGVTaXplWSgwKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNSwgMTAsIDEwLCB0
cnVlKS50aWxlU2l6ZVkoMSkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDUsIDEwLCAx
MCwgdHJ1ZSkudGlsZVNpemVZKDIpKTsKKworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDUs
IDExLCAxMSwgdHJ1ZSkudGlsZVNpemVZKDIpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0
YSg1LCAxMiwgMTIsIHRydWUpLnRpbGVTaXplWSgyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64177</attachid>
            <date>2010-08-11 17:41:29 -0700</date>
            <delta_ts>2010-08-12 17:10:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43864-20100811174128.patch</filename>
            <type>text/plain</type>
            <size>41957</size>
            <attacher name="Vincent Scheib">scheib</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YmYxNmM1MWM1ZWM0ZjViOWQzMTMwMTIxNWU1ZWMwZjkyOTk0ZWQ4Yi4uZmI4ODc2ZjVkOTllMGUw
N2I2ODFhZmRmNzVjZTgzODk3OTFmOTRlNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMC0wOC0xMSAgVmlu
Y2VudCBTY2hlaWIgIDxzY2hlaWJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENhbnZhczJEIGRvZXMgbm90IHN1cHBvcnQgaW1h
Z2VzIGxhcmdlciB0aGFuIHN5c3RlbSdzIEdQVSBtYXggdGV4dHVyZSBzaXplCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mzg2NAorCisgICAgICAgIEEg
bmV3IGNsYXNzICJUaWxpbmdEYXRhIiBoYXMgYmVlbiBjcmVhdGVkIHRoYXQgcHJvdmlkZXMgbG9n
aWMgZm9yIAorICAgICAgICBzcGxpdHRpbmcgYSBsYXJnZSBpbWFnZSBpbnRvIGEgc2VyaWVzIG9m
IHNtYWxsZXIgdGlsZXMuCisgICAgICAgIAorICAgICAgICBHTEVTMlRleHR1cmUgYW5kIENMRVMy
Q2FudmFzIGFyZSBtb2RpZmllZCB0byB1c2UgdGhlIFRpbGluZ0RhdGEgdG8KKyAgICAgICAgc3Bs
aXQgaW1hZ2VzIG9uIHRleHR1cmUgdXBsb2FkIGFuZCByZW5kZXIgb25lIGxvZ2ljYWwgaW1hZ2Ug
YXMgbWFueSBzbWFsbGVyCisgICAgICAgIGltYWdlcy4KKworICAgICAgICBUaWxpbmdEYXRhIGlz
IHRlc3RlZCB2aWEgdW5pdCB0ZXN0cyBpbiBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsaW5nRGF0
YVRlc3QuY3BwCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dMRVMyQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4
dHVyZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRS
ZWN0VGlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52
YXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZU51bVRpbGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGluZ0RhdGE6OlRpbGluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0
YTo6dGlsZVhJbmRleEZyb21TcmNDb29yZCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRh
Ojp0aWxlWUluZGV4RnJvbVNyY0Nvb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6
OnRpbGVCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZUJvdW5kc1dp
dGhCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZUJvdW5kc05vcm1h
bGl6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZVBvc2l0aW9uWCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxlUG9zaXRpb25ZKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGluZ0RhdGE6OnRpbGVTaXplWCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdE
YXRhOjp0aWxlU2l6ZVkpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6b3ZlcmxhcHBl
ZFRpbGVJbmRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OmludGVyc2VjdERy
YXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyVGV4dHVyZTo6R0xFUzJUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdMRVMyVGV4dHVyZTo6fkdMRVMyVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3B5
U3ViUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OmxvYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6R0xFUzJUZXh0dXJlOjpiaW5kVGlsZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmg6CisgICAgICAgIChXZWJDb3JlOjpUaWxp
bmdEYXRhOjptYXhUZXh0dXJlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0
b3RhbFNpemVYKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OnRvdGFsU2l6ZVkpOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6bnVtVGlsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6VGlsaW5nRGF0YTo6bnVtVGlsZXNYKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6
Om51bVRpbGVzWSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxlSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZVhJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxpbmdEYXRhOjp0aWxlWUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0Rh
dGE6OlRpbGluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6YXNzZXJ0VGls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OnRpbGVzKToKKwogMjAxMC0wOC0x
MCAgQWFyb24gQm9vZG1hbiAgPGFhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXZpZCBIeWF0dC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggYTJmYWY1MzE3OTlmNjg5ZmE5ODYxZjJmZWI0NTkzYzAyYTMy
ZTcyMi4uMTE3NGU0OWY1MGFiOGM1MmU0YzQ4ODJkM2UyYzMxYjQ5N2ZkYTEzNCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIy
MzAsNiArMjIzMCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UGxhdGZvcm1JY29uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsaW5nRGF0YS5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxpbmdEYXRhLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zZm9ybUxheWVyQ2hy
b21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNw
YXJlbmN5V2luLmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dMRVMyQ2FudmFzLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR0xFUzJDYW52YXMuY3BwCmluZGV4IDhhOWJkZTFmOGZjNjQ0NmUzYzIwNDk5MTU0YjA1MjRi
ODYxYTkyYjUuLjVkMDdiMGRkYzcyNjZjNTJjZWQ4NzNlMGRkYWUyYmFmYWU2ZDE0Y2MgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3Bw
CkBAIC0zOCwxNCArMzgsMTUgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJH
TEVTMlRleHR1cmUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUg
IkludFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlVpbnQx
NkFycmF5LmgiCiAKICNkZWZpbmUgX1VTRV9NQVRIX0RFRklORVMKICNpbmNsdWRlIDxtYXRoLmg+
CiAKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL093bkFycmF5
UHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTIyMSw3ICsyMjIsNiBAQCB2b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRS
ZWN0KEdMRVMyVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZQogICAgIGNo
ZWNrR0xFcnJvcigiZ2xVc2VQcm9ncmFtIik7CiAKICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKLSAgICB0ZXh0dXJlLT5iaW5kKCk7CiAK
ICAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShtX3RleFNhbXBsZXJMb2NhdGlvbiwgMCk7CiAgICAg
Y2hlY2tHTEVycm9yKCJnbFVuaWZvcm0xaSIpOwpAQCAtMjI5LDI4ICsyMjksNTEgQEAgdm9pZCBH
TEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdChHTEVTMlRleHR1cmUqIHRleHR1cmUsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmUKICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihtX3RleEFscGhhTG9j
YXRpb24sIGFscGhhKTsKICAgICBjaGVja0dMRXJyb3IoImdsVW5pZm9ybTFmIGZvciBhbHBoYSIp
OwogCisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKG1fdGV4UG9zaXRpb25Mb2Nh
dGlvbiwgMywgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisKKyAgICBt
X2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fdGV4UG9zaXRpb25Mb2NhdGlvbik7
CisKKyAgICBjb25zdCBUaWxpbmdEYXRhJiB0aWxlcyA9IHRleHR1cmUtPnRpbGVzKCk7CisgICAg
SW50UmVjdCB0aWxlSWR4UmVjdCA9IHRpbGVzLm92ZXJsYXBwZWRUaWxlSW5kaWNlcyhzcmNSZWN0
KTsKKworICAgIGZvciAoaW50IHkgPSB0aWxlSWR4UmVjdC55KCk7IHkgPD0gdGlsZUlkeFJlY3Qu
Ym90dG9tKCk7IHkrKykKKyAgICAgICAgZm9yIChpbnQgeCA9IHRpbGVJZHhSZWN0LngoKTsgeCA8
PSB0aWxlSWR4UmVjdC5yaWdodCgpOyB4KyspCisgICAgICAgICAgICBkcmF3VGV4dHVyZWRSZWN0
VGlsZSh0ZXh0dXJlLCB0aWxlcy50aWxlSW5kZXgoeCwgeSksIHNyY1JlY3QsIGRzdFJlY3QsIHRy
YW5zZm9ybSk7Cit9CisKK3ZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3RUaWxlKEdM
RVMyVGV4dHVyZSogdGV4dHVyZSwgaW50IHRpbGUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKK3sKKyAgICBpZiAoZHN0UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGNvbnN0IFRpbGluZ0RhdGEgdGlsZXMgPSB0ZXh0dXJlLT50aWxlcygpOworCisgICAgdGV4dHVy
ZS0+YmluZFRpbGUodGlsZSk7CisKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdENsaXBwZWRJblRpbGVT
cGFjZTsKKyAgICBGbG9hdFJlY3QgZHN0UmVjdEludGVyc2VjdGVkOworICAgIHRpbGVzLmludGVy
c2VjdERyYXdRdWFkKHNyY1JlY3QsIGRzdFJlY3QsIHRpbGUsIHNyY1JlY3RDbGlwcGVkSW5UaWxl
U3BhY2UsIGRzdFJlY3RJbnRlcnNlY3RlZCk7CisKKyAgICBJbnRSZWN0IHRpbGVCb3VuZHNXaXRo
Qm9yZGVyID0gdGlsZXMudGlsZUJvdW5kc1dpdGhCb3JkZXIodGlsZSk7CisKICAgICBBZmZpbmVU
cmFuc2Zvcm0gbWF0cml4KG1fZmxpcE1hdHJpeCk7CiAgICAgbWF0cml4Lm11bHRMZWZ0KHRyYW5z
Zm9ybSk7Ci0gICAgbWF0cml4LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwot
ICAgIG1hdHJpeC5zY2FsZShkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkpOworICAg
IG1hdHJpeC50cmFuc2xhdGUoZHN0UmVjdEludGVyc2VjdGVkLngoKSwgZHN0UmVjdEludGVyc2Vj
dGVkLnkoKSk7CisgICAgbWF0cml4LnNjYWxlKGRzdFJlY3RJbnRlcnNlY3RlZC53aWR0aCgpLCBk
c3RSZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0KCkpOwogICAgIGZsb2F0IG1hdFs5XTsKICAgICBhZmZp
bmVUbzN4MyhtYXRyaXgsIG1hdCk7CiAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KG1f
dGV4TWF0cml4TG9jYXRpb24sIGZhbHNlIC8qdHJhbnNwb3NlKi8sIG1hdCwgMSAvKmNvdW50Ki8p
OwogICAgIGNoZWNrR0xFcnJvcigiZ2xVbmlmb3JtTWF0cml4M2Z2Iik7CiAKICAgICBBZmZpbmVU
cmFuc2Zvcm0gdGV4TWF0cml4OwotICAgIHRleE1hdHJpeC5zY2FsZSgxLjBmIC8gdGV4dHVyZS0+
d2lkdGgoKSwgMS4wZiAvIHRleHR1cmUtPmhlaWdodCgpKTsKLSAgICB0ZXhNYXRyaXgudHJhbnNs
YXRlKHNyY1JlY3QueCgpLCBzcmNSZWN0LnkoKSk7Ci0gICAgdGV4TWF0cml4LnNjYWxlKHNyY1Jl
Y3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSk7CisgICAgdGV4TWF0cml4LnNjYWxlKDEuMGYg
LyB0aWxlQm91bmRzV2l0aEJvcmRlci53aWR0aCgpLCAxLjBmIC8gdGlsZUJvdW5kc1dpdGhCb3Jk
ZXIuaGVpZ2h0KCkpOworICAgIHRleE1hdHJpeC50cmFuc2xhdGUoc3JjUmVjdENsaXBwZWRJblRp
bGVTcGFjZS54KCksIHNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2UueSgpKTsKKyAgICB0ZXhNYXRy
aXguc2NhbGUoc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZS53aWR0aCgpLCBzcmNSZWN0Q2xpcHBl
ZEluVGlsZVNwYWNlLmhlaWdodCgpKTsKICAgICBmbG9hdCB0ZXhNYXRbOV07CiAgICAgYWZmaW5l
VG8zeDModGV4TWF0cml4LCB0ZXhNYXQpOwogICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNm
dihtX3RleFRleE1hdHJpeExvY2F0aW9uLCBmYWxzZSAvKnRyYW5zcG9zZSovLCB0ZXhNYXQsIDEg
Lypjb3VudCovKTsKICAgICBjaGVja0dMRXJyb3IoImdsVW5pZm9ybU1hdHJpeDNmdiIpOwogCi0g
ICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKG1fdGV4UG9zaXRpb25Mb2NhdGlvbiwg
MywgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7Ci0KLSAgICBtX2NvbnRl
eHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fdGV4UG9zaXRpb25Mb2NhdGlvbik7Ci0KICAg
ICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCA2
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDApOwogICAgIGNoZWNrR0xFcnJv
cigiZ2xEcmF3RWxlbWVudHMiKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR0xFUzJDYW52YXMuaAppbmRleCBjZWE5MGFlYWFiYjI2MTQ3ZjFmMjQzMjY3MTgw
OTI1Y2M4YWE3MzNjLi4wYWQwN2ZjZGJmZWQ5OWFkNmVjZDdlNTc0NjAwMWZiYmFkYWZiZTdjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFz
LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5o
CkBAIC04MSw2ICs4MSw3IEBAIHB1YmxpYzoKICAgICBHTEVTMlRleHR1cmUqIGdldFRleHR1cmUo
TmF0aXZlSW1hZ2VQdHIpOwogCiBwcml2YXRlOgorICAgIHZvaWQgZHJhd1RleHR1cmVkUmVjdFRp
bGUoR0xFUzJUZXh0dXJlKiB0ZXh0dXJlLCBpbnQgdGlsZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwog
ICAgIHZvaWQgYXBwbHlDb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVPcGVyYXRvcik7CiAgICAg
dm9pZCBjaGVja0dMRXJyb3IoY29uc3QgY2hhciogaGVhZGVyKTsKICAgICB1bnNpZ25lZCBnZXRR
dWFkVmVydGljZXMoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR0xFUzJUZXh0dXJlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR0xFUzJUZXh0dXJlLmNwcAppbmRleCA1ZThhMTQxZGQyODJmMjk0NDEzYTg1MWYxMjRiYTgw
ZGY3ZmQxZDQwLi45ZWJiYzc4ZDE5YjdkODY3YWVkZTE2ZmI3YWIzOGNhOGI0OGMwY2UzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUu
Y3BwCkBAIC0zNSw0MiArMzUsNjEgQEAKICNpbmNsdWRlICJHTEVTMlRleHR1cmUuaCIKIAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5j
bHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR0xFUzJU
ZXh0dXJlOjpHTEVTMlRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVk
IHRleHR1cmVJZCwgRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorCitHTEVT
MlRleHR1cmU6OkdMRVMyVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3Qg
VmVjdG9yPHVuc2lnbmVkIGludD4mIHRpbGVUZXh0dXJlSWRzLCBGb3JtYXQgZm9ybWF0LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGludCBtYXhUZXh0dXJlU2l6ZSkKICAgICA6IG1fY29udGV4dChj
b250ZXh0KQotICAgICwgbV90ZXh0dXJlSWQodGV4dHVyZUlkKQogICAgICwgbV9mb3JtYXQoZm9y
bWF0KQotICAgICwgbV93aWR0aCh3aWR0aCkKLSAgICAsIG1faGVpZ2h0KGhlaWdodCkKKyAgICAs
IG1fdGlsZXMobWF4VGV4dHVyZVNpemUsIHdpZHRoLCBoZWlnaHQsIHRydWUpCisgICAgLCBtX3Rp
bGVUZXh0dXJlSWRzKHRpbGVUZXh0dXJlSWRzKQogewogfQogCiBHTEVTMlRleHR1cmU6On5HTEVT
MlRleHR1cmUoKQogewotICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX3RleHR1cmVJZCk7
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtX3RpbGVUZXh0dXJlSWRzLnNpemUo
KTsgaSsrKQorICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV90aWxlVGV4dHVyZUlk
c1tpXSk7CiB9CiAKIFBhc3NSZWZQdHI8R0xFUzJUZXh0dXJlPiBHTEVTMlRleHR1cmU6OmNyZWF0
ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQogewotICAgIGludCBtYXg7Ci0gICAgY29udGV4dC0+Z2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtYXgpOwotICAgIGlmICh3aWR0aCA+
IG1heCB8fCBoZWlnaHQgPiBtYXgpIHsKLSAgICAgICAgQVNTRVJUKCEidGV4dHVyZSB0b28gYmln
Iik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHVuc2lnbmVkIHRleHR1cmVJZCA9
IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKLSAgICBpZiAoIXRleHR1cmVJZCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKLSAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgd2lkdGgs
IGhlaWdodCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFLCAwKTsKKyAgICBpbnQgbWF4VGV4dHVyZVNpemUgPSAwOworICAgIGNvbnRl
eHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbWF4
VGV4dHVyZVNpemUpOworCisgICAgVGlsaW5nRGF0YSB0aWxpbmcobWF4VGV4dHVyZVNpemUsIHdp
ZHRoLCBoZWlnaHQsIHRydWUpOworICAgIGludCBudW1UaWxlcyA9IHRpbGluZy5udW1UaWxlcygp
OworCisgICAgVmVjdG9yPHVuc2lnbmVkIGludD4gdGV4dHVyZUlkcyhudW1UaWxlcyk7CisgICAg
dGV4dHVyZUlkcy5maWxsKDAsIG51bVRpbGVzKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51
bVRpbGVzOyBpKyspCisgICAgICAgICB0ZXh0dXJlSWRzW2ldID0gY29udGV4dC0+Y3JlYXRlVGV4
dHVyZSgpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1UaWxlczsgaSsrKSB7CisgICAg
ICAgIHVuc2lnbmVkIGludCB0ZXh0dXJlSWQgPSB0ZXh0dXJlSWRzLmJlZ2luKClbaV07CisgICAg
ICAgIGlmICghdGV4dHVyZUlkKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51
bVRpbGVzOyBpKyspCisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlVGV4dHVyZSh0ZXh0
dXJlSWRzW2ldKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEdMRVMyVGV4dHVyZShjb250ZXh0LCB0ZXh0dXJlSWQsIGZvcm1hdCwg
d2lkdGgsIGhlaWdodCkpOworICAgICAgICBJbnRSZWN0IHRpbGVCb3VuZHNXaXRoQm9yZGVyID0g
dGlsaW5nLnRpbGVCb3VuZHNXaXRoQm9yZGVyKGkpOworCisgICAgICAgIGNvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpOworICAgICAg
ICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELAorICAg
ICAgICAgICAgMCwKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLAorICAgICAg
ICAgICAgdGlsZUJvdW5kc1dpdGhCb3JkZXIud2lkdGgoKSwKKyAgICAgICAgICAgIHRpbGVCb3Vu
ZHNXaXRoQm9yZGVyLmhlaWdodCgpLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLAorICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsCisgICAgICAgICAgICAwKTsKKyAgICB9CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBHTEVTMlRleHR1cmUoY29udGV4dCwgdGV4dHVyZUlkcywgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBtYXhUZXh0dXJlU2l6ZSkpOwogfQogCiBzdGF0aWMgdm9pZCBjb252ZXJ0Rm9ybWF0KEdMRVMy
VGV4dHVyZTo6Rm9ybWF0IGZvcm1hdCwgdW5zaWduZWQgaW50KiBnbEZvcm1hdCwgdW5zaWduZWQg
aW50KiBnbFR5cGUsIGJvb2wqIHN3aXp6bGUpCkBAIC05NCwzMSArMTEzLDY1IEBAIHN0YXRpYyB2
b2lkIGNvbnZlcnRGb3JtYXQoR0xFUzJUZXh0dXJlOjpGb3JtYXQgZm9ybWF0LCB1bnNpZ25lZCBp
bnQqIGdsRm9ybWF0LCB1CiAgICAgfQogfQogCit0ZW1wbGF0ZSA8Ym9vbCBzd2l6emxlPgorc3Rh
dGljIHVpbnQzMl90KiBjb3B5U3ViUmVjdCh1aW50MzJfdCogc3JjLCBpbnQgc3JjWCwgaW50IHNy
Y1ksIHVpbnQzMl90KiBkc3QsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHNyY1N0cmlkZSkK
K3sKKyAgICB1aW50MzJfdCogc3JjT2Zmc2V0ID0gc3JjICsgc3JjWCArIHNyY1kgKiBzcmNTdHJp
ZGU7CisKKyAgICBpZiAoIXN3aXp6bGUgJiYgd2lkdGggPT0gc3JjU3RyaWRlKQorICAgICAgICBy
ZXR1cm4gc3JjT2Zmc2V0OworCisgICAgdWludDMyX3QqIGRzdFBpeGVsID0gZHN0OworICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aCA7IHgrKykgeworICAgICAgICAgICAgdWludDMyX3QgcGl4ZWwgPSBzcmNPZmZz
ZXRbeCArIHkgKiBzcmNTdHJpZGVdOworICAgICAgICAgICAgaWYgKHN3aXp6bGUpCisgICAgICAg
ICAgICAgICAgKmRzdFBpeGVsID0gcGl4ZWwgJiAweEZGMDBGRjAwIHwgKChwaXhlbCAmIDB4MDBG
RjAwMDApID4+IDE2KSB8ICgocGl4ZWwgJiAweDAwMDAwMEZGKSA8PCAxNik7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgKmRzdFBpeGVsID0gcGl4ZWw7CisgICAgICAgICAgICBk
c3RQaXhlbCsrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBkc3Q7Cit9CisKIHZvaWQg
R0xFUzJUZXh0dXJlOjpsb2FkKHZvaWQqIHBpeGVscykKIHsKKyAgICB1aW50MzJfdCogcGl4ZWxz
MzIgPSBzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHBpeGVscyk7CiAgICAgdW5zaWduZWQgaW50IGds
Rm9ybWF0LCBnbFR5cGU7CiAgICAgYm9vbCBzd2l6emxlOwogICAgIGNvbnZlcnRGb3JtYXQobV9m
b3JtYXQsICZnbEZvcm1hdCwgJmdsVHlwZSwgJnN3aXp6bGUpOwotICAgIG1fY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKICAg
ICBpZiAoc3dpenpsZSkgewogICAgICAgICBBU1NFUlQoZ2xGb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEgJiYgZ2xUeXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
KTsKICAgICAgICAgLy8gRklYTUU6ICBUaGlzIGNvdWxkIHVzZSBQQk8ncyB0byBzYXZlIGRvaW5n
IGFuIGV4dHJhIGNvcHkgaGVyZS4KLSAgICAgICAgaW50IHNpemUgPSBtX3dpZHRoICogbV9oZWln
aHQ7Ci0gICAgICAgIHVuc2lnbmVkKiBwaXhlbHMzMiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkKj4o
cGl4ZWxzKTsKLSAgICAgICAgT3duQXJyYXlQdHI8dW5zaWduZWQ+IGJ1ZihuZXcgdW5zaWduZWRb
c2l6ZV0pOwotICAgICAgICB1bnNpZ25lZCogYnVmcHRyID0gYnVmLmdldCgpOwotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgdW5zaWduZWQgcGl4
ZWwgPSBwaXhlbHMzMltpXTsKLSAgICAgICAgICAgIGJ1ZnB0cltpXSA9IHBpeGVsICYgMHhGRjAw
RkYwMCB8ICgocGl4ZWwgJiAweDAwRkYwMDAwKSA+PiAxNikgfCAoKHBpeGVsICYgMHgwMDAwMDBG
RikgPDwgMTYpOwotICAgICAgICB9Ci0gICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQs
IGdsRm9ybWF0LCBnbFR5cGUsIGJ1Zi5nZXQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY29u
dGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwg
MCwgbV93aWR0aCwgbV9oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIHBpeGVscyk7CisgICAgfQor
ICAgIHVpbnQzMl90KiB0ZW1wQnVmZiA9IG5ldyB1aW50MzJfdFttX3RpbGVzLm1heFRleHR1cmVT
aXplKCkqbV90aWxlcy5tYXhUZXh0dXJlU2l6ZSgpXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbV90aWxlcy5udW1UaWxlcygpOyBpKyspIHsKKyAgICAgICAgSW50UmVjdCB0aWxlQm91bmRz
V2l0aEJvcmRlciA9IG1fdGlsZXMudGlsZUJvdW5kc1dpdGhCb3JkZXIoaSk7CisKKyAgICAgICAg
dWludDMyX3QqIHVwbG9hZEJ1ZmYgPSAwOworICAgICAgICBpZiAoc3dpenpsZSkKKyAgICAgICAg
ICAgIHVwbG9hZEJ1ZmYgPSBjb3B5U3ViUmVjdDx0cnVlPigKKyAgICAgICAgICAgIHBpeGVsczMy
LCB0aWxlQm91bmRzV2l0aEJvcmRlci54KCksIHRpbGVCb3VuZHNXaXRoQm9yZGVyLnkoKSwKKyAg
ICAgICAgICAgIHRlbXBCdWZmLCB0aWxlQm91bmRzV2l0aEJvcmRlci53aWR0aCgpLCB0aWxlQm91
bmRzV2l0aEJvcmRlci5oZWlnaHQoKSwgbV90aWxlcy50b3RhbFNpemVYKCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICB1cGxvYWRCdWZmID0gY29weVN1YlJlY3Q8ZmFsc2U+KAorICAgICAg
ICAgICAgcGl4ZWxzMzIsIHRpbGVCb3VuZHNXaXRoQm9yZGVyLngoKSwgdGlsZUJvdW5kc1dpdGhC
b3JkZXIueSgpLAorICAgICAgICAgICAgdGVtcEJ1ZmYsIHRpbGVCb3VuZHNXaXRoQm9yZGVyLndp
ZHRoKCksIHRpbGVCb3VuZHNXaXRoQm9yZGVyLmhlaWdodCgpLCBtX3RpbGVzLnRvdGFsU2l6ZVgo
KSk7CisKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgbV90aWxlVGV4dHVyZUlkc1tpXSk7CisgICAgICAgIG1fY29udGV4dC0+dGV4
U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwKKyAgICAg
ICAgICAgIHRpbGVCb3VuZHNXaXRoQm9yZGVyLndpZHRoKCksCisgICAgICAgICAgICB0aWxlQm91
bmRzV2l0aEJvcmRlci5oZWlnaHQoKSwgZ2xGb3JtYXQsIGdsVHlwZSwgdXBsb2FkQnVmZik7Cisg
ICAgfQorCisgICAgZGVsZXRlW10gdGVtcEJ1ZmY7CiB9CiAKLXZvaWQgR0xFUzJUZXh0dXJlOjpi
aW5kKCkKK3ZvaWQgR0xFUzJUZXh0dXJlOjpiaW5kVGlsZShpbnQgdGlsZSkKIHsKLSAgICBtX2Nv
bnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1
cmVJZCk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgbV90aWxlVGV4dHVyZUlkc1t0aWxlXSk7CiAgICAgbV9jb250ZXh0LT50ZXhQYXJh
bWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKICAgICBtX2Nv
bnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5F
QVIpOwogICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRl
eHQzRDo6Q0xBTVBfVE9fRURHRSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HTEVTMlRleHR1cmUuaAppbmRleCA0ZDM1MWNkZDM3ZDllMTlkZjVmNDhiYjk0YmVk
NDc3M2I2ODBlZDhjLi5kOTZlMGU1YzQwMmUzNzczM2U4YzhkN2VmYmIzMjViMDExZmNmOTMyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVy
ZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJl
LmgKQEAgLTM1LDYgKzM1LDggQEAKIAogI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKICNpbmNsdWRl
ICJSZWZQdHIuaCIKKyNpbmNsdWRlICJUaWxpbmdEYXRhLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKQEAg
LTQ0LDE4ICs0NiwxNiBAQCBwdWJsaWM6CiAgICAgfkdMRVMyVGV4dHVyZSgpOwogICAgIGVudW0g
Rm9ybWF0IHsgUkdCQTgsIEJHUkE4IH07CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8R0xFUzJUZXh0
dXJlPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBGb3JtYXQsIGludCB3aWR0aCwgaW50IGhl
aWdodCk7Ci0gICAgdm9pZCBiaW5kKCk7CisgICAgdm9pZCBiaW5kVGlsZShpbnQgdGlsZSk7CiAg
ICAgdm9pZCBsb2FkKHZvaWQqIHBpeGVscyk7CiAgICAgRm9ybWF0IGZvcm1hdCgpIGNvbnN0IHsg
cmV0dXJuIG1fZm9ybWF0OyB9Ci0gICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0
aDsgfQotICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQorICAgIGNv
bnN0IFRpbGluZ0RhdGEmIHRpbGVzKCkgY29uc3QgeyByZXR1cm4gbV90aWxlczsgfQogcHJpdmF0
ZToKLSAgICBHTEVTMlRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCB0ZXh0dXJl
SWQsIEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICBHTEVTMlRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0QqLCBjb25zdCBWZWN0b3I8dW5zaWduZWQgaW50PiYgdGlsZVRleHR1cmVJ
ZHMsIEZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1heFRleHR1cmVT
aXplKTsKICAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwotICAgIHVuc2lnbmVkIG1f
dGV4dHVyZUlkOwogICAgIEZvcm1hdCBtX2Zvcm1hdDsKLSAgICBpbnQgbV93aWR0aDsKLSAgICBp
bnQgbV9oZWlnaHQ7CisgICAgVGlsaW5nRGF0YSBtX3RpbGVzOworICAgIFZlY3Rvcjx1bnNpZ25l
ZCBpbnQ+IG1fdGlsZVRleHR1cmVJZHM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGluZ0RhdGEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UaWxpbmdEYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDc1NQpp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZjAwZjE0YjQ5
MDdjODMyNmZlNjUzYTNhYTVmNWY2Njg0MTMzNDA1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxpbmdEYXRhLmNwcApAQCAtMCwwICsxLDIy
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGlsaW5nRGF0YS5oIgorCisjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPGFsZ29y
aXRobT4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGF0aWMgaW50IGNvbXB1dGVOdW1UaWxlcyhpbnQgbWF4VGV4dHVyZVNpemUsIGludCB0b3RhbFNp
emUsIGludCBib3JkZXJUZXhlbHMpCit7CisgICAgcmV0dXJuIG1heCgxLCAxICsgKHRvdGFsU2l6
ZSAtIDEgLSAyKmJvcmRlclRleGVscykgLyAobWF4VGV4dHVyZVNpemUgLSAyKmJvcmRlclRleGVs
cykpOworfQorCitUaWxpbmdEYXRhOjpUaWxpbmdEYXRhKGludCBtYXhUZXh0dXJlU2l6ZSwgaW50
IHRvdGFsU2l6ZVgsIGludCB0b3RhbFNpemVZLCBib29sIGJvcmRlclRleGVscykKKyAgICA6IG1f
bWF4VGV4dHVyZVNpemUobWF4VGV4dHVyZVNpemUpCisgICAgLCBtX3RvdGFsU2l6ZVgodG90YWxT
aXplWCkKKyAgICAsIG1fdG90YWxTaXplWSh0b3RhbFNpemVZKQorICAgICwgbV9ib3JkZXJUZXhl
bHMoYm9yZGVyVGV4ZWxzID8gMSA6IDApCit7CisgICAgbV9udW1UaWxlc1ggPSBjb21wdXRlTnVt
VGlsZXMobWF4VGV4dHVyZVNpemUsIG1fdG90YWxTaXplWCwgbV9ib3JkZXJUZXhlbHMpOworICAg
IG1fbnVtVGlsZXNZID0gY29tcHV0ZU51bVRpbGVzKG1heFRleHR1cmVTaXplLCBtX3RvdGFsU2l6
ZVksIG1fYm9yZGVyVGV4ZWxzKTsKK30KKworaW50IFRpbGluZ0RhdGE6OnRpbGVYSW5kZXhGcm9t
U3JjQ29vcmQoaW50IHNyY1BvcykgY29uc3QKK3sKKyAgICBpbnQgeCA9IChzcmNQb3MgLSBtX2Jv
cmRlclRleGVscykgLyAobV9tYXhUZXh0dXJlU2l6ZSAtIDIqbV9ib3JkZXJUZXhlbHMpOworICAg
IHJldHVybiBtaW4obWF4KHgsIDApLCBudW1UaWxlc1goKS0xKTsKK30KKworaW50IFRpbGluZ0Rh
dGE6OnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoaW50IHNyY1BvcykgY29uc3QKK3sKKyAgICBpbnQg
eSA9IChzcmNQb3MgLSBtX2JvcmRlclRleGVscykgLyAobV9tYXhUZXh0dXJlU2l6ZSAtIDIqbV9i
b3JkZXJUZXhlbHMpOworICAgIHJldHVybiBtaW4obWF4KHksIDApLCBudW1UaWxlc1koKS0xKTsK
K30KKworSW50UmVjdCBUaWxpbmdEYXRhOjp0aWxlQm91bmRzKGludCB0aWxlKSBjb25zdAorewor
ICAgIGFzc2VydFRpbGUodGlsZSk7CisgICAgaW50IGl4ID0gdGlsZVhJbmRleCh0aWxlKTsKKyAg
ICBpbnQgaXkgPSB0aWxlWUluZGV4KHRpbGUpOworICAgIGludCB4ID0gdGlsZVBvc2l0aW9uWChp
eCk7CisgICAgaW50IHkgPSB0aWxlUG9zaXRpb25ZKGl5KTsKKyAgICBpbnQgd2lkdGggPSB0aWxl
U2l6ZVgoaXgpOworICAgIGludCBoZWlnaHQgPSB0aWxlU2l6ZVkoaXkpOworICAgIEFTU0VSVCh4
ID49IDAgJiYgeSA+PSAwICYmIHdpZHRoID49IDAgJiYgaGVpZ2h0ID49IDApOworICAgIEFTU0VS
VCh4IDw9IHRvdGFsU2l6ZVgoKSAmJiB5IDw9IHRvdGFsU2l6ZVkoKSk7CisgICAgcmV0dXJuIElu
dFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK0ludFJlY3QgVGlsaW5nRGF0YTo6dGls
ZUJvdW5kc1dpdGhCb3JkZXIoaW50IHRpbGUpIGNvbnN0Cit7CisgICAgSW50UmVjdCBib3VuZHMg
PSB0aWxlQm91bmRzKHRpbGUpOworCisgICAgaWYgKG1fYm9yZGVyVGV4ZWxzKSB7CisgICAgICAg
IGludCB4MSA9IGJvdW5kcy54KCk7CisgICAgICAgIGludCB4MiA9IGJvdW5kcy5yaWdodCgpOwor
ICAgICAgICBpbnQgeTEgPSBib3VuZHMueSgpOworICAgICAgICBpbnQgeTIgPSBib3VuZHMuYm90
dG9tKCk7CisKKyAgICAgICAgaWYgKHRpbGVYSW5kZXgodGlsZSkgPiAwKQorICAgICAgICAgICAg
eDEtLTsKKyAgICAgICAgaWYgKHRpbGVYSW5kZXgodGlsZSkgPCAobnVtVGlsZXNYKCktMSkpCisg
ICAgICAgICAgICB4MisrOworICAgICAgICBpZiAodGlsZVlJbmRleCh0aWxlKSA+IDApCisgICAg
ICAgICAgICB5MS0tOworICAgICAgICBpZiAodGlsZVlJbmRleCh0aWxlKSA8IChudW1UaWxlc1ko
KS0xKSkKKyAgICAgICAgICAgIHkyKys7CisKKyAgICAgICAgYm91bmRzID0gSW50UmVjdCh4MSwg
eTEsIHgyLXgxLCB5Mi15MSk7CisgICAgfQorCisgICAgcmV0dXJuIGJvdW5kczsKK30KKworRmxv
YXRSZWN0IFRpbGluZ0RhdGE6OnRpbGVCb3VuZHNOb3JtYWxpemVkKGludCB0aWxlKSBjb25zdAor
eworICAgIGFzc2VydFRpbGUodGlsZSk7CisgICAgRmxvYXRSZWN0IGJvdW5kcyh0aWxlQm91bmRz
KHRpbGUpKTsKKyAgICBib3VuZHMuc2NhbGUoMS4wZiAvIG1fdG90YWxTaXplWCwgMS4wZiAvIG1f
dG90YWxTaXplWSk7CisgICAgcmV0dXJuIGJvdW5kczsKK30KKworaW50IFRpbGluZ0RhdGE6OnRp
bGVQb3NpdGlvblgoaW50IHhJbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoeEluZGV4ID49IDAg
JiYgeEluZGV4IDwgbnVtVGlsZXNYKCkpOworCisgICAgaWYgKCF4SW5kZXgpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiB0aWxlUG9zaXRpb25YKHhJbmRleC0xKSArIHRpbGVTaXplWCh4
SW5kZXgtMSk7Cit9CisKK2ludCBUaWxpbmdEYXRhOjp0aWxlUG9zaXRpb25ZKGludCB5SW5kZXgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKHlJbmRleCA+PSAwICYmIHlJbmRleCA8IG51bVRpbGVzWSgp
KTsKKworICAgIGlmICgheUluZGV4KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gdGls
ZVBvc2l0aW9uWCh5SW5kZXgtMSkgKyB0aWxlU2l6ZVkoeUluZGV4LTEpOworfQorCitpbnQgVGls
aW5nRGF0YTo6dGlsZVNpemVYKGludCB4SW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHhJbmRl
eCA+PSAwICYmIHhJbmRleCA8IG51bVRpbGVzWCgpKTsKKworICAgIGludCBzaXplID0gbWF4VGV4
dHVyZVNpemUoKTsKKyAgICBzaXplID0gbWluKHNpemUsIHRvdGFsU2l6ZVgoKSk7CisKKyAgICBp
ZiAoIXhJbmRleCAmJiBtX251bVRpbGVzWCA9PSAxKQorICAgICAgICByZXR1cm4gbV90b3RhbFNp
emVYOworICAgIGlmICgheEluZGV4ICYmIG1fbnVtVGlsZXNYID4gMSkKKyAgICAgICAgcmV0dXJu
IG1fbWF4VGV4dHVyZVNpemUgLSBtX2JvcmRlclRleGVsczsKKyAgICBpZiAoeEluZGV4IDwgbnVt
VGlsZXNYKCkgLSAxKQorICAgICAgICByZXR1cm4gbV9tYXhUZXh0dXJlU2l6ZSAtIDIgKiBtX2Jv
cmRlclRleGVsczsKKyAgICBpZiAoeEluZGV4ID09IG51bVRpbGVzWCgpIC0gMSkKKyAgICAgICAg
cmV0dXJuIG1fdG90YWxTaXplWCAtIHRpbGVQb3NpdGlvblgoeEluZGV4KTsKKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitpbnQgVGlsaW5nRGF0YTo6dGls
ZVNpemVZKGludCB5SW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHlJbmRleCA+PSAwICYmIHlJ
bmRleCA8IG51bVRpbGVzWSgpKTsKKworICAgIGludCBzaXplID0gbWF4VGV4dHVyZVNpemUoKTsK
KyAgICBzaXplID0gbWluKHNpemUsIHRvdGFsU2l6ZVkoKSk7CisKKyAgICBpZiAoIXlJbmRleCAm
JiBtX251bVRpbGVzWSA9PSAxKQorICAgICAgICByZXR1cm4gbV90b3RhbFNpemVZOworICAgIGlm
ICgheUluZGV4ICYmIG1fbnVtVGlsZXNZID4gMSkKKyAgICAgICAgcmV0dXJuIG1fbWF4VGV4dHVy
ZVNpemUgLSBtX2JvcmRlclRleGVsczsKKyAgICBpZiAoeUluZGV4IDwgbnVtVGlsZXNZKCkgLSAx
KQorICAgICAgICByZXR1cm4gbV9tYXhUZXh0dXJlU2l6ZSAtIDIgKiBtX2JvcmRlclRleGVsczsK
KyAgICBpZiAoeUluZGV4ID09IG51bVRpbGVzWSgpIC0gMSkKKyAgICAgICAgcmV0dXJuIG1fdG90
YWxTaXplWSAtIHRpbGVQb3NpdGlvblkoeUluZGV4KTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiAwOworfQorCitJbnRSZWN0IFRpbGluZ0RhdGE6Om92ZXJsYXBwZWRU
aWxlSW5kaWNlcyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0ICZzcmNSZWN0KSBjb25zdAoreworICAg
IGludCB4ID0gdGlsZVhJbmRleEZyb21TcmNDb29yZChzcmNSZWN0LngoKSk7CisgICAgaW50IHkg
PSB0aWxlWUluZGV4RnJvbVNyY0Nvb3JkKHNyY1JlY3QueSgpKTsKKyAgICBpbnQgciA9IHRpbGVY
SW5kZXhGcm9tU3JjQ29vcmQoc3JjUmVjdC5yaWdodCgpKTsKKyAgICBpbnQgYiA9IHRpbGVZSW5k
ZXhGcm9tU3JjQ29vcmQoc3JjUmVjdC5ib3R0b20oKSk7CisgICAgcmV0dXJuIEludFJlY3QoeCwg
eSwgci14LCBiLXkpOworfQorCitJbnRSZWN0IFRpbGluZ0RhdGE6Om92ZXJsYXBwZWRUaWxlSW5k
aWNlcyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QgJnNyY1JlY3QpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG92ZXJsYXBwZWRUaWxlSW5kaWNlcyhJbnRSZWN0KAorICAgICAgICBzdGF0aWNfY2FzdDxp
bnQ+KHNyY1JlY3QueCgpKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihzcmNSZWN0LnkoKSks
CisgICAgICAgIHN0YXRpY19jYXN0PGludD4oY2VpbChzcmNSZWN0LndpZHRoKCkpKSwKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50PihjZWlsKHNyY1JlY3QuaGVpZ2h0KCkpKSkpOworfQorCit2b2lk
IFRpbGluZ0RhdGE6OmludGVyc2VjdERyYXdRdWFkKGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBpbnQgdGlsZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRmxvYXRSZWN0JiBuZXdTcmMsIEZsb2F0UmVjdCYgbmV3RHN0KSBjb25z
dAoreworICAgIC8vIEludGVyc2VjdCB3aXRoIHRpbGUKKyAgICBGbG9hdFJlY3QgdGlsZUJvdW5k
cyA9IHRoaXMtPnRpbGVCb3VuZHModGlsZSk7CisgICAgRmxvYXRSZWN0IHNyY1JlY3RJbnRlcnNl
Y3RlZCA9IHNyY1JlY3Q7CisgICAgc3JjUmVjdEludGVyc2VjdGVkLmludGVyc2VjdCh0aWxlQm91
bmRzKTsKKworICAgIGlmIChzcmNSZWN0SW50ZXJzZWN0ZWQuaXNFbXB0eSgpKSB7CisgICAgICAg
IG5ld1NyYyA9IG5ld0RzdCA9IEZsb2F0UmVjdCgwLCAwLCAwLCAwKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGZsb2F0IHNyY1JlY3RJbnRlcnNlY3RlZE5vcm1YID0gKHNyY1JlY3RJ
bnRlcnNlY3RlZC54KCkgLSBzcmNSZWN0LngoKSkgLyBzcmNSZWN0LndpZHRoKCk7CisgICAgZmxv
YXQgc3JjUmVjdEludGVyc2VjdGVkTm9ybVkgPSAoc3JjUmVjdEludGVyc2VjdGVkLnkoKSAtIHNy
Y1JlY3QueSgpKSAvIHNyY1JlY3QuaGVpZ2h0KCk7CisgICAgZmxvYXQgc3JjUmVjdEludGVyc2Vj
dGVkTm9ybVcgPSBzcmNSZWN0SW50ZXJzZWN0ZWQud2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgoKTsK
KyAgICBmbG9hdCBzcmNSZWN0SW50ZXJzZWN0ZWROb3JtSCA9IHNyY1JlY3RJbnRlcnNlY3RlZC5o
ZWlnaHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCk7CisKKyAgICBuZXdTcmMgPSBzcmNSZWN0SW50ZXJz
ZWN0ZWQ7CisgICAgbmV3U3JjLm1vdmUoLXRpbGVCb3VuZHMueCgpLCAtdGlsZUJvdW5kcy55KCkp
OworICAgIGlmIChtX2JvcmRlclRleGVscykgeworICAgICAgICBpZiAodGlsZVhJbmRleCh0aWxl
KSA+IDApCisgICAgICAgICAgICBuZXdTcmMubW92ZSgxLCAwKTsKKyAgICAgICAgaWYgKHRpbGVZ
SW5kZXgodGlsZSkgPiAwKQorICAgICAgICAgICAgbmV3U3JjLm1vdmUoMCwgMSk7CisgICAgfQor
CisgICAgbmV3RHN0ID0gRmxvYXRSZWN0KAorICAgICAgICBzcmNSZWN0SW50ZXJzZWN0ZWROb3Jt
WCAqIGRzdFJlY3Qud2lkdGgoKSArIGRzdFJlY3QueCgpLAorICAgICAgICBzcmNSZWN0SW50ZXJz
ZWN0ZWROb3JtWSAqIGRzdFJlY3QuaGVpZ2h0KCkgKyBkc3RSZWN0LnkoKSwKKyAgICAgICAgc3Jj
UmVjdEludGVyc2VjdGVkTm9ybVcgKiBkc3RSZWN0LndpZHRoKCksCisgICAgICAgIHNyY1JlY3RJ
bnRlcnNlY3RlZE5vcm1IICogZHN0UmVjdC5oZWlnaHQoKSk7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsaW5nRGF0YS5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxpbmdEYXRhLmgKbmV3IGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJk
ODM5Y2Y5ODFmMGRiNzJmMThkYmUyNjM0MmYzNWUyODU3YWUxNAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsaW5nRGF0YS5oCkBAIC0wLDAg
KzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBUaWxpbmdEYXRhX2gKKyNkZWZpbmUgVGlsaW5nRGF0YV9oCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgSW50UmVjdDsKKwor
Y2xhc3MgVGlsaW5nRGF0YSB7CitwdWJsaWM6CisgICAgVGlsaW5nRGF0YShpbnQgbWF4VGV4dHVy
ZVNpemUsIGludCB0b3RhbFNpemVYLCBpbnQgdG90YWxTaXplWSwgYm9vbCBib3JkZXJUZXhlbHMp
OworICAgIGludCBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VGV4dHVyZVNp
emU7IH0KKyAgICBpbnQgdG90YWxTaXplWCgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxTaXplWDsg
fQorICAgIGludCB0b3RhbFNpemVZKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbFNpemVZOyB9CisK
KyAgICBpbnQgbnVtVGlsZXMoKSBjb25zdCB7IHJldHVybiBudW1UaWxlc1goKSAqIG51bVRpbGVz
WSgpOyB9CisgICAgaW50IG51bVRpbGVzWCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVGlsZXNYOyB9
CisgICAgaW50IG51bVRpbGVzWSgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVGlsZXNZOyB9CisgICAg
aW50IHRpbGVJbmRleChpbnQgeCwgaW50IHkpIGNvbnN0IHsgcmV0dXJuIHggKyB5ICogbnVtVGls
ZXNYKCk7IH0KKyAgICBpbnQgdGlsZVhJbmRleChpbnQgdGlsZSkgY29uc3QgeyBhc3NlcnRUaWxl
KHRpbGUpOyByZXR1cm4gdGlsZSAlIG51bVRpbGVzWCgpOyB9CisgICAgaW50IHRpbGVZSW5kZXgo
aW50IHRpbGUpIGNvbnN0IHsgYXNzZXJ0VGlsZSh0aWxlKTsgcmV0dXJuIHRpbGUgLyBudW1UaWxl
c1goKTsgfQorICAgIGludCB0aWxlWEluZGV4RnJvbVNyY0Nvb3JkKGludCkgY29uc3Q7CisgICAg
aW50IHRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoaW50KSBjb25zdDsKKworICAgIEludFJlY3QgdGls
ZUJvdW5kcyhpbnQgdGlsZSkgY29uc3Q7CisgICAgSW50UmVjdCB0aWxlQm91bmRzV2l0aEJvcmRl
cihpbnQgdGlsZSkgY29uc3Q7CisgICAgRmxvYXRSZWN0IHRpbGVCb3VuZHNOb3JtYWxpemVkKGlu
dCB0aWxlKSBjb25zdDsKKyAgICBpbnQgdGlsZVBvc2l0aW9uWChpbnQgeEluZGV4KSBjb25zdDsK
KyAgICBpbnQgdGlsZVBvc2l0aW9uWShpbnQgeUluZGV4KSBjb25zdDsKKyAgICBpbnQgdGlsZVNp
emVYKGludCB4SW5kZXgpIGNvbnN0OworICAgIGludCB0aWxlU2l6ZVkoaW50IHlJbmRleCkgY29u
c3Q7CisgICAgSW50UmVjdCBvdmVybGFwcGVkVGlsZUluZGljZXMoY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCkgY29uc3Q7CisgICAgSW50UmVjdCBvdmVybGFwcGVkVGlsZUluZGljZXMoY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKKworICAgIC8vIEdpdmVuIGEgc2V0IG9mIHNvdXJjZSBh
bmQgZGVzdGluYXRpb24gY29vcmRpbmF0ZXMgZm9yIGEgZHJhd2luZyBxdWFkCisgICAgLy8gaW4g
dGV4ZWwgdW5pdHMsIHJldHVybnMgYWRqdXN0ZWQgZGF0YSB0byByZW5kZXIganVzdCB0aGUgb25l
IHRpbGUuCisgICAgdm9pZCBpbnRlcnNlY3REcmF3UXVhZChjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgaW50IHRpbGUsIEZsb2F0UmVjdCYgbmV3U3Jj
LCBGbG9hdFJlY3QmIG5ld0RzdCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgVGlsaW5nRGF0YSgp
IDogbV9tYXhUZXh0dXJlU2l6ZSgwKSwgbV90b3RhbFNpemVYKDApLCBtX3RvdGFsU2l6ZVkoMCkg
e30KKyAgICB2b2lkIGFzc2VydFRpbGUoaW50IHRpbGUpIGNvbnN0IHsgQVNTRVJUKHRpbGUgPj0g
MCAmJiB0aWxlIDwgbnVtVGlsZXMoKSk7IH0KKworICAgIGludCBtX21heFRleHR1cmVTaXplOwor
ICAgIGludCBtX3RvdGFsU2l6ZVg7CisgICAgaW50IG1fdG90YWxTaXplWTsKKyAgICBpbnQgbV9i
b3JkZXJUZXhlbHM7CisKKyAgICAvLyBjb21wdXRlZCB2YWx1ZXM6CisgICAgaW50IG1fbnVtVGls
ZXNYOworICAgIGludCBtX251bVRpbGVzWTsKK307CisKK30KKworI2VuZGlmIC8vIFRpbGluZ0Rh
dGFfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tp
YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAppbmRl
eCAwMjRiZjUwZGMxMzMzYTIwYWEyZGFhZTFhYzdlNWE0ZjVlZWMwZTEwLi5iNTE0YjFhNmI2MWI1
ZDcwY2JkODc3Y2IzYjExNjRhM2JlMWQ1MTdiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VTa2lhLmNwcApAQCAtNDY1LDE4ICs0NjUsMTggQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwKICAgICBpZiAoIWJtKQogICAgICAgICByZXR1cm47ICAvLyBJdCdzIHRvbyBlYXJseSBhbmQg
d2UgZG9uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCiAKLSNpZiAgVVNFKEdMRVMyX1JFTkRFUklORykK
LSAgICBpZiAoY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpKSB7Ci0gICAgICAgIGRy
YXdCaXRtYXBHTEVTMihjdHh0LCBibSwgc3JjUmVjdCwgZHN0UmVjdCwgY29sb3JTcGFjZSwgY29t
cG9zaXRlT3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCiAgICAgRmxvYXRSZWN0
IG5vcm1Ec3RSZWN0ID0gbm9ybWFsaXplUmVjdChkc3RSZWN0KTsKICAgICBGbG9hdFJlY3Qgbm9y
bVNyY1JlY3QgPSBub3JtYWxpemVSZWN0KHNyY1JlY3QpOwogCiAgICAgaWYgKG5vcm1TcmNSZWN0
LmlzRW1wdHkoKSB8fCBub3JtRHN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsgIC8v
IE5vdGhpbmcgdG8gZHJhdy4KIAorI2lmICBVU0UoR0xFUzJfUkVOREVSSU5HKQorICAgIGlmIChj
dHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpIHsKKyAgICAgICAgZHJhd0JpdG1hcEdM
RVMyKGN0eHQsIGJtLCBub3JtU3JjUmVjdCwgbm9ybURzdFJlY3QsIGNvbG9yU3BhY2UsIGNvbXBv
c2l0ZU9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgogICAgIGN0eHQtPnBsYXRm
b3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CiAKICAgICBwYWludFNrQml0
bWFwKGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYjUyNDdkNWVkNjJl
MDk4MjU0NTI0MTMyMzY1MzI2MWVjNjY2ZGUxYi4uMWY4N2I3NTI5YmE2MTI4YmRkYjJhOWJmMDhk
MzdiOTE1NjZiN2NjMyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDgtMTEg
IFZpbmNlbnQgU2NoZWliICA8c2NoZWliQGNocm9taXVtLm9yZz4KKworICAgICAgICBDYW52YXMy
RCBkb2VzIG5vdCBzdXBwb3J0IGltYWdlcyBsYXJnZXIgdGhhbiBzeXN0ZW0ncyBHUFUgbWF4IHRl
eHR1cmUgc2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDM4NjQKKworICAgICAgICBVbml0IHRlc3RzIGZvciBUaWxpbmdEYXRhIGNsYXNzLgorCisg
ICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiB0ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTAtMDgtMTAgIEFhcm9uIEJv
b2RtYW4gIDxhYUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgSHlh
dHQuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCmluZGV4IDEyM2FlZDU5OGVjMWY4NTA3YmEyOGM4ZDE0Y2Y5NGU4NTNj
ZDcyNDEuLjgyZGRiZjY2ODY4OGU2NWQzZDQ4YjczMjYzZmZhNjFlODRiMGE4Y2YgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwCkBAIC03MDYsNiArNzA2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0
cy9LZXlib2FyZFRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9LVVJM
VGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1J1bkFsbFRlc3RzLmNw
cCcsCisgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwJywK
ICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMn
OiBbCiAgICAgICAgICAgICAgICAgICAgICAgICBbJ09TPT0id2luIicsIHsKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAgYi9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2MzU0MmJhNWQ2Mzg5OTFk
YjQ2NWUzMDUwYTc1MTZiYmNmYmFmYTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwCkBAIC0wLDAgKzEsMjIzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiR0xFUzJUZXh0dXJlLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rl
c3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK1RFU1Qo
VGlsaW5nRGF0YVRlc3QsIG51bVRpbGVzX05vVGlsaW5nKQoreworICAgIEVYUEVDVF9FUSgxLCBU
aWxpbmdEYXRhKDE2LCAxNiwgMTYsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEo
MSwgVGlsaW5nRGF0YSgxNiwgMTUsIDE1LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1Rf
RVEoMSwgVGlsaW5nRGF0YSgxNiwgMTYsIDE2LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBF
Q1RfRVEoMSwgVGlsaW5nRGF0YSgxNiwgIDEsIDE2LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAg
RVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMTUsIDE1LCAxNSwgdHJ1ZSkubnVtVGlsZXMoKSk7Cit9
CisKK1RFU1QoVGlsaW5nRGF0YVRlc3QsIG51bVRpbGVzX1RpbGluZ05vQm9yZGVycykKK3sKKyAg
ICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg0LCAgMSwgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsK
KyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg0LCAgMiwgIDQsIGZhbHNlKS5udW1UaWxlcygp
KTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg0LCAgMywgIDQsIGZhbHNlKS5udW1UaWxl
cygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg0LCAgNCwgIDQsIGZhbHNlKS5udW1U
aWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSg0LCAgNSwgIDQsIGZhbHNlKS5u
dW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSg0LCAgNiwgIDQsIGZhbHNl
KS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSg0LCAgNywgIDQsIGZh
bHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSg0LCAgOCwgIDQs
IGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg0LCAgOSwg
IDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg0LCAx
MCwgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg0
LCAxMSwgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdE
YXRhKDUsICAxLCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxp
bmdEYXRhKDUsICAyLCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBU
aWxpbmdEYXRhKDUsICAzLCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgx
LCBUaWxpbmdEYXRhKDUsICA0LCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9F
USgxLCBUaWxpbmdEYXRhKDUsICA1LCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVD
VF9FUSgyLCBUaWxpbmdEYXRhKDUsICA2LCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVY
UEVDVF9FUSgyLCBUaWxpbmdEYXRhKDUsICA3LCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAg
IEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDUsICA4LCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOwor
ICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDUsICA5LCAgNSwgZmFsc2UpLm51bVRpbGVzKCkp
OworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDUsIDEwLCAgNSwgZmFsc2UpLm51bVRpbGVz
KCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDUsIDExLCAgNSwgZmFsc2UpLm51bVRp
bGVzKCkpOworCisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMTYsIDE2LCAxNiwgZmFsc2Up
Lm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDE3LCAxNiwgMTYsIGZh
bHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSgxNSwgMTYsIDE2
LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoOCwgMTYs
IDE2LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDYsIFRpbGluZ0RhdGEoOCwg
MTcsIDE2LCBmYWxzZSkubnVtVGlsZXMoKSk7Cit9CisKK1RFU1QoVGlsaW5nRGF0YVRlc3QsIG51
bVRpbGVzX1RpbGluZ1dpdGhCb3JkZXJzKQoreworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRh
KDMsICAxLCAgMywgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0Rh
dGEoMywgIDIsICAzLCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5n
RGF0YSgzLCAgMywgIDMsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxp
bmdEYXRhKDMsICA0LCAgMywgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDMsIFRp
bGluZ0RhdGEoMywgIDUsICAzLCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoNCwg
VGlsaW5nRGF0YSgzLCAgNiwgIDMsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSg1
LCBUaWxpbmdEYXRhKDMsICA3LCAgMywgdHJ1ZSkubnVtVGlsZXMoKSk7CisKKyAgICBFWFBFQ1Rf
RVEoMSwgVGlsaW5nRGF0YSg0LCAgMSwgIDQsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVD
VF9FUSgxLCBUaWxpbmdEYXRhKDQsICAyLCAgNCwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQ
RUNUX0VRKDEsIFRpbGluZ0RhdGEoNCwgIDMsICA0LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBF
WFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg0LCAgNCwgIDQsIHRydWUpLm51bVRpbGVzKCkpOworICAg
IEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDQsICA1LCAgNCwgdHJ1ZSkubnVtVGlsZXMoKSk7Cisg
ICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNCwgIDYsICA0LCB0cnVlKS5udW1UaWxlcygpKTsK
KyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg0LCAgNywgIDQsIHRydWUpLm51bVRpbGVzKCkp
OworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDQsICA4LCAgNCwgdHJ1ZSkubnVtVGlsZXMo
KSk7CisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoNCwgIDksICA0LCB0cnVlKS5udW1UaWxl
cygpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSg0LCAxMCwgIDQsIHRydWUpLm51bVRp
bGVzKCkpOworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDQsIDExLCAgNCwgdHJ1ZSkubnVt
VGlsZXMoKSk7CisKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg1LCAgMSwgIDUsIHRydWUp
Lm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICAyLCAgNSwgdHJ1
ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoNSwgIDMsICA1LCB0
cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg1LCAgNCwgIDUs
IHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICA1LCAg
NSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNSwgIDYs
ICA1LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSg1LCAg
NywgIDUsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDUs
ICA4LCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEo
NSwgIDksICA1LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0
YSg1LCAxMCwgIDUsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdE
YXRhKDUsIDExLCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7Cit9CisKK1RFU1QoVGlsaW5nRGF0YVRl
c3QsIHRpbGVYSW5kZXhGcm9tU3JjQ29vcmQpCit7CisgICAgRVhQRUNUX0VRKDAsIFRpbGluZ0Rh
dGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCgwKSk7CisgICAgRVhQ
RUNUX0VRKDAsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmND
b29yZCgxKSk7CisgICAgRVhQRUNUX0VRKDAsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSku
dGlsZVhJbmRleEZyb21TcmNDb29yZCgyKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEo
MywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCgzKSk7CisgICAgRVhQRUNU
X0VRKDEsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29y
ZCg0KSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGls
ZVhJbmRleEZyb21TcmNDb29yZCg1KSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoMywg
MTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCg2KSk7CisgICAgRVhQRUNUX0VR
KDIsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCg3
KSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJ
bmRleEZyb21TcmNDb29yZCg4KSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoMywgMTAs
IDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCg5KSk7CisgICAgRVhQRUNUX0VRKDMs
IFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCgxMCkp
OworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVYSW5k
ZXhGcm9tU3JjQ29vcmQoMTEpKTsKKworICAgIEVYUEVDVF9FUSgwLCBUaWxpbmdEYXRhKDMsIDEw
LCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCgwKSk7CisgICAgRVhQRUNUX0VRKDAs
IFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDEpKTsK
KyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhG
cm9tU3JjQ29vcmQoMikpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwg
dHJ1ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCgzKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGlu
Z0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDQpKTsKKyAgICBF
WFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhGcm9tU3Jj
Q29vcmQoNSkpOworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSku
dGlsZVhJbmRleEZyb21TcmNDb29yZCg2KSk7CisgICAgRVhQRUNUX0VRKDYsIFRpbGluZ0RhdGEo
MywgMTAsIDEwLCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDcpKTsKKyAgICBFWFBFQ1Rf
RVEoNywgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQo
OCkpOworICAgIEVYUEVDVF9FUSg3LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJ
bmRleEZyb21TcmNDb29yZCg5KSk7CisgICAgRVhQRUNUX0VRKDcsIFRpbGluZ0RhdGEoMywgMTAs
IDEwLCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDEwKSk7CisgICAgRVhQRUNUX0VRKDcs
IFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDExKSk7
Cit9CitURVNUKFRpbGluZ0RhdGFUZXN0LCB0aWxlWUluZGV4RnJvbVNyY0Nvb3JkKQoreworICAg
IEVYUEVDVF9FUSgwLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9t
U3JjQ29vcmQoMCkpOworICAgIEVYUEVDVF9FUSgwLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFs
c2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoMSkpOworICAgIEVYUEVDVF9FUSgwLCBUaWxpbmdE
YXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoMikpOworICAgIEVY
UEVDVF9FUSgxLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3Jj
Q29vcmQoMykpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2Up
LnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoNCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRh
KDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoNSkpOworICAgIEVYUEVD
VF9FUSgyLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29v
cmQoNikpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRp
bGVZSW5kZXhGcm9tU3JjQ29vcmQoNykpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDMs
IDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoOCkpOworICAgIEVYUEVDVF9F
USgzLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQo
OSkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZ
SW5kZXhGcm9tU3JjQ29vcmQoMTApKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSgzLCAx
MCwgMTAsIGZhbHNlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDExKSk7CisKKyAgICBFWFBFQ1Rf
RVEoMCwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQo
MCkpOworICAgIEVYUEVDVF9FUSgwLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJ
bmRleEZyb21TcmNDb29yZCgxKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMywgMTAs
IDEwLCB0cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDIpKTsKKyAgICBFWFBFQ1RfRVEoMiwg
VGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoMykpOwor
ICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZy
b21TcmNDb29yZCg0KSk7CisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0
cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDUpKTsKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5n
RGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoNikpOworICAgIEVY
UEVDVF9FUSg2LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmND
b29yZCg3KSk7CisgICAgRVhQRUNUX0VRKDcsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50
aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDgpKTsKKyAgICBFWFBFQ1RfRVEoNywgVGlsaW5nRGF0YSgz
LCAxMCwgMTAsIHRydWUpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoOSkpOworICAgIEVYUEVDVF9F
USg3LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCgx
MCkpOworICAgIEVYUEVDVF9FUSg3LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJ
bmRleEZyb21TcmNDb29yZCgxMSkpOworfQorCitURVNUKFRpbGluZ0RhdGFUZXN0LCB0aWxlU2l6
ZVgpCit7CisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoNSwgIDUsICA1LCBmYWxzZSkudGls
ZVNpemVYKDApKTsKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSg1LCAgNSwgIDUsIHRydWUp
LnRpbGVTaXplWCgwKSk7CisKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSg1LCAgNiwgIDYs
IGZhbHNlKS50aWxlU2l6ZVgoMCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICA2
LCAgNiwgZmFsc2UpLnRpbGVTaXplWCgxKSk7CisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEo
NSwgIDYsICA2LCB0cnVlKS50aWxlU2l6ZVgoMCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdE
YXRhKDUsICA2LCAgNiwgdHJ1ZSkudGlsZVNpemVYKDEpKTsKKworICAgIEVYUEVDVF9FUSg1LCBU
aWxpbmdEYXRhKDUsICA4LCAgOCwgZmFsc2UpLnRpbGVTaXplWCgwKSk7CisgICAgRVhQRUNUX0VR
KDMsIFRpbGluZ0RhdGEoNSwgIDgsICA4LCBmYWxzZSkudGlsZVNpemVYKDEpKTsKKyAgICBFWFBF
Q1RfRVEoNCwgVGlsaW5nRGF0YSg1LCAgOCwgIDgsIHRydWUpLnRpbGVTaXplWCgwKSk7CisgICAg
RVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoNSwgIDgsICA4LCB0cnVlKS50aWxlU2l6ZVgoMSkpOwor
CisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoNSwgMTAsIDEwLCBmYWxzZSkudGlsZVNpemVY
KDApKTsKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSg1LCAxMCwgMTAsIGZhbHNlKS50aWxl
U2l6ZVgoMSkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDUsIDEwLCAxMCwgdHJ1ZSku
dGlsZVNpemVYKDApKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg1LCAxMCwgMTAsIHRy
dWUpLnRpbGVTaXplWCgxKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNSwgMTAsIDEw
LCB0cnVlKS50aWxlU2l6ZVgoMikpOworCisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoNSwg
MTEsIDExLCB0cnVlKS50aWxlU2l6ZVgoMikpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRh
KDUsIDEyLCAxMiwgdHJ1ZSkudGlsZVNpemVYKDIpKTsKK30KK1RFU1QoVGlsaW5nRGF0YVRlc3Qs
IHRpbGVTaXplWSkKK3sKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSg1LCAgNSwgIDUsIGZh
bHNlKS50aWxlU2l6ZVkoMCkpOworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUsICA1LCAg
NSwgdHJ1ZSkudGlsZVNpemVZKDApKTsKKworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUs
ICA2LCAgNiwgZmFsc2UpLnRpbGVTaXplWSgwKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0Rh
dGEoNSwgIDYsICA2LCBmYWxzZSkudGlsZVNpemVZKDEpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGls
aW5nRGF0YSg1LCAgNiwgIDYsIHRydWUpLnRpbGVTaXplWSgwKSk7CisgICAgRVhQRUNUX0VRKDIs
IFRpbGluZ0RhdGEoNSwgIDYsICA2LCB0cnVlKS50aWxlU2l6ZVkoMSkpOworCisgICAgRVhQRUNU
X0VRKDUsIFRpbGluZ0RhdGEoNSwgIDgsICA4LCBmYWxzZSkudGlsZVNpemVZKDApKTsKKyAgICBF
WFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg1LCAgOCwgIDgsIGZhbHNlKS50aWxlU2l6ZVkoMSkpOwor
ICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDUsICA4LCAgOCwgdHJ1ZSkudGlsZVNpemVZKDAp
KTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSg1LCAgOCwgIDgsIHRydWUpLnRpbGVTaXpl
WSgxKSk7CisKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSg1LCAxMCwgMTAsIGZhbHNlKS50
aWxlU2l6ZVkoMCkpOworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUsIDEwLCAxMCwgZmFs
c2UpLnRpbGVTaXplWSgxKSk7CisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoNSwgMTAsIDEw
LCB0cnVlKS50aWxlU2l6ZVkoMCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDUsIDEw
LCAxMCwgdHJ1ZSkudGlsZVNpemVZKDEpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg1
LCAxMCwgMTAsIHRydWUpLnRpbGVTaXplWSgyKSk7CisKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5n
RGF0YSg1LCAxMSwgMTEsIHRydWUpLnRpbGVTaXplWSgyKSk7CisgICAgRVhQRUNUX0VRKDMsIFRp
bGluZ0RhdGEoNSwgMTIsIDEyLCB0cnVlKS50aWxlU2l6ZVkoMikpOworfQorCit9IC8vIG5hbWVz
cGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64285</attachid>
            <date>2010-08-12 17:10:24 -0700</date>
            <delta_ts>2010-08-13 11:50:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43864-20100812171023.patch</filename>
            <type>text/plain</type>
            <size>41921</size>
            <attacher name="Vincent Scheib">scheib</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDczYThlZWNhYzNlMzAxYWU2ZjY3ZDE4NTJhM2FhYmM5NTBiZWUzNy4uNzkwYmFlZThmMGJhNDJl
MzVhOTgwYjQyZDZlZjk0MTk3MzMxOTIwMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMC0wOC0xMSAgVmlu
Y2VudCBTY2hlaWIgIDxzY2hlaWJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENhbnZhczJEIGRvZXMgbm90IHN1cHBvcnQgaW1h
Z2VzIGxhcmdlciB0aGFuIHN5c3RlbSdzIEdQVSBtYXggdGV4dHVyZSBzaXplCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mzg2NAorCisgICAgICAgIEEg
bmV3IGNsYXNzICJUaWxpbmdEYXRhIiBoYXMgYmVlbiBjcmVhdGVkIHRoYXQgcHJvdmlkZXMgbG9n
aWMgZm9yIAorICAgICAgICBzcGxpdHRpbmcgYSBsYXJnZSBpbWFnZSBpbnRvIGEgc2VyaWVzIG9m
IHNtYWxsZXIgdGlsZXMuCisgICAgICAgIAorICAgICAgICBHTEVTMlRleHR1cmUgYW5kIENMRVMy
Q2FudmFzIGFyZSBtb2RpZmllZCB0byB1c2UgdGhlIFRpbGluZ0RhdGEgdG8KKyAgICAgICAgc3Bs
aXQgaW1hZ2VzIG9uIHRleHR1cmUgdXBsb2FkIGFuZCByZW5kZXIgb25lIGxvZ2ljYWwgaW1hZ2Ug
YXMgbWFueSBzbWFsbGVyCisgICAgICAgIGltYWdlcy4KKworICAgICAgICBUaWxpbmdEYXRhIGlz
IHRlc3RlZCB2aWEgdW5pdCB0ZXN0cyBpbiBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsaW5nRGF0
YVRlc3QuY3BwCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dMRVMyQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4
dHVyZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRS
ZWN0VGlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52
YXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZU51bVRpbGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGluZ0RhdGE6OlRpbGluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0
YTo6dGlsZVhJbmRleEZyb21TcmNDb29yZCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRh
Ojp0aWxlWUluZGV4RnJvbVNyY0Nvb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6
OnRpbGVCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZUJvdW5kc1dp
dGhCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZUJvdW5kc05vcm1h
bGl6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZVBvc2l0aW9uWCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxlUG9zaXRpb25ZKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGluZ0RhdGE6OnRpbGVTaXplWCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdE
YXRhOjp0aWxlU2l6ZVkpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6b3ZlcmxhcHBl
ZFRpbGVJbmRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OmludGVyc2VjdERy
YXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyVGV4dHVyZTo6R0xFUzJUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdMRVMyVGV4dHVyZTo6fkdMRVMyVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3B5
U3ViUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OmxvYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6R0xFUzJUZXh0dXJlOjpiaW5kVGlsZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmg6CisgICAgICAgIChXZWJDb3JlOjpUaWxp
bmdEYXRhOjptYXhUZXh0dXJlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0
b3RhbFNpemVYKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OnRvdGFsU2l6ZVkpOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6bnVtVGlsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6VGlsaW5nRGF0YTo6bnVtVGlsZXNYKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6
Om51bVRpbGVzWSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxlSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZVhJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxpbmdEYXRhOjp0aWxlWUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0Rh
dGE6OlRpbGluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6YXNzZXJ0VGls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OnRpbGVzKToKKwogMjAxMC0wOC0x
MiAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQg
c29ydCBvZiBYQ29kZSBwcm9qZWN0IGZpbGUuCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDRiZjYyZDNlMzZjNjA5MDQ1NDJlZDU4
ZGQ2OTk3ZjAxNWZiYjMyZDYuLjI1NGU5Mzg3MGQ2ZDYzNjg3NGViZGRhYmFjMzE5ZDQyOWU0MjJh
NDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCkBAIC0yMjMwLDYgKzIyMzAsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1BsYXRmb3JtSWNvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51eC5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGluZ0RhdGEuaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsaW5nRGF0YS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zZm9ybUxheWVyQ2hy
b21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFu
c2Zvcm1MYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAppbmRleCA4YTliZGUxZjhmYzY0NDZlM2My
MDQ5OTE1NGIwNTI0Yjg2MWE5MmI1Li41MzRkZTdiM2Q5NzEwOTIzMWEwNDM0NTYyY2VkMmYzYmZi
NzJhMzgzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dM
RVMyQ2FudmFzLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dM
RVMyQ2FudmFzLmNwcApAQCAtMzgsMTQgKzM4LDE1IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CiAjaW5jbHVkZSAiR0xFUzJUZXh0dXJlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNp
bmNsdWRlICJVaW50MTZBcnJheS5oIgogCiAjZGVmaW5lIF9VU0VfTUFUSF9ERUZJTkVTCiAjaW5j
bHVkZSA8bWF0aC5oPgogCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUg
PHd0Zi9Pd25BcnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yMjEsNyArMjIyLDYgQEAgdm9pZCBHTEVTMkNhbnZhczo6
ZHJhd1RleHR1cmVkUmVjdChHTEVTMlRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmUKICAgICBjaGVja0dMRXJyb3IoImdsVXNlUHJvZ3JhbSIpOwogCiAgICAgbV9jb250ZXh0
LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7Ci0gICAgdGV4dHVy
ZS0+YmluZCgpOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMWkobV90ZXhTYW1wbGVyTG9jYXRp
b24sIDApOwogICAgIGNoZWNrR0xFcnJvcigiZ2xVbmlmb3JtMWkiKTsKQEAgLTIyOSwyOCArMjI5
LDUyIEBAIHZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QoR0xFUzJUZXh0dXJlKiB0
ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYo
bV90ZXhBbHBoYUxvY2F0aW9uLCBhbHBoYSk7CiAgICAgY2hlY2tHTEVycm9yKCJnbFVuaWZvcm0x
ZiBmb3IgYWxwaGEiKTsKIAorICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihtX3Rl
eFBvc2l0aW9uTG9jYXRpb24sIDMsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAs
IDApOworCisgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3RleFBvc2l0
aW9uTG9jYXRpb24pOworCisgICAgY29uc3QgVGlsaW5nRGF0YSYgdGlsZXMgPSB0ZXh0dXJlLT50
aWxlcygpOworICAgIEludFJlY3QgdGlsZUlkeFJlY3QgPSB0aWxlcy5vdmVybGFwcGVkVGlsZUlu
ZGljZXMoc3JjUmVjdCk7CisKKyAgICBmb3IgKGludCB5ID0gdGlsZUlkeFJlY3QueSgpOyB5IDw9
IHRpbGVJZHhSZWN0LmJvdHRvbSgpOyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IHRpbGVJ
ZHhSZWN0LngoKTsgeCA8PSB0aWxlSWR4UmVjdC5yaWdodCgpOyB4KyspCisgICAgICAgICAgICBk
cmF3VGV4dHVyZWRSZWN0VGlsZSh0ZXh0dXJlLCB0aWxlcy50aWxlSW5kZXgoeCwgeSksIHNyY1Jl
Y3QsIGRzdFJlY3QsIHRyYW5zZm9ybSk7CisgICAgfQorfQorCit2b2lkIEdMRVMyQ2FudmFzOjpk
cmF3VGV4dHVyZWRSZWN0VGlsZShHTEVTMlRleHR1cmUqIHRleHR1cmUsIGludCB0aWxlLCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7CisgICAgaWYgKGRzdFJlY3QuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBUaWxpbmdEYXRhJiB0aWxlcyA9IHRleHR1cmUt
PnRpbGVzKCk7CisKKyAgICB0ZXh0dXJlLT5iaW5kVGlsZSh0aWxlKTsKKworICAgIEZsb2F0UmVj
dCBzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlOworICAgIEZsb2F0UmVjdCBkc3RSZWN0SW50ZXJz
ZWN0ZWQ7CisgICAgdGlsZXMuaW50ZXJzZWN0RHJhd1F1YWQoc3JjUmVjdCwgZHN0UmVjdCwgdGls
ZSwgJnNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2UsICZkc3RSZWN0SW50ZXJzZWN0ZWQpOworCisg
ICAgSW50UmVjdCB0aWxlQm91bmRzV2l0aEJvcmRlciA9IHRpbGVzLnRpbGVCb3VuZHNXaXRoQm9y
ZGVyKHRpbGUpOworCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeChtX2ZsaXBNYXRyaXgpOwog
ICAgIG1hdHJpeC5tdWx0TGVmdCh0cmFuc2Zvcm0pOwotICAgIG1hdHJpeC50cmFuc2xhdGUoZHN0
UmVjdC54KCksIGRzdFJlY3QueSgpKTsKLSAgICBtYXRyaXguc2NhbGUoZHN0UmVjdC53aWR0aCgp
LCBkc3RSZWN0LmhlaWdodCgpKTsKKyAgICBtYXRyaXgudHJhbnNsYXRlKGRzdFJlY3RJbnRlcnNl
Y3RlZC54KCksIGRzdFJlY3RJbnRlcnNlY3RlZC55KCkpOworICAgIG1hdHJpeC5zY2FsZShkc3RS
ZWN0SW50ZXJzZWN0ZWQud2lkdGgoKSwgZHN0UmVjdEludGVyc2VjdGVkLmhlaWdodCgpKTsKICAg
ICBmbG9hdCBtYXRbOV07CiAgICAgYWZmaW5lVG8zeDMobWF0cml4LCBtYXQpOwogICAgIG1fY29u
dGV4dC0+dW5pZm9ybU1hdHJpeDNmdihtX3RleE1hdHJpeExvY2F0aW9uLCBmYWxzZSAvKnRyYW5z
cG9zZSovLCBtYXQsIDEgLypjb3VudCovKTsKICAgICBjaGVja0dMRXJyb3IoImdsVW5pZm9ybU1h
dHJpeDNmdiIpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHRleE1hdHJpeDsKLSAgICB0ZXhNYXRy
aXguc2NhbGUoMS4wZiAvIHRleHR1cmUtPndpZHRoKCksIDEuMGYgLyB0ZXh0dXJlLT5oZWlnaHQo
KSk7Ci0gICAgdGV4TWF0cml4LnRyYW5zbGF0ZShzcmNSZWN0LngoKSwgc3JjUmVjdC55KCkpOwot
ICAgIHRleE1hdHJpeC5zY2FsZShzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCkpOwor
ICAgIHRleE1hdHJpeC5zY2FsZSgxLjBmIC8gdGlsZUJvdW5kc1dpdGhCb3JkZXIud2lkdGgoKSwg
MS4wZiAvIHRpbGVCb3VuZHNXaXRoQm9yZGVyLmhlaWdodCgpKTsKKyAgICB0ZXhNYXRyaXgudHJh
bnNsYXRlKHNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2UueCgpLCBzcmNSZWN0Q2xpcHBlZEluVGls
ZVNwYWNlLnkoKSk7CisgICAgdGV4TWF0cml4LnNjYWxlKHNyY1JlY3RDbGlwcGVkSW5UaWxlU3Bh
Y2Uud2lkdGgoKSwgc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZS5oZWlnaHQoKSk7CiAgICAgZmxv
YXQgdGV4TWF0WzldOwogICAgIGFmZmluZVRvM3gzKHRleE1hdHJpeCwgdGV4TWF0KTsKICAgICBt
X2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobV90ZXhUZXhNYXRyaXhMb2NhdGlvbiwgZmFsc2Ug
Lyp0cmFuc3Bvc2UqLywgdGV4TWF0LCAxIC8qY291bnQqLyk7CiAgICAgY2hlY2tHTEVycm9yKCJn
bFVuaWZvcm1NYXRyaXgzZnYiKTsKIAotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRl
cihtX3RleFBvc2l0aW9uTG9jYXRpb24sIDMsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFs
c2UsIDAsIDApOwotCi0gICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3Rl
eFBvc2l0aW9uTG9jYXRpb24pOwotCiAgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgNiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NI
T1JULCAwKTsKICAgICBjaGVja0dMRXJyb3IoImdsRHJhd0VsZW1lbnRzIik7CiB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgKaW5kZXggY2Vh
OTBhZWFhYmIyNjE0N2YxZjI0MzI2NzE4MDkyNWNjOGFhNzMzYy4uMGFkMDdmY2RiZmVkOTlhZDZl
Y2Q3ZTU3NDYwMDFmYmJhZGFmYmU3YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaApAQCAtODEsNiArODEsNyBAQCBwdWJsaWM6CiAgICAg
R0xFUzJUZXh0dXJlKiBnZXRUZXh0dXJlKE5hdGl2ZUltYWdlUHRyKTsKIAogcHJpdmF0ZToKKyAg
ICB2b2lkIGRyYXdUZXh0dXJlZFJlY3RUaWxlKEdMRVMyVGV4dHVyZSogdGV4dHVyZSwgaW50IHRp
bGUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKICAgICB2b2lkIGFwcGx5Q29tcG9zaXRlT3BlcmF0b3Io
Q29tcG9zaXRlT3BlcmF0b3IpOwogICAgIHZvaWQgY2hlY2tHTEVycm9yKGNvbnN0IGNoYXIqIGhl
YWRlcik7CiAgICAgdW5zaWduZWQgZ2V0UXVhZFZlcnRpY2VzKCk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5jcHAKaW5kZXggNWU4YTE0
MWRkMjgyZjI5NDQxM2E4NTFmMTI0YmE4MGRmN2ZkMWQ0MC4uN2EyY2FkMzc3MmQyMzQ5NmFlZjM0
OTY0MmM1OWNmNzgxYWMzN2E1NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HTEVTMlRleHR1cmUuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmNwcApAQCAtMzUsNDIgKzM1LDYwIEBACiAjaW5jbHVk
ZSAiR0xFUzJUZXh0dXJlLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCisj
aW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUdMRVMyVGV4dHVyZTo6R0xFUzJUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIEZvcm1hdCBmb3JtYXQsIGludCB3
aWR0aCwgaW50IGhlaWdodCkKKworR0xFUzJUZXh0dXJlOjpHTEVTMlRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIFBhc3NPd25QdHI8VmVjdG9yPHVuc2lnbmVkIGludD4+IHRpbGVU
ZXh0dXJlSWRzLCBGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXhU
ZXh0dXJlU2l6ZSkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV90ZXh0dXJlSWQo
dGV4dHVyZUlkKQogICAgICwgbV9mb3JtYXQoZm9ybWF0KQotICAgICwgbV93aWR0aCh3aWR0aCkK
LSAgICAsIG1faGVpZ2h0KGhlaWdodCkKKyAgICAsIG1fdGlsZXMobWF4VGV4dHVyZVNpemUsIHdp
ZHRoLCBoZWlnaHQsIHRydWUpCisgICAgLCBtX3RpbGVUZXh0dXJlSWRzKHRpbGVUZXh0dXJlSWRz
KQogewogfQogCiBHTEVTMlRleHR1cmU6On5HTEVTMlRleHR1cmUoKQogewotICAgIG1fY29udGV4
dC0+ZGVsZXRlVGV4dHVyZShtX3RleHR1cmVJZCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBtX3RpbGVUZXh0dXJlSWRzLT5zaXplKCk7IGkrKykKKyAgICAgICAgbV9jb250ZXh0
LT5kZWxldGVUZXh0dXJlKG1fdGlsZVRleHR1cmVJZHMtPmF0KGkpKTsKIH0KIAogUGFzc1JlZlB0
cjxHTEVTMlRleHR1cmU+IEdMRVMyVGV4dHVyZTo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7Ci0gICAgaW50
IG1heDsKLSAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RF
WFRVUkVfU0laRSwgJm1heCk7Ci0gICAgaWYgKHdpZHRoID4gbWF4IHx8IGhlaWdodCA+IG1heCkg
ewotICAgICAgICBBU1NFUlQoISJ0ZXh0dXJlIHRvbyBiaWciKTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQorICAgIGludCBtYXhUZXh0dXJlU2l6ZSA9IDA7CisgICAgY29udGV4dC0+Z2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtYXhUZXh0dXJlU2l6
ZSk7CiAKLSAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7
Ci0gICAgaWYgKCF0ZXh0dXJlSWQpCi0gICAgICAgIHJldHVybiAwOworICAgIFRpbGluZ0RhdGEg
dGlsaW5nKG1heFRleHR1cmVTaXplLCB3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKKyAgICBpbnQgbnVt
VGlsZXMgPSB0aWxpbmcubnVtVGlsZXMoKTsKIAotICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpOwotICAgIGNvbnRleHQtPnRl
eEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOworICAgIFBhc3NPd25QdHI8VmVjdG9y
PHVuc2lnbmVkIGludD4+IHRleHR1cmVJZHMgPSBuZXcgVmVjdG9yPHVuc2lnbmVkIGludD4obnVt
VGlsZXMpOworICAgIHRleHR1cmVJZHMtPmZpbGwoMCwgbnVtVGlsZXMpOwogCi0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBHTEVTMlRleHR1cmUoY29udGV4dCwgdGV4dHVyZUlkLCBmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVRpbGVzOyBpKyspIHsK
KyAgICAgICAgaW50IHRleHR1cmVJZCA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKKyAgICAg
ICAgaWYgKCF0ZXh0dXJlSWQpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
VGlsZXM7IGkrKykKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVUZXh0dXJlKHRleHR1
cmVJZHMtPmF0KGkpKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAg
IHRleHR1cmVJZHMtPmF0KGkpID0gdGV4dHVyZUlkOworCisgICAgICAgIEludFJlY3QgdGlsZUJv
dW5kc1dpdGhCb3JkZXIgPSB0aWxpbmcudGlsZUJvdW5kc1dpdGhCb3JkZXIoaSk7CisKKyAgICAg
ICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRl
eHR1cmVJZCk7CisgICAgICAgIGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEsCisgICAgICAgICAgICB0aWxlQm91bmRzV2l0aEJvcmRlci53aWR0aCgpLAorICAg
ICAgICAgICAgdGlsZUJvdW5kc1dpdGhCb3JkZXIuaGVpZ2h0KCksCisgICAgICAgICAgICAwLAor
ICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsCisgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwKKyAgICAgICAgICAgIDApOworICAgIH0KKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEdMRVMyVGV4dHVyZShjb250ZXh0LCB0ZXh0dXJlSWRzLCBmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIG1heFRleHR1cmVTaXplKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNv
bnZlcnRGb3JtYXQoR0xFUzJUZXh0dXJlOjpGb3JtYXQgZm9ybWF0LCB1bnNpZ25lZCBpbnQqIGds
Rm9ybWF0LCB1bnNpZ25lZCBpbnQqIGdsVHlwZSwgYm9vbCogc3dpenpsZSkKQEAgLTk0LDMxICsx
MTIsNjUgQEAgc3RhdGljIHZvaWQgY29udmVydEZvcm1hdChHTEVTMlRleHR1cmU6OkZvcm1hdCBm
b3JtYXQsIHVuc2lnbmVkIGludCogZ2xGb3JtYXQsIHUKICAgICB9CiB9CiAKK3RlbXBsYXRlIDxi
b29sIHN3aXp6bGU+CitzdGF0aWMgdWludDMyX3QqIGNvcHlTdWJSZWN0KHVpbnQzMl90KiBzcmMs
IGludCBzcmNYLCBpbnQgc3JjWSwgdWludDMyX3QqIGRzdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBpbnQgc3JjU3RyaWRlKQoreworICAgIHVpbnQzMl90KiBzcmNPZmZzZXQgPSBzcmMgKyBzcmNY
ICsgc3JjWSAqIHNyY1N0cmlkZTsKKworICAgIGlmICghc3dpenpsZSAmJiB3aWR0aCA9PSBzcmNT
dHJpZGUpCisgICAgICAgIHJldHVybiBzcmNPZmZzZXQ7CisKKyAgICB1aW50MzJfdCogZHN0UGl4
ZWwgPSBkc3Q7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoIDsgeCsrKSB7CisgICAgICAgICAgICB1aW50MzJf
dCBwaXhlbCA9IHNyY09mZnNldFt4ICsgeSAqIHNyY1N0cmlkZV07CisgICAgICAgICAgICBpZiAo
c3dpenpsZSkKKyAgICAgICAgICAgICAgICAqZHN0UGl4ZWwgPSBwaXhlbCAmIDB4RkYwMEZGMDAg
fCAoKHBpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTYpIHwgKChwaXhlbCAmIDB4MDAwMDAwRkYpIDw8
IDE2KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqZHN0UGl4ZWwgPSBwaXhl
bDsKKyAgICAgICAgICAgIGRzdFBpeGVsKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IGRzdDsKK30KKwogdm9pZCBHTEVTMlRleHR1cmU6OmxvYWQodm9pZCogcGl4ZWxzKQogeworICAg
IHVpbnQzMl90KiBwaXhlbHMzMiA9IHN0YXRpY19jYXN0PHVpbnQzMl90Kj4ocGl4ZWxzKTsKICAg
ICB1bnNpZ25lZCBpbnQgZ2xGb3JtYXQsIGdsVHlwZTsKICAgICBib29sIHN3aXp6bGU7CiAgICAg
Y29udmVydEZvcm1hdChtX2Zvcm1hdCwgJmdsRm9ybWF0LCAmZ2xUeXBlLCAmc3dpenpsZSk7Ci0g
ICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
bV90ZXh0dXJlSWQpOwogICAgIGlmIChzd2l6emxlKSB7CiAgICAgICAgIEFTU0VSVChnbEZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBnbFR5cGUgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUpOwogICAgICAgICAvLyBGSVhNRTogIFRoaXMgY291bGQgdXNlIFBC
TydzIHRvIHNhdmUgZG9pbmcgYW4gZXh0cmEgY29weSBoZXJlLgotICAgICAgICBpbnQgc2l6ZSA9
IG1fd2lkdGggKiBtX2hlaWdodDsKLSAgICAgICAgdW5zaWduZWQqIHBpeGVsczMyID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQqPihwaXhlbHMpOwotICAgICAgICBPd25BcnJheVB0cjx1bnNpZ25lZD4g
YnVmKG5ldyB1bnNpZ25lZFtzaXplXSk7Ci0gICAgICAgIHVuc2lnbmVkKiBidWZwdHIgPSBidWYu
Z2V0KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBwaXhlbCA9IHBpeGVsczMyW2ldOwotICAgICAgICAgICAgYnVmcHRyW2ld
ID0gcGl4ZWwgJiAweEZGMDBGRjAwIHwgKChwaXhlbCAmIDB4MDBGRjAwMDApID4+IDE2KSB8ICgo
cGl4ZWwgJiAweDAwMDAwMEZGKSA8PCAxNik7CisgICAgfQorICAgIE93bkFycmF5UHRyPHVpbnQz
Ml90PiB0ZW1wQnVmZiA9IAorICAgICAgICBPd25BcnJheVB0cjx1aW50MzJfdD4obmV3IHVpbnQz
Ml90W21fdGlsZXMubWF4VGV4dHVyZVNpemUoKSAqIG1fdGlsZXMubWF4VGV4dHVyZVNpemUoKV0p
OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3RpbGVzLm51bVRpbGVzKCk7IGkrKykgewor
ICAgICAgICBJbnRSZWN0IHRpbGVCb3VuZHNXaXRoQm9yZGVyID0gbV90aWxlcy50aWxlQm91bmRz
V2l0aEJvcmRlcihpKTsKKworICAgICAgICB1aW50MzJfdCogdXBsb2FkQnVmZiA9IDA7CisgICAg
ICAgIGlmIChzd2l6emxlKSB7CisgICAgICAgICAgICB1cGxvYWRCdWZmID0gY29weVN1YlJlY3Q8
dHJ1ZT4oCisgICAgICAgICAgICBwaXhlbHMzMiwgdGlsZUJvdW5kc1dpdGhCb3JkZXIueCgpLCB0
aWxlQm91bmRzV2l0aEJvcmRlci55KCksCisgICAgICAgICAgICB0ZW1wQnVmZi5nZXQoKSwgdGls
ZUJvdW5kc1dpdGhCb3JkZXIud2lkdGgoKSwgdGlsZUJvdW5kc1dpdGhCb3JkZXIuaGVpZ2h0KCks
IG1fdGlsZXMudG90YWxTaXplWCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHVw
bG9hZEJ1ZmYgPSBjb3B5U3ViUmVjdDxmYWxzZT4oCisgICAgICAgICAgICBwaXhlbHMzMiwgdGls
ZUJvdW5kc1dpdGhCb3JkZXIueCgpLCB0aWxlQm91bmRzV2l0aEJvcmRlci55KCksCisgICAgICAg
ICAgICB0ZW1wQnVmZi5nZXQoKSwgdGlsZUJvdW5kc1dpdGhCb3JkZXIud2lkdGgoKSwgdGlsZUJv
dW5kc1dpdGhCb3JkZXIuaGVpZ2h0KCksIG1fdGlsZXMudG90YWxTaXplWCgpKTsKICAgICAgICAg
fQotICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIDAsIDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBi
dWYuZ2V0KCkpOwotICAgIH0gZWxzZQotICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0
LCBnbEZvcm1hdCwgZ2xUeXBlLCBwaXhlbHMpOworCisgICAgICAgIG1fY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGlsZVRleHR1cmVJZHMtPmF0
KGkpKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCAwLCAwLCAwLAorICAgICAgICAgICAgdGlsZUJvdW5kc1dpdGhCb3JkZXIu
d2lkdGgoKSwKKyAgICAgICAgICAgIHRpbGVCb3VuZHNXaXRoQm9yZGVyLmhlaWdodCgpLCBnbEZv
cm1hdCwgZ2xUeXBlLCB1cGxvYWRCdWZmKTsKKyAgICB9CiB9CiAKLXZvaWQgR0xFUzJUZXh0dXJl
OjpiaW5kKCkKK3ZvaWQgR0xFUzJUZXh0dXJlOjpiaW5kVGlsZShpbnQgdGlsZSkKIHsKLSAgICBt
X2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3Rl
eHR1cmVJZCk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgbV90aWxlVGV4dHVyZUlkcy0+YXQodGlsZSkpOwogICAgIG1fY29udGV4dC0+
dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CiAg
ICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQz
RDo6TElORUFSKTsKICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmgKaW5kZXggNGQzNTFjZGQzN2Q5ZTE5ZGY1ZjQ4
YmI5NGJlZDQ3NzNiNjgwZWQ4Yy4uM2EwMWI5YzI5ZjY1NjY2M2RlODc2OTEyYTBlNmZjZDk1Yzll
YzQ4YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVT
MlRleHR1cmUuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMy
VGV4dHVyZS5oCkBAIC0zNSw2ICszNSwxMCBAQAogCiAjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgog
I2luY2x1ZGUgIlJlZlB0ci5oIgorI2luY2x1ZGUgIlRpbGluZ0RhdGEuaCIKKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNE
OwpAQCAtNDQsMTggKzQ4LDE2IEBAIHB1YmxpYzoKICAgICB+R0xFUzJUZXh0dXJlKCk7CiAgICAg
ZW51bSBGb3JtYXQgeyBSR0JBOCwgQkdSQTggfTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHTEVT
MlRleHR1cmU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCosIEZvcm1hdCwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KTsKLSAgICB2b2lkIGJpbmQoKTsKKyAgICB2b2lkIGJpbmRUaWxlKGludCB0aWxl
KTsKICAgICB2b2lkIGxvYWQodm9pZCogcGl4ZWxzKTsKICAgICBGb3JtYXQgZm9ybWF0KCkgY29u
c3QgeyByZXR1cm4gbV9mb3JtYXQ7IH0KLSAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X3dpZHRoOyB9Ci0gICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9Cisg
ICAgY29uc3QgVGlsaW5nRGF0YSYgdGlsZXMoKSBjb25zdCB7IHJldHVybiBtX3RpbGVzOyB9CiBw
cml2YXRlOgotICAgIEdMRVMyVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHRl
eHR1cmVJZCwgRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIEdMRVMyVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRCosIFBhc3NPd25QdHI8VmVjdG9yPHVuc2lnbmVkIGludD4+IHRp
bGVUZXh0dXJlSWRzLCBGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBt
YXhUZXh0dXJlU2l6ZSk7CiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLSAgICB1
bnNpZ25lZCBtX3RleHR1cmVJZDsKICAgICBGb3JtYXQgbV9mb3JtYXQ7Ci0gICAgaW50IG1fd2lk
dGg7Ci0gICAgaW50IG1faGVpZ2h0OworICAgIFRpbGluZ0RhdGEgbV90aWxlczsKKyAgICBPd25Q
dHI8VmVjdG9yPHVuc2lnbmVkIGludD4+IG1fdGlsZVRleHR1cmVJZHM7CiB9OwogCiB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGluZ0RhdGEuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxpbmdEYXRhLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mMzQyZTYxMjFjZmU0NWFmNzdhNTY4MTQ0ZmMzYWIyYWRjOGQwNmY0Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxpbmdEYXRh
LmNwcApAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGls
aW5nRGF0YS5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5o
IgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW50IGNvbXB1dGVOdW1UaWxlcyhpbnQgbWF4VGV4dHVy
ZVNpemUsIGludCB0b3RhbFNpemUsIGJvb2wgYm9yZGVyVGV4ZWxzKQoreworICAgIHJldHVybiBt
YXgoMSwgMSArICh0b3RhbFNpemUgLSAxIC0gMiAqIGJvcmRlclRleGVscykgLyAobWF4VGV4dHVy
ZVNpemUgLSAyICogYm9yZGVyVGV4ZWxzKSk7Cit9CisKK1RpbGluZ0RhdGE6OlRpbGluZ0RhdGEo
aW50IG1heFRleHR1cmVTaXplLCBpbnQgdG90YWxTaXplWCwgaW50IHRvdGFsU2l6ZVksIGJvb2wg
Ym9yZGVyVGV4ZWxzKQorICAgIDogbV9tYXhUZXh0dXJlU2l6ZShtYXhUZXh0dXJlU2l6ZSkKKyAg
ICAsIG1fdG90YWxTaXplWCh0b3RhbFNpemVYKQorICAgICwgbV90b3RhbFNpemVZKHRvdGFsU2l6
ZVkpCisgICAgLCBtX2JvcmRlclRleGVscyhib3JkZXJUZXhlbHMpCit7CisgICAgbV9udW1UaWxl
c1ggPSBjb21wdXRlTnVtVGlsZXMobWF4VGV4dHVyZVNpemUsIG1fdG90YWxTaXplWCwgbV9ib3Jk
ZXJUZXhlbHMpOworICAgIG1fbnVtVGlsZXNZID0gY29tcHV0ZU51bVRpbGVzKG1heFRleHR1cmVT
aXplLCBtX3RvdGFsU2l6ZVksIG1fYm9yZGVyVGV4ZWxzKTsKK30KKworaW50IFRpbGluZ0RhdGE6
OnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoaW50IHNyY1BvcykgY29uc3QKK3sKKyAgICBpbnQgeCA9
IChzcmNQb3MgLSBtX2JvcmRlclRleGVscykgLyAobV9tYXhUZXh0dXJlU2l6ZSAtIDIgKiBtX2Jv
cmRlclRleGVscyk7CisgICAgcmV0dXJuIG1pbihtYXgoeCwgMCksIG51bVRpbGVzWCgpLTEpOwor
fQorCitpbnQgVGlsaW5nRGF0YTo6dGlsZVlJbmRleEZyb21TcmNDb29yZChpbnQgc3JjUG9zKSBj
b25zdAoreworICAgIGludCB5ID0gKHNyY1BvcyAtIG1fYm9yZGVyVGV4ZWxzKSAvIChtX21heFRl
eHR1cmVTaXplIC0gMiAqIG1fYm9yZGVyVGV4ZWxzKTsKKyAgICByZXR1cm4gbWluKG1heCh5LCAw
KSwgbnVtVGlsZXNZKCktMSk7Cit9CisKK0ludFJlY3QgVGlsaW5nRGF0YTo6dGlsZUJvdW5kcyhp
bnQgdGlsZSkgY29uc3QKK3sKKyAgICBhc3NlcnRUaWxlKHRpbGUpOworICAgIGludCBpeCA9IHRp
bGVYSW5kZXgodGlsZSk7CisgICAgaW50IGl5ID0gdGlsZVlJbmRleCh0aWxlKTsKKyAgICBpbnQg
eCA9IHRpbGVQb3NpdGlvblgoaXgpOworICAgIGludCB5ID0gdGlsZVBvc2l0aW9uWShpeSk7Cisg
ICAgaW50IHdpZHRoID0gdGlsZVNpemVYKGl4KTsKKyAgICBpbnQgaGVpZ2h0ID0gdGlsZVNpemVZ
KGl5KTsKKyAgICBBU1NFUlQoeCA+PSAwICYmIHkgPj0gMCAmJiB3aWR0aCA+PSAwICYmIGhlaWdo
dCA+PSAwKTsKKyAgICBBU1NFUlQoeCA8PSB0b3RhbFNpemVYKCkgJiYgeSA8PSB0b3RhbFNpemVZ
KCkpOworICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCitJbnRS
ZWN0IFRpbGluZ0RhdGE6OnRpbGVCb3VuZHNXaXRoQm9yZGVyKGludCB0aWxlKSBjb25zdAorewor
ICAgIEludFJlY3QgYm91bmRzID0gdGlsZUJvdW5kcyh0aWxlKTsKKworICAgIGlmIChtX2JvcmRl
clRleGVscykgeworICAgICAgICBpbnQgeDEgPSBib3VuZHMueCgpOworICAgICAgICBpbnQgeDIg
PSBib3VuZHMucmlnaHQoKTsKKyAgICAgICAgaW50IHkxID0gYm91bmRzLnkoKTsKKyAgICAgICAg
aW50IHkyID0gYm91bmRzLmJvdHRvbSgpOworCisgICAgICAgIGlmICh0aWxlWEluZGV4KHRpbGUp
ID4gMCkKKyAgICAgICAgICAgIHgxLS07CisgICAgICAgIGlmICh0aWxlWEluZGV4KHRpbGUpIDwg
KG51bVRpbGVzWCgpLTEpKQorICAgICAgICAgICAgeDIrKzsKKyAgICAgICAgaWYgKHRpbGVZSW5k
ZXgodGlsZSkgPiAwKQorICAgICAgICAgICAgeTEtLTsKKyAgICAgICAgaWYgKHRpbGVZSW5kZXgo
dGlsZSkgPCAobnVtVGlsZXNZKCktMSkpCisgICAgICAgICAgICB5MisrOworCisgICAgICAgIGJv
dW5kcyA9IEludFJlY3QoeDEsIHkxLCB4Mi14MSwgeTIteTEpOworICAgIH0KKworICAgIHJldHVy
biBib3VuZHM7Cit9CisKK0Zsb2F0UmVjdCBUaWxpbmdEYXRhOjp0aWxlQm91bmRzTm9ybWFsaXpl
ZChpbnQgdGlsZSkgY29uc3QKK3sKKyAgICBhc3NlcnRUaWxlKHRpbGUpOworICAgIEZsb2F0UmVj
dCBib3VuZHModGlsZUJvdW5kcyh0aWxlKSk7CisgICAgYm91bmRzLnNjYWxlKDEuMGYgLyBtX3Rv
dGFsU2l6ZVgsIDEuMGYgLyBtX3RvdGFsU2l6ZVkpOworICAgIHJldHVybiBib3VuZHM7Cit9CisK
K2ludCBUaWxpbmdEYXRhOjp0aWxlUG9zaXRpb25YKGludCB4SW5kZXgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKHhJbmRleCA+PSAwICYmIHhJbmRleCA8IG51bVRpbGVzWCgpKTsKKworICAgIGlmICgh
eEluZGV4KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gdGlsZVBvc2l0aW9uWCh4SW5k
ZXgtMSkgKyB0aWxlU2l6ZVgoeEluZGV4LTEpOworfQorCitpbnQgVGlsaW5nRGF0YTo6dGlsZVBv
c2l0aW9uWShpbnQgeUluZGV4KSBjb25zdAoreworICAgIEFTU0VSVCh5SW5kZXggPj0gMCAmJiB5
SW5kZXggPCBudW1UaWxlc1koKSk7CisKKyAgICBpZiAoIXlJbmRleCkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIHRpbGVQb3NpdGlvblgoeUluZGV4LTEpICsgdGlsZVNpemVZKHlJbmRl
eC0xKTsKK30KKworaW50IFRpbGluZ0RhdGE6OnRpbGVTaXplWChpbnQgeEluZGV4KSBjb25zdAor
eworICAgIEFTU0VSVCh4SW5kZXggPj0gMCAmJiB4SW5kZXggPCBudW1UaWxlc1goKSk7CisKKyAg
ICBpbnQgc2l6ZSA9IG1heFRleHR1cmVTaXplKCk7CisgICAgc2l6ZSA9IG1pbihzaXplLCB0b3Rh
bFNpemVYKCkpOworCisgICAgaWYgKCF4SW5kZXggJiYgbV9udW1UaWxlc1ggPT0gMSkKKyAgICAg
ICAgcmV0dXJuIG1fdG90YWxTaXplWDsKKyAgICBpZiAoIXhJbmRleCAmJiBtX251bVRpbGVzWCA+
IDEpCisgICAgICAgIHJldHVybiBtX21heFRleHR1cmVTaXplIC0gbV9ib3JkZXJUZXhlbHM7Cisg
ICAgaWYgKHhJbmRleCA8IG51bVRpbGVzWCgpIC0gMSkKKyAgICAgICAgcmV0dXJuIG1fbWF4VGV4
dHVyZVNpemUgLSAyICogbV9ib3JkZXJUZXhlbHM7CisgICAgaWYgKHhJbmRleCA9PSBudW1UaWxl
c1goKSAtIDEpCisgICAgICAgIHJldHVybiBtX3RvdGFsU2l6ZVggLSB0aWxlUG9zaXRpb25YKHhJ
bmRleCk7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
aW50IFRpbGluZ0RhdGE6OnRpbGVTaXplWShpbnQgeUluZGV4KSBjb25zdAoreworICAgIEFTU0VS
VCh5SW5kZXggPj0gMCAmJiB5SW5kZXggPCBudW1UaWxlc1koKSk7CisKKyAgICBpbnQgc2l6ZSA9
IG1heFRleHR1cmVTaXplKCk7CisgICAgc2l6ZSA9IG1pbihzaXplLCB0b3RhbFNpemVZKCkpOwor
CisgICAgaWYgKCF5SW5kZXggJiYgbV9udW1UaWxlc1kgPT0gMSkKKyAgICAgICAgcmV0dXJuIG1f
dG90YWxTaXplWTsKKyAgICBpZiAoIXlJbmRleCAmJiBtX251bVRpbGVzWSA+IDEpCisgICAgICAg
IHJldHVybiBtX21heFRleHR1cmVTaXplIC0gbV9ib3JkZXJUZXhlbHM7CisgICAgaWYgKHlJbmRl
eCA8IG51bVRpbGVzWSgpIC0gMSkKKyAgICAgICAgcmV0dXJuIG1fbWF4VGV4dHVyZVNpemUgLSAy
ICogbV9ib3JkZXJUZXhlbHM7CisgICAgaWYgKHlJbmRleCA9PSBudW1UaWxlc1koKSAtIDEpCisg
ICAgICAgIHJldHVybiBtX3RvdGFsU2l6ZVkgLSB0aWxlUG9zaXRpb25ZKHlJbmRleCk7CisKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworSW50UmVjdCBUaWxp
bmdEYXRhOjpvdmVybGFwcGVkVGlsZUluZGljZXMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCAmc3Jj
UmVjdCkgY29uc3QKK3sKKyAgICBpbnQgeCA9IHRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoc3JjUmVj
dC54KCkpOworICAgIGludCB5ID0gdGlsZVlJbmRleEZyb21TcmNDb29yZChzcmNSZWN0LnkoKSk7
CisgICAgaW50IHIgPSB0aWxlWEluZGV4RnJvbVNyY0Nvb3JkKHNyY1JlY3QucmlnaHQoKSk7Cisg
ICAgaW50IGIgPSB0aWxlWUluZGV4RnJvbVNyY0Nvb3JkKHNyY1JlY3QuYm90dG9tKCkpOworICAg
IHJldHVybiBJbnRSZWN0KHgsIHksIHIteCwgYi15KTsKK30KKworSW50UmVjdCBUaWxpbmdEYXRh
OjpvdmVybGFwcGVkVGlsZUluZGljZXMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0ICZzcmNSZWN0
KSBjb25zdAoreworICAgIHJldHVybiBvdmVybGFwcGVkVGlsZUluZGljZXMoZW5jbG9zaW5nSW50
UmVjdChzcmNSZWN0KSk7Cit9CisKK3ZvaWQgVGlsaW5nRGF0YTo6aW50ZXJzZWN0RHJhd1F1YWQo
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGludCB0
aWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QqIG5ld1Ny
YywgRmxvYXRSZWN0KiBuZXdEc3QpIGNvbnN0Cit7CisgICAgLy8gSW50ZXJzZWN0IHdpdGggdGls
ZQorICAgIEZsb2F0UmVjdCB0aWxlQm91bmRzID0gdGhpcy0+dGlsZUJvdW5kcyh0aWxlKTsKKyAg
ICBGbG9hdFJlY3Qgc3JjUmVjdEludGVyc2VjdGVkID0gc3JjUmVjdDsKKyAgICBzcmNSZWN0SW50
ZXJzZWN0ZWQuaW50ZXJzZWN0KHRpbGVCb3VuZHMpOworCisgICAgaWYgKHNyY1JlY3RJbnRlcnNl
Y3RlZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgKm5ld1NyYyA9ICpuZXdEc3QgPSBGbG9hdFJlY3Qo
MCwgMCwgMCwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmbG9hdCBzcmNSZWN0
SW50ZXJzZWN0ZWROb3JtWCA9IChzcmNSZWN0SW50ZXJzZWN0ZWQueCgpIC0gc3JjUmVjdC54KCkp
IC8gc3JjUmVjdC53aWR0aCgpOworICAgIGZsb2F0IHNyY1JlY3RJbnRlcnNlY3RlZE5vcm1ZID0g
KHNyY1JlY3RJbnRlcnNlY3RlZC55KCkgLSBzcmNSZWN0LnkoKSkgLyBzcmNSZWN0LmhlaWdodCgp
OworICAgIGZsb2F0IHNyY1JlY3RJbnRlcnNlY3RlZE5vcm1XID0gc3JjUmVjdEludGVyc2VjdGVk
LndpZHRoKCkgLyBzcmNSZWN0LndpZHRoKCk7CisgICAgZmxvYXQgc3JjUmVjdEludGVyc2VjdGVk
Tm9ybUggPSBzcmNSZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0KCkgLyBzcmNSZWN0LmhlaWdodCgpOwor
CisgICAgKm5ld1NyYyA9IHNyY1JlY3RJbnRlcnNlY3RlZDsKKyAgICBuZXdTcmMtPm1vdmUoCisg
ICAgICAgIC10aWxlQm91bmRzLngoKSArIG1fYm9yZGVyVGV4ZWxzICogKHRpbGVYSW5kZXgodGls
ZSkgPiAwKSwgCisgICAgICAgIC10aWxlQm91bmRzLnkoKSArIG1fYm9yZGVyVGV4ZWxzICogKHRp
bGVZSW5kZXgodGlsZSkgPiAwKSk7CisKKyAgICAqbmV3RHN0ID0gRmxvYXRSZWN0KAorICAgICAg
ICBzcmNSZWN0SW50ZXJzZWN0ZWROb3JtWCAqIGRzdFJlY3Qud2lkdGgoKSArIGRzdFJlY3QueCgp
LAorICAgICAgICBzcmNSZWN0SW50ZXJzZWN0ZWROb3JtWSAqIGRzdFJlY3QuaGVpZ2h0KCkgKyBk
c3RSZWN0LnkoKSwKKyAgICAgICAgc3JjUmVjdEludGVyc2VjdGVkTm9ybVcgKiBkc3RSZWN0Lndp
ZHRoKCksCisgICAgICAgIHNyY1JlY3RJbnRlcnNlY3RlZE5vcm1IICogZHN0UmVjdC5oZWlnaHQo
KSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsaW5nRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxp
bmdEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTVhZGU5MjBiOGJmMmIyMjAwMDU0MmYxYjkwNDg3OGJiZTcw
MDg1MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsaW5nRGF0YS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUaWxpbmdEYXRhX2gKKyNk
ZWZpbmUgVGlsaW5nRGF0YV9oCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBJbnRSZWN0OworCitj
bGFzcyBUaWxpbmdEYXRhIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBUaWxp
bmdEYXRhKGludCBtYXhUZXh0dXJlU2l6ZSwgaW50IHRvdGFsU2l6ZVgsIGludCB0b3RhbFNpemVZ
LCBib29sIGJvcmRlclRleGVscyk7CisgICAgaW50IG1heFRleHR1cmVTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXhUZXh0dXJlU2l6ZTsgfQorICAgIGludCB0b3RhbFNpemVYKCkgY29uc3QgeyBy
ZXR1cm4gbV90b3RhbFNpemVYOyB9CisgICAgaW50IHRvdGFsU2l6ZVkoKSBjb25zdCB7IHJldHVy
biBtX3RvdGFsU2l6ZVk7IH0KKworICAgIGludCBudW1UaWxlcygpIGNvbnN0IHsgcmV0dXJuIG51
bVRpbGVzWCgpICogbnVtVGlsZXNZKCk7IH0KKyAgICBpbnQgbnVtVGlsZXNYKCkgY29uc3QgeyBy
ZXR1cm4gbV9udW1UaWxlc1g7IH0KKyAgICBpbnQgbnVtVGlsZXNZKCkgY29uc3QgeyByZXR1cm4g
bV9udW1UaWxlc1k7IH0KKyAgICBpbnQgdGlsZUluZGV4KGludCB4LCBpbnQgeSkgY29uc3QgeyBy
ZXR1cm4geCArIHkgKiBudW1UaWxlc1goKTsgfQorICAgIGludCB0aWxlWEluZGV4KGludCB0aWxl
KSBjb25zdCB7IGFzc2VydFRpbGUodGlsZSk7IHJldHVybiB0aWxlICUgbnVtVGlsZXNYKCk7IH0K
KyAgICBpbnQgdGlsZVlJbmRleChpbnQgdGlsZSkgY29uc3QgeyBhc3NlcnRUaWxlKHRpbGUpOyBy
ZXR1cm4gdGlsZSAvIG51bVRpbGVzWCgpOyB9CisgICAgaW50IHRpbGVYSW5kZXhGcm9tU3JjQ29v
cmQoaW50KSBjb25zdDsKKyAgICBpbnQgdGlsZVlJbmRleEZyb21TcmNDb29yZChpbnQpIGNvbnN0
OworCisgICAgSW50UmVjdCB0aWxlQm91bmRzKGludCB0aWxlKSBjb25zdDsKKyAgICBJbnRSZWN0
IHRpbGVCb3VuZHNXaXRoQm9yZGVyKGludCB0aWxlKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgdGls
ZUJvdW5kc05vcm1hbGl6ZWQoaW50IHRpbGUpIGNvbnN0OworICAgIGludCB0aWxlUG9zaXRpb25Y
KGludCB4SW5kZXgpIGNvbnN0OworICAgIGludCB0aWxlUG9zaXRpb25ZKGludCB5SW5kZXgpIGNv
bnN0OworICAgIGludCB0aWxlU2l6ZVgoaW50IHhJbmRleCkgY29uc3Q7CisgICAgaW50IHRpbGVT
aXplWShpbnQgeUluZGV4KSBjb25zdDsKKyAgICBJbnRSZWN0IG92ZXJsYXBwZWRUaWxlSW5kaWNl
cyhjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdDsKKyAgICBJbnRSZWN0IG92ZXJsYXBwZWRU
aWxlSW5kaWNlcyhjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OworCisgICAgLy8gR2l2
ZW4gYSBzZXQgb2Ygc291cmNlIGFuZCBkZXN0aW5hdGlvbiBjb29yZGluYXRlcyBmb3IgYSBkcmF3
aW5nIHF1YWQKKyAgICAvLyBpbiB0ZXhlbCB1bml0cywgcmV0dXJucyBhZGp1c3RlZCBkYXRhIHRv
IHJlbmRlciBqdXN0IHRoZSBvbmUgdGlsZS4KKyAgICB2b2lkIGludGVyc2VjdERyYXdRdWFkKGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBpbnQgdGls
ZSwgRmxvYXRSZWN0KiBuZXdTcmMsIEZsb2F0UmVjdCogbmV3RHN0KSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBUaWxpbmdEYXRhKCkgOiBtX21heFRleHR1cmVTaXplKDApLCBtX3RvdGFsU2l6ZVgo
MCksIG1fdG90YWxTaXplWSgwKSB7fQorICAgIHZvaWQgYXNzZXJ0VGlsZShpbnQgdGlsZSkgY29u
c3QgeyBBU1NFUlQodGlsZSA+PSAwICYmIHRpbGUgPCBudW1UaWxlcygpKTsgfQorCisgICAgaW50
IG1fbWF4VGV4dHVyZVNpemU7CisgICAgaW50IG1fdG90YWxTaXplWDsKKyAgICBpbnQgbV90b3Rh
bFNpemVZOworICAgIGJvb2wgbV9ib3JkZXJUZXhlbHM7CisKKyAgICAvLyBjb21wdXRlZCB2YWx1
ZXM6CisgICAgaW50IG1fbnVtVGlsZXNYOworICAgIGludCBtX251bVRpbGVzWTsKK307CisKK30K
KworI2VuZGlmIC8vIFRpbGluZ0RhdGFfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvSW1hZ2VTa2lhLmNwcAppbmRleCAwMjRiZjUwZGMxMzMzYTIwYWEyZGFhZTFhYzdlNWE0ZjVl
ZWMwZTEwLi5iNTE0YjFhNmI2MWI1ZDcwY2JkODc3Y2IzYjExNjRhM2JlMWQ1MTdiIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcApAQCAtNDY1LDE4ICs0
NjUsMTggQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwKICAgICBpZiAoIWJtKQogICAgICAgICByZXR1cm47ICAv
LyBJdCdzIHRvbyBlYXJseSBhbmQgd2UgZG9uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCiAKLSNpZiAg
VVNFKEdMRVMyX1JFTkRFUklORykKLSAgICBpZiAoY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPnVz
ZUdQVSgpKSB7Ci0gICAgICAgIGRyYXdCaXRtYXBHTEVTMihjdHh0LCBibSwgc3JjUmVjdCwgZHN0
UmVjdCwgY29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
I2VuZGlmCiAgICAgRmxvYXRSZWN0IG5vcm1Ec3RSZWN0ID0gbm9ybWFsaXplUmVjdChkc3RSZWN0
KTsKICAgICBGbG9hdFJlY3Qgbm9ybVNyY1JlY3QgPSBub3JtYWxpemVSZWN0KHNyY1JlY3QpOwog
CiAgICAgaWYgKG5vcm1TcmNSZWN0LmlzRW1wdHkoKSB8fCBub3JtRHN0UmVjdC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsgIC8vIE5vdGhpbmcgdG8gZHJhdy4KIAorI2lmICBVU0UoR0xFUzJf
UkVOREVSSU5HKQorICAgIGlmIChjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpIHsK
KyAgICAgICAgZHJhd0JpdG1hcEdMRVMyKGN0eHQsIGJtLCBub3JtU3JjUmVjdCwgbm9ybURzdFJl
Y3QsIGNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNl
bmRpZgogICAgIGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3
KCk7CiAKICAgICBwYWludFNrQml0bWFwKGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLApkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKaW5kZXggNmQ5MjkzMTE5YjQ5NGI0ODViZTM1ZTFmNTZjMmMyOTg4MzJkMzJkYi4uZjZhZjI3
ODEyNDg5OTYxOGIxYzFiNGU3NTM2MjExNmVmMjJkY2M2ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTAtMDgtMTEgIFZpbmNlbnQgU2NoZWliICA8c2NoZWliQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBDYW52YXMyRCBkb2VzIG5vdCBzdXBwb3J0IGltYWdlcyBsYXJnZXIgdGhh
biBzeXN0ZW0ncyBHUFUgbWF4IHRleHR1cmUgc2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM4NjQKKworICAgICAgICBVbml0IHRlc3RzIGZvciBU
aWxpbmdEYXRhIGNsYXNzLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiB0ZXN0
cy9UaWxpbmdEYXRhVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisK
IDIwMTAtMDgtMTIgIEpvaG4gR3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cCBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IDEyM2FlZDU5OGVjMWY4
NTA3YmEyOGM4ZDE0Y2Y5NGU4NTNjZDcyNDEuLjgyZGRiZjY2ODY4OGU2NWQzZDQ4YjczMjYzZmZh
NjFlODRiMGE4Y2YgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC03MDYsNiArNzA2LDcgQEAKICAgICAgICAg
ICAgICAgICAgICAgICAgICd0ZXN0cy9LZXlib2FyZFRlc3QuY3BwJywKICAgICAgICAgICAgICAg
ICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAg
J3Rlc3RzL1J1bkFsbFRlc3RzLmNwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMv
VGlsaW5nRGF0YVRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAg
ICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICBbJ09TPT0i
d2luIicsIHsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxpbmdEYXRhVGVz
dC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQ2MzU0MmJhNWQ2Mzg5OTFkYjQ2NWUzMDUwYTc1MTZiYmNmYmFmYTIKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwCkBAIC0wLDAg
KzEsMjIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiR0xFUzJUZXh0dXJlLmgi
CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSB7CisKK1RFU1QoVGlsaW5nRGF0YVRlc3QsIG51bVRpbGVzX05vVGlsaW5nKQor
eworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDE2LCAxNiwgMTYsIGZhbHNlKS5udW1UaWxl
cygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgxNiwgMTUsIDE1LCB0cnVlKS5udW1U
aWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgxNiwgMTYsIDE2LCB0cnVlKS5u
dW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgxNiwgIDEsIDE2LCBmYWxz
ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMTUsIDE1LCAxNSwg
dHJ1ZSkubnVtVGlsZXMoKSk7Cit9CisKK1RFU1QoVGlsaW5nRGF0YVRlc3QsIG51bVRpbGVzX1Rp
bGluZ05vQm9yZGVycykKK3sKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg0LCAgMSwgIDQs
IGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg0LCAgMiwg
IDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg0LCAg
MywgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg0
LCAgNCwgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0
YSg0LCAgNSwgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5n
RGF0YSg0LCAgNiwgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGls
aW5nRGF0YSg0LCAgNywgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwg
VGlsaW5nRGF0YSg0LCAgOCwgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEo
MywgVGlsaW5nRGF0YSg0LCAgOSwgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1Rf
RVEoMywgVGlsaW5nRGF0YSg0LCAxMCwgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBF
Q1RfRVEoMywgVGlsaW5nRGF0YSg0LCAxMSwgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKworICAg
IEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICAxLCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOwor
ICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICAyLCAgNSwgZmFsc2UpLm51bVRpbGVzKCkp
OworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICAzLCAgNSwgZmFsc2UpLm51bVRpbGVz
KCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICA0LCAgNSwgZmFsc2UpLm51bVRp
bGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICA1LCAgNSwgZmFsc2UpLm51
bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDUsICA2LCAgNSwgZmFsc2Up
Lm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDUsICA3LCAgNSwgZmFs
c2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDUsICA4LCAgNSwg
ZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDUsICA5LCAg
NSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDUsIDEw
LCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDUs
IDExLCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworCisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0Rh
dGEoMTYsIDE2LCAxNiwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxp
bmdEYXRhKDE3LCAxNiwgMTYsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoNCwg
VGlsaW5nRGF0YSgxNSwgMTYsIDE2LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VR
KDQsIFRpbGluZ0RhdGEoOCwgMTYsIDE2LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNU
X0VRKDYsIFRpbGluZ0RhdGEoOCwgMTcsIDE2LCBmYWxzZSkubnVtVGlsZXMoKSk7Cit9CisKK1RF
U1QoVGlsaW5nRGF0YVRlc3QsIG51bVRpbGVzX1RpbGluZ1dpdGhCb3JkZXJzKQoreworICAgIEVY
UEVDVF9FUSgxLCBUaWxpbmdEYXRhKDMsICAxLCAgMywgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAg
RVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMywgIDIsICAzLCB0cnVlKS5udW1UaWxlcygpKTsKKyAg
ICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgzLCAgMywgIDMsIHRydWUpLm51bVRpbGVzKCkpOwor
ICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDMsICA0LCAgMywgdHJ1ZSkubnVtVGlsZXMoKSk7
CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoMywgIDUsICAzLCB0cnVlKS5udW1UaWxlcygp
KTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSgzLCAgNiwgIDMsIHRydWUpLm51bVRpbGVz
KCkpOworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDMsICA3LCAgMywgdHJ1ZSkubnVtVGls
ZXMoKSk7CisKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg0LCAgMSwgIDQsIHRydWUpLm51
bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDQsICAyLCAgNCwgdHJ1ZSku
bnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoNCwgIDMsICA0LCB0cnVl
KS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg0LCAgNCwgIDQsIHRy
dWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDQsICA1LCAgNCwg
dHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNCwgIDYsICA0
LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg0LCAgNywg
IDQsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDQsICA4
LCAgNCwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoNCwg
IDksICA0LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSg0
LCAxMCwgIDQsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRh
KDQsIDExLCAgNCwgdHJ1ZSkubnVtVGlsZXMoKSk7CisKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5n
RGF0YSg1LCAgMSwgIDUsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxp
bmdEYXRhKDUsICAyLCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRp
bGluZ0RhdGEoNSwgIDMsICA1LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwg
VGlsaW5nRGF0YSg1LCAgNCwgIDUsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgx
LCBUaWxpbmdEYXRhKDUsICA1LCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VR
KDIsIFRpbGluZ0RhdGEoNSwgIDYsICA1LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1Rf
RVEoMiwgVGlsaW5nRGF0YSg1LCAgNywgIDUsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVD
VF9FUSgyLCBUaWxpbmdEYXRhKDUsICA4LCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQ
RUNUX0VRKDMsIFRpbGluZ0RhdGEoNSwgIDksICA1LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBF
WFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg1LCAxMCwgIDUsIHRydWUpLm51bVRpbGVzKCkpOworICAg
IEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDUsIDExLCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7Cit9
CisKK1RFU1QoVGlsaW5nRGF0YVRlc3QsIHRpbGVYSW5kZXhGcm9tU3JjQ29vcmQpCit7CisgICAg
RVhQRUNUX0VRKDAsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21T
cmNDb29yZCgwKSk7CisgICAgRVhQRUNUX0VRKDAsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxz
ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCgxKSk7CisgICAgRVhQRUNUX0VRKDAsIFRpbGluZ0Rh
dGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCgyKSk7CisgICAgRVhQ
RUNUX0VRKDEsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmND
b29yZCgzKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSku
dGlsZVhJbmRleEZyb21TcmNDb29yZCg0KSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEo
MywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCg1KSk7CisgICAgRVhQRUNU
X0VRKDIsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29y
ZCg2KSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGls
ZVhJbmRleEZyb21TcmNDb29yZCg3KSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoMywg
MTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCg4KSk7CisgICAgRVhQRUNUX0VR
KDMsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCg5
KSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJ
bmRleEZyb21TcmNDb29yZCgxMCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDMsIDEw
LCAxMCwgZmFsc2UpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoMTEpKTsKKworICAgIEVYUEVDVF9F
USgwLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCgw
KSk7CisgICAgRVhQRUNUX0VRKDAsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWElu
ZGV4RnJvbVNyY0Nvb3JkKDEpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgzLCAxMCwg
MTAsIHRydWUpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoMikpOworICAgIEVYUEVDVF9FUSgyLCBU
aWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCgzKSk7Cisg
ICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWEluZGV4RnJv
bVNyY0Nvb3JkKDQpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRy
dWUpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoNSkpOworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdE
YXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCg2KSk7CisgICAgRVhQ
RUNUX0VRKDYsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nv
b3JkKDcpKTsKKyAgICBFWFBFQ1RfRVEoNywgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRp
bGVYSW5kZXhGcm9tU3JjQ29vcmQoOCkpOworICAgIEVYUEVDVF9FUSg3LCBUaWxpbmdEYXRhKDMs
IDEwLCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCg5KSk7CisgICAgRVhQRUNUX0VR
KDcsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDEw
KSk7CisgICAgRVhQRUNUX0VRKDcsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWElu
ZGV4RnJvbVNyY0Nvb3JkKDExKSk7Cit9CitURVNUKFRpbGluZ0RhdGFUZXN0LCB0aWxlWUluZGV4
RnJvbVNyY0Nvb3JkKQoreworICAgIEVYUEVDVF9FUSgwLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwg
ZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoMCkpOworICAgIEVYUEVDVF9FUSgwLCBUaWxp
bmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoMSkpOworICAg
IEVYUEVDVF9FUSgwLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9t
U3JjQ29vcmQoMikpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFs
c2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoMykpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdE
YXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoNCkpOworICAgIEVY
UEVDVF9FUSgxLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3Jj
Q29vcmQoNSkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2Up
LnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoNikpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRh
KDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoNykpOworICAgIEVYUEVD
VF9FUSgyLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29v
cmQoOCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRp
bGVZSW5kZXhGcm9tU3JjQ29vcmQoOSkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDMs
IDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoMTApKTsKKyAgICBFWFBFQ1Rf
RVEoMywgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3Jk
KDExKSk7CisKKyAgICBFWFBFQ1RfRVEoMCwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRp
bGVZSW5kZXhGcm9tU3JjQ29vcmQoMCkpOworICAgIEVYUEVDVF9FUSgwLCBUaWxpbmdEYXRhKDMs
IDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCgxKSk7CisgICAgRVhQRUNUX0VR
KDEsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDIp
KTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVZSW5k
ZXhGcm9tU3JjQ29vcmQoMykpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDMsIDEwLCAx
MCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCg0KSk7CisgICAgRVhQRUNUX0VRKDQsIFRp
bGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDUpKTsKKyAg
ICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVZSW5kZXhGcm9t
U3JjQ29vcmQoNikpOworICAgIEVYUEVDVF9FUSg2LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1
ZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCg3KSk7CisgICAgRVhQRUNUX0VRKDcsIFRpbGluZ0Rh
dGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDgpKTsKKyAgICBFWFBF
Q1RfRVEoNywgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVZSW5kZXhGcm9tU3JjQ29v
cmQoOSkpOworICAgIEVYUEVDVF9FUSg3LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGls
ZVlJbmRleEZyb21TcmNDb29yZCgxMCkpOworICAgIEVYUEVDVF9FUSg3LCBUaWxpbmdEYXRhKDMs
IDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCgxMSkpOworfQorCitURVNUKFRp
bGluZ0RhdGFUZXN0LCB0aWxlU2l6ZVgpCit7CisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEo
NSwgIDUsICA1LCBmYWxzZSkudGlsZVNpemVYKDApKTsKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5n
RGF0YSg1LCAgNSwgIDUsIHRydWUpLnRpbGVTaXplWCgwKSk7CisKKyAgICBFWFBFQ1RfRVEoNSwg
VGlsaW5nRGF0YSg1LCAgNiwgIDYsIGZhbHNlKS50aWxlU2l6ZVgoMCkpOworICAgIEVYUEVDVF9F
USgxLCBUaWxpbmdEYXRhKDUsICA2LCAgNiwgZmFsc2UpLnRpbGVTaXplWCgxKSk7CisgICAgRVhQ
RUNUX0VRKDQsIFRpbGluZ0RhdGEoNSwgIDYsICA2LCB0cnVlKS50aWxlU2l6ZVgoMCkpOworICAg
IEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDUsICA2LCAgNiwgdHJ1ZSkudGlsZVNpemVYKDEpKTsK
KworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUsICA4LCAgOCwgZmFsc2UpLnRpbGVTaXpl
WCgwKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNSwgIDgsICA4LCBmYWxzZSkudGls
ZVNpemVYKDEpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSg1LCAgOCwgIDgsIHRydWUp
LnRpbGVTaXplWCgwKSk7CisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoNSwgIDgsICA4LCB0
cnVlKS50aWxlU2l6ZVgoMSkpOworCisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoNSwgMTAs
IDEwLCBmYWxzZSkudGlsZVNpemVYKDApKTsKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSg1
LCAxMCwgMTAsIGZhbHNlKS50aWxlU2l6ZVgoMSkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdE
YXRhKDUsIDEwLCAxMCwgdHJ1ZSkudGlsZVNpemVYKDApKTsKKyAgICBFWFBFQ1RfRVEoMywgVGls
aW5nRGF0YSg1LCAxMCwgMTAsIHRydWUpLnRpbGVTaXplWCgxKSk7CisgICAgRVhQRUNUX0VRKDMs
IFRpbGluZ0RhdGEoNSwgMTAsIDEwLCB0cnVlKS50aWxlU2l6ZVgoMikpOworCisgICAgRVhQRUNU
X0VRKDQsIFRpbGluZ0RhdGEoNSwgMTEsIDExLCB0cnVlKS50aWxlU2l6ZVgoMikpOworICAgIEVY
UEVDVF9FUSgzLCBUaWxpbmdEYXRhKDUsIDEyLCAxMiwgdHJ1ZSkudGlsZVNpemVYKDIpKTsKK30K
K1RFU1QoVGlsaW5nRGF0YVRlc3QsIHRpbGVTaXplWSkKK3sKKyAgICBFWFBFQ1RfRVEoNSwgVGls
aW5nRGF0YSg1LCAgNSwgIDUsIGZhbHNlKS50aWxlU2l6ZVkoMCkpOworICAgIEVYUEVDVF9FUSg1
LCBUaWxpbmdEYXRhKDUsICA1LCAgNSwgdHJ1ZSkudGlsZVNpemVZKDApKTsKKworICAgIEVYUEVD
VF9FUSg1LCBUaWxpbmdEYXRhKDUsICA2LCAgNiwgZmFsc2UpLnRpbGVTaXplWSgwKSk7CisgICAg
RVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoNSwgIDYsICA2LCBmYWxzZSkudGlsZVNpemVZKDEpKTsK
KyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSg1LCAgNiwgIDYsIHRydWUpLnRpbGVTaXplWSgw
KSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNSwgIDYsICA2LCB0cnVlKS50aWxlU2l6
ZVkoMSkpOworCisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoNSwgIDgsICA4LCBmYWxzZSku
dGlsZVNpemVZKDApKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg1LCAgOCwgIDgsIGZh
bHNlKS50aWxlU2l6ZVkoMSkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDUsICA4LCAg
OCwgdHJ1ZSkudGlsZVNpemVZKDApKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSg1LCAg
OCwgIDgsIHRydWUpLnRpbGVTaXplWSgxKSk7CisKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0
YSg1LCAxMCwgMTAsIGZhbHNlKS50aWxlU2l6ZVkoMCkpOworICAgIEVYUEVDVF9FUSg1LCBUaWxp
bmdEYXRhKDUsIDEwLCAxMCwgZmFsc2UpLnRpbGVTaXplWSgxKSk7CisgICAgRVhQRUNUX0VRKDQs
IFRpbGluZ0RhdGEoNSwgMTAsIDEwLCB0cnVlKS50aWxlU2l6ZVkoMCkpOworICAgIEVYUEVDVF9F
USgzLCBUaWxpbmdEYXRhKDUsIDEwLCAxMCwgdHJ1ZSkudGlsZVNpemVZKDEpKTsKKyAgICBFWFBF
Q1RfRVEoMywgVGlsaW5nRGF0YSg1LCAxMCwgMTAsIHRydWUpLnRpbGVTaXplWSgyKSk7CisKKyAg
ICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSg1LCAxMSwgMTEsIHRydWUpLnRpbGVTaXplWSgyKSk7
CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNSwgMTIsIDEyLCB0cnVlKS50aWxlU2l6ZVko
MikpOworfQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64361</attachid>
            <date>2010-08-13 11:50:17 -0700</date>
            <delta_ts>2010-08-14 14:17:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43864-20100813115016.patch</filename>
            <type>text/plain</type>
            <size>41939</size>
            <attacher name="Vincent Scheib">scheib</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NGY2OWFmNjM5ODkzYzhjZDhiYmQyYzJkMGI1OTA2YjUzZDU2M2QxZi4uYmFkNWJhOGFhNTMyYTQz
NjUwMGVlNmQ0ZjU5NDk5NmY2NTEzN2NjZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMC0wOC0xMSAgVmlu
Y2VudCBTY2hlaWIgIDxzY2hlaWJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENhbnZhczJEIGRvZXMgbm90IHN1cHBvcnQgaW1h
Z2VzIGxhcmdlciB0aGFuIHN5c3RlbSdzIEdQVSBtYXggdGV4dHVyZSBzaXplCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mzg2NAorCisgICAgICAgIEEg
bmV3IGNsYXNzICJUaWxpbmdEYXRhIiBoYXMgYmVlbiBjcmVhdGVkIHRoYXQgcHJvdmlkZXMgbG9n
aWMgZm9yIAorICAgICAgICBzcGxpdHRpbmcgYSBsYXJnZSBpbWFnZSBpbnRvIGEgc2VyaWVzIG9m
IHNtYWxsZXIgdGlsZXMuCisgICAgICAgIAorICAgICAgICBHTEVTMlRleHR1cmUgYW5kIENMRVMy
Q2FudmFzIGFyZSBtb2RpZmllZCB0byB1c2UgdGhlIFRpbGluZ0RhdGEgdG8KKyAgICAgICAgc3Bs
aXQgaW1hZ2VzIG9uIHRleHR1cmUgdXBsb2FkIGFuZCByZW5kZXIgb25lIGxvZ2ljYWwgaW1hZ2Ug
YXMgbWFueSBzbWFsbGVyCisgICAgICAgIGltYWdlcy4KKworICAgICAgICBUaWxpbmdEYXRhIGlz
IHRlc3RlZCB2aWEgdW5pdCB0ZXN0cyBpbiBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsaW5nRGF0
YVRlc3QuY3BwCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dMRVMyQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4
dHVyZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRS
ZWN0VGlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52
YXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZU51bVRpbGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGluZ0RhdGE6OlRpbGluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0
YTo6dGlsZVhJbmRleEZyb21TcmNDb29yZCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRh
Ojp0aWxlWUluZGV4RnJvbVNyY0Nvb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6
OnRpbGVCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZUJvdW5kc1dp
dGhCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZUJvdW5kc05vcm1h
bGl6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZVBvc2l0aW9uWCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxlUG9zaXRpb25ZKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGluZ0RhdGE6OnRpbGVTaXplWCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdE
YXRhOjp0aWxlU2l6ZVkpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6b3ZlcmxhcHBl
ZFRpbGVJbmRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OmludGVyc2VjdERy
YXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyVGV4dHVyZTo6R0xFUzJUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdMRVMyVGV4dHVyZTo6fkdMRVMyVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3B5
U3ViUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OmxvYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6R0xFUzJUZXh0dXJlOjpiaW5kVGlsZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmg6CisgICAgICAgIChXZWJDb3JlOjpUaWxp
bmdEYXRhOjptYXhUZXh0dXJlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0
b3RhbFNpemVYKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OnRvdGFsU2l6ZVkpOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6bnVtVGlsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6VGlsaW5nRGF0YTo6bnVtVGlsZXNYKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6
Om51bVRpbGVzWSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxlSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZVhJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxpbmdEYXRhOjp0aWxlWUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0Rh
dGE6OlRpbGluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6YXNzZXJ0VGls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OnRpbGVzKToKKwogMjAxMC0wOC0x
MyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjY1MzMxLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA2OWYzZjk5N2I3MjAwOGQzMTdm
MTA4MmFiOTY5OTcyYTdmM2MwNTAzLi5iYjYyODk3OGUyMDE2NGFhZjg1MzI2MjkxNTMzZGM5YjM5
OWQ1MDZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtMjIzMiw2ICsyMjMyLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUljb24uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhTGludXguY3Bw
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxpbmdEYXRhLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGluZ0RhdGEuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc2Zvcm1MYXll
ckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAKaW5kZXggOGE5YmRlMWY4ZmM2NDQ2
ZTNjMjA0OTkxNTRiMDUyNGI4NjFhOTJiNS4uNTM0ZGU3YjNkOTcxMDkyMzFhMDQzNDU2MmNlZDJm
M2JmYjcyYTM4MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HTEVTMkNhbnZhcy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HTEVTMkNhbnZhcy5jcHAKQEAgLTM4LDE0ICszOCwxNSBAQAogI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgogI2luY2x1ZGUgIkdMRVMyVGV4dHVyZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAjaW5jbHVkZSAiVWludDE2QXJyYXkuaCIKIAogI2RlZmluZSBfVVNFX01BVEhfREVGSU5FUwog
I2luY2x1ZGUgPG1hdGguaD4KIAotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNs
dWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjIxLDcgKzIyMiw2IEBAIHZvaWQgR0xFUzJDYW52
YXM6OmRyYXdUZXh0dXJlZFJlY3QoR0xFUzJUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlCiAgICAgY2hlY2tHTEVycm9yKCJnbFVzZVByb2dyYW0iKTsKIAogICAgIG1fY29u
dGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwotICAgIHRl
eHR1cmUtPmJpbmQoKTsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKG1fdGV4U2FtcGxlckxv
Y2F0aW9uLCAwKTsKICAgICBjaGVja0dMRXJyb3IoImdsVW5pZm9ybTFpIik7CkBAIC0yMjksMjgg
KzIyOSw1MiBAQCB2b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KEdMRVMyVGV4dHVy
ZSogdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZQogICAgIG1fY29udGV4dC0+dW5pZm9y
bTFmKG1fdGV4QWxwaGFMb2NhdGlvbiwgYWxwaGEpOwogICAgIGNoZWNrR0xFcnJvcigiZ2xVbmlm
b3JtMWYgZm9yIGFscGhhIik7CiAKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIo
bV90ZXhQb3NpdGlvbkxvY2F0aW9uLCAzLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNl
LCAwLCAwKTsKKworICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV90ZXhQ
b3NpdGlvbkxvY2F0aW9uKTsKKworICAgIGNvbnN0IFRpbGluZ0RhdGEmIHRpbGVzID0gdGV4dHVy
ZS0+dGlsZXMoKTsKKyAgICBJbnRSZWN0IHRpbGVJZHhSZWN0ID0gdGlsZXMub3ZlcmxhcHBlZFRp
bGVJbmRpY2VzKHNyY1JlY3QpOworCisgICAgZm9yIChpbnQgeSA9IHRpbGVJZHhSZWN0LnkoKTsg
eSA8PSB0aWxlSWR4UmVjdC5ib3R0b20oKTsgeSsrKSB7CisgICAgICAgIGZvciAoaW50IHggPSB0
aWxlSWR4UmVjdC54KCk7IHggPD0gdGlsZUlkeFJlY3QucmlnaHQoKTsgeCsrKQorICAgICAgICAg
ICAgZHJhd1RleHR1cmVkUmVjdFRpbGUodGV4dHVyZSwgdGlsZXMudGlsZUluZGV4KHgsIHkpLCBz
cmNSZWN0LCBkc3RSZWN0LCB0cmFuc2Zvcm0pOworICAgIH0KK30KKwordm9pZCBHTEVTMkNhbnZh
czo6ZHJhd1RleHR1cmVkUmVjdFRpbGUoR0xFUzJUZXh0dXJlKiB0ZXh0dXJlLCBpbnQgdGlsZSwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIGlmIChkc3RSZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgVGlsaW5nRGF0YSYgdGlsZXMgPSB0ZXh0
dXJlLT50aWxlcygpOworCisgICAgdGV4dHVyZS0+YmluZFRpbGUodGlsZSk7CisKKyAgICBGbG9h
dFJlY3Qgc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZTsKKyAgICBGbG9hdFJlY3QgZHN0UmVjdElu
dGVyc2VjdGVkOworICAgIHRpbGVzLmludGVyc2VjdERyYXdRdWFkKHNyY1JlY3QsIGRzdFJlY3Qs
IHRpbGUsICZzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlLCAmZHN0UmVjdEludGVyc2VjdGVkKTsK
KworICAgIEludFJlY3QgdGlsZUJvdW5kc1dpdGhCb3JkZXIgPSB0aWxlcy50aWxlQm91bmRzV2l0
aEJvcmRlcih0aWxlKTsKKwogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9mbGlwTWF0cml4
KTsKICAgICBtYXRyaXgubXVsdExlZnQodHJhbnNmb3JtKTsKLSAgICBtYXRyaXgudHJhbnNsYXRl
KGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7Ci0gICAgbWF0cml4LnNjYWxlKGRzdFJlY3Qud2lk
dGgoKSwgZHN0UmVjdC5oZWlnaHQoKSk7CisgICAgbWF0cml4LnRyYW5zbGF0ZShkc3RSZWN0SW50
ZXJzZWN0ZWQueCgpLCBkc3RSZWN0SW50ZXJzZWN0ZWQueSgpKTsKKyAgICBtYXRyaXguc2NhbGUo
ZHN0UmVjdEludGVyc2VjdGVkLndpZHRoKCksIGRzdFJlY3RJbnRlcnNlY3RlZC5oZWlnaHQoKSk7
CiAgICAgZmxvYXQgbWF0WzldOwogICAgIGFmZmluZVRvM3gzKG1hdHJpeCwgbWF0KTsKICAgICBt
X2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobV90ZXhNYXRyaXhMb2NhdGlvbiwgZmFsc2UgLyp0
cmFuc3Bvc2UqLywgbWF0LCAxIC8qY291bnQqLyk7CiAgICAgY2hlY2tHTEVycm9yKCJnbFVuaWZv
cm1NYXRyaXgzZnYiKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSB0ZXhNYXRyaXg7Ci0gICAgdGV4
TWF0cml4LnNjYWxlKDEuMGYgLyB0ZXh0dXJlLT53aWR0aCgpLCAxLjBmIC8gdGV4dHVyZS0+aGVp
Z2h0KCkpOwotICAgIHRleE1hdHJpeC50cmFuc2xhdGUoc3JjUmVjdC54KCksIHNyY1JlY3QueSgp
KTsKLSAgICB0ZXhNYXRyaXguc2NhbGUoc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgp
KTsKKyAgICB0ZXhNYXRyaXguc2NhbGUoMS4wZiAvIHRpbGVCb3VuZHNXaXRoQm9yZGVyLndpZHRo
KCksIDEuMGYgLyB0aWxlQm91bmRzV2l0aEJvcmRlci5oZWlnaHQoKSk7CisgICAgdGV4TWF0cml4
LnRyYW5zbGF0ZShzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlLngoKSwgc3JjUmVjdENsaXBwZWRJ
blRpbGVTcGFjZS55KCkpOworICAgIHRleE1hdHJpeC5zY2FsZShzcmNSZWN0Q2xpcHBlZEluVGls
ZVNwYWNlLndpZHRoKCksIHNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2UuaGVpZ2h0KCkpOwogICAg
IGZsb2F0IHRleE1hdFs5XTsKICAgICBhZmZpbmVUbzN4Myh0ZXhNYXRyaXgsIHRleE1hdCk7CiAg
ICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KG1fdGV4VGV4TWF0cml4TG9jYXRpb24sIGZh
bHNlIC8qdHJhbnNwb3NlKi8sIHRleE1hdCwgMSAvKmNvdW50Ki8pOwogICAgIGNoZWNrR0xFcnJv
cigiZ2xVbmlmb3JtTWF0cml4M2Z2Iik7CiAKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBv
aW50ZXIobV90ZXhQb3NpdGlvbkxvY2F0aW9uLCAzLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQs
IGZhbHNlLCAwLCAwKTsKLQotICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
bV90ZXhQb3NpdGlvbkxvY2F0aW9uKTsKLQogICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzKEdy
YXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRVMsIDYsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9TSE9SVCwgMCk7CiAgICAgY2hlY2tHTEVycm9yKCJnbERyYXdFbGVtZW50cyIpOwogfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCmluZGV4
IGNlYTkwYWVhYWJiMjYxNDdmMWYyNDMyNjcxODA5MjVjYzhhYTczM2MuLjBhZDA3ZmNkYmZlZDk5
YWQ2ZWNkN2U1NzQ2MDAxZmJiYWRhZmJlN2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgKQEAgLTgxLDYgKzgxLDcgQEAgcHVibGljOgog
ICAgIEdMRVMyVGV4dHVyZSogZ2V0VGV4dHVyZShOYXRpdmVJbWFnZVB0cik7CiAKIHByaXZhdGU6
CisgICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0VGlsZShHTEVTMlRleHR1cmUqIHRleHR1cmUsIGlu
dCB0aWxlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgdm9pZCBhcHBseUNvbXBvc2l0ZU9wZXJh
dG9yKENvbXBvc2l0ZU9wZXJhdG9yKTsKICAgICB2b2lkIGNoZWNrR0xFcnJvcihjb25zdCBjaGFy
KiBoZWFkZXIpOwogICAgIHVuc2lnbmVkIGdldFF1YWRWZXJ0aWNlcygpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUuY3BwCmluZGV4IDhi
NzJhYTgxMjY4NmQwMjM5YTcwYmQ2YjYxZDgzZTVhNDNlZDA5NWQuLmFlMjMwZGIxOTIzYzI2NTk4
MWM3N2RjMTYwNzkwNjQ0NjQ1YjM5MjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5jcHAKQEAgLTM1LDIzICszNSwyNCBAQAogI2lu
Y2x1ZGUgIkdMRVMyVGV4dHVyZS5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
LQorI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1HTEVTMlRleHR1cmU6OkdMRVMyVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgdGV4dHVyZUlkLCBGb3JtYXQgZm9ybWF0LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpCisKK0dMRVMyVGV4dHVyZTo6R0xFUzJUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCBQYXNzT3duUHRyPFZlY3Rvcjx1bnNpZ25lZCBpbnQ+ID4g
dGlsZVRleHR1cmVJZHMsIEZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50
IG1heFRleHR1cmVTaXplKQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX3RleHR1
cmVJZCh0ZXh0dXJlSWQpCiAgICAgLCBtX2Zvcm1hdChmb3JtYXQpCi0gICAgLCBtX3dpZHRoKHdp
ZHRoKQotICAgICwgbV9oZWlnaHQoaGVpZ2h0KQorICAgICwgbV90aWxlcyhtYXhUZXh0dXJlU2l6
ZSwgd2lkdGgsIGhlaWdodCwgdHJ1ZSkKKyAgICAsIG1fdGlsZVRleHR1cmVJZHModGlsZVRleHR1
cmVJZHMpCiB7CiB9CiAKIEdMRVMyVGV4dHVyZTo6fkdMRVMyVGV4dHVyZSgpCiB7Ci0gICAgbV9j
b250ZXh0LT5kZWxldGVUZXh0dXJlKG1fdGV4dHVyZUlkKTsKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IG1fdGlsZVRleHR1cmVJZHMtPnNpemUoKTsgaSsrKQorICAgICAgICBtX2Nv
bnRleHQtPmRlbGV0ZVRleHR1cmUobV90aWxlVGV4dHVyZUlkcy0+YXQoaSkpOwogfQogCiBzdGF0
aWMgdm9pZCBjb252ZXJ0Rm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBHTEVTMlRl
eHR1cmU6OkZvcm1hdCBmb3JtYXQsIHVuc2lnbmVkIGludCogZ2xGb3JtYXQsIHVuc2lnbmVkIGlu
dCogZ2xUeXBlLCBib29sKiBzd2l6emxlKQpAQCAtODAsNTEgKzgxLDk2IEBAIHN0YXRpYyB2b2lk
IGNvbnZlcnRGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEdMRVMyVGV4dHVyZTo6
Rm9ybWF0IGZvcm1hCiAKIFBhc3NSZWZQdHI8R0xFUzJUZXh0dXJlPiBHTEVTMlRleHR1cmU6OmNy
ZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQogewotICAgIGludCBtYXg7Ci0gICAgY29udGV4dC0+Z2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtYXgpOwotICAgIGlmICh3aWR0
aCA+IG1heCB8fCBoZWlnaHQgPiBtYXgpIHsKLSAgICAgICAgQVNTRVJUKCEidGV4dHVyZSB0b28g
YmlnIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBpbnQgbWF4VGV4dHVyZVNpemUg
PSAwOworICAgIGNvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVY
VFVSRV9TSVpFLCAmbWF4VGV4dHVyZVNpemUpOwogCi0gICAgdW5zaWduZWQgdGV4dHVyZUlkID0g
Y29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOwotICAgIGlmICghdGV4dHVyZUlkKQotICAgICAgICBy
ZXR1cm4gMDsKKyAgICBUaWxpbmdEYXRhIHRpbGluZyhtYXhUZXh0dXJlU2l6ZSwgd2lkdGgsIGhl
aWdodCwgdHJ1ZSk7CisgICAgaW50IG51bVRpbGVzID0gdGlsaW5nLm51bVRpbGVzKCk7CisKKyAg
ICBPd25QdHI8VmVjdG9yPHVuc2lnbmVkIGludD4gPiB0ZXh0dXJlSWRzKG5ldyBWZWN0b3I8dW5z
aWduZWQgaW50PihudW1UaWxlcykpOworICAgIHRleHR1cmVJZHMtPmZpbGwoMCwgbnVtVGlsZXMp
OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1UaWxlczsgaSsrKSB7CisgICAgICAgIGlu
dCB0ZXh0dXJlSWQgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAgIGlmICghdGV4
dHVyZUlkKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVRpbGVzOyBpKysp
CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlVGV4dHVyZSh0ZXh0dXJlSWRzLT5hdChp
KSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICB0ZXh0dXJlSWRz
LT5hdChpKSA9IHRleHR1cmVJZDsKKworICAgICAgICBJbnRSZWN0IHRpbGVCb3VuZHNXaXRoQm9y
ZGVyID0gdGlsaW5nLnRpbGVCb3VuZHNXaXRoQm9yZGVyKGkpOwogCiAgICAgdW5zaWduZWQgaW50
IGdsRm9ybWF0LCBnbFR5cGU7CiAgICAgYm9vbCBzd2l6emxlOwogICAgIGNvbnZlcnRGb3JtYXQo
Y29udGV4dCwgZm9ybWF0LCAmZ2xGb3JtYXQsICZnbFR5cGUsICZzd2l6emxlKTsKICAgICBjb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlk
KTsKLSAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCAwLCBnbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgMCk7Cisg
ICAgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwg
Z2xGb3JtYXQsCisgICAgICAgICAgICB0aWxlQm91bmRzV2l0aEJvcmRlci53aWR0aCgpLAorICAg
ICAgICAgICAgdGlsZUJvdW5kc1dpdGhCb3JkZXIuaGVpZ2h0KCksCisgICAgICAgICAgICAwLCBn
bEZvcm1hdCwgZ2xUeXBlLCAwKTsKKyAgICB9CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHTEVT
MlRleHR1cmUoY29udGV4dCwgdGV4dHVyZUlkcy5sZWFrUHRyKCksIGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgbWF4VGV4dHVyZVNpemUpKTsKK30KIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgR0xF
UzJUZXh0dXJlKGNvbnRleHQsIHRleHR1cmVJZCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KSk7Cit0
ZW1wbGF0ZSA8Ym9vbCBzd2l6emxlPgorc3RhdGljIHVpbnQzMl90KiBjb3B5U3ViUmVjdCh1aW50
MzJfdCogc3JjLCBpbnQgc3JjWCwgaW50IHNyY1ksIHVpbnQzMl90KiBkc3QsIGludCB3aWR0aCwg
aW50IGhlaWdodCwgaW50IHNyY1N0cmlkZSkKK3sKKyAgICB1aW50MzJfdCogc3JjT2Zmc2V0ID0g
c3JjICsgc3JjWCArIHNyY1kgKiBzcmNTdHJpZGU7CisKKyAgICBpZiAoIXN3aXp6bGUgJiYgd2lk
dGggPT0gc3JjU3RyaWRlKQorICAgICAgICByZXR1cm4gc3JjT2Zmc2V0OworCisgICAgdWludDMy
X3QqIGRzdFBpeGVsID0gZHN0OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
IHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aCA7IHgrKykgeworICAgICAgICAg
ICAgdWludDMyX3QgcGl4ZWwgPSBzcmNPZmZzZXRbeCArIHkgKiBzcmNTdHJpZGVdOworICAgICAg
ICAgICAgaWYgKHN3aXp6bGUpCisgICAgICAgICAgICAgICAgKmRzdFBpeGVsID0gcGl4ZWwgJiAw
eEZGMDBGRjAwIHwgKChwaXhlbCAmIDB4MDBGRjAwMDApID4+IDE2KSB8ICgocGl4ZWwgJiAweDAw
MDAwMEZGKSA8PCAxNik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKmRzdFBp
eGVsID0gcGl4ZWw7CisgICAgICAgICAgICBkc3RQaXhlbCsrOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBkc3Q7CiB9CiAKIHZvaWQgR0xFUzJUZXh0dXJlOjpsb2FkKHZvaWQqIHBpeGVs
cykKIHsKKyAgICB1aW50MzJfdCogcGl4ZWxzMzIgPSBzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHBp
eGVscyk7CiAgICAgdW5zaWduZWQgaW50IGdsRm9ybWF0LCBnbFR5cGU7CiAgICAgYm9vbCBzd2l6
emxlOwogICAgIGNvbnZlcnRGb3JtYXQobV9jb250ZXh0LCBtX2Zvcm1hdCwgJmdsRm9ybWF0LCAm
Z2xUeXBlLCAmc3dpenpsZSk7Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpOwogICAgIGlmIChzd2l6emxlKSB7CiAg
ICAgICAgIEFTU0VSVChnbEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBnbFR5
cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwogICAgICAgICAvLyBGSVhN
RTogIFRoaXMgY291bGQgdXNlIFBCTydzIHRvIHNhdmUgZG9pbmcgYW4gZXh0cmEgY29weSBoZXJl
LgotICAgICAgICBpbnQgc2l6ZSA9IG1fd2lkdGggKiBtX2hlaWdodDsKLSAgICAgICAgdW5zaWdu
ZWQqIHBpeGVsczMyID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQqPihwaXhlbHMpOwotICAgICAgICBP
d25BcnJheVB0cjx1bnNpZ25lZD4gYnVmKG5ldyB1bnNpZ25lZFtzaXplXSk7Ci0gICAgICAgIHVu
c2lnbmVkKiBidWZwdHIgPSBidWYuZ2V0KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBwaXhlbCA9IHBpeGVsczMyW2ldOwot
ICAgICAgICAgICAgYnVmcHRyW2ldID0gcGl4ZWwgJiAweEZGMDBGRjAwIHwgKChwaXhlbCAmIDB4
MDBGRjAwMDApID4+IDE2KSB8ICgocGl4ZWwgJiAweDAwMDAwMEZGKSA8PCAxNik7CisgICAgfQor
ICAgIE93bkFycmF5UHRyPHVpbnQzMl90PiB0ZW1wQnVmZihuZXcgdWludDMyX3RbbV90aWxlcy5t
YXhUZXh0dXJlU2l6ZSgpICogbV90aWxlcy5tYXhUZXh0dXJlU2l6ZSgpXSk7CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1fdGlsZXMubnVtVGlsZXMoKTsgaSsrKSB7CisgICAgICAgIEludFJl
Y3QgdGlsZUJvdW5kc1dpdGhCb3JkZXIgPSBtX3RpbGVzLnRpbGVCb3VuZHNXaXRoQm9yZGVyKGkp
OworCisgICAgICAgIHVpbnQzMl90KiB1cGxvYWRCdWZmID0gMDsKKyAgICAgICAgaWYgKHN3aXp6
bGUpIHsKKyAgICAgICAgICAgIHVwbG9hZEJ1ZmYgPSBjb3B5U3ViUmVjdDx0cnVlPigKKyAgICAg
ICAgICAgIHBpeGVsczMyLCB0aWxlQm91bmRzV2l0aEJvcmRlci54KCksIHRpbGVCb3VuZHNXaXRo
Qm9yZGVyLnkoKSwKKyAgICAgICAgICAgIHRlbXBCdWZmLmdldCgpLCB0aWxlQm91bmRzV2l0aEJv
cmRlci53aWR0aCgpLCB0aWxlQm91bmRzV2l0aEJvcmRlci5oZWlnaHQoKSwgbV90aWxlcy50b3Rh
bFNpemVYKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdXBsb2FkQnVmZiA9IGNv
cHlTdWJSZWN0PGZhbHNlPigKKyAgICAgICAgICAgIHBpeGVsczMyLCB0aWxlQm91bmRzV2l0aEJv
cmRlci54KCksIHRpbGVCb3VuZHNXaXRoQm9yZGVyLnkoKSwKKyAgICAgICAgICAgIHRlbXBCdWZm
LmdldCgpLCB0aWxlQm91bmRzV2l0aEJvcmRlci53aWR0aCgpLCB0aWxlQm91bmRzV2l0aEJvcmRl
ci5oZWlnaHQoKSwgbV90aWxlcy50b3RhbFNpemVYKCkpOwogICAgICAgICB9Ci0gICAgICAgIG1f
Y29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwg
MCwgMCwgbV93aWR0aCwgbV9oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIGJ1Zi5nZXQoKSk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQsIGdsRm9ybWF0LCBn
bFR5cGUsIHBpeGVscyk7CisKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90aWxlVGV4dHVyZUlkcy0+YXQoaSkpOworICAgICAg
ICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIDAsIDAsCisgICAgICAgICAgICB0aWxlQm91bmRzV2l0aEJvcmRlci53aWR0aCgpLAorICAg
ICAgICAgICAgdGlsZUJvdW5kc1dpdGhCb3JkZXIuaGVpZ2h0KCksIGdsRm9ybWF0LCBnbFR5cGUs
IHVwbG9hZEJ1ZmYpOworICAgIH0KIH0KIAotdm9pZCBHTEVTMlRleHR1cmU6OmJpbmQoKQordm9p
ZCBHTEVTMlRleHR1cmU6OmJpbmRUaWxlKGludCB0aWxlKQogewotICAgIG1fY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKKyAg
ICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBt
X3RpbGVUZXh0dXJlSWRzLT5hdCh0aWxlKSk7CiAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKICAgICBtX2NvbnRleHQt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwog
ICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6
Q0xBTVBfVE9fRURHRSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dMRVMyVGV4dHVyZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HTEVTMlRleHR1cmUuaAppbmRleCA0ZDM1MWNkZDM3ZDllMTlkZjVmNDhiYjk0YmVkNDc3M2I2
ODBlZDhjLi40M2E0OTU1N2M1NTFjMDE2ZTlmOTlhNjM5MjE3NWFkNmU4ZWJhY2IxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmgKQEAg
LTM1LDYgKzM1LDEwIEBACiAKICNpbmNsdWRlICJSZWZDb3VudGVkLmgiCiAjaW5jbHVkZSAiUmVm
UHRyLmgiCisjaW5jbHVkZSAiVGlsaW5nRGF0YS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CkBAIC00NCwxOCAr
NDgsMTYgQEAgcHVibGljOgogICAgIH5HTEVTMlRleHR1cmUoKTsKICAgICBlbnVtIEZvcm1hdCB7
IFJHQkE4LCBCR1JBOCB9OwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdMRVMyVGV4dHVyZT4gY3Jl
YXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwot
ICAgIHZvaWQgYmluZCgpOworICAgIHZvaWQgYmluZFRpbGUoaW50IHRpbGUpOwogICAgIHZvaWQg
bG9hZCh2b2lkKiBwaXhlbHMpOwogICAgIEZvcm1hdCBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBt
X2Zvcm1hdDsgfQotICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLSAg
ICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAgICBjb25zdCBUaWxp
bmdEYXRhJiB0aWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZXM7IH0KIHByaXZhdGU6Ci0gICAg
R0xFUzJUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgdW5zaWduZWQgdGV4dHVyZUlkLCBGb3Jt
YXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgR0xFUzJUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEKiwgUGFzc093blB0cjxWZWN0b3I8dW5zaWduZWQgaW50PiA+IHRpbGVUZXh0dXJlSWRz
LCBGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXhUZXh0dXJlU2l6
ZSk7CiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLSAgICB1bnNpZ25lZCBtX3Rl
eHR1cmVJZDsKICAgICBGb3JtYXQgbV9mb3JtYXQ7Ci0gICAgaW50IG1fd2lkdGg7Ci0gICAgaW50
IG1faGVpZ2h0OworICAgIFRpbGluZ0RhdGEgbV90aWxlczsKKyAgICBPd25QdHI8VmVjdG9yPHVu
c2lnbmVkIGludD4gPiBtX3RpbGVUZXh0dXJlSWRzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxpbmdEYXRhLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsaW5nRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzUy
Mjg4ZGNmNDE4YzllYzIyZmEyNmJmZmZjYjk1ZjQyNzI5NTQxNQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsaW5nRGF0YS5jcHAKQEAgLTAs
MCArMSwyMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRpbGluZ0RhdGEuaCIK
KworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
IDxhbGdvcml0aG0+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIGludCBjb21wdXRlTnVtVGlsZXMoaW50IG1heFRleHR1cmVTaXplLCBpbnQg
dG90YWxTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKQoreworICAgIHJldHVybiBtYXgoMSwgMSArICh0
b3RhbFNpemUgLSAxIC0gMiAqIGJvcmRlclRleGVscykgLyAobWF4VGV4dHVyZVNpemUgLSAyICog
Ym9yZGVyVGV4ZWxzKSk7Cit9CisKK1RpbGluZ0RhdGE6OlRpbGluZ0RhdGEoaW50IG1heFRleHR1
cmVTaXplLCBpbnQgdG90YWxTaXplWCwgaW50IHRvdGFsU2l6ZVksIGJvb2wgaGFzQm9yZGVyVGV4
ZWxzKQorICAgIDogbV9tYXhUZXh0dXJlU2l6ZShtYXhUZXh0dXJlU2l6ZSkKKyAgICAsIG1fdG90
YWxTaXplWCh0b3RhbFNpemVYKQorICAgICwgbV90b3RhbFNpemVZKHRvdGFsU2l6ZVkpCisgICAg
LCBtX2JvcmRlclRleGVscyhoYXNCb3JkZXJUZXhlbHMgPyAxIDogMCkKK3sKKyAgICBtX251bVRp
bGVzWCA9IGNvbXB1dGVOdW1UaWxlcyhtYXhUZXh0dXJlU2l6ZSwgbV90b3RhbFNpemVYLCBtX2Jv
cmRlclRleGVscyk7CisgICAgbV9udW1UaWxlc1kgPSBjb21wdXRlTnVtVGlsZXMobWF4VGV4dHVy
ZVNpemUsIG1fdG90YWxTaXplWSwgbV9ib3JkZXJUZXhlbHMpOworfQorCitpbnQgVGlsaW5nRGF0
YTo6dGlsZVhJbmRleEZyb21TcmNDb29yZChpbnQgc3JjUG9zKSBjb25zdAoreworICAgIGludCB4
ID0gKHNyY1BvcyAtIG1fYm9yZGVyVGV4ZWxzKSAvIChtX21heFRleHR1cmVTaXplIC0gMiAqIG1f
Ym9yZGVyVGV4ZWxzKTsKKyAgICByZXR1cm4gbWluKG1heCh4LCAwKSwgbnVtVGlsZXNYKCkgLSAx
KTsKK30KKworaW50IFRpbGluZ0RhdGE6OnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoaW50IHNyY1Bv
cykgY29uc3QKK3sKKyAgICBpbnQgeSA9IChzcmNQb3MgLSBtX2JvcmRlclRleGVscykgLyAobV9t
YXhUZXh0dXJlU2l6ZSAtIDIgKiBtX2JvcmRlclRleGVscyk7CisgICAgcmV0dXJuIG1pbihtYXgo
eSwgMCksIG51bVRpbGVzWSgpIC0gMSk7Cit9CisKK0ludFJlY3QgVGlsaW5nRGF0YTo6dGlsZUJv
dW5kcyhpbnQgdGlsZSkgY29uc3QKK3sKKyAgICBhc3NlcnRUaWxlKHRpbGUpOworICAgIGludCBp
eCA9IHRpbGVYSW5kZXgodGlsZSk7CisgICAgaW50IGl5ID0gdGlsZVlJbmRleCh0aWxlKTsKKyAg
ICBpbnQgeCA9IHRpbGVQb3NpdGlvblgoaXgpOworICAgIGludCB5ID0gdGlsZVBvc2l0aW9uWShp
eSk7CisgICAgaW50IHdpZHRoID0gdGlsZVNpemVYKGl4KTsKKyAgICBpbnQgaGVpZ2h0ID0gdGls
ZVNpemVZKGl5KTsKKyAgICBBU1NFUlQoeCA+PSAwICYmIHkgPj0gMCAmJiB3aWR0aCA+PSAwICYm
IGhlaWdodCA+PSAwKTsKKyAgICBBU1NFUlQoeCA8PSB0b3RhbFNpemVYKCkgJiYgeSA8PSB0b3Rh
bFNpemVZKCkpOworICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQor
CitJbnRSZWN0IFRpbGluZ0RhdGE6OnRpbGVCb3VuZHNXaXRoQm9yZGVyKGludCB0aWxlKSBjb25z
dAoreworICAgIEludFJlY3QgYm91bmRzID0gdGlsZUJvdW5kcyh0aWxlKTsKKworICAgIGlmICht
X2JvcmRlclRleGVscykgeworICAgICAgICBpbnQgeDEgPSBib3VuZHMueCgpOworICAgICAgICBp
bnQgeDIgPSBib3VuZHMucmlnaHQoKTsKKyAgICAgICAgaW50IHkxID0gYm91bmRzLnkoKTsKKyAg
ICAgICAgaW50IHkyID0gYm91bmRzLmJvdHRvbSgpOworCisgICAgICAgIGlmICh0aWxlWEluZGV4
KHRpbGUpID4gMCkKKyAgICAgICAgICAgIHgxLS07CisgICAgICAgIGlmICh0aWxlWEluZGV4KHRp
bGUpIDwgKG51bVRpbGVzWCgpIC0gMSkpCisgICAgICAgICAgICB4MisrOworICAgICAgICBpZiAo
dGlsZVlJbmRleCh0aWxlKSA+IDApCisgICAgICAgICAgICB5MS0tOworICAgICAgICBpZiAodGls
ZVlJbmRleCh0aWxlKSA8IChudW1UaWxlc1koKSAtIDEpKQorICAgICAgICAgICAgeTIrKzsKKwor
ICAgICAgICBib3VuZHMgPSBJbnRSZWN0KHgxLCB5MSwgeDIgLSB4MSwgeTIgLSB5MSk7CisgICAg
fQorCisgICAgcmV0dXJuIGJvdW5kczsKK30KKworRmxvYXRSZWN0IFRpbGluZ0RhdGE6OnRpbGVC
b3VuZHNOb3JtYWxpemVkKGludCB0aWxlKSBjb25zdAoreworICAgIGFzc2VydFRpbGUodGlsZSk7
CisgICAgRmxvYXRSZWN0IGJvdW5kcyh0aWxlQm91bmRzKHRpbGUpKTsKKyAgICBib3VuZHMuc2Nh
bGUoMS4wZiAvIG1fdG90YWxTaXplWCwgMS4wZiAvIG1fdG90YWxTaXplWSk7CisgICAgcmV0dXJu
IGJvdW5kczsKK30KKworaW50IFRpbGluZ0RhdGE6OnRpbGVQb3NpdGlvblgoaW50IHhJbmRleCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoeEluZGV4ID49IDAgJiYgeEluZGV4IDwgbnVtVGlsZXNYKCkp
OworCisgICAgaWYgKCF4SW5kZXgpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB0aWxl
UG9zaXRpb25YKHhJbmRleCAtIDEpICsgdGlsZVNpemVYKHhJbmRleCAtIDEpOworfQorCitpbnQg
VGlsaW5nRGF0YTo6dGlsZVBvc2l0aW9uWShpbnQgeUluZGV4KSBjb25zdAoreworICAgIEFTU0VS
VCh5SW5kZXggPj0gMCAmJiB5SW5kZXggPCBudW1UaWxlc1koKSk7CisKKyAgICBpZiAoIXlJbmRl
eCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRpbGVQb3NpdGlvblgoeUluZGV4IC0g
MSkgKyB0aWxlU2l6ZVkoeUluZGV4IC0gMSk7Cit9CisKK2ludCBUaWxpbmdEYXRhOjp0aWxlU2l6
ZVgoaW50IHhJbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoeEluZGV4ID49IDAgJiYgeEluZGV4
IDwgbnVtVGlsZXNYKCkpOworCisgICAgaW50IHNpemUgPSBtYXhUZXh0dXJlU2l6ZSgpOworICAg
IHNpemUgPSBtaW4oc2l6ZSwgdG90YWxTaXplWCgpKTsKKworICAgIGlmICgheEluZGV4ICYmIG1f
bnVtVGlsZXNYID09IDEpCisgICAgICAgIHJldHVybiBtX3RvdGFsU2l6ZVg7CisgICAgaWYgKCF4
SW5kZXggJiYgbV9udW1UaWxlc1ggPiAxKQorICAgICAgICByZXR1cm4gbV9tYXhUZXh0dXJlU2l6
ZSAtIG1fYm9yZGVyVGV4ZWxzOworICAgIGlmICh4SW5kZXggPCBudW1UaWxlc1goKSAtIDEpCisg
ICAgICAgIHJldHVybiBtX21heFRleHR1cmVTaXplIC0gMiAqIG1fYm9yZGVyVGV4ZWxzOworICAg
IGlmICh4SW5kZXggPT0gbnVtVGlsZXNYKCkgLSAxKQorICAgICAgICByZXR1cm4gbV90b3RhbFNp
emVYIC0gdGlsZVBvc2l0aW9uWCh4SW5kZXgpOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBUaWxpbmdEYXRhOjp0aWxlU2l6ZVkoaW50IHlJbmRl
eCkgY29uc3QKK3sKKyAgICBBU1NFUlQoeUluZGV4ID49IDAgJiYgeUluZGV4IDwgbnVtVGlsZXNZ
KCkpOworCisgICAgaW50IHNpemUgPSBtYXhUZXh0dXJlU2l6ZSgpOworICAgIHNpemUgPSBtaW4o
c2l6ZSwgdG90YWxTaXplWSgpKTsKKworICAgIGlmICgheUluZGV4ICYmIG1fbnVtVGlsZXNZID09
IDEpCisgICAgICAgIHJldHVybiBtX3RvdGFsU2l6ZVk7CisgICAgaWYgKCF5SW5kZXggJiYgbV9u
dW1UaWxlc1kgPiAxKQorICAgICAgICByZXR1cm4gbV9tYXhUZXh0dXJlU2l6ZSAtIG1fYm9yZGVy
VGV4ZWxzOworICAgIGlmICh5SW5kZXggPCBudW1UaWxlc1koKSAtIDEpCisgICAgICAgIHJldHVy
biBtX21heFRleHR1cmVTaXplIC0gMiAqIG1fYm9yZGVyVGV4ZWxzOworICAgIGlmICh5SW5kZXgg
PT0gbnVtVGlsZXNZKCkgLSAxKQorICAgICAgICByZXR1cm4gbV90b3RhbFNpemVZIC0gdGlsZVBv
c2l0aW9uWSh5SW5kZXgpOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK0ludFJlY3QgVGlsaW5nRGF0YTo6b3ZlcmxhcHBlZFRpbGVJbmRpY2VzKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QgJnNyY1JlY3QpIGNvbnN0Cit7CisgICAgaW50IHggPSB0aWxlWElu
ZGV4RnJvbVNyY0Nvb3JkKHNyY1JlY3QueCgpKTsKKyAgICBpbnQgeSA9IHRpbGVZSW5kZXhGcm9t
U3JjQ29vcmQoc3JjUmVjdC55KCkpOworICAgIGludCByID0gdGlsZVhJbmRleEZyb21TcmNDb29y
ZChzcmNSZWN0LnJpZ2h0KCkpOworICAgIGludCBiID0gdGlsZVlJbmRleEZyb21TcmNDb29yZChz
cmNSZWN0LmJvdHRvbSgpKTsKKyAgICByZXR1cm4gSW50UmVjdCh4LCB5LCByIC0geCwgYiAtIHkp
OworfQorCitJbnRSZWN0IFRpbGluZ0RhdGE6Om92ZXJsYXBwZWRUaWxlSW5kaWNlcyhjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QgJnNyY1JlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIG92ZXJsYXBw
ZWRUaWxlSW5kaWNlcyhlbmNsb3NpbmdJbnRSZWN0KHNyY1JlY3QpKTsKK30KKwordm9pZCBUaWxp
bmdEYXRhOjppbnRlcnNlY3REcmF3UXVhZChjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwgaW50IHRpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZsb2F0UmVjdCogbmV3U3JjLCBGbG9hdFJlY3QqIG5ld0RzdCkgY29uc3QKK3sK
KyAgICAvLyBJbnRlcnNlY3Qgd2l0aCB0aWxlCisgICAgRmxvYXRSZWN0IHRpbGVCb3VuZHMgPSB0
aGlzLT50aWxlQm91bmRzKHRpbGUpOworICAgIEZsb2F0UmVjdCBzcmNSZWN0SW50ZXJzZWN0ZWQg
PSBzcmNSZWN0OworICAgIHNyY1JlY3RJbnRlcnNlY3RlZC5pbnRlcnNlY3QodGlsZUJvdW5kcyk7
CisKKyAgICBpZiAoc3JjUmVjdEludGVyc2VjdGVkLmlzRW1wdHkoKSkgeworICAgICAgICAqbmV3
U3JjID0gKm5ld0RzdCA9IEZsb2F0UmVjdCgwLCAwLCAwLCAwKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGZsb2F0IHNyY1JlY3RJbnRlcnNlY3RlZE5vcm1YID0gKHNyY1JlY3RJbnRl
cnNlY3RlZC54KCkgLSBzcmNSZWN0LngoKSkgLyBzcmNSZWN0LndpZHRoKCk7CisgICAgZmxvYXQg
c3JjUmVjdEludGVyc2VjdGVkTm9ybVkgPSAoc3JjUmVjdEludGVyc2VjdGVkLnkoKSAtIHNyY1Jl
Y3QueSgpKSAvIHNyY1JlY3QuaGVpZ2h0KCk7CisgICAgZmxvYXQgc3JjUmVjdEludGVyc2VjdGVk
Tm9ybVcgPSBzcmNSZWN0SW50ZXJzZWN0ZWQud2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgoKTsKKyAg
ICBmbG9hdCBzcmNSZWN0SW50ZXJzZWN0ZWROb3JtSCA9IHNyY1JlY3RJbnRlcnNlY3RlZC5oZWln
aHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCk7CisKKyAgICAqbmV3U3JjID0gc3JjUmVjdEludGVyc2Vj
dGVkOworICAgIG5ld1NyYy0+bW92ZSgKKyAgICAgICAgLXRpbGVCb3VuZHMueCgpICsgKCh0aWxl
WEluZGV4KHRpbGUpID4gMCkgPyBtX2JvcmRlclRleGVscyA6IDApLAorICAgICAgICAtdGlsZUJv
dW5kcy55KCkgKyAoKHRpbGVZSW5kZXgodGlsZSkgPiAwKSA/IG1fYm9yZGVyVGV4ZWxzIDogMCkp
OworCisgICAgKm5ld0RzdCA9IEZsb2F0UmVjdCgKKyAgICAgICAgc3JjUmVjdEludGVyc2VjdGVk
Tm9ybVggKiBkc3RSZWN0LndpZHRoKCkgKyBkc3RSZWN0LngoKSwKKyAgICAgICAgc3JjUmVjdElu
dGVyc2VjdGVkTm9ybVkgKiBkc3RSZWN0LmhlaWdodCgpICsgZHN0UmVjdC55KCksCisgICAgICAg
IHNyY1JlY3RJbnRlcnNlY3RlZE5vcm1XICogZHN0UmVjdC53aWR0aCgpLAorICAgICAgICBzcmNS
ZWN0SW50ZXJzZWN0ZWROb3JtSCAqIGRzdFJlY3QuaGVpZ2h0KCkpOworfQorCit9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGluZ0RhdGEuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsaW5nRGF0YS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmYxMmU2NmVkNzg2ZWZlYzA3MWFkYjc4N2IwZDQyN2I0ZDE0NjhmMmEKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGluZ0RhdGEuaApAQCAt
MCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgVGlsaW5nRGF0YV9oCisjZGVmaW5lIFRpbGluZ0RhdGFfaAor
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRmxvYXRSZWN0OworY2xhc3MgSW50UmVjdDsKKworY2xhc3MgVGlsaW5nRGF0YSA6IHB1
YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgVGlsaW5nRGF0YShpbnQgbWF4VGV4dHVy
ZVNpemUsIGludCB0b3RhbFNpemVYLCBpbnQgdG90YWxTaXplWSwgYm9vbCBoYXNCb3JkZXJUZXhl
bHMpOworICAgIGludCBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VGV4dHVy
ZVNpemU7IH0KKyAgICBpbnQgdG90YWxTaXplWCgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxTaXpl
WDsgfQorICAgIGludCB0b3RhbFNpemVZKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbFNpemVZOyB9
CisKKyAgICBpbnQgbnVtVGlsZXMoKSBjb25zdCB7IHJldHVybiBudW1UaWxlc1goKSAqIG51bVRp
bGVzWSgpOyB9CisgICAgaW50IG51bVRpbGVzWCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVGlsZXNY
OyB9CisgICAgaW50IG51bVRpbGVzWSgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVGlsZXNZOyB9Cisg
ICAgaW50IHRpbGVJbmRleChpbnQgeCwgaW50IHkpIGNvbnN0IHsgcmV0dXJuIHggKyB5ICogbnVt
VGlsZXNYKCk7IH0KKyAgICBpbnQgdGlsZVhJbmRleChpbnQgdGlsZSkgY29uc3QgeyBhc3NlcnRU
aWxlKHRpbGUpOyByZXR1cm4gdGlsZSAlIG51bVRpbGVzWCgpOyB9CisgICAgaW50IHRpbGVZSW5k
ZXgoaW50IHRpbGUpIGNvbnN0IHsgYXNzZXJ0VGlsZSh0aWxlKTsgcmV0dXJuIHRpbGUgLyBudW1U
aWxlc1goKTsgfQorICAgIGludCB0aWxlWEluZGV4RnJvbVNyY0Nvb3JkKGludCkgY29uc3Q7Cisg
ICAgaW50IHRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoaW50KSBjb25zdDsKKworICAgIEludFJlY3Qg
dGlsZUJvdW5kcyhpbnQgdGlsZSkgY29uc3Q7CisgICAgSW50UmVjdCB0aWxlQm91bmRzV2l0aEJv
cmRlcihpbnQgdGlsZSkgY29uc3Q7CisgICAgRmxvYXRSZWN0IHRpbGVCb3VuZHNOb3JtYWxpemVk
KGludCB0aWxlKSBjb25zdDsKKyAgICBpbnQgdGlsZVBvc2l0aW9uWChpbnQgeEluZGV4KSBjb25z
dDsKKyAgICBpbnQgdGlsZVBvc2l0aW9uWShpbnQgeUluZGV4KSBjb25zdDsKKyAgICBpbnQgdGls
ZVNpemVYKGludCB4SW5kZXgpIGNvbnN0OworICAgIGludCB0aWxlU2l6ZVkoaW50IHlJbmRleCkg
Y29uc3Q7CisgICAgSW50UmVjdCBvdmVybGFwcGVkVGlsZUluZGljZXMoY29uc3QgSW50UmVjdCYg
c3JjUmVjdCkgY29uc3Q7CisgICAgSW50UmVjdCBvdmVybGFwcGVkVGlsZUluZGljZXMoY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKKworICAgIC8vIEdpdmVuIGEgc2V0IG9mIHNvdXJj
ZSBhbmQgZGVzdGluYXRpb24gY29vcmRpbmF0ZXMgZm9yIGEgZHJhd2luZyBxdWFkCisgICAgLy8g
aW4gdGV4ZWwgdW5pdHMsIHJldHVybnMgYWRqdXN0ZWQgZGF0YSB0byByZW5kZXIganVzdCB0aGUg
b25lIHRpbGUuCisgICAgdm9pZCBpbnRlcnNlY3REcmF3UXVhZChjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgaW50IHRpbGUsIEZsb2F0UmVjdCogbmV3
U3JjLCBGbG9hdFJlY3QqIG5ld0RzdCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgVGlsaW5nRGF0
YSgpIDogbV9tYXhUZXh0dXJlU2l6ZSgwKSwgbV90b3RhbFNpemVYKDApLCBtX3RvdGFsU2l6ZVko
MCkge30KKyAgICB2b2lkIGFzc2VydFRpbGUoaW50IHRpbGUpIGNvbnN0IHsgQVNTRVJUKHRpbGUg
Pj0gMCAmJiB0aWxlIDwgbnVtVGlsZXMoKSk7IH0KKworICAgIGludCBtX21heFRleHR1cmVTaXpl
OworICAgIGludCBtX3RvdGFsU2l6ZVg7CisgICAgaW50IG1fdG90YWxTaXplWTsKKyAgICBpbnQg
bV9ib3JkZXJUZXhlbHM7IC8vIDAgb3IgMQorCisgICAgLy8gY29tcHV0ZWQgdmFsdWVzOgorICAg
IGludCBtX251bVRpbGVzWDsKKyAgICBpbnQgbV9udW1UaWxlc1k7Cit9OworCit9CisKKyNlbmRp
ZiAvLyBUaWxpbmdEYXRhX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9JbWFnZVNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
U2tpYS5jcHAKaW5kZXggMDI0YmY1MGRjMTMzM2EyMGFhMmRhYWUxYWM3ZTVhNGY1ZWVjMGUxMC4u
YjUxNGIxYTZiNjFiNWQ3MGNiZDg3N2NiM2IxMTY0YTNiZTFkNTE3YiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKQEAgLTQ2NSwxOCArNDY1LDE4IEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QsCiAgICAgaWYgKCFibSkKICAgICAgICAgcmV0dXJuOyAgLy8gSXQncyB0
b28gZWFybHkgYW5kIHdlIGRvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgogCi0jaWYgIFVTRShHTEVT
Ml9SRU5ERVJJTkcpCi0gICAgaWYgKGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSkg
ewotICAgICAgICBkcmF3Qml0bWFwR0xFUzIoY3R4dCwgYm0sIHNyY1JlY3QsIGRzdFJlY3QsIGNv
bG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgog
ICAgIEZsb2F0UmVjdCBub3JtRHN0UmVjdCA9IG5vcm1hbGl6ZVJlY3QoZHN0UmVjdCk7CiAgICAg
RmxvYXRSZWN0IG5vcm1TcmNSZWN0ID0gbm9ybWFsaXplUmVjdChzcmNSZWN0KTsKIAogICAgIGlm
IChub3JtU3JjUmVjdC5pc0VtcHR5KCkgfHwgbm9ybURzdFJlY3QuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47ICAvLyBOb3RoaW5nIHRvIGRyYXcuCiAKKyNpZiAgVVNFKEdMRVMyX1JFTkRFUklO
RykKKyAgICBpZiAoY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpKSB7CisgICAgICAg
IGRyYXdCaXRtYXBHTEVTMihjdHh0LCBibSwgbm9ybVNyY1JlY3QsIG5vcm1Ec3RSZWN0LCBjb2xv
clNwYWNlLCBjb21wb3NpdGVPcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKICAg
ICBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOwogCiAg
ICAgcGFpbnRTa0JpdG1hcChjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKSwKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGE0MzEzOWY5ZjIwOGNhZDZiMzcwZDgyODY1YzdiMjBhNDY4ZTdmOTYuLjUzYjA5OWRkMzU0ZWIx
NjIwNTE5MGY5N2E3N2Y4M2Y5MDgyMTIxZTcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtNjEsNiArNjEsMTcg
QEAKICAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgogICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3OjphZGRVc2VyU3R5bGVTaGVldCk6CiAKKzIwMTAtMDgtMTEgIFZpbmNlbnQgU2NoZWliICA8
c2NoZWliQGNocm9taXVtLm9yZz4KKworICAgICAgICBDYW52YXMyRCBkb2VzIG5vdCBzdXBwb3J0
IGltYWdlcyBsYXJnZXIgdGhhbiBzeXN0ZW0ncyBHUFUgbWF4IHRleHR1cmUgc2l6ZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM4NjQKKworICAgICAg
ICBVbml0IHRlc3RzIGZvciBUaWxpbmdEYXRhIGNsYXNzLgorCisgICAgICAgICogV2ViS2l0Lmd5
cDoKKyAgICAgICAgKiB0ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6VEVTVCk6CisKIDIwMTAtMDgtMTIgIEpvaG4gR3JlZ2cgIDxqb2hubnlnQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmlu
ZGV4IDEyM2FlZDU5OGVjMWY4NTA3YmEyOGM4ZDE0Y2Y5NGU4NTNjZDcyNDEuLjgyZGRiZjY2ODY4
OGU2NWQzZDQ4YjczMjYzZmZhNjFlODRiMGE4Y2YgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC03MDYsNiAr
NzA2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9LZXlib2FyZFRlc3QuY3Bw
JywKICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAogICAgICAg
ICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1J1bkFsbFRlc3RzLmNwcCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAndGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAg
ICAgXSwKICAgICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCiAgICAgICAgICAgICAg
ICAgICAgICAgICBbJ09TPT0id2luIicsIHsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsaW5nRGF0
YVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2MzU0MmJhNWQ2Mzg5OTFkYjQ2NWUzMDUwYTc1MTZiYmNm
YmFmYTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsaW5nRGF0
YVRlc3QuY3BwCkBAIC0wLDAgKzEsMjIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiR0xFUzJUZXh0dXJlLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK1RFU1QoVGlsaW5nRGF0YVRlc3QsIG51
bVRpbGVzX05vVGlsaW5nKQoreworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDE2LCAxNiwg
MTYsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgxNiwg
MTUsIDE1LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgx
NiwgMTYsIDE2LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0
YSgxNiwgIDEsIDE2LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGlu
Z0RhdGEoMTUsIDE1LCAxNSwgdHJ1ZSkubnVtVGlsZXMoKSk7Cit9CisKK1RFU1QoVGlsaW5nRGF0
YVRlc3QsIG51bVRpbGVzX1RpbGluZ05vQm9yZGVycykKK3sKKyAgICBFWFBFQ1RfRVEoMSwgVGls
aW5nRGF0YSg0LCAgMSwgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwg
VGlsaW5nRGF0YSg0LCAgMiwgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEo
MSwgVGlsaW5nRGF0YSg0LCAgMywgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1Rf
RVEoMSwgVGlsaW5nRGF0YSg0LCAgNCwgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBF
Q1RfRVEoMiwgVGlsaW5nRGF0YSg0LCAgNSwgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBF
WFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSg0LCAgNiwgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAg
ICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSg0LCAgNywgIDQsIGZhbHNlKS5udW1UaWxlcygpKTsK
KyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSg0LCAgOCwgIDQsIGZhbHNlKS5udW1UaWxlcygp
KTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg0LCAgOSwgIDQsIGZhbHNlKS5udW1UaWxl
cygpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg0LCAxMCwgIDQsIGZhbHNlKS5udW1U
aWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg0LCAxMSwgIDQsIGZhbHNlKS5u
dW1UaWxlcygpKTsKKworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICAxLCAgNSwgZmFs
c2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICAyLCAgNSwg
ZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICAzLCAg
NSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICA0
LCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUs
ICA1LCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRh
KDUsICA2LCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdE
YXRhKDUsICA3LCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxp
bmdEYXRhKDUsICA4LCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBU
aWxpbmdEYXRhKDUsICA5LCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgy
LCBUaWxpbmdEYXRhKDUsIDEwLCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9F
USgzLCBUaWxpbmdEYXRhKDUsIDExLCAgNSwgZmFsc2UpLm51bVRpbGVzKCkpOworCisgICAgRVhQ
RUNUX0VRKDEsIFRpbGluZ0RhdGEoMTYsIDE2LCAxNiwgZmFsc2UpLm51bVRpbGVzKCkpOworICAg
IEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDE3LCAxNiwgMTYsIGZhbHNlKS5udW1UaWxlcygpKTsK
KyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSgxNSwgMTYsIDE2LCBmYWxzZSkubnVtVGlsZXMo
KSk7CisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoOCwgMTYsIDE2LCBmYWxzZSkubnVtVGls
ZXMoKSk7CisgICAgRVhQRUNUX0VRKDYsIFRpbGluZ0RhdGEoOCwgMTcsIDE2LCBmYWxzZSkubnVt
VGlsZXMoKSk7Cit9CisKK1RFU1QoVGlsaW5nRGF0YVRlc3QsIG51bVRpbGVzX1RpbGluZ1dpdGhC
b3JkZXJzKQoreworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDMsICAxLCAgMywgdHJ1ZSku
bnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMywgIDIsICAzLCB0cnVl
KS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgzLCAgMywgIDMsIHRy
dWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDMsICA0LCAgMywg
dHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoMywgIDUsICAz
LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSgzLCAgNiwg
IDMsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDMsICA3
LCAgMywgdHJ1ZSkubnVtVGlsZXMoKSk7CisKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg0
LCAgMSwgIDQsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRh
KDQsICAyLCAgNCwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0Rh
dGEoNCwgIDMsICA0LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5n
RGF0YSg0LCAgNCwgIDQsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxp
bmdEYXRhKDQsICA1LCAgNCwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDIsIFRp
bGluZ0RhdGEoNCwgIDYsICA0LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMywg
VGlsaW5nRGF0YSg0LCAgNywgIDQsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgz
LCBUaWxpbmdEYXRhKDQsICA4LCAgNCwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VR
KDQsIFRpbGluZ0RhdGEoNCwgIDksICA0LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1Rf
RVEoNCwgVGlsaW5nRGF0YSg0LCAxMCwgIDQsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVD
VF9FUSg1LCBUaWxpbmdEYXRhKDQsIDExLCAgNCwgdHJ1ZSkubnVtVGlsZXMoKSk7CisKKyAgICBF
WFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg1LCAgMSwgIDUsIHRydWUpLm51bVRpbGVzKCkpOworICAg
IEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICAyLCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7Cisg
ICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoNSwgIDMsICA1LCB0cnVlKS5udW1UaWxlcygpKTsK
KyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg1LCAgNCwgIDUsIHRydWUpLm51bVRpbGVzKCkp
OworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICA1LCAgNSwgdHJ1ZSkubnVtVGlsZXMo
KSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNSwgIDYsICA1LCB0cnVlKS5udW1UaWxl
cygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSg1LCAgNywgIDUsIHRydWUpLm51bVRp
bGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDUsICA4LCAgNSwgdHJ1ZSkubnVt
VGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNSwgIDksICA1LCB0cnVlKS5u
dW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg1LCAxMCwgIDUsIHRydWUp
Lm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDUsIDExLCAgNSwgdHJ1
ZSkubnVtVGlsZXMoKSk7Cit9CisKK1RFU1QoVGlsaW5nRGF0YVRlc3QsIHRpbGVYSW5kZXhGcm9t
U3JjQ29vcmQpCit7CisgICAgRVhQRUNUX0VRKDAsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxz
ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCgwKSk7CisgICAgRVhQRUNUX0VRKDAsIFRpbGluZ0Rh
dGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCgxKSk7CisgICAgRVhQ
RUNUX0VRKDAsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmND
b29yZCgyKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSku
dGlsZVhJbmRleEZyb21TcmNDb29yZCgzKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEo
MywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCg0KSk7CisgICAgRVhQRUNU
X0VRKDEsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29y
ZCg1KSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGls
ZVhJbmRleEZyb21TcmNDb29yZCg2KSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoMywg
MTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCg3KSk7CisgICAgRVhQRUNUX0VR
KDIsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCg4
KSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVhJ
bmRleEZyb21TcmNDb29yZCg5KSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoMywgMTAs
IDEwLCBmYWxzZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCgxMCkpOworICAgIEVYUEVDVF9FUSgz
LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoMTEp
KTsKKworICAgIEVYUEVDVF9FUSgwLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJ
bmRleEZyb21TcmNDb29yZCgwKSk7CisgICAgRVhQRUNUX0VRKDAsIFRpbGluZ0RhdGEoMywgMTAs
IDEwLCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDEpKTsKKyAgICBFWFBFQ1RfRVEoMSwg
VGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoMikpOwor
ICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZy
b21TcmNDb29yZCgzKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0
cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDQpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5n
RGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoNSkpOworICAgIEVY
UEVDVF9FUSg1LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZyb21TcmND
b29yZCg2KSk7CisgICAgRVhQRUNUX0VRKDYsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50
aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDcpKTsKKyAgICBFWFBFQ1RfRVEoNywgVGlsaW5nRGF0YSgz
LCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoOCkpOworICAgIEVYUEVDVF9F
USg3LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCg5
KSk7CisgICAgRVhQRUNUX0VRKDcsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWElu
ZGV4RnJvbVNyY0Nvb3JkKDEwKSk7CisgICAgRVhQRUNUX0VRKDcsIFRpbGluZ0RhdGEoMywgMTAs
IDEwLCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDExKSk7Cit9CitURVNUKFRpbGluZ0Rh
dGFUZXN0LCB0aWxlWUluZGV4RnJvbVNyY0Nvb3JkKQoreworICAgIEVYUEVDVF9FUSgwLCBUaWxp
bmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoMCkpOworICAg
IEVYUEVDVF9FUSgwLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9t
U3JjQ29vcmQoMSkpOworICAgIEVYUEVDVF9FUSgwLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFs
c2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoMikpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdE
YXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoMykpOworICAgIEVY
UEVDVF9FUSgxLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3Jj
Q29vcmQoNCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2Up
LnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoNSkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRh
KDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoNikpOworICAgIEVYUEVD
VF9FUSgyLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29v
cmQoNykpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRp
bGVZSW5kZXhGcm9tU3JjQ29vcmQoOCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDMs
IDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoOSkpOworICAgIEVYUEVDVF9F
USgzLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQo
MTApKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxl
WUluZGV4RnJvbVNyY0Nvb3JkKDExKSk7CisKKyAgICBFWFBFQ1RfRVEoMCwgVGlsaW5nRGF0YSgz
LCAxMCwgMTAsIHRydWUpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoMCkpOworICAgIEVYUEVDVF9F
USgwLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCgx
KSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWUlu
ZGV4RnJvbVNyY0Nvb3JkKDIpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSgzLCAxMCwg
MTAsIHRydWUpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoMykpOworICAgIEVYUEVDVF9FUSgzLCBU
aWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCg0KSk7Cisg
ICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWUluZGV4RnJv
bVNyY0Nvb3JkKDUpKTsKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRy
dWUpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoNikpOworICAgIEVYUEVDVF9FUSg2LCBUaWxpbmdE
YXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCg3KSk7CisgICAgRVhQ
RUNUX0VRKDcsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nv
b3JkKDgpKTsKKyAgICBFWFBFQ1RfRVEoNywgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRp
bGVZSW5kZXhGcm9tU3JjQ29vcmQoOSkpOworICAgIEVYUEVDVF9FUSg3LCBUaWxpbmdEYXRhKDMs
IDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCgxMCkpOworICAgIEVYUEVDVF9F
USg3LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCgx
MSkpOworfQorCitURVNUKFRpbGluZ0RhdGFUZXN0LCB0aWxlU2l6ZVgpCit7CisgICAgRVhQRUNU
X0VRKDUsIFRpbGluZ0RhdGEoNSwgIDUsICA1LCBmYWxzZSkudGlsZVNpemVYKDApKTsKKyAgICBF
WFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSg1LCAgNSwgIDUsIHRydWUpLnRpbGVTaXplWCgwKSk7CisK
KyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSg1LCAgNiwgIDYsIGZhbHNlKS50aWxlU2l6ZVgo
MCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICA2LCAgNiwgZmFsc2UpLnRpbGVT
aXplWCgxKSk7CisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoNSwgIDYsICA2LCB0cnVlKS50
aWxlU2l6ZVgoMCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDUsICA2LCAgNiwgdHJ1
ZSkudGlsZVNpemVYKDEpKTsKKworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUsICA4LCAg
OCwgZmFsc2UpLnRpbGVTaXplWCgwKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNSwg
IDgsICA4LCBmYWxzZSkudGlsZVNpemVYKDEpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0
YSg1LCAgOCwgIDgsIHRydWUpLnRpbGVTaXplWCgwKSk7CisgICAgRVhQRUNUX0VRKDQsIFRpbGlu
Z0RhdGEoNSwgIDgsICA4LCB0cnVlKS50aWxlU2l6ZVgoMSkpOworCisgICAgRVhQRUNUX0VRKDUs
IFRpbGluZ0RhdGEoNSwgMTAsIDEwLCBmYWxzZSkudGlsZVNpemVYKDApKTsKKyAgICBFWFBFQ1Rf
RVEoNSwgVGlsaW5nRGF0YSg1LCAxMCwgMTAsIGZhbHNlKS50aWxlU2l6ZVgoMSkpOworICAgIEVY
UEVDVF9FUSg0LCBUaWxpbmdEYXRhKDUsIDEwLCAxMCwgdHJ1ZSkudGlsZVNpemVYKDApKTsKKyAg
ICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg1LCAxMCwgMTAsIHRydWUpLnRpbGVTaXplWCgxKSk7
CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNSwgMTAsIDEwLCB0cnVlKS50aWxlU2l6ZVgo
MikpOworCisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoNSwgMTEsIDExLCB0cnVlKS50aWxl
U2l6ZVgoMikpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDUsIDEyLCAxMiwgdHJ1ZSku
dGlsZVNpemVYKDIpKTsKK30KK1RFU1QoVGlsaW5nRGF0YVRlc3QsIHRpbGVTaXplWSkKK3sKKyAg
ICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSg1LCAgNSwgIDUsIGZhbHNlKS50aWxlU2l6ZVkoMCkp
OworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUsICA1LCAgNSwgdHJ1ZSkudGlsZVNpemVZ
KDApKTsKKworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUsICA2LCAgNiwgZmFsc2UpLnRp
bGVTaXplWSgwKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoNSwgIDYsICA2LCBmYWxz
ZSkudGlsZVNpemVZKDEpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSg1LCAgNiwgIDYs
IHRydWUpLnRpbGVTaXplWSgwKSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNSwgIDYs
ICA2LCB0cnVlKS50aWxlU2l6ZVkoMSkpOworCisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEo
NSwgIDgsICA4LCBmYWxzZSkudGlsZVNpemVZKDApKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5n
RGF0YSg1LCAgOCwgIDgsIGZhbHNlKS50aWxlU2l6ZVkoMSkpOworICAgIEVYUEVDVF9FUSg0LCBU
aWxpbmdEYXRhKDUsICA4LCAgOCwgdHJ1ZSkudGlsZVNpemVZKDApKTsKKyAgICBFWFBFQ1RfRVEo
NCwgVGlsaW5nRGF0YSg1LCAgOCwgIDgsIHRydWUpLnRpbGVTaXplWSgxKSk7CisKKyAgICBFWFBF
Q1RfRVEoNSwgVGlsaW5nRGF0YSg1LCAxMCwgMTAsIGZhbHNlKS50aWxlU2l6ZVkoMCkpOworICAg
IEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUsIDEwLCAxMCwgZmFsc2UpLnRpbGVTaXplWSgxKSk7
CisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoNSwgMTAsIDEwLCB0cnVlKS50aWxlU2l6ZVko
MCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDUsIDEwLCAxMCwgdHJ1ZSkudGlsZVNp
emVZKDEpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg1LCAxMCwgMTAsIHRydWUpLnRp
bGVTaXplWSgyKSk7CisKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSg1LCAxMSwgMTEsIHRy
dWUpLnRpbGVTaXplWSgyKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNSwgMTIsIDEy
LCB0cnVlKS50aWxlU2l6ZVkoMikpOworfQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64429</attachid>
            <date>2010-08-14 14:17:14 -0700</date>
            <delta_ts>2010-08-16 12:39:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43864-20100814141712.patch</filename>
            <type>text/plain</type>
            <size>43165</size>
            <attacher name="Vincent Scheib">scheib</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NGY2OWFmNjM5ODkzYzhjZDhiYmQyYzJkMGI1OTA2YjUzZDU2M2QxZi4uYmFkNWJhOGFhNTMyYTQz
NjUwMGVlNmQ0ZjU5NDk5NmY2NTEzN2NjZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMC0wOC0xMSAgVmlu
Y2VudCBTY2hlaWIgIDxzY2hlaWJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENhbnZhczJEIGRvZXMgbm90IHN1cHBvcnQgaW1h
Z2VzIGxhcmdlciB0aGFuIHN5c3RlbSdzIEdQVSBtYXggdGV4dHVyZSBzaXplCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mzg2NAorCisgICAgICAgIEEg
bmV3IGNsYXNzICJUaWxpbmdEYXRhIiBoYXMgYmVlbiBjcmVhdGVkIHRoYXQgcHJvdmlkZXMgbG9n
aWMgZm9yIAorICAgICAgICBzcGxpdHRpbmcgYSBsYXJnZSBpbWFnZSBpbnRvIGEgc2VyaWVzIG9m
IHNtYWxsZXIgdGlsZXMuCisgICAgICAgIAorICAgICAgICBHTEVTMlRleHR1cmUgYW5kIENMRVMy
Q2FudmFzIGFyZSBtb2RpZmllZCB0byB1c2UgdGhlIFRpbGluZ0RhdGEgdG8KKyAgICAgICAgc3Bs
aXQgaW1hZ2VzIG9uIHRleHR1cmUgdXBsb2FkIGFuZCByZW5kZXIgb25lIGxvZ2ljYWwgaW1hZ2Ug
YXMgbWFueSBzbWFsbGVyCisgICAgICAgIGltYWdlcy4KKworICAgICAgICBUaWxpbmdEYXRhIGlz
IHRlc3RlZCB2aWEgdW5pdCB0ZXN0cyBpbiBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsaW5nRGF0
YVRlc3QuY3BwCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dMRVMyQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4
dHVyZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRS
ZWN0VGlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52
YXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZU51bVRpbGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGluZ0RhdGE6OlRpbGluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0
YTo6dGlsZVhJbmRleEZyb21TcmNDb29yZCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRh
Ojp0aWxlWUluZGV4RnJvbVNyY0Nvb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6
OnRpbGVCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZUJvdW5kc1dp
dGhCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZUJvdW5kc05vcm1h
bGl6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZVBvc2l0aW9uWCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxlUG9zaXRpb25ZKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGluZ0RhdGE6OnRpbGVTaXplWCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdE
YXRhOjp0aWxlU2l6ZVkpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6b3ZlcmxhcHBl
ZFRpbGVJbmRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OmludGVyc2VjdERy
YXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyVGV4dHVyZTo6R0xFUzJUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdMRVMyVGV4dHVyZTo6fkdMRVMyVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3B5
U3ViUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OmxvYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6R0xFUzJUZXh0dXJlOjpiaW5kVGlsZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmg6CisgICAgICAgIChXZWJDb3JlOjpUaWxp
bmdEYXRhOjptYXhUZXh0dXJlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0
b3RhbFNpemVYKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OnRvdGFsU2l6ZVkpOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6bnVtVGlsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6VGlsaW5nRGF0YTo6bnVtVGlsZXNYKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6
Om51bVRpbGVzWSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxlSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZVhJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxpbmdEYXRhOjp0aWxlWUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0Rh
dGE6OlRpbGluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6YXNzZXJ0VGls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OnRpbGVzKToKKwogMjAxMC0wOC0x
MyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjY1MzMxLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA2OWYzZjk5N2I3MjAwOGQzMTdm
MTA4MmFiOTY5OTcyYTdmM2MwNTAzLi5iYjYyODk3OGUyMDE2NGFhZjg1MzI2MjkxNTMzZGM5YjM5
OWQ1MDZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtMjIzMiw2ICsyMjMyLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUljb24uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhTGludXguY3Bw
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxpbmdEYXRhLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGluZ0RhdGEuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc2Zvcm1MYXll
ckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAKaW5kZXggOGE5YmRlMWY4ZmM2NDQ2
ZTNjMjA0OTkxNTRiMDUyNGI4NjFhOTJiNS4uNTM0ZGU3YjNkOTcxMDkyMzFhMDQzNDU2MmNlZDJm
M2JmYjcyYTM4MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HTEVTMkNhbnZhcy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HTEVTMkNhbnZhcy5jcHAKQEAgLTM4LDE0ICszOCwxNSBAQAogI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgogI2luY2x1ZGUgIkdMRVMyVGV4dHVyZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAjaW5jbHVkZSAiVWludDE2QXJyYXkuaCIKIAogI2RlZmluZSBfVVNFX01BVEhfREVGSU5FUwog
I2luY2x1ZGUgPG1hdGguaD4KIAotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNs
dWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjIxLDcgKzIyMiw2IEBAIHZvaWQgR0xFUzJDYW52
YXM6OmRyYXdUZXh0dXJlZFJlY3QoR0xFUzJUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlCiAgICAgY2hlY2tHTEVycm9yKCJnbFVzZVByb2dyYW0iKTsKIAogICAgIG1fY29u
dGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwotICAgIHRl
eHR1cmUtPmJpbmQoKTsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKG1fdGV4U2FtcGxlckxv
Y2F0aW9uLCAwKTsKICAgICBjaGVja0dMRXJyb3IoImdsVW5pZm9ybTFpIik7CkBAIC0yMjksMjgg
KzIyOSw1MiBAQCB2b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KEdMRVMyVGV4dHVy
ZSogdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZQogICAgIG1fY29udGV4dC0+dW5pZm9y
bTFmKG1fdGV4QWxwaGFMb2NhdGlvbiwgYWxwaGEpOwogICAgIGNoZWNrR0xFcnJvcigiZ2xVbmlm
b3JtMWYgZm9yIGFscGhhIik7CiAKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIo
bV90ZXhQb3NpdGlvbkxvY2F0aW9uLCAzLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNl
LCAwLCAwKTsKKworICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV90ZXhQ
b3NpdGlvbkxvY2F0aW9uKTsKKworICAgIGNvbnN0IFRpbGluZ0RhdGEmIHRpbGVzID0gdGV4dHVy
ZS0+dGlsZXMoKTsKKyAgICBJbnRSZWN0IHRpbGVJZHhSZWN0ID0gdGlsZXMub3ZlcmxhcHBlZFRp
bGVJbmRpY2VzKHNyY1JlY3QpOworCisgICAgZm9yIChpbnQgeSA9IHRpbGVJZHhSZWN0LnkoKTsg
eSA8PSB0aWxlSWR4UmVjdC5ib3R0b20oKTsgeSsrKSB7CisgICAgICAgIGZvciAoaW50IHggPSB0
aWxlSWR4UmVjdC54KCk7IHggPD0gdGlsZUlkeFJlY3QucmlnaHQoKTsgeCsrKQorICAgICAgICAg
ICAgZHJhd1RleHR1cmVkUmVjdFRpbGUodGV4dHVyZSwgdGlsZXMudGlsZUluZGV4KHgsIHkpLCBz
cmNSZWN0LCBkc3RSZWN0LCB0cmFuc2Zvcm0pOworICAgIH0KK30KKwordm9pZCBHTEVTMkNhbnZh
czo6ZHJhd1RleHR1cmVkUmVjdFRpbGUoR0xFUzJUZXh0dXJlKiB0ZXh0dXJlLCBpbnQgdGlsZSwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIGlmIChkc3RSZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgVGlsaW5nRGF0YSYgdGlsZXMgPSB0ZXh0
dXJlLT50aWxlcygpOworCisgICAgdGV4dHVyZS0+YmluZFRpbGUodGlsZSk7CisKKyAgICBGbG9h
dFJlY3Qgc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZTsKKyAgICBGbG9hdFJlY3QgZHN0UmVjdElu
dGVyc2VjdGVkOworICAgIHRpbGVzLmludGVyc2VjdERyYXdRdWFkKHNyY1JlY3QsIGRzdFJlY3Qs
IHRpbGUsICZzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlLCAmZHN0UmVjdEludGVyc2VjdGVkKTsK
KworICAgIEludFJlY3QgdGlsZUJvdW5kc1dpdGhCb3JkZXIgPSB0aWxlcy50aWxlQm91bmRzV2l0
aEJvcmRlcih0aWxlKTsKKwogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9mbGlwTWF0cml4
KTsKICAgICBtYXRyaXgubXVsdExlZnQodHJhbnNmb3JtKTsKLSAgICBtYXRyaXgudHJhbnNsYXRl
KGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7Ci0gICAgbWF0cml4LnNjYWxlKGRzdFJlY3Qud2lk
dGgoKSwgZHN0UmVjdC5oZWlnaHQoKSk7CisgICAgbWF0cml4LnRyYW5zbGF0ZShkc3RSZWN0SW50
ZXJzZWN0ZWQueCgpLCBkc3RSZWN0SW50ZXJzZWN0ZWQueSgpKTsKKyAgICBtYXRyaXguc2NhbGUo
ZHN0UmVjdEludGVyc2VjdGVkLndpZHRoKCksIGRzdFJlY3RJbnRlcnNlY3RlZC5oZWlnaHQoKSk7
CiAgICAgZmxvYXQgbWF0WzldOwogICAgIGFmZmluZVRvM3gzKG1hdHJpeCwgbWF0KTsKICAgICBt
X2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobV90ZXhNYXRyaXhMb2NhdGlvbiwgZmFsc2UgLyp0
cmFuc3Bvc2UqLywgbWF0LCAxIC8qY291bnQqLyk7CiAgICAgY2hlY2tHTEVycm9yKCJnbFVuaWZv
cm1NYXRyaXgzZnYiKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSB0ZXhNYXRyaXg7Ci0gICAgdGV4
TWF0cml4LnNjYWxlKDEuMGYgLyB0ZXh0dXJlLT53aWR0aCgpLCAxLjBmIC8gdGV4dHVyZS0+aGVp
Z2h0KCkpOwotICAgIHRleE1hdHJpeC50cmFuc2xhdGUoc3JjUmVjdC54KCksIHNyY1JlY3QueSgp
KTsKLSAgICB0ZXhNYXRyaXguc2NhbGUoc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgp
KTsKKyAgICB0ZXhNYXRyaXguc2NhbGUoMS4wZiAvIHRpbGVCb3VuZHNXaXRoQm9yZGVyLndpZHRo
KCksIDEuMGYgLyB0aWxlQm91bmRzV2l0aEJvcmRlci5oZWlnaHQoKSk7CisgICAgdGV4TWF0cml4
LnRyYW5zbGF0ZShzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlLngoKSwgc3JjUmVjdENsaXBwZWRJ
blRpbGVTcGFjZS55KCkpOworICAgIHRleE1hdHJpeC5zY2FsZShzcmNSZWN0Q2xpcHBlZEluVGls
ZVNwYWNlLndpZHRoKCksIHNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2UuaGVpZ2h0KCkpOwogICAg
IGZsb2F0IHRleE1hdFs5XTsKICAgICBhZmZpbmVUbzN4Myh0ZXhNYXRyaXgsIHRleE1hdCk7CiAg
ICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KG1fdGV4VGV4TWF0cml4TG9jYXRpb24sIGZh
bHNlIC8qdHJhbnNwb3NlKi8sIHRleE1hdCwgMSAvKmNvdW50Ki8pOwogICAgIGNoZWNrR0xFcnJv
cigiZ2xVbmlmb3JtTWF0cml4M2Z2Iik7CiAKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBv
aW50ZXIobV90ZXhQb3NpdGlvbkxvY2F0aW9uLCAzLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQs
IGZhbHNlLCAwLCAwKTsKLQotICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
bV90ZXhQb3NpdGlvbkxvY2F0aW9uKTsKLQogICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzKEdy
YXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRVMsIDYsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9TSE9SVCwgMCk7CiAgICAgY2hlY2tHTEVycm9yKCJnbERyYXdFbGVtZW50cyIpOwogfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCmluZGV4
IGNlYTkwYWVhYWJiMjYxNDdmMWYyNDMyNjcxODA5MjVjYzhhYTczM2MuLjBhZDA3ZmNkYmZlZDk5
YWQ2ZWNkN2U1NzQ2MDAxZmJiYWRhZmJlN2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgKQEAgLTgxLDYgKzgxLDcgQEAgcHVibGljOgog
ICAgIEdMRVMyVGV4dHVyZSogZ2V0VGV4dHVyZShOYXRpdmVJbWFnZVB0cik7CiAKIHByaXZhdGU6
CisgICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0VGlsZShHTEVTMlRleHR1cmUqIHRleHR1cmUsIGlu
dCB0aWxlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgdm9pZCBhcHBseUNvbXBvc2l0ZU9wZXJh
dG9yKENvbXBvc2l0ZU9wZXJhdG9yKTsKICAgICB2b2lkIGNoZWNrR0xFcnJvcihjb25zdCBjaGFy
KiBoZWFkZXIpOwogICAgIHVuc2lnbmVkIGdldFF1YWRWZXJ0aWNlcygpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUuY3BwCmluZGV4IDhi
NzJhYTgxMjY4NmQwMjM5YTcwYmQ2YjYxZDgzZTVhNDNlZDA5NWQuLmFlMjMwZGIxOTIzYzI2NTk4
MWM3N2RjMTYwNzkwNjQ0NjQ1YjM5MjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5jcHAKQEAgLTM1LDIzICszNSwyNCBAQAogI2lu
Y2x1ZGUgIkdMRVMyVGV4dHVyZS5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
LQorI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1HTEVTMlRleHR1cmU6OkdMRVMyVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgdGV4dHVyZUlkLCBGb3JtYXQgZm9ybWF0LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpCisKK0dMRVMyVGV4dHVyZTo6R0xFUzJUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCBQYXNzT3duUHRyPFZlY3Rvcjx1bnNpZ25lZCBpbnQ+ID4g
dGlsZVRleHR1cmVJZHMsIEZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50
IG1heFRleHR1cmVTaXplKQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX3RleHR1
cmVJZCh0ZXh0dXJlSWQpCiAgICAgLCBtX2Zvcm1hdChmb3JtYXQpCi0gICAgLCBtX3dpZHRoKHdp
ZHRoKQotICAgICwgbV9oZWlnaHQoaGVpZ2h0KQorICAgICwgbV90aWxlcyhtYXhUZXh0dXJlU2l6
ZSwgd2lkdGgsIGhlaWdodCwgdHJ1ZSkKKyAgICAsIG1fdGlsZVRleHR1cmVJZHModGlsZVRleHR1
cmVJZHMpCiB7CiB9CiAKIEdMRVMyVGV4dHVyZTo6fkdMRVMyVGV4dHVyZSgpCiB7Ci0gICAgbV9j
b250ZXh0LT5kZWxldGVUZXh0dXJlKG1fdGV4dHVyZUlkKTsKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IG1fdGlsZVRleHR1cmVJZHMtPnNpemUoKTsgaSsrKQorICAgICAgICBtX2Nv
bnRleHQtPmRlbGV0ZVRleHR1cmUobV90aWxlVGV4dHVyZUlkcy0+YXQoaSkpOwogfQogCiBzdGF0
aWMgdm9pZCBjb252ZXJ0Rm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBHTEVTMlRl
eHR1cmU6OkZvcm1hdCBmb3JtYXQsIHVuc2lnbmVkIGludCogZ2xGb3JtYXQsIHVuc2lnbmVkIGlu
dCogZ2xUeXBlLCBib29sKiBzd2l6emxlKQpAQCAtODAsNTEgKzgxLDk2IEBAIHN0YXRpYyB2b2lk
IGNvbnZlcnRGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEdMRVMyVGV4dHVyZTo6
Rm9ybWF0IGZvcm1hCiAKIFBhc3NSZWZQdHI8R0xFUzJUZXh0dXJlPiBHTEVTMlRleHR1cmU6OmNy
ZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQogewotICAgIGludCBtYXg7Ci0gICAgY29udGV4dC0+Z2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtYXgpOwotICAgIGlmICh3aWR0
aCA+IG1heCB8fCBoZWlnaHQgPiBtYXgpIHsKLSAgICAgICAgQVNTRVJUKCEidGV4dHVyZSB0b28g
YmlnIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBpbnQgbWF4VGV4dHVyZVNpemUg
PSAwOworICAgIGNvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVY
VFVSRV9TSVpFLCAmbWF4VGV4dHVyZVNpemUpOwogCi0gICAgdW5zaWduZWQgdGV4dHVyZUlkID0g
Y29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOwotICAgIGlmICghdGV4dHVyZUlkKQotICAgICAgICBy
ZXR1cm4gMDsKKyAgICBUaWxpbmdEYXRhIHRpbGluZyhtYXhUZXh0dXJlU2l6ZSwgd2lkdGgsIGhl
aWdodCwgdHJ1ZSk7CisgICAgaW50IG51bVRpbGVzID0gdGlsaW5nLm51bVRpbGVzKCk7CisKKyAg
ICBPd25QdHI8VmVjdG9yPHVuc2lnbmVkIGludD4gPiB0ZXh0dXJlSWRzKG5ldyBWZWN0b3I8dW5z
aWduZWQgaW50PihudW1UaWxlcykpOworICAgIHRleHR1cmVJZHMtPmZpbGwoMCwgbnVtVGlsZXMp
OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1UaWxlczsgaSsrKSB7CisgICAgICAgIGlu
dCB0ZXh0dXJlSWQgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAgIGlmICghdGV4
dHVyZUlkKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVRpbGVzOyBpKysp
CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlVGV4dHVyZSh0ZXh0dXJlSWRzLT5hdChp
KSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICB0ZXh0dXJlSWRz
LT5hdChpKSA9IHRleHR1cmVJZDsKKworICAgICAgICBJbnRSZWN0IHRpbGVCb3VuZHNXaXRoQm9y
ZGVyID0gdGlsaW5nLnRpbGVCb3VuZHNXaXRoQm9yZGVyKGkpOwogCiAgICAgdW5zaWduZWQgaW50
IGdsRm9ybWF0LCBnbFR5cGU7CiAgICAgYm9vbCBzd2l6emxlOwogICAgIGNvbnZlcnRGb3JtYXQo
Y29udGV4dCwgZm9ybWF0LCAmZ2xGb3JtYXQsICZnbFR5cGUsICZzd2l6emxlKTsKICAgICBjb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlk
KTsKLSAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCAwLCBnbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgMCk7Cisg
ICAgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwg
Z2xGb3JtYXQsCisgICAgICAgICAgICB0aWxlQm91bmRzV2l0aEJvcmRlci53aWR0aCgpLAorICAg
ICAgICAgICAgdGlsZUJvdW5kc1dpdGhCb3JkZXIuaGVpZ2h0KCksCisgICAgICAgICAgICAwLCBn
bEZvcm1hdCwgZ2xUeXBlLCAwKTsKKyAgICB9CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHTEVT
MlRleHR1cmUoY29udGV4dCwgdGV4dHVyZUlkcy5sZWFrUHRyKCksIGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgbWF4VGV4dHVyZVNpemUpKTsKK30KIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgR0xF
UzJUZXh0dXJlKGNvbnRleHQsIHRleHR1cmVJZCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KSk7Cit0
ZW1wbGF0ZSA8Ym9vbCBzd2l6emxlPgorc3RhdGljIHVpbnQzMl90KiBjb3B5U3ViUmVjdCh1aW50
MzJfdCogc3JjLCBpbnQgc3JjWCwgaW50IHNyY1ksIHVpbnQzMl90KiBkc3QsIGludCB3aWR0aCwg
aW50IGhlaWdodCwgaW50IHNyY1N0cmlkZSkKK3sKKyAgICB1aW50MzJfdCogc3JjT2Zmc2V0ID0g
c3JjICsgc3JjWCArIHNyY1kgKiBzcmNTdHJpZGU7CisKKyAgICBpZiAoIXN3aXp6bGUgJiYgd2lk
dGggPT0gc3JjU3RyaWRlKQorICAgICAgICByZXR1cm4gc3JjT2Zmc2V0OworCisgICAgdWludDMy
X3QqIGRzdFBpeGVsID0gZHN0OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
IHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aCA7IHgrKykgeworICAgICAgICAg
ICAgdWludDMyX3QgcGl4ZWwgPSBzcmNPZmZzZXRbeCArIHkgKiBzcmNTdHJpZGVdOworICAgICAg
ICAgICAgaWYgKHN3aXp6bGUpCisgICAgICAgICAgICAgICAgKmRzdFBpeGVsID0gcGl4ZWwgJiAw
eEZGMDBGRjAwIHwgKChwaXhlbCAmIDB4MDBGRjAwMDApID4+IDE2KSB8ICgocGl4ZWwgJiAweDAw
MDAwMEZGKSA8PCAxNik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKmRzdFBp
eGVsID0gcGl4ZWw7CisgICAgICAgICAgICBkc3RQaXhlbCsrOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBkc3Q7CiB9CiAKIHZvaWQgR0xFUzJUZXh0dXJlOjpsb2FkKHZvaWQqIHBpeGVs
cykKIHsKKyAgICB1aW50MzJfdCogcGl4ZWxzMzIgPSBzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHBp
eGVscyk7CiAgICAgdW5zaWduZWQgaW50IGdsRm9ybWF0LCBnbFR5cGU7CiAgICAgYm9vbCBzd2l6
emxlOwogICAgIGNvbnZlcnRGb3JtYXQobV9jb250ZXh0LCBtX2Zvcm1hdCwgJmdsRm9ybWF0LCAm
Z2xUeXBlLCAmc3dpenpsZSk7Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpOwogICAgIGlmIChzd2l6emxlKSB7CiAg
ICAgICAgIEFTU0VSVChnbEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBnbFR5
cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwogICAgICAgICAvLyBGSVhN
RTogIFRoaXMgY291bGQgdXNlIFBCTydzIHRvIHNhdmUgZG9pbmcgYW4gZXh0cmEgY29weSBoZXJl
LgotICAgICAgICBpbnQgc2l6ZSA9IG1fd2lkdGggKiBtX2hlaWdodDsKLSAgICAgICAgdW5zaWdu
ZWQqIHBpeGVsczMyID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQqPihwaXhlbHMpOwotICAgICAgICBP
d25BcnJheVB0cjx1bnNpZ25lZD4gYnVmKG5ldyB1bnNpZ25lZFtzaXplXSk7Ci0gICAgICAgIHVu
c2lnbmVkKiBidWZwdHIgPSBidWYuZ2V0KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBwaXhlbCA9IHBpeGVsczMyW2ldOwot
ICAgICAgICAgICAgYnVmcHRyW2ldID0gcGl4ZWwgJiAweEZGMDBGRjAwIHwgKChwaXhlbCAmIDB4
MDBGRjAwMDApID4+IDE2KSB8ICgocGl4ZWwgJiAweDAwMDAwMEZGKSA8PCAxNik7CisgICAgfQor
ICAgIE93bkFycmF5UHRyPHVpbnQzMl90PiB0ZW1wQnVmZihuZXcgdWludDMyX3RbbV90aWxlcy5t
YXhUZXh0dXJlU2l6ZSgpICogbV90aWxlcy5tYXhUZXh0dXJlU2l6ZSgpXSk7CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1fdGlsZXMubnVtVGlsZXMoKTsgaSsrKSB7CisgICAgICAgIEludFJl
Y3QgdGlsZUJvdW5kc1dpdGhCb3JkZXIgPSBtX3RpbGVzLnRpbGVCb3VuZHNXaXRoQm9yZGVyKGkp
OworCisgICAgICAgIHVpbnQzMl90KiB1cGxvYWRCdWZmID0gMDsKKyAgICAgICAgaWYgKHN3aXp6
bGUpIHsKKyAgICAgICAgICAgIHVwbG9hZEJ1ZmYgPSBjb3B5U3ViUmVjdDx0cnVlPigKKyAgICAg
ICAgICAgIHBpeGVsczMyLCB0aWxlQm91bmRzV2l0aEJvcmRlci54KCksIHRpbGVCb3VuZHNXaXRo
Qm9yZGVyLnkoKSwKKyAgICAgICAgICAgIHRlbXBCdWZmLmdldCgpLCB0aWxlQm91bmRzV2l0aEJv
cmRlci53aWR0aCgpLCB0aWxlQm91bmRzV2l0aEJvcmRlci5oZWlnaHQoKSwgbV90aWxlcy50b3Rh
bFNpemVYKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdXBsb2FkQnVmZiA9IGNv
cHlTdWJSZWN0PGZhbHNlPigKKyAgICAgICAgICAgIHBpeGVsczMyLCB0aWxlQm91bmRzV2l0aEJv
cmRlci54KCksIHRpbGVCb3VuZHNXaXRoQm9yZGVyLnkoKSwKKyAgICAgICAgICAgIHRlbXBCdWZm
LmdldCgpLCB0aWxlQm91bmRzV2l0aEJvcmRlci53aWR0aCgpLCB0aWxlQm91bmRzV2l0aEJvcmRl
ci5oZWlnaHQoKSwgbV90aWxlcy50b3RhbFNpemVYKCkpOwogICAgICAgICB9Ci0gICAgICAgIG1f
Y29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwg
MCwgMCwgbV93aWR0aCwgbV9oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIGJ1Zi5nZXQoKSk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQsIGdsRm9ybWF0LCBn
bFR5cGUsIHBpeGVscyk7CisKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90aWxlVGV4dHVyZUlkcy0+YXQoaSkpOworICAgICAg
ICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIDAsIDAsCisgICAgICAgICAgICB0aWxlQm91bmRzV2l0aEJvcmRlci53aWR0aCgpLAorICAg
ICAgICAgICAgdGlsZUJvdW5kc1dpdGhCb3JkZXIuaGVpZ2h0KCksIGdsRm9ybWF0LCBnbFR5cGUs
IHVwbG9hZEJ1ZmYpOworICAgIH0KIH0KIAotdm9pZCBHTEVTMlRleHR1cmU6OmJpbmQoKQordm9p
ZCBHTEVTMlRleHR1cmU6OmJpbmRUaWxlKGludCB0aWxlKQogewotICAgIG1fY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKKyAg
ICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBt
X3RpbGVUZXh0dXJlSWRzLT5hdCh0aWxlKSk7CiAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKICAgICBtX2NvbnRleHQt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwog
ICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6
Q0xBTVBfVE9fRURHRSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dMRVMyVGV4dHVyZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HTEVTMlRleHR1cmUuaAppbmRleCA0ZDM1MWNkZDM3ZDllMTlkZjVmNDhiYjk0YmVkNDc3M2I2
ODBlZDhjLi40M2E0OTU1N2M1NTFjMDE2ZTlmOTlhNjM5MjE3NWFkNmU4ZWJhY2IxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmgKQEAg
LTM1LDYgKzM1LDEwIEBACiAKICNpbmNsdWRlICJSZWZDb3VudGVkLmgiCiAjaW5jbHVkZSAiUmVm
UHRyLmgiCisjaW5jbHVkZSAiVGlsaW5nRGF0YS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CkBAIC00NCwxOCAr
NDgsMTYgQEAgcHVibGljOgogICAgIH5HTEVTMlRleHR1cmUoKTsKICAgICBlbnVtIEZvcm1hdCB7
IFJHQkE4LCBCR1JBOCB9OwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdMRVMyVGV4dHVyZT4gY3Jl
YXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwot
ICAgIHZvaWQgYmluZCgpOworICAgIHZvaWQgYmluZFRpbGUoaW50IHRpbGUpOwogICAgIHZvaWQg
bG9hZCh2b2lkKiBwaXhlbHMpOwogICAgIEZvcm1hdCBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBt
X2Zvcm1hdDsgfQotICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLSAg
ICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAgICBjb25zdCBUaWxp
bmdEYXRhJiB0aWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZXM7IH0KIHByaXZhdGU6Ci0gICAg
R0xFUzJUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgdW5zaWduZWQgdGV4dHVyZUlkLCBGb3Jt
YXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgR0xFUzJUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEKiwgUGFzc093blB0cjxWZWN0b3I8dW5zaWduZWQgaW50PiA+IHRpbGVUZXh0dXJlSWRz
LCBGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXhUZXh0dXJlU2l6
ZSk7CiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLSAgICB1bnNpZ25lZCBtX3Rl
eHR1cmVJZDsKICAgICBGb3JtYXQgbV9mb3JtYXQ7Ci0gICAgaW50IG1fd2lkdGg7Ci0gICAgaW50
IG1faGVpZ2h0OworICAgIFRpbGluZ0RhdGEgbV90aWxlczsKKyAgICBPd25QdHI8VmVjdG9yPHVu
c2lnbmVkIGludD4gPiBtX3RpbGVUZXh0dXJlSWRzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxpbmdEYXRhLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsaW5nRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzUy
Mjg4ZGNmNDE4YzllYzIyZmEyNmJmZmZjYjk1ZjQyNzI5NTQxNQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsaW5nRGF0YS5jcHAKQEAgLTAs
MCArMSwyMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRpbGluZ0RhdGEuaCIK
KworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
IDxhbGdvcml0aG0+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIGludCBjb21wdXRlTnVtVGlsZXMoaW50IG1heFRleHR1cmVTaXplLCBpbnQg
dG90YWxTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKQoreworICAgIHJldHVybiBtYXgoMSwgMSArICh0
b3RhbFNpemUgLSAxIC0gMiAqIGJvcmRlclRleGVscykgLyAobWF4VGV4dHVyZVNpemUgLSAyICog
Ym9yZGVyVGV4ZWxzKSk7Cit9CisKK1RpbGluZ0RhdGE6OlRpbGluZ0RhdGEoaW50IG1heFRleHR1
cmVTaXplLCBpbnQgdG90YWxTaXplWCwgaW50IHRvdGFsU2l6ZVksIGJvb2wgaGFzQm9yZGVyVGV4
ZWxzKQorICAgIDogbV9tYXhUZXh0dXJlU2l6ZShtYXhUZXh0dXJlU2l6ZSkKKyAgICAsIG1fdG90
YWxTaXplWCh0b3RhbFNpemVYKQorICAgICwgbV90b3RhbFNpemVZKHRvdGFsU2l6ZVkpCisgICAg
LCBtX2JvcmRlclRleGVscyhoYXNCb3JkZXJUZXhlbHMgPyAxIDogMCkKK3sKKyAgICBtX251bVRp
bGVzWCA9IGNvbXB1dGVOdW1UaWxlcyhtYXhUZXh0dXJlU2l6ZSwgbV90b3RhbFNpemVYLCBtX2Jv
cmRlclRleGVscyk7CisgICAgbV9udW1UaWxlc1kgPSBjb21wdXRlTnVtVGlsZXMobWF4VGV4dHVy
ZVNpemUsIG1fdG90YWxTaXplWSwgbV9ib3JkZXJUZXhlbHMpOworfQorCitpbnQgVGlsaW5nRGF0
YTo6dGlsZVhJbmRleEZyb21TcmNDb29yZChpbnQgc3JjUG9zKSBjb25zdAoreworICAgIGludCB4
ID0gKHNyY1BvcyAtIG1fYm9yZGVyVGV4ZWxzKSAvIChtX21heFRleHR1cmVTaXplIC0gMiAqIG1f
Ym9yZGVyVGV4ZWxzKTsKKyAgICByZXR1cm4gbWluKG1heCh4LCAwKSwgbnVtVGlsZXNYKCkgLSAx
KTsKK30KKworaW50IFRpbGluZ0RhdGE6OnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoaW50IHNyY1Bv
cykgY29uc3QKK3sKKyAgICBpbnQgeSA9IChzcmNQb3MgLSBtX2JvcmRlclRleGVscykgLyAobV9t
YXhUZXh0dXJlU2l6ZSAtIDIgKiBtX2JvcmRlclRleGVscyk7CisgICAgcmV0dXJuIG1pbihtYXgo
eSwgMCksIG51bVRpbGVzWSgpIC0gMSk7Cit9CisKK0ludFJlY3QgVGlsaW5nRGF0YTo6dGlsZUJv
dW5kcyhpbnQgdGlsZSkgY29uc3QKK3sKKyAgICBhc3NlcnRUaWxlKHRpbGUpOworICAgIGludCBp
eCA9IHRpbGVYSW5kZXgodGlsZSk7CisgICAgaW50IGl5ID0gdGlsZVlJbmRleCh0aWxlKTsKKyAg
ICBpbnQgeCA9IHRpbGVQb3NpdGlvblgoaXgpOworICAgIGludCB5ID0gdGlsZVBvc2l0aW9uWShp
eSk7CisgICAgaW50IHdpZHRoID0gdGlsZVNpemVYKGl4KTsKKyAgICBpbnQgaGVpZ2h0ID0gdGls
ZVNpemVZKGl5KTsKKyAgICBBU1NFUlQoeCA+PSAwICYmIHkgPj0gMCAmJiB3aWR0aCA+PSAwICYm
IGhlaWdodCA+PSAwKTsKKyAgICBBU1NFUlQoeCA8PSB0b3RhbFNpemVYKCkgJiYgeSA8PSB0b3Rh
bFNpemVZKCkpOworICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQor
CitJbnRSZWN0IFRpbGluZ0RhdGE6OnRpbGVCb3VuZHNXaXRoQm9yZGVyKGludCB0aWxlKSBjb25z
dAoreworICAgIEludFJlY3QgYm91bmRzID0gdGlsZUJvdW5kcyh0aWxlKTsKKworICAgIGlmICht
X2JvcmRlclRleGVscykgeworICAgICAgICBpbnQgeDEgPSBib3VuZHMueCgpOworICAgICAgICBp
bnQgeDIgPSBib3VuZHMucmlnaHQoKTsKKyAgICAgICAgaW50IHkxID0gYm91bmRzLnkoKTsKKyAg
ICAgICAgaW50IHkyID0gYm91bmRzLmJvdHRvbSgpOworCisgICAgICAgIGlmICh0aWxlWEluZGV4
KHRpbGUpID4gMCkKKyAgICAgICAgICAgIHgxLS07CisgICAgICAgIGlmICh0aWxlWEluZGV4KHRp
bGUpIDwgKG51bVRpbGVzWCgpIC0gMSkpCisgICAgICAgICAgICB4MisrOworICAgICAgICBpZiAo
dGlsZVlJbmRleCh0aWxlKSA+IDApCisgICAgICAgICAgICB5MS0tOworICAgICAgICBpZiAodGls
ZVlJbmRleCh0aWxlKSA8IChudW1UaWxlc1koKSAtIDEpKQorICAgICAgICAgICAgeTIrKzsKKwor
ICAgICAgICBib3VuZHMgPSBJbnRSZWN0KHgxLCB5MSwgeDIgLSB4MSwgeTIgLSB5MSk7CisgICAg
fQorCisgICAgcmV0dXJuIGJvdW5kczsKK30KKworRmxvYXRSZWN0IFRpbGluZ0RhdGE6OnRpbGVC
b3VuZHNOb3JtYWxpemVkKGludCB0aWxlKSBjb25zdAoreworICAgIGFzc2VydFRpbGUodGlsZSk7
CisgICAgRmxvYXRSZWN0IGJvdW5kcyh0aWxlQm91bmRzKHRpbGUpKTsKKyAgICBib3VuZHMuc2Nh
bGUoMS4wZiAvIG1fdG90YWxTaXplWCwgMS4wZiAvIG1fdG90YWxTaXplWSk7CisgICAgcmV0dXJu
IGJvdW5kczsKK30KKworaW50IFRpbGluZ0RhdGE6OnRpbGVQb3NpdGlvblgoaW50IHhJbmRleCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoeEluZGV4ID49IDAgJiYgeEluZGV4IDwgbnVtVGlsZXNYKCkp
OworCisgICAgaWYgKCF4SW5kZXgpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB0aWxl
UG9zaXRpb25YKHhJbmRleCAtIDEpICsgdGlsZVNpemVYKHhJbmRleCAtIDEpOworfQorCitpbnQg
VGlsaW5nRGF0YTo6dGlsZVBvc2l0aW9uWShpbnQgeUluZGV4KSBjb25zdAoreworICAgIEFTU0VS
VCh5SW5kZXggPj0gMCAmJiB5SW5kZXggPCBudW1UaWxlc1koKSk7CisKKyAgICBpZiAoIXlJbmRl
eCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRpbGVQb3NpdGlvblgoeUluZGV4IC0g
MSkgKyB0aWxlU2l6ZVkoeUluZGV4IC0gMSk7Cit9CisKK2ludCBUaWxpbmdEYXRhOjp0aWxlU2l6
ZVgoaW50IHhJbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoeEluZGV4ID49IDAgJiYgeEluZGV4
IDwgbnVtVGlsZXNYKCkpOworCisgICAgaW50IHNpemUgPSBtYXhUZXh0dXJlU2l6ZSgpOworICAg
IHNpemUgPSBtaW4oc2l6ZSwgdG90YWxTaXplWCgpKTsKKworICAgIGlmICgheEluZGV4ICYmIG1f
bnVtVGlsZXNYID09IDEpCisgICAgICAgIHJldHVybiBtX3RvdGFsU2l6ZVg7CisgICAgaWYgKCF4
SW5kZXggJiYgbV9udW1UaWxlc1ggPiAxKQorICAgICAgICByZXR1cm4gbV9tYXhUZXh0dXJlU2l6
ZSAtIG1fYm9yZGVyVGV4ZWxzOworICAgIGlmICh4SW5kZXggPCBudW1UaWxlc1goKSAtIDEpCisg
ICAgICAgIHJldHVybiBtX21heFRleHR1cmVTaXplIC0gMiAqIG1fYm9yZGVyVGV4ZWxzOworICAg
IGlmICh4SW5kZXggPT0gbnVtVGlsZXNYKCkgLSAxKQorICAgICAgICByZXR1cm4gbV90b3RhbFNp
emVYIC0gdGlsZVBvc2l0aW9uWCh4SW5kZXgpOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBUaWxpbmdEYXRhOjp0aWxlU2l6ZVkoaW50IHlJbmRl
eCkgY29uc3QKK3sKKyAgICBBU1NFUlQoeUluZGV4ID49IDAgJiYgeUluZGV4IDwgbnVtVGlsZXNZ
KCkpOworCisgICAgaW50IHNpemUgPSBtYXhUZXh0dXJlU2l6ZSgpOworICAgIHNpemUgPSBtaW4o
c2l6ZSwgdG90YWxTaXplWSgpKTsKKworICAgIGlmICgheUluZGV4ICYmIG1fbnVtVGlsZXNZID09
IDEpCisgICAgICAgIHJldHVybiBtX3RvdGFsU2l6ZVk7CisgICAgaWYgKCF5SW5kZXggJiYgbV9u
dW1UaWxlc1kgPiAxKQorICAgICAgICByZXR1cm4gbV9tYXhUZXh0dXJlU2l6ZSAtIG1fYm9yZGVy
VGV4ZWxzOworICAgIGlmICh5SW5kZXggPCBudW1UaWxlc1koKSAtIDEpCisgICAgICAgIHJldHVy
biBtX21heFRleHR1cmVTaXplIC0gMiAqIG1fYm9yZGVyVGV4ZWxzOworICAgIGlmICh5SW5kZXgg
PT0gbnVtVGlsZXNZKCkgLSAxKQorICAgICAgICByZXR1cm4gbV90b3RhbFNpemVZIC0gdGlsZVBv
c2l0aW9uWSh5SW5kZXgpOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK0ludFJlY3QgVGlsaW5nRGF0YTo6b3ZlcmxhcHBlZFRpbGVJbmRpY2VzKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QgJnNyY1JlY3QpIGNvbnN0Cit7CisgICAgaW50IHggPSB0aWxlWElu
ZGV4RnJvbVNyY0Nvb3JkKHNyY1JlY3QueCgpKTsKKyAgICBpbnQgeSA9IHRpbGVZSW5kZXhGcm9t
U3JjQ29vcmQoc3JjUmVjdC55KCkpOworICAgIGludCByID0gdGlsZVhJbmRleEZyb21TcmNDb29y
ZChzcmNSZWN0LnJpZ2h0KCkpOworICAgIGludCBiID0gdGlsZVlJbmRleEZyb21TcmNDb29yZChz
cmNSZWN0LmJvdHRvbSgpKTsKKyAgICByZXR1cm4gSW50UmVjdCh4LCB5LCByIC0geCwgYiAtIHkp
OworfQorCitJbnRSZWN0IFRpbGluZ0RhdGE6Om92ZXJsYXBwZWRUaWxlSW5kaWNlcyhjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QgJnNyY1JlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIG92ZXJsYXBw
ZWRUaWxlSW5kaWNlcyhlbmNsb3NpbmdJbnRSZWN0KHNyY1JlY3QpKTsKK30KKwordm9pZCBUaWxp
bmdEYXRhOjppbnRlcnNlY3REcmF3UXVhZChjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwgaW50IHRpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZsb2F0UmVjdCogbmV3U3JjLCBGbG9hdFJlY3QqIG5ld0RzdCkgY29uc3QKK3sK
KyAgICAvLyBJbnRlcnNlY3Qgd2l0aCB0aWxlCisgICAgRmxvYXRSZWN0IHRpbGVCb3VuZHMgPSB0
aGlzLT50aWxlQm91bmRzKHRpbGUpOworICAgIEZsb2F0UmVjdCBzcmNSZWN0SW50ZXJzZWN0ZWQg
PSBzcmNSZWN0OworICAgIHNyY1JlY3RJbnRlcnNlY3RlZC5pbnRlcnNlY3QodGlsZUJvdW5kcyk7
CisKKyAgICBpZiAoc3JjUmVjdEludGVyc2VjdGVkLmlzRW1wdHkoKSkgeworICAgICAgICAqbmV3
U3JjID0gKm5ld0RzdCA9IEZsb2F0UmVjdCgwLCAwLCAwLCAwKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGZsb2F0IHNyY1JlY3RJbnRlcnNlY3RlZE5vcm1YID0gKHNyY1JlY3RJbnRl
cnNlY3RlZC54KCkgLSBzcmNSZWN0LngoKSkgLyBzcmNSZWN0LndpZHRoKCk7CisgICAgZmxvYXQg
c3JjUmVjdEludGVyc2VjdGVkTm9ybVkgPSAoc3JjUmVjdEludGVyc2VjdGVkLnkoKSAtIHNyY1Jl
Y3QueSgpKSAvIHNyY1JlY3QuaGVpZ2h0KCk7CisgICAgZmxvYXQgc3JjUmVjdEludGVyc2VjdGVk
Tm9ybVcgPSBzcmNSZWN0SW50ZXJzZWN0ZWQud2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgoKTsKKyAg
ICBmbG9hdCBzcmNSZWN0SW50ZXJzZWN0ZWROb3JtSCA9IHNyY1JlY3RJbnRlcnNlY3RlZC5oZWln
aHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCk7CisKKyAgICAqbmV3U3JjID0gc3JjUmVjdEludGVyc2Vj
dGVkOworICAgIG5ld1NyYy0+bW92ZSgKKyAgICAgICAgLXRpbGVCb3VuZHMueCgpICsgKCh0aWxl
WEluZGV4KHRpbGUpID4gMCkgPyBtX2JvcmRlclRleGVscyA6IDApLAorICAgICAgICAtdGlsZUJv
dW5kcy55KCkgKyAoKHRpbGVZSW5kZXgodGlsZSkgPiAwKSA/IG1fYm9yZGVyVGV4ZWxzIDogMCkp
OworCisgICAgKm5ld0RzdCA9IEZsb2F0UmVjdCgKKyAgICAgICAgc3JjUmVjdEludGVyc2VjdGVk
Tm9ybVggKiBkc3RSZWN0LndpZHRoKCkgKyBkc3RSZWN0LngoKSwKKyAgICAgICAgc3JjUmVjdElu
dGVyc2VjdGVkTm9ybVkgKiBkc3RSZWN0LmhlaWdodCgpICsgZHN0UmVjdC55KCksCisgICAgICAg
IHNyY1JlY3RJbnRlcnNlY3RlZE5vcm1XICogZHN0UmVjdC53aWR0aCgpLAorICAgICAgICBzcmNS
ZWN0SW50ZXJzZWN0ZWROb3JtSCAqIGRzdFJlY3QuaGVpZ2h0KCkpOworfQorCit9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGluZ0RhdGEuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsaW5nRGF0YS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmYxMmU2NmVkNzg2ZWZlYzA3MWFkYjc4N2IwZDQyN2I0ZDE0NjhmMmEKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGluZ0RhdGEuaApAQCAt
MCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgVGlsaW5nRGF0YV9oCisjZGVmaW5lIFRpbGluZ0RhdGFfaAor
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRmxvYXRSZWN0OworY2xhc3MgSW50UmVjdDsKKworY2xhc3MgVGlsaW5nRGF0YSA6IHB1
YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgVGlsaW5nRGF0YShpbnQgbWF4VGV4dHVy
ZVNpemUsIGludCB0b3RhbFNpemVYLCBpbnQgdG90YWxTaXplWSwgYm9vbCBoYXNCb3JkZXJUZXhl
bHMpOworICAgIGludCBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VGV4dHVy
ZVNpemU7IH0KKyAgICBpbnQgdG90YWxTaXplWCgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxTaXpl
WDsgfQorICAgIGludCB0b3RhbFNpemVZKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbFNpemVZOyB9
CisKKyAgICBpbnQgbnVtVGlsZXMoKSBjb25zdCB7IHJldHVybiBudW1UaWxlc1goKSAqIG51bVRp
bGVzWSgpOyB9CisgICAgaW50IG51bVRpbGVzWCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVGlsZXNY
OyB9CisgICAgaW50IG51bVRpbGVzWSgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVGlsZXNZOyB9Cisg
ICAgaW50IHRpbGVJbmRleChpbnQgeCwgaW50IHkpIGNvbnN0IHsgcmV0dXJuIHggKyB5ICogbnVt
VGlsZXNYKCk7IH0KKyAgICBpbnQgdGlsZVhJbmRleChpbnQgdGlsZSkgY29uc3QgeyBhc3NlcnRU
aWxlKHRpbGUpOyByZXR1cm4gdGlsZSAlIG51bVRpbGVzWCgpOyB9CisgICAgaW50IHRpbGVZSW5k
ZXgoaW50IHRpbGUpIGNvbnN0IHsgYXNzZXJ0VGlsZSh0aWxlKTsgcmV0dXJuIHRpbGUgLyBudW1U
aWxlc1goKTsgfQorICAgIGludCB0aWxlWEluZGV4RnJvbVNyY0Nvb3JkKGludCkgY29uc3Q7Cisg
ICAgaW50IHRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoaW50KSBjb25zdDsKKworICAgIEludFJlY3Qg
dGlsZUJvdW5kcyhpbnQgdGlsZSkgY29uc3Q7CisgICAgSW50UmVjdCB0aWxlQm91bmRzV2l0aEJv
cmRlcihpbnQgdGlsZSkgY29uc3Q7CisgICAgRmxvYXRSZWN0IHRpbGVCb3VuZHNOb3JtYWxpemVk
KGludCB0aWxlKSBjb25zdDsKKyAgICBpbnQgdGlsZVBvc2l0aW9uWChpbnQgeEluZGV4KSBjb25z
dDsKKyAgICBpbnQgdGlsZVBvc2l0aW9uWShpbnQgeUluZGV4KSBjb25zdDsKKyAgICBpbnQgdGls
ZVNpemVYKGludCB4SW5kZXgpIGNvbnN0OworICAgIGludCB0aWxlU2l6ZVkoaW50IHlJbmRleCkg
Y29uc3Q7CisgICAgSW50UmVjdCBvdmVybGFwcGVkVGlsZUluZGljZXMoY29uc3QgSW50UmVjdCYg
c3JjUmVjdCkgY29uc3Q7CisgICAgSW50UmVjdCBvdmVybGFwcGVkVGlsZUluZGljZXMoY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKKworICAgIC8vIEdpdmVuIGEgc2V0IG9mIHNvdXJj
ZSBhbmQgZGVzdGluYXRpb24gY29vcmRpbmF0ZXMgZm9yIGEgZHJhd2luZyBxdWFkCisgICAgLy8g
aW4gdGV4ZWwgdW5pdHMsIHJldHVybnMgYWRqdXN0ZWQgZGF0YSB0byByZW5kZXIganVzdCB0aGUg
b25lIHRpbGUuCisgICAgdm9pZCBpbnRlcnNlY3REcmF3UXVhZChjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgaW50IHRpbGUsIEZsb2F0UmVjdCogbmV3
U3JjLCBGbG9hdFJlY3QqIG5ld0RzdCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgVGlsaW5nRGF0
YSgpIDogbV9tYXhUZXh0dXJlU2l6ZSgwKSwgbV90b3RhbFNpemVYKDApLCBtX3RvdGFsU2l6ZVko
MCkge30KKyAgICB2b2lkIGFzc2VydFRpbGUoaW50IHRpbGUpIGNvbnN0IHsgQVNTRVJUKHRpbGUg
Pj0gMCAmJiB0aWxlIDwgbnVtVGlsZXMoKSk7IH0KKworICAgIGludCBtX21heFRleHR1cmVTaXpl
OworICAgIGludCBtX3RvdGFsU2l6ZVg7CisgICAgaW50IG1fdG90YWxTaXplWTsKKyAgICBpbnQg
bV9ib3JkZXJUZXhlbHM7IC8vIDAgb3IgMQorCisgICAgLy8gY29tcHV0ZWQgdmFsdWVzOgorICAg
IGludCBtX251bVRpbGVzWDsKKyAgICBpbnQgbV9udW1UaWxlc1k7Cit9OworCit9CisKKyNlbmRp
ZiAvLyBUaWxpbmdEYXRhX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9JbWFnZVNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
U2tpYS5jcHAKaW5kZXggMDI0YmY1MGRjMTMzM2EyMGFhMmRhYWUxYWM3ZTVhNGY1ZWVjMGUxMC4u
YjUxNGIxYTZiNjFiNWQ3MGNiZDg3N2NiM2IxMTY0YTNiZTFkNTE3YiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKQEAgLTQ2NSwxOCArNDY1LDE4IEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QsCiAgICAgaWYgKCFibSkKICAgICAgICAgcmV0dXJuOyAgLy8gSXQncyB0
b28gZWFybHkgYW5kIHdlIGRvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgogCi0jaWYgIFVTRShHTEVT
Ml9SRU5ERVJJTkcpCi0gICAgaWYgKGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSkg
ewotICAgICAgICBkcmF3Qml0bWFwR0xFUzIoY3R4dCwgYm0sIHNyY1JlY3QsIGRzdFJlY3QsIGNv
bG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgog
ICAgIEZsb2F0UmVjdCBub3JtRHN0UmVjdCA9IG5vcm1hbGl6ZVJlY3QoZHN0UmVjdCk7CiAgICAg
RmxvYXRSZWN0IG5vcm1TcmNSZWN0ID0gbm9ybWFsaXplUmVjdChzcmNSZWN0KTsKIAogICAgIGlm
IChub3JtU3JjUmVjdC5pc0VtcHR5KCkgfHwgbm9ybURzdFJlY3QuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47ICAvLyBOb3RoaW5nIHRvIGRyYXcuCiAKKyNpZiAgVVNFKEdMRVMyX1JFTkRFUklO
RykKKyAgICBpZiAoY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpKSB7CisgICAgICAg
IGRyYXdCaXRtYXBHTEVTMihjdHh0LCBibSwgbm9ybVNyY1JlY3QsIG5vcm1Ec3RSZWN0LCBjb2xv
clNwYWNlLCBjb21wb3NpdGVPcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKICAg
ICBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOwogCiAg
ICAgcGFpbnRTa0JpdG1hcChjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKSwKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAppbmRl
eCBlNDJkZDcxNzgxOWE0ZTdjMTA3YzExN2Y3ZTI5ZTVlMjdlYzE1MDM2Li4xMTYxMjI0ZTc4ODVj
NzE3MjVlYmQ4OTE4NjJmYzZmNDg2ZDU1YTM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCkBAIC0zOSw2ICszOSw3
IEBACiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlNraWFVdGlscy5oIgorI2luY2x1ZGUgIlRpbGluZ0RhdGEu
aCIKIAogI2luY2x1ZGUgInNraWEvZXh0L2ltYWdlX29wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJz
a2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKQEAgLTc5Myw3ICs3OTQsNyBAQCB2b2lkIFBsYXRm
b3JtQ29udGV4dFNraWE6OnVwbG9hZFNvZnR3YXJlVG9IYXJkd2FyZShDb21wb3NpdGVPcGVyYXRv
ciBvcCkgY29uc3QKICAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gbV9jYW52YXMtPmdldERl
dmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwogICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jayhi
aXRtYXApOwogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9ncHVDYW52YXMtPmNv
bnRleHQoKTsKLSAgICBpZiAoIW1fdXBsb2FkVGV4dHVyZSB8fCBtX3VwbG9hZFRleHR1cmUtPndp
ZHRoKCkgPCBiaXRtYXAud2lkdGgoKSB8fCBtX3VwbG9hZFRleHR1cmUtPmhlaWdodCgpIDwgYml0
bWFwLmhlaWdodCgpKQorICAgIGlmICghbV91cGxvYWRUZXh0dXJlIHx8IG1fdXBsb2FkVGV4dHVy
ZS0+dGlsZXMoKS50b3RhbFNpemVYKCkgPCBiaXRtYXAud2lkdGgoKSB8fCBtX3VwbG9hZFRleHR1
cmUtPnRpbGVzKCkudG90YWxTaXplWSgpIDwgYml0bWFwLmhlaWdodCgpKQogICAgICAgICBtX3Vw
bG9hZFRleHR1cmUgPSBHTEVTMlRleHR1cmU6OmNyZWF0ZShjb250ZXh0LCBHTEVTMlRleHR1cmU6
OkJHUkE4LCBiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhlaWdodCgpKTsKICAgICBtX3VwbG9hZFRl
eHR1cmUtPmxvYWQoYml0bWFwLmdldFBpeGVscygpKTsKICAgICBJbnRSZWN0IHJlY3QoMCwgMCwg
Yml0bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBhNDMxMzlm
OWYyMDhjYWQ2YjM3MGQ4Mjg2NWM3YjIwYTQ2OGU3Zjk2Li41ZDM5Y2NmMDM2YWI5N2NhMzQ3Mjdk
MTM3OTlkZTc3MDhlNzk5YWZhIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0w
OC0xMSAgVmluY2VudCBTY2hlaWIgIDxzY2hlaWJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIENh
bnZhczJEIGRvZXMgbm90IHN1cHBvcnQgaW1hZ2VzIGxhcmdlciB0aGFuIHN5c3RlbSdzIEdQVSBt
YXggdGV4dHVyZSBzaXplCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00Mzg2NAorCisgICAgICAgIFVuaXQgdGVzdHMgZm9yIFRpbGluZ0RhdGEgY2xhc3Mu
CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHRlc3RzL1RpbGluZ0RhdGFUZXN0
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMC0wOC0xMyAgU2F0
aXNoIFNhbXBhdGggIDxzYXRpc2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEplcmVteSBPcmxvdy4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggMTIzYWVkNTk4ZWMxZjg1MDdiYTI4Yzhk
MTRjZjk0ZTg1M2NkNzI0MS4uODJkZGJmNjY4Njg4ZTY1ZDNkNDhiNzMyNjNmZmE2MWU4NGIwYThj
ZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAKQEAgLTcwNiw2ICs3MDYsNyBAQAogICAgICAgICAgICAgICAgICAg
ICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAg
J3Rlc3RzL0tVUkxUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvUnVu
QWxsVGVzdHMuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9UaWxpbmdEYXRh
VGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAn
Y29uZGl0aW9ucyc6IFsKICAgICAgICAgICAgICAgICAgICAgICAgIFsnT1M9PSJ3aW4iJywgewpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGluZ0RhdGFUZXN0LmNwcCBiL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA3
NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDYzNTQy
YmE1ZDYzODk5MWRiNDY1ZTMwNTBhNzUxNmJiY2ZiYWZhMgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAKQEAgLTAsMCArMSwyMjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJHTEVTMlRleHR1cmUuaCIKKyNpbmNsdWRl
IDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IHsKKworVEVTVChUaWxpbmdEYXRhVGVzdCwgbnVtVGlsZXNfTm9UaWxpbmcpCit7CisgICAgRVhQ
RUNUX0VRKDEsIFRpbGluZ0RhdGEoMTYsIDE2LCAxNiwgZmFsc2UpLm51bVRpbGVzKCkpOworICAg
IEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDE2LCAxNSwgMTUsIHRydWUpLm51bVRpbGVzKCkpOwor
ICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDE2LCAxNiwgMTYsIHRydWUpLm51bVRpbGVzKCkp
OworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDE2LCAgMSwgMTYsIGZhbHNlKS5udW1UaWxl
cygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgxNSwgMTUsIDE1LCB0cnVlKS5udW1U
aWxlcygpKTsKK30KKworVEVTVChUaWxpbmdEYXRhVGVzdCwgbnVtVGlsZXNfVGlsaW5nTm9Cb3Jk
ZXJzKQoreworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDQsICAxLCAgNCwgZmFsc2UpLm51
bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDQsICAyLCAgNCwgZmFsc2Up
Lm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDQsICAzLCAgNCwgZmFs
c2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDQsICA0LCAgNCwg
ZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDQsICA1LCAg
NCwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDQsICA2
LCAgNCwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDQs
ICA3LCAgNCwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRh
KDQsICA4LCAgNCwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdE
YXRhKDQsICA5LCAgNCwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxp
bmdEYXRhKDQsIDEwLCAgNCwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgzLCBU
aWxpbmdEYXRhKDQsIDExLCAgNCwgZmFsc2UpLm51bVRpbGVzKCkpOworCisgICAgRVhQRUNUX0VR
KDEsIFRpbGluZ0RhdGEoNSwgIDEsICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNU
X0VRKDEsIFRpbGluZ0RhdGEoNSwgIDIsICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQ
RUNUX0VRKDEsIFRpbGluZ0RhdGEoNSwgIDMsICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAg
RVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoNSwgIDQsICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7Cisg
ICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoNSwgIDUsICA1LCBmYWxzZSkubnVtVGlsZXMoKSk7
CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNSwgIDYsICA1LCBmYWxzZSkubnVtVGlsZXMo
KSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNSwgIDcsICA1LCBmYWxzZSkubnVtVGls
ZXMoKSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNSwgIDgsICA1LCBmYWxzZSkubnVt
VGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNSwgIDksICA1LCBmYWxzZSku
bnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNSwgMTAsICA1LCBmYWxz
ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNSwgMTEsICA1LCBm
YWxzZSkubnVtVGlsZXMoKSk7CisKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgxNiwgMTYs
IDE2LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMTcs
IDE2LCAxNiwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRh
KDE1LCAxNiwgMTYsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5n
RGF0YSg4LCAxNiwgMTYsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoNiwgVGls
aW5nRGF0YSg4LCAxNywgMTYsIGZhbHNlKS5udW1UaWxlcygpKTsKK30KKworVEVTVChUaWxpbmdE
YXRhVGVzdCwgbnVtVGlsZXNfVGlsaW5nV2l0aEJvcmRlcnMpCit7CisgICAgRVhQRUNUX0VRKDEs
IFRpbGluZ0RhdGEoMywgIDEsICAzLCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEo
MSwgVGlsaW5nRGF0YSgzLCAgMiwgIDMsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9F
USgxLCBUaWxpbmdEYXRhKDMsICAzLCAgMywgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNU
X0VRKDIsIFRpbGluZ0RhdGEoMywgIDQsICAzLCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBF
Q1RfRVEoMywgVGlsaW5nRGF0YSgzLCAgNSwgIDMsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVY
UEVDVF9FUSg0LCBUaWxpbmdEYXRhKDMsICA2LCAgMywgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAg
RVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoMywgIDcsICAzLCB0cnVlKS5udW1UaWxlcygpKTsKKwor
ICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDQsICAxLCAgNCwgdHJ1ZSkubnVtVGlsZXMoKSk7
CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoNCwgIDIsICA0LCB0cnVlKS5udW1UaWxlcygp
KTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg0LCAgMywgIDQsIHRydWUpLm51bVRpbGVz
KCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDQsICA0LCAgNCwgdHJ1ZSkubnVtVGls
ZXMoKSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNCwgIDUsICA0LCB0cnVlKS5udW1U
aWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSg0LCAgNiwgIDQsIHRydWUpLm51
bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDQsICA3LCAgNCwgdHJ1ZSku
bnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNCwgIDgsICA0LCB0cnVl
KS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSg0LCAgOSwgIDQsIHRy
dWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDQsIDEwLCAgNCwg
dHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoNCwgMTEsICA0
LCB0cnVlKS5udW1UaWxlcygpKTsKKworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICAx
LCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoNSwg
IDIsICA1LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg1
LCAgMywgIDUsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRh
KDUsICA0LCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0Rh
dGEoNSwgIDUsICA1LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5n
RGF0YSg1LCAgNiwgIDUsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxp
bmdEYXRhKDUsICA3LCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDIsIFRp
bGluZ0RhdGEoNSwgIDgsICA1LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMywg
VGlsaW5nRGF0YSg1LCAgOSwgIDUsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgz
LCBUaWxpbmdEYXRhKDUsIDEwLCAgNSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VR
KDMsIFRpbGluZ0RhdGEoNSwgMTEsICA1LCB0cnVlKS5udW1UaWxlcygpKTsKK30KKworVEVTVChU
aWxpbmdEYXRhVGVzdCwgdGlsZVhJbmRleEZyb21TcmNDb29yZCkKK3sKKyAgICBFWFBFQ1RfRVEo
MCwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDAp
KTsKKyAgICBFWFBFQ1RfRVEoMCwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWElu
ZGV4RnJvbVNyY0Nvb3JkKDEpKTsKKyAgICBFWFBFQ1RfRVEoMCwgVGlsaW5nRGF0YSgzLCAxMCwg
MTAsIGZhbHNlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDIpKTsKKyAgICBFWFBFQ1RfRVEoMSwg
VGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDMpKTsK
KyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWEluZGV4
RnJvbVNyY0Nvb3JkKDQpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgzLCAxMCwgMTAs
IGZhbHNlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDUpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGls
aW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDYpKTsKKyAg
ICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWEluZGV4RnJv
bVNyY0Nvb3JkKDcpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZh
bHNlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDgpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5n
RGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDkpKTsKKyAgICBF
WFBFQ1RfRVEoMywgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWEluZGV4RnJvbVNy
Y0Nvb3JkKDEwKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxz
ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCgxMSkpOworCisgICAgRVhQRUNUX0VRKDAsIFRpbGlu
Z0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDApKTsKKyAgICBF
WFBFQ1RfRVEoMCwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhGcm9tU3Jj
Q29vcmQoMSkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSku
dGlsZVhJbmRleEZyb21TcmNDb29yZCgyKSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEo
MywgMTAsIDEwLCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDMpKTsKKyAgICBFWFBFQ1Rf
RVEoMywgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQo
NCkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJ
bmRleEZyb21TcmNDb29yZCg1KSk7CisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoMywgMTAs
IDEwLCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDYpKTsKKyAgICBFWFBFQ1RfRVEoNiwg
VGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoNykpOwor
ICAgIEVYUEVDVF9FUSg3LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZy
b21TcmNDb29yZCg4KSk7CisgICAgRVhQRUNUX0VRKDcsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0
cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDkpKTsKKyAgICBFWFBFQ1RfRVEoNywgVGlsaW5n
RGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoMTApKTsKKyAgICBF
WFBFQ1RfRVEoNywgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhGcm9tU3Jj
Q29vcmQoMTEpKTsKK30KK1RFU1QoVGlsaW5nRGF0YVRlc3QsIHRpbGVZSW5kZXhGcm9tU3JjQ29v
cmQpCit7CisgICAgRVhQRUNUX0VRKDAsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGls
ZVlJbmRleEZyb21TcmNDb29yZCgwKSk7CisgICAgRVhQRUNUX0VRKDAsIFRpbGluZ0RhdGEoMywg
MTAsIDEwLCBmYWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCgxKSk7CisgICAgRVhQRUNUX0VR
KDAsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCgy
KSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVlJ
bmRleEZyb21TcmNDb29yZCgzKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMywgMTAs
IDEwLCBmYWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCg0KSk7CisgICAgRVhQRUNUX0VRKDEs
IFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCg1KSk7
CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVlJbmRl
eEZyb21TcmNDb29yZCg2KSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoMywgMTAsIDEw
LCBmYWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCg3KSk7CisgICAgRVhQRUNUX0VRKDIsIFRp
bGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCg4KSk7Cisg
ICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBmYWxzZSkudGlsZVlJbmRleEZy
b21TcmNDb29yZCg5KSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBm
YWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCgxMCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxp
bmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoMTEpKTsKKwor
ICAgIEVYUEVDVF9FUSgwLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZy
b21TcmNDb29yZCgwKSk7CisgICAgRVhQRUNUX0VRKDAsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0
cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDEpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5n
RGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoMikpOworICAgIEVY
UEVDVF9FUSgyLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmND
b29yZCgzKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50
aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDQpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSgz
LCAxMCwgMTAsIHRydWUpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoNSkpOworICAgIEVYUEVDVF9F
USg1LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCg2
KSk7CisgICAgRVhQRUNUX0VRKDYsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWUlu
ZGV4RnJvbVNyY0Nvb3JkKDcpKTsKKyAgICBFWFBFQ1RfRVEoNywgVGlsaW5nRGF0YSgzLCAxMCwg
MTAsIHRydWUpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoOCkpOworICAgIEVYUEVDVF9FUSg3LCBU
aWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCg5KSk7Cisg
ICAgRVhQRUNUX0VRKDcsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWUluZGV4RnJv
bVNyY0Nvb3JkKDEwKSk7CisgICAgRVhQRUNUX0VRKDcsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0
cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDExKSk7Cit9CisKK1RFU1QoVGlsaW5nRGF0YVRl
c3QsIHRpbGVTaXplWCkKK3sKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSg1LCAgNSwgIDUs
IGZhbHNlKS50aWxlU2l6ZVgoMCkpOworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUsICA1
LCAgNSwgdHJ1ZSkudGlsZVNpemVYKDApKTsKKworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRh
KDUsICA2LCAgNiwgZmFsc2UpLnRpbGVTaXplWCgwKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGlu
Z0RhdGEoNSwgIDYsICA2LCBmYWxzZSkudGlsZVNpemVYKDEpKTsKKyAgICBFWFBFQ1RfRVEoNCwg
VGlsaW5nRGF0YSg1LCAgNiwgIDYsIHRydWUpLnRpbGVTaXplWCgwKSk7CisgICAgRVhQRUNUX0VR
KDIsIFRpbGluZ0RhdGEoNSwgIDYsICA2LCB0cnVlKS50aWxlU2l6ZVgoMSkpOworCisgICAgRVhQ
RUNUX0VRKDUsIFRpbGluZ0RhdGEoNSwgIDgsICA4LCBmYWxzZSkudGlsZVNpemVYKDApKTsKKyAg
ICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg1LCAgOCwgIDgsIGZhbHNlKS50aWxlU2l6ZVgoMSkp
OworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDUsICA4LCAgOCwgdHJ1ZSkudGlsZVNpemVY
KDApKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSg1LCAgOCwgIDgsIHRydWUpLnRpbGVT
aXplWCgxKSk7CisKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSg1LCAxMCwgMTAsIGZhbHNl
KS50aWxlU2l6ZVgoMCkpOworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUsIDEwLCAxMCwg
ZmFsc2UpLnRpbGVTaXplWCgxKSk7CisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoNSwgMTAs
IDEwLCB0cnVlKS50aWxlU2l6ZVgoMCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDUs
IDEwLCAxMCwgdHJ1ZSkudGlsZVNpemVYKDEpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0
YSg1LCAxMCwgMTAsIHRydWUpLnRpbGVTaXplWCgyKSk7CisKKyAgICBFWFBFQ1RfRVEoNCwgVGls
aW5nRGF0YSg1LCAxMSwgMTEsIHRydWUpLnRpbGVTaXplWCgyKSk7CisgICAgRVhQRUNUX0VRKDMs
IFRpbGluZ0RhdGEoNSwgMTIsIDEyLCB0cnVlKS50aWxlU2l6ZVgoMikpOworfQorVEVTVChUaWxp
bmdEYXRhVGVzdCwgdGlsZVNpemVZKQoreworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUs
ICA1LCAgNSwgZmFsc2UpLnRpbGVTaXplWSgwKSk7CisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0Rh
dGEoNSwgIDUsICA1LCB0cnVlKS50aWxlU2l6ZVkoMCkpOworCisgICAgRVhQRUNUX0VRKDUsIFRp
bGluZ0RhdGEoNSwgIDYsICA2LCBmYWxzZSkudGlsZVNpemVZKDApKTsKKyAgICBFWFBFQ1RfRVEo
MSwgVGlsaW5nRGF0YSg1LCAgNiwgIDYsIGZhbHNlKS50aWxlU2l6ZVkoMSkpOworICAgIEVYUEVD
VF9FUSg0LCBUaWxpbmdEYXRhKDUsICA2LCAgNiwgdHJ1ZSkudGlsZVNpemVZKDApKTsKKyAgICBF
WFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSg1LCAgNiwgIDYsIHRydWUpLnRpbGVTaXplWSgxKSk7CisK
KyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSg1LCAgOCwgIDgsIGZhbHNlKS50aWxlU2l6ZVko
MCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDUsICA4LCAgOCwgZmFsc2UpLnRpbGVT
aXplWSgxKSk7CisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoNSwgIDgsICA4LCB0cnVlKS50
aWxlU2l6ZVkoMCkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDUsICA4LCAgOCwgdHJ1
ZSkudGlsZVNpemVZKDEpKTsKKworICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUsIDEwLCAx
MCwgZmFsc2UpLnRpbGVTaXplWSgwKSk7CisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoNSwg
MTAsIDEwLCBmYWxzZSkudGlsZVNpemVZKDEpKTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0
YSg1LCAxMCwgMTAsIHRydWUpLnRpbGVTaXplWSgwKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGlu
Z0RhdGEoNSwgMTAsIDEwLCB0cnVlKS50aWxlU2l6ZVkoMSkpOworICAgIEVYUEVDVF9FUSgzLCBU
aWxpbmdEYXRhKDUsIDEwLCAxMCwgdHJ1ZSkudGlsZVNpemVZKDIpKTsKKworICAgIEVYUEVDVF9F
USg0LCBUaWxpbmdEYXRhKDUsIDExLCAxMSwgdHJ1ZSkudGlsZVNpemVZKDIpKTsKKyAgICBFWFBF
Q1RfRVEoMywgVGlsaW5nRGF0YSg1LCAxMiwgMTIsIHRydWUpLnRpbGVTaXplWSgyKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64509</attachid>
            <date>2010-08-16 12:39:22 -0700</date>
            <delta_ts>2010-08-19 09:36:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43864-20100816123921.patch</filename>
            <type>text/plain</type>
            <size>43602</size>
            <attacher name="Vincent Scheib">scheib</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Yzk1ZmI0YWVjOTgwMzYxZGY1NGU0ZmRjYjg5NjUyOTJlZDBmNzJlYi4uMmNmZmM0OWY0ZjIwMzk1
NTRlMzMxNWRhMzczNzkxM2VkMjhlMTc3YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NCBAQAorMjAxMC0wOC0xNiAgVmlu
Y2VudCBTY2hlaWIgIDxzY2hlaWJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENhbnZhczJEIGRvZXMgbm90IHN1cHBvcnQgaW1h
Z2VzIGxhcmdlciB0aGFuIHN5c3RlbSdzIEdQVSBtYXggdGV4dHVyZSBzaXplCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mzg2NAorCisgICAgICAgIEEg
bmV3IGNsYXNzICJUaWxpbmdEYXRhIiBoYXMgYmVlbiBjcmVhdGVkIHRoYXQgcHJvdmlkZXMgbG9n
aWMgZm9yIAorICAgICAgICBzcGxpdHRpbmcgYSBsYXJnZSBpbWFnZSBpbnRvIGEgc2VyaWVzIG9m
IHNtYWxsZXIgdGlsZXMuCisgICAgICAgIAorICAgICAgICBHTEVTMlRleHR1cmUgYW5kIENMRVMy
Q2FudmFzIGFyZSBtb2RpZmllZCB0byB1c2UgdGhlIFRpbGluZ0RhdGEgdG8KKyAgICAgICAgc3Bs
aXQgaW1hZ2VzIG9uIHRleHR1cmUgdXBsb2FkIGFuZCByZW5kZXIgb25lIGxvZ2ljYWwgaW1hZ2Ug
YXMgbWFueSBzbWFsbGVyCisgICAgICAgIGltYWdlcy4KKworICAgICAgICBUaWxpbmdEYXRhIGlz
IHRlc3RlZCB2aWEgdW5pdCB0ZXN0cyBpbiBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsaW5nRGF0
YVRlc3QuY3BwCisgICAgICAgIAorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpH
TEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdFRpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyVGV4
dHVyZTo6R0xFUzJUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyVGV4dHVyZTo6fkdM
RVMyVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb3B5U3ViUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMlRl
eHR1cmU6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJUZXh0dXJlOjpiaW5kVGlsZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpHTEVTMlRleHR1cmU6OnRpbGVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UaWxpbmdEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpjb21wdXRlTnVtVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6VGls
aW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxlWEluZGV4RnJvbVNy
Y0Nvb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OnRpbGVZSW5kZXhGcm9tU3Jj
Q29vcmQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZUJvdW5kcyk6CisgICAg
ICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxlQm91bmRzV2l0aEJvcmRlcik6CisgICAgICAg
IChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxlQm91bmRzTm9ybWFsaXplZCk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxlUG9zaXRpb25YKToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGluZ0RhdGE6OnRpbGVQb3NpdGlvblkpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6
dGlsZVNpemVYKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OnRpbGVTaXplWSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjpvdmVybGFwcGVkVGlsZUluZGljZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6aW50ZXJzZWN0RHJhd1F1YWQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGluZ0RhdGEuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpUaWxpbmdEYXRhOjptYXhUZXh0dXJlU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUaWxpbmdEYXRhOjp0b3RhbFNpemVYKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6
OnRvdGFsU2l6ZVkpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6bnVtVGlsZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6bnVtVGlsZXNYKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGluZ0RhdGE6Om51bVRpbGVzWSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRh
Ojp0aWxlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6dGlsZVhJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0aWxlWUluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGluZ0RhdGE6OlRpbGluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5n
RGF0YTo6YXNzZXJ0VGlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp1cGxvYWRTb2Z0d2FyZVRvSGFyZHdh
cmUpOgorCiAyMDEwLTA4LTEzICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9u
aGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUg
Q2hyaXN0aWFuc2VuIGFuZCBNYXJ0aW4gUm9iaW5zb24uCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDA4Yzk1ZjBjODNjN2MzZDJm
NTU2YWRiMTgwOWFiNjM1NTQzNjI2ODcuLmNkZTU5YmRmMzkyOWU5MGQxMjMwNTAyMmMxOTdhNDMw
ZDU2NTE0ZDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC0yMjM2LDYgKzIyMzYsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtSWNvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51eC5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGluZ0RhdGEu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsaW5nRGF0YS5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zZm9ybUxh
eWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UcmFuc2Zvcm1MYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAppbmRleCA4YTliZGUxZjhmYzY0
NDZlM2MyMDQ5OTE1NGIwNTI0Yjg2MWE5MmI1Li41MzRkZTdiM2Q5NzEwOTIzMWEwNDM0NTYyY2Vk
MmYzYmZiNzJhMzgzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dMRVMyQ2FudmFzLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dMRVMyQ2FudmFzLmNwcApAQCAtMzgsMTQgKzM4LDE1IEBACiAjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCiAjaW5jbHVkZSAiR0xFUzJUZXh0dXJlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKICNpbmNsdWRlICJVaW50MTZBcnJheS5oIgogCiAjZGVmaW5lIF9VU0VfTUFUSF9ERUZJTkVT
CiAjaW5jbHVkZSA8bWF0aC5oPgogCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2lu
Y2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yMjEsNyArMjIyLDYgQEAgdm9pZCBHTEVTMkNh
bnZhczo6ZHJhd1RleHR1cmVkUmVjdChHTEVTMlRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmUKICAgICBjaGVja0dMRXJyb3IoImdsVXNlUHJvZ3JhbSIpOwogCiAgICAgbV9j
b250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7Ci0gICAg
dGV4dHVyZS0+YmluZCgpOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMWkobV90ZXhTYW1wbGVy
TG9jYXRpb24sIDApOwogICAgIGNoZWNrR0xFcnJvcigiZ2xVbmlmb3JtMWkiKTsKQEAgLTIyOSwy
OCArMjI5LDUyIEBAIHZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QoR0xFUzJUZXh0
dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlCiAgICAgbV9jb250ZXh0LT51bmlm
b3JtMWYobV90ZXhBbHBoYUxvY2F0aW9uLCBhbHBoYSk7CiAgICAgY2hlY2tHTEVycm9yKCJnbFVu
aWZvcm0xZiBmb3IgYWxwaGEiKTsKIAorICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRl
cihtX3RleFBvc2l0aW9uTG9jYXRpb24sIDMsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFs
c2UsIDAsIDApOworCisgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3Rl
eFBvc2l0aW9uTG9jYXRpb24pOworCisgICAgY29uc3QgVGlsaW5nRGF0YSYgdGlsZXMgPSB0ZXh0
dXJlLT50aWxlcygpOworICAgIEludFJlY3QgdGlsZUlkeFJlY3QgPSB0aWxlcy5vdmVybGFwcGVk
VGlsZUluZGljZXMoc3JjUmVjdCk7CisKKyAgICBmb3IgKGludCB5ID0gdGlsZUlkeFJlY3QueSgp
OyB5IDw9IHRpbGVJZHhSZWN0LmJvdHRvbSgpOyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9
IHRpbGVJZHhSZWN0LngoKTsgeCA8PSB0aWxlSWR4UmVjdC5yaWdodCgpOyB4KyspCisgICAgICAg
ICAgICBkcmF3VGV4dHVyZWRSZWN0VGlsZSh0ZXh0dXJlLCB0aWxlcy50aWxlSW5kZXgoeCwgeSks
IHNyY1JlY3QsIGRzdFJlY3QsIHRyYW5zZm9ybSk7CisgICAgfQorfQorCit2b2lkIEdMRVMyQ2Fu
dmFzOjpkcmF3VGV4dHVyZWRSZWN0VGlsZShHTEVTMlRleHR1cmUqIHRleHR1cmUsIGludCB0aWxl
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7CisgICAgaWYgKGRzdFJlY3QuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBUaWxpbmdEYXRhJiB0aWxlcyA9IHRl
eHR1cmUtPnRpbGVzKCk7CisKKyAgICB0ZXh0dXJlLT5iaW5kVGlsZSh0aWxlKTsKKworICAgIEZs
b2F0UmVjdCBzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlOworICAgIEZsb2F0UmVjdCBkc3RSZWN0
SW50ZXJzZWN0ZWQ7CisgICAgdGlsZXMuaW50ZXJzZWN0RHJhd1F1YWQoc3JjUmVjdCwgZHN0UmVj
dCwgdGlsZSwgJnNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2UsICZkc3RSZWN0SW50ZXJzZWN0ZWQp
OworCisgICAgSW50UmVjdCB0aWxlQm91bmRzV2l0aEJvcmRlciA9IHRpbGVzLnRpbGVCb3VuZHNX
aXRoQm9yZGVyKHRpbGUpOworCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeChtX2ZsaXBNYXRy
aXgpOwogICAgIG1hdHJpeC5tdWx0TGVmdCh0cmFuc2Zvcm0pOwotICAgIG1hdHJpeC50cmFuc2xh
dGUoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpKTsKLSAgICBtYXRyaXguc2NhbGUoZHN0UmVjdC53
aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpKTsKKyAgICBtYXRyaXgudHJhbnNsYXRlKGRzdFJlY3RJ
bnRlcnNlY3RlZC54KCksIGRzdFJlY3RJbnRlcnNlY3RlZC55KCkpOworICAgIG1hdHJpeC5zY2Fs
ZShkc3RSZWN0SW50ZXJzZWN0ZWQud2lkdGgoKSwgZHN0UmVjdEludGVyc2VjdGVkLmhlaWdodCgp
KTsKICAgICBmbG9hdCBtYXRbOV07CiAgICAgYWZmaW5lVG8zeDMobWF0cml4LCBtYXQpOwogICAg
IG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihtX3RleE1hdHJpeExvY2F0aW9uLCBmYWxzZSAv
KnRyYW5zcG9zZSovLCBtYXQsIDEgLypjb3VudCovKTsKICAgICBjaGVja0dMRXJyb3IoImdsVW5p
Zm9ybU1hdHJpeDNmdiIpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHRleE1hdHJpeDsKLSAgICB0
ZXhNYXRyaXguc2NhbGUoMS4wZiAvIHRleHR1cmUtPndpZHRoKCksIDEuMGYgLyB0ZXh0dXJlLT5o
ZWlnaHQoKSk7Ci0gICAgdGV4TWF0cml4LnRyYW5zbGF0ZShzcmNSZWN0LngoKSwgc3JjUmVjdC55
KCkpOwotICAgIHRleE1hdHJpeC5zY2FsZShzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0
KCkpOworICAgIHRleE1hdHJpeC5zY2FsZSgxLjBmIC8gdGlsZUJvdW5kc1dpdGhCb3JkZXIud2lk
dGgoKSwgMS4wZiAvIHRpbGVCb3VuZHNXaXRoQm9yZGVyLmhlaWdodCgpKTsKKyAgICB0ZXhNYXRy
aXgudHJhbnNsYXRlKHNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2UueCgpLCBzcmNSZWN0Q2xpcHBl
ZEluVGlsZVNwYWNlLnkoKSk7CisgICAgdGV4TWF0cml4LnNjYWxlKHNyY1JlY3RDbGlwcGVkSW5U
aWxlU3BhY2Uud2lkdGgoKSwgc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZS5oZWlnaHQoKSk7CiAg
ICAgZmxvYXQgdGV4TWF0WzldOwogICAgIGFmZmluZVRvM3gzKHRleE1hdHJpeCwgdGV4TWF0KTsK
ICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobV90ZXhUZXhNYXRyaXhMb2NhdGlvbiwg
ZmFsc2UgLyp0cmFuc3Bvc2UqLywgdGV4TWF0LCAxIC8qY291bnQqLyk7CiAgICAgY2hlY2tHTEVy
cm9yKCJnbFVuaWZvcm1NYXRyaXgzZnYiKTsKIAotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
UG9pbnRlcihtX3RleFBvc2l0aW9uTG9jYXRpb24sIDMsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VCwgZmFsc2UsIDAsIDApOwotCi0gICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShtX3RleFBvc2l0aW9uTG9jYXRpb24pOwotCiAgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMo
R3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgNiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX1NIT1JULCAwKTsKICAgICBjaGVja0dMRXJyb3IoImdsRHJhd0VsZW1lbnRzIik7CiB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFz
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgKaW5k
ZXggY2VhOTBhZWFhYmIyNjE0N2YxZjI0MzI2NzE4MDkyNWNjOGFhNzMzYy4uMGFkMDdmY2RiZmVk
OTlhZDZlY2Q3ZTU3NDYwMDFmYmJhZGFmYmU3YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaApAQCAtODEsNiArODEsNyBAQCBwdWJsaWM6
CiAgICAgR0xFUzJUZXh0dXJlKiBnZXRUZXh0dXJlKE5hdGl2ZUltYWdlUHRyKTsKIAogcHJpdmF0
ZToKKyAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3RUaWxlKEdMRVMyVGV4dHVyZSogdGV4dHVyZSwg
aW50IHRpbGUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKICAgICB2b2lkIGFwcGx5Q29tcG9zaXRlT3Bl
cmF0b3IoQ29tcG9zaXRlT3BlcmF0b3IpOwogICAgIHZvaWQgY2hlY2tHTEVycm9yKGNvbnN0IGNo
YXIqIGhlYWRlcik7CiAgICAgdW5zaWduZWQgZ2V0UXVhZFZlcnRpY2VzKCk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyVGV4dHVyZS5jcHAKaW5kZXgg
OGI3MmFhODEyNjg2ZDAyMzlhNzBiZDZiNjFkODNlNWE0M2VkMDk1ZC4uYWUyMzBkYjE5MjNjMjY1
OTgxYzc3ZGMxNjA3OTA2NDQ2NDViMzkyOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmNwcApAQCAtMzUsMjMgKzM1LDI0IEBACiAj
aW5jbHVkZSAiR0xFUzJUZXh0dXJlLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgotCisjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUdMRVMyVGV4dHVyZTo6R0xFUzJUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIEZvcm1hdCBmb3JtYXQs
IGludCB3aWR0aCwgaW50IGhlaWdodCkKKworR0xFUzJUZXh0dXJlOjpHTEVTMlRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFBhc3NPd25QdHI8VmVjdG9yPHVuc2lnbmVkIGludD4g
PiB0aWxlVGV4dHVyZUlkcywgRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBp
bnQgbWF4VGV4dHVyZVNpemUpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fdGV4
dHVyZUlkKHRleHR1cmVJZCkKICAgICAsIG1fZm9ybWF0KGZvcm1hdCkKLSAgICAsIG1fd2lkdGgo
d2lkdGgpCi0gICAgLCBtX2hlaWdodChoZWlnaHQpCisgICAgLCBtX3RpbGVzKG1heFRleHR1cmVT
aXplLCB3aWR0aCwgaGVpZ2h0LCB0cnVlKQorICAgICwgbV90aWxlVGV4dHVyZUlkcyh0aWxlVGV4
dHVyZUlkcykKIHsKIH0KIAogR0xFUzJUZXh0dXJlOjp+R0xFUzJUZXh0dXJlKCkKIHsKLSAgICBt
X2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV90ZXh0dXJlSWQpOworICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgbV90aWxlVGV4dHVyZUlkcy0+c2l6ZSgpOyBpKyspCisgICAgICAgIG1f
Y29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX3RpbGVUZXh0dXJlSWRzLT5hdChpKSk7CiB9CiAKIHN0
YXRpYyB2b2lkIGNvbnZlcnRGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEdMRVMy
VGV4dHVyZTo6Rm9ybWF0IGZvcm1hdCwgdW5zaWduZWQgaW50KiBnbEZvcm1hdCwgdW5zaWduZWQg
aW50KiBnbFR5cGUsIGJvb2wqIHN3aXp6bGUpCkBAIC04MCw1MSArODEsOTYgQEAgc3RhdGljIHZv
aWQgY29udmVydEZvcm1hdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgR0xFUzJUZXh0dXJl
OjpGb3JtYXQgZm9ybWEKIAogUGFzc1JlZlB0cjxHTEVTMlRleHR1cmU+IEdMRVMyVGV4dHVyZTo6
Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBGb3JtYXQgZm9ybWF0LCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpCiB7Ci0gICAgaW50IG1heDsKLSAgICBjb250ZXh0LT5nZXRJbnRlZ2Vy
dihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRSwgJm1heCk7Ci0gICAgaWYgKHdp
ZHRoID4gbWF4IHx8IGhlaWdodCA+IG1heCkgewotICAgICAgICBBU1NFUlQoISJ0ZXh0dXJlIHRv
byBiaWciKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIGludCBtYXhUZXh0dXJlU2l6
ZSA9IDA7CisgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9U
RVhUVVJFX1NJWkUsICZtYXhUZXh0dXJlU2l6ZSk7CiAKLSAgICB1bnNpZ25lZCB0ZXh0dXJlSWQg
PSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAgaWYgKCF0ZXh0dXJlSWQpCi0gICAgICAg
IHJldHVybiAwOworICAgIFRpbGluZ0RhdGEgdGlsaW5nKG1heFRleHR1cmVTaXplLCB3aWR0aCwg
aGVpZ2h0LCB0cnVlKTsKKyAgICBpbnQgbnVtVGlsZXMgPSB0aWxpbmcubnVtVGlsZXMoKTsKKwor
ICAgIE93blB0cjxWZWN0b3I8dW5zaWduZWQgaW50PiA+IHRleHR1cmVJZHMobmV3IFZlY3Rvcjx1
bnNpZ25lZCBpbnQ+KG51bVRpbGVzKSk7CisgICAgdGV4dHVyZUlkcy0+ZmlsbCgwLCBudW1UaWxl
cyk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVRpbGVzOyBpKyspIHsKKyAgICAgICAg
aW50IHRleHR1cmVJZCA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgaWYgKCF0
ZXh0dXJlSWQpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGlsZXM7IGkr
KykKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVUZXh0dXJlKHRleHR1cmVJZHMtPmF0
KGkpKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHRleHR1cmVJ
ZHMtPmF0KGkpID0gdGV4dHVyZUlkOworCisgICAgICAgIEludFJlY3QgdGlsZUJvdW5kc1dpdGhC
b3JkZXIgPSB0aWxpbmcudGlsZUJvdW5kc1dpdGhCb3JkZXIoaSk7CiAKICAgICB1bnNpZ25lZCBp
bnQgZ2xGb3JtYXQsIGdsVHlwZTsKICAgICBib29sIHN3aXp6bGU7CiAgICAgY29udmVydEZvcm1h
dChjb250ZXh0LCBmb3JtYXQsICZnbEZvcm1hdCwgJmdsVHlwZSwgJnN3aXp6bGUpOwogICAgIGNv
bnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJl
SWQpOwotICAgIGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDAsIGdsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCAwKTsK
KyAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAw
LCBnbEZvcm1hdCwKKyAgICAgICAgICAgIHRpbGVCb3VuZHNXaXRoQm9yZGVyLndpZHRoKCksCisg
ICAgICAgICAgICB0aWxlQm91bmRzV2l0aEJvcmRlci5oZWlnaHQoKSwKKyAgICAgICAgICAgIDAs
IGdsRm9ybWF0LCBnbFR5cGUsIDApOworICAgIH0KKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdM
RVMyVGV4dHVyZShjb250ZXh0LCB0ZXh0dXJlSWRzLmxlYWtQdHIoKSwgZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBtYXhUZXh0dXJlU2l6ZSkpOworfQogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBH
TEVTMlRleHR1cmUoY29udGV4dCwgdGV4dHVyZUlkLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpKTsK
K3RlbXBsYXRlIDxib29sIHN3aXp6bGU+CitzdGF0aWMgdWludDMyX3QqIGNvcHlTdWJSZWN0KHVp
bnQzMl90KiBzcmMsIGludCBzcmNYLCBpbnQgc3JjWSwgdWludDMyX3QqIGRzdCwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCBpbnQgc3JjU3RyaWRlKQoreworICAgIHVpbnQzMl90KiBzcmNPZmZzZXQg
PSBzcmMgKyBzcmNYICsgc3JjWSAqIHNyY1N0cmlkZTsKKworICAgIGlmICghc3dpenpsZSAmJiB3
aWR0aCA9PSBzcmNTdHJpZGUpCisgICAgICAgIHJldHVybiBzcmNPZmZzZXQ7CisKKyAgICB1aW50
MzJfdCogZHN0UGl4ZWwgPSBkc3Q7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr
KykgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoIDsgeCsrKSB7CisgICAgICAg
ICAgICB1aW50MzJfdCBwaXhlbCA9IHNyY09mZnNldFt4ICsgeSAqIHNyY1N0cmlkZV07CisgICAg
ICAgICAgICBpZiAoc3dpenpsZSkKKyAgICAgICAgICAgICAgICAqZHN0UGl4ZWwgPSBwaXhlbCAm
IDB4RkYwMEZGMDAgfCAoKHBpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTYpIHwgKChwaXhlbCAmIDB4
MDAwMDAwRkYpIDw8IDE2KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqZHN0
UGl4ZWwgPSBwaXhlbDsKKyAgICAgICAgICAgIGRzdFBpeGVsKys7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIGRzdDsKIH0KIAogdm9pZCBHTEVTMlRleHR1cmU6OmxvYWQodm9pZCogcGl4
ZWxzKQogeworICAgIHVpbnQzMl90KiBwaXhlbHMzMiA9IHN0YXRpY19jYXN0PHVpbnQzMl90Kj4o
cGl4ZWxzKTsKICAgICB1bnNpZ25lZCBpbnQgZ2xGb3JtYXQsIGdsVHlwZTsKICAgICBib29sIHN3
aXp6bGU7CiAgICAgY29udmVydEZvcm1hdChtX2NvbnRleHQsIG1fZm9ybWF0LCAmZ2xGb3JtYXQs
ICZnbFR5cGUsICZzd2l6emxlKTsKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CiAgICAgaWYgKHN3aXp6bGUpIHsK
ICAgICAgICAgQVNTRVJUKGdsRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIGds
VHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CiAgICAgICAgIC8vIEZJ
WE1FOiAgVGhpcyBjb3VsZCB1c2UgUEJPJ3MgdG8gc2F2ZSBkb2luZyBhbiBleHRyYSBjb3B5IGhl
cmUuCi0gICAgICAgIGludCBzaXplID0gbV93aWR0aCAqIG1faGVpZ2h0OwotICAgICAgICB1bnNp
Z25lZCogcGl4ZWxzMzIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KHBpeGVscyk7Ci0gICAgICAg
IE93bkFycmF5UHRyPHVuc2lnbmVkPiBidWYobmV3IHVuc2lnbmVkW3NpemVdKTsKLSAgICAgICAg
dW5zaWduZWQqIGJ1ZnB0ciA9IGJ1Zi5nZXQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsID0gcGl4ZWxzMzJbaV07
Ci0gICAgICAgICAgICBidWZwdHJbaV0gPSBwaXhlbCAmIDB4RkYwMEZGMDAgfCAoKHBpeGVsICYg
MHgwMEZGMDAwMCkgPj4gMTYpIHwgKChwaXhlbCAmIDB4MDAwMDAwRkYpIDw8IDE2KTsKKyAgICB9
CisgICAgT3duQXJyYXlQdHI8dWludDMyX3Q+IHRlbXBCdWZmKG5ldyB1aW50MzJfdFttX3RpbGVz
Lm1heFRleHR1cmVTaXplKCkgKiBtX3RpbGVzLm1heFRleHR1cmVTaXplKCldKTsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbV90aWxlcy5udW1UaWxlcygpOyBpKyspIHsKKyAgICAgICAgSW50
UmVjdCB0aWxlQm91bmRzV2l0aEJvcmRlciA9IG1fdGlsZXMudGlsZUJvdW5kc1dpdGhCb3JkZXIo
aSk7CisKKyAgICAgICAgdWludDMyX3QqIHVwbG9hZEJ1ZmYgPSAwOworICAgICAgICBpZiAoc3dp
enpsZSkgeworICAgICAgICAgICAgdXBsb2FkQnVmZiA9IGNvcHlTdWJSZWN0PHRydWU+KAorICAg
ICAgICAgICAgcGl4ZWxzMzIsIHRpbGVCb3VuZHNXaXRoQm9yZGVyLngoKSwgdGlsZUJvdW5kc1dp
dGhCb3JkZXIueSgpLAorICAgICAgICAgICAgdGVtcEJ1ZmYuZ2V0KCksIHRpbGVCb3VuZHNXaXRo
Qm9yZGVyLndpZHRoKCksIHRpbGVCb3VuZHNXaXRoQm9yZGVyLmhlaWdodCgpLCBtX3RpbGVzLnRv
dGFsU2l6ZVgoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1cGxvYWRCdWZmID0g
Y29weVN1YlJlY3Q8ZmFsc2U+KAorICAgICAgICAgICAgcGl4ZWxzMzIsIHRpbGVCb3VuZHNXaXRo
Qm9yZGVyLngoKSwgdGlsZUJvdW5kc1dpdGhCb3JkZXIueSgpLAorICAgICAgICAgICAgdGVtcEJ1
ZmYuZ2V0KCksIHRpbGVCb3VuZHNXaXRoQm9yZGVyLndpZHRoKCksIHRpbGVCb3VuZHNXaXRoQm9y
ZGVyLmhlaWdodCgpLCBtX3RpbGVzLnRvdGFsU2l6ZVgoKSk7CiAgICAgICAgIH0KLSAgICAgICAg
bV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAw
LCAwLCAwLCBtX3dpZHRoLCBtX2hlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgYnVmLmdldCgpKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCBtX3dpZHRoLCBtX2hlaWdodCwgZ2xGb3JtYXQs
IGdsVHlwZSwgcGl4ZWxzKTsKKworICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RpbGVUZXh0dXJlSWRzLT5hdChpKSk7CisgICAg
ICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCwgMCwgMCwKKyAgICAgICAgICAgIHRpbGVCb3VuZHNXaXRoQm9yZGVyLndpZHRoKCksCisg
ICAgICAgICAgICB0aWxlQm91bmRzV2l0aEJvcmRlci5oZWlnaHQoKSwgZ2xGb3JtYXQsIGdsVHlw
ZSwgdXBsb2FkQnVmZik7CisgICAgfQogfQogCi12b2lkIEdMRVMyVGV4dHVyZTo6YmluZCgpCit2
b2lkIEdMRVMyVGV4dHVyZTo6YmluZFRpbGUoaW50IHRpbGUpCiB7Ci0gICAgbV9jb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpOwor
ICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IG1fdGlsZVRleHR1cmVJZHMtPmF0KHRpbGUpKTsKICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwogICAgIG1fY29udGV4
dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7
CiAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNE
OjpDTEFNUF9UT19FREdFKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR0xFUzJUZXh0dXJlLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dMRVMyVGV4dHVyZS5oCmluZGV4IDRkMzUxY2RkMzdkOWUxOWRmNWY0OGJiOTRiZWQ0Nzcz
YjY4MGVkOGMuLjQzYTQ5NTU3YzU1MWMwMTZlOWY5OWE2MzkyMTc1YWQ2ZThlYmFjYjEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUuaApA
QCAtMzUsNiArMzUsMTAgQEAKIAogI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKICNpbmNsdWRlICJS
ZWZQdHIuaCIKKyNpbmNsdWRlICJUaWxpbmdEYXRhLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKQEAgLTQ0LDE4
ICs0OCwxNiBAQCBwdWJsaWM6CiAgICAgfkdMRVMyVGV4dHVyZSgpOwogICAgIGVudW0gRm9ybWF0
IHsgUkdCQTgsIEJHUkE4IH07CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8R0xFUzJUZXh0dXJlPiBj
cmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7
Ci0gICAgdm9pZCBiaW5kKCk7CisgICAgdm9pZCBiaW5kVGlsZShpbnQgdGlsZSk7CiAgICAgdm9p
ZCBsb2FkKHZvaWQqIHBpeGVscyk7CiAgICAgRm9ybWF0IGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9ybWF0OyB9Ci0gICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQot
ICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQorICAgIGNvbnN0IFRp
bGluZ0RhdGEmIHRpbGVzKCkgY29uc3QgeyByZXR1cm4gbV90aWxlczsgfQogcHJpdmF0ZToKLSAg
ICBHTEVTMlRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCB0ZXh0dXJlSWQsIEZv
cm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICBHTEVTMlRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0QqLCBQYXNzT3duUHRyPFZlY3Rvcjx1bnNpZ25lZCBpbnQ+ID4gdGlsZVRleHR1cmVJ
ZHMsIEZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1heFRleHR1cmVT
aXplKTsKICAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwotICAgIHVuc2lnbmVkIG1f
dGV4dHVyZUlkOwogICAgIEZvcm1hdCBtX2Zvcm1hdDsKLSAgICBpbnQgbV93aWR0aDsKLSAgICBp
bnQgbV9oZWlnaHQ7CisgICAgVGlsaW5nRGF0YSBtX3RpbGVzOworICAgIE93blB0cjxWZWN0b3I8
dW5zaWduZWQgaW50PiA+IG1fdGlsZVRleHR1cmVJZHM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGluZ0RhdGEuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxpbmdEYXRhLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
NTIyODhkY2Y0MThjOWVjMjJmYTI2YmZmZmNiOTVmNDI3Mjk1NDE1Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxpbmdEYXRhLmNwcApAQCAt
MCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGlsaW5nRGF0YS5o
IgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgPGFsZ29yaXRobT4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgaW50IGNvbXB1dGVOdW1UaWxlcyhpbnQgbWF4VGV4dHVyZVNpemUsIGlu
dCB0b3RhbFNpemUsIGludCBib3JkZXJUZXhlbHMpCit7CisgICAgcmV0dXJuIG1heCgxLCAxICsg
KHRvdGFsU2l6ZSAtIDEgLSAyICogYm9yZGVyVGV4ZWxzKSAvIChtYXhUZXh0dXJlU2l6ZSAtIDIg
KiBib3JkZXJUZXhlbHMpKTsKK30KKworVGlsaW5nRGF0YTo6VGlsaW5nRGF0YShpbnQgbWF4VGV4
dHVyZVNpemUsIGludCB0b3RhbFNpemVYLCBpbnQgdG90YWxTaXplWSwgYm9vbCBoYXNCb3JkZXJU
ZXhlbHMpCisgICAgOiBtX21heFRleHR1cmVTaXplKG1heFRleHR1cmVTaXplKQorICAgICwgbV90
b3RhbFNpemVYKHRvdGFsU2l6ZVgpCisgICAgLCBtX3RvdGFsU2l6ZVkodG90YWxTaXplWSkKKyAg
ICAsIG1fYm9yZGVyVGV4ZWxzKGhhc0JvcmRlclRleGVscyA/IDEgOiAwKQoreworICAgIG1fbnVt
VGlsZXNYID0gY29tcHV0ZU51bVRpbGVzKG1heFRleHR1cmVTaXplLCBtX3RvdGFsU2l6ZVgsIG1f
Ym9yZGVyVGV4ZWxzKTsKKyAgICBtX251bVRpbGVzWSA9IGNvbXB1dGVOdW1UaWxlcyhtYXhUZXh0
dXJlU2l6ZSwgbV90b3RhbFNpemVZLCBtX2JvcmRlclRleGVscyk7Cit9CisKK2ludCBUaWxpbmdE
YXRhOjp0aWxlWEluZGV4RnJvbVNyY0Nvb3JkKGludCBzcmNQb3MpIGNvbnN0Cit7CisgICAgaW50
IHggPSAoc3JjUG9zIC0gbV9ib3JkZXJUZXhlbHMpIC8gKG1fbWF4VGV4dHVyZVNpemUgLSAyICog
bV9ib3JkZXJUZXhlbHMpOworICAgIHJldHVybiBtaW4obWF4KHgsIDApLCBudW1UaWxlc1goKSAt
IDEpOworfQorCitpbnQgVGlsaW5nRGF0YTo6dGlsZVlJbmRleEZyb21TcmNDb29yZChpbnQgc3Jj
UG9zKSBjb25zdAoreworICAgIGludCB5ID0gKHNyY1BvcyAtIG1fYm9yZGVyVGV4ZWxzKSAvICht
X21heFRleHR1cmVTaXplIC0gMiAqIG1fYm9yZGVyVGV4ZWxzKTsKKyAgICByZXR1cm4gbWluKG1h
eCh5LCAwKSwgbnVtVGlsZXNZKCkgLSAxKTsKK30KKworSW50UmVjdCBUaWxpbmdEYXRhOjp0aWxl
Qm91bmRzKGludCB0aWxlKSBjb25zdAoreworICAgIGFzc2VydFRpbGUodGlsZSk7CisgICAgaW50
IGl4ID0gdGlsZVhJbmRleCh0aWxlKTsKKyAgICBpbnQgaXkgPSB0aWxlWUluZGV4KHRpbGUpOwor
ICAgIGludCB4ID0gdGlsZVBvc2l0aW9uWChpeCk7CisgICAgaW50IHkgPSB0aWxlUG9zaXRpb25Z
KGl5KTsKKyAgICBpbnQgd2lkdGggPSB0aWxlU2l6ZVgoaXgpOworICAgIGludCBoZWlnaHQgPSB0
aWxlU2l6ZVkoaXkpOworICAgIEFTU0VSVCh4ID49IDAgJiYgeSA+PSAwICYmIHdpZHRoID49IDAg
JiYgaGVpZ2h0ID49IDApOworICAgIEFTU0VSVCh4IDw9IHRvdGFsU2l6ZVgoKSAmJiB5IDw9IHRv
dGFsU2l6ZVkoKSk7CisgICAgcmV0dXJuIEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9
CisKK0ludFJlY3QgVGlsaW5nRGF0YTo6dGlsZUJvdW5kc1dpdGhCb3JkZXIoaW50IHRpbGUpIGNv
bnN0Cit7CisgICAgSW50UmVjdCBib3VuZHMgPSB0aWxlQm91bmRzKHRpbGUpOworCisgICAgaWYg
KG1fYm9yZGVyVGV4ZWxzKSB7CisgICAgICAgIGludCB4MSA9IGJvdW5kcy54KCk7CisgICAgICAg
IGludCB4MiA9IGJvdW5kcy5yaWdodCgpOworICAgICAgICBpbnQgeTEgPSBib3VuZHMueSgpOwor
ICAgICAgICBpbnQgeTIgPSBib3VuZHMuYm90dG9tKCk7CisKKyAgICAgICAgaWYgKHRpbGVYSW5k
ZXgodGlsZSkgPiAwKQorICAgICAgICAgICAgeDEtLTsKKyAgICAgICAgaWYgKHRpbGVYSW5kZXgo
dGlsZSkgPCAobnVtVGlsZXNYKCkgLSAxKSkKKyAgICAgICAgICAgIHgyKys7CisgICAgICAgIGlm
ICh0aWxlWUluZGV4KHRpbGUpID4gMCkKKyAgICAgICAgICAgIHkxLS07CisgICAgICAgIGlmICh0
aWxlWUluZGV4KHRpbGUpIDwgKG51bVRpbGVzWSgpIC0gMSkpCisgICAgICAgICAgICB5MisrOwor
CisgICAgICAgIGJvdW5kcyA9IEludFJlY3QoeDEsIHkxLCB4MiAtIHgxLCB5MiAtIHkxKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gYm91bmRzOworfQorCitGbG9hdFJlY3QgVGlsaW5nRGF0YTo6dGls
ZUJvdW5kc05vcm1hbGl6ZWQoaW50IHRpbGUpIGNvbnN0Cit7CisgICAgYXNzZXJ0VGlsZSh0aWxl
KTsKKyAgICBGbG9hdFJlY3QgYm91bmRzKHRpbGVCb3VuZHModGlsZSkpOworICAgIGJvdW5kcy5z
Y2FsZSgxLjBmIC8gbV90b3RhbFNpemVYLCAxLjBmIC8gbV90b3RhbFNpemVZKTsKKyAgICByZXR1
cm4gYm91bmRzOworfQorCitpbnQgVGlsaW5nRGF0YTo6dGlsZVBvc2l0aW9uWChpbnQgeEluZGV4
KSBjb25zdAoreworICAgIEFTU0VSVCh4SW5kZXggPj0gMCAmJiB4SW5kZXggPCBudW1UaWxlc1go
KSk7CisKKyAgICBpZiAoIXhJbmRleCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRp
bGVQb3NpdGlvblgoeEluZGV4IC0gMSkgKyB0aWxlU2l6ZVgoeEluZGV4IC0gMSk7Cit9CisKK2lu
dCBUaWxpbmdEYXRhOjp0aWxlUG9zaXRpb25ZKGludCB5SW5kZXgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKHlJbmRleCA+PSAwICYmIHlJbmRleCA8IG51bVRpbGVzWSgpKTsKKworICAgIGlmICgheUlu
ZGV4KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gdGlsZVBvc2l0aW9uWCh5SW5kZXgg
LSAxKSArIHRpbGVTaXplWSh5SW5kZXggLSAxKTsKK30KKworaW50IFRpbGluZ0RhdGE6OnRpbGVT
aXplWChpbnQgeEluZGV4KSBjb25zdAoreworICAgIEFTU0VSVCh4SW5kZXggPj0gMCAmJiB4SW5k
ZXggPCBudW1UaWxlc1goKSk7CisKKyAgICBpbnQgc2l6ZSA9IG1heFRleHR1cmVTaXplKCk7Cisg
ICAgc2l6ZSA9IG1pbihzaXplLCB0b3RhbFNpemVYKCkpOworCisgICAgaWYgKCF4SW5kZXggJiYg
bV9udW1UaWxlc1ggPT0gMSkKKyAgICAgICAgcmV0dXJuIG1fdG90YWxTaXplWDsKKyAgICBpZiAo
IXhJbmRleCAmJiBtX251bVRpbGVzWCA+IDEpCisgICAgICAgIHJldHVybiBtX21heFRleHR1cmVT
aXplIC0gbV9ib3JkZXJUZXhlbHM7CisgICAgaWYgKHhJbmRleCA8IG51bVRpbGVzWCgpIC0gMSkK
KyAgICAgICAgcmV0dXJuIG1fbWF4VGV4dHVyZVNpemUgLSAyICogbV9ib3JkZXJUZXhlbHM7Cisg
ICAgaWYgKHhJbmRleCA9PSBudW1UaWxlc1goKSAtIDEpCisgICAgICAgIHJldHVybiBtX3RvdGFs
U2l6ZVggLSB0aWxlUG9zaXRpb25YKHhJbmRleCk7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IFRpbGluZ0RhdGE6OnRpbGVTaXplWShpbnQgeUlu
ZGV4KSBjb25zdAoreworICAgIEFTU0VSVCh5SW5kZXggPj0gMCAmJiB5SW5kZXggPCBudW1UaWxl
c1koKSk7CisKKyAgICBpbnQgc2l6ZSA9IG1heFRleHR1cmVTaXplKCk7CisgICAgc2l6ZSA9IG1p
bihzaXplLCB0b3RhbFNpemVZKCkpOworCisgICAgaWYgKCF5SW5kZXggJiYgbV9udW1UaWxlc1kg
PT0gMSkKKyAgICAgICAgcmV0dXJuIG1fdG90YWxTaXplWTsKKyAgICBpZiAoIXlJbmRleCAmJiBt
X251bVRpbGVzWSA+IDEpCisgICAgICAgIHJldHVybiBtX21heFRleHR1cmVTaXplIC0gbV9ib3Jk
ZXJUZXhlbHM7CisgICAgaWYgKHlJbmRleCA8IG51bVRpbGVzWSgpIC0gMSkKKyAgICAgICAgcmV0
dXJuIG1fbWF4VGV4dHVyZVNpemUgLSAyICogbV9ib3JkZXJUZXhlbHM7CisgICAgaWYgKHlJbmRl
eCA9PSBudW1UaWxlc1koKSAtIDEpCisgICAgICAgIHJldHVybiBtX3RvdGFsU2l6ZVkgLSB0aWxl
UG9zaXRpb25ZKHlJbmRleCk7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gMDsKK30KKworSW50UmVjdCBUaWxpbmdEYXRhOjpvdmVybGFwcGVkVGlsZUluZGljZXMoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCAmc3JjUmVjdCkgY29uc3QKK3sKKyAgICBpbnQgeCA9IHRpbGVY
SW5kZXhGcm9tU3JjQ29vcmQoc3JjUmVjdC54KCkpOworICAgIGludCB5ID0gdGlsZVlJbmRleEZy
b21TcmNDb29yZChzcmNSZWN0LnkoKSk7CisgICAgaW50IHIgPSB0aWxlWEluZGV4RnJvbVNyY0Nv
b3JkKHNyY1JlY3QucmlnaHQoKSk7CisgICAgaW50IGIgPSB0aWxlWUluZGV4RnJvbVNyY0Nvb3Jk
KHNyY1JlY3QuYm90dG9tKCkpOworICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHIgLSB4LCBiIC0g
eSk7Cit9CisKK0ludFJlY3QgVGlsaW5nRGF0YTo6b3ZlcmxhcHBlZFRpbGVJbmRpY2VzKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCAmc3JjUmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3Zlcmxh
cHBlZFRpbGVJbmRpY2VzKGVuY2xvc2luZ0ludFJlY3Qoc3JjUmVjdCkpOworfQorCit2b2lkIFRp
bGluZ0RhdGE6OmludGVyc2VjdERyYXdRdWFkKGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBpbnQgdGlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRmxvYXRSZWN0KiBuZXdTcmMsIEZsb2F0UmVjdCogbmV3RHN0KSBjb25zdAor
eworICAgIC8vIEludGVyc2VjdCB3aXRoIHRpbGUKKyAgICBGbG9hdFJlY3QgdGlsZUJvdW5kcyA9
IHRoaXMtPnRpbGVCb3VuZHModGlsZSk7CisgICAgRmxvYXRSZWN0IHNyY1JlY3RJbnRlcnNlY3Rl
ZCA9IHNyY1JlY3Q7CisgICAgc3JjUmVjdEludGVyc2VjdGVkLmludGVyc2VjdCh0aWxlQm91bmRz
KTsKKworICAgIGlmIChzcmNSZWN0SW50ZXJzZWN0ZWQuaXNFbXB0eSgpKSB7CisgICAgICAgICpu
ZXdTcmMgPSAqbmV3RHN0ID0gRmxvYXRSZWN0KDAsIDAsIDAsIDApOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgZmxvYXQgc3JjUmVjdEludGVyc2VjdGVkTm9ybVggPSAoc3JjUmVjdElu
dGVyc2VjdGVkLngoKSAtIHNyY1JlY3QueCgpKSAvIHNyY1JlY3Qud2lkdGgoKTsKKyAgICBmbG9h
dCBzcmNSZWN0SW50ZXJzZWN0ZWROb3JtWSA9IChzcmNSZWN0SW50ZXJzZWN0ZWQueSgpIC0gc3Jj
UmVjdC55KCkpIC8gc3JjUmVjdC5oZWlnaHQoKTsKKyAgICBmbG9hdCBzcmNSZWN0SW50ZXJzZWN0
ZWROb3JtVyA9IHNyY1JlY3RJbnRlcnNlY3RlZC53aWR0aCgpIC8gc3JjUmVjdC53aWR0aCgpOwor
ICAgIGZsb2F0IHNyY1JlY3RJbnRlcnNlY3RlZE5vcm1IID0gc3JjUmVjdEludGVyc2VjdGVkLmhl
aWdodCgpIC8gc3JjUmVjdC5oZWlnaHQoKTsKKworICAgICpuZXdTcmMgPSBzcmNSZWN0SW50ZXJz
ZWN0ZWQ7CisgICAgbmV3U3JjLT5tb3ZlKAorICAgICAgICAtdGlsZUJvdW5kcy54KCkgKyAoKHRp
bGVYSW5kZXgodGlsZSkgPiAwKSA/IG1fYm9yZGVyVGV4ZWxzIDogMCksCisgICAgICAgIC10aWxl
Qm91bmRzLnkoKSArICgodGlsZVlJbmRleCh0aWxlKSA+IDApID8gbV9ib3JkZXJUZXhlbHMgOiAw
KSk7CisKKyAgICAqbmV3RHN0ID0gRmxvYXRSZWN0KAorICAgICAgICBzcmNSZWN0SW50ZXJzZWN0
ZWROb3JtWCAqIGRzdFJlY3Qud2lkdGgoKSArIGRzdFJlY3QueCgpLAorICAgICAgICBzcmNSZWN0
SW50ZXJzZWN0ZWROb3JtWSAqIGRzdFJlY3QuaGVpZ2h0KCkgKyBkc3RSZWN0LnkoKSwKKyAgICAg
ICAgc3JjUmVjdEludGVyc2VjdGVkTm9ybVcgKiBkc3RSZWN0LndpZHRoKCksCisgICAgICAgIHNy
Y1JlY3RJbnRlcnNlY3RlZE5vcm1IICogZHN0UmVjdC5oZWlnaHQoKSk7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsaW5nRGF0YS5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxpbmdEYXRhLmgKbmV3IGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjEyZTY2ZWQ3ODZlZmVjMDcxYWRiNzg3YjBkNDI3YjRkMTQ2OGYyYQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsaW5nRGF0YS5oCkBA
IC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBUaWxpbmdEYXRhX2gKKyNkZWZpbmUgVGlsaW5nRGF0YV9o
CisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBJbnRSZWN0OworCitjbGFzcyBUaWxpbmdEYXRhIDog
cHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBUaWxpbmdEYXRhKGludCBtYXhUZXh0
dXJlU2l6ZSwgaW50IHRvdGFsU2l6ZVgsIGludCB0b3RhbFNpemVZLCBib29sIGhhc0JvcmRlclRl
eGVscyk7CisgICAgaW50IG1heFRleHR1cmVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXhUZXh0
dXJlU2l6ZTsgfQorICAgIGludCB0b3RhbFNpemVYKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbFNp
emVYOyB9CisgICAgaW50IHRvdGFsU2l6ZVkoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsU2l6ZVk7
IH0KKworICAgIGludCBudW1UaWxlcygpIGNvbnN0IHsgcmV0dXJuIG51bVRpbGVzWCgpICogbnVt
VGlsZXNZKCk7IH0KKyAgICBpbnQgbnVtVGlsZXNYKCkgY29uc3QgeyByZXR1cm4gbV9udW1UaWxl
c1g7IH0KKyAgICBpbnQgbnVtVGlsZXNZKCkgY29uc3QgeyByZXR1cm4gbV9udW1UaWxlc1k7IH0K
KyAgICBpbnQgdGlsZUluZGV4KGludCB4LCBpbnQgeSkgY29uc3QgeyByZXR1cm4geCArIHkgKiBu
dW1UaWxlc1goKTsgfQorICAgIGludCB0aWxlWEluZGV4KGludCB0aWxlKSBjb25zdCB7IGFzc2Vy
dFRpbGUodGlsZSk7IHJldHVybiB0aWxlICUgbnVtVGlsZXNYKCk7IH0KKyAgICBpbnQgdGlsZVlJ
bmRleChpbnQgdGlsZSkgY29uc3QgeyBhc3NlcnRUaWxlKHRpbGUpOyByZXR1cm4gdGlsZSAvIG51
bVRpbGVzWCgpOyB9CisgICAgaW50IHRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoaW50KSBjb25zdDsK
KyAgICBpbnQgdGlsZVlJbmRleEZyb21TcmNDb29yZChpbnQpIGNvbnN0OworCisgICAgSW50UmVj
dCB0aWxlQm91bmRzKGludCB0aWxlKSBjb25zdDsKKyAgICBJbnRSZWN0IHRpbGVCb3VuZHNXaXRo
Qm9yZGVyKGludCB0aWxlKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgdGlsZUJvdW5kc05vcm1hbGl6
ZWQoaW50IHRpbGUpIGNvbnN0OworICAgIGludCB0aWxlUG9zaXRpb25YKGludCB4SW5kZXgpIGNv
bnN0OworICAgIGludCB0aWxlUG9zaXRpb25ZKGludCB5SW5kZXgpIGNvbnN0OworICAgIGludCB0
aWxlU2l6ZVgoaW50IHhJbmRleCkgY29uc3Q7CisgICAgaW50IHRpbGVTaXplWShpbnQgeUluZGV4
KSBjb25zdDsKKyAgICBJbnRSZWN0IG92ZXJsYXBwZWRUaWxlSW5kaWNlcyhjb25zdCBJbnRSZWN0
JiBzcmNSZWN0KSBjb25zdDsKKyAgICBJbnRSZWN0IG92ZXJsYXBwZWRUaWxlSW5kaWNlcyhjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OworCisgICAgLy8gR2l2ZW4gYSBzZXQgb2Ygc291
cmNlIGFuZCBkZXN0aW5hdGlvbiBjb29yZGluYXRlcyBmb3IgYSBkcmF3aW5nIHF1YWQKKyAgICAv
LyBpbiB0ZXhlbCB1bml0cywgcmV0dXJucyBhZGp1c3RlZCBkYXRhIHRvIHJlbmRlciBqdXN0IHRo
ZSBvbmUgdGlsZS4KKyAgICB2b2lkIGludGVyc2VjdERyYXdRdWFkKGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBpbnQgdGlsZSwgRmxvYXRSZWN0KiBu
ZXdTcmMsIEZsb2F0UmVjdCogbmV3RHN0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBUaWxpbmdE
YXRhKCkgOiBtX21heFRleHR1cmVTaXplKDApLCBtX3RvdGFsU2l6ZVgoMCksIG1fdG90YWxTaXpl
WSgwKSB7fQorICAgIHZvaWQgYXNzZXJ0VGlsZShpbnQgdGlsZSkgY29uc3QgeyBBU1NFUlQodGls
ZSA+PSAwICYmIHRpbGUgPCBudW1UaWxlcygpKTsgfQorCisgICAgaW50IG1fbWF4VGV4dHVyZVNp
emU7CisgICAgaW50IG1fdG90YWxTaXplWDsKKyAgICBpbnQgbV90b3RhbFNpemVZOworICAgIGlu
dCBtX2JvcmRlclRleGVsczsgLy8gMCBvciAxCisKKyAgICAvLyBjb21wdXRlZCB2YWx1ZXM6Cisg
ICAgaW50IG1fbnVtVGlsZXNYOworICAgIGludCBtX251bVRpbGVzWTsKK307CisKK30KKworI2Vu
ZGlmIC8vIFRpbGluZ0RhdGFfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlU2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1h
Z2VTa2lhLmNwcAppbmRleCAwMjRiZjUwZGMxMzMzYTIwYWEyZGFhZTFhYzdlNWE0ZjVlZWMwZTEw
Li5iNTE0YjFhNmI2MWI1ZDcwY2JkODc3Y2IzYjExNjRhM2JlMWQ1MTdiIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcApAQCAtNDY1LDE4ICs0NjUsMTgg
QEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwKICAgICBpZiAoIWJtKQogICAgICAgICByZXR1cm47ICAvLyBJdCdz
IHRvbyBlYXJseSBhbmQgd2UgZG9uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCiAKLSNpZiAgVVNFKEdM
RVMyX1JFTkRFUklORykKLSAgICBpZiAoY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgp
KSB7Ci0gICAgICAgIGRyYXdCaXRtYXBHTEVTMihjdHh0LCBibSwgc3JjUmVjdCwgZHN0UmVjdCwg
Y29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlm
CiAgICAgRmxvYXRSZWN0IG5vcm1Ec3RSZWN0ID0gbm9ybWFsaXplUmVjdChkc3RSZWN0KTsKICAg
ICBGbG9hdFJlY3Qgbm9ybVNyY1JlY3QgPSBub3JtYWxpemVSZWN0KHNyY1JlY3QpOwogCiAgICAg
aWYgKG5vcm1TcmNSZWN0LmlzRW1wdHkoKSB8fCBub3JtRHN0UmVjdC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsgIC8vIE5vdGhpbmcgdG8gZHJhdy4KIAorI2lmICBVU0UoR0xFUzJfUkVOREVS
SU5HKQorICAgIGlmIChjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpIHsKKyAgICAg
ICAgZHJhd0JpdG1hcEdMRVMyKGN0eHQsIGJtLCBub3JtU3JjUmVjdCwgbm9ybURzdFJlY3QsIGNv
bG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgog
ICAgIGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CiAK
ICAgICBwYWludFNrQml0bWFwKGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCmlu
ZGV4IGU0MmRkNzE3ODE5YTRlN2MxMDdjMTE3ZjdlMjllNWUyN2VjMTUwMzYuLjExNjEyMjRlNzg4
NWM3MTcyNWViZDg5MTg2MmZjNmY0ODZkNTVhMzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKQEAgLTM5LDYgKzM5
LDcgQEAKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCisjaW5jbHVkZSAiVGlsaW5nRGF0
YS5oIgogCiAjaW5jbHVkZSAic2tpYS9leHQvaW1hZ2Vfb3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
InNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgpAQCAtNzkzLDcgKzc5NCw3IEBAIHZvaWQgUGxh
dGZvcm1Db250ZXh0U2tpYTo6dXBsb2FkU29mdHdhcmVUb0hhcmR3YXJlKENvbXBvc2l0ZU9wZXJh
dG9yIG9wKSBjb25zdAogICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2NhbnZhcy0+Z2V0
RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7CiAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2Nr
KGJpdG1hcCk7CiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZhcy0+
Y29udGV4dCgpOwotICAgIGlmICghbV91cGxvYWRUZXh0dXJlIHx8IG1fdXBsb2FkVGV4dHVyZS0+
d2lkdGgoKSA8IGJpdG1hcC53aWR0aCgpIHx8IG1fdXBsb2FkVGV4dHVyZS0+aGVpZ2h0KCkgPCBi
aXRtYXAuaGVpZ2h0KCkpCisgICAgaWYgKCFtX3VwbG9hZFRleHR1cmUgfHwgbV91cGxvYWRUZXh0
dXJlLT50aWxlcygpLnRvdGFsU2l6ZVgoKSA8IGJpdG1hcC53aWR0aCgpIHx8IG1fdXBsb2FkVGV4
dHVyZS0+dGlsZXMoKS50b3RhbFNpemVZKCkgPCBiaXRtYXAuaGVpZ2h0KCkpCiAgICAgICAgIG1f
dXBsb2FkVGV4dHVyZSA9IEdMRVMyVGV4dHVyZTo6Y3JlYXRlKGNvbnRleHQsIEdMRVMyVGV4dHVy
ZTo6QkdSQTgsIGJpdG1hcC53aWR0aCgpLCBiaXRtYXAuaGVpZ2h0KCkpOwogICAgIG1fdXBsb2Fk
VGV4dHVyZS0+bG9hZChiaXRtYXAuZ2V0UGl4ZWxzKCkpOwogICAgIEludFJlY3QgcmVjdCgwLCAw
LCBiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhlaWdodCgpKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDcwOGE5
OGNjZDgzMDU4OTdjYzc2NWZmNDg1ZDMyMjk0ZmY3YjAwYTYuLjQ0MWExMDY4Y2ZmNDQ0NzJmOGU0
OTI0NmY4NDdmZTY5NjIwYmNkMWUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEw
LTA4LTE2ICBWaW5jZW50IFNjaGVpYiAgPHNjaGVpYkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2FudmFzMkQgZG9lcyBub3Qg
c3VwcG9ydCBpbWFnZXMgbGFyZ2VyIHRoYW4gc3lzdGVtJ3MgR1BVIG1heCB0ZXh0dXJlIHNpemUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzODY0CisK
KyAgICAgICAgVW5pdCB0ZXN0cyBmb3IgVGlsaW5nRGF0YSBjbGFzcy4KKworICAgICAgICAqIFdl
YktpdC5neXA6CisgICAgICAgICogdGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDEwLTA3LTI4ICBNYXJjdXMgQnVsYWNoICA8YnVs
YWNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAppbmRleCBhMDRkMWViMjkyMWNjOTI3ODJkMDg5OGFmYWRmODNlNWE1OWYxYWNjLi41
ODZlMDkyYmU1YWI1MzY2ODY5NjMwZGE5NGUwOWEyMjRkZDg2YTBjIDEwMDY0NAotLS0gYS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApA
QCAtNzA3LDYgKzcwNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvS2V5Ym9h
cmRUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvS1VSTFRlc3QuY3Bw
JywKICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9SdW5BbGxUZXN0cy5jcHAnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1RpbGluZ0RhdGFUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwogICAg
ICAgICAgICAgICAgICAgICAgICAgWydPUz09IndpbiInLCB7CmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1RpbGluZ0RhdGFUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NjM1NDJiYTVkNjM4OTkxZGI0NjVlMzA1
MGE3NTE2YmJjZmJhZmEyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1RpbGluZ0RhdGFUZXN0LmNwcApAQCAtMCwwICsxLDIyMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIkdMRVMyVGV4dHVyZS5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitURVNUKFRpbGluZ0Rh
dGFUZXN0LCBudW1UaWxlc19Ob1RpbGluZykKK3sKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0
YSgxNiwgMTYsIDE2LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGlu
Z0RhdGEoMTYsIDE1LCAxNSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRp
bGluZ0RhdGEoMTYsIDE2LCAxNiwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEs
IFRpbGluZ0RhdGEoMTYsICAxLCAxNiwgZmFsc2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9F
USgxLCBUaWxpbmdEYXRhKDE1LCAxNSwgMTUsIHRydWUpLm51bVRpbGVzKCkpOworfQorCitURVNU
KFRpbGluZ0RhdGFUZXN0LCBudW1UaWxlc19UaWxpbmdOb0JvcmRlcnMpCit7CisgICAgRVhQRUNU
X0VRKDEsIFRpbGluZ0RhdGEoNCwgIDEsICA0LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQ
RUNUX0VRKDEsIFRpbGluZ0RhdGEoNCwgIDIsICA0LCBmYWxzZSkubnVtVGlsZXMoKSk7CisgICAg
RVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoNCwgIDMsICA0LCBmYWxzZSkubnVtVGlsZXMoKSk7Cisg
ICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoNCwgIDQsICA0LCBmYWxzZSkubnVtVGlsZXMoKSk7
CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNCwgIDUsICA0LCBmYWxzZSkubnVtVGlsZXMo
KSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNCwgIDYsICA0LCBmYWxzZSkubnVtVGls
ZXMoKSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNCwgIDcsICA0LCBmYWxzZSkubnVt
VGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNCwgIDgsICA0LCBmYWxzZSku
bnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNCwgIDksICA0LCBmYWxz
ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNCwgMTAsICA0LCBm
YWxzZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNCwgMTEsICA0
LCBmYWxzZSkubnVtVGlsZXMoKSk7CisKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg1LCAg
MSwgIDUsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg1
LCAgMiwgIDUsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0
YSg1LCAgMywgIDUsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5n
RGF0YSg1LCAgNCwgIDUsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGls
aW5nRGF0YSg1LCAgNSwgIDUsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwg
VGlsaW5nRGF0YSg1LCAgNiwgIDUsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEo
MiwgVGlsaW5nRGF0YSg1LCAgNywgIDUsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1Rf
RVEoMiwgVGlsaW5nRGF0YSg1LCAgOCwgIDUsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBFWFBF
Q1RfRVEoMiwgVGlsaW5nRGF0YSg1LCAgOSwgIDUsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAgICBF
WFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSg1LCAxMCwgIDUsIGZhbHNlKS5udW1UaWxlcygpKTsKKyAg
ICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg1LCAxMSwgIDUsIGZhbHNlKS5udW1UaWxlcygpKTsK
KworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDE2LCAxNiwgMTYsIGZhbHNlKS5udW1UaWxl
cygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgxNywgMTYsIDE2LCBmYWxzZSkubnVt
VGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoMTUsIDE2LCAxNiwgZmFsc2Up
Lm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDgsIDE2LCAxNiwgZmFs
c2UpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSg2LCBUaWxpbmdEYXRhKDgsIDE3LCAxNiwg
ZmFsc2UpLm51bVRpbGVzKCkpOworfQorCitURVNUKFRpbGluZ0RhdGFUZXN0LCBudW1UaWxlc19U
aWxpbmdXaXRoQm9yZGVycykKK3sKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgzLCAgMSwg
IDMsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDMsICAy
LCAgMywgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoMywg
IDMsICAzLCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSgz
LCAgNCwgIDMsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRh
KDMsICA1LCAgMywgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0Rh
dGEoMywgIDYsICAzLCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5n
RGF0YSgzLCAgNywgIDMsIHRydWUpLm51bVRpbGVzKCkpOworCisgICAgRVhQRUNUX0VRKDEsIFRp
bGluZ0RhdGEoNCwgIDEsICA0LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwg
VGlsaW5nRGF0YSg0LCAgMiwgIDQsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgx
LCBUaWxpbmdEYXRhKDQsICAzLCAgNCwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VR
KDEsIFRpbGluZ0RhdGEoNCwgIDQsICA0LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1Rf
RVEoMiwgVGlsaW5nRGF0YSg0LCAgNSwgIDQsIHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVD
VF9FUSgyLCBUaWxpbmdEYXRhKDQsICA2LCAgNCwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQ
RUNUX0VRKDMsIFRpbGluZ0RhdGEoNCwgIDcsICA0LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBF
WFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg0LCAgOCwgIDQsIHRydWUpLm51bVRpbGVzKCkpOworICAg
IEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDQsICA5LCAgNCwgdHJ1ZSkubnVtVGlsZXMoKSk7Cisg
ICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoNCwgMTAsICA0LCB0cnVlKS5udW1UaWxlcygpKTsK
KyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSg0LCAxMSwgIDQsIHRydWUpLm51bVRpbGVzKCkp
OworCisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoNSwgIDEsICA1LCB0cnVlKS5udW1UaWxl
cygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg1LCAgMiwgIDUsIHRydWUpLm51bVRp
bGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICAzLCAgNSwgdHJ1ZSkubnVt
VGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIFRpbGluZ0RhdGEoNSwgIDQsICA1LCB0cnVlKS5u
dW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg1LCAgNSwgIDUsIHRydWUp
Lm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDUsICA2LCAgNSwgdHJ1
ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0RhdGEoNSwgIDcsICA1LCB0
cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSg1LCAgOCwgIDUs
IHRydWUpLm51bVRpbGVzKCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDUsICA5LCAg
NSwgdHJ1ZSkubnVtVGlsZXMoKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNSwgMTAs
ICA1LCB0cnVlKS5udW1UaWxlcygpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg1LCAx
MSwgIDUsIHRydWUpLm51bVRpbGVzKCkpOworfQorCitURVNUKFRpbGluZ0RhdGFUZXN0LCB0aWxl
WEluZGV4RnJvbVNyY0Nvb3JkKQoreworICAgIEVYUEVDVF9FUSgwLCBUaWxpbmdEYXRhKDMsIDEw
LCAxMCwgZmFsc2UpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoMCkpOworICAgIEVYUEVDVF9FUSgw
LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoMSkp
OworICAgIEVYUEVDVF9FUSgwLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVYSW5k
ZXhGcm9tU3JjQ29vcmQoMikpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDMsIDEwLCAx
MCwgZmFsc2UpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoMykpOworICAgIEVYUEVDVF9FUSgxLCBU
aWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoNCkpOwor
ICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVYSW5kZXhG
cm9tU3JjQ29vcmQoNSkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwg
ZmFsc2UpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoNikpOworICAgIEVYUEVDVF9FUSgyLCBUaWxp
bmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoNykpOworICAg
IEVYUEVDVF9FUSgyLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVYSW5kZXhGcm9t
U3JjQ29vcmQoOCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgZmFs
c2UpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoOSkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdE
YXRhKDMsIDEwLCAxMCwgZmFsc2UpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoMTApKTsKKyAgICBF
WFBFQ1RfRVEoMywgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWEluZGV4RnJvbVNy
Y0Nvb3JkKDExKSk7CisKKyAgICBFWFBFQ1RfRVEoMCwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRy
dWUpLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQoMCkpOworICAgIEVYUEVDVF9FUSgwLCBUaWxpbmdE
YXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCgxKSk7CisgICAgRVhQ
RUNUX0VRKDEsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nv
b3JkKDIpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRp
bGVYSW5kZXhGcm9tU3JjQ29vcmQoMykpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDMs
IDEwLCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCg0KSk7CisgICAgRVhQRUNUX0VR
KDQsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDUp
KTsKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVYSW5k
ZXhGcm9tU3JjQ29vcmQoNikpOworICAgIEVYUEVDVF9FUSg2LCBUaWxpbmdEYXRhKDMsIDEwLCAx
MCwgdHJ1ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCg3KSk7CisgICAgRVhQRUNUX0VRKDcsIFRp
bGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKDgpKTsKKyAg
ICBFWFBFQ1RfRVEoNywgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVYSW5kZXhGcm9t
U3JjQ29vcmQoOSkpOworICAgIEVYUEVDVF9FUSg3LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1
ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCgxMCkpOworICAgIEVYUEVDVF9FUSg3LCBUaWxpbmdE
YXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVhJbmRleEZyb21TcmNDb29yZCgxMSkpOworfQorVEVT
VChUaWxpbmdEYXRhVGVzdCwgdGlsZVlJbmRleEZyb21TcmNDb29yZCkKK3sKKyAgICBFWFBFQ1Rf
RVEoMCwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3Jk
KDApKTsKKyAgICBFWFBFQ1RfRVEoMCwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxl
WUluZGV4RnJvbVNyY0Nvb3JkKDEpKTsKKyAgICBFWFBFQ1RfRVEoMCwgVGlsaW5nRGF0YSgzLCAx
MCwgMTAsIGZhbHNlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDIpKTsKKyAgICBFWFBFQ1RfRVEo
MSwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDMp
KTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWUlu
ZGV4RnJvbVNyY0Nvb3JkKDQpKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSgzLCAxMCwg
MTAsIGZhbHNlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDUpKTsKKyAgICBFWFBFQ1RfRVEoMiwg
VGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDYpKTsK
KyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWUluZGV4
RnJvbVNyY0Nvb3JkKDcpKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSgzLCAxMCwgMTAs
IGZhbHNlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDgpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGls
aW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDkpKTsKKyAg
ICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIGZhbHNlKS50aWxlWUluZGV4RnJv
bVNyY0Nvb3JkKDEwKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoMywgMTAsIDEwLCBm
YWxzZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCgxMSkpOworCisgICAgRVhQRUNUX0VRKDAsIFRp
bGluZ0RhdGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDApKTsKKyAg
ICBFWFBFQ1RfRVEoMCwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVZSW5kZXhGcm9t
U3JjQ29vcmQoMSkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1
ZSkudGlsZVlJbmRleEZyb21TcmNDb29yZCgyKSk7CisgICAgRVhQRUNUX0VRKDIsIFRpbGluZ0Rh
dGEoMywgMTAsIDEwLCB0cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDMpKTsKKyAgICBFWFBF
Q1RfRVEoMywgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVZSW5kZXhGcm9tU3JjQ29v
cmQoNCkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGls
ZVlJbmRleEZyb21TcmNDb29yZCg1KSk7CisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoMywg
MTAsIDEwLCB0cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDYpKTsKKyAgICBFWFBFQ1RfRVEo
NiwgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoNykp
OworICAgIEVYUEVDVF9FUSg3LCBUaWxpbmdEYXRhKDMsIDEwLCAxMCwgdHJ1ZSkudGlsZVlJbmRl
eEZyb21TcmNDb29yZCg4KSk7CisgICAgRVhQRUNUX0VRKDcsIFRpbGluZ0RhdGEoMywgMTAsIDEw
LCB0cnVlKS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKDkpKTsKKyAgICBFWFBFQ1RfRVEoNywgVGls
aW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQoMTApKTsKKyAg
ICBFWFBFQ1RfRVEoNywgVGlsaW5nRGF0YSgzLCAxMCwgMTAsIHRydWUpLnRpbGVZSW5kZXhGcm9t
U3JjQ29vcmQoMTEpKTsKK30KKworVEVTVChUaWxpbmdEYXRhVGVzdCwgdGlsZVNpemVYKQorewor
ICAgIEVYUEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUsICA1LCAgNSwgZmFsc2UpLnRpbGVTaXplWCgw
KSk7CisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoNSwgIDUsICA1LCB0cnVlKS50aWxlU2l6
ZVgoMCkpOworCisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoNSwgIDYsICA2LCBmYWxzZSku
dGlsZVNpemVYKDApKTsKKyAgICBFWFBFQ1RfRVEoMSwgVGlsaW5nRGF0YSg1LCAgNiwgIDYsIGZh
bHNlKS50aWxlU2l6ZVgoMSkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDUsICA2LCAg
NiwgdHJ1ZSkudGlsZVNpemVYKDApKTsKKyAgICBFWFBFQ1RfRVEoMiwgVGlsaW5nRGF0YSg1LCAg
NiwgIDYsIHRydWUpLnRpbGVTaXplWCgxKSk7CisKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0
YSg1LCAgOCwgIDgsIGZhbHNlKS50aWxlU2l6ZVgoMCkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxp
bmdEYXRhKDUsICA4LCAgOCwgZmFsc2UpLnRpbGVTaXplWCgxKSk7CisgICAgRVhQRUNUX0VRKDQs
IFRpbGluZ0RhdGEoNSwgIDgsICA4LCB0cnVlKS50aWxlU2l6ZVgoMCkpOworICAgIEVYUEVDVF9F
USg0LCBUaWxpbmdEYXRhKDUsICA4LCAgOCwgdHJ1ZSkudGlsZVNpemVYKDEpKTsKKworICAgIEVY
UEVDVF9FUSg1LCBUaWxpbmdEYXRhKDUsIDEwLCAxMCwgZmFsc2UpLnRpbGVTaXplWCgwKSk7Cisg
ICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoNSwgMTAsIDEwLCBmYWxzZSkudGlsZVNpemVYKDEp
KTsKKyAgICBFWFBFQ1RfRVEoNCwgVGlsaW5nRGF0YSg1LCAxMCwgMTAsIHRydWUpLnRpbGVTaXpl
WCgwKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNSwgMTAsIDEwLCB0cnVlKS50aWxl
U2l6ZVgoMSkpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRhKDUsIDEwLCAxMCwgdHJ1ZSku
dGlsZVNpemVYKDIpKTsKKworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDUsIDExLCAxMSwg
dHJ1ZSkudGlsZVNpemVYKDIpKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg1LCAxMiwg
MTIsIHRydWUpLnRpbGVTaXplWCgyKSk7Cit9CitURVNUKFRpbGluZ0RhdGFUZXN0LCB0aWxlU2l6
ZVkpCit7CisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoNSwgIDUsICA1LCBmYWxzZSkudGls
ZVNpemVZKDApKTsKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSg1LCAgNSwgIDUsIHRydWUp
LnRpbGVTaXplWSgwKSk7CisKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSg1LCAgNiwgIDYs
IGZhbHNlKS50aWxlU2l6ZVkoMCkpOworICAgIEVYUEVDVF9FUSgxLCBUaWxpbmdEYXRhKDUsICA2
LCAgNiwgZmFsc2UpLnRpbGVTaXplWSgxKSk7CisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEo
NSwgIDYsICA2LCB0cnVlKS50aWxlU2l6ZVkoMCkpOworICAgIEVYUEVDVF9FUSgyLCBUaWxpbmdE
YXRhKDUsICA2LCAgNiwgdHJ1ZSkudGlsZVNpemVZKDEpKTsKKworICAgIEVYUEVDVF9FUSg1LCBU
aWxpbmdEYXRhKDUsICA4LCAgOCwgZmFsc2UpLnRpbGVTaXplWSgwKSk7CisgICAgRVhQRUNUX0VR
KDMsIFRpbGluZ0RhdGEoNSwgIDgsICA4LCBmYWxzZSkudGlsZVNpemVZKDEpKTsKKyAgICBFWFBF
Q1RfRVEoNCwgVGlsaW5nRGF0YSg1LCAgOCwgIDgsIHRydWUpLnRpbGVTaXplWSgwKSk7CisgICAg
RVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoNSwgIDgsICA4LCB0cnVlKS50aWxlU2l6ZVkoMSkpOwor
CisgICAgRVhQRUNUX0VRKDUsIFRpbGluZ0RhdGEoNSwgMTAsIDEwLCBmYWxzZSkudGlsZVNpemVZ
KDApKTsKKyAgICBFWFBFQ1RfRVEoNSwgVGlsaW5nRGF0YSg1LCAxMCwgMTAsIGZhbHNlKS50aWxl
U2l6ZVkoMSkpOworICAgIEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDUsIDEwLCAxMCwgdHJ1ZSku
dGlsZVNpemVZKDApKTsKKyAgICBFWFBFQ1RfRVEoMywgVGlsaW5nRGF0YSg1LCAxMCwgMTAsIHRy
dWUpLnRpbGVTaXplWSgxKSk7CisgICAgRVhQRUNUX0VRKDMsIFRpbGluZ0RhdGEoNSwgMTAsIDEw
LCB0cnVlKS50aWxlU2l6ZVkoMikpOworCisgICAgRVhQRUNUX0VRKDQsIFRpbGluZ0RhdGEoNSwg
MTEsIDExLCB0cnVlKS50aWxlU2l6ZVkoMikpOworICAgIEVYUEVDVF9FUSgzLCBUaWxpbmdEYXRh
KDUsIDEyLCAxMiwgdHJ1ZSkudGlsZVNpemVZKDIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64865</attachid>
            <date>2010-08-19 09:36:51 -0700</date>
            <delta_ts>2010-08-19 09:41:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43864-20100819093649.patch</filename>
            <type>text/plain</type>
            <size>2203</size>
            <attacher name="Vincent Scheib">scheib</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDgyOTcwNWU5NWE5ZjcxNGFiMmM0MmJlZmExMTkyYThiYjZjNTI4OGUu
LmNkZDAwYzMyNjZmYWVkZjBhYWM0MmUyNzZjMDc5N2I5NjM5ZmI3MDggMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIxIEBACisyMDEwLTA4LTE4ICBWaW5jZW50IFNjaGVpYiAgPHNjaGVpYkBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRml4aW5nIHByZXZpb3VzIE1hYyBvbmx5IGJ1aWxkIGJyZWFrYWdlIHdpdGggVGlsaW5nRGF0
YVRlc3QuY3BwCisgICAgICAgICAgKEluaXRpYWwgYnJlYWsgaW50cm9kdWNlZCBieSBidWc6Cisg
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzODY0Cisg
ICAgICAgICAgYW5kIHRlbXBvcmFyaWx5IGZpeGVkIGJ5IGphcGhldEBjaHJvbWl1bS5vcmcgdmlh
IGEgYnVnbGVzcworICAgICAgICAgIHVucmV2aWV3ZWQgY2hlY2tpbiBAIHJldmlzaW9uIDY1NDcx
IHRvIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwKQorCisgICAgICAgIFRpbGluZ0RhdGFUZXN0
LmNwcCBpbmNsdWRlZCB0aGUgd3JvbmcgaGVhZGVyLCB3aGljaCBoYWQgYSBjb21waWxlIAorICAg
ICAgICBvcHRpb24gYXJvdW5kIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBXZWJDb3JlIG5hbWVzcGFj
ZS4gV2l0aG91dCB0aGUgCisgICAgICAgIG5hbWVzcGFjZSBkZWZpbmVkLCBlcnJvci4gRml4ZWQg
YnkgY29ycmVjdGx5IGluY2x1ZGluZyBUaWxpbmdEYXRhLmgsIAorICAgICAgICB3aGljaCBoYXMg
bm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24uCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAg
ICAgICAqIHRlc3RzL1RpbGluZ0RhdGFUZXN0LmNwcDoKKwogMjAxMC0wOC0xOCAgSmlhbiBMaSAg
PGppYW5saUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVy
LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAppbmRleCA0ZDkzMDcxMmZmNzk5YmVlZTFmOWYyMmRjYjExOWFmYWEyYjky
ZWIyLi40ZTgxMWQ4NWE2NTIwZjQxNTdlOGFiMTg4OGIyODRhMjBkY2JhOWIyIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cApAQCAtNzM4LDggKzczOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMv
S2V5Ym9hcmRUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvS1VSTFRl
c3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9SdW5BbGxUZXN0cy5jcHAn
LAotICAgICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogVGhpcyB0ZXN0IGlzIGNvbXBpbGUg
ZmFpbGluZyBvbiBtYWMuCi0gICAgICAgICAgICAgICAgICAgICAgICAjICd0ZXN0cy9UaWxpbmdE
YXRhVGVzdC5jcHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1RpbGluZ0RhdGFU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICdj
b25kaXRpb25zJzogWwogICAgICAgICAgICAgICAgICAgICAgICAgWydPUz09IndpbiInLCB7CmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwIGIvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1RpbGluZ0RhdGFUZXN0LmNwcAppbmRleCA0NjM1NDJiYTVkNjM4
OTkxZGI0NjVlMzA1MGE3NTE2YmJjZmJhZmEyLi44NjdiZDhkYjFjYTI4MzBmNWU1MjMxOWFiMGMx
NGEyZjNhMGVlZjk5IDEwMDc1NQotLS0gYS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsaW5nRGF0
YVRlc3QuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAK
QEAgLTMwLDcgKzMwLDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaW5jbHVkZSAiR0xF
UzJUZXh0dXJlLmgiCisjaW5jbHVkZSAiVGlsaW5nRGF0YS5oIgorCiAjaW5jbHVkZSA8Z3Rlc3Qv
Z3Rlc3QuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cg==
</data>
<flag name="review"
          id="53508"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>