<?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>90881</bug_id>
          
          <creation_ts>2012-07-10 06:55:58 -0700</creation_ts>
          <short_desc>[Qt][WK2] Implement GraphicsSurface for Linux/GLX.</short_desc>
          <delta_ts>2012-10-05 11:17:04 -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>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          <dependson>88638</dependson>
    
    <dependson>90895</dependson>
          <blocked>79169</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zeno Albisser">zeno</reporter>
          <assigned_to name="Zeno Albisser">zeno</assigned_to>
          <cc>dongseong.hwang</cc>
    
    <cc>noam</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>665730</commentid>
    <comment_count>0</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-07-10 06:55:58 -0700</bug_when>
    <thetext>We already have the GraphicsSurface implementation for Mac.
We need a similar implementation for Linux based on GLX as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666732</commentid>
    <comment_count>1</comment_count>
      <attachid>151700</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-07-11 07:13:19 -0700</bug_when>
    <thetext>Created attachment 151700
patch for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666735</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-11 07:17:13 -0700</bug_when>
    <thetext>Attachment 151700 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:90:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:91:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:92:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:93:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 5 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>666736</commentid>
    <comment_count>3</comment_count>
      <attachid>151700</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-11 07:17:41 -0700</bug_when>
    <thetext>Comment on attachment 151700
patch for review.

Attachment 151700 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13207286</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666750</commentid>
    <comment_count>4</comment_count>
      <attachid>151700</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-11 07:44:20 -0700</bug_when>
    <thetext>Comment on attachment 151700
patch for review.

Attachment 151700 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13212019</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666779</commentid>
    <comment_count>5</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-11 08:48:24 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 151700 [details])
&gt; Attachment 151700 [details] did not pass qt-wk2-ews (qt):
&gt; Output: http://queues.webkit.org/results/13212019

I think we need a config test for XComposite.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666782</commentid>
    <comment_count>6</comment_count>
      <attachid>151700</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-11 09:01:19 -0700</bug_when>
    <thetext>Comment on attachment 151700
patch for review.

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

&gt; Source/WebCore/ChangeLog:16
&gt; +        * platform/graphics/surfaces/GraphicsSurface.cpp:
&gt; +        (WebCore::GraphicsSurface::create):
&gt; +        Move creating GraphicsSurface instance into

Please add some indentations in the Changelog.

&gt; Source/WebCore/Target.pri:4178
&gt; +        xlibAvailable() {
&gt; +            SOURCES += platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp
&gt; +        }

We need a config test for XComposite, and probably add XComposite in the bots.

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:84
&gt; +QVector&lt;int&gt; qglxBuildSpec()

static

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:226
&gt; +    if (pGlBlitFramebuffer &amp;&amp; pGlBindFramebuffer &amp;&amp; pGlXBindTexImageEXT &amp;&amp; pGlXReleaseTexImageEXT)

This is a bit verbose. better use one of those, or have an &quot;initialized&quot; static variable.

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:228
&gt; +        return true;
&gt; +    QOpenGLContext* glContext = p-&gt;glContext();

Add empty line

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:246
&gt; +    if (m_texture)
&gt; +        glDeleteTextures(1, &amp;m_texture);
&gt; +
&gt; +    glGenTextures(1, &amp;m_texture);

Do you really need to delete and recreate the texture? If so, please add a comment.

&gt; Source/WebKit2/ChangeLog:13
&gt; +        * Shared/ShareableSurface.cpp:
&gt; +        (WebKit::ShareableSurface::create):
&gt; +        Only create a GraphicsSurface from a ShareableSurface::Handle
&gt; +        in case the Handle contains a valid GraphicsSurface token.

Indent

&gt; Source/WebKit2/UIProcess/LayerTreeCoordinatorProxy.cpp:71
&gt; +    // Create a unique key out of layerID and tileID.
&gt; +    uint64_t key = layerID;
&gt; +    key &lt;&lt;= 32;
&gt; +    key |= tileID;

put this in a different function

&gt; Tools/qmake/mkspecs/features/features.prf:174
&gt; +    haveQt(5):!win32-*: DEFINES += WTF_USE_GRAPHICS_SURFACE=1

i wouldn&apos;t say this is right; It wouldn&apos;t work in embedded Linux or even N9.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667449</commentid>
    <comment_count>7</comment_count>
      <attachid>151700</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-07-12 00:21:18 -0700</bug_when>
    <thetext>Comment on attachment 151700
patch for review.

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

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:68
&gt; +        refCount--;

--refCount

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:71
&gt; +            if (window)
&gt; +                delete window;

delete window is enough, you do not need to null check

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:78
&gt; +    static int refCount;
&gt; +    static QWindow* window;

Any reason why not to add s_* ?

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:120
&gt; +        if (m_glContext)
&gt; +            delete m_glContext;

no need for null check

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:130
&gt; +        if (m_surface) {
&gt; +            delete m_surface;
&gt; +            m_surface = 0;
&gt; +        }

same here

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:195
&gt; +        if (!m_surface-&gt;isVisible())
&gt; +            return;

newline after return

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:197
&gt; +        while (!m_surface-&gt;isExposed())
&gt; +            QCoreApplication::processEvents();

I would also newline after this

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:233
&gt; +    pGlBlitFramebuffer = reinterpret_cast&lt;PFNGLBLITFRAMEBUFFERPROC&gt;(glContext-&gt;getProcAddress(&quot;glBlitFramebuffer&quot;));
&gt; +    return pGlBlitFramebuffer &amp;&amp; pGlBindFramebuffer &amp;&amp; pGlXBindTexImageEXT &amp;&amp; pGlXReleaseTexImageEXT;

I would also prefer a newline before the return here

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:253
&gt; +    pGlXBindTexImageEXT(m_private-&gt;display(), m_private-&gt;glxPixmap(), GLX_FRONT_EXT, 0);
&gt; +    return m_texture;

newline before return?

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:258
&gt; +void GraphicsSurface::platformCopyToGLTexture(uint32_t target, uint32_t id, const IntRect&amp; targetRect, const IntPoint&amp; offset)
&gt; +{
&gt; +}

Add comment why not implemented?

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:260
&gt; +void GraphicsSurface::platformCopyFromFramebuffer(uint32_t originFbo, const IntRect&amp; sourceRect)

Do we always write out Framebuffer instead of just calling it FBO or so?

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:273
&gt; +    m_private-&gt;makeCurrent();
&gt; +    int width = m_size.width();
&gt; +    int height = m_size.height();
&gt; +    glPushAttrib(GL_ALL_ATTRIB_BITS);
&gt; +    GLint oldFBO;
&gt; +    glGetIntegerv(GL_FRAMEBUFFER_BINDING, &amp;oldFBO);
&gt; +    pGlBindFramebuffer(GL_READ_FRAMEBUFFER, originFbo);
&gt; +    pGlBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_private-&gt;glContext()-&gt;defaultFramebufferObject());
&gt; +    pGlBlitFramebuffer(0, 0, width, height, 0, 0, width, height, GL_COLOR_BUFFER_BIT, GL_LINEAR);
&gt; +    pGlBindFramebuffer(GL_FRAMEBUFFER, oldFBO);
&gt; +    glPopAttrib();
&gt; +    m_private-&gt;swapBuffers();

newline between logical units

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:285
&gt; +    if (!initialize(surface-&gt;m_private))

maybe something more descriptive than initialize. maybe initializeGLXExtensions ?

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:320
&gt; +char* GraphicsSurface::platformLock(const IntRect&amp; rect, int* outputStride, LockOptions lockOptions)
&gt; +{
&gt; +    return 0;
&gt; +}
&gt; +
&gt; +void GraphicsSurface::platformUnlock()
&gt; +{
&gt; +}

comments why those are not implemented?

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:330
&gt; +    if (m_private)
&gt; +        delete m_private;

no need for check</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667617</commentid>
    <comment_count>8</comment_count>
      <attachid>151700</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-07-12 04:25:33 -0700</bug_when>
    <thetext>Comment on attachment 151700
patch for review.

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

&gt;&gt; Source/WebCore/ChangeLog:16
&gt;&gt; +        Move creating GraphicsSurface instance into
&gt; 
&gt; Please add some indentations in the Changelog.

fixed.

&gt;&gt; Source/WebCore/Target.pri:4178
&gt;&gt; +        }
&gt; 
&gt; We need a config test for XComposite, and probably add XComposite in the bots.

added config test for Xcomposite.

&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:68
&gt;&gt; +        refCount--;
&gt; 
&gt; --refCount

sure.

&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:78
&gt;&gt; +    static QWindow* window;
&gt; 
&gt; Any reason why not to add s_* ?

coding style?

&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:84
&gt;&gt; +QVector&lt;int&gt; qglxBuildSpec()
&gt; 
&gt; static

fixed.

&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:120
&gt;&gt; +            delete m_glContext;
&gt; 
&gt; no need for null check

fixed.

&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:130
&gt;&gt; +        }
&gt; 
&gt; same here

fixed.

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:224
&gt; +static bool initialize(GraphicsSurfacePrivate* p)

I renamed this to resolveGLMethods.

&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:226
&gt;&gt; +    if (pGlBlitFramebuffer &amp;&amp; pGlBindFramebuffer &amp;&amp; pGlXBindTexImageEXT &amp;&amp; pGlXReleaseTexImageEXT)
&gt; 
&gt; This is a bit verbose. better use one of those, or have an &quot;initialized&quot; static variable.

Added a &quot;static bool resolved&quot; to return early in case all methods have previously been resolved successfully.

&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:228
&gt;&gt; +    QOpenGLContext* glContext = p-&gt;glContext();
&gt; 
&gt; Add empty line

fixed

&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:233
&gt;&gt; +    return pGlBlitFramebuffer &amp;&amp; pGlBindFramebuffer &amp;&amp; pGlXBindTexImageEXT &amp;&amp; pGlXReleaseTexImageEXT;
&gt; 
&gt; I would also prefer a newline before the return here

ok - fixed.

&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:246
&gt;&gt; +    glGenTextures(1, &amp;m_texture);
&gt; 
&gt; Do you really need to delete and recreate the texture? If so, please add a comment.

You are right, i can actually reuse the existing one. And only generate a new one in case there is none.

&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:253
&gt;&gt; +    return m_texture;
&gt; 
&gt; newline before return?

yes, sir.

&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:258
&gt;&gt; +}
&gt; 
&gt; Add comment why not implemented?

added.

&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:260
&gt;&gt; +void GraphicsSurface::platformCopyFromFramebuffer(uint32_t originFbo, const IntRect&amp; sourceRect)
&gt; 
&gt; Do we always write out Framebuffer instead of just calling it FBO or so?

It is at least common in function names. And it is also how the prototype is called in GraphicsSurface.h. (even though i&apos;m the one to blame for the naming there as well. ;) )

&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:273
&gt;&gt; +    m_private-&gt;swapBuffers();
&gt; 
&gt; newline between logical units

ok.

&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:285
&gt;&gt; +    if (!initialize(surface-&gt;m_private))
&gt; 
&gt; maybe something more descriptive than initialize. maybe initializeGLXExtensions ?

renamed to resolveGLMethods.

&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:320
&gt;&gt; +}
&gt; 
&gt; comments why those are not implemented?

added.

&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:330
&gt;&gt; +        delete m_private;
&gt; 
&gt; no need for check

removed.

&gt;&gt; Source/WebKit2/ChangeLog:13
&gt;&gt; +        in case the Handle contains a valid GraphicsSurface token.
&gt; 
&gt; Indent

fixed.

&gt;&gt; Source/WebKit2/UIProcess/LayerTreeCoordinatorProxy.cpp:71
&gt;&gt; +    key |= tileID;
&gt; 
&gt; put this in a different function

added &quot;static inline uint64_t createUniqueKey(...)&quot;.

&gt;&gt; Tools/qmake/mkspecs/features/features.prf:174
&gt;&gt; +    haveQt(5):!win32-*: DEFINES += WTF_USE_GRAPHICS_SURFACE=1
&gt; 
&gt; i wouldn&apos;t say this is right; It wouldn&apos;t work in embedded Linux or even N9.

fixed with config test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667621</commentid>
    <comment_count>9</comment_count>
      <attachid>151907</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-07-12 04:27:04 -0700</bug_when>
    <thetext>Created attachment 151907
patch for review. - fixed issues as previously commented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667626</commentid>
    <comment_count>10</comment_count>
      <attachid>151907</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-07-12 04:35:07 -0700</bug_when>
    <thetext>Comment on attachment 151907
patch for review. - fixed issues as previously commented.

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

&gt; Source/WebCore/WebCore.pri:209
&gt; +contains(DEFINES, WTF_USE_GRAPHICS_SURFACE=1) {
&gt; +    linux-*: LIBS += -lXcomposite
&gt; +}
&gt; +

This wont work on embedded linux will it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667693</commentid>
    <comment_count>11</comment_count>
      <attachid>151907</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-07-12 06:10:21 -0700</bug_when>
    <thetext>Comment on attachment 151907
patch for review. - fixed issues as previously commented.

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

&gt;&gt; Source/WebCore/WebCore.pri:209
&gt;&gt; +
&gt; 
&gt; This wont work on embedded linux will it?

If you look at features.prf further down, you will see that WTF_USE_GRAPHICS_SURFACE should only be set, in case there is an Xcomposite library. (unless manually enforced of course)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667694</commentid>
    <comment_count>12</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-12 06:12:09 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 151907 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=151907&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/WebCore.pri:209
&gt; &gt;&gt; +
&gt; &gt; 
&gt; &gt; This wont work on embedded linux will it?
&gt; 
&gt; If you look at features.prf further down, you will see that WTF_USE_GRAPHICS_SURFACE should only be set, in case there is an Xcomposite library. (unless manually enforced of course)

Yes, but that&apos;s implicit... you should do something like DEFINES += HAVE_GLX=1 and then check for that define.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667699</commentid>
    <comment_count>13</comment_count>
      <attachid>151907</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-12 06:18:38 -0700</bug_when>
    <thetext>Comment on attachment 151907
patch for review. - fixed issues as previously commented.

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

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:193
&gt; +            QCoreApplication::processEvents();

Hm.... this seems risky. Any other way to do it?

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:216
&gt; +    QWindow* m_surface;
&gt; +    QOpenGLContext* m_glContext;

Can you use OwnPtr here and avoid the delete calls?

&gt; Source/WebKit2/UIProcess/LayerTreeCoordinatorProxy.cpp:64
&gt; +static inline uint64_t createUniqueKey(int layerID, int tileID)

createLayerTileUniqueID

&gt; Tools/qmake/mkspecs/features/features.prf:177
&gt; +        linux-*:config_libXcomposite: DEFINES += WTF_USE_GRAPHICS_SURFACE=1

DEFINES += HAVE_GLX, maybe even HAVE_XCOMPOSITE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667706</commentid>
    <comment_count>14</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-12 06:23:30 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; DEFINES += HAVE_GLX, maybe even HAVE_XCOMPOSITE
I mean HAVE_GLX=1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667713</commentid>
    <comment_count>15</comment_count>
      <attachid>151907</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-07-12 06:30:48 -0700</bug_when>
    <thetext>Comment on attachment 151907
patch for review. - fixed issues as previously commented.

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

&gt;&gt;&gt;&gt; Source/WebCore/WebCore.pri:209
&gt;&gt;&gt;&gt; +
&gt;&gt;&gt; 
&gt;&gt;&gt; This wont work on embedded linux will it?
&gt;&gt; 
&gt;&gt; If you look at features.prf further down, you will see that WTF_USE_GRAPHICS_SURFACE should only be set, in case there is an Xcomposite library. (unless manually enforced of course)
&gt; 
&gt; Yes, but that&apos;s implicit... you should do something like DEFINES += HAVE_GLX=1 and then check for that define.

I&apos;ll change that.

&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:193
&gt;&gt; +            QCoreApplication::processEvents();
&gt; 
&gt; Hm.... this seems risky. Any other way to do it?

I guess we can just do busy waiting. Which is kind of what we do anyway. But it seems that making the event loop process a few events would be the logical step.
In which way would that be risky?
I was thinking of using a timer to make sure that swapBuffers is executed after the surface is exposed. But that does not work either, because we need to block here and make sure that once we return the buffers have been swapped.
So i don&apos;t really see another option then actual waiting for the surface to be exposed.
This is only the problem for the very first frame, because the window creation is asynchronous.
Better ideas are welcome!

&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:216
&gt;&gt; +    QOpenGLContext* m_glContext;
&gt; 
&gt; Can you use OwnPtr here and avoid the delete calls?

I&apos;ll see what i can do about these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667718</commentid>
    <comment_count>16</comment_count>
      <attachid>151907</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-12 06:35:45 -0700</bug_when>
    <thetext>Comment on attachment 151907
patch for review. - fixed issues as previously commented.

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:193
&gt;&gt;&gt; +            QCoreApplication::processEvents();
&gt;&gt; 
&gt;&gt; Hm.... this seems risky. Any other way to do it?
&gt; 
&gt; I guess we can just do busy waiting. Which is kind of what we do anyway. But it seems that making the event loop process a few events would be the logical step.
&gt; In which way would that be risky?
&gt; I was thinking of using a timer to make sure that swapBuffers is executed after the surface is exposed. But that does not work either, because we need to block here and make sure that once we return the buffers have been swapped.
&gt; So i don&apos;t really see another option then actual waiting for the surface to be exposed.
&gt; This is only the problem for the very first frame, because the window creation is asynchronous.
&gt; Better ideas are welcome!

If this only happens for the first frame I&apos;m fine with it - please add a comment about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667820</commentid>
    <comment_count>17</comment_count>
      <attachid>151966</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-07-12 08:42:18 -0700</bug_when>
    <thetext>Created attachment 151966
patch for review. - fixed issues as requested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667824</commentid>
    <comment_count>18</comment_count>
      <attachid>151966</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-07-12 08:44:14 -0700</bug_when>
    <thetext>Comment on attachment 151966
patch for review. - fixed issues as requested.

I&apos;ll rebase the change first.
Sorry for the noise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667872</commentid>
    <comment_count>19</comment_count>
      <attachid>151974</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-07-12 09:40:31 -0700</bug_when>
    <thetext>Created attachment 151974
patch for review. - rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667876</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-12 09:43:20 -0700</bug_when>
    <thetext>Attachment 151974 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:88:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:89:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:90:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:91:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 5 in 16 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>667884</commentid>
    <comment_count>21</comment_count>
      <attachid>151974</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-12 09:46:20 -0700</bug_when>
    <thetext>Comment on attachment 151974
patch for review. - rebased.

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

LGTM, see nitpick.

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:91
&gt; +    spec[i++] = GLX_LEVEL;                          spec[i++] = 0;
&gt; +    spec[i++] = GLX_DRAWABLE_TYPE;                  spec[i++] = GLX_PIXMAP_BIT | GLX_WINDOW_BIT;
&gt; +    spec[i++] = GLX_BIND_TO_TEXTURE_TARGETS_EXT;    spec[i++] = GLX_TEXTURE_2D_BIT_EXT;
&gt; +    spec[i++] = GLX_BIND_TO_TEXTURE_RGB_EXT;        spec[i++] = TRUE;

I&apos;d rather just use a static array
static const int glxSpec[] = {
...
};

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:163
&gt; +        QVector&lt;int&gt; attribList;
&gt; +        attribList.append(GLX_TEXTURE_FORMAT_EXT);
&gt; +        attribList.append(GLX_TEXTURE_FORMAT_RGB_EXT);
&gt; +        attribList.append(GLX_TEXTURE_TARGET_EXT);
&gt; +        attribList.append(GLX_TEXTURE_2D_EXT);
&gt; +        attribList.append(0);

I&apos;d rather use a static const array.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668759</commentid>
    <comment_count>22</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-07-13 02:21:19 -0700</bug_when>
    <thetext>Committed r122554: &lt;http://trac.webkit.org/changeset/122554&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698919</commentid>
    <comment_count>23</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-08-17 22:38:06 -0700</bug_when>
    <thetext>Hi, folks.

It is very grateful for UI_SIDE_COMPOSITING to support WebGL in linux now.

I have a question.

UI process binds a texture to the pixmap once, and then uses the texture.

uint32_t GraphicsSurface::platformGetTextureID()
{
    if (!m_texture) {
        glGenTextures(1, &amp;m_texture);
        glBindTexture(GL_TEXTURE_2D, m_texture);
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
        pGlXBindTexImageEXT(m_private-&gt;display(), m_private-&gt;glxPixmap(), GLX_FRONT_EXT, 0);
    }

    return m_texture;
}

While UI process freely uses the texture which may point where is pixmap, web process swaps QWindow, which maybe change the offset which the pixmap handle points. I&apos;m curious if it is safe. I think there maybe a unexpected behavior if UI process reads the texture while web process swaps QWindow.
I don&apos;t know well about glx. If my question is ridiculous, please understand me.

    void swapBuffers()
    {
        ...
        QOpenGLContext* glContext = QOpenGLContext::currentContext();
        if (m_surface &amp;&amp; glContext) {
            GLint oldFBO;
            glGetIntegerv(GL_FRAMEBUFFER_BINDING, &amp;oldFBO);
            pGlBindFramebuffer(GL_FRAMEBUFFER, glContext-&gt;defaultFramebufferObject());
            glContext-&gt;swapBuffers(m_surface.get());
            pGlBindFramebuffer(GL_FRAMEBUFFER, oldFBO);
        }
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735793</commentid>
    <comment_count>24</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-10-05 11:17:04 -0700</bug_when>
    <thetext>*** Bug 79169 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151700</attachid>
            <date>2012-07-11 07:13:19 -0700</date>
            <delta_ts>2012-07-12 04:27:04 -0700</delta_ts>
            <desc>patch for review.</desc>
            <filename>90881_20120711-161204.patch</filename>
            <type>text/plain</type>
            <size>26689</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhMTI2NjQwLi4xMGQ0Yjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYg
QEAKKzIwMTItMDctMTEgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgW1F0XVtXSzJdIEltcGxlbWVudCBHcmFwaGljc1N1cmZhY2UgZm9yIExpbnV4L0dMWC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwODgxCisKKyAg
ICAgICAgQWRkIGEgR0xYIGJhc2VkIEdyYXBoaWNzU3VyZmFjZSBpbXBsZW1lbnRhdGlvbiBmb3Ig
TGludXguCisgICAgICAgIE5hdGl2ZSBYIHdpbmRvd3MgYXJlIGJlaW5nIHVzZWQgZm9yIGV4Y2hh
bmdpbmcgdGV4dHVyZXMKKyAgICAgICAgd2l0aCB0aGUgVUlQcm9jZXNzLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAg
ICAgKiBXZWJDb3JlLnByaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9H
cmFwaGljc1N1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpj
cmVhdGUpOgorICAgICAgICBNb3ZlIGNyZWF0aW5nIEdyYXBoaWNzU3VyZmFjZSBpbnN0YW5jZSBp
bnRvCisgICAgICAgIHBsYXRmb3JtQ3JlYXRlL3BsYXRmb3JtSW1wb3J0IGZ1bmN0aW9ucyB0byBh
bGxvdworICAgICAgICBwbGF0Zm9ybSBzcGVjaWZpYyBjcmVhdGlvbiBiYXNlZCBvbiB0aGUgcHJv
dmlkZWQgZmxhZ3MuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OkdyYXBoaWNz
U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6On5HcmFwaGljc1N1
cmZhY2UpOgorICAgICAgICBDYWxsIHBsYXRmb3JtRGVzdHJveSB3aGVuIGRlc3Ryb3lpbmcgYSBH
cmFwaGljc1N1cmZhY2UuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuaDoKKyAgICAgICAgTWFrZSBwbGF0Zm9y
bUNyZWF0ZS9wbGF0Zm9ybUltcG9ydCBmdW5jdGlvbnMgc3RhdGljCisgICAgICAgIHRvIGJlIGFi
bGUgdG8gY2FsbCB0aGVzZSBmcm9tIHRoZSBzdGF0aWMgY3JlYXRlIGZ1bmN0aW9uLgorICAgICAg
ICBBZGQgRGVzdHJ1Y3RvciBwcm90b3R5cGUgYW5kIGFkZCBHcmFwaGljc1N1cmZhY2VQcml2YXRl
IG1lbWJlci4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoR3JhcGhpY3NTdXJmYWNlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMvR3JhcGhpY3NTdXJmYWNl
TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NT
dXJmYWNlOjpwbGF0Zm9ybUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZh
Y2U6OnBsYXRmb3JtSW1wb3J0KToKKyAgICAgICAgSW5zZXJ0IGNyZWF0aW9uIG9mIEdyYXBoaWNz
U3VyZmFjZSBpbnN0YW5jZS4KKyAgICAgICAgVGhpcyBhbGxvd3MgaGF2aW5nIGEgcGxhdGZvcm0g
c3BlY2lmaWMgY3JlYXRpb24gbWVjaGFuaXNtCisgICAgICAgIGZvciBHTFguCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvcXQvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE9mZlNjcmVlblJvb3RXaW5kb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6T2ZmU2NyZWVuUm9vdFdpbmRvdzo6T2ZmU2NyZWVuUm9vdFdpbmRv
dyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZTY3JlZW5Sb290V2luZG93OjpnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6T2ZmU2NyZWVuUm9vdFdpbmRvdzo6fk9mZlNjcmVlblJvb3RXaW5kb3cpOgor
ICAgICAgICBBZGQgYW4gT2ZmU2NyZWVuUm9vdFdpbmRvdyBzaW5nZWx0b24gdGhhdCBpcyBiZWlu
ZyB1c2VkCisgICAgICAgIGFzIGEgcGFyZW50IGZvciBhbGwgbmF0aXZlIG9mZnNjcmVlbiB3aW5k
b3dzLgorICAgICAgICAoV2ViQ29yZTo6cWdseEJ1aWxkU3BlYyk6CisgICAgICAgIEFkZCBhIGNv
bnZlbmllbmNlIGZ1bmN0aW9uIGZvciBidWlsZGluZyB0aGUgc3BlY3MgZm9yCisgICAgICAgIHRo
ZSBjcmVhdGlvbiBvZiBnbFhQaXhtYXBzLgorICAgICAgICAoR3JhcGhpY3NTdXJmYWNlUHJpdmF0
ZSk6CisgICAgICAgIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBtYW5hZ2UgYWxsIHRoZSBYIHJlbGF0
ZWQgcmVzb3VyY2VzCisgICAgICAgIHN1Y2ggYXMgb3BlbmluZyBhIGRpc3BsYXkgb3IgY3JlYXRp
bmcgWFBpeG1hcHMgZXRjLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0
ZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSk6CisgICAgICAgIE9wZW4gYSBjb25uZWN0aW9uIHRv
IHRoZSBYIHNlcnZlciBhbmQgY3JlYXRlIGEKKyAgICAgICAgUU9wZW5HTENvbnRleHQgdGhhdCBj
YW4gYmUgdXNlZCB0byByZXNvbHZlIEdMIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzU3VyZmFjZVByaXZhdGU6On5HcmFwaGljc1N1cmZhY2VQcml2YXRlKToKKyAgICAgICAg
UHJvcGVybHkgY2xlYW51cCBhbmQgcmVsZWFzZSBhbGwgdGhlIFggcmVzb3VyY2VzIGFnYWluLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6Y3JlYXRlU3VyZmFjZSk6
CisgICAgICAgIENyZWF0ZSBhIHN1cmZhY2UgdGhhdCBpcyBwbGFjZWQgb2ZmIHNjcmVlbiBhbmQg
Y2FuIGJlCisgICAgICAgIHVzZWQgYXMgYSByZW5kZXJpbmcgdGFyZ2V0IGJ5IHRoZSBXZWJQcm9j
ZXNzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6Y3JlYXRlUGl4
bWFwKToKKyAgICAgICAgQ3JlYXRlIGEgR0xYUGl4bWFwIGZyb20gdGhlIFhXaW5kb3cgdGhhdCB3
YXMgcHJldmlvdXNseQorICAgICAgICByZWRpcmVjdGVkIGJ5IHRoZSBXZWJQcm9jZXNzLiBUaGlz
IEdMWFBpeG1hcCBjYW4gdGhlbiBiZQorICAgICAgICBib3VuZCB0byBhIHRleHR1cmUgYW5kIGJl
aW5nIHBhaW50ZWQgb24gc2NyZWVuIGJ5IHRoZQorICAgICAgICBVSVByb2Nlc3MuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjptYWtlQ3VycmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpzd2FwQnVmZmVycyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpkaXNwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OmdseFBpeG1hcCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzU3VyZmFjZVByaXZhdGU6OmdsQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjppbml0
aWFsaXplKToKKyAgICAgICAgSW5pdGlhbGl6ZSBhbGwgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGZv
ciB0aGUgR0wgZnVuY3Rpb25zIHVzZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZh
Y2U6OnBsYXRmb3JtRXhwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6
cGxhdGZvcm1HZXRUZXh0dXJlSUQpOgorICAgICAgICBCaW5kIHRoZSBHTFhQaXhtYXAgdG8gYSB0
ZXh0dXJlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlU
b0dMVGV4dHVyZSk6CisgICAgICAgIE5vdCBiZWVpbmcgaW1wbGVtZW50ZWQgZm9yIEdMWC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Db3B5RnJvbUZyYW1lYnVm
ZmVyKToKKyAgICAgICAgQmxpdCBvcmlnaW4gZmJvIG9udG8gdGhlIEdyYXBoaWNzU3VyZmFjZSdz
IGJhY2tpbmcuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1JbXBvcnQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUxvY2spOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybVVubG9jayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRGVzdHJveSk6CisKIDIwMTItMDct
MDkgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CiAKICAgICAgICAgcmVxdWVzdEFu
aW1hdGlvbkZyYW1lIHNob3VsZCBvbmx5IHRyaWdnZXIgd2hlbiBhIG5ldyBmcmFtZSBjYW4gYmUg
ZGlzcGxheWVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggNGQ2MmFkOC4uMzdhZDRiNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CkBAIC00MTcyLDYgKzQxNzIsMTAgQEAgY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV9HUkFQSElD
U19TVVJGQUNFPTEpIHsKICAgICBtYWMgewogICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL21hYy9HcmFwaGljc1N1cmZhY2VNYWMuY3BwCiAgICAgICAgIElOQ0xV
REVQQVRIICs9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVGb3VuZGF0aW9uLmZyYW1l
d29yay9IZWFkZXJzCisgICAgfSBlbHNlIHsKKyAgICAgICAgeGxpYkF2YWlsYWJsZSgpIHsKKyAg
ICAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvcXQvR3JhcGhp
Y3NTdXJmYWNlR0xYLmNwcAorICAgICAgICB9CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnByaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCmluZGV4
IDFhZjljY2MuLjMyYjlkYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCkBAIC0xMSw3ICsxMSw3IEBAIFNPVVJD
RV9ESVIgPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9XZWJDb3JlCiBDT05GSUcgKz0gdGV4
bWFwCiAKIFFUICo9IG5ldHdvcmsgc3FsCi1oYXZlUXQoNSk6IFFUICo9IGd1aS1wcml2YXRlCito
YXZlUXQoNSk6IFFUICo9IGNvcmUtcHJpdmF0ZSBndWktcHJpdmF0ZQogCiBXRUJDT1JFX0dFTkVS
QVRFRF9TT1VSQ0VTX0RJUiA9ICQke1JPT1RfQlVJTERfRElSfS9Tb3VyY2UvV2ViQ29yZS8kJHtH
RU5FUkFURURfU09VUkNFU19ERVNURElSfQogCkBAIC0xNDYsNyArMTQ2LDcgQEAgY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEk9MSkgewogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgeGxpYkF2YWlsYWJsZSgpIHsKICAgICAgICAgICAgICAgICBDT05GSUcg
Kz0geDExCi0gICAgICAgICAgICAgICAgTElCUyArPSAtbFhyZW5kZXIKKyAgICAgICAgICAgICAg
ICBMSUJTICs9IC1sWHJlbmRlciAtbFhjb21wb3NpdGUKICAgICAgICAgICAgICAgICBERUZJTkVT
ICs9IE1PWl9YMTEKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIERFRklORVMgKz0gWFBfVU5J
WApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
R3JhcGhpY3NTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHAKaW5kZXggMDE4YTg5Yy4uMmI4Y2Q2NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NT
dXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9HcmFwaGljc1N1cmZhY2UuY3BwCkBAIC0yNywxOCArMjcsMTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gR3JhcGhpY3NTdXJmYWNlOjpjcmVh
dGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MsIHVpbnQzMl90IHRva2VuKQogewot
ICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFJlZihuZXcgR3JhcGhp
Y3NTdXJmYWNlKHNpemUsIGZsYWdzKSk7Ci0gICAgaWYgKCFzdXJmYWNlLT5wbGF0Zm9ybUltcG9y
dCh0b2tlbikpCi0gICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsK
LSAgICByZXR1cm4gc3VyZmFjZTsKKyAgICByZXR1cm4gcGxhdGZvcm1JbXBvcnQoc2l6ZSwgZmxh
Z3MsIHRva2VuKTsKIH0KIAogUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3Vy
ZmFjZTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3Mg
ZmxhZ3MpCiB7Ci0gICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UmVm
KG5ldyBHcmFwaGljc1N1cmZhY2Uoc2l6ZSwgZmxhZ3MpKTsKLSAgICBpZiAoIXN1cmZhY2UtPnBs
YXRmb3JtQ3JlYXRlKHNpemUsIGZsYWdzKSkKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8R3Jh
cGhpY3NTdXJmYWNlPigpOwotICAgIHJldHVybiBzdXJmYWNlOworICAgIHJldHVybiBwbGF0Zm9y
bUNyZWF0ZShzaXplLCBmbGFncyk7CiB9CiAKIHVpbnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6ZXhw
b3J0VG9rZW4oKQpAQCAtNzAsMTMgKzY0LDE5IEBAIHZvaWQgR3JhcGhpY3NTdXJmYWNlOjpjb3B5
RnJvbUZyYW1lYnVmZmVyKHVpbnQzMl90IGZibywgY29uc3QgSW50UmVjdCYgc291cmNlUmVjCiB9
CiAKIEdyYXBoaWNzU3VyZmFjZTo6R3JhcGhpY3NTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUs
IEZsYWdzIGZsYWdzKQotICAgIDogbV9zaXplKHNpemUpCi0gICAgLCBtX2ZsYWdzKGZsYWdzKQor
ICAgIDogbV9mbGFncyhmbGFncykKKyAgICAsIG1fc2l6ZShzaXplKQogICAgICwgbV9wbGF0Zm9y
bVN1cmZhY2UoMCkKICAgICAsIG1fdGV4dHVyZSgwKQogICAgICwgbV9mYm8oMCkKKyAgICAsIG1f
cHJpdmF0ZSgwKQogewogfQogCitHcmFwaGljc1N1cmZhY2U6On5HcmFwaGljc1N1cmZhY2UoKQor
eworICAgIHBsYXRmb3JtRGVzdHJveSgpOworfQorCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJm
YWNlLmgKaW5kZXggZmY3MWZjZC4uN2FlZWQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmgKQEAg
LTMyLDEwICszMiwxNCBAQAogI2lmIE9TKERBUldJTikKIHR5cGVkZWYgc3RydWN0IF9fSU9TdXJm
YWNlKiBJT1N1cmZhY2VSZWY7CiB0eXBlZGVmIElPU3VyZmFjZVJlZiBQbGF0Zm9ybUdyYXBoaWNz
U3VyZmFjZTsKKyNlbHNlCit0eXBlZGVmIHVpbnQzMl90IFBsYXRmb3JtR3JhcGhpY3NTdXJmYWNl
OwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IEdyYXBoaWNzU3VyZmFj
ZVByaXZhdGU7CisKIGNsYXNzIEdyYXBoaWNzU3VyZmFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEdy
YXBoaWNzU3VyZmFjZT4gewogcHVibGljOgogICAgIGVudW0gRmxhZyB7CkBAIC02OSwxMCArNzMs
MTEgQEAgcHVibGljOgogICAgIHVpbnQzMl90IGdldFRleHR1cmVJRCgpOwogICAgIFBhc3NPd25Q
dHI8R3JhcGhpY3NDb250ZXh0PiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmLCBMb2NrT3B0aW9u
cyk7CiAgICAgUGFzc1JlZlB0cjxJbWFnZT4gY3JlYXRlUmVhZE9ubHlJbWFnZShjb25zdCBJbnRS
ZWN0Jik7CisgICAgfkdyYXBoaWNzU3VyZmFjZSgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCBw
bGF0Zm9ybUNyZWF0ZShjb25zdCBJbnRTaXplJiwgRmxhZ3MpOwotICAgIGJvb2wgcGxhdGZvcm1J
bXBvcnQodWludDMyX3QpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4g
cGxhdGZvcm1DcmVhdGUoY29uc3QgSW50U2l6ZSYsIEZsYWdzKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxHcmFwaGljc1N1cmZhY2U+IHBsYXRmb3JtSW1wb3J0KGNvbnN0IEludFNpemUmLCBGbGFn
cywgdWludDMyX3QpOwogICAgIHVpbnQzMl90IHBsYXRmb3JtRXhwb3J0KCk7CiAgICAgdm9pZCBw
bGF0Zm9ybURlc3Ryb3koKTsKIApAQCAtMTAwLDYgKzEwNSw3IEBAIHByaXZhdGU6CiAgICAgUGxh
dGZvcm1HcmFwaGljc1N1cmZhY2UgbV9wbGF0Zm9ybVN1cmZhY2U7CiAgICAgdWludDMyX3QgbV90
ZXh0dXJlOwogICAgIHVpbnQzMl90IG1fZmJvOworICAgIEdyYXBoaWNzU3VyZmFjZVByaXZhdGUq
IG1fcHJpdmF0ZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL21hYy9HcmFwaGljc1N1cmZhY2VNYWMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5j
cHAKaW5kZXggODQzMTJkZS4uNzEzMWI4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3Vy
ZmFjZU1hYy5jcHAKQEAgLTMwLDYgKzMwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitz
dHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7IH07CisKIHVpbnQzMl90IEdyYXBoaWNzU3Vy
ZmFjZTo6cGxhdGZvcm1FeHBvcnQoKQogewogICAgIHJldHVybiBJT1N1cmZhY2VHZXRJRChtX3Bs
YXRmb3JtU3VyZmFjZSk7CkBAIC0xMTgsNyArMTIwLDcgQEAgdm9pZCBHcmFwaGljc1N1cmZhY2U6
OnBsYXRmb3JtQ29weUZyb21GcmFtZWJ1ZmZlcih1aW50MzJfdCBvcmlnaW5GYm8sIGNvbnN0IElu
dFIKICAgICBnbEZsdXNoKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNy
ZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncykKK1Bhc3NSZWZQdHI8R3JhcGhp
Y3NTdXJmYWNlPiBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ3JlYXRlKGNvbnN0IEludFNpemUm
IHNpemUsIEZsYWdzIGZsYWdzKQogewogICAgIHVuc2lnbmVkIHBpeGVsRm9ybWF0ID0gJ0JHUkEn
OwogICAgIHVuc2lnbmVkIGJ5dGVzUGVyRWxlbWVudCA9IDQ7CkBAIC0xNTQsMTQgKzE1NiwyMCBA
QCBib29sIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1DcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgRmxhZ3MgZmxhZ3MpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDc7IGkrKykKICAg
ICAgICAgQ0ZSZWxlYXNlKHZhbHVlc1tpXSk7CiAKLSAgICBtX3BsYXRmb3JtU3VyZmFjZSA9IElP
U3VyZmFjZUNyZWF0ZShkaWN0KTsKLSAgICByZXR1cm4gISFtX3BsYXRmb3JtU3VyZmFjZTsKKyAg
ICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRSZWYobmV3IEdyYXBoaWNz
U3VyZmFjZShzaXplLCBmbGFncykpOworICAgIHN1cmZhY2UtPm1fcGxhdGZvcm1TdXJmYWNlID0g
SU9TdXJmYWNlQ3JlYXRlKGRpY3QpOworICAgIGlmICghc3VyZmFjZS0+bV9wbGF0Zm9ybVN1cmZh
Y2UpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsKKyAgICBy
ZXR1cm4gc3VyZmFjZTsKIH0KIAotYm9vbCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtSW1wb3J0
KHVpbnQzMl90IHRva2VuKQorUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3Vy
ZmFjZTo6cGxhdGZvcm1JbXBvcnQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MsIHVp
bnQzMl90IHRva2VuKQogewotICAgIG1fcGxhdGZvcm1TdXJmYWNlID0gSU9TdXJmYWNlTG9va3Vw
KHRva2VuKTsKLSAgICByZXR1cm4gISFtX3BsYXRmb3JtU3VyZmFjZTsKKyAgICBSZWZQdHI8R3Jh
cGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzU3VyZmFjZShzaXpl
LCBmbGFncykpOworICAgIHN1cmZhY2UtPm1fcGxhdGZvcm1TdXJmYWNlID0gSU9TdXJmYWNlTG9v
a3VwKHRva2VuKTsKKyAgICBpZiAoIXN1cmZhY2UtPm1fcGxhdGZvcm1TdXJmYWNlKQorICAgICAg
ICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CisgICAgcmV0dXJuIHN1cmZh
Y2U7CiB9CiAKIHN0YXRpYyBpbnQgaW9TdXJmYWNlTG9ja09wdGlvbnMoaW50IGxvY2tPcHRpb25z
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
cXQvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYWNjNTM4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAK
QEAgLTAsMCArMSwzMzUgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCisKKyNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKworLy8gUXQgaGVhZGVycyBtdXN0IGJlIGluY2x1ZGVk
IGJlZm9yZSBnbHggaGVhZGVycy4KKyNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgorI2luY2x1
ZGUgPFFPcGVuR0xDb250ZXh0PgorI2luY2x1ZGUgPFFWZWN0b3I+CisjaW5jbHVkZSA8UVdpbmRv
dz4KKyNpbmNsdWRlIDxxcGEvcXBsYXRmb3Jtd2luZG93Lmg+CisjaW5jbHVkZSA8R0wvZ2xleHQu
aD4KKyNpbmNsdWRlIDxHTC9nbHguaD4KKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YY29tcG9z
aXRlLmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRlci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBsb25nIFgxMU92ZXJyaWRlUmVkaXJlY3QgPSAxTCA8PCA5Owor
CitzdGF0aWMgUEZOR0xYQklORFRFWElNQUdFRVhUUFJPQyBwR2xYQmluZFRleEltYWdlRVhUID0g
MDsKK3N0YXRpYyBQRk5HTFhSRUxFQVNFVEVYSU1BR0VFWFRQUk9DIHBHbFhSZWxlYXNlVGV4SW1h
Z2VFWFQgPSAwOworc3RhdGljIFBGTkdMQklOREZSQU1FQlVGRkVSUFJPQyBwR2xCaW5kRnJhbWVi
dWZmZXIgPSAwOworc3RhdGljIFBGTkdMQkxJVEZSQU1FQlVGRkVSUFJPQyBwR2xCbGl0RnJhbWVi
dWZmZXIgPSAwOworCitjbGFzcyBPZmZTY3JlZW5Sb290V2luZG93IHsKK3B1YmxpYzoKKyAgICBP
ZmZTY3JlZW5Sb290V2luZG93KCkKKyAgICB7CisgICAgICAgIHJlZkNvdW50Kys7CisgICAgfQor
CisgICAgUVdpbmRvdyogZ2V0KERpc3BsYXkqIGRweSkKKyAgICB7CisgICAgICAgIGlmICghd2lu
ZG93KSB7CisgICAgICAgICAgICB3aW5kb3cgPSBuZXcgUVdpbmRvdzsKKyAgICAgICAgICAgIHdp
bmRvdy0+c2V0R2VvbWV0cnkoUVJlY3QoLTEsIC0xLCAxLCAxKSk7CisgICAgICAgICAgICB3aW5k
b3ctPmNyZWF0ZSgpOworICAgICAgICAgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmlidXRl
czsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSB0cnVlOworICAg
ICAgICAgICAgWENoYW5nZVdpbmRvd0F0dHJpYnV0ZXMoZHB5LCB3aW5kb3ctPmhhbmRsZSgpLT53
aW5JZCgpLCBYMTFPdmVycmlkZVJlZGlyZWN0LCAmYXR0cmlidXRlcyk7CisgICAgICAgICAgICB3
aW5kb3ctPnNob3coKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gd2luZG93OworICAgIH0K
KworICAgIH5PZmZTY3JlZW5Sb290V2luZG93KCkKKyAgICB7CisgICAgICAgIHJlZkNvdW50LS07
CisgICAgICAgIGlmICghcmVmQ291bnQpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cpCisgICAg
ICAgICAgICAgICAgZGVsZXRlIHdpbmRvdzsKKyAgICAgICAgICAgIHdpbmRvdyA9IDA7CisgICAg
ICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGludCByZWZDb3VudDsKKyAgICBz
dGF0aWMgUVdpbmRvdyogd2luZG93OworfTsKKworaW50IE9mZlNjcmVlblJvb3RXaW5kb3c6OnJl
ZkNvdW50ID0gMDsKK1FXaW5kb3cqIE9mZlNjcmVlblJvb3RXaW5kb3c6OndpbmRvdyA9IDA7CisK
K1FWZWN0b3I8aW50PiBxZ2x4QnVpbGRTcGVjKCkKK3sKKyAgICBRVmVjdG9yPGludD4gc3BlYyg0
OCk7CisgICAgaW50IGkgPSAwOworCisgICAgLy8gVGhlIHNwZWNpZmljYXRpb24gaXMgYSBzZXQg
a2V5IHZhbHVlIHBhaXJzIHN0b3JlZCBpbiBhIHNpbXBsZSBhcnJheS4KKyAgICBzcGVjW2krK10g
PSBHTFhfTEVWRUw7ICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjW2krK10gPSAwOworICAg
IHNwZWNbaSsrXSA9IEdMWF9EUkFXQUJMRV9UWVBFOyAgICAgICAgICAgICAgICAgIHNwZWNbaSsr
XSA9IEdMWF9QSVhNQVBfQklUIHwgR0xYX1dJTkRPV19CSVQ7CisgICAgc3BlY1tpKytdID0gR0xY
X0JJTkRfVE9fVEVYVFVSRV9UQVJHRVRTX0VYVDsgICAgc3BlY1tpKytdID0gR0xYX1RFWFRVUkVf
MkRfQklUX0VYVDsKKyAgICBzcGVjW2krK10gPSBHTFhfQklORF9UT19URVhUVVJFX1JHQl9FWFQ7
ICAgICAgICBzcGVjW2krK10gPSBUUlVFOworCisgICAgc3BlY1tpKytdID0gMDsKKyAgICByZXR1
cm4gc3BlYzsKK30KKworc3RydWN0IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUgeworICAgIEdyYXBo
aWNzU3VyZmFjZVByaXZhdGUoKQorICAgICAgICA6IG1fZGlzcGxheSgwKQorICAgICAgICAsIG1f
eFBpeG1hcCgwKQorICAgICAgICAsIG1fZ2x4UGl4bWFwKDApCisgICAgICAgICwgbV9zdXJmYWNl
KDApCisgICAgICAgICwgbV9nbENvbnRleHQobmV3IFFPcGVuR0xDb250ZXh0KQorICAgICAgICAs
IG1fdGV4dHVyZUlzWUludmVydGVkKGZhbHNlKQorICAgICAgICAsIG1faGFzQWxwaGEoZmFsc2Up
CisgICAgeworICAgICAgICBtX2Rpc3BsYXkgPSBYT3BlbkRpc3BsYXkoMCk7CisgICAgICAgIG1f
Z2xDb250ZXh0LT5jcmVhdGUoKTsKKyAgICB9CisKKyAgICB+R3JhcGhpY3NTdXJmYWNlUHJpdmF0
ZSgpCisgICAgeworICAgICAgICBpZiAobV9nbHhQaXhtYXApCisgICAgICAgICAgICBnbFhEZXN0
cm95UGl4bWFwKG1fZGlzcGxheSwgbV9nbHhQaXhtYXApOworICAgICAgICBtX2dseFBpeG1hcCA9
IDA7CisKKyAgICAgICAgaWYgKG1fZ2xDb250ZXh0KQorICAgICAgICAgICAgZGVsZXRlIG1fZ2xD
b250ZXh0OworICAgICAgICBtX2dsQ29udGV4dCA9IDA7CisKKyAgICAgICAgaWYgKG1feFBpeG1h
cCkKKyAgICAgICAgICAgIFhGcmVlUGl4bWFwKG1fZGlzcGxheSwgbV94UGl4bWFwKTsKKyAgICAg
ICAgbV94UGl4bWFwID0gMDsKKworICAgICAgICBpZiAobV9zdXJmYWNlKSB7CisgICAgICAgICAg
ICBkZWxldGUgbV9zdXJmYWNlOworICAgICAgICAgICAgbV9zdXJmYWNlID0gMDsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChtX2Rpc3BsYXkpCisgICAgICAgICAgICBYQ2xvc2VEaXNwbGF5KG1f
ZGlzcGxheSk7CisgICAgICAgIG1fZGlzcGxheSA9IDA7CisgICAgfQorCisgICAgdWludDMyX3Qg
Y3JlYXRlU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgbV9zdXJm
YWNlID0gbmV3IFFXaW5kb3cobV9vZmZTY3JlZW5XaW5kb3cuZ2V0KG1fZGlzcGxheSkpOworICAg
ICAgICBtX3N1cmZhY2UtPnNldFN1cmZhY2VUeXBlKFFTdXJmYWNlOjpPcGVuR0xTdXJmYWNlKTsK
KyAgICAgICAgbV9zdXJmYWNlLT5zZXRHZW9tZXRyeSgwLCAwLCBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpOworICAgICAgICBtX3N1cmZhY2UtPmNyZWF0ZSgpOworICAgICAgICBYQ29tcG9z
aXRlUmVkaXJlY3RXaW5kb3cobV9kaXNwbGF5LCBtX3N1cmZhY2UtPmhhbmRsZSgpLT53aW5JZCgp
LCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBY
UmVuZGVyIEV4dGVuc2lvbiBpcyBhdmFpbGFibGUuCisgICAgICAgIGludCBldmVudEJhc2VwLCBl
cnJvckJhc2VwOworICAgICAgICBpZiAoIVhSZW5kZXJRdWVyeUV4dGVuc2lvbihtX2Rpc3BsYXks
ICZldmVudEJhc2VwLCAmZXJyb3JCYXNlcCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAg
ICAgICBtX3N1cmZhY2UtPnNob3coKTsKKworICAgICAgICByZXR1cm4gbV9zdXJmYWNlLT5oYW5k
bGUoKS0+d2luSWQoKTsKKyAgICB9CisKKyAgICB2b2lkIGNyZWF0ZVBpeG1hcCh1aW50MzJfdCB3
aW5JZCkKKyAgICB7CisgICAgICAgIFhXaW5kb3dBdHRyaWJ1dGVzIGF0dHI7CisgICAgICAgIFhH
ZXRXaW5kb3dBdHRyaWJ1dGVzKG1fZGlzcGxheSwgd2luSWQsICZhdHRyKTsKKworICAgICAgICBY
UmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3JtYXQobV9kaXNw
bGF5LCBhdHRyLnZpc3VhbCk7CisgICAgICAgIG1faGFzQWxwaGEgPSAoZm9ybWF0LT50eXBlID09
IFBpY3RUeXBlRGlyZWN0ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayk7CisgICAgICAgIG1f
c2l6ZSA9IEludFNpemUoYXR0ci53aWR0aCwgYXR0ci5oZWlnaHQpOworCisgICAgICAgIFFWZWN0
b3I8aW50PiBnbHhDb25maWdTcGVjID0gcWdseEJ1aWxkU3BlYygpOworICAgICAgICBpbnQgbnVt
YmVyT2ZDb25maWdzOworICAgICAgICBHTFhGQkNvbmZpZyogY29uZmlncyA9IGdsWENob29zZUZC
Q29uZmlnKG1fZGlzcGxheSwgWERlZmF1bHRTY3JlZW4obV9kaXNwbGF5KSwgZ2x4Q29uZmlnU3Bl
Yy5jb25zdERhdGEoKSwgJm51bWJlck9mQ29uZmlncyk7CisKKyAgICAgICAgbV94UGl4bWFwID0g
WENvbXBvc2l0ZU5hbWVXaW5kb3dQaXhtYXAobV9kaXNwbGF5LCB3aW5JZCk7CisKKyAgICAgICAg
UVZlY3RvcjxpbnQ+IGF0dHJpYkxpc3Q7CisgICAgICAgIGF0dHJpYkxpc3QuYXBwZW5kKEdMWF9U
RVhUVVJFX0ZPUk1BVF9FWFQpOworICAgICAgICBhdHRyaWJMaXN0LmFwcGVuZChHTFhfVEVYVFVS
RV9GT1JNQVRfUkdCX0VYVCk7CisgICAgICAgIGF0dHJpYkxpc3QuYXBwZW5kKEdMWF9URVhUVVJF
X1RBUkdFVF9FWFQpOworICAgICAgICBhdHRyaWJMaXN0LmFwcGVuZChHTFhfVEVYVFVSRV8yRF9F
WFQpOworICAgICAgICBhdHRyaWJMaXN0LmFwcGVuZCgwKTsKKyAgICAgICAgbV9nbHhQaXhtYXAg
PSBnbFhDcmVhdGVQaXhtYXAobV9kaXNwbGF5LCAqY29uZmlncywgbV94UGl4bWFwLCBhdHRyaWJM
aXN0LmNvbnN0RGF0YSgpKTsKKworICAgICAgICB1aW50IGludmVydGVkID0gMDsKKyAgICAgICAg
Z2xYUXVlcnlEcmF3YWJsZShtX2Rpc3BsYXksIG1fZ2x4UGl4bWFwLCBHTFhfWV9JTlZFUlRFRF9F
WFQsICZpbnZlcnRlZCk7CisgICAgICAgIG1fdGV4dHVyZUlzWUludmVydGVkID0gISFpbnZlcnRl
ZDsKKworICAgICAgICBYRnJlZShjb25maWdzKTsKKyAgICB9CisKKyAgICB2b2lkIG1ha2VDdXJy
ZW50KCkKKyAgICB7CisgICAgICAgIFFPcGVuR0xDb250ZXh0KiBnbENvbnRleHQgPSBRT3BlbkdM
Q29udGV4dDo6Y3VycmVudENvbnRleHQoKTsKKyAgICAgICAgaWYgKG1fc3VyZmFjZSAmJiBnbENv
bnRleHQpCisgICAgICAgICAgICBnbENvbnRleHQtPm1ha2VDdXJyZW50KG1fc3VyZmFjZSk7Cisg
ICAgfQorCisgICAgdm9pZCBzd2FwQnVmZmVycygpCisgICAgeworICAgICAgICBpZiAoIW1fc3Vy
ZmFjZS0+aXNWaXNpYmxlKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdoaWxlICgh
bV9zdXJmYWNlLT5pc0V4cG9zZWQoKSkKKyAgICAgICAgICAgIFFDb3JlQXBwbGljYXRpb246OnBy
b2Nlc3NFdmVudHMoKTsKKyAgICAgICAgUU9wZW5HTENvbnRleHQqIGdsQ29udGV4dCA9IFFPcGVu
R0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgpOworICAgICAgICBpZiAobV9zdXJmYWNlICYmIGds
Q29udGV4dCkKKyAgICAgICAgICAgIGdsQ29udGV4dC0+c3dhcEJ1ZmZlcnMobV9zdXJmYWNlKTsK
KyAgICB9CisKKworICAgIERpc3BsYXkqIGRpc3BsYXkoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bs
YXk7IH0KKworICAgIEdMWFBpeG1hcCBnbHhQaXhtYXAoKSBjb25zdCB7IHJldHVybiBtX2dseFBp
eG1hcDsgfQorCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisK
KyAgICBRT3BlbkdMQ29udGV4dCogZ2xDb250ZXh0KCkgeyByZXR1cm4gbV9nbENvbnRleHQ7IH0K
KworcHJpdmF0ZToKKyAgICBPZmZTY3JlZW5Sb290V2luZG93IG1fb2ZmU2NyZWVuV2luZG93Owor
ICAgIEludFNpemUgbV9zaXplOworICAgIERpc3BsYXkqIG1fZGlzcGxheTsKKyAgICBQaXhtYXAg
bV94UGl4bWFwOworICAgIEdMWFBpeG1hcCBtX2dseFBpeG1hcDsKKyAgICBRV2luZG93KiBtX3N1
cmZhY2U7CisgICAgUU9wZW5HTENvbnRleHQqIG1fZ2xDb250ZXh0OworICAgIGJvb2wgbV90ZXh0
dXJlSXNZSW52ZXJ0ZWQ7CisgICAgYm9vbCBtX2hhc0FscGhhOworfTsKKworc3RhdGljIGJvb2wg
aW5pdGlhbGl6ZShHcmFwaGljc1N1cmZhY2VQcml2YXRlKiBwKQoreworICAgIGlmIChwR2xCbGl0
RnJhbWVidWZmZXIgJiYgcEdsQmluZEZyYW1lYnVmZmVyICYmIHBHbFhCaW5kVGV4SW1hZ2VFWFQg
JiYgcEdsWFJlbGVhc2VUZXhJbWFnZUVYVCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgUU9w
ZW5HTENvbnRleHQqIGdsQ29udGV4dCA9IHAtPmdsQ29udGV4dCgpOworICAgIHBHbFhCaW5kVGV4
SW1hZ2VFWFQgPSByZWludGVycHJldF9jYXN0PFBGTkdMWEJJTkRURVhJTUFHRUVYVFBST0M+KGds
Q29udGV4dC0+Z2V0UHJvY0FkZHJlc3MoImdsWEJpbmRUZXhJbWFnZUVYVCIpKTsKKyAgICBwR2xY
UmVsZWFzZVRleEltYWdlRVhUID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTFhSRUxFQVNFVEVYSU1B
R0VFWFRQUk9DPihnbENvbnRleHQtPmdldFByb2NBZGRyZXNzKCJnbFhSZWxlYXNlVGV4SW1hZ2VF
WFQiKSk7CisgICAgcEdsQmluZEZyYW1lYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEJJ
TkRGUkFNRUJVRkZFUlBST0M+KGdsQ29udGV4dC0+Z2V0UHJvY0FkZHJlc3MoImdsQmluZEZyYW1l
YnVmZmVyIikpOworICAgIHBHbEJsaXRGcmFtZWJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZO
R0xCTElURlJBTUVCVUZGRVJQUk9DPihnbENvbnRleHQtPmdldFByb2NBZGRyZXNzKCJnbEJsaXRG
cmFtZWJ1ZmZlciIpKTsKKyAgICByZXR1cm4gcEdsQmxpdEZyYW1lYnVmZmVyICYmIHBHbEJpbmRG
cmFtZWJ1ZmZlciAmJiBwR2xYQmluZFRleEltYWdlRVhUICYmIHBHbFhSZWxlYXNlVGV4SW1hZ2VF
WFQ7Cit9CisKK3VpbnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1FeHBvcnQoKQorewor
ICAgIHJldHVybiBtX3BsYXRmb3JtU3VyZmFjZTsKK30KKwordWludDMyX3QgR3JhcGhpY3NTdXJm
YWNlOjpwbGF0Zm9ybUdldFRleHR1cmVJRCgpCit7CisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAg
ICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKworICAgIGdsR2VuVGV4dHVyZXMo
MSwgJm1fdGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1
cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9G
SUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGds
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBf
VE9fRURHRSk7CisgICAgcEdsWEJpbmRUZXhJbWFnZUVYVChtX3ByaXZhdGUtPmRpc3BsYXkoKSwg
bV9wcml2YXRlLT5nbHhQaXhtYXAoKSwgR0xYX0ZST05UX0VYVCwgMCk7CisgICAgcmV0dXJuIG1f
dGV4dHVyZTsKK30KKwordm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29weVRvR0xUZXh0
dXJlKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgaWQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NTdXJmYWNl
OjpwbGF0Zm9ybUNvcHlGcm9tRnJhbWVidWZmZXIodWludDMyX3Qgb3JpZ2luRmJvLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0KQoreworICAgIG1fcHJpdmF0ZS0+bWFrZUN1cnJlbnQoKTsKKyAg
ICBpbnQgd2lkdGggPSBtX3NpemUud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gbV9zaXplLmhl
aWdodCgpOworICAgIGdsUHVzaEF0dHJpYihHTF9BTExfQVRUUklCX0JJVFMpOworICAgIEdMaW50
IG9sZEZCTzsKKyAgICBnbEdldEludGVnZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZvbGRG
Qk8pOworICAgIHBHbEJpbmRGcmFtZWJ1ZmZlcihHTF9SRUFEX0ZSQU1FQlVGRkVSLCBvcmlnaW5G
Ym8pOworICAgIHBHbEJpbmRGcmFtZWJ1ZmZlcihHTF9EUkFXX0ZSQU1FQlVGRkVSLCBtX3ByaXZh
dGUtPmdsQ29udGV4dCgpLT5kZWZhdWx0RnJhbWVidWZmZXJPYmplY3QoKSk7CisgICAgcEdsQmxp
dEZyYW1lYnVmZmVyKDAsIDAsIHdpZHRoLCBoZWlnaHQsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIEdM
X0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisgICAgcEdsQmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBvbGRGQk8pOworICAgIGdsUG9wQXR0cmliKCk7CisgICAgbV9wcml2YXRl
LT5zd2FwQnVmZmVycygpOworfQorCitQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gR3JhcGhp
Y3NTdXJmYWNlOjpwbGF0Zm9ybUNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFn
cykKK3sKKyAgICAvLyBYMTEgZG9lcyBub3Qgc3VwcG9ydCBDb3B5VG9UZXh0dXJlLCBzbyB3ZSBk
byBub3QgY3JlYXRlIGEgR3JhcGhpY3NTdXJmYWNlIGlmIHRoaXMgaXMgcmVxdWVzdGVkLgorICAg
IGlmIChmbGFncyAmIFN1cHBvcnRzQ29weVRvVGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIFBhc3NS
ZWZQdHI8R3JhcGhpY3NTdXJmYWNlPigpOworCisgICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4g
c3VyZmFjZSA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc1N1cmZhY2Uoc2l6ZSwgZmxhZ3MpKTsKKwor
ICAgIHN1cmZhY2UtPm1fcHJpdmF0ZSA9IG5ldyBHcmFwaGljc1N1cmZhY2VQcml2YXRlKCk7Cisg
ICAgaWYgKCFpbml0aWFsaXplKHN1cmZhY2UtPm1fcHJpdmF0ZSkpCisgICAgICAgIHJldHVybiBQ
YXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsKKworICAgIHN1cmZhY2UtPm1fcGxhdGZvcm1T
dXJmYWNlID0gc3VyZmFjZS0+bV9wcml2YXRlLT5jcmVhdGVTdXJmYWNlKHNpemUpOworCisgICAg
cmV0dXJuIHN1cmZhY2U7Cit9CisKK1Bhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGlj
c1N1cmZhY2U6OnBsYXRmb3JtSW1wb3J0KGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdz
LCB1aW50MzJfdCB0b2tlbikKK3sKKyAgICAvLyBYMTEgZG9lcyBub3Qgc3VwcG9ydCBDb3B5VG9U
ZXh0dXJlLCBzbyB3ZSBkbyBub3QgY3JlYXRlIGEgR3JhcGhpY3NTdXJmYWNlIGlmIHRoaXMgaXMg
cmVxdWVzdGVkLgorICAgIGlmIChmbGFncyAmIFN1cHBvcnRzQ29weVRvVGV4dHVyZSkKKyAgICAg
ICAgcmV0dXJuIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPigpOworCisgICAgUmVmUHRyPEdy
YXBoaWNzU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc1N1cmZhY2Uoc2l6
ZSwgZmxhZ3MpKTsKKworICAgIHN1cmZhY2UtPm1fcHJpdmF0ZSA9IG5ldyBHcmFwaGljc1N1cmZh
Y2VQcml2YXRlKCk7CisgICAgaWYgKCFpbml0aWFsaXplKHN1cmZhY2UtPm1fcHJpdmF0ZSkpCisg
ICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsKKworICAgIHN1cmZh
Y2UtPm1fcGxhdGZvcm1TdXJmYWNlID0gdG9rZW47CisKKyAgICBzdXJmYWNlLT5tX3ByaXZhdGUt
PmNyZWF0ZVBpeG1hcChzdXJmYWNlLT5tX3BsYXRmb3JtU3VyZmFjZSk7CisgICAgc3VyZmFjZS0+
bV9zaXplID0gc3VyZmFjZS0+bV9wcml2YXRlLT5zaXplKCk7CisKKyAgICByZXR1cm4gc3VyZmFj
ZTsKK30KKworY2hhciogR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUxvY2soY29uc3QgSW50UmVj
dCYgcmVjdCwgaW50KiBvdXRwdXRTdHJpZGUsIExvY2tPcHRpb25zIGxvY2tPcHRpb25zKQorewor
ICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1VbmxvY2so
KQoreworfQorCit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAg
ICBpZiAobV90ZXh0dXJlKSB7CisgICAgICAgIHBHbFhSZWxlYXNlVGV4SW1hZ2VFWFQobV9wcml2
YXRlLT5kaXNwbGF5KCksIG1fcHJpdmF0ZS0+Z2x4UGl4bWFwKCksIEdMWF9GUk9OVF9FWFQpOwor
ICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIH0KKworICAgIGlm
IChtX3ByaXZhdGUpCisgICAgICAgIGRlbGV0ZSBtX3ByaXZhdGU7CisgICAgbV9wcml2YXRlID0g
MDsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggODQzMzdkNS4uODFjNjg0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA3LTExICBaZW5vIEFsYmlzc2VyICA8emVub0B3
ZWJraXQub3JnPgorCisgICAgICAgIFtRdF1bV0syXSBJbXBsZW1lbnQgR3JhcGhpY3NTdXJmYWNl
IGZvciBMaW51eC9HTFguCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05MDg4MQorCisgICAgICAgIEFkZCBhIEdMWCBiYXNlZCBHcmFwaGljc1N1cmZhY2Ug
aW1wbGVtZW50YXRpb24gZm9yIExpbnV4LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogU2hhcmVkL1NoYXJlYWJsZVN1cmZhY2UuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUpOgorICAgICAgICBPbmx5IGNyZWF0
ZSBhIEdyYXBoaWNzU3VyZmFjZSBmcm9tIGEgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlCisgICAg
ICAgIGluIGNhc2UgdGhlIEhhbmRsZSBjb250YWlucyBhIHZhbGlkIEdyYXBoaWNzU3VyZmFjZSB0
b2tlbi4KKyAgICAgICAgT3RoZXJ3aXNlIGZhbGwgYmFjayB0byBjcmVhdGluZyBhIFNoYXJlYWJs
ZUJpdG1hcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnVwZGF0ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIEV2ZW4gd2hlbiBHcmFwaGljc1N1cmZhY2UgaXMgZW5hYmxl
ZCwgbm90IGFsbCBTaGFyZWFibGVTdXJmYWNlcworICAgICAgICB3aWxsIG5lY2Vzc2FyaWx5IGJl
IGJhY2tlZCBieSBhIEdyYXBoaWNzU3VyZmFjZS4gSW4gY2FzZSBvZgorICAgICAgICBhIFNoYXJl
YWJsZVN1cmZhY2UgYmVpbmcgYmFja2VkIGJ5IGEgU2hhcmVhYmxlQml0bWFwIGluc3RlYWQsCisg
ICAgICAgIHRoZSBHcmFwaGljc1N1cmZhY2UgdG9rZW4gd2lsbCBhbHdheXMgYmUgbnVsbC4KKyAg
ICAgICAgU28gaW5zdGVhZCBvZiB1c2luZyB0aGUgR3JhcGhpY3NTdXJmYWNlIHRva2VuIGFzIGEg
a2V5IGZvcgorICAgICAgICBzdG9yaW5nIHN1cmZhY2VzIGluIGEgbWFwLCB3ZSBjcmVhdGUgYSB1
bmlxdWUga2V5IGZyb20KKyAgICAgICAgbGF5ZXJJRCBhbmQgdGlsZUlELgorICAgICAgICAqIFVJ
UHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lmg6CisgICAgICAgIChMYXllclRyZWVD
b29yZGluYXRvclByb3h5KToKKwogMjAxMi0wNy0wOSAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgc2hvdWxkIG9ubHkgdHJp
Z2dlciB3aGVuIGEgbmV3IGZyYW1lIGNhbiBiZSBkaXNwbGF5ZWQuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5jcHAKaW5kZXggY2YxMGUxNi4uMmVmNWE0YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVN1cmZhY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVTdXJmYWNlLmNwcApAQCAtMTQ5LDkgKzE0OSwx
MSBAQCBTaGFyZWFibGVTdXJmYWNlOjp+U2hhcmVhYmxlU3VyZmFjZSgpCiBQYXNzUmVmUHRyPFNo
YXJlYWJsZVN1cmZhY2U+IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZShjb25zdCBIYW5kbGUmIGhh
bmRsZSkKIHsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBpZiAoaGFuZGxlLmdyYXBo
aWNzU3VyZmFjZVRva2VuKCkpIHsKICAgICAgICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3Vy
ZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZS5tX3NpemUsIGhhbmRsZS5tX2Zs
YWdzLCBoYW5kbGUubV9ncmFwaGljc1N1cmZhY2VUb2tlbik7CiAgICAgICAgIGlmIChzdXJmYWNl
KQogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWFibGVTdXJmYWNlKGhhbmRs
ZS5tX3NpemUsIGhhbmRsZS5tX2ZsYWdzLCBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oc3Vy
ZmFjZSkpKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJp
dG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZS5tX2JpdG1hcEhhbmRsZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5jcHAKaW5kZXggM2IwMjE0My4uZmIwN2ZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcApAQCAtNjUsMTEg
KzY1LDE1IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVGlsZUZvckxh
eWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zCiB7CiAgICAgUmVmUHRyPFNoYXJlYWJs
ZVN1cmZhY2U+IHN1cmZhY2U7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdWludDMy
X3QgdG9rZW4gPSB1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUuZ3JhcGhpY3NTdXJmYWNlVG9rZW4o
KTsKLSAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gPjo6aXRl
cmF0b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQodG9rZW4pOworICAgIC8vIENyZWF0ZSBhIHVuaXF1
ZSBrZXkgb3V0IG9mIGxheWVySUQgYW5kIHRpbGVJRC4KKyAgICB1aW50NjRfdCBrZXkgPSBsYXll
cklEOworICAgIGtleSA8PD0gMzI7CisgICAga2V5IHw9IHRpbGVJRDsKKworICAgIEhhc2hNYXA8
dWludDY0X3QsIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiA+OjppdGVyYXRvciBpdCA9IG1fc3Vy
ZmFjZXMuZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBtX3N1cmZhY2VzLmVuZCgpKSB7CiAgICAg
ICAgIHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNl
SGFuZGxlKTsKLSAgICAgICAgbV9zdXJmYWNlcy5hZGQodG9rZW4sIHN1cmZhY2UpOworICAgICAg
ICBtX3N1cmZhY2VzLmFkZChrZXksIHN1cmZhY2UpOwogICAgIH0gZWxzZQogICAgICAgICBzdXJm
YWNlID0gaXQtPnNlY29uZDsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaAppbmRleCBiNGU3YjdjLi5jMGVkYjY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRv
clByb3h5LmgKQEAgLTc5LDcgKzc5LDcgQEAgcHJvdGVjdGVkOgogICAgIERyYXdpbmdBcmVhUHJv
eHkqIG1fZHJhd2luZ0FyZWFQcm94eTsKICAgICBSZWZQdHI8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+
IG1fcmVuZGVyZXI7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgSGFzaE1hcDx1aW50
MzJfdCwgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+ID4gbV9zdXJmYWNlczsKKyAgICBIYXNoTWFw
PHVpbnQ2NF90LCBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gPiBtX3N1cmZhY2VzOwogI2VuZGlm
CiB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggNmE0MmZjMS4uNGQyNWNhOSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA3LTExICBaZW5vIEFsYmlzc2Vy
ICA8emVub0B3ZWJraXQub3JnPgorCisgICAgICAgIFtRdF1bV0syXSBJbXBsZW1lbnQgR3JhcGhp
Y3NTdXJmYWNlIGZvciBMaW51eC9HTFguCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MDg4MQorCisgICAgICAgIEVuYWJsZSBHcmFwaGljc1N1cmZhY2Ug
Zm9yIGFsbCBRdCBwbGF0Zm9ybXMgZXhjZXB0CisgICAgICAgIGZvciBXaW4zMiBiYXNlZCBvbmVz
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcW1h
a2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmY6CisKIDIwMTItMDctMDkgIE1hdHQgRmFs
a2VuaGFnZW4gIDxmYWxrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBFTkFCTEVfRElB
TE9HX0VMRU1FTlQgYW5kIHNrZWxldG9uIGZpbGVzCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9t
a3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVy
ZXMvZmVhdHVyZXMucHJmCmluZGV4IGU3NmM4MDkuLjJiN2ZmY2QgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCisrKyBiL1Rvb2xzL3FtYWtlL21r
c3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCkBAIC0xNzEsNyArMTcxLDcgQEAgaGF2ZVF0KDQp
IHsKIH0KIAogIWNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfR1JBUEhJQ1NfU1VSRkFDRT0uKSB7
Ci0gICAgaGF2ZVF0KDUpOm1hYzogREVGSU5FUyArPSBXVEZfVVNFX0dSQVBISUNTX1NVUkZBQ0U9
MQorICAgIGhhdmVRdCg1KTohd2luMzItKjogREVGSU5FUyArPSBXVEZfVVNFX0dSQVBISUNTX1NV
UkZBQ0U9MQogfQogCiAjIC0tLS0tLS0tLS0tLS0tIEZpbGwgaW4gc3RhdGljIGRlZmF1bHRzIC0t
LS0tLS0tLS0tLS0tCg==
</data>
<flag name="commit-queue"
          id="160215"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151907</attachid>
            <date>2012-07-12 04:27:04 -0700</date>
            <delta_ts>2012-07-12 08:42:18 -0700</delta_ts>
            <desc>patch for review. - fixed issues as previously commented.</desc>
            <filename>90881_20120712-132507.patch</filename>
            <type>text/plain</type>
            <size>30541</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhMTI2NjQwLi5iYzE1OGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYg
QEAKKzIwMTItMDctMTIgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgW1F0XVtXSzJdIEltcGxlbWVudCBHcmFwaGljc1N1cmZhY2UgZm9yIExpbnV4L0dMWC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwODgxCisKKyAg
ICAgICAgQWRkIGEgR0xYIGJhc2VkIEdyYXBoaWNzU3VyZmFjZSBpbXBsZW1lbnRhdGlvbiBmb3Ig
TGludXguCisgICAgICAgIE5hdGl2ZSBYIHdpbmRvd3MgYXJlIGJlaW5nIHVzZWQgZm9yIGV4Y2hh
bmdpbmcgdGV4dHVyZXMKKyAgICAgICAgd2l0aCB0aGUgVUlQcm9jZXNzLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAg
ICAgKiBXZWJDb3JlLnByaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9H
cmFwaGljc1N1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpj
cmVhdGUpOgorICAgICAgICAgICAgTW92ZSBjcmVhdGluZyBHcmFwaGljc1N1cmZhY2UgaW5zdGFu
Y2UgaW50bworICAgICAgICAgICAgcGxhdGZvcm1DcmVhdGUvcGxhdGZvcm1JbXBvcnQgZnVuY3Rp
b25zIHRvIGFsbG93CisgICAgICAgICAgICBwbGF0Zm9ybSBzcGVjaWZpYyBjcmVhdGlvbiBiYXNl
ZCBvbiB0aGUgcHJvdmlkZWQgZmxhZ3MuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZh
Y2U6OkdyYXBoaWNzU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6
On5HcmFwaGljc1N1cmZhY2UpOgorICAgICAgICAgICAgQ2FsbCBwbGF0Zm9ybURlc3Ryb3kgd2hl
biBkZXN0cm95aW5nIGEgR3JhcGhpY3NTdXJmYWNlLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmg6CisgICAg
ICAgICAgICBNYWtlIHBsYXRmb3JtQ3JlYXRlL3BsYXRmb3JtSW1wb3J0IGZ1bmN0aW9ucyBzdGF0
aWMKKyAgICAgICAgICAgIHRvIGJlIGFibGUgdG8gY2FsbCB0aGVzZSBmcm9tIHRoZSBzdGF0aWMg
Y3JlYXRlIGZ1bmN0aW9uLgorICAgICAgICAgICAgQWRkIERlc3RydWN0b3IgcHJvdG90eXBlIGFu
ZCBhZGQgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSBtZW1iZXIuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKEdyYXBoaWNzU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1DcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUltcG9ydCk6CisgICAgICAg
ICAgICBJbnNlcnQgY3JlYXRpb24gb2YgR3JhcGhpY3NTdXJmYWNlIGluc3RhbmNlLgorICAgICAg
ICAgICAgVGhpcyBhbGxvd3MgaGF2aW5nIGEgcGxhdGZvcm0gc3BlY2lmaWMgY3JlYXRpb24gbWVj
aGFuaXNtCisgICAgICAgICAgICBmb3IgR0xYLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChPZmZTY3JlZW5Sb290V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6
Ok9mZlNjcmVlblJvb3RXaW5kb3c6Ok9mZlNjcmVlblJvb3RXaW5kb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6T2ZmU2NyZWVuUm9vdFdpbmRvdzo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZlNj
cmVlblJvb3RXaW5kb3c6On5PZmZTY3JlZW5Sb290V2luZG93KToKKyAgICAgICAgICAgIEFkZCBh
biBPZmZTY3JlZW5Sb290V2luZG93IHNpbmdlbHRvbiB0aGF0IGlzIGJlaW5nIHVzZWQKKyAgICAg
ICAgICAgIGFzIGEgcGFyZW50IGZvciBhbGwgbmF0aXZlIG9mZnNjcmVlbiB3aW5kb3dzLgorICAg
ICAgICAoV2ViQ29yZTo6cWdseEJ1aWxkU3BlYyk6CisgICAgICAgICAgICBBZGQgYSBjb252ZW5p
ZW5jZSBmdW5jdGlvbiBmb3IgYnVpbGRpbmcgdGhlIHNwZWNzIGZvcgorICAgICAgICAgICAgdGhl
IGNyZWF0aW9uIG9mIGdsWFBpeG1hcHMuCisgICAgICAgIChHcmFwaGljc1N1cmZhY2VQcml2YXRl
KToKKyAgICAgICAgICAgIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBtYW5hZ2UgYWxsIHRoZSBYIHJl
bGF0ZWQgcmVzb3VyY2VzCisgICAgICAgICAgICBzdWNoIGFzIG9wZW5pbmcgYSBkaXNwbGF5IG9y
IGNyZWF0aW5nIFhQaXhtYXBzIGV0Yy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFj
ZVByaXZhdGU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGUpOgorICAgICAgICAgICAgT3BlbiBhIGNv
bm5lY3Rpb24gdG8gdGhlIFggc2VydmVyIGFuZCBjcmVhdGUgYQorICAgICAgICAgICAgUU9wZW5H
TENvbnRleHQgdGhhdCBjYW4gYmUgdXNlZCB0byByZXNvbHZlIEdMIGZ1bmN0aW9ucy4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6On5HcmFwaGljc1N1cmZhY2VQcml2
YXRlKToKKyAgICAgICAgICAgIFByb3Blcmx5IGNsZWFudXAgYW5kIHJlbGVhc2UgYWxsIHRoZSBY
IHJlc291cmNlcyBhZ2Fpbi4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZh
dGU6OmNyZWF0ZVN1cmZhY2UpOgorICAgICAgICAgICAgQ3JlYXRlIGEgc3VyZmFjZSB0aGF0IGlz
IHBsYWNlZCBvZmYgc2NyZWVuIGFuZCBjYW4gYmUKKyAgICAgICAgICAgIHVzZWQgYXMgYSByZW5k
ZXJpbmcgdGFyZ2V0IGJ5IHRoZSBXZWJQcm9jZXNzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NTdXJmYWNlUHJpdmF0ZTo6Y3JlYXRlUGl4bWFwKToKKyAgICAgICAgICAgIENyZWF0ZSBhIEdM
WFBpeG1hcCBmcm9tIHRoZSBYV2luZG93IHRoYXQgd2FzIHByZXZpb3VzbHkKKyAgICAgICAgICAg
IHJlZGlyZWN0ZWQgYnkgdGhlIFdlYlByb2Nlc3MuIFRoaXMgR0xYUGl4bWFwIGNhbiB0aGVuIGJl
CisgICAgICAgICAgICBib3VuZCB0byBhIHRleHR1cmUgYW5kIGJlaW5nIHBhaW50ZWQgb24gc2Ny
ZWVuIGJ5IHRoZQorICAgICAgICAgICAgVUlQcm9jZXNzLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZTo6bWFrZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZTo6ZGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c1N1cmZhY2VQcml2YXRlOjpnbHhQaXhtYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NT
dXJmYWNlUHJpdmF0ZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQ
cml2YXRlOjpnbENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZUdMTWV0aG9kcyk6
CisgICAgICAgICAgICBJbml0aWFsaXplIGFsbCB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHRo
ZSBHTCBmdW5jdGlvbnMgdXNlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6
cGxhdGZvcm1FeHBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0
Zm9ybUdldFRleHR1cmVJRCk6CisgICAgICAgICAgICBCaW5kIHRoZSBHTFhQaXhtYXAgdG8gYSB0
ZXh0dXJlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlU
b0dMVGV4dHVyZSk6CisgICAgICAgICAgICBOb3QgYmVlaW5nIGltcGxlbWVudGVkIGZvciBHTFgu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29weUZyb21GcmFt
ZWJ1ZmZlcik6CisgICAgICAgICAgICBCbGl0IG9yaWdpbiBmYm8gb250byB0aGUgR3JhcGhpY3NT
dXJmYWNlJ3MgYmFja2luZy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxh
dGZvcm1DcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9y
bUltcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtTG9j
ayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtVW5sb2NrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1EZXN0cm95KToKKwog
MjAxMi0wNy0wOSAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9yZz4KIAogICAgICAgICBy
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUgc2hvdWxkIG9ubHkgdHJpZ2dlciB3aGVuIGEgbmV3IGZyYW1l
IGNhbiBiZSBkaXNwbGF5ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
IGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA0ZDYyYWQ4Li40Yzk2OTIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKQEAgLTQxNzMsNiArNDE3Myw5IEBAIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0Vf
R1JBUEhJQ1NfU1VSRkFDRT0xKSB7CiAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAKICAgICAgICAgSU5DTFVERVBB
VEggKz0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZUZvdW5kYXRpb24uZnJhbWV3b3Jr
L0hlYWRlcnMKICAgICB9CisgICAgbGludXgtKiAgeworICAgICAgICBTT1VSQ0VTICs9IHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKKyAgICB9CiB9
CiAKICMgTWFrZSBzdXJlIHRoZSBkZXJpdmVkIHNvdXJjZXMgYXJlIGJ1aWx0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJp
CmluZGV4IDFhZjljY2MuLmU1NDM2ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCkBAIC0xMSw3ICsxMSw3IEBA
IFNPVVJDRV9ESVIgPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9XZWJDb3JlCiBDT05GSUcg
Kz0gdGV4bWFwCiAKIFFUICo9IG5ldHdvcmsgc3FsCi1oYXZlUXQoNSk6IFFUICo9IGd1aS1wcml2
YXRlCitoYXZlUXQoNSk6IFFUICo9IGNvcmUtcHJpdmF0ZSBndWktcHJpdmF0ZQogCiBXRUJDT1JF
X0dFTkVSQVRFRF9TT1VSQ0VTX0RJUiA9ICQke1JPT1RfQlVJTERfRElSfS9Tb3VyY2UvV2ViQ29y
ZS8kJHtHRU5FUkFURURfU09VUkNFU19ERVNURElSfQogCkBAIC0yMDMsNiArMjAzLDEwIEBAIGNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CiAgICAgfQogfQogCitjb250YWlucyhE
RUZJTkVTLCBXVEZfVVNFX0dSQVBISUNTX1NVUkZBQ0U9MSkgeworICAgIGxpbnV4LSo6IExJQlMg
Kz0gLWxYY29tcG9zaXRlCit9CisKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7
CiAgICAgIWNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsKSB7CiAgICAgICAgIGVycm9yKCAiVGhp
cyBjb25maWd1cmF0aW9uIG5lZWRzIGFuIE9wZW5HTCBlbmFibGVkIFF0LiBZb3VyIFF0IGlzIG1p
c3NpbmcgT3BlbkdMLiIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmNwcAppbmRleCAwMThhODljLi4y
YjhjZDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9HcmFwaGljc1N1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHAKQEAgLTI3LDE4ICsyNywxMiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGlj
c1N1cmZhY2U6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncywgdWludDMy
X3QgdG9rZW4pCiB7Ci0gICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0
UmVmKG5ldyBHcmFwaGljc1N1cmZhY2Uoc2l6ZSwgZmxhZ3MpKTsKLSAgICBpZiAoIXN1cmZhY2Ut
PnBsYXRmb3JtSW1wb3J0KHRva2VuKSkKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8R3JhcGhp
Y3NTdXJmYWNlPigpOwotICAgIHJldHVybiBzdXJmYWNlOworICAgIHJldHVybiBwbGF0Zm9ybUlt
cG9ydChzaXplLCBmbGFncywgdG9rZW4pOwogfQogCiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFj
ZT4gR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR3JhcGhpY3NT
dXJmYWNlOjpGbGFncyBmbGFncykKIHsKLSAgICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJm
YWNlID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzU3VyZmFjZShzaXplLCBmbGFncykpOwotICAgIGlm
ICghc3VyZmFjZS0+cGxhdGZvcm1DcmVhdGUoc2l6ZSwgZmxhZ3MpKQotICAgICAgICByZXR1cm4g
UGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7Ci0gICAgcmV0dXJuIHN1cmZhY2U7CisgICAg
cmV0dXJuIHBsYXRmb3JtQ3JlYXRlKHNpemUsIGZsYWdzKTsKIH0KIAogdWludDMyX3QgR3JhcGhp
Y3NTdXJmYWNlOjpleHBvcnRUb2tlbigpCkBAIC03MCwxMyArNjQsMTkgQEAgdm9pZCBHcmFwaGlj
c1N1cmZhY2U6OmNvcHlGcm9tRnJhbWVidWZmZXIodWludDMyX3QgZmJvLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWMKIH0KIAogR3JhcGhpY3NTdXJmYWNlOjpHcmFwaGljc1N1cmZhY2UoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCi0gICAgOiBtX3NpemUoc2l6ZSkKLSAgICAsIG1f
ZmxhZ3MoZmxhZ3MpCisgICAgOiBtX2ZsYWdzKGZsYWdzKQorICAgICwgbV9zaXplKHNpemUpCiAg
ICAgLCBtX3BsYXRmb3JtU3VyZmFjZSgwKQogICAgICwgbV90ZXh0dXJlKDApCiAgICAgLCBtX2Zi
bygwKQorICAgICwgbV9wcml2YXRlKDApCiB7CiB9CiAKK0dyYXBoaWNzU3VyZmFjZTo6fkdyYXBo
aWNzU3VyZmFjZSgpCit7CisgICAgcGxhdGZvcm1EZXN0cm95KCk7Cit9CisKIH0KICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3Jh
cGhpY3NTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9HcmFwaGljc1N1cmZhY2UuaAppbmRleCBmZjcxZmNkLi43YWVlZDc5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGlj
c1N1cmZhY2UuaApAQCAtMzIsMTAgKzMyLDE0IEBACiAjaWYgT1MoREFSV0lOKQogdHlwZWRlZiBz
dHJ1Y3QgX19JT1N1cmZhY2UqIElPU3VyZmFjZVJlZjsKIHR5cGVkZWYgSU9TdXJmYWNlUmVmIFBs
YXRmb3JtR3JhcGhpY3NTdXJmYWNlOworI2Vsc2UKK3R5cGVkZWYgdWludDMyX3QgUGxhdGZvcm1H
cmFwaGljc1N1cmZhY2U7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3Qg
R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTsKKwogY2xhc3MgR3JhcGhpY3NTdXJmYWNlIDogcHVibGlj
IFJlZkNvdW50ZWQ8R3JhcGhpY3NTdXJmYWNlPiB7CiBwdWJsaWM6CiAgICAgZW51bSBGbGFnIHsK
QEAgLTY5LDEwICs3MywxMSBAQCBwdWJsaWM6CiAgICAgdWludDMyX3QgZ2V0VGV4dHVyZUlEKCk7
CiAgICAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luUGFpbnQoY29uc3QgSW50UmVj
dCYsIExvY2tPcHRpb25zKTsKICAgICBQYXNzUmVmUHRyPEltYWdlPiBjcmVhdGVSZWFkT25seUlt
YWdlKGNvbnN0IEludFJlY3QmKTsKKyAgICB+R3JhcGhpY3NTdXJmYWNlKCk7CiAKIHByb3RlY3Rl
ZDoKLSAgICBib29sIHBsYXRmb3JtQ3JlYXRlKGNvbnN0IEludFNpemUmLCBGbGFncyk7Ci0gICAg
Ym9vbCBwbGF0Zm9ybUltcG9ydCh1aW50MzJfdCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R3Jh
cGhpY3NTdXJmYWNlPiBwbGF0Zm9ybUNyZWF0ZShjb25zdCBJbnRTaXplJiwgRmxhZ3MpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gcGxhdGZvcm1JbXBvcnQoY29uc3Qg
SW50U2l6ZSYsIEZsYWdzLCB1aW50MzJfdCk7CiAgICAgdWludDMyX3QgcGxhdGZvcm1FeHBvcnQo
KTsKICAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOwogCkBAIC0xMDAsNiArMTA1LDcgQEAgcHJp
dmF0ZToKICAgICBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFjZSBtX3BsYXRmb3JtU3VyZmFjZTsKICAg
ICB1aW50MzJfdCBtX3RleHR1cmU7CiAgICAgdWludDMyX3QgbV9mYm87CisgICAgR3JhcGhpY3NT
dXJmYWNlUHJpdmF0ZSogbV9wcml2YXRlOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMvR3JhcGhp
Y3NTdXJmYWNlTWFjLmNwcAppbmRleCA4NDMxMmRlLi43MTMxYjgyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMvR3JhcGhpY3NTdXJmYWNl
TWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9t
YWMvR3JhcGhpY3NTdXJmYWNlTWFjLmNwcApAQCAtMzAsNiArMzAsOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK3N0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlIHsgfTsKKwogdWludDMy
X3QgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUV4cG9ydCgpCiB7CiAgICAgcmV0dXJuIElPU3Vy
ZmFjZUdldElEKG1fcGxhdGZvcm1TdXJmYWNlKTsKQEAgLTExOCw3ICsxMjAsNyBAQCB2b2lkIEdy
YXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Db3B5RnJvbUZyYW1lYnVmZmVyKHVpbnQzMl90IG9yaWdp
bkZibywgY29uc3QgSW50UgogICAgIGdsRmx1c2goKTsKIH0KIAotYm9vbCBHcmFwaGljc1N1cmZh
Y2U6OnBsYXRmb3JtQ3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzKQorUGFz
c1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1DcmVhdGUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCiB7CiAgICAgdW5zaWduZWQgcGl4ZWxG
b3JtYXQgPSAnQkdSQSc7CiAgICAgdW5zaWduZWQgYnl0ZXNQZXJFbGVtZW50ID0gNDsKQEAgLTE1
NCwxNCArMTU2LDIwIEBAIGJvb2wgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNyZWF0ZShjb25z
dCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncykKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgNzsgaSsrKQogICAgICAgICBDRlJlbGVhc2UodmFsdWVzW2ldKTsKIAotICAgIG1fcGxhdGZv
cm1TdXJmYWNlID0gSU9TdXJmYWNlQ3JlYXRlKGRpY3QpOwotICAgIHJldHVybiAhIW1fcGxhdGZv
cm1TdXJmYWNlOworICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFJl
ZihuZXcgR3JhcGhpY3NTdXJmYWNlKHNpemUsIGZsYWdzKSk7CisgICAgc3VyZmFjZS0+bV9wbGF0
Zm9ybVN1cmZhY2UgPSBJT1N1cmZhY2VDcmVhdGUoZGljdCk7CisgICAgaWYgKCFzdXJmYWNlLT5t
X3BsYXRmb3JtU3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJm
YWNlPigpOworICAgIHJldHVybiBzdXJmYWNlOwogfQogCi1ib29sIEdyYXBoaWNzU3VyZmFjZTo6
cGxhdGZvcm1JbXBvcnQodWludDMyX3QgdG9rZW4pCitQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFj
ZT4gR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUltcG9ydChjb25zdCBJbnRTaXplJiBzaXplLCBG
bGFncyBmbGFncywgdWludDMyX3QgdG9rZW4pCiB7Ci0gICAgbV9wbGF0Zm9ybVN1cmZhY2UgPSBJ
T1N1cmZhY2VMb29rdXAodG9rZW4pOwotICAgIHJldHVybiAhIW1fcGxhdGZvcm1TdXJmYWNlOwor
ICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFJlZihuZXcgR3JhcGhp
Y3NTdXJmYWNlKHNpemUsIGZsYWdzKSk7CisgICAgc3VyZmFjZS0+bV9wbGF0Zm9ybVN1cmZhY2Ug
PSBJT1N1cmZhY2VMb29rdXAodG9rZW4pOworICAgIGlmICghc3VyZmFjZS0+bV9wbGF0Zm9ybVN1
cmZhY2UpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsKKyAg
ICByZXR1cm4gc3VyZmFjZTsKIH0KIAogc3RhdGljIGludCBpb1N1cmZhY2VMb2NrT3B0aW9ucyhp
bnQgbG9ja09wdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9xdC9HcmFwaGljc1N1cmZhY2VHTFguY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvcXQvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2I5MDM0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvcXQvR3JhcGhpY3NT
dXJmYWNlR0xYLmNwcApAQCAtMCwwICsxLDM0MSBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc1N1
cmZhY2UuaCIKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorCisvLyBRdCBoZWFkZXJzIG11
c3QgYmUgaW5jbHVkZWQgYmVmb3JlIGdseCBoZWFkZXJzLgorI2luY2x1ZGUgPFFDb3JlQXBwbGlj
YXRpb24+CisjaW5jbHVkZSA8UU9wZW5HTENvbnRleHQ+CisjaW5jbHVkZSA8UVZlY3Rvcj4KKyNp
bmNsdWRlIDxRV2luZG93PgorI2luY2x1ZGUgPHFwYS9xcGxhdGZvcm13aW5kb3cuaD4KKyNpbmNs
dWRlIDxHTC9nbGV4dC5oPgorI2luY2x1ZGUgPEdML2dseC5oPgorI2luY2x1ZGUgPFgxMS9leHRl
bnNpb25zL1hjb21wb3NpdGUuaD4KKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YcmVuZGVyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGxvbmcgWDExT3ZlcnJpZGVSZWRpcmVj
dCA9IDFMIDw8IDk7CisKK3N0YXRpYyBQRk5HTFhCSU5EVEVYSU1BR0VFWFRQUk9DIHBHbFhCaW5k
VGV4SW1hZ2VFWFQgPSAwOworc3RhdGljIFBGTkdMWFJFTEVBU0VURVhJTUFHRUVYVFBST0MgcEds
WFJlbGVhc2VUZXhJbWFnZUVYVCA9IDA7CitzdGF0aWMgUEZOR0xCSU5ERlJBTUVCVUZGRVJQUk9D
IHBHbEJpbmRGcmFtZWJ1ZmZlciA9IDA7CitzdGF0aWMgUEZOR0xCTElURlJBTUVCVUZGRVJQUk9D
IHBHbEJsaXRGcmFtZWJ1ZmZlciA9IDA7CisKK2NsYXNzIE9mZlNjcmVlblJvb3RXaW5kb3cgewor
cHVibGljOgorICAgIE9mZlNjcmVlblJvb3RXaW5kb3coKQorICAgIHsKKyAgICAgICAgKytyZWZD
b3VudDsKKyAgICB9CisKKyAgICBRV2luZG93KiBnZXQoRGlzcGxheSogZHB5KQorICAgIHsKKyAg
ICAgICAgaWYgKCF3aW5kb3cpIHsKKyAgICAgICAgICAgIHdpbmRvdyA9IG5ldyBRV2luZG93Owor
ICAgICAgICAgICAgd2luZG93LT5zZXRHZW9tZXRyeShRUmVjdCgtMSwgLTEsIDEsIDEpKTsKKyAg
ICAgICAgICAgIHdpbmRvdy0+Y3JlYXRlKCk7CisgICAgICAgICAgICBYU2V0V2luZG93QXR0cmli
dXRlcyBhdHRyaWJ1dGVzOworICAgICAgICAgICAgYXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVj
dCA9IHRydWU7CisgICAgICAgICAgICBYQ2hhbmdlV2luZG93QXR0cmlidXRlcyhkcHksIHdpbmRv
dy0+aGFuZGxlKCktPndpbklkKCksIFgxMU92ZXJyaWRlUmVkaXJlY3QsICZhdHRyaWJ1dGVzKTsK
KyAgICAgICAgICAgIHdpbmRvdy0+c2hvdygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB3
aW5kb3c7CisgICAgfQorCisgICAgfk9mZlNjcmVlblJvb3RXaW5kb3coKQorICAgIHsKKyAgICAg
ICAgaWYgKCEtLXJlZkNvdW50KSB7CisgICAgICAgICAgICBkZWxldGUgd2luZG93OworICAgICAg
ICAgICAgd2luZG93ID0gMDsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0
aWMgaW50IHJlZkNvdW50OworICAgIHN0YXRpYyBRV2luZG93KiB3aW5kb3c7Cit9OworCitpbnQg
T2ZmU2NyZWVuUm9vdFdpbmRvdzo6cmVmQ291bnQgPSAwOworUVdpbmRvdyogT2ZmU2NyZWVuUm9v
dFdpbmRvdzo6d2luZG93ID0gMDsKKworc3RhdGljIFFWZWN0b3I8aW50PiBxZ2x4QnVpbGRTcGVj
KCkKK3sKKyAgICBRVmVjdG9yPGludD4gc3BlYyg0OCk7CisgICAgaW50IGkgPSAwOworCisgICAg
Ly8gVGhlIHNwZWNpZmljYXRpb24gaXMgYSBzZXQga2V5IHZhbHVlIHBhaXJzIHN0b3JlZCBpbiBh
IHNpbXBsZSBhcnJheS4KKyAgICBzcGVjW2krK10gPSBHTFhfTEVWRUw7ICAgICAgICAgICAgICAg
ICAgICAgICAgICBzcGVjW2krK10gPSAwOworICAgIHNwZWNbaSsrXSA9IEdMWF9EUkFXQUJMRV9U
WVBFOyAgICAgICAgICAgICAgICAgIHNwZWNbaSsrXSA9IEdMWF9QSVhNQVBfQklUIHwgR0xYX1dJ
TkRPV19CSVQ7CisgICAgc3BlY1tpKytdID0gR0xYX0JJTkRfVE9fVEVYVFVSRV9UQVJHRVRTX0VY
VDsgICAgc3BlY1tpKytdID0gR0xYX1RFWFRVUkVfMkRfQklUX0VYVDsKKyAgICBzcGVjW2krK10g
PSBHTFhfQklORF9UT19URVhUVVJFX1JHQl9FWFQ7ICAgICAgICBzcGVjW2krK10gPSBUUlVFOwor
CisgICAgc3BlY1tpKytdID0gMDsKKyAgICByZXR1cm4gc3BlYzsKK30KKworc3RydWN0IEdyYXBo
aWNzU3VyZmFjZVByaXZhdGUgeworICAgIEdyYXBoaWNzU3VyZmFjZVByaXZhdGUoKQorICAgICAg
ICA6IG1fZGlzcGxheSgwKQorICAgICAgICAsIG1feFBpeG1hcCgwKQorICAgICAgICAsIG1fZ2x4
UGl4bWFwKDApCisgICAgICAgICwgbV9zdXJmYWNlKDApCisgICAgICAgICwgbV9nbENvbnRleHQo
bmV3IFFPcGVuR0xDb250ZXh0KQorICAgICAgICAsIG1fdGV4dHVyZUlzWUludmVydGVkKGZhbHNl
KQorICAgICAgICAsIG1faGFzQWxwaGEoZmFsc2UpCisgICAgeworICAgICAgICBtX2Rpc3BsYXkg
PSBYT3BlbkRpc3BsYXkoMCk7CisgICAgICAgIG1fZ2xDb250ZXh0LT5jcmVhdGUoKTsKKyAgICB9
CisKKyAgICB+R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSgpCisgICAgeworICAgICAgICBpZiAobV9n
bHhQaXhtYXApCisgICAgICAgICAgICBnbFhEZXN0cm95UGl4bWFwKG1fZGlzcGxheSwgbV9nbHhQ
aXhtYXApOworICAgICAgICBtX2dseFBpeG1hcCA9IDA7CisKKyAgICAgICAgZGVsZXRlIG1fZ2xD
b250ZXh0OworICAgICAgICBtX2dsQ29udGV4dCA9IDA7CisKKyAgICAgICAgaWYgKG1feFBpeG1h
cCkKKyAgICAgICAgICAgIFhGcmVlUGl4bWFwKG1fZGlzcGxheSwgbV94UGl4bWFwKTsKKyAgICAg
ICAgbV94UGl4bWFwID0gMDsKKworICAgICAgICBkZWxldGUgbV9zdXJmYWNlOworICAgICAgICBt
X3N1cmZhY2UgPSAwOworCisgICAgICAgIGlmIChtX2Rpc3BsYXkpCisgICAgICAgICAgICBYQ2xv
c2VEaXNwbGF5KG1fZGlzcGxheSk7CisgICAgICAgIG1fZGlzcGxheSA9IDA7CisgICAgfQorCisg
ICAgdWludDMyX3QgY3JlYXRlU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAg
ICAgICAgbV9zdXJmYWNlID0gbmV3IFFXaW5kb3cobV9vZmZTY3JlZW5XaW5kb3cuZ2V0KG1fZGlz
cGxheSkpOworICAgICAgICBtX3N1cmZhY2UtPnNldFN1cmZhY2VUeXBlKFFTdXJmYWNlOjpPcGVu
R0xTdXJmYWNlKTsKKyAgICAgICAgbV9zdXJmYWNlLT5zZXRHZW9tZXRyeSgwLCAwLCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpOworICAgICAgICBtX3N1cmZhY2UtPmNyZWF0ZSgpOworICAg
ICAgICBYQ29tcG9zaXRlUmVkaXJlY3RXaW5kb3cobV9kaXNwbGF5LCBtX3N1cmZhY2UtPmhhbmRs
ZSgpLT53aW5JZCgpLCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7CisKKyAgICAgICAgLy8gTWFr
ZSBzdXJlIHRoZSBYUmVuZGVyIEV4dGVuc2lvbiBpcyBhdmFpbGFibGUuCisgICAgICAgIGludCBl
dmVudEJhc2VwLCBlcnJvckJhc2VwOworICAgICAgICBpZiAoIVhSZW5kZXJRdWVyeUV4dGVuc2lv
bihtX2Rpc3BsYXksICZldmVudEJhc2VwLCAmZXJyb3JCYXNlcCkpCisgICAgICAgICAgICByZXR1
cm4gMDsKKworICAgICAgICBtX3N1cmZhY2UtPnNob3coKTsKKworICAgICAgICByZXR1cm4gbV9z
dXJmYWNlLT5oYW5kbGUoKS0+d2luSWQoKTsKKyAgICB9CisKKyAgICB2b2lkIGNyZWF0ZVBpeG1h
cCh1aW50MzJfdCB3aW5JZCkKKyAgICB7CisgICAgICAgIFhXaW5kb3dBdHRyaWJ1dGVzIGF0dHI7
CisgICAgICAgIFhHZXRXaW5kb3dBdHRyaWJ1dGVzKG1fZGlzcGxheSwgd2luSWQsICZhdHRyKTsK
KworICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxG
b3JtYXQobV9kaXNwbGF5LCBhdHRyLnZpc3VhbCk7CisgICAgICAgIG1faGFzQWxwaGEgPSAoZm9y
bWF0LT50eXBlID09IFBpY3RUeXBlRGlyZWN0ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayk7
CisgICAgICAgIG1fc2l6ZSA9IEludFNpemUoYXR0ci53aWR0aCwgYXR0ci5oZWlnaHQpOworCisg
ICAgICAgIFFWZWN0b3I8aW50PiBnbHhDb25maWdTcGVjID0gcWdseEJ1aWxkU3BlYygpOworICAg
ICAgICBpbnQgbnVtYmVyT2ZDb25maWdzOworICAgICAgICBHTFhGQkNvbmZpZyogY29uZmlncyA9
IGdsWENob29zZUZCQ29uZmlnKG1fZGlzcGxheSwgWERlZmF1bHRTY3JlZW4obV9kaXNwbGF5KSwg
Z2x4Q29uZmlnU3BlYy5jb25zdERhdGEoKSwgJm51bWJlck9mQ29uZmlncyk7CisKKyAgICAgICAg
bV94UGl4bWFwID0gWENvbXBvc2l0ZU5hbWVXaW5kb3dQaXhtYXAobV9kaXNwbGF5LCB3aW5JZCk7
CisKKyAgICAgICAgUVZlY3RvcjxpbnQ+IGF0dHJpYkxpc3Q7CisgICAgICAgIGF0dHJpYkxpc3Qu
YXBwZW5kKEdMWF9URVhUVVJFX0ZPUk1BVF9FWFQpOworICAgICAgICBhdHRyaWJMaXN0LmFwcGVu
ZChHTFhfVEVYVFVSRV9GT1JNQVRfUkdCX0VYVCk7CisgICAgICAgIGF0dHJpYkxpc3QuYXBwZW5k
KEdMWF9URVhUVVJFX1RBUkdFVF9FWFQpOworICAgICAgICBhdHRyaWJMaXN0LmFwcGVuZChHTFhf
VEVYVFVSRV8yRF9FWFQpOworICAgICAgICBhdHRyaWJMaXN0LmFwcGVuZCgwKTsKKyAgICAgICAg
bV9nbHhQaXhtYXAgPSBnbFhDcmVhdGVQaXhtYXAobV9kaXNwbGF5LCAqY29uZmlncywgbV94UGl4
bWFwLCBhdHRyaWJMaXN0LmNvbnN0RGF0YSgpKTsKKworICAgICAgICB1aW50IGludmVydGVkID0g
MDsKKyAgICAgICAgZ2xYUXVlcnlEcmF3YWJsZShtX2Rpc3BsYXksIG1fZ2x4UGl4bWFwLCBHTFhf
WV9JTlZFUlRFRF9FWFQsICZpbnZlcnRlZCk7CisgICAgICAgIG1fdGV4dHVyZUlzWUludmVydGVk
ID0gISFpbnZlcnRlZDsKKworICAgICAgICBYRnJlZShjb25maWdzKTsKKyAgICB9CisKKyAgICB2
b2lkIG1ha2VDdXJyZW50KCkKKyAgICB7CisgICAgICAgIFFPcGVuR0xDb250ZXh0KiBnbENvbnRl
eHQgPSBRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKTsKKyAgICAgICAgaWYgKG1fc3Vy
ZmFjZSAmJiBnbENvbnRleHQpCisgICAgICAgICAgICBnbENvbnRleHQtPm1ha2VDdXJyZW50KG1f
c3VyZmFjZSk7CisgICAgfQorCisgICAgdm9pZCBzd2FwQnVmZmVycygpCisgICAgeworICAgICAg
ICBpZiAoIW1fc3VyZmFjZS0+aXNWaXNpYmxlKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgd2hpbGUgKCFtX3N1cmZhY2UtPmlzRXhwb3NlZCgpKQorICAgICAgICAgICAgUUNvcmVB
cHBsaWNhdGlvbjo6cHJvY2Vzc0V2ZW50cygpOworCisgICAgICAgIFFPcGVuR0xDb250ZXh0KiBn
bENvbnRleHQgPSBRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKTsKKyAgICAgICAgaWYg
KG1fc3VyZmFjZSAmJiBnbENvbnRleHQpCisgICAgICAgICAgICBnbENvbnRleHQtPnN3YXBCdWZm
ZXJzKG1fc3VyZmFjZSk7CisgICAgfQorCisKKyAgICBEaXNwbGF5KiBkaXNwbGF5KCkgY29uc3Qg
eyByZXR1cm4gbV9kaXNwbGF5OyB9CisKKyAgICBHTFhQaXhtYXAgZ2x4UGl4bWFwKCkgY29uc3Qg
eyByZXR1cm4gbV9nbHhQaXhtYXA7IH0KKworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQorCisgICAgUU9wZW5HTENvbnRleHQqIGdsQ29udGV4dCgpIHsgcmV0dXJu
IG1fZ2xDb250ZXh0OyB9CisKK3ByaXZhdGU6CisgICAgT2ZmU2NyZWVuUm9vdFdpbmRvdyBtX29m
ZlNjcmVlbldpbmRvdzsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBEaXNwbGF5KiBtX2Rpc3Bs
YXk7CisgICAgUGl4bWFwIG1feFBpeG1hcDsKKyAgICBHTFhQaXhtYXAgbV9nbHhQaXhtYXA7Cisg
ICAgUVdpbmRvdyogbV9zdXJmYWNlOworICAgIFFPcGVuR0xDb250ZXh0KiBtX2dsQ29udGV4dDsK
KyAgICBib29sIG1fdGV4dHVyZUlzWUludmVydGVkOworICAgIGJvb2wgbV9oYXNBbHBoYTsKK307
CisKK3N0YXRpYyBib29sIHJlc29sdmVHTE1ldGhvZHMoR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSog
cCkKK3sKKyAgICBzdGF0aWMgYm9vbCByZXNvbHZlZCA9IGZhbHNlOworICAgIGlmIChyZXNvbHZl
ZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBRT3BlbkdMQ29udGV4dCogZ2xDb250ZXh0
ID0gcC0+Z2xDb250ZXh0KCk7CisgICAgcEdsWEJpbmRUZXhJbWFnZUVYVCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8UEZOR0xYQklORFRFWElNQUdFRVhUUFJPQz4oZ2xDb250ZXh0LT5nZXRQcm9jQWRkcmVz
cygiZ2xYQmluZFRleEltYWdlRVhUIikpOworICAgIHBHbFhSZWxlYXNlVGV4SW1hZ2VFWFQgPSBy
ZWludGVycHJldF9jYXN0PFBGTkdMWFJFTEVBU0VURVhJTUFHRUVYVFBST0M+KGdsQ29udGV4dC0+
Z2V0UHJvY0FkZHJlc3MoImdsWFJlbGVhc2VUZXhJbWFnZUVYVCIpKTsKKyAgICBwR2xCaW5kRnJh
bWVidWZmZXIgPSByZWludGVycHJldF9jYXN0PFBGTkdMQklOREZSQU1FQlVGRkVSUFJPQz4oZ2xD
b250ZXh0LT5nZXRQcm9jQWRkcmVzcygiZ2xCaW5kRnJhbWVidWZmZXIiKSk7CisgICAgcEdsQmxp
dEZyYW1lYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEJMSVRGUkFNRUJVRkZFUlBST0M+
KGdsQ29udGV4dC0+Z2V0UHJvY0FkZHJlc3MoImdsQmxpdEZyYW1lYnVmZmVyIikpOworCisgICAg
cmVzb2x2ZWQgPSBwR2xCbGl0RnJhbWVidWZmZXIgJiYgcEdsQmluZEZyYW1lYnVmZmVyICYmIHBH
bFhCaW5kVGV4SW1hZ2VFWFQgJiYgcEdsWFJlbGVhc2VUZXhJbWFnZUVYVDsKKworICAgIHJldHVy
biByZXNvbHZlZDsKK30KKwordWludDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUV4cG9y
dCgpCit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1TdXJmYWNlOworfQorCit1aW50MzJfdCBHcmFw
aGljc1N1cmZhY2U6OnBsYXRmb3JtR2V0VGV4dHVyZUlEKCkKK3sKKyAgICBpZiAoIW1fdGV4dHVy
ZSkKKyAgICAgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKworICAgIGdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4
UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVB
Uik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9T
LCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIHBHbFhCaW5kVGV4SW1h
Z2VFWFQobV9wcml2YXRlLT5kaXNwbGF5KCksIG1fcHJpdmF0ZS0+Z2x4UGl4bWFwKCksIEdMWF9G
Uk9OVF9FWFQsIDApOworCisgICAgcmV0dXJuIG1fdGV4dHVyZTsKK30KKwordm9pZCBHcmFwaGlj
c1N1cmZhY2U6OnBsYXRmb3JtQ29weVRvR0xUZXh0dXJlKHVpbnQzMl90IHRhcmdldCwgdWludDMy
X3QgaWQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBvZmZzZXQp
Cit7CisgICAgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdMWC9YY29tcG9zaXRlLgorfQor
Cit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Db3B5RnJvbUZyYW1lYnVmZmVyKHVpbnQz
Ml90IG9yaWdpbkZibywgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKK3sKKyAgICBtX3ByaXZh
dGUtPm1ha2VDdXJyZW50KCk7CisgICAgaW50IHdpZHRoID0gbV9zaXplLndpZHRoKCk7CisgICAg
aW50IGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKKworICAgIGdsUHVzaEF0dHJpYihHTF9BTExf
QVRUUklCX0JJVFMpOworICAgIEdMaW50IG9sZEZCTzsKKyAgICBnbEdldEludGVnZXJ2KEdMX0ZS
QU1FQlVGRkVSX0JJTkRJTkcsICZvbGRGQk8pOworICAgIHBHbEJpbmRGcmFtZWJ1ZmZlcihHTF9S
RUFEX0ZSQU1FQlVGRkVSLCBvcmlnaW5GYm8pOworICAgIHBHbEJpbmRGcmFtZWJ1ZmZlcihHTF9E
UkFXX0ZSQU1FQlVGRkVSLCBtX3ByaXZhdGUtPmdsQ29udGV4dCgpLT5kZWZhdWx0RnJhbWVidWZm
ZXJPYmplY3QoKSk7CisgICAgcEdsQmxpdEZyYW1lYnVmZmVyKDAsIDAsIHdpZHRoLCBoZWlnaHQs
IDAsIDAsIHdpZHRoLCBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7Cisg
ICAgcEdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBvbGRGQk8pOworICAgIGdsUG9w
QXR0cmliKCk7CisKKyAgICBtX3ByaXZhdGUtPnN3YXBCdWZmZXJzKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ3JlYXRlKGNvbnN0
IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzKQoreworICAgIC8vIFgxMSBkb2VzIG5vdCBzdXBw
b3J0IENvcHlUb1RleHR1cmUsIHNvIHdlIGRvIG5vdCBjcmVhdGUgYSBHcmFwaGljc1N1cmZhY2Ug
aWYgdGhpcyBpcyByZXF1ZXN0ZWQuCisgICAgaWYgKGZsYWdzICYgU3VwcG9ydHNDb3B5VG9UZXh0
dXJlKQorICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CisKKyAg
ICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRSZWYobmV3IEdyYXBoaWNz
U3VyZmFjZShzaXplLCBmbGFncykpOworCisgICAgc3VyZmFjZS0+bV9wcml2YXRlID0gbmV3IEdy
YXBoaWNzU3VyZmFjZVByaXZhdGUoKTsKKyAgICBpZiAoIXJlc29sdmVHTE1ldGhvZHMoc3VyZmFj
ZS0+bV9wcml2YXRlKSkKKyAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNl
PigpOworCisgICAgc3VyZmFjZS0+bV9wbGF0Zm9ybVN1cmZhY2UgPSBzdXJmYWNlLT5tX3ByaXZh
dGUtPmNyZWF0ZVN1cmZhY2Uoc2l6ZSk7CisKKyAgICByZXR1cm4gc3VyZmFjZTsKK30KKworUGFz
c1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1JbXBvcnQo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MsIHVpbnQzMl90IHRva2VuKQoreworICAg
IC8vIFgxMSBkb2VzIG5vdCBzdXBwb3J0IENvcHlUb1RleHR1cmUsIHNvIHdlIGRvIG5vdCBjcmVh
dGUgYSBHcmFwaGljc1N1cmZhY2UgaWYgdGhpcyBpcyByZXF1ZXN0ZWQuCisgICAgaWYgKGZsYWdz
ICYgU3VwcG9ydHNDb3B5VG9UZXh0dXJlKQorICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFw
aGljc1N1cmZhY2U+KCk7CisKKyAgICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0g
YWRvcHRSZWYobmV3IEdyYXBoaWNzU3VyZmFjZShzaXplLCBmbGFncykpOworCisgICAgc3VyZmFj
ZS0+bV9wcml2YXRlID0gbmV3IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUoKTsKKyAgICBpZiAoIXJl
c29sdmVHTE1ldGhvZHMoc3VyZmFjZS0+bV9wcml2YXRlKSkKKyAgICAgICAgcmV0dXJuIFBhc3NS
ZWZQdHI8R3JhcGhpY3NTdXJmYWNlPigpOworCisgICAgc3VyZmFjZS0+bV9wbGF0Zm9ybVN1cmZh
Y2UgPSB0b2tlbjsKKworICAgIHN1cmZhY2UtPm1fcHJpdmF0ZS0+Y3JlYXRlUGl4bWFwKHN1cmZh
Y2UtPm1fcGxhdGZvcm1TdXJmYWNlKTsKKyAgICBzdXJmYWNlLT5tX3NpemUgPSBzdXJmYWNlLT5t
X3ByaXZhdGUtPnNpemUoKTsKKworICAgIHJldHVybiBzdXJmYWNlOworfQorCitjaGFyKiBHcmFw
aGljc1N1cmZhY2U6OnBsYXRmb3JtTG9jayhjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQqIG91dHB1
dFN0cmlkZSwgTG9ja09wdGlvbnMgbG9ja09wdGlvbnMpCit7CisgICAgLy8gR3JhcGhpY3NTdXJm
YWNlIGlzIGN1cnJlbnRseSBvbmx5IGJlaW5nIHVzZWQgZm9yIFdlYkdMLCB3aGljaCBkb2VzIG5v
dCByZXF1aXJlIHRoaXMgbG9ja2luZyBtZWNoYW5pc20uCisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybVVubG9jaygpCit7CisgICAgLy8gR3JhcGhpY3NT
dXJmYWNlIGlzIGN1cnJlbnRseSBvbmx5IGJlaW5nIHVzZWQgZm9yIFdlYkdMLCB3aGljaCBkb2Vz
IG5vdCByZXF1aXJlIHRoaXMgbG9ja2luZyBtZWNoYW5pc20uCit9CisKK3ZvaWQgR3JhcGhpY3NT
dXJmYWNlOjpwbGF0Zm9ybURlc3Ryb3koKQoreworICAgIGlmIChtX3RleHR1cmUpIHsKKyAgICAg
ICAgcEdsWFJlbGVhc2VUZXhJbWFnZUVYVChtX3ByaXZhdGUtPmRpc3BsYXkoKSwgbV9wcml2YXRl
LT5nbHhQaXhtYXAoKSwgR0xYX0ZST05UX0VYVCk7CisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMo
MSwgJm1fdGV4dHVyZSk7CisgICAgfQorCisgICAgZGVsZXRlIG1fcHJpdmF0ZTsKKyAgICBtX3By
aXZhdGUgPSAwOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA4NDMzN2Q1Li5mZGZlYjE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTItMDctMTIgIFplbm8gQWxiaXNzZXIg
IDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1F0XVtXSzJdIEltcGxlbWVudCBHcmFwaGlj
c1N1cmZhY2UgZm9yIExpbnV4L0dMWC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTkwODgxCisKKyAgICAgICAgQWRkIGEgR0xYIGJhc2VkIEdyYXBoaWNz
U3VyZmFjZSBpbXBsZW1lbnRhdGlvbiBmb3IgTGludXguCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZSk6CisgICAgICAgICAg
ICBPbmx5IGNyZWF0ZSBhIEdyYXBoaWNzU3VyZmFjZSBmcm9tIGEgU2hhcmVhYmxlU3VyZmFjZTo6
SGFuZGxlCisgICAgICAgICAgICBpbiBjYXNlIHRoZSBIYW5kbGUgY29udGFpbnMgYSB2YWxpZCBH
cmFwaGljc1N1cmZhY2UgdG9rZW4uCisgICAgICAgICAgICBPdGhlcndpc2UgZmFsbCBiYWNrIHRv
IGNyZWF0aW5nIGEgU2hhcmVhYmxlQml0bWFwLgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRy
ZWVDb29yZGluYXRvclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Y3JlYXRlVW5pcXVlS2V5
KToKKyAgICAgICAgICAgIENyZWF0ZSBhIHVuaXF1ZSBrZXkgZm9yIGEgc3VyZmFjZSBiYXNlZCBv
biB0aWxlSUQgYW5kIGxheWVySUQuCisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgICAgICBFdmVuIHdoZW4gR3Jh
cGhpY3NTdXJmYWNlIGlzIGVuYWJsZWQsIG5vdCBhbGwgU2hhcmVhYmxlU3VyZmFjZXMKKyAgICAg
ICAgICAgIHdpbGwgbmVjZXNzYXJpbHkgYmUgYmFja2VkIGJ5IGEgR3JhcGhpY3NTdXJmYWNlLiBJ
biBjYXNlIG9mCisgICAgICAgICAgICBhIFNoYXJlYWJsZVN1cmZhY2UgYmVpbmcgYmFja2VkIGJ5
IGEgU2hhcmVhYmxlQml0bWFwIGluc3RlYWQsCisgICAgICAgICAgICB0aGUgR3JhcGhpY3NTdXJm
YWNlIHRva2VuIHdpbGwgYWx3YXlzIGJlIG51bGwuCisgICAgICAgICAgICBTbyBpbnN0ZWFkIG9m
IHVzaW5nIHRoZSBHcmFwaGljc1N1cmZhY2UgdG9rZW4gYXMgYSBrZXkgZm9yCisgICAgICAgICAg
ICBzdG9yaW5nIHN1cmZhY2VzIGluIGEgbWFwLCB3ZSBjcmVhdGUgYSB1bmlxdWUga2V5IGZyb20K
KyAgICAgICAgICAgIGxheWVySUQgYW5kIHRpbGVJRC4KKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oOgorICAgICAgICAoTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eSk6CisKIDIwMTItMDctMDkgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHNob3VsZCBvbmx5IHRyaWdnZXIgd2hlbiBh
IG5ldyBmcmFtZSBjYW4gYmUgZGlzcGxheWVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL1NoYXJlYWJsZVN1cmZhY2UuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJl
YWJsZVN1cmZhY2UuY3BwCmluZGV4IGNmMTBlMTYuLjJlZjVhNGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVTdXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5jcHAKQEAgLTE0OSw5ICsxNDksMTEgQEAgU2hhcmVh
YmxlU3VyZmFjZTo6flNoYXJlYWJsZVN1cmZhY2UoKQogUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJm
YWNlPiBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUoY29uc3QgSGFuZGxlJiBoYW5kbGUpCiB7CiAj
aWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgaWYgKGhhbmRsZS5ncmFwaGljc1N1cmZhY2VU
b2tlbigpKSB7CiAgICAgICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UgPSBHcmFw
aGljc1N1cmZhY2U6OmNyZWF0ZShoYW5kbGUubV9zaXplLCBoYW5kbGUubV9mbGFncywgaGFuZGxl
Lm1fZ3JhcGhpY3NTdXJmYWNlVG9rZW4pOwogICAgICAgICBpZiAoc3VyZmFjZSkKICAgICAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVhYmxlU3VyZmFjZShoYW5kbGUubV9zaXplLCBo
YW5kbGUubV9mbGFncywgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KHN1cmZhY2UpKSk7Cisg
ICAgfQogI2VuZGlmCiAKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFy
ZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUubV9iaXRtYXBIYW5kbGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCmlu
ZGV4IDNiMDIxNDMuLmNmNDllYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTYxLDE1ICs2MSwyNCBAQCB2
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5
ZXJJRCwgaW50IHRpbGVJRCwgY29ucwogICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0
aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pOwogfQogCitzdGF0aWMgaW5saW5lIHVpbnQ2
NF90IGNyZWF0ZVVuaXF1ZUtleShpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKK3sKKyAgICB1aW50
NjRfdCBrZXkgPSBsYXllcklEOworICAgIGtleSA8PD0gMzI7CisgICAga2V5IHw9IHRpbGVJRDsK
KyAgICByZXR1cm4ga2V5OworfQorCiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnVw
ZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgSW50UmVjdCYg
dGFyZ2V0UmVjdCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykK
IHsKICAgICBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gc3VyZmFjZTsKICNpZiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKLSAgICB1aW50MzJfdCB0b2tlbiA9IHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRs
ZS5ncmFwaGljc1N1cmZhY2VUb2tlbigpOwotICAgIEhhc2hNYXA8dWludDMyX3QsIFJlZlB0cjxT
aGFyZWFibGVTdXJmYWNlPiA+OjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZXMuZmluZCh0b2tlbik7
CisgICAgdWludDY0X3Qga2V5ID0gY3JlYXRlVW5pcXVlS2V5KGxheWVySUQsIHRpbGVJRCk7CisK
KyAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gPjo6aXRlcmF0
b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQoa2V5KTsKICAgICBpZiAoaXQgPT0gbV9zdXJmYWNlcy5l
bmQoKSkgewogICAgICAgICBzdXJmYWNlID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKHVwZGF0
ZUluZm8uc3VyZmFjZUhhbmRsZSk7Ci0gICAgICAgIG1fc3VyZmFjZXMuYWRkKHRva2VuLCBzdXJm
YWNlKTsKKyAgICAgICAgbV9zdXJmYWNlcy5hZGQoa2V5LCBzdXJmYWNlKTsKICAgICB9IGVsc2UK
ICAgICAgICAgc3VyZmFjZSA9IGl0LT5zZWNvbmQ7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmgKaW5kZXggYjRlN2I3
Yy4uYzBlZGI2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eS5oCkBAIC03OSw3ICs3OSw3IEBAIHByb3RlY3RlZDoKICAgICBE
cmF3aW5nQXJlYVByb3h5KiBtX2RyYXdpbmdBcmVhUHJveHk7CiAgICAgUmVmUHRyPFdlYkxheWVy
VHJlZVJlbmRlcmVyPiBtX3JlbmRlcmVyOwogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAg
IEhhc2hNYXA8dWludDMyX3QsIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiA+IG1fc3VyZmFjZXM7
CisgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+ID4gbV9zdXJm
YWNlczsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IDZhNDJmYzEuLjZmOGFhYjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0wNy0xMiAg
WmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9yZz4KKworICAgICAgICBbUXRdW1dLMl0gSW1w
bGVtZW50IEdyYXBoaWNzU3VyZmFjZSBmb3IgTGludXgvR0xYLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA4ODEKKworICAgICAgICBFbmFibGUgR3Jh
cGhpY3NTdXJmYWNlIGZvciBMaW51eCBiYXNlZCBwbGF0Zm9ybXMKKyAgICAgICAgd2hlbmV2ZXIg
dGhlIFhjb21wb3NpdGUgZXh0ZW5zaW9uIGlzIGF2YWlsYWJsZS4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9saWJY
Y29tcG9zaXRlL2xpYlhjb21wb3NpdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAg
ICAgICAqIHFtYWtlL2NvbmZpZy50ZXN0cy9saWJYY29tcG9zaXRlL2xpYlhjb21wb3NpdGUucHJv
OiBBZGRlZC4KKyAgICAgICAgICBBZGQgYSBjb25maWd1cmUgdGVzdCB0byBkZXRlY3QgWGNvbXBv
c2l0ZSBleHRlbnNpb24gYW5kCisgICAgICAgICAgYWN0aXZhdGUgR3JhcGhpY3NTdXJmYWNlIG9u
IGxpbnV4IGluIGNhc2UgdGhlIGV4dGVuc2lvbiBpcyBhdmFpbGFibGUuCisgICAgICAgICogcW1h
a2UvY29uZmlndXJlLnByaToKKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1
cmVzLnByZjoKKwogMjAxMi0wNy0wOSAgTWF0dCBGYWxrZW5oYWdlbiAgPGZhbGtlbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgQWRkIEVOQUJMRV9ESUFMT0dfRUxFTUVOVCBhbmQgc2tlbGV0b24g
ZmlsZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJYY29tcG9zaXRl
L2xpYlhjb21wb3NpdGUuY3BwIGIvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2xpYlhjb21wb3Np
dGUvbGliWGNvbXBvc2l0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MTBlMTA1NAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJY
Y29tcG9zaXRlL2xpYlhjb21wb3NpdGUuY3BwCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBv
c2l0ZS5oPgorCitpbnQgbWFpbihpbnQsIGNoYXIqKikKK3sKKyAgICBEaXNwbGF5KiBkaXNwbGF5
ID0gWE9wZW5EaXNwbGF5KDApOworICAgIGludCBtYWpvclZlcnNpb247CisgICAgaW50IG1pbm9y
VmVyc2lvbjsKKyAgICAodm9pZClYQ29tcG9zaXRlUXVlcnlWZXJzaW9uKGRpc3BsYXksICZtYWpv
clZlcnNpb24sICZtaW5vclZlcnNpb24pOworICAgIFhDbG9zZURpc3BsYXkoZGlzcGxheSk7Cisg
ICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvbGli
WGNvbXBvc2l0ZS9saWJYY29tcG9zaXRlLnBybyBiL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9s
aWJYY29tcG9zaXRlL2xpYlhjb21wb3NpdGUucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjk2YzVjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9xbWFrZS9jb25maWcu
dGVzdHMvbGliWGNvbXBvc2l0ZS9saWJYY29tcG9zaXRlLnBybwpAQCAtMCwwICsxLDMgQEAKK1NP
VVJDRVMgPSBsaWJYY29tcG9zaXRlLmNwcAorT0JKRUNUU19ESVIgPSBvYmoKK0xJQlMgKz0gLWxY
Y29tcG9zaXRlIC1sWDExCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9jb25maWd1cmUucHJpIGIv
VG9vbHMvcW1ha2UvY29uZmlndXJlLnByaQppbmRleCA4YzAwOWZkLi41NzVkZWI4IDEwMDY0NAot
LS0gYS9Ub29scy9xbWFrZS9jb25maWd1cmUucHJpCisrKyBiL1Rvb2xzL3FtYWtlL2NvbmZpZ3Vy
ZS5wcmkKQEAgLTE1LDYgKzE1LDcgQEAgaGF2ZVF0KDUpOiFxdWlja19jaGVjayB7CiAgICAgICAg
IGxpYnBuZyBcCiAgICAgICAgIGxpYmpwZWcgXAogICAgICAgICBsaWJ3ZWJwIFwKKyAgICAgICAg
bGliWGNvbXBvc2l0ZSBcCiAgICAgICAgIGxpYnhtbDIgXAogICAgICAgICBsaWJ4c2x0IFwKICAg
ICAgICAgbGliemxpYgpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9m
ZWF0dXJlcy5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgpp
bmRleCBlNzZjODA5Li4xZjY2Njk4IDEwMDY0NAotLS0gYS9Ub29scy9xbWFrZS9ta3NwZWNzL2Zl
YXR1cmVzL2ZlYXR1cmVzLnByZgorKysgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2Zl
YXR1cmVzLnByZgpAQCAtMTcxLDcgKzE3MSwxMSBAQCBoYXZlUXQoNCkgewogfQogCiAhY29udGFp
bnMoREVGSU5FUywgV1RGX1VTRV9HUkFQSElDU19TVVJGQUNFPS4pIHsKLSAgICBoYXZlUXQoNSk6
bWFjOiBERUZJTkVTICs9IFdURl9VU0VfR1JBUEhJQ1NfU1VSRkFDRT0xCisgICAgaGF2ZVF0KDUp
IHsKKyAgICAgICAgbWFjOiBERUZJTkVTICs9IFdURl9VU0VfR1JBUEhJQ1NfU1VSRkFDRT0xCisg
ICAgICAgICMgT24gbGludXggd2UgcmVxdWlyZSBsaWJYY29tcG9zaXRlIHRvIGVuYWJsZSBncmFw
aGljcyBzdXJmYWNlLgorICAgICAgICBsaW51eC0qOmNvbmZpZ19saWJYY29tcG9zaXRlOiBERUZJ
TkVTICs9IFdURl9VU0VfR1JBUEhJQ1NfU1VSRkFDRT0xCisgICAgfQogfQogCiAjIC0tLS0tLS0t
LS0tLS0tIEZpbGwgaW4gc3RhdGljIGRlZmF1bHRzIC0tLS0tLS0tLS0tLS0tCg==
</data>
<flag name="review"
          id="160474"
          type_id="1"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151966</attachid>
            <date>2012-07-12 08:42:18 -0700</date>
            <delta_ts>2012-07-12 08:44:13 -0700</delta_ts>
            <desc>patch for review. - fixed issues as requested.</desc>
            <filename>90881_20120712-174123.patch</filename>
            <type>text/plain</type>
            <size>30909</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhMTI2NjQwLi5iYzE1OGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYg
QEAKKzIwMTItMDctMTIgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgW1F0XVtXSzJdIEltcGxlbWVudCBHcmFwaGljc1N1cmZhY2UgZm9yIExpbnV4L0dMWC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwODgxCisKKyAg
ICAgICAgQWRkIGEgR0xYIGJhc2VkIEdyYXBoaWNzU3VyZmFjZSBpbXBsZW1lbnRhdGlvbiBmb3Ig
TGludXguCisgICAgICAgIE5hdGl2ZSBYIHdpbmRvd3MgYXJlIGJlaW5nIHVzZWQgZm9yIGV4Y2hh
bmdpbmcgdGV4dHVyZXMKKyAgICAgICAgd2l0aCB0aGUgVUlQcm9jZXNzLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAg
ICAgKiBXZWJDb3JlLnByaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9H
cmFwaGljc1N1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpj
cmVhdGUpOgorICAgICAgICAgICAgTW92ZSBjcmVhdGluZyBHcmFwaGljc1N1cmZhY2UgaW5zdGFu
Y2UgaW50bworICAgICAgICAgICAgcGxhdGZvcm1DcmVhdGUvcGxhdGZvcm1JbXBvcnQgZnVuY3Rp
b25zIHRvIGFsbG93CisgICAgICAgICAgICBwbGF0Zm9ybSBzcGVjaWZpYyBjcmVhdGlvbiBiYXNl
ZCBvbiB0aGUgcHJvdmlkZWQgZmxhZ3MuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZh
Y2U6OkdyYXBoaWNzU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6
On5HcmFwaGljc1N1cmZhY2UpOgorICAgICAgICAgICAgQ2FsbCBwbGF0Zm9ybURlc3Ryb3kgd2hl
biBkZXN0cm95aW5nIGEgR3JhcGhpY3NTdXJmYWNlLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmg6CisgICAg
ICAgICAgICBNYWtlIHBsYXRmb3JtQ3JlYXRlL3BsYXRmb3JtSW1wb3J0IGZ1bmN0aW9ucyBzdGF0
aWMKKyAgICAgICAgICAgIHRvIGJlIGFibGUgdG8gY2FsbCB0aGVzZSBmcm9tIHRoZSBzdGF0aWMg
Y3JlYXRlIGZ1bmN0aW9uLgorICAgICAgICAgICAgQWRkIERlc3RydWN0b3IgcHJvdG90eXBlIGFu
ZCBhZGQgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSBtZW1iZXIuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKEdyYXBoaWNzU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1DcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUltcG9ydCk6CisgICAgICAg
ICAgICBJbnNlcnQgY3JlYXRpb24gb2YgR3JhcGhpY3NTdXJmYWNlIGluc3RhbmNlLgorICAgICAg
ICAgICAgVGhpcyBhbGxvd3MgaGF2aW5nIGEgcGxhdGZvcm0gc3BlY2lmaWMgY3JlYXRpb24gbWVj
aGFuaXNtCisgICAgICAgICAgICBmb3IgR0xYLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChPZmZTY3JlZW5Sb290V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6
Ok9mZlNjcmVlblJvb3RXaW5kb3c6Ok9mZlNjcmVlblJvb3RXaW5kb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6T2ZmU2NyZWVuUm9vdFdpbmRvdzo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZlNj
cmVlblJvb3RXaW5kb3c6On5PZmZTY3JlZW5Sb290V2luZG93KToKKyAgICAgICAgICAgIEFkZCBh
biBPZmZTY3JlZW5Sb290V2luZG93IHNpbmdlbHRvbiB0aGF0IGlzIGJlaW5nIHVzZWQKKyAgICAg
ICAgICAgIGFzIGEgcGFyZW50IGZvciBhbGwgbmF0aXZlIG9mZnNjcmVlbiB3aW5kb3dzLgorICAg
ICAgICAoV2ViQ29yZTo6cWdseEJ1aWxkU3BlYyk6CisgICAgICAgICAgICBBZGQgYSBjb252ZW5p
ZW5jZSBmdW5jdGlvbiBmb3IgYnVpbGRpbmcgdGhlIHNwZWNzIGZvcgorICAgICAgICAgICAgdGhl
IGNyZWF0aW9uIG9mIGdsWFBpeG1hcHMuCisgICAgICAgIChHcmFwaGljc1N1cmZhY2VQcml2YXRl
KToKKyAgICAgICAgICAgIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBtYW5hZ2UgYWxsIHRoZSBYIHJl
bGF0ZWQgcmVzb3VyY2VzCisgICAgICAgICAgICBzdWNoIGFzIG9wZW5pbmcgYSBkaXNwbGF5IG9y
IGNyZWF0aW5nIFhQaXhtYXBzIGV0Yy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFj
ZVByaXZhdGU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGUpOgorICAgICAgICAgICAgT3BlbiBhIGNv
bm5lY3Rpb24gdG8gdGhlIFggc2VydmVyIGFuZCBjcmVhdGUgYQorICAgICAgICAgICAgUU9wZW5H
TENvbnRleHQgdGhhdCBjYW4gYmUgdXNlZCB0byByZXNvbHZlIEdMIGZ1bmN0aW9ucy4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6On5HcmFwaGljc1N1cmZhY2VQcml2
YXRlKToKKyAgICAgICAgICAgIFByb3Blcmx5IGNsZWFudXAgYW5kIHJlbGVhc2UgYWxsIHRoZSBY
IHJlc291cmNlcyBhZ2Fpbi4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZh
dGU6OmNyZWF0ZVN1cmZhY2UpOgorICAgICAgICAgICAgQ3JlYXRlIGEgc3VyZmFjZSB0aGF0IGlz
IHBsYWNlZCBvZmYgc2NyZWVuIGFuZCBjYW4gYmUKKyAgICAgICAgICAgIHVzZWQgYXMgYSByZW5k
ZXJpbmcgdGFyZ2V0IGJ5IHRoZSBXZWJQcm9jZXNzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NTdXJmYWNlUHJpdmF0ZTo6Y3JlYXRlUGl4bWFwKToKKyAgICAgICAgICAgIENyZWF0ZSBhIEdM
WFBpeG1hcCBmcm9tIHRoZSBYV2luZG93IHRoYXQgd2FzIHByZXZpb3VzbHkKKyAgICAgICAgICAg
IHJlZGlyZWN0ZWQgYnkgdGhlIFdlYlByb2Nlc3MuIFRoaXMgR0xYUGl4bWFwIGNhbiB0aGVuIGJl
CisgICAgICAgICAgICBib3VuZCB0byBhIHRleHR1cmUgYW5kIGJlaW5nIHBhaW50ZWQgb24gc2Ny
ZWVuIGJ5IHRoZQorICAgICAgICAgICAgVUlQcm9jZXNzLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZTo6bWFrZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZTo6ZGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c1N1cmZhY2VQcml2YXRlOjpnbHhQaXhtYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NT
dXJmYWNlUHJpdmF0ZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQ
cml2YXRlOjpnbENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZUdMTWV0aG9kcyk6
CisgICAgICAgICAgICBJbml0aWFsaXplIGFsbCB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHRo
ZSBHTCBmdW5jdGlvbnMgdXNlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6
cGxhdGZvcm1FeHBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0
Zm9ybUdldFRleHR1cmVJRCk6CisgICAgICAgICAgICBCaW5kIHRoZSBHTFhQaXhtYXAgdG8gYSB0
ZXh0dXJlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlU
b0dMVGV4dHVyZSk6CisgICAgICAgICAgICBOb3QgYmVlaW5nIGltcGxlbWVudGVkIGZvciBHTFgu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29weUZyb21GcmFt
ZWJ1ZmZlcik6CisgICAgICAgICAgICBCbGl0IG9yaWdpbiBmYm8gb250byB0aGUgR3JhcGhpY3NT
dXJmYWNlJ3MgYmFja2luZy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxh
dGZvcm1DcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9y
bUltcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtTG9j
ayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtVW5sb2NrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1EZXN0cm95KToKKwog
MjAxMi0wNy0wOSAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9yZz4KIAogICAgICAgICBy
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUgc2hvdWxkIG9ubHkgdHJpZ2dlciB3aGVuIGEgbmV3IGZyYW1l
IGNhbiBiZSBkaXNwbGF5ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
IGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA0ZDYyYWQ4Li5mMjcyZjA3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKQEAgLTQxNzMsNiArNDE3Myw5IEBAIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0Vf
R1JBUEhJQ1NfU1VSRkFDRT0xKSB7CiAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAKICAgICAgICAgSU5DTFVERVBB
VEggKz0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZUZvdW5kYXRpb24uZnJhbWV3b3Jr
L0hlYWRlcnMKICAgICB9CisgICAgY29udGFpbnMoREVGSU5FUywgSEFWRV9YQ09NUE9TSVRFPTEp
ICB7CisgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvcXQvR3Jh
cGhpY3NTdXJmYWNlR0xYLmNwcAorICAgIH0KIH0KIAogIyBNYWtlIHN1cmUgdGhlIGRlcml2ZWQg
c291cmNlcyBhcmUgYnVpbHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKaW5kZXggMWFmOWNjYy4uNjY2OTZlNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5wcmkKQEAgLTExLDcgKzExLDcgQEAgU09VUkNFX0RJUiA9ICQke1JPT1RfV0VCS0lU
X0RJUn0vU291cmNlL1dlYkNvcmUKIENPTkZJRyArPSB0ZXhtYXAKIAogUVQgKj0gbmV0d29yayBz
cWwKLWhhdmVRdCg1KTogUVQgKj0gZ3VpLXByaXZhdGUKK2hhdmVRdCg1KTogUVQgKj0gY29yZS1w
cml2YXRlIGd1aS1wcml2YXRlCiAKIFdFQkNPUkVfR0VORVJBVEVEX1NPVVJDRVNfRElSID0gJCR7
Uk9PVF9CVUlMRF9ESVJ9L1NvdXJjZS9XZWJDb3JlLyQke0dFTkVSQVRFRF9TT1VSQ0VTX0RFU1RE
SVJ9CiAKQEAgLTIwMyw2ICsyMDMsMTAgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVP
PTEpIHsKICAgICB9CiB9CiAKK2NvbnRhaW5zKERFRklORVMsIEhBVkVfWENPTVBPU0lURT0xKSB7
CisgICAgbGludXgtKjogTElCUyArPSAtbFhjb21wb3NpdGUKK30KKwogY29udGFpbnMoREVGSU5F
UywgRU5BQkxFX1dFQkdMPTEpIHsKICAgICAhY29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2wpIHsK
ICAgICAgICAgZXJyb3IoICJUaGlzIGNvbmZpZ3VyYXRpb24gbmVlZHMgYW4gT3BlbkdMIGVuYWJs
ZWQgUXQuIFlvdXIgUXQgaXMgbWlzc2luZyBPcGVuR0wuIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2Uu
Y3BwCmluZGV4IDAxOGE4OWMuLjJiOGNkNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmNwcApA
QCAtMjcsMTggKzI3LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxHcmFw
aGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUs
IEZsYWdzIGZsYWdzLCB1aW50MzJfdCB0b2tlbikKIHsKLSAgICBSZWZQdHI8R3JhcGhpY3NTdXJm
YWNlPiBzdXJmYWNlID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzU3VyZmFjZShzaXplLCBmbGFncykp
OwotICAgIGlmICghc3VyZmFjZS0+cGxhdGZvcm1JbXBvcnQodG9rZW4pKQotICAgICAgICByZXR1
cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7Ci0gICAgcmV0dXJuIHN1cmZhY2U7Cisg
ICAgcmV0dXJuIHBsYXRmb3JtSW1wb3J0KHNpemUsIGZsYWdzLCB0b2tlbik7CiB9CiAKIFBhc3NS
ZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShjb25zdCBJbnRT
aXplJiBzaXplLCBHcmFwaGljc1N1cmZhY2U6OkZsYWdzIGZsYWdzKQogewotICAgIFJlZlB0cjxH
cmFwaGljc1N1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NTdXJmYWNlKHNp
emUsIGZsYWdzKSk7Ci0gICAgaWYgKCFzdXJmYWNlLT5wbGF0Zm9ybUNyZWF0ZShzaXplLCBmbGFn
cykpCi0gICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsKLSAgICBy
ZXR1cm4gc3VyZmFjZTsKKyAgICByZXR1cm4gcGxhdGZvcm1DcmVhdGUoc2l6ZSwgZmxhZ3MpOwog
fQogCiB1aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6OmV4cG9ydFRva2VuKCkKQEAgLTcwLDEzICs2
NCwxOSBAQCB2b2lkIEdyYXBoaWNzU3VyZmFjZTo6Y29weUZyb21GcmFtZWJ1ZmZlcih1aW50MzJf
dCBmYm8sIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlYwogfQogCiBHcmFwaGljc1N1cmZhY2U6Okdy
YXBoaWNzU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncykKLSAgICA6IG1f
c2l6ZShzaXplKQotICAgICwgbV9mbGFncyhmbGFncykKKyAgICA6IG1fZmxhZ3MoZmxhZ3MpCisg
ICAgLCBtX3NpemUoc2l6ZSkKICAgICAsIG1fcGxhdGZvcm1TdXJmYWNlKDApCiAgICAgLCBtX3Rl
eHR1cmUoMCkKICAgICAsIG1fZmJvKDApCisgICAgLCBtX3ByaXZhdGUoMCkKIHsKIH0KIAorR3Jh
cGhpY3NTdXJmYWNlOjp+R3JhcGhpY3NTdXJmYWNlKCkKK3sKKyAgICBwbGF0Zm9ybURlc3Ryb3ko
KTsKK30KKwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5oCmluZGV4IGZmNzFmY2QuLjdh
ZWVkNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL0dyYXBoaWNzU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5oCkBAIC0zMiwxMCArMzIsMTQgQEAKICNpZiBP
UyhEQVJXSU4pCiB0eXBlZGVmIHN0cnVjdCBfX0lPU3VyZmFjZSogSU9TdXJmYWNlUmVmOwogdHlw
ZWRlZiBJT1N1cmZhY2VSZWYgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2U7CisjZWxzZQordHlwZWRl
ZiB1aW50MzJfdCBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFjZTsKICNlbmRpZgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK3N0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlOworCiBjbGFzcyBHcmFw
aGljc1N1cmZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHcmFwaGljc1N1cmZhY2U+IHsKIHB1Ymxp
YzoKICAgICBlbnVtIEZsYWcgewpAQCAtNjksMTAgKzczLDExIEBAIHB1YmxpYzoKICAgICB1aW50
MzJfdCBnZXRUZXh0dXJlSUQoKTsKICAgICBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYmVn
aW5QYWludChjb25zdCBJbnRSZWN0JiwgTG9ja09wdGlvbnMpOwogICAgIFBhc3NSZWZQdHI8SW1h
Z2U+IGNyZWF0ZVJlYWRPbmx5SW1hZ2UoY29uc3QgSW50UmVjdCYpOworICAgIH5HcmFwaGljc1N1
cmZhY2UoKTsKIAogcHJvdGVjdGVkOgotICAgIGJvb2wgcGxhdGZvcm1DcmVhdGUoY29uc3QgSW50
U2l6ZSYsIEZsYWdzKTsKLSAgICBib29sIHBsYXRmb3JtSW1wb3J0KHVpbnQzMl90KTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHBsYXRmb3JtQ3JlYXRlKGNvbnN0IElu
dFNpemUmLCBGbGFncyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBw
bGF0Zm9ybUltcG9ydChjb25zdCBJbnRTaXplJiwgRmxhZ3MsIHVpbnQzMl90KTsKICAgICB1aW50
MzJfdCBwbGF0Zm9ybUV4cG9ydCgpOwogICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAKQEAg
LTEwMCw2ICsxMDUsNyBAQCBwcml2YXRlOgogICAgIFBsYXRmb3JtR3JhcGhpY3NTdXJmYWNlIG1f
cGxhdGZvcm1TdXJmYWNlOwogICAgIHVpbnQzMl90IG1fdGV4dHVyZTsKICAgICB1aW50MzJfdCBt
X2ZibzsKKyAgICBHcmFwaGljc1N1cmZhY2VQcml2YXRlKiBtX3ByaXZhdGU7CiB9OwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMv
R3JhcGhpY3NTdXJmYWNlTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL21hYy9HcmFwaGljc1N1cmZhY2VNYWMuY3BwCmluZGV4IDg0MzEyZGUuLjcxMzFi
ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L21hYy9HcmFwaGljc1N1cmZhY2VNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL21hYy9HcmFwaGljc1N1cmZhY2VNYWMuY3BwCkBAIC0zMCw2ICsz
MCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IEdyYXBoaWNzU3VyZmFjZVBy
aXZhdGUgeyB9OworCiB1aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRXhwb3J0KCkK
IHsKICAgICByZXR1cm4gSU9TdXJmYWNlR2V0SUQobV9wbGF0Zm9ybVN1cmZhY2UpOwpAQCAtMTE4
LDcgKzEyMCw3IEBAIHZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlGcm9tRnJhbWVi
dWZmZXIodWludDMyX3Qgb3JpZ2luRmJvLCBjb25zdCBJbnRSCiAgICAgZ2xGbHVzaCgpOwogfQog
Ci1ib29sIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1DcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgRmxhZ3MgZmxhZ3MpCitQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gR3JhcGhpY3NTdXJm
YWNlOjpwbGF0Zm9ybUNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncykKIHsK
ICAgICB1bnNpZ25lZCBwaXhlbEZvcm1hdCA9ICdCR1JBJzsKICAgICB1bnNpZ25lZCBieXRlc1Bl
ckVsZW1lbnQgPSA0OwpAQCAtMTU0LDE0ICsxNTYsMjAgQEAgYm9vbCBHcmFwaGljc1N1cmZhY2U6
OnBsYXRmb3JtQ3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzKQogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCA3OyBpKyspCiAgICAgICAgIENGUmVsZWFzZSh2YWx1ZXNb
aV0pOwogCi0gICAgbV9wbGF0Zm9ybVN1cmZhY2UgPSBJT1N1cmZhY2VDcmVhdGUoZGljdCk7Ci0g
ICAgcmV0dXJuICEhbV9wbGF0Zm9ybVN1cmZhY2U7CisgICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFj
ZT4gc3VyZmFjZSA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc1N1cmZhY2Uoc2l6ZSwgZmxhZ3MpKTsK
KyAgICBzdXJmYWNlLT5tX3BsYXRmb3JtU3VyZmFjZSA9IElPU3VyZmFjZUNyZWF0ZShkaWN0KTsK
KyAgICBpZiAoIXN1cmZhY2UtPm1fcGxhdGZvcm1TdXJmYWNlKQorICAgICAgICByZXR1cm4gUGFz
c1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CisgICAgcmV0dXJuIHN1cmZhY2U7CiB9CiAKLWJv
b2wgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUltcG9ydCh1aW50MzJfdCB0b2tlbikKK1Bhc3NS
ZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtSW1wb3J0KGNv
bnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCB1aW50MzJfdCB0b2tlbikKIHsKLSAgICBt
X3BsYXRmb3JtU3VyZmFjZSA9IElPU3VyZmFjZUxvb2t1cCh0b2tlbik7Ci0gICAgcmV0dXJuICEh
bV9wbGF0Zm9ybVN1cmZhY2U7CisgICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSA9
IGFkb3B0UmVmKG5ldyBHcmFwaGljc1N1cmZhY2Uoc2l6ZSwgZmxhZ3MpKTsKKyAgICBzdXJmYWNl
LT5tX3BsYXRmb3JtU3VyZmFjZSA9IElPU3VyZmFjZUxvb2t1cCh0b2tlbik7CisgICAgaWYgKCFz
dXJmYWNlLT5tX3BsYXRmb3JtU3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8R3Jh
cGhpY3NTdXJmYWNlPigpOworICAgIHJldHVybiBzdXJmYWNlOwogfQogCiBzdGF0aWMgaW50IGlv
U3VyZmFjZUxvY2tPcHRpb25zKGludCBsb2NrT3B0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZUdMWC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9xdC9HcmFwaGlj
c1N1cmZhY2VHTFguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNTAw
Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9xdC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCkBAIC0wLDAgKzEsMzM2IEBACisvKgor
IENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5oIgorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
CisKKy8vIFF0IGhlYWRlcnMgbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgZ2x4IGhlYWRlcnMuCisj
aW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KKyNpbmNsdWRlIDxRT3BlbkdMQ29udGV4dD4KKyNp
bmNsdWRlIDxRVmVjdG9yPgorI2luY2x1ZGUgPFFXaW5kb3c+CisjaW5jbHVkZSA8cXBhL3FwbGF0
Zm9ybXdpbmRvdy5oPgorI2luY2x1ZGUgPEdML2dsZXh0Lmg+CisjaW5jbHVkZSA8R0wvZ2x4Lmg+
CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgorI2luY2x1ZGUgPFgxMS9l
eHRlbnNpb25zL1hyZW5kZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgbG9u
ZyBYMTFPdmVycmlkZVJlZGlyZWN0ID0gMUwgPDwgOTsKKworc3RhdGljIFBGTkdMWEJJTkRURVhJ
TUFHRUVYVFBST0MgcEdsWEJpbmRUZXhJbWFnZUVYVCA9IDA7CitzdGF0aWMgUEZOR0xYUkVMRUFT
RVRFWElNQUdFRVhUUFJPQyBwR2xYUmVsZWFzZVRleEltYWdlRVhUID0gMDsKK3N0YXRpYyBQRk5H
TEJJTkRGUkFNRUJVRkZFUlBST0MgcEdsQmluZEZyYW1lYnVmZmVyID0gMDsKK3N0YXRpYyBQRk5H
TEJMSVRGUkFNRUJVRkZFUlBST0MgcEdsQmxpdEZyYW1lYnVmZmVyID0gMDsKKworY2xhc3MgT2Zm
U2NyZWVuUm9vdFdpbmRvdyB7CitwdWJsaWM6CisgICAgT2ZmU2NyZWVuUm9vdFdpbmRvdygpCisg
ICAgeworICAgICAgICArK3JlZkNvdW50OworICAgIH0KKworICAgIFFXaW5kb3cqIGdldChEaXNw
bGF5KiBkcHkpCisgICAgeworICAgICAgICBpZiAoIXdpbmRvdykgeworICAgICAgICAgICAgd2lu
ZG93ID0gbmV3IFFXaW5kb3c7CisgICAgICAgICAgICB3aW5kb3ctPnNldEdlb21ldHJ5KFFSZWN0
KC0xLCAtMSwgMSwgMSkpOworICAgICAgICAgICAgd2luZG93LT5jcmVhdGUoKTsKKyAgICAgICAg
ICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CisgICAgICAgICAgICBhdHRyaWJ1
dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIFhDaGFuZ2VXaW5kb3dB
dHRyaWJ1dGVzKGRweSwgd2luZG93LT5oYW5kbGUoKS0+d2luSWQoKSwgWDExT3ZlcnJpZGVSZWRp
cmVjdCwgJmF0dHJpYnV0ZXMpOworICAgICAgICAgICAgd2luZG93LT5zaG93KCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHdpbmRvdzsKKyAgICB9CisKKyAgICB+T2ZmU2NyZWVuUm9vdFdp
bmRvdygpCisgICAgeworICAgICAgICBpZiAoIS0tcmVmQ291bnQpIHsKKyAgICAgICAgICAgIGRl
bGV0ZSB3aW5kb3c7CisgICAgICAgICAgICB3aW5kb3cgPSAwOworICAgICAgICB9CisgICAgfQor
Citwcml2YXRlOgorICAgIHN0YXRpYyBpbnQgcmVmQ291bnQ7CisgICAgc3RhdGljIFFXaW5kb3cq
IHdpbmRvdzsKK307CisKK2ludCBPZmZTY3JlZW5Sb290V2luZG93OjpyZWZDb3VudCA9IDA7CitR
V2luZG93KiBPZmZTY3JlZW5Sb290V2luZG93Ojp3aW5kb3cgPSAwOworCitzdGF0aWMgUVZlY3Rv
cjxpbnQ+IHFnbHhCdWlsZFNwZWMoKQoreworICAgIFFWZWN0b3I8aW50PiBzcGVjKDQ4KTsKKyAg
ICBpbnQgaSA9IDA7CisKKyAgICAvLyBUaGUgc3BlY2lmaWNhdGlvbiBpcyBhIHNldCBrZXkgdmFs
dWUgcGFpcnMgc3RvcmVkIGluIGEgc2ltcGxlIGFycmF5LgorICAgIHNwZWNbaSsrXSA9IEdMWF9M
RVZFTDsgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNbaSsrXSA9IDA7CisgICAgc3BlY1tp
KytdID0gR0xYX0RSQVdBQkxFX1RZUEU7ICAgICAgICAgICAgICAgICAgc3BlY1tpKytdID0gR0xY
X1BJWE1BUF9CSVQgfCBHTFhfV0lORE9XX0JJVDsKKyAgICBzcGVjW2krK10gPSBHTFhfQklORF9U
T19URVhUVVJFX1RBUkdFVFNfRVhUOyAgICBzcGVjW2krK10gPSBHTFhfVEVYVFVSRV8yRF9CSVRf
RVhUOworICAgIHNwZWNbaSsrXSA9IEdMWF9CSU5EX1RPX1RFWFRVUkVfUkdCX0VYVDsgICAgICAg
IHNwZWNbaSsrXSA9IFRSVUU7CisKKyAgICBzcGVjW2krK10gPSAwOworICAgIHJldHVybiBzcGVj
OworfQorCitzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CisgICAgR3JhcGhpY3NTdXJm
YWNlUHJpdmF0ZSgpCisgICAgICAgIDogbV9kaXNwbGF5KDApCisgICAgICAgICwgbV94UGl4bWFw
KDApCisgICAgICAgICwgbV9nbHhQaXhtYXAoMCkKKyAgICAgICAgLCBtX2dsQ29udGV4dChhZG9w
dFB0cihuZXcgUU9wZW5HTENvbnRleHQpKQorICAgICAgICAsIG1fdGV4dHVyZUlzWUludmVydGVk
KGZhbHNlKQorICAgICAgICAsIG1faGFzQWxwaGEoZmFsc2UpCisgICAgeworICAgICAgICBtX2Rp
c3BsYXkgPSBYT3BlbkRpc3BsYXkoMCk7CisgICAgICAgIG1fZ2xDb250ZXh0LT5jcmVhdGUoKTsK
KyAgICB9CisKKyAgICB+R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSgpCisgICAgeworICAgICAgICBp
ZiAobV9nbHhQaXhtYXApCisgICAgICAgICAgICBnbFhEZXN0cm95UGl4bWFwKG1fZGlzcGxheSwg
bV9nbHhQaXhtYXApOworICAgICAgICBtX2dseFBpeG1hcCA9IDA7CisKKyAgICAgICAgaWYgKG1f
eFBpeG1hcCkKKyAgICAgICAgICAgIFhGcmVlUGl4bWFwKG1fZGlzcGxheSwgbV94UGl4bWFwKTsK
KyAgICAgICAgbV94UGl4bWFwID0gMDsKKworICAgICAgICBpZiAobV9kaXNwbGF5KQorICAgICAg
ICAgICAgWENsb3NlRGlzcGxheShtX2Rpc3BsYXkpOworICAgICAgICBtX2Rpc3BsYXkgPSAwOwor
ICAgIH0KKworICAgIHVpbnQzMl90IGNyZWF0ZVN1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
KyAgICB7CisgICAgICAgIG1fc3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBRV2luZG93KG1fb2ZmU2Ny
ZWVuV2luZG93LmdldChtX2Rpc3BsYXkpKSk7CisgICAgICAgIG1fc3VyZmFjZS0+c2V0U3VyZmFj
ZVR5cGUoUVN1cmZhY2U6Ok9wZW5HTFN1cmZhY2UpOworICAgICAgICBtX3N1cmZhY2UtPnNldEdl
b21ldHJ5KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fc3Vy
ZmFjZS0+Y3JlYXRlKCk7CisgICAgICAgIFhDb21wb3NpdGVSZWRpcmVjdFdpbmRvdyhtX2Rpc3Bs
YXksIG1fc3VyZmFjZS0+aGFuZGxlKCktPndpbklkKCksIENvbXBvc2l0ZVJlZGlyZWN0TWFudWFs
KTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIFhSZW5kZXIgRXh0ZW5zaW9uIGlzIGF2YWls
YWJsZS4KKyAgICAgICAgaW50IGV2ZW50QmFzZXAsIGVycm9yQmFzZXA7CisgICAgICAgIGlmICgh
WFJlbmRlclF1ZXJ5RXh0ZW5zaW9uKG1fZGlzcGxheSwgJmV2ZW50QmFzZXAsICZlcnJvckJhc2Vw
KSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIG1fc3VyZmFjZS0+c2hvdygpOwor
CisgICAgICAgIHJldHVybiBtX3N1cmZhY2UtPmhhbmRsZSgpLT53aW5JZCgpOworICAgIH0KKwor
ICAgIHZvaWQgY3JlYXRlUGl4bWFwKHVpbnQzMl90IHdpbklkKQorICAgIHsKKyAgICAgICAgWFdp
bmRvd0F0dHJpYnV0ZXMgYXR0cjsKKyAgICAgICAgWEdldFdpbmRvd0F0dHJpYnV0ZXMobV9kaXNw
bGF5LCB3aW5JZCwgJmF0dHIpOworCisgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQg
PSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChtX2Rpc3BsYXksIGF0dHIudmlzdWFsKTsKKyAgICAg
ICAgbV9oYXNBbHBoYSA9IChmb3JtYXQtPnR5cGUgPT0gUGljdFR5cGVEaXJlY3QgJiYgZm9ybWF0
LT5kaXJlY3QuYWxwaGFNYXNrKTsKKyAgICAgICAgbV9zaXplID0gSW50U2l6ZShhdHRyLndpZHRo
LCBhdHRyLmhlaWdodCk7CisKKyAgICAgICAgUVZlY3RvcjxpbnQ+IGdseENvbmZpZ1NwZWMgPSBx
Z2x4QnVpbGRTcGVjKCk7CisgICAgICAgIGludCBudW1iZXJPZkNvbmZpZ3M7CisgICAgICAgIEdM
WEZCQ29uZmlnKiBjb25maWdzID0gZ2xYQ2hvb3NlRkJDb25maWcobV9kaXNwbGF5LCBYRGVmYXVs
dFNjcmVlbihtX2Rpc3BsYXkpLCBnbHhDb25maWdTcGVjLmNvbnN0RGF0YSgpLCAmbnVtYmVyT2ZD
b25maWdzKTsKKworICAgICAgICBtX3hQaXhtYXAgPSBYQ29tcG9zaXRlTmFtZVdpbmRvd1BpeG1h
cChtX2Rpc3BsYXksIHdpbklkKTsKKworICAgICAgICBRVmVjdG9yPGludD4gYXR0cmliTGlzdDsK
KyAgICAgICAgYXR0cmliTGlzdC5hcHBlbmQoR0xYX1RFWFRVUkVfRk9STUFUX0VYVCk7CisgICAg
ICAgIGF0dHJpYkxpc3QuYXBwZW5kKEdMWF9URVhUVVJFX0ZPUk1BVF9SR0JfRVhUKTsKKyAgICAg
ICAgYXR0cmliTGlzdC5hcHBlbmQoR0xYX1RFWFRVUkVfVEFSR0VUX0VYVCk7CisgICAgICAgIGF0
dHJpYkxpc3QuYXBwZW5kKEdMWF9URVhUVVJFXzJEX0VYVCk7CisgICAgICAgIGF0dHJpYkxpc3Qu
YXBwZW5kKDApOworICAgICAgICBtX2dseFBpeG1hcCA9IGdsWENyZWF0ZVBpeG1hcChtX2Rpc3Bs
YXksICpjb25maWdzLCBtX3hQaXhtYXAsIGF0dHJpYkxpc3QuY29uc3REYXRhKCkpOworCisgICAg
ICAgIHVpbnQgaW52ZXJ0ZWQgPSAwOworICAgICAgICBnbFhRdWVyeURyYXdhYmxlKG1fZGlzcGxh
eSwgbV9nbHhQaXhtYXAsIEdMWF9ZX0lOVkVSVEVEX0VYVCwgJmludmVydGVkKTsKKyAgICAgICAg
bV90ZXh0dXJlSXNZSW52ZXJ0ZWQgPSAhIWludmVydGVkOworCisgICAgICAgIFhGcmVlKGNvbmZp
Z3MpOworICAgIH0KKworICAgIHZvaWQgbWFrZUN1cnJlbnQoKQorICAgIHsKKyAgICAgICAgUU9w
ZW5HTENvbnRleHQqIGdsQ29udGV4dCA9IFFPcGVuR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgp
OworICAgICAgICBpZiAobV9zdXJmYWNlICYmIGdsQ29udGV4dCkKKyAgICAgICAgICAgIGdsQ29u
dGV4dC0+bWFrZUN1cnJlbnQobV9zdXJmYWNlLmdldCgpKTsKKyAgICB9CisKKyAgICB2b2lkIHN3
YXBCdWZmZXJzKCkKKyAgICB7CisgICAgICAgIGlmICghbV9zdXJmYWNlLT5pc1Zpc2libGUoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBDcmVhdGluZyBhbmQgZXhwb3Npbmcg
dGhlIHN1cmZhY2UgaXMgYXN5bmNocm9ub3VzLiBUaGVyZWZvcmUgd2UgaGF2ZSB0byB3YWl0IGhl
cmUKKyAgICAgICAgLy8gYmVmb3JlIHN3YXBwaW5nIHRoZSBidWZmZXJzLiBUaGlzIHNob3VsZCBv
bmx5IGJlIHRoZSBjYXNlIGZvciB0aGUgdmVyeSBmaXJzdCBmcmFtZS4KKyAgICAgICAgd2hpbGUg
KCFtX3N1cmZhY2UtPmlzRXhwb3NlZCgpKQorICAgICAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6
cHJvY2Vzc0V2ZW50cygpOworCisgICAgICAgIFFPcGVuR0xDb250ZXh0KiBnbENvbnRleHQgPSBR
T3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKTsKKyAgICAgICAgaWYgKG1fc3VyZmFjZSAm
JiBnbENvbnRleHQpCisgICAgICAgICAgICBnbENvbnRleHQtPnN3YXBCdWZmZXJzKG1fc3VyZmFj
ZS5nZXQoKSk7CisgICAgfQorCisKKyAgICBEaXNwbGF5KiBkaXNwbGF5KCkgY29uc3QgeyByZXR1
cm4gbV9kaXNwbGF5OyB9CisKKyAgICBHTFhQaXhtYXAgZ2x4UGl4bWFwKCkgY29uc3QgeyByZXR1
cm4gbV9nbHhQaXhtYXA7IH0KKworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQorCisgICAgUU9wZW5HTENvbnRleHQqIGdsQ29udGV4dCgpIHsgcmV0dXJuIG1fZ2xD
b250ZXh0LmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgT2ZmU2NyZWVuUm9vdFdpbmRvdyBtX29m
ZlNjcmVlbldpbmRvdzsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBEaXNwbGF5KiBtX2Rpc3Bs
YXk7CisgICAgUGl4bWFwIG1feFBpeG1hcDsKKyAgICBHTFhQaXhtYXAgbV9nbHhQaXhtYXA7Cisg
ICAgT3duUHRyPFFXaW5kb3c+IG1fc3VyZmFjZTsKKyAgICBPd25QdHI8UU9wZW5HTENvbnRleHQ+
IG1fZ2xDb250ZXh0OworICAgIGJvb2wgbV90ZXh0dXJlSXNZSW52ZXJ0ZWQ7CisgICAgYm9vbCBt
X2hhc0FscGhhOworfTsKKworc3RhdGljIGJvb2wgcmVzb2x2ZUdMTWV0aG9kcyhHcmFwaGljc1N1
cmZhY2VQcml2YXRlKiBwKQoreworICAgIHN0YXRpYyBib29sIHJlc29sdmVkID0gZmFsc2U7Cisg
ICAgaWYgKHJlc29sdmVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFFPcGVuR0xDb250
ZXh0KiBnbENvbnRleHQgPSBwLT5nbENvbnRleHQoKTsKKyAgICBwR2xYQmluZFRleEltYWdlRVhU
ID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTFhCSU5EVEVYSU1BR0VFWFRQUk9DPihnbENvbnRleHQt
PmdldFByb2NBZGRyZXNzKCJnbFhCaW5kVGV4SW1hZ2VFWFQiKSk7CisgICAgcEdsWFJlbGVhc2VU
ZXhJbWFnZUVYVCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xYUkVMRUFTRVRFWElNQUdFRVhUUFJP
Qz4oZ2xDb250ZXh0LT5nZXRQcm9jQWRkcmVzcygiZ2xYUmVsZWFzZVRleEltYWdlRVhUIikpOwor
ICAgIHBHbEJpbmRGcmFtZWJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xCSU5ERlJBTUVC
VUZGRVJQUk9DPihnbENvbnRleHQtPmdldFByb2NBZGRyZXNzKCJnbEJpbmRGcmFtZWJ1ZmZlciIp
KTsKKyAgICBwR2xCbGl0RnJhbWVidWZmZXIgPSByZWludGVycHJldF9jYXN0PFBGTkdMQkxJVEZS
QU1FQlVGRkVSUFJPQz4oZ2xDb250ZXh0LT5nZXRQcm9jQWRkcmVzcygiZ2xCbGl0RnJhbWVidWZm
ZXIiKSk7CisKKyAgICByZXNvbHZlZCA9IHBHbEJsaXRGcmFtZWJ1ZmZlciAmJiBwR2xCaW5kRnJh
bWVidWZmZXIgJiYgcEdsWEJpbmRUZXhJbWFnZUVYVCAmJiBwR2xYUmVsZWFzZVRleEltYWdlRVhU
OworCisgICAgcmV0dXJuIHJlc29sdmVkOworfQorCit1aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6
OnBsYXRmb3JtRXhwb3J0KCkKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybVN1cmZhY2U7Cit9CisK
K3VpbnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1HZXRUZXh0dXJlSUQoKQoreworICAg
IGlmICghbV90ZXh0dXJlKQorICAgICAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwor
CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIGdsVGV4
UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVB
Uik7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAg
cEdsWEJpbmRUZXhJbWFnZUVYVChtX3ByaXZhdGUtPmRpc3BsYXkoKSwgbV9wcml2YXRlLT5nbHhQ
aXhtYXAoKSwgR0xYX0ZST05UX0VYVCwgMCk7CisKKyAgICByZXR1cm4gbV90ZXh0dXJlOworfQor
Cit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Db3B5VG9HTFRleHR1cmUodWludDMyX3Qg
dGFyZ2V0LCB1aW50MzJfdCBpZCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50
UG9pbnQmIG9mZnNldCkKK3sKKyAgICAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR0xYL1hj
b21wb3NpdGUuCit9CisKK3ZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlGcm9tRnJh
bWVidWZmZXIodWludDMyX3Qgb3JpZ2luRmJvLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQor
eworICAgIG1fcHJpdmF0ZS0+bWFrZUN1cnJlbnQoKTsKKyAgICBpbnQgd2lkdGggPSBtX3NpemUu
d2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgpOworCisgICAgZ2xQdXNo
QXR0cmliKEdMX0FMTF9BVFRSSUJfQklUUyk7CisgICAgR0xpbnQgb2xkRkJPOworICAgIGdsR2V0
SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJfQklORElORywgJm9sZEZCTyk7CisgICAgcEdsQmluZEZy
YW1lYnVmZmVyKEdMX1JFQURfRlJBTUVCVUZGRVIsIG9yaWdpbkZibyk7CisgICAgcEdsQmluZEZy
YW1lYnVmZmVyKEdMX0RSQVdfRlJBTUVCVUZGRVIsIG1fcHJpdmF0ZS0+Z2xDb250ZXh0KCktPmRl
ZmF1bHRGcmFtZWJ1ZmZlck9iamVjdCgpKTsKKyAgICBwR2xCbGl0RnJhbWVidWZmZXIoMCwgMCwg
d2lkdGgsIGhlaWdodCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwg
R0xfTElORUFSKTsKKyAgICBwR2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG9sZEZC
Tyk7CisgICAgZ2xQb3BBdHRyaWIoKTsKKworICAgIG1fcHJpdmF0ZS0+c3dhcEJ1ZmZlcnMoKTsK
K30KKworUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZv
cm1DcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCit7CisgICAgLy8gWDEx
IGRvZXMgbm90IHN1cHBvcnQgQ29weVRvVGV4dHVyZSwgc28gd2UgZG8gbm90IGNyZWF0ZSBhIEdy
YXBoaWNzU3VyZmFjZSBpZiB0aGlzIGlzIHJlcXVlc3RlZC4KKyAgICBpZiAoZmxhZ3MgJiBTdXBw
b3J0c0NvcHlUb1RleHR1cmUpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEdyYXBoaWNzU3Vy
ZmFjZT4oKTsKKworICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFJl
ZihuZXcgR3JhcGhpY3NTdXJmYWNlKHNpemUsIGZsYWdzKSk7CisKKyAgICBzdXJmYWNlLT5tX3By
aXZhdGUgPSBuZXcgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSgpOworICAgIGlmICghcmVzb2x2ZUdM
TWV0aG9kcyhzdXJmYWNlLT5tX3ByaXZhdGUpKQorICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxH
cmFwaGljc1N1cmZhY2U+KCk7CisKKyAgICBzdXJmYWNlLT5tX3BsYXRmb3JtU3VyZmFjZSA9IHN1
cmZhY2UtPm1fcHJpdmF0ZS0+Y3JlYXRlU3VyZmFjZShzaXplKTsKKworICAgIHJldHVybiBzdXJm
YWNlOworfQorCitQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gR3JhcGhpY3NTdXJmYWNlOjpw
bGF0Zm9ybUltcG9ydChjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncywgdWludDMyX3Qg
dG9rZW4pCit7CisgICAgLy8gWDExIGRvZXMgbm90IHN1cHBvcnQgQ29weVRvVGV4dHVyZSwgc28g
d2UgZG8gbm90IGNyZWF0ZSBhIEdyYXBoaWNzU3VyZmFjZSBpZiB0aGlzIGlzIHJlcXVlc3RlZC4K
KyAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0NvcHlUb1RleHR1cmUpCisgICAgICAgIHJldHVybiBQ
YXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsKKworICAgIFJlZlB0cjxHcmFwaGljc1N1cmZh
Y2U+IHN1cmZhY2UgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NTdXJmYWNlKHNpemUsIGZsYWdzKSk7
CisKKyAgICBzdXJmYWNlLT5tX3ByaXZhdGUgPSBuZXcgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSgp
OworICAgIGlmICghcmVzb2x2ZUdMTWV0aG9kcyhzdXJmYWNlLT5tX3ByaXZhdGUpKQorICAgICAg
ICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CisKKyAgICBzdXJmYWNlLT5t
X3BsYXRmb3JtU3VyZmFjZSA9IHRva2VuOworCisgICAgc3VyZmFjZS0+bV9wcml2YXRlLT5jcmVh
dGVQaXhtYXAoc3VyZmFjZS0+bV9wbGF0Zm9ybVN1cmZhY2UpOworICAgIHN1cmZhY2UtPm1fc2l6
ZSA9IHN1cmZhY2UtPm1fcHJpdmF0ZS0+c2l6ZSgpOworCisgICAgcmV0dXJuIHN1cmZhY2U7Cit9
CisKK2NoYXIqIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Mb2NrKGNvbnN0IEludFJlY3QmIHJl
Y3QsIGludCogb3V0cHV0U3RyaWRlLCBMb2NrT3B0aW9ucyBsb2NrT3B0aW9ucykKK3sKKyAgICAv
LyBHcmFwaGljc1N1cmZhY2UgaXMgY3VycmVudGx5IG9ubHkgYmVpbmcgdXNlZCBmb3IgV2ViR0ws
IHdoaWNoIGRvZXMgbm90IHJlcXVpcmUgdGhpcyBsb2NraW5nIG1lY2hhbmlzbS4KKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtVW5sb2NrKCkKK3sKKyAg
ICAvLyBHcmFwaGljc1N1cmZhY2UgaXMgY3VycmVudGx5IG9ubHkgYmVpbmcgdXNlZCBmb3IgV2Vi
R0wsIHdoaWNoIGRvZXMgbm90IHJlcXVpcmUgdGhpcyBsb2NraW5nIG1lY2hhbmlzbS4KK30KKwor
dm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRGVzdHJveSgpCit7CisgICAgaWYgKG1fdGV4
dHVyZSkgeworICAgICAgICBwR2xYUmVsZWFzZVRleEltYWdlRVhUKG1fcHJpdmF0ZS0+ZGlzcGxh
eSgpLCBtX3ByaXZhdGUtPmdseFBpeG1hcCgpLCBHTFhfRlJPTlRfRVhUKTsKKyAgICAgICAgZ2xE
ZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICB9CisKKyAgICBkZWxldGUgbV9wcml2
YXRlOworICAgIG1fcHJpdmF0ZSA9IDA7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDg0
MzM3ZDUuLmE0MmU0MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMi0wNy0xMiAg
WmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9yZz4KKworICAgICAgICBbUXRdW1dLMl0gSW1w
bGVtZW50IEdyYXBoaWNzU3VyZmFjZSBmb3IgTGludXgvR0xYLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA4ODEKKworICAgICAgICBBZGQgYSBHTFgg
YmFzZWQgR3JhcGhpY3NTdXJmYWNlIGltcGxlbWVudGF0aW9uIGZvciBMaW51eC4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9TaGFyZWFi
bGVTdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRl
KToKKyAgICAgICAgICAgIE9ubHkgY3JlYXRlIGEgR3JhcGhpY3NTdXJmYWNlIGZyb20gYSBTaGFy
ZWFibGVTdXJmYWNlOjpIYW5kbGUKKyAgICAgICAgICAgIGluIGNhc2UgdGhlIEhhbmRsZSBjb250
YWlucyBhIHZhbGlkIEdyYXBoaWNzU3VyZmFjZSB0b2tlbi4KKyAgICAgICAgICAgIE90aGVyd2lz
ZSBmYWxsIGJhY2sgdG8gY3JlYXRpbmcgYSBTaGFyZWFibGVCaXRtYXAuCisgICAgICAgICogVUlQ
cm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0Ojpj
cmVhdGVMYXllclRpbGVVbmlxdWVLZXkpOgorICAgICAgICAgICAgQ3JlYXRlIGEgdW5pcXVlIGtl
eSBmb3IgYSBzdXJmYWNlIGJhc2VkIG9uIHRpbGVJRCBhbmQgbGF5ZXJJRC4KKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKToKKyAg
ICAgICAgICAgIEV2ZW4gd2hlbiBHcmFwaGljc1N1cmZhY2UgaXMgZW5hYmxlZCwgbm90IGFsbCBT
aGFyZWFibGVTdXJmYWNlcworICAgICAgICAgICAgd2lsbCBuZWNlc3NhcmlseSBiZSBiYWNrZWQg
YnkgYSBHcmFwaGljc1N1cmZhY2UuIEluIGNhc2Ugb2YKKyAgICAgICAgICAgIGEgU2hhcmVhYmxl
U3VyZmFjZSBiZWluZyBiYWNrZWQgYnkgYSBTaGFyZWFibGVCaXRtYXAgaW5zdGVhZCwKKyAgICAg
ICAgICAgIHRoZSBHcmFwaGljc1N1cmZhY2UgdG9rZW4gd2lsbCBhbHdheXMgYmUgbnVsbC4KKyAg
ICAgICAgICAgIFNvIGluc3RlYWQgb2YgdXNpbmcgdGhlIEdyYXBoaWNzU3VyZmFjZSB0b2tlbiBh
cyBhIGtleSBmb3IKKyAgICAgICAgICAgIHN0b3Jpbmcgc3VyZmFjZXMgaW4gYSBtYXAsIHdlIGNy
ZWF0ZSBhIHVuaXF1ZSBrZXkgZnJvbQorICAgICAgICAgICAgbGF5ZXJJRCBhbmQgdGlsZUlELgor
ICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lmg6CisgICAgICAg
IChMYXllclRyZWVDb29yZGluYXRvclByb3h5KToKKwogMjAxMi0wNy0wOSAgWmVubyBBbGJpc3Nl
ciAgPHplbm9Ad2Via2l0Lm9yZz4KIAogICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgc2hv
dWxkIG9ubHkgdHJpZ2dlciB3aGVuIGEgbmV3IGZyYW1lIGNhbiBiZSBkaXNwbGF5ZWQuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5jcHAKaW5kZXggY2YxMGUxNi4uMmVm
NWE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVN1cmZhY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVTdXJmYWNlLmNwcApAQCAt
MTQ5LDkgKzE0OSwxMSBAQCBTaGFyZWFibGVTdXJmYWNlOjp+U2hhcmVhYmxlU3VyZmFjZSgpCiBQ
YXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZShjb25z
dCBIYW5kbGUmIGhhbmRsZSkKIHsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBpZiAo
aGFuZGxlLmdyYXBoaWNzU3VyZmFjZVRva2VuKCkpIHsKICAgICAgICAgUmVmUHRyPEdyYXBoaWNz
U3VyZmFjZT4gc3VyZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZS5tX3NpemUs
IGhhbmRsZS5tX2ZsYWdzLCBoYW5kbGUubV9ncmFwaGljc1N1cmZhY2VUb2tlbik7CiAgICAgICAg
IGlmIChzdXJmYWNlKQogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWFibGVT
dXJmYWNlKGhhbmRsZS5tX3NpemUsIGhhbmRsZS5tX2ZsYWdzLCBQYXNzUmVmUHRyPEdyYXBoaWNz
U3VyZmFjZT4oc3VyZmFjZSkpKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIFJlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZS5tX2JpdG1h
cEhhbmRsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eS5jcHAKaW5kZXggM2IwMjE0My4uZGFkOTA5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNw
cApAQCAtNjEsMTUgKzYxLDI0IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3Jl
YXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zCiAgICAgdXBkYXRl
VGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwgdXBkYXRlSW5mbyk7CiB9
CiAKK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgY3JlYXRlTGF5ZXJUaWxlVW5pcXVlS2V5KGludCBs
YXllcklELCBpbnQgdGlsZUlEKQoreworICAgIHVpbnQ2NF90IGtleSA9IGxheWVySUQ7CisgICAg
a2V5IDw8PSAzMjsKKyAgICBrZXkgfD0gdGlsZUlEOworICAgIHJldHVybiBrZXk7Cit9CisKIHZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXll
cklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJLaXQ6
OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQogewogICAgIFJlZlB0cjxTaGFyZWFibGVT
dXJmYWNlPiBzdXJmYWNlOwogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHVpbnQzMl90
IHRva2VuID0gdXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlLmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7
Ci0gICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+ID46Oml0ZXJh
dG9yIGl0ID0gbV9zdXJmYWNlcy5maW5kKHRva2VuKTsKKyAgICB1aW50NjRfdCBrZXkgPSBjcmVh
dGVMYXllclRpbGVVbmlxdWVLZXkobGF5ZXJJRCwgdGlsZUlEKTsKKworICAgIEhhc2hNYXA8dWlu
dDY0X3QsIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiA+OjppdGVyYXRvciBpdCA9IG1fc3VyZmFj
ZXMuZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBtX3N1cmZhY2VzLmVuZCgpKSB7CiAgICAgICAg
IHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFu
ZGxlKTsKLSAgICAgICAgbV9zdXJmYWNlcy5hZGQodG9rZW4sIHN1cmZhY2UpOworICAgICAgICBt
X3N1cmZhY2VzLmFkZChrZXksIHN1cmZhY2UpOwogICAgIH0gZWxzZQogICAgICAgICBzdXJmYWNl
ID0gaXQtPnNlY29uZDsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaAppbmRleCBiNGU3YjdjLi5jMGVkYjY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclBy
b3h5LmgKQEAgLTc5LDcgKzc5LDcgQEAgcHJvdGVjdGVkOgogICAgIERyYXdpbmdBcmVhUHJveHkq
IG1fZHJhd2luZ0FyZWFQcm94eTsKICAgICBSZWZQdHI8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+IG1f
cmVuZGVyZXI7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgSGFzaE1hcDx1aW50MzJf
dCwgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+ID4gbV9zdXJmYWNlczsKKyAgICBIYXNoTWFwPHVp
bnQ2NF90LCBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gPiBtX3N1cmZhY2VzOwogI2VuZGlmCiB9
OwogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
NmE0MmZjMS4uNmY4YWFiNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTA3LTEyICBaZW5vIEFsYmlzc2VyICA8
emVub0B3ZWJraXQub3JnPgorCisgICAgICAgIFtRdF1bV0syXSBJbXBsZW1lbnQgR3JhcGhpY3NT
dXJmYWNlIGZvciBMaW51eC9HTFguCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05MDg4MQorCisgICAgICAgIEVuYWJsZSBHcmFwaGljc1N1cmZhY2UgZm9y
IExpbnV4IGJhc2VkIHBsYXRmb3JtcworICAgICAgICB3aGVuZXZlciB0aGUgWGNvbXBvc2l0ZSBl
eHRlbnNpb24gaXMgYXZhaWxhYmxlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogcW1ha2UvY29uZmlnLnRlc3RzL2xpYlhjb21wb3NpdGUvbGliWGNv
bXBvc2l0ZS5jcHA6IEFkZGVkLgorICAgICAgICAobWFpbik6CisgICAgICAgICogcW1ha2UvY29u
ZmlnLnRlc3RzL2xpYlhjb21wb3NpdGUvbGliWGNvbXBvc2l0ZS5wcm86IEFkZGVkLgorICAgICAg
ICAgIEFkZCBhIGNvbmZpZ3VyZSB0ZXN0IHRvIGRldGVjdCBYY29tcG9zaXRlIGV4dGVuc2lvbiBh
bmQKKyAgICAgICAgICBhY3RpdmF0ZSBHcmFwaGljc1N1cmZhY2Ugb24gbGludXggaW4gY2FzZSB0
aGUgZXh0ZW5zaW9uIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgKiBxbWFrZS9jb25maWd1cmUucHJp
OgorICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmOgorCiAyMDEy
LTA3LTA5ICBNYXR0IEZhbGtlbmhhZ2VuICA8ZmFsa2VuQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBBZGQgRU5BQkxFX0RJQUxPR19FTEVNRU5UIGFuZCBza2VsZXRvbiBmaWxlcwpkaWZmIC0tZ2l0
IGEvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2xpYlhjb21wb3NpdGUvbGliWGNvbXBvc2l0ZS5j
cHAgYi9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvbGliWGNvbXBvc2l0ZS9saWJYY29tcG9zaXRl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGUxMDU0Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2xpYlhjb21wb3NpdGUvbGliWGNv
bXBvc2l0ZS5jcHAKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+CisKK2ludCBt
YWluKGludCwgY2hhcioqKQoreworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBYT3BlbkRpc3BsYXko
MCk7CisgICAgaW50IG1ham9yVmVyc2lvbjsKKyAgICBpbnQgbWlub3JWZXJzaW9uOworICAgICh2
b2lkKVhDb21wb3NpdGVRdWVyeVZlcnNpb24oZGlzcGxheSwgJm1ham9yVmVyc2lvbiwgJm1pbm9y
VmVyc2lvbik7CisgICAgWENsb3NlRGlzcGxheShkaXNwbGF5KTsKKyAgICByZXR1cm4gMDsKK30K
ZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJYY29tcG9zaXRlL2xpYlhj
b21wb3NpdGUucHJvIGIvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2xpYlhjb21wb3NpdGUvbGli
WGNvbXBvc2l0ZS5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZjNWMy
OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJYY29tcG9z
aXRlL2xpYlhjb21wb3NpdGUucHJvCkBAIC0wLDAgKzEsMyBAQAorU09VUkNFUyA9IGxpYlhjb21w
b3NpdGUuY3BwCitPQkpFQ1RTX0RJUiA9IG9iagorTElCUyArPSAtbFhjb21wb3NpdGUgLWxYMTEK
ZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL2NvbmZpZ3VyZS5wcmkgYi9Ub29scy9xbWFrZS9jb25m
aWd1cmUucHJpCmluZGV4IDhjMDA5ZmQuLjU3NWRlYjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtl
L2NvbmZpZ3VyZS5wcmkKKysrIGIvVG9vbHMvcW1ha2UvY29uZmlndXJlLnByaQpAQCAtMTUsNiAr
MTUsNyBAQCBoYXZlUXQoNSk6IXF1aWNrX2NoZWNrIHsKICAgICAgICAgbGlicG5nIFwKICAgICAg
ICAgbGlianBlZyBcCiAgICAgICAgIGxpYndlYnAgXAorICAgICAgICBsaWJYY29tcG9zaXRlIFwK
ICAgICAgICAgbGlieG1sMiBcCiAgICAgICAgIGxpYnhzbHQgXAogICAgICAgICBsaWJ6bGliCmRp
ZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZiBiL1Rv
b2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCmluZGV4IGU3NmM4MDkuLjJi
NjkxNzcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMu
cHJmCisrKyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCkBAIC0x
NzAsOCArMTcwLDE2IEBAIGhhdmVRdCg0KSB7CiAgICAgIyBpcyBjYWxsZWQgUW1sRW5naW5lIGFu
ZCBpdCBpcyBzYWZlIGZvciB1cyB0byB1c2UgUVF1aWNrMSBhZ2Fpbi4KIH0KIAorIyBYY29tcG9z
aXRlIFN1cHBvcnQKK2hhdmVRdCg1KTpsaW51eC0qOmNvbmZpZ19saWJYY29tcG9zaXRlOiBERUZJ
TkVTICs9IEhBVkVfWENPTVBPU0lURT0xCisKKyMgU3VwcG9ydCBmb3IgR3JhcGhpY3MgU3VyZmFj
ZQogIWNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfR1JBUEhJQ1NfU1VSRkFDRT0uKSB7Ci0gICAg
aGF2ZVF0KDUpOm1hYzogREVGSU5FUyArPSBXVEZfVVNFX0dSQVBISUNTX1NVUkZBQ0U9MQorICAg
IGhhdmVRdCg1KSB7CisgICAgICAgIG1hYzogREVGSU5FUyArPSBXVEZfVVNFX0dSQVBISUNTX1NV
UkZBQ0U9MQorICAgICAgICAjIE9uIGxpbnV4IHdlIHJlcXVpcmUgbGliWGNvbXBvc2l0ZSB0byBl
bmFibGUgZ3JhcGhpY3Mgc3VyZmFjZS4KKyAgICAgICAgbGludXgtKjpjb250YWlucyhERUZJTkVT
LCBIQVZFX1hDT01QT1NJVEU9MSk6IERFRklORVMgKz0gV1RGX1VTRV9HUkFQSElDU19TVVJGQUNF
PTEKKyAgICB9CiB9CiAKICMgLS0tLS0tLS0tLS0tLS0gRmlsbCBpbiBzdGF0aWMgZGVmYXVsdHMg
LS0tLS0tLS0tLS0tLS0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151974</attachid>
            <date>2012-07-12 09:40:31 -0700</date>
            <delta_ts>2012-07-12 09:46:20 -0700</delta_ts>
            <desc>patch for review. - rebased.</desc>
            <filename>90881_20120712-180902.patch</filename>
            <type>text/plain</type>
            <size>30983</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiM2U3NjAzLi5kMTgxZThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYg
QEAKKzIwMTItMDctMTIgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgW1F0XVtXSzJdIEltcGxlbWVudCBHcmFwaGljc1N1cmZhY2UgZm9yIExpbnV4L0dMWC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwODgxCisKKyAg
ICAgICAgQWRkIGEgR0xYIGJhc2VkIEdyYXBoaWNzU3VyZmFjZSBpbXBsZW1lbnRhdGlvbiBmb3Ig
TGludXguCisgICAgICAgIE5hdGl2ZSBYIHdpbmRvd3MgYXJlIGJlaW5nIHVzZWQgZm9yIGV4Y2hh
bmdpbmcgdGV4dHVyZXMKKyAgICAgICAgd2l0aCB0aGUgVUlQcm9jZXNzLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAg
ICAgKiBXZWJDb3JlLnByaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9H
cmFwaGljc1N1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpj
cmVhdGUpOgorICAgICAgICAgICAgTW92ZSBjcmVhdGluZyBHcmFwaGljc1N1cmZhY2UgaW5zdGFu
Y2UgaW50bworICAgICAgICAgICAgcGxhdGZvcm1DcmVhdGUvcGxhdGZvcm1JbXBvcnQgZnVuY3Rp
b25zIHRvIGFsbG93CisgICAgICAgICAgICBwbGF0Zm9ybSBzcGVjaWZpYyBjcmVhdGlvbiBiYXNl
ZCBvbiB0aGUgcHJvdmlkZWQgZmxhZ3MuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZh
Y2U6OkdyYXBoaWNzU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6
On5HcmFwaGljc1N1cmZhY2UpOgorICAgICAgICAgICAgQ2FsbCBwbGF0Zm9ybURlc3Ryb3kgd2hl
biBkZXN0cm95aW5nIGEgR3JhcGhpY3NTdXJmYWNlLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmg6CisgICAg
ICAgICAgICBNYWtlIHBsYXRmb3JtQ3JlYXRlL3BsYXRmb3JtSW1wb3J0IGZ1bmN0aW9ucyBzdGF0
aWMKKyAgICAgICAgICAgIHRvIGJlIGFibGUgdG8gY2FsbCB0aGVzZSBmcm9tIHRoZSBzdGF0aWMg
Y3JlYXRlIGZ1bmN0aW9uLgorICAgICAgICAgICAgQWRkIERlc3RydWN0b3IgcHJvdG90eXBlIGFu
ZCBhZGQgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSBtZW1iZXIuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKEdyYXBoaWNzU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1DcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUltcG9ydCk6CisgICAgICAg
ICAgICBJbnNlcnQgY3JlYXRpb24gb2YgR3JhcGhpY3NTdXJmYWNlIGluc3RhbmNlLgorICAgICAg
ICAgICAgVGhpcyBhbGxvd3MgaGF2aW5nIGEgcGxhdGZvcm0gc3BlY2lmaWMgY3JlYXRpb24gbWVj
aGFuaXNtCisgICAgICAgICAgICBmb3IgR0xYLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChPZmZTY3JlZW5Sb290V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6
Ok9mZlNjcmVlblJvb3RXaW5kb3c6Ok9mZlNjcmVlblJvb3RXaW5kb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6T2ZmU2NyZWVuUm9vdFdpbmRvdzo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZlNj
cmVlblJvb3RXaW5kb3c6On5PZmZTY3JlZW5Sb290V2luZG93KToKKyAgICAgICAgICAgIEFkZCBh
biBPZmZTY3JlZW5Sb290V2luZG93IHNpbmdlbHRvbiB0aGF0IGlzIGJlaW5nIHVzZWQKKyAgICAg
ICAgICAgIGFzIGEgcGFyZW50IGZvciBhbGwgbmF0aXZlIG9mZnNjcmVlbiB3aW5kb3dzLgorICAg
ICAgICAoV2ViQ29yZTo6cWdseEJ1aWxkU3BlYyk6CisgICAgICAgICAgICBBZGQgYSBjb252ZW5p
ZW5jZSBmdW5jdGlvbiBmb3IgYnVpbGRpbmcgdGhlIHNwZWNzIGZvcgorICAgICAgICAgICAgdGhl
IGNyZWF0aW9uIG9mIGdsWFBpeG1hcHMuCisgICAgICAgIChHcmFwaGljc1N1cmZhY2VQcml2YXRl
KToKKyAgICAgICAgICAgIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBtYW5hZ2UgYWxsIHRoZSBYIHJl
bGF0ZWQgcmVzb3VyY2VzCisgICAgICAgICAgICBzdWNoIGFzIG9wZW5pbmcgYSBkaXNwbGF5IG9y
IGNyZWF0aW5nIFhQaXhtYXBzIGV0Yy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFj
ZVByaXZhdGU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGUpOgorICAgICAgICAgICAgT3BlbiBhIGNv
bm5lY3Rpb24gdG8gdGhlIFggc2VydmVyIGFuZCBjcmVhdGUgYQorICAgICAgICAgICAgUU9wZW5H
TENvbnRleHQgdGhhdCBjYW4gYmUgdXNlZCB0byByZXNvbHZlIEdMIGZ1bmN0aW9ucy4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6On5HcmFwaGljc1N1cmZhY2VQcml2
YXRlKToKKyAgICAgICAgICAgIFByb3Blcmx5IGNsZWFudXAgYW5kIHJlbGVhc2UgYWxsIHRoZSBY
IHJlc291cmNlcyBhZ2Fpbi4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZh
dGU6OmNyZWF0ZVN1cmZhY2UpOgorICAgICAgICAgICAgQ3JlYXRlIGEgc3VyZmFjZSB0aGF0IGlz
IHBsYWNlZCBvZmYgc2NyZWVuIGFuZCBjYW4gYmUKKyAgICAgICAgICAgIHVzZWQgYXMgYSByZW5k
ZXJpbmcgdGFyZ2V0IGJ5IHRoZSBXZWJQcm9jZXNzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NTdXJmYWNlUHJpdmF0ZTo6Y3JlYXRlUGl4bWFwKToKKyAgICAgICAgICAgIENyZWF0ZSBhIEdM
WFBpeG1hcCBmcm9tIHRoZSBYV2luZG93IHRoYXQgd2FzIHByZXZpb3VzbHkKKyAgICAgICAgICAg
IHJlZGlyZWN0ZWQgYnkgdGhlIFdlYlByb2Nlc3MuIFRoaXMgR0xYUGl4bWFwIGNhbiB0aGVuIGJl
CisgICAgICAgICAgICBib3VuZCB0byBhIHRleHR1cmUgYW5kIGJlaW5nIHBhaW50ZWQgb24gc2Ny
ZWVuIGJ5IHRoZQorICAgICAgICAgICAgVUlQcm9jZXNzLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZTo6bWFrZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZTo6ZGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c1N1cmZhY2VQcml2YXRlOjpnbHhQaXhtYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NT
dXJmYWNlUHJpdmF0ZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQ
cml2YXRlOjpnbENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZUdMTWV0aG9kcyk6
CisgICAgICAgICAgICBJbml0aWFsaXplIGFsbCB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHRo
ZSBHTCBmdW5jdGlvbnMgdXNlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6
cGxhdGZvcm1FeHBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0
Zm9ybUdldFRleHR1cmVJRCk6CisgICAgICAgICAgICBCaW5kIHRoZSBHTFhQaXhtYXAgdG8gYSB0
ZXh0dXJlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlU
b0dMVGV4dHVyZSk6CisgICAgICAgICAgICBOb3QgYmVlaW5nIGltcGxlbWVudGVkIGZvciBHTFgu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29weUZyb21GcmFt
ZWJ1ZmZlcik6CisgICAgICAgICAgICBCbGl0IG9yaWdpbiBmYm8gb250byB0aGUgR3JhcGhpY3NT
dXJmYWNlJ3MgYmFja2luZy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxh
dGZvcm1DcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9y
bUltcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtTG9j
ayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtVW5sb2NrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1EZXN0cm95KToKKwog
MjAxMi0wNy0xMiAgSm9zaHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IEluZGV4ZWREQjogQVNTRVJUIGhpdCBjYWxsaW5nIG9wZW4gZnJvbSBjYWxsYmFjayBpbiBXb3Jr
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCmluZGV4IGZjNDJjMTEuLjJmNTE4ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtNDE3
OSw2ICs0MTc5LDkgQEAgY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV9HUkFQSElDU19TVVJGQUNF
PTEpIHsKICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMv
R3JhcGhpY3NTdXJmYWNlTWFjLmNwcAogICAgICAgICBJTkNMVURFUEFUSCArPSAvU3lzdGVtL0xp
YnJhcnkvRnJhbWV3b3Jrcy9Db3JlRm91bmRhdGlvbi5mcmFtZXdvcmsvSGVhZGVycwogICAgIH0K
KyAgICBjb250YWlucyhERUZJTkVTLCBIQVZFX1hDT01QT1NJVEU9MSkgIHsKKyAgICAgICAgU09V
UkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9xdC9HcmFwaGljc1N1cmZhY2VHTFgu
Y3BwCisgICAgfQogfQogCiAjIE1ha2Ugc3VyZSB0aGUgZGVyaXZlZCBzb3VyY2VzIGFyZSBidWls
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnByaQppbmRleCAzZWQ5OGMyLi5iMzk5YmMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQpAQCAt
OCw3ICs4LDcgQEAKIFNPVVJDRV9ESVIgPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9XZWJD
b3JlCiAKIFFUICo9IG5ldHdvcmsgc3FsCi1oYXZlUXQoNSk6IFFUICo9IGd1aS1wcml2YXRlCito
YXZlUXQoNSk6IFFUICo9IGNvcmUtcHJpdmF0ZSBndWktcHJpdmF0ZQogCiBXRUJDT1JFX0dFTkVS
QVRFRF9TT1VSQ0VTX0RJUiA9ICQke1JPT1RfQlVJTERfRElSfS9Tb3VyY2UvV2ViQ29yZS8kJHtH
RU5FUkFURURfU09VUkNFU19ERVNURElSfQogCkBAIC0yMDQsNiArMjA0LDcgQEAgY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1ZJREVPPTEpIHsKIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfM0Rf
R1JBUEhJQ1M9MSkgewogICAgIGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKTogTElCUyAr
PSAtbEVHTAogICAgIG1hYzogTElCUyArPSAtZnJhbWV3b3JrIElPU3VyZmFjZSAtZnJhbWV3b3Jr
IENvcmVGb3VuZGF0aW9uCisgICAgbGludXgtKjpjb250YWlucyhERUZJTkVTLCBIQVZFX1hDT01Q
T1NJVEU9MSk6IExJQlMgKz0gLWxYY29tcG9zaXRlCiAgICAgIyBPbmx5IFdlYktpdDEgbmVlZHMg
dGhlIG9wZW5nbCBtb2R1bGUsIHNvIGl0J3Mgb3B0aW9uYWwgZm9yIFF0NS4KICAgICBoYXZlUXQo
NCl8Y29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2wpOiBRVCAqPSBvcGVuZ2wKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3Vy
ZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFw
aGljc1N1cmZhY2UuY3BwCmluZGV4IDAxOGE4OWMuLjJiOGNkNjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NT
dXJmYWNlLmNwcApAQCAtMjcsMTggKzI3LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFz
c1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNvbnN0IElu
dFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCB1aW50MzJfdCB0b2tlbikKIHsKLSAgICBSZWZQdHI8
R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzU3VyZmFjZShz
aXplLCBmbGFncykpOwotICAgIGlmICghc3VyZmFjZS0+cGxhdGZvcm1JbXBvcnQodG9rZW4pKQot
ICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7Ci0gICAgcmV0dXJu
IHN1cmZhY2U7CisgICAgcmV0dXJuIHBsYXRmb3JtSW1wb3J0KHNpemUsIGZsYWdzLCB0b2tlbik7
CiB9CiAKIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGljc1N1cmZhY2U6OmNyZWF0
ZShjb25zdCBJbnRTaXplJiBzaXplLCBHcmFwaGljc1N1cmZhY2U6OkZsYWdzIGZsYWdzKQogewot
ICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFJlZihuZXcgR3JhcGhp
Y3NTdXJmYWNlKHNpemUsIGZsYWdzKSk7Ci0gICAgaWYgKCFzdXJmYWNlLT5wbGF0Zm9ybUNyZWF0
ZShzaXplLCBmbGFncykpCi0gICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFj
ZT4oKTsKLSAgICByZXR1cm4gc3VyZmFjZTsKKyAgICByZXR1cm4gcGxhdGZvcm1DcmVhdGUoc2l6
ZSwgZmxhZ3MpOwogfQogCiB1aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6OmV4cG9ydFRva2VuKCkK
QEAgLTcwLDEzICs2NCwxOSBAQCB2b2lkIEdyYXBoaWNzU3VyZmFjZTo6Y29weUZyb21GcmFtZWJ1
ZmZlcih1aW50MzJfdCBmYm8sIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlYwogfQogCiBHcmFwaGlj
c1N1cmZhY2U6OkdyYXBoaWNzU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFn
cykKLSAgICA6IG1fc2l6ZShzaXplKQotICAgICwgbV9mbGFncyhmbGFncykKKyAgICA6IG1fZmxh
Z3MoZmxhZ3MpCisgICAgLCBtX3NpemUoc2l6ZSkKICAgICAsIG1fcGxhdGZvcm1TdXJmYWNlKDAp
CiAgICAgLCBtX3RleHR1cmUoMCkKICAgICAsIG1fZmJvKDApCisgICAgLCBtX3ByaXZhdGUoMCkK
IHsKIH0KIAorR3JhcGhpY3NTdXJmYWNlOjp+R3JhcGhpY3NTdXJmYWNlKCkKK3sKKyAgICBwbGF0
Zm9ybURlc3Ryb3koKTsKK30KKwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5oCmluZGV4
IGZmNzFmY2QuLjdhZWVkNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5oCkBAIC0zMiwxMCArMzIs
MTQgQEAKICNpZiBPUyhEQVJXSU4pCiB0eXBlZGVmIHN0cnVjdCBfX0lPU3VyZmFjZSogSU9TdXJm
YWNlUmVmOwogdHlwZWRlZiBJT1N1cmZhY2VSZWYgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2U7Cisj
ZWxzZQordHlwZWRlZiB1aW50MzJfdCBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFjZTsKICNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlOwor
CiBjbGFzcyBHcmFwaGljc1N1cmZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHcmFwaGljc1N1cmZh
Y2U+IHsKIHB1YmxpYzoKICAgICBlbnVtIEZsYWcgewpAQCAtNjksMTAgKzczLDExIEBAIHB1Ymxp
YzoKICAgICB1aW50MzJfdCBnZXRUZXh0dXJlSUQoKTsKICAgICBQYXNzT3duUHRyPEdyYXBoaWNz
Q29udGV4dD4gYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiwgTG9ja09wdGlvbnMpOwogICAgIFBh
c3NSZWZQdHI8SW1hZ2U+IGNyZWF0ZVJlYWRPbmx5SW1hZ2UoY29uc3QgSW50UmVjdCYpOworICAg
IH5HcmFwaGljc1N1cmZhY2UoKTsKIAogcHJvdGVjdGVkOgotICAgIGJvb2wgcGxhdGZvcm1DcmVh
dGUoY29uc3QgSW50U2l6ZSYsIEZsYWdzKTsKLSAgICBib29sIHBsYXRmb3JtSW1wb3J0KHVpbnQz
Ml90KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHBsYXRmb3JtQ3Jl
YXRlKGNvbnN0IEludFNpemUmLCBGbGFncyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhp
Y3NTdXJmYWNlPiBwbGF0Zm9ybUltcG9ydChjb25zdCBJbnRTaXplJiwgRmxhZ3MsIHVpbnQzMl90
KTsKICAgICB1aW50MzJfdCBwbGF0Zm9ybUV4cG9ydCgpOwogICAgIHZvaWQgcGxhdGZvcm1EZXN0
cm95KCk7CiAKQEAgLTEwMCw2ICsxMDUsNyBAQCBwcml2YXRlOgogICAgIFBsYXRmb3JtR3JhcGhp
Y3NTdXJmYWNlIG1fcGxhdGZvcm1TdXJmYWNlOwogICAgIHVpbnQzMl90IG1fdGV4dHVyZTsKICAg
ICB1aW50MzJfdCBtX2ZibzsKKyAgICBHcmFwaGljc1N1cmZhY2VQcml2YXRlKiBtX3ByaXZhdGU7
CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9tYWMvR3JhcGhpY3NTdXJmYWNlTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL21hYy9HcmFwaGljc1N1cmZhY2VNYWMuY3BwCmluZGV4IDg0
MzEyZGUuLjcxMzFiODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL21hYy9HcmFwaGljc1N1cmZhY2VNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL21hYy9HcmFwaGljc1N1cmZhY2VNYWMuY3Bw
CkBAIC0zMCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IEdyYXBo
aWNzU3VyZmFjZVByaXZhdGUgeyB9OworCiB1aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6OnBsYXRm
b3JtRXhwb3J0KCkKIHsKICAgICByZXR1cm4gSU9TdXJmYWNlR2V0SUQobV9wbGF0Zm9ybVN1cmZh
Y2UpOwpAQCAtMTE4LDcgKzEyMCw3IEBAIHZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNv
cHlGcm9tRnJhbWVidWZmZXIodWludDMyX3Qgb3JpZ2luRmJvLCBjb25zdCBJbnRSCiAgICAgZ2xG
bHVzaCgpOwogfQogCi1ib29sIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1DcmVhdGUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCitQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4g
R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFn
cyBmbGFncykKIHsKICAgICB1bnNpZ25lZCBwaXhlbEZvcm1hdCA9ICdCR1JBJzsKICAgICB1bnNp
Z25lZCBieXRlc1BlckVsZW1lbnQgPSA0OwpAQCAtMTU0LDE0ICsxNTYsMjAgQEAgYm9vbCBHcmFw
aGljc1N1cmZhY2U6OnBsYXRmb3JtQ3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZs
YWdzKQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA3OyBpKyspCiAgICAgICAgIENGUmVs
ZWFzZSh2YWx1ZXNbaV0pOwogCi0gICAgbV9wbGF0Zm9ybVN1cmZhY2UgPSBJT1N1cmZhY2VDcmVh
dGUoZGljdCk7Ci0gICAgcmV0dXJuICEhbV9wbGF0Zm9ybVN1cmZhY2U7CisgICAgUmVmUHRyPEdy
YXBoaWNzU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc1N1cmZhY2Uoc2l6
ZSwgZmxhZ3MpKTsKKyAgICBzdXJmYWNlLT5tX3BsYXRmb3JtU3VyZmFjZSA9IElPU3VyZmFjZUNy
ZWF0ZShkaWN0KTsKKyAgICBpZiAoIXN1cmZhY2UtPm1fcGxhdGZvcm1TdXJmYWNlKQorICAgICAg
ICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CisgICAgcmV0dXJuIHN1cmZh
Y2U7CiB9CiAKLWJvb2wgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUltcG9ydCh1aW50MzJfdCB0
b2tlbikKK1Bhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGljc1N1cmZhY2U6OnBsYXRm
b3JtSW1wb3J0KGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCB1aW50MzJfdCB0b2tl
bikKIHsKLSAgICBtX3BsYXRmb3JtU3VyZmFjZSA9IElPU3VyZmFjZUxvb2t1cCh0b2tlbik7Ci0g
ICAgcmV0dXJuICEhbV9wbGF0Zm9ybVN1cmZhY2U7CisgICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFj
ZT4gc3VyZmFjZSA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc1N1cmZhY2Uoc2l6ZSwgZmxhZ3MpKTsK
KyAgICBzdXJmYWNlLT5tX3BsYXRmb3JtU3VyZmFjZSA9IElPU3VyZmFjZUxvb2t1cCh0b2tlbik7
CisgICAgaWYgKCFzdXJmYWNlLT5tX3BsYXRmb3JtU3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIFBh
c3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPigpOworICAgIHJldHVybiBzdXJmYWNlOwogfQogCiBz
dGF0aWMgaW50IGlvU3VyZmFjZUxvY2tPcHRpb25zKGludCBsb2NrT3B0aW9ucykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNz
U3VyZmFjZUdMWC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9xdC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjlkNTAwY2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9xdC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCkBAIC0wLDAgKzEs
MzM2IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5oIgorCisjaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCisKKy8vIFF0IGhlYWRlcnMgbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgZ2x4
IGhlYWRlcnMuCisjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KKyNpbmNsdWRlIDxRT3BlbkdM
Q29udGV4dD4KKyNpbmNsdWRlIDxRVmVjdG9yPgorI2luY2x1ZGUgPFFXaW5kb3c+CisjaW5jbHVk
ZSA8cXBhL3FwbGF0Zm9ybXdpbmRvdy5oPgorI2luY2x1ZGUgPEdML2dsZXh0Lmg+CisjaW5jbHVk
ZSA8R0wvZ2x4Lmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgorI2lu
Y2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5kZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgbG9uZyBYMTFPdmVycmlkZVJlZGlyZWN0ID0gMUwgPDwgOTsKKworc3RhdGljIFBG
TkdMWEJJTkRURVhJTUFHRUVYVFBST0MgcEdsWEJpbmRUZXhJbWFnZUVYVCA9IDA7CitzdGF0aWMg
UEZOR0xYUkVMRUFTRVRFWElNQUdFRVhUUFJPQyBwR2xYUmVsZWFzZVRleEltYWdlRVhUID0gMDsK
K3N0YXRpYyBQRk5HTEJJTkRGUkFNRUJVRkZFUlBST0MgcEdsQmluZEZyYW1lYnVmZmVyID0gMDsK
K3N0YXRpYyBQRk5HTEJMSVRGUkFNRUJVRkZFUlBST0MgcEdsQmxpdEZyYW1lYnVmZmVyID0gMDsK
KworY2xhc3MgT2ZmU2NyZWVuUm9vdFdpbmRvdyB7CitwdWJsaWM6CisgICAgT2ZmU2NyZWVuUm9v
dFdpbmRvdygpCisgICAgeworICAgICAgICArK3JlZkNvdW50OworICAgIH0KKworICAgIFFXaW5k
b3cqIGdldChEaXNwbGF5KiBkcHkpCisgICAgeworICAgICAgICBpZiAoIXdpbmRvdykgeworICAg
ICAgICAgICAgd2luZG93ID0gbmV3IFFXaW5kb3c7CisgICAgICAgICAgICB3aW5kb3ctPnNldEdl
b21ldHJ5KFFSZWN0KC0xLCAtMSwgMSwgMSkpOworICAgICAgICAgICAgd2luZG93LT5jcmVhdGUo
KTsKKyAgICAgICAgICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CisgICAgICAg
ICAgICBhdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIFhD
aGFuZ2VXaW5kb3dBdHRyaWJ1dGVzKGRweSwgd2luZG93LT5oYW5kbGUoKS0+d2luSWQoKSwgWDEx
T3ZlcnJpZGVSZWRpcmVjdCwgJmF0dHJpYnV0ZXMpOworICAgICAgICAgICAgd2luZG93LT5zaG93
KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHdpbmRvdzsKKyAgICB9CisKKyAgICB+T2Zm
U2NyZWVuUm9vdFdpbmRvdygpCisgICAgeworICAgICAgICBpZiAoIS0tcmVmQ291bnQpIHsKKyAg
ICAgICAgICAgIGRlbGV0ZSB3aW5kb3c7CisgICAgICAgICAgICB3aW5kb3cgPSAwOworICAgICAg
ICB9CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBpbnQgcmVmQ291bnQ7CisgICAgc3Rh
dGljIFFXaW5kb3cqIHdpbmRvdzsKK307CisKK2ludCBPZmZTY3JlZW5Sb290V2luZG93OjpyZWZD
b3VudCA9IDA7CitRV2luZG93KiBPZmZTY3JlZW5Sb290V2luZG93Ojp3aW5kb3cgPSAwOworCitz
dGF0aWMgUVZlY3RvcjxpbnQ+IHFnbHhCdWlsZFNwZWMoKQoreworICAgIFFWZWN0b3I8aW50PiBz
cGVjKDQ4KTsKKyAgICBpbnQgaSA9IDA7CisKKyAgICAvLyBUaGUgc3BlY2lmaWNhdGlvbiBpcyBh
IHNldCBrZXkgdmFsdWUgcGFpcnMgc3RvcmVkIGluIGEgc2ltcGxlIGFycmF5LgorICAgIHNwZWNb
aSsrXSA9IEdMWF9MRVZFTDsgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNbaSsrXSA9IDA7
CisgICAgc3BlY1tpKytdID0gR0xYX0RSQVdBQkxFX1RZUEU7ICAgICAgICAgICAgICAgICAgc3Bl
Y1tpKytdID0gR0xYX1BJWE1BUF9CSVQgfCBHTFhfV0lORE9XX0JJVDsKKyAgICBzcGVjW2krK10g
PSBHTFhfQklORF9UT19URVhUVVJFX1RBUkdFVFNfRVhUOyAgICBzcGVjW2krK10gPSBHTFhfVEVY
VFVSRV8yRF9CSVRfRVhUOworICAgIHNwZWNbaSsrXSA9IEdMWF9CSU5EX1RPX1RFWFRVUkVfUkdC
X0VYVDsgICAgICAgIHNwZWNbaSsrXSA9IFRSVUU7CisKKyAgICBzcGVjW2krK10gPSAwOworICAg
IHJldHVybiBzcGVjOworfQorCitzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CisgICAg
R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSgpCisgICAgICAgIDogbV9kaXNwbGF5KDApCisgICAgICAg
ICwgbV94UGl4bWFwKDApCisgICAgICAgICwgbV9nbHhQaXhtYXAoMCkKKyAgICAgICAgLCBtX2ds
Q29udGV4dChhZG9wdFB0cihuZXcgUU9wZW5HTENvbnRleHQpKQorICAgICAgICAsIG1fdGV4dHVy
ZUlzWUludmVydGVkKGZhbHNlKQorICAgICAgICAsIG1faGFzQWxwaGEoZmFsc2UpCisgICAgewor
ICAgICAgICBtX2Rpc3BsYXkgPSBYT3BlbkRpc3BsYXkoMCk7CisgICAgICAgIG1fZ2xDb250ZXh0
LT5jcmVhdGUoKTsKKyAgICB9CisKKyAgICB+R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSgpCisgICAg
eworICAgICAgICBpZiAobV9nbHhQaXhtYXApCisgICAgICAgICAgICBnbFhEZXN0cm95UGl4bWFw
KG1fZGlzcGxheSwgbV9nbHhQaXhtYXApOworICAgICAgICBtX2dseFBpeG1hcCA9IDA7CisKKyAg
ICAgICAgaWYgKG1feFBpeG1hcCkKKyAgICAgICAgICAgIFhGcmVlUGl4bWFwKG1fZGlzcGxheSwg
bV94UGl4bWFwKTsKKyAgICAgICAgbV94UGl4bWFwID0gMDsKKworICAgICAgICBpZiAobV9kaXNw
bGF5KQorICAgICAgICAgICAgWENsb3NlRGlzcGxheShtX2Rpc3BsYXkpOworICAgICAgICBtX2Rp
c3BsYXkgPSAwOworICAgIH0KKworICAgIHVpbnQzMl90IGNyZWF0ZVN1cmZhY2UoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fc3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBRV2lu
ZG93KG1fb2ZmU2NyZWVuV2luZG93LmdldChtX2Rpc3BsYXkpKSk7CisgICAgICAgIG1fc3VyZmFj
ZS0+c2V0U3VyZmFjZVR5cGUoUVN1cmZhY2U6Ok9wZW5HTFN1cmZhY2UpOworICAgICAgICBtX3N1
cmZhY2UtPnNldEdlb21ldHJ5KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Cisg
ICAgICAgIG1fc3VyZmFjZS0+Y3JlYXRlKCk7CisgICAgICAgIFhDb21wb3NpdGVSZWRpcmVjdFdp
bmRvdyhtX2Rpc3BsYXksIG1fc3VyZmFjZS0+aGFuZGxlKCktPndpbklkKCksIENvbXBvc2l0ZVJl
ZGlyZWN0TWFudWFsKTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIFhSZW5kZXIgRXh0ZW5z
aW9uIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgaW50IGV2ZW50QmFzZXAsIGVycm9yQmFzZXA7Cisg
ICAgICAgIGlmICghWFJlbmRlclF1ZXJ5RXh0ZW5zaW9uKG1fZGlzcGxheSwgJmV2ZW50QmFzZXAs
ICZlcnJvckJhc2VwKSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIG1fc3VyZmFj
ZS0+c2hvdygpOworCisgICAgICAgIHJldHVybiBtX3N1cmZhY2UtPmhhbmRsZSgpLT53aW5JZCgp
OworICAgIH0KKworICAgIHZvaWQgY3JlYXRlUGl4bWFwKHVpbnQzMl90IHdpbklkKQorICAgIHsK
KyAgICAgICAgWFdpbmRvd0F0dHJpYnV0ZXMgYXR0cjsKKyAgICAgICAgWEdldFdpbmRvd0F0dHJp
YnV0ZXMobV9kaXNwbGF5LCB3aW5JZCwgJmF0dHIpOworCisgICAgICAgIFhSZW5kZXJQaWN0Rm9y
bWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChtX2Rpc3BsYXksIGF0dHIudmlz
dWFsKTsKKyAgICAgICAgbV9oYXNBbHBoYSA9IChmb3JtYXQtPnR5cGUgPT0gUGljdFR5cGVEaXJl
Y3QgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrKTsKKyAgICAgICAgbV9zaXplID0gSW50U2l6
ZShhdHRyLndpZHRoLCBhdHRyLmhlaWdodCk7CisKKyAgICAgICAgUVZlY3RvcjxpbnQ+IGdseENv
bmZpZ1NwZWMgPSBxZ2x4QnVpbGRTcGVjKCk7CisgICAgICAgIGludCBudW1iZXJPZkNvbmZpZ3M7
CisgICAgICAgIEdMWEZCQ29uZmlnKiBjb25maWdzID0gZ2xYQ2hvb3NlRkJDb25maWcobV9kaXNw
bGF5LCBYRGVmYXVsdFNjcmVlbihtX2Rpc3BsYXkpLCBnbHhDb25maWdTcGVjLmNvbnN0RGF0YSgp
LCAmbnVtYmVyT2ZDb25maWdzKTsKKworICAgICAgICBtX3hQaXhtYXAgPSBYQ29tcG9zaXRlTmFt
ZVdpbmRvd1BpeG1hcChtX2Rpc3BsYXksIHdpbklkKTsKKworICAgICAgICBRVmVjdG9yPGludD4g
YXR0cmliTGlzdDsKKyAgICAgICAgYXR0cmliTGlzdC5hcHBlbmQoR0xYX1RFWFRVUkVfRk9STUFU
X0VYVCk7CisgICAgICAgIGF0dHJpYkxpc3QuYXBwZW5kKEdMWF9URVhUVVJFX0ZPUk1BVF9SR0Jf
RVhUKTsKKyAgICAgICAgYXR0cmliTGlzdC5hcHBlbmQoR0xYX1RFWFRVUkVfVEFSR0VUX0VYVCk7
CisgICAgICAgIGF0dHJpYkxpc3QuYXBwZW5kKEdMWF9URVhUVVJFXzJEX0VYVCk7CisgICAgICAg
IGF0dHJpYkxpc3QuYXBwZW5kKDApOworICAgICAgICBtX2dseFBpeG1hcCA9IGdsWENyZWF0ZVBp
eG1hcChtX2Rpc3BsYXksICpjb25maWdzLCBtX3hQaXhtYXAsIGF0dHJpYkxpc3QuY29uc3REYXRh
KCkpOworCisgICAgICAgIHVpbnQgaW52ZXJ0ZWQgPSAwOworICAgICAgICBnbFhRdWVyeURyYXdh
YmxlKG1fZGlzcGxheSwgbV9nbHhQaXhtYXAsIEdMWF9ZX0lOVkVSVEVEX0VYVCwgJmludmVydGVk
KTsKKyAgICAgICAgbV90ZXh0dXJlSXNZSW52ZXJ0ZWQgPSAhIWludmVydGVkOworCisgICAgICAg
IFhGcmVlKGNvbmZpZ3MpOworICAgIH0KKworICAgIHZvaWQgbWFrZUN1cnJlbnQoKQorICAgIHsK
KyAgICAgICAgUU9wZW5HTENvbnRleHQqIGdsQ29udGV4dCA9IFFPcGVuR0xDb250ZXh0OjpjdXJy
ZW50Q29udGV4dCgpOworICAgICAgICBpZiAobV9zdXJmYWNlICYmIGdsQ29udGV4dCkKKyAgICAg
ICAgICAgIGdsQ29udGV4dC0+bWFrZUN1cnJlbnQobV9zdXJmYWNlLmdldCgpKTsKKyAgICB9CisK
KyAgICB2b2lkIHN3YXBCdWZmZXJzKCkKKyAgICB7CisgICAgICAgIGlmICghbV9zdXJmYWNlLT5p
c1Zpc2libGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBDcmVhdGluZyBh
bmQgZXhwb3NpbmcgdGhlIHN1cmZhY2UgaXMgYXN5bmNocm9ub3VzLiBUaGVyZWZvcmUgd2UgaGF2
ZSB0byB3YWl0IGhlcmUKKyAgICAgICAgLy8gYmVmb3JlIHN3YXBwaW5nIHRoZSBidWZmZXJzLiBU
aGlzIHNob3VsZCBvbmx5IGJlIHRoZSBjYXNlIGZvciB0aGUgdmVyeSBmaXJzdCBmcmFtZS4KKyAg
ICAgICAgd2hpbGUgKCFtX3N1cmZhY2UtPmlzRXhwb3NlZCgpKQorICAgICAgICAgICAgUUNvcmVB
cHBsaWNhdGlvbjo6cHJvY2Vzc0V2ZW50cygpOworCisgICAgICAgIFFPcGVuR0xDb250ZXh0KiBn
bENvbnRleHQgPSBRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKTsKKyAgICAgICAgaWYg
KG1fc3VyZmFjZSAmJiBnbENvbnRleHQpCisgICAgICAgICAgICBnbENvbnRleHQtPnN3YXBCdWZm
ZXJzKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgfQorCisKKyAgICBEaXNwbGF5KiBkaXNwbGF5KCkg
Y29uc3QgeyByZXR1cm4gbV9kaXNwbGF5OyB9CisKKyAgICBHTFhQaXhtYXAgZ2x4UGl4bWFwKCkg
Y29uc3QgeyByZXR1cm4gbV9nbHhQaXhtYXA7IH0KKworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgUU9wZW5HTENvbnRleHQqIGdsQ29udGV4dCgpIHsg
cmV0dXJuIG1fZ2xDb250ZXh0LmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgT2ZmU2NyZWVuUm9v
dFdpbmRvdyBtX29mZlNjcmVlbldpbmRvdzsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBEaXNw
bGF5KiBtX2Rpc3BsYXk7CisgICAgUGl4bWFwIG1feFBpeG1hcDsKKyAgICBHTFhQaXhtYXAgbV9n
bHhQaXhtYXA7CisgICAgT3duUHRyPFFXaW5kb3c+IG1fc3VyZmFjZTsKKyAgICBPd25QdHI8UU9w
ZW5HTENvbnRleHQ+IG1fZ2xDb250ZXh0OworICAgIGJvb2wgbV90ZXh0dXJlSXNZSW52ZXJ0ZWQ7
CisgICAgYm9vbCBtX2hhc0FscGhhOworfTsKKworc3RhdGljIGJvb2wgcmVzb2x2ZUdMTWV0aG9k
cyhHcmFwaGljc1N1cmZhY2VQcml2YXRlKiBwKQoreworICAgIHN0YXRpYyBib29sIHJlc29sdmVk
ID0gZmFsc2U7CisgICAgaWYgKHJlc29sdmVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IFFPcGVuR0xDb250ZXh0KiBnbENvbnRleHQgPSBwLT5nbENvbnRleHQoKTsKKyAgICBwR2xYQmlu
ZFRleEltYWdlRVhUID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTFhCSU5EVEVYSU1BR0VFWFRQUk9D
PihnbENvbnRleHQtPmdldFByb2NBZGRyZXNzKCJnbFhCaW5kVGV4SW1hZ2VFWFQiKSk7CisgICAg
cEdsWFJlbGVhc2VUZXhJbWFnZUVYVCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xYUkVMRUFTRVRF
WElNQUdFRVhUUFJPQz4oZ2xDb250ZXh0LT5nZXRQcm9jQWRkcmVzcygiZ2xYUmVsZWFzZVRleElt
YWdlRVhUIikpOworICAgIHBHbEJpbmRGcmFtZWJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZO
R0xCSU5ERlJBTUVCVUZGRVJQUk9DPihnbENvbnRleHQtPmdldFByb2NBZGRyZXNzKCJnbEJpbmRG
cmFtZWJ1ZmZlciIpKTsKKyAgICBwR2xCbGl0RnJhbWVidWZmZXIgPSByZWludGVycHJldF9jYXN0
PFBGTkdMQkxJVEZSQU1FQlVGRkVSUFJPQz4oZ2xDb250ZXh0LT5nZXRQcm9jQWRkcmVzcygiZ2xC
bGl0RnJhbWVidWZmZXIiKSk7CisKKyAgICByZXNvbHZlZCA9IHBHbEJsaXRGcmFtZWJ1ZmZlciAm
JiBwR2xCaW5kRnJhbWVidWZmZXIgJiYgcEdsWEJpbmRUZXhJbWFnZUVYVCAmJiBwR2xYUmVsZWFz
ZVRleEltYWdlRVhUOworCisgICAgcmV0dXJuIHJlc29sdmVkOworfQorCit1aW50MzJfdCBHcmFw
aGljc1N1cmZhY2U6OnBsYXRmb3JtRXhwb3J0KCkKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybVN1
cmZhY2U7Cit9CisKK3VpbnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1HZXRUZXh0dXJl
SUQoKQoreworICAgIGlmICghbV90ZXh0dXJlKQorICAgICAgICBnbEdlblRleHR1cmVzKDEsICZt
X3RleHR1cmUpOworCisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUp
OworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4
UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9f
RURHRSk7CisgICAgcEdsWEJpbmRUZXhJbWFnZUVYVChtX3ByaXZhdGUtPmRpc3BsYXkoKSwgbV9w
cml2YXRlLT5nbHhQaXhtYXAoKSwgR0xYX0ZST05UX0VYVCwgMCk7CisKKyAgICByZXR1cm4gbV90
ZXh0dXJlOworfQorCit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Db3B5VG9HTFRleHR1
cmUodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBpZCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0
ZWQgYnkgR0xYL1hjb21wb3NpdGUuCit9CisKK3ZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9y
bUNvcHlGcm9tRnJhbWVidWZmZXIodWludDMyX3Qgb3JpZ2luRmJvLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0KQoreworICAgIG1fcHJpdmF0ZS0+bWFrZUN1cnJlbnQoKTsKKyAgICBpbnQgd2lk
dGggPSBtX3NpemUud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgpOwor
CisgICAgZ2xQdXNoQXR0cmliKEdMX0FMTF9BVFRSSUJfQklUUyk7CisgICAgR0xpbnQgb2xkRkJP
OworICAgIGdsR2V0SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJfQklORElORywgJm9sZEZCTyk7Cisg
ICAgcEdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJBTUVCVUZGRVIsIG9yaWdpbkZibyk7Cisg
ICAgcEdsQmluZEZyYW1lYnVmZmVyKEdMX0RSQVdfRlJBTUVCVUZGRVIsIG1fcHJpdmF0ZS0+Z2xD
b250ZXh0KCktPmRlZmF1bHRGcmFtZWJ1ZmZlck9iamVjdCgpKTsKKyAgICBwR2xCbGl0RnJhbWVi
dWZmZXIoMCwgMCwgd2lkdGgsIGhlaWdodCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgR0xfQ09MT1Jf
QlVGRkVSX0JJVCwgR0xfTElORUFSKTsKKyAgICBwR2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVC
VUZGRVIsIG9sZEZCTyk7CisgICAgZ2xQb3BBdHRyaWIoKTsKKworICAgIG1fcHJpdmF0ZS0+c3dh
cEJ1ZmZlcnMoKTsKK30KKworUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3Vy
ZmFjZTo6cGxhdGZvcm1DcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCit7
CisgICAgLy8gWDExIGRvZXMgbm90IHN1cHBvcnQgQ29weVRvVGV4dHVyZSwgc28gd2UgZG8gbm90
IGNyZWF0ZSBhIEdyYXBoaWNzU3VyZmFjZSBpZiB0aGlzIGlzIHJlcXVlc3RlZC4KKyAgICBpZiAo
ZmxhZ3MgJiBTdXBwb3J0c0NvcHlUb1RleHR1cmUpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRy
PEdyYXBoaWNzU3VyZmFjZT4oKTsKKworICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZh
Y2UgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NTdXJmYWNlKHNpemUsIGZsYWdzKSk7CisKKyAgICBz
dXJmYWNlLT5tX3ByaXZhdGUgPSBuZXcgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSgpOworICAgIGlm
ICghcmVzb2x2ZUdMTWV0aG9kcyhzdXJmYWNlLT5tX3ByaXZhdGUpKQorICAgICAgICByZXR1cm4g
UGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CisKKyAgICBzdXJmYWNlLT5tX3BsYXRmb3Jt
U3VyZmFjZSA9IHN1cmZhY2UtPm1fcHJpdmF0ZS0+Y3JlYXRlU3VyZmFjZShzaXplKTsKKworICAg
IHJldHVybiBzdXJmYWNlOworfQorCitQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gR3JhcGhp
Y3NTdXJmYWNlOjpwbGF0Zm9ybUltcG9ydChjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFn
cywgdWludDMyX3QgdG9rZW4pCit7CisgICAgLy8gWDExIGRvZXMgbm90IHN1cHBvcnQgQ29weVRv
VGV4dHVyZSwgc28gd2UgZG8gbm90IGNyZWF0ZSBhIEdyYXBoaWNzU3VyZmFjZSBpZiB0aGlzIGlz
IHJlcXVlc3RlZC4KKyAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0NvcHlUb1RleHR1cmUpCisgICAg
ICAgIHJldHVybiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsKKworICAgIFJlZlB0cjxH
cmFwaGljc1N1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NTdXJmYWNlKHNp
emUsIGZsYWdzKSk7CisKKyAgICBzdXJmYWNlLT5tX3ByaXZhdGUgPSBuZXcgR3JhcGhpY3NTdXJm
YWNlUHJpdmF0ZSgpOworICAgIGlmICghcmVzb2x2ZUdMTWV0aG9kcyhzdXJmYWNlLT5tX3ByaXZh
dGUpKQorICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CisKKyAg
ICBzdXJmYWNlLT5tX3BsYXRmb3JtU3VyZmFjZSA9IHRva2VuOworCisgICAgc3VyZmFjZS0+bV9w
cml2YXRlLT5jcmVhdGVQaXhtYXAoc3VyZmFjZS0+bV9wbGF0Zm9ybVN1cmZhY2UpOworICAgIHN1
cmZhY2UtPm1fc2l6ZSA9IHN1cmZhY2UtPm1fcHJpdmF0ZS0+c2l6ZSgpOworCisgICAgcmV0dXJu
IHN1cmZhY2U7Cit9CisKK2NoYXIqIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Mb2NrKGNvbnN0
IEludFJlY3QmIHJlY3QsIGludCogb3V0cHV0U3RyaWRlLCBMb2NrT3B0aW9ucyBsb2NrT3B0aW9u
cykKK3sKKyAgICAvLyBHcmFwaGljc1N1cmZhY2UgaXMgY3VycmVudGx5IG9ubHkgYmVpbmcgdXNl
ZCBmb3IgV2ViR0wsIHdoaWNoIGRvZXMgbm90IHJlcXVpcmUgdGhpcyBsb2NraW5nIG1lY2hhbmlz
bS4KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtVW5s
b2NrKCkKK3sKKyAgICAvLyBHcmFwaGljc1N1cmZhY2UgaXMgY3VycmVudGx5IG9ubHkgYmVpbmcg
dXNlZCBmb3IgV2ViR0wsIHdoaWNoIGRvZXMgbm90IHJlcXVpcmUgdGhpcyBsb2NraW5nIG1lY2hh
bmlzbS4KK30KKwordm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRGVzdHJveSgpCit7Cisg
ICAgaWYgKG1fdGV4dHVyZSkgeworICAgICAgICBwR2xYUmVsZWFzZVRleEltYWdlRVhUKG1fcHJp
dmF0ZS0+ZGlzcGxheSgpLCBtX3ByaXZhdGUtPmdseFBpeG1hcCgpLCBHTFhfRlJPTlRfRVhUKTsK
KyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICB9CisKKyAgICBk
ZWxldGUgbV9wcml2YXRlOworICAgIG1fcHJpdmF0ZSA9IDA7Cit9CisKK30KKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCmluZGV4IDhmZmRhYjEuLjNmYWEzNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAor
MjAxMi0wNy0xMiAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9yZz4KKworICAgICAgICBb
UXRdW1dLMl0gSW1wbGVtZW50IEdyYXBoaWNzU3VyZmFjZSBmb3IgTGludXgvR0xYLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA4ODEKKworICAgICAg
ICBBZGQgYSBHTFggYmFzZWQgR3JhcGhpY3NTdXJmYWNlIGltcGxlbWVudGF0aW9uIGZvciBMaW51
eC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNo
YXJlZC9TaGFyZWFibGVTdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlU3Vy
ZmFjZTo6Y3JlYXRlKToKKyAgICAgICAgICAgIE9ubHkgY3JlYXRlIGEgR3JhcGhpY3NTdXJmYWNl
IGZyb20gYSBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUKKyAgICAgICAgICAgIGluIGNhc2UgdGhl
IEhhbmRsZSBjb250YWlucyBhIHZhbGlkIEdyYXBoaWNzU3VyZmFjZSB0b2tlbi4KKyAgICAgICAg
ICAgIE90aGVyd2lzZSBmYWxsIGJhY2sgdG8gY3JlYXRpbmcgYSBTaGFyZWFibGVCaXRtYXAuCisg
ICAgICAgICogVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpjcmVhdGVMYXllclRpbGVVbmlxdWVLZXkpOgorICAgICAgICAgICAgQ3JlYXRl
IGEgdW5pcXVlIGtleSBmb3IgYSBzdXJmYWNlIGJhc2VkIG9uIHRpbGVJRCBhbmQgbGF5ZXJJRC4K
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVGlsZUZv
ckxheWVyKToKKyAgICAgICAgICAgIEV2ZW4gd2hlbiBHcmFwaGljc1N1cmZhY2UgaXMgZW5hYmxl
ZCwgbm90IGFsbCBTaGFyZWFibGVTdXJmYWNlcworICAgICAgICAgICAgd2lsbCBuZWNlc3Nhcmls
eSBiZSBiYWNrZWQgYnkgYSBHcmFwaGljc1N1cmZhY2UuIEluIGNhc2Ugb2YKKyAgICAgICAgICAg
IGEgU2hhcmVhYmxlU3VyZmFjZSBiZWluZyBiYWNrZWQgYnkgYSBTaGFyZWFibGVCaXRtYXAgaW5z
dGVhZCwKKyAgICAgICAgICAgIHRoZSBHcmFwaGljc1N1cmZhY2UgdG9rZW4gd2lsbCBhbHdheXMg
YmUgbnVsbC4KKyAgICAgICAgICAgIFNvIGluc3RlYWQgb2YgdXNpbmcgdGhlIEdyYXBoaWNzU3Vy
ZmFjZSB0b2tlbiBhcyBhIGtleSBmb3IKKyAgICAgICAgICAgIHN0b3Jpbmcgc3VyZmFjZXMgaW4g
YSBtYXAsIHdlIGNyZWF0ZSBhIHVuaXF1ZSBrZXkgZnJvbQorICAgICAgICAgICAgbGF5ZXJJRCBh
bmQgdGlsZUlELgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5
Lmg6CisgICAgICAgIChMYXllclRyZWVDb29yZGluYXRvclByb3h5KToKKwogMjAxMi0wNy0xMiAg
U3VkYXJzYW5hIE5hZ2luZW5pICA8c3VkYXJzYW5hLm5hZ2luZW5pQGxpbnV4LmludGVsLmNvbT4K
IAogICAgICAgICBbRUZMXVtXSzJdIEJyb3dzZXIgY3Jhc2hlcyBydW5uaW5nIEJhdHRlcnlTdGF0
dXMgdGVzdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlU3Vy
ZmFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5jcHAKaW5k
ZXggY2YxMGUxNi4uMmVmNWE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1No
YXJlYWJsZVN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVT
dXJmYWNlLmNwcApAQCAtMTQ5LDkgKzE0OSwxMSBAQCBTaGFyZWFibGVTdXJmYWNlOjp+U2hhcmVh
YmxlU3VyZmFjZSgpCiBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IFNoYXJlYWJsZVN1cmZh
Y2U6OmNyZWF0ZShjb25zdCBIYW5kbGUmIGhhbmRsZSkKIHsKICNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKKyAgICBpZiAoaGFuZGxlLmdyYXBoaWNzU3VyZmFjZVRva2VuKCkpIHsKICAgICAgICAg
UmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRl
KGhhbmRsZS5tX3NpemUsIGhhbmRsZS5tX2ZsYWdzLCBoYW5kbGUubV9ncmFwaGljc1N1cmZhY2VU
b2tlbik7CiAgICAgICAgIGlmIChzdXJmYWNlKQogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTaGFyZWFibGVTdXJmYWNlKGhhbmRsZS5tX3NpemUsIGhhbmRsZS5tX2ZsYWdzLCBQYXNz
UmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oc3VyZmFjZSkpKTsKKyAgICB9CiAjZW5kaWYKIAogICAg
IFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
KGhhbmRsZS5tX2JpdG1hcEhhbmRsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKaW5kZXggM2IwMjE0My4uZGFkOTA5
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29y
ZGluYXRvclByb3h5LmNwcApAQCAtNjEsMTUgKzYxLDI0IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBj
b25zCiAgICAgdXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwg
dXBkYXRlSW5mbyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgY3JlYXRlTGF5ZXJUaWxl
VW5pcXVlS2V5KGludCBsYXllcklELCBpbnQgdGlsZUlEKQoreworICAgIHVpbnQ2NF90IGtleSA9
IGxheWVySUQ7CisgICAga2V5IDw8PSAzMjsKKyAgICBrZXkgfD0gdGlsZUlEOworICAgIHJldHVy
biBrZXk7Cit9CisKIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVGlsZUZv
ckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0
LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQogewogICAgIFJl
ZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBzdXJmYWNlOwogI2lmIFVTRShHUkFQSElDU19TVVJGQUNF
KQotICAgIHVpbnQzMl90IHRva2VuID0gdXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlLmdyYXBoaWNz
U3VyZmFjZVRva2VuKCk7Ci0gICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPFNoYXJlYWJsZVN1
cmZhY2U+ID46Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlcy5maW5kKHRva2VuKTsKKyAgICB1aW50
NjRfdCBrZXkgPSBjcmVhdGVMYXllclRpbGVVbmlxdWVLZXkobGF5ZXJJRCwgdGlsZUlEKTsKKwor
ICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiA+OjppdGVyYXRv
ciBpdCA9IG1fc3VyZmFjZXMuZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBtX3N1cmZhY2VzLmVu
ZCgpKSB7CiAgICAgICAgIHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRl
SW5mby5zdXJmYWNlSGFuZGxlKTsKLSAgICAgICAgbV9zdXJmYWNlcy5hZGQodG9rZW4sIHN1cmZh
Y2UpOworICAgICAgICBtX3N1cmZhY2VzLmFkZChrZXksIHN1cmZhY2UpOwogICAgIH0gZWxzZQog
ICAgICAgICBzdXJmYWNlID0gaXQtPnNlY29uZDsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaAppbmRleCBiNGU3Yjdj
Li5jMGVkYjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRy
ZWVDb29yZGluYXRvclByb3h5LmgKQEAgLTc5LDcgKzc5LDcgQEAgcHJvdGVjdGVkOgogICAgIERy
YXdpbmdBcmVhUHJveHkqIG1fZHJhd2luZ0FyZWFQcm94eTsKICAgICBSZWZQdHI8V2ViTGF5ZXJU
cmVlUmVuZGVyZXI+IG1fcmVuZGVyZXI7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAg
SGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+ID4gbV9zdXJmYWNlczsK
KyAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gPiBtX3N1cmZh
Y2VzOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggMjM0NjVmZC4uZjllODFkZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTA3LTEyICBa
ZW5vIEFsYmlzc2VyICA8emVub0B3ZWJraXQub3JnPgorCisgICAgICAgIFtRdF1bV0syXSBJbXBs
ZW1lbnQgR3JhcGhpY3NTdXJmYWNlIGZvciBMaW51eC9HTFguCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MQorCisgICAgICAgIEVuYWJsZSBHcmFw
aGljc1N1cmZhY2UgZm9yIExpbnV4IGJhc2VkIHBsYXRmb3JtcworICAgICAgICB3aGVuZXZlciB0
aGUgWGNvbXBvc2l0ZSBleHRlbnNpb24gaXMgYXZhaWxhYmxlLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcW1ha2UvY29uZmlnLnRlc3RzL2xpYlhj
b21wb3NpdGUvbGliWGNvbXBvc2l0ZS5jcHA6IEFkZGVkLgorICAgICAgICAobWFpbik6CisgICAg
ICAgICogcW1ha2UvY29uZmlnLnRlc3RzL2xpYlhjb21wb3NpdGUvbGliWGNvbXBvc2l0ZS5wcm86
IEFkZGVkLgorICAgICAgICAgIEFkZCBhIGNvbmZpZ3VyZSB0ZXN0IHRvIGRldGVjdCBYY29tcG9z
aXRlIGV4dGVuc2lvbiBhbmQKKyAgICAgICAgICBhY3RpdmF0ZSBHcmFwaGljc1N1cmZhY2Ugb24g
bGludXggaW4gY2FzZSB0aGUgZXh0ZW5zaW9uIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgKiBxbWFr
ZS9jb25maWd1cmUucHJpOgorICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVy
ZXMucHJmOgorCiAyMDEyLTA3LTEyICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5v
a2lhLmNvbT4KIAogICAgICAgICBbUXRdIEludGVybmFsIHN5bWJvbHMgYXJlIGV4cG9ydGVkIG9u
IExpbnV4CmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvbGliWGNvbXBvc2l0
ZS9saWJYY29tcG9zaXRlLmNwcCBiL1Rvb2xzL3FtYWtlL2NvbmZpZy50ZXN0cy9saWJYY29tcG9z
aXRlL2xpYlhjb21wb3NpdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjEwZTEwNTQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9xbWFrZS9jb25maWcudGVzdHMvbGli
WGNvbXBvc2l0ZS9saWJYY29tcG9zaXRlLmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hjb21w
b3NpdGUuaD4KKworaW50IG1haW4oaW50LCBjaGFyKiopCit7CisgICAgRGlzcGxheSogZGlzcGxh
eSA9IFhPcGVuRGlzcGxheSgwKTsKKyAgICBpbnQgbWFqb3JWZXJzaW9uOworICAgIGludCBtaW5v
clZlcnNpb247CisgICAgKHZvaWQpWENvbXBvc2l0ZVF1ZXJ5VmVyc2lvbihkaXNwbGF5LCAmbWFq
b3JWZXJzaW9uLCAmbWlub3JWZXJzaW9uKTsKKyAgICBYQ2xvc2VEaXNwbGF5KGRpc3BsYXkpOwor
ICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvY29uZmlnLnRlc3RzL2xp
Ylhjb21wb3NpdGUvbGliWGNvbXBvc2l0ZS5wcm8gYi9Ub29scy9xbWFrZS9jb25maWcudGVzdHMv
bGliWGNvbXBvc2l0ZS9saWJYY29tcG9zaXRlLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45NmM1YzI5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvcW1ha2UvY29uZmln
LnRlc3RzL2xpYlhjb21wb3NpdGUvbGliWGNvbXBvc2l0ZS5wcm8KQEAgLTAsMCArMSwzIEBACitT
T1VSQ0VTID0gbGliWGNvbXBvc2l0ZS5jcHAKK09CSkVDVFNfRElSID0gb2JqCitMSUJTICs9IC1s
WGNvbXBvc2l0ZSAtbFgxMQpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvY29uZmlndXJlLnByaSBi
L1Rvb2xzL3FtYWtlL2NvbmZpZ3VyZS5wcmkKaW5kZXggOGMwMDlmZC4uNTc1ZGViOCAxMDA2NDQK
LS0tIGEvVG9vbHMvcW1ha2UvY29uZmlndXJlLnByaQorKysgYi9Ub29scy9xbWFrZS9jb25maWd1
cmUucHJpCkBAIC0xNSw2ICsxNSw3IEBAIGhhdmVRdCg1KTohcXVpY2tfY2hlY2sgewogICAgICAg
ICBsaWJwbmcgXAogICAgICAgICBsaWJqcGVnIFwKICAgICAgICAgbGlid2VicCBcCisgICAgICAg
IGxpYlhjb21wb3NpdGUgXAogICAgICAgICBsaWJ4bWwyIFwKICAgICAgICAgbGlieHNsdCBcCiAg
ICAgICAgIGxpYnpsaWIKZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMv
ZmVhdHVyZXMucHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYK
aW5kZXggMzI1YWVjYS4uYTdiMDA4NiAxMDA2NDQKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9m
ZWF0dXJlcy9mZWF0dXJlcy5wcmYKKysrIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9m
ZWF0dXJlcy5wcmYKQEAgLTE3MCw4ICsxNzAsMTYgQEAgaGF2ZVF0KDQpIHsKICAgICAjIGlzIGNh
bGxlZCBRbWxFbmdpbmUgYW5kIGl0IGlzIHNhZmUgZm9yIHVzIHRvIHVzZSBRUXVpY2sxIGFnYWlu
LgogfQogCisjIFhjb21wb3NpdGUgU3VwcG9ydAoraGF2ZVF0KDUpOmxpbnV4LSo6Y29uZmlnX2xp
Ylhjb21wb3NpdGU6IERFRklORVMgKz0gSEFWRV9YQ09NUE9TSVRFPTEKKworIyBTdXBwb3J0IGZv
ciBHcmFwaGljcyBTdXJmYWNlCiAhY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV9HUkFQSElDU19T
VVJGQUNFPS4pIHsKLSAgICBoYXZlUXQoNSk6bWFjOiBERUZJTkVTICs9IFdURl9VU0VfR1JBUEhJ
Q1NfU1VSRkFDRT0xCisgICAgaGF2ZVF0KDUpIHsKKyAgICAgICAgbWFjOiBERUZJTkVTICs9IFdU
Rl9VU0VfR1JBUEhJQ1NfU1VSRkFDRT0xCisgICAgICAgICMgT24gbGludXggd2UgcmVxdWlyZSBs
aWJYY29tcG9zaXRlIHRvIGVuYWJsZSBncmFwaGljcyBzdXJmYWNlLgorICAgICAgICBsaW51eC0q
OmNvbnRhaW5zKERFRklORVMsIEhBVkVfWENPTVBPU0lURT0xKTogREVGSU5FUyArPSBXVEZfVVNF
X0dSQVBISUNTX1NVUkZBQ0U9MQorICAgIH0KIH0KIAogIyAtLS0tLS0tLS0tLS0tLSBGaWxsIGlu
IHN0YXRpYyBkZWZhdWx0cyAtLS0tLS0tLS0tLS0tLQo=
</data>
<flag name="review"
          id="160558"
          type_id="1"
          status="+"
          setter="noam"
    />
          </attachment>
      

    </bug>

</bugzilla>