<?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>78674</bug_id>
          
          <creation_ts>2012-02-15 00:41:07 -0800</creation_ts>
          <short_desc>[Texmap] Better management of shaders in TextureMapperGL</short_desc>
          <delta_ts>2012-02-21 14:44:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Yael">yael</assigned_to>
          <cc>jturcotte</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>556988</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-15 00:41:07 -0800</bug_when>
    <thetext>Currently GL creates all the shaders right when it starts; Instead, it should generate the appropriate shader when it&apos;s requested, allowing for new shaders to be added efficiently, such as the shaders needed for CSS filters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559637</commentid>
    <comment_count>1</comment_count>
      <attachid>127673</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-02-17 16:23:58 -0800</bug_when>
    <thetext>Created attachment 127673
Patch

Split TextureMapperGL.cpp to 2 files.
Shader programs are created on demand instead of on startup.

This patch has one bogus style error, please ignore it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559709</commentid>
    <comment_count>2</comment_count>
      <attachid>127673</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-17 20:42:31 -0800</bug_when>
    <thetext>Comment on attachment 127673
Patch

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

Great progress! Still needs work.

&gt; Source/WebCore/GNUmakefile.list.am:5778
&gt; +        Source/WebCore/platform/graphics/opengl/TextureMapperShaderManager.cpp \
&gt; +        Source/WebCore/platform/graphics/opengl/TextureMapperShaderManager.h \
&gt; +        Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp \

I think they use tabs in this file and not spaces.

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperShaderManager.cpp:163
&gt; +#if !defined(TEXMAP_OPENGL_ES_2) &amp;&amp; !PLATFORM(QT) &amp;&amp; !PLATFORM(GTK)
&gt; +extern &quot;C&quot; {
&gt; +    void glUniform1f(GLint, GLfloat);
&gt; +    void glUniform1i(GLint, GLint);
&gt; +    void glVertexAttribPointer(GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid*);
&gt; +    void glUniform4f(GLint, GLfloat, GLfloat, GLfloat, GLfloat);
&gt; +    void glShaderSource(GLuint, GLsizei, const char**, const GLint*);
&gt; +    GLuint glCreateShader(GLenum);
&gt; +    void glShaderSource(GLuint, GLsizei, const char**, const GLint*);
&gt; +    void glCompileShader(GLuint);
&gt; +    void glDeleteShader(GLuint);
&gt; +    void glUniformMatrix4fv(GLint, GLsizei, GLboolean, const GLfloat*);
&gt; +    GLuint glCreateProgram();
&gt; +    void glAttachShader(GLuint, GLuint);
&gt; +    void glLinkProgram(GLuint);
&gt; +    void glUseProgram(GLuint);
&gt; +    void glDisableVertexAttribArray(GLuint);
&gt; +    void glEnableVertexAttribArray(GLuint);
&gt; +    void glBindFramebuffer(GLenum target, GLuint framebuffer);
&gt; +    void glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers);
&gt; +    void glGenFramebuffers(GLsizei n, GLuint* framebuffers);
&gt; +    void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
&gt; +    void glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params);
&gt; +    void glBindBuffer(GLenum, GLuint);
&gt; +    void glDeleteBuffers(GLsizei, const GLuint*);
&gt; +    void glGenBuffers(GLsizei, GLuint*);
&gt; +    void glBufferData(GLenum, GLsizeiptr, const GLvoid*, GLenum);
&gt; +    void glBufferSubData(GLenum, GLsizeiptr, GLsizeiptr, const GLvoid*);
&gt; +    void glGetProgramInfoLog(GLuint, GLsizei, GLsizei*, GLchar*);
&gt; +    void glGetShaderInfoLog(GLuint, GLsizei, GLsizei*, GLchar*);
&gt; +    void glGenRenderbuffers(GLsizei n, GLuint* ids);
&gt; +    void glDeleteRenderbuffers(GLsizei n, const GLuint* ids);
&gt; +    void glBindRenderbuffer(GLenum target, GLuint id);
&gt; +    void glRenderbufferStorage(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height);
&gt; +    void glFramebufferRenderbuffer(GLenum target, GLenum attachmentPoint, GLenum renderbufferTarget, GLuint renderbufferId);
&gt; +    GLenum glCheckFramebufferStatus(GLenum target);
&gt; +    GLint glGetAttribLocation(GLuint program, const GLchar* name);
&gt; +#if !OS(MAC_OS_X)
&gt; +    GLint glGetUniformLocation(GLuint, const GLchar*);
&gt; +    GLint glBindAttribLocation(GLuint, GLuint, const GLchar*);
&gt; +#endif
&gt; +}
&gt; +#endif

I think we don&apos;t use most of these in the shader-manager. Let&apos;s just keep the ones we use (though this only applies to the EFL port I think).

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperShaderManager.h:83
&gt; +    virtual const char** vertexShaderSource() = 0;
&gt; +    virtual const char** fragmentShaderSource() = 0;

Why not just return a const char*, and then pass a reference to the pointer?
const char* vSource = vertexShaderSource();
glCompileShader(shader, 1, &amp;vSource, &amp;length);

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperShaderManager.h:95
&gt; +    GLint inMatrixVariable() { return m_inMatrixVariable; }
&gt; +    GLint inSourceMatrixVariable() { return m_inSourceMatrixVariable; }

Let&apos;s get rid of the word &quot;in&quot; in the public getters; This is valid for the other classes as well of course.

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperGL.h:45
&gt;      virtual void drawTexture(uint32_t texture, bool opaque, const FloatSize&amp;, const FloatRect&amp;, const TransformationMatrix&amp;, float opacity, const BitmapTexture* maskTexture, bool flip);
&gt; +    virtual void drawTextureWithMaskAndOpacity(uint32_t texture, bool opaque, const FloatSize&amp;, const FloatRect&amp;, const TransformationMatrix&amp;, float opacity, const BitmapTexture* maskTexture, bool flip);
&gt; +    virtual void drawTextureSimple(uint32_t texture, bool opaque, const FloatSize&amp;, const FloatRect&amp;, const TransformationMatrix&amp;, float opacity, const BitmapTexture* maskTexture, bool flip);

While we&apos;re at it, let&apos;s change the booleans opaque &amp; flip to be enum-based flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560351</commentid>
    <comment_count>3</comment_count>
      <attachid>127848</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-02-20 14:09:28 -0800</bug_when>
    <thetext>Created attachment 127848
Patch

Address No&apos;am &apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560387</commentid>
    <comment_count>4</comment_count>
      <attachid>127848</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-20 14:56:35 -0800</bug_when>
    <thetext>Comment on attachment 127848
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Split ShaderMapperGL.cpp into two files.

You mean TextureMapperGL?

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperGL.h:49
&gt; +    enum TextureTransparency {
&gt; +        Opaque,
&gt; +        Transparent
&gt; +    };
&gt; +
&gt; +    enum Flip {
&gt; +        ShouldFlip,
&gt; +        NoFlip
&gt; +    };

Just make this into one enum called Flag with
0x01 = SupportsBlending,
0x02 = ShouldFlipTexture

and then pass it as an integer mask.

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperShaderManager.cpp:23
&gt; +#if USE(ACCELERATED_COMPOSITING)

&amp;&amp; USE(TEXTURE_MAPPER)

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperShaderManager.cpp:53
&gt; +const char* fragmentShaderSourceOpacityAndMask =

These should all be declared static, otherwise they take up symbols.

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperShaderManager.h:54
&gt; +inline static void debugGLCommand(const char* command, int line)
&gt; +{
&gt; +    const GLenum err = glGetError();
&gt; +    if (!err)
&gt; +        return;
&gt; +    WTFReportError(__FILE__, line, WTF_PRETTY_FUNCTION, &quot;[TextureMapper GL] Command failed: %s (%x)\n&quot;, command, err);
&gt; +    ASSERT_NOT_REACHED();
&gt; +}
&gt; +

I don&apos;t like this here. It should be inside TextureMapperGL.cpp, and we should simply not use GL_CMD from inside TextureMapperShaderManager.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapper.h:82
&gt; +    inline bool isOpaque() const { return m_flags ^ SupportsAlpha; }

^ ??</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560409</commentid>
    <comment_count>5</comment_count>
      <attachid>127848</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-20 15:22:12 -0800</bug_when>
    <thetext>Comment on attachment 127848
Patch

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

This looks like a nice change to me. I think that all the ports that use TextureMapper now use OpenGLShims, so it might be a good idea to just ditch those #ifdefs and dead code.

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperShaderManager.cpp:35
&gt; +#if PLATFORM(QT) || USE(CAIRO)
&gt; +#include &quot;OpenGLShims.h&quot;
&gt; +#elif defined(TEXMAP_OPENGL_ES_2)
&gt; +#include &lt;GLES2/gl2.h&gt;
&gt; +#include &lt;GLES2/gl2ext.h&gt;
&gt; +#elif OS(MAC_OS_X)
&gt; +#include &lt;gl.h&gt;
&gt; +#else
&gt; +#include &lt;GL/gl.h&gt;
&gt; +#endif
&gt; +

Aren&apos;t QT and Cairo are the only platforms using TextureMapper? Odds are that if the EFL port starts using htis they are going to want the OpenGLShims as well (since they use them for WebGL).

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperShaderManager.cpp:134
&gt; +#if !defined(TEXMAP_OPENGL_ES_2) &amp;&amp; !PLATFORM(QT) &amp;&amp; !PLATFORM(GTK)
&gt; +extern &quot;C&quot; {
&gt; +    void glShaderSource(GLuint, GLsizei, const char**, const GLint*);
&gt; +    void glCompileShader(GLuint);
&gt; +    void glDeleteShader(GLuint);
&gt; +    GLuint glCreateProgram();
&gt; +    void glAttachShader(GLuint, GLuint);
&gt; +    void glLinkProgram(GLuint);
&gt; +    GLint glGetAttribLocation(GLuint program, const GLchar* name);
&gt; +#if !OS(MAC_OS_X)
&gt; +    GLint glGetUniformLocation(GLuint, const GLchar*);
&gt; +#endif
&gt; +}
&gt; +#endif

Similar comment here. If neither Qt nor GTK+ is using this, it seems like dead code. Perhaps I&apos;m missing something here?

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperShaderManager.h:42
&gt; +#if PLATFORM(QT) || USE(CAIRO)
&gt; +#include &quot;OpenGLShims.h&quot;
&gt; +#elif defined(TEXMAP_OPENGL_ES_2)
&gt; +#include &lt;GLES2/gl2.h&gt;
&gt; +#include &lt;GLES2/gl2ext.h&gt;
&gt; +#elif OS(MAC_OS_X)
&gt; +#include &lt;gl.h&gt;
&gt; +#else
&gt; +#include &lt;GL/gl.h&gt;
&gt; +#endif

Ditto.

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperShaderManager.h:80
&gt; +    void getUniformLocation(GLint&amp; var, const char *name);

Your asterisk is in the wrong place here. I&apos;m suprrised the style bot did not catch this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560981</commentid>
    <comment_count>6</comment_count>
      <attachid>127991</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-02-21 10:01:14 -0800</bug_when>
    <thetext>Created attachment 127991
Patch.

Next round of review.
Addressed comments #4 and #5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561024</commentid>
    <comment_count>7</comment_count>
      <attachid>127991</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-21 10:51:53 -0800</bug_when>
    <thetext>Comment on attachment 127991
Patch.

The changes look good to me. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561031</commentid>
    <comment_count>8</comment_count>
      <attachid>127991</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-21 10:57:00 -0800</bug_when>
    <thetext>Comment on attachment 127991
Patch.

Looks good!
We might want to move the different paint functions into the shader-manager later on, but it can wait to a different patch.
Leaving the cq flag at ?, you can commit when you can track the bots etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561043</commentid>
    <comment_count>9</comment_count>
      <attachid>127991</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-02-21 11:03:36 -0800</bug_when>
    <thetext>Comment on attachment 127991
Patch.

Thanks for the review :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561237</commentid>
    <comment_count>10</comment_count>
      <attachid>127991</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-21 14:44:44 -0800</bug_when>
    <thetext>Comment on attachment 127991
Patch.

Clearing flags on attachment: 127991

Committed r108402: &lt;http://trac.webkit.org/changeset/108402&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561238</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-21 14:44:50 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127673</attachid>
            <date>2012-02-17 16:23:58 -0800</date>
            <delta_ts>2012-02-20 14:09:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>78674.patch</filename>
            <type>text/plain</type>
            <size>45898</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTA4MTI3KQorKysgU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMzk3MCw4ICszOTcwLDE0IEBACiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKIAog
ICAgICF3aW4zMi0qOmNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsKSB7Ci0gICAgICAgIEhFQURF
UlMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCi0gICAgICAg
IFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAK
KyAgICAgICAgSEVBREVSUyArPSBcCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvVGV4dHVyZU1hcHBlckdMLmggXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKKworICAgICAgICBTT1VSQ0VTICs9IFwK
KyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3Bw
IFwKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5jcHAKKwogICAgICAgICBDT05GSUcgKz0gb3BlbmdsLXNoaW1zCiAgICAgICAg
IERFRklORVMgKz0gV1RGX1VTRV9URVhUVVJFX01BUFBFUl9HTAogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTA4MTMzKQorKysgU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNTc3Myw3ICs1NzczLDkg
QEAKIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBcCisg
ICAgICAgIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5jcHAgXAorICAgICAgICBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBcCisgICAgICAgIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxMDgxMzYpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSw3NiBAQAorMjAxMi0wMi0xNyAgWWFlbCBBaGFyb24gIDx5YWVsLmFoYXJv
bkBub2tpYS5jb20+CisKKyAgICAgICAgW1RleG1hcF0gQmV0dGVyIG1hbmFnZW1lbnQgb2Ygc2hh
ZGVycyBpbiBUZXh0dXJlTWFwcGVyR0wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc4Njc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU3BsaXQgU2hhZGVyTWFwcGVyR0wuY3BwIGludG8gdHdvIGZpbGVzLgor
ICAgICAgICBHZXQgcmlkIG9mIHRoZSBlbnVtcyB0aGF0IHdlIHdlcmUgdXNpbmcgdG8gaWRlbnRp
Znkgc2hhZGVycyBhbmQgdG8gaWRlbnRpZnkgdmFyaWFibGVzLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cy4gVGhpcyBpcyByZWZhY3RvcmluZyBvbmx5LgorCisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjp+U2hhcmVkR0xEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlRleHR1cmVNYXBwZXJHTERh
dGEpOgorICAgICAgICAoVGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoTWFza0FuZE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVNpbXBsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oOgorICAgICAgICAoVGV4dHVyZU1hcHBlckdMKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RlJBR01FTlRfU0hBREVSKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjppbml0aWFsaXplUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0p
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBs
ZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OnZlcnRleFNoYWRlclNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6ZnJhZ21l
bnRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtT3BhY2l0eUFuZE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1PcGFjaXR5QW5kTWFzazo6dmVydGV4U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OmZyYWdtZW50
U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtQ2xpcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtQ2xpcDo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1DbGlwKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQ2xpcDo6dmVydGV4U2hhZGVyU291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQ2xpcDo6ZnJh
Z21lbnRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
ZGVidWdHTENvbW1hbmQpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp2ZXJ0ZXhBdHRyaWIpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OnNoYWRlclR5cGUp
OgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmluTWF0cml4VmFyaWFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6
OmluU291cmNlTWF0cml4VmFyaWFibGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1TaW1wbGU6OnNvdXJjZVRleHR1cmVWYXJpYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6b3BhY2l0eVZhcmlhYmxl
KToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFz
azo6aW5Tb3VyY2VNYXRyaXhWYXJpYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjppbk1hdHJpeFZhcmlhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6Omlu
TWFza01hdHJpeFZhcmlhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OnNvdXJjZVRleHR1cmVWYXJpYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjptYXNr
VGV4dHVyZVZhcmlhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtT3BhY2l0eUFuZE1hc2s6Om9wYWNpdHlWYXJpYWJsZSk6CisgICAgICAgIChUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1DbGlwOjppbk1hdHJpeFZhcmlhYmxlKToKKyAgICAgICAgKFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9ncmFtKToKKwogMjAxMi0wMi0xNyAgRGF2aWQgQmFydG9u
ICA8ZGJhcnRvbkBtYXRoc2NyaWJlLmNvbT4KIAogICAgICAgICBNYXRoTUwgaW50ZXJuYWxzIC0g
ZW1iZWxsaXNoZWQgb3BlcmF0b3JzLCBnZXRCYXNlKCkgYWNjZXNzb3IgZnVuY3Rpb25zCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4NiBAQAorLyoKKyBD
b3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIgorCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorCisjaWYgUExBVEZPUk0oUVQpIHx8IFVTRShDQUlSTykKKyNpbmNs
dWRlIDxjYWlyby9PcGVuR0xTaGltcy5oPgorI2VsaWYgZGVmaW5lZChURVhNQVBfT1BFTkdMX0VT
XzIpCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+Cisj
ZWxpZiBPUyhNQUNfT1NfWCkKKyNpbmNsdWRlIDxnbC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxHTC9n
bC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmbmRlZiBURVhNQVBfT1BF
TkdMX0VTXzIKKyNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMgXAorICAgICIjZGVm
aW5lIGxvd3BcbiNkZWZpbmUgaGlnaHBcbiIKKyNkZWZpbmUgT0VTMl9GUkFHTUVOVF9TSEFERVJf
REVGQVVMVF9QUkVDSVNJT04KKyNlbHNlCisjZGVmaW5lIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJ
T05TCisjZGVmaW5lIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OIFwKKyAg
ICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IFxuIgorI2VuZGlmCisKKyNkZWZpbmUgVkVSVEVY
X1NIQURFUihzcmMuLi4pIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TI3NyYworI2RlZmluZSBG
UkFHTUVOVF9TSEFERVIoc3JjLi4uKSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9OU1wKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9Q
UkVDSVNJT05cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzcmMKKworY29uc3Qg
Y2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CisgICAgRlJBR01FTlRf
U0hBREVSKAorICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBTb3VyY2VUZXh0dXJlLCBNYXNrVGV4
dHVyZTsKKyAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7CisgICAgICAgIHZhcnlp
bmcgaGlnaHAgdmVjMiBPdXRUZXhDb29yZFNvdXJjZSwgT3V0VGV4Q29vcmRNYXNrOworICAgICAg
ICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgeworICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9y
ID0gdGV4dHVyZTJEKFNvdXJjZVRleHR1cmUsIE91dFRleENvb3JkU291cmNlKTsKKyAgICAgICAg
ICAgIGxvd3AgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkQoTWFza1RleHR1cmUsIE91dFRleENv
b3JkTWFzayk7CisgICAgICAgICAgICBsb3dwIGZsb2F0IGZyYWdtZW50QWxwaGEgPSBPcGFjaXR5
ICogbWFza0NvbG9yLmE7CisgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJn
YiAqIGZyYWdtZW50QWxwaGEsIGNvbG9yLmEgKiBmcmFnbWVudEFscGhhKTsKKyAgICAgICAgfQor
ICAgICk7CisKK2NvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrID0K
KyAgICBWRVJURVhfU0hBREVSKAorICAgICAgICB1bmlmb3JtIG1hdDQgSW5NYXRyaXgsIEluU291
cmNlTWF0cml4LCBJbk1hc2tNYXRyaXg7CisgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IEluVmVydGV4
OworICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4Q29vcmRTb3VyY2UsIE91dFRleENv
b3JkTWFzazsKKyAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IE91dFRleENvb3JkU291cmNlID0gdmVjMihJblNvdXJjZU1hdHJpeCAqIEluVmVydGV4KTsKKyAg
ICAgICAgICAgIE91dFRleENvb3JkTWFzayA9IHZlYzIoSW5NYXNrTWF0cml4ICogSW5WZXJ0ZXgp
OworICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSBJbk1hdHJpeCAqIEluVmVydGV4OworICAgICAg
ICB9CisgICAgKTsKKworY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUgPQor
ICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgU291cmNlVGV4
dHVyZTsKKyAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7CisgICAgICAgIHZhcnlp
bmcgaGlnaHAgdmVjMiBPdXRUZXhDb29yZFNvdXJjZTsKKyAgICAgICAgdm9pZCBtYWluKHZvaWQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChTb3Vy
Y2VUZXh0dXJlLCBPdXRUZXhDb29yZFNvdXJjZSk7CisgICAgICAgICAgICBnbF9GcmFnQ29sb3Ig
PSB2ZWM0KGNvbG9yLnJnYiAqIE9wYWNpdHksIGNvbG9yLmEgKiBPcGFjaXR5KTsKKyAgICAgICAg
fQorICAgICk7CisKK2NvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSA9CisgICAg
VkVSVEVYX1NIQURFUigKKyAgICAgICAgdW5pZm9ybSBtYXQ0IEluTWF0cml4LCBJblNvdXJjZU1h
dHJpeDsKKyAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5WZXJ0ZXg7CisgICAgICAgIHZhcnlpbmcg
aGlnaHAgdmVjMiBPdXRUZXhDb29yZFNvdXJjZTsKKyAgICAgICAgdm9pZCBtYWluKHZvaWQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIE91dFRleENvb3JkU291cmNlID0gdmVjMihJblNvdXJjZU1h
dHJpeCAqIEluVmVydGV4KTsKKyAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gSW5NYXRyaXggKiBJ
blZlcnRleDsKKyAgICAgICAgfQorICAgICk7Citjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNv
dXJjZUNsaXAgPQorICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICAgICAgdm9pZCBtYWluKHZvaWQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAu
MCwgMC4wKTsKKyAgICAgICAgfQorICAgICk7CisKK2NvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNv
dXJjZUNsaXAgPQorICAgIFZFUlRFWF9TSEFERVIoCisgICAgICAgIHVuaWZvcm0gbWF0NCBJbk1h
dHJpeDsKKyAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5WZXJ0ZXg7CisgICAgICAgIHZvaWQgbWFp
bih2b2lkKQorICAgICAgICB7CisgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IEluTWF0cml4ICog
SW5WZXJ0ZXg7CisgICAgICAgIH0KKyAgICApOworCisjaWYgIWRlZmluZWQoVEVYTUFQX09QRU5H
TF9FU18yKSAmJiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShHVEspCitleHRlcm4gIkMiIHsK
KyAgICB2b2lkIGdsVW5pZm9ybTFmKEdMaW50LCBHTGZsb2F0KTsKKyAgICB2b2lkIGdsVW5pZm9y
bTFpKEdMaW50LCBHTGludCk7CisgICAgdm9pZCBnbFZlcnRleEF0dHJpYlBvaW50ZXIoR0x1aW50
LCBHTGludCwgR0xlbnVtLCBHTGJvb2xlYW4sIEdMc2l6ZWksIGNvbnN0IEdMdm9pZCopOworICAg
IHZvaWQgZ2xVbmlmb3JtNGYoR0xpbnQsIEdMZmxvYXQsIEdMZmxvYXQsIEdMZmxvYXQsIEdMZmxv
YXQpOworICAgIHZvaWQgZ2xTaGFkZXJTb3VyY2UoR0x1aW50LCBHTHNpemVpLCBjb25zdCBjaGFy
KiosIGNvbnN0IEdMaW50Kik7CisgICAgR0x1aW50IGdsQ3JlYXRlU2hhZGVyKEdMZW51bSk7Cisg
ICAgdm9pZCBnbFNoYWRlclNvdXJjZShHTHVpbnQsIEdMc2l6ZWksIGNvbnN0IGNoYXIqKiwgY29u
c3QgR0xpbnQqKTsKKyAgICB2b2lkIGdsQ29tcGlsZVNoYWRlcihHTHVpbnQpOworICAgIHZvaWQg
Z2xEZWxldGVTaGFkZXIoR0x1aW50KTsKKyAgICB2b2lkIGdsVW5pZm9ybU1hdHJpeDRmdihHTGlu
dCwgR0xzaXplaSwgR0xib29sZWFuLCBjb25zdCBHTGZsb2F0Kik7CisgICAgR0x1aW50IGdsQ3Jl
YXRlUHJvZ3JhbSgpOworICAgIHZvaWQgZ2xBdHRhY2hTaGFkZXIoR0x1aW50LCBHTHVpbnQpOwor
ICAgIHZvaWQgZ2xMaW5rUHJvZ3JhbShHTHVpbnQpOworICAgIHZvaWQgZ2xVc2VQcm9ncmFtKEdM
dWludCk7CisgICAgdm9pZCBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQpOworICAg
IHZvaWQgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQpOworICAgIHZvaWQgZ2xCaW5k
RnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwgR0x1aW50IGZyYW1lYnVmZmVyKTsKKyAgICB2b2lk
IGdsRGVsZXRlRnJhbWVidWZmZXJzKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBmcmFtZWJ1ZmZl
cnMpOworICAgIHZvaWQgZ2xHZW5GcmFtZWJ1ZmZlcnMoR0xzaXplaSBuLCBHTHVpbnQqIGZyYW1l
YnVmZmVycyk7CisgICAgdm9pZCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMZW51bSB0YXJnZXQs
IEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xp
bnQgbGV2ZWwpOworICAgIHZvaWQgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
dihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHBuYW1lLCBHTGludCog
cGFyYW1zKTsKKyAgICB2b2lkIGdsQmluZEJ1ZmZlcihHTGVudW0sIEdMdWludCk7CisgICAgdm9p
ZCBnbERlbGV0ZUJ1ZmZlcnMoR0xzaXplaSwgY29uc3QgR0x1aW50Kik7CisgICAgdm9pZCBnbEdl
bkJ1ZmZlcnMoR0xzaXplaSwgR0x1aW50Kik7CisgICAgdm9pZCBnbEJ1ZmZlckRhdGEoR0xlbnVt
LCBHTHNpemVpcHRyLCBjb25zdCBHTHZvaWQqLCBHTGVudW0pOworICAgIHZvaWQgZ2xCdWZmZXJT
dWJEYXRhKEdMZW51bSwgR0xzaXplaXB0ciwgR0xzaXplaXB0ciwgY29uc3QgR0x2b2lkKik7Cisg
ICAgdm9pZCBnbEdldFByb2dyYW1JbmZvTG9nKEdMdWludCwgR0xzaXplaSwgR0xzaXplaSosIEdM
Y2hhciopOworICAgIHZvaWQgZ2xHZXRTaGFkZXJJbmZvTG9nKEdMdWludCwgR0xzaXplaSwgR0xz
aXplaSosIEdMY2hhciopOworICAgIHZvaWQgZ2xHZW5SZW5kZXJidWZmZXJzKEdMc2l6ZWkgbiwg
R0x1aW50KiBpZHMpOworICAgIHZvaWQgZ2xEZWxldGVSZW5kZXJidWZmZXJzKEdMc2l6ZWkgbiwg
Y29uc3QgR0x1aW50KiBpZHMpOworICAgIHZvaWQgZ2xCaW5kUmVuZGVyYnVmZmVyKEdMZW51bSB0
YXJnZXQsIEdMdWludCBpZCk7CisgICAgdm9pZCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xlbnVt
IHRhcmdldCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCk7CisgICAgdm9pZCBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQs
IEdMZW51bSBhdHRhY2htZW50UG9pbnQsIEdMZW51bSByZW5kZXJidWZmZXJUYXJnZXQsIEdMdWlu
dCByZW5kZXJidWZmZXJJZCk7CisgICAgR0xlbnVtIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
TGVudW0gdGFyZ2V0KTsKKyAgICBHTGludCBnbEdldEF0dHJpYkxvY2F0aW9uKEdMdWludCBwcm9n
cmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpOworI2lmICFPUyhNQUNfT1NfWCkKKyAgICBHTGludCBn
bEdldFVuaWZvcm1Mb2NhdGlvbihHTHVpbnQsIGNvbnN0IEdMY2hhciopOworICAgIEdMaW50IGds
QmluZEF0dHJpYkxvY2F0aW9uKEdMdWludCwgR0x1aW50LCBjb25zdCBHTGNoYXIqKTsKKyNlbmRp
ZgorfQorI2VuZGlmCisKK3ZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmluaXRpYWxp
emVQcm9ncmFtKCkKK3sKKyAgICBHTHVpbnQgdmVydGV4U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIo
R0xfVkVSVEVYX1NIQURFUik7CisgICAgR0x1aW50IGZyYWdtZW50U2hhZGVyID0gZ2xDcmVhdGVT
aGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICBHTF9DTUQoZ2xTaGFkZXJTb3VyY2UodmVy
dGV4U2hhZGVyLCAxLCB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSwgMCkpCisgICAgR0xfQ01EKGdsU2hh
ZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCAxLCBmcmFnbWVudFNoYWRlclNvdXJjZSgpLCAwKSkK
KyAgICBHTHVpbnQgcHJvZ3JhbUlEID0gZ2xDcmVhdGVQcm9ncmFtKCk7CisgICAgR0xfQ01EKGds
Q29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpKQorICAgIEdMX0NNRChnbENvbXBpbGVTaGFkZXIo
ZnJhZ21lbnRTaGFkZXIpKQorICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZl
cnRleFNoYWRlcikpCisgICAgR0xfQ01EKGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21l
bnRTaGFkZXIpKQorICAgIEdMX0NNRChnbExpbmtQcm9ncmFtKHByb2dyYW1JRCkpCisKKyAgICBt
X3ZlcnRleEF0dHJpYiA9IGdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiSW5WZXJ0ZXgi
KTsKKyAgICBtX2lkID0gcHJvZ3JhbUlEOworICAgIG1fdmVydGV4U2hhZGVyID0gdmVydGV4U2hh
ZGVyOworICAgIG1fZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjsKK30KKwordm9pZCBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKEdMaW50ICZ2YXJp
YWJsZSwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICB2YXJpYWJsZSA9IGdsR2V0VW5pZm9ybUxv
Y2F0aW9uKG1faWQsIG5hbWUpOworICAgIEFTU0VSVCh2YXJpYWJsZSA+PSAwKTsKK30KKworVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpCit7
CisgICAgR0x1aW50IHByb2dyYW1JRCA9IG1faWQ7CisgICAgaWYgKCFwcm9ncmFtSUQpCisgICAg
ICAgIHJldHVybjsKKworICAgIEdMX0NNRChnbERldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fdmVy
dGV4U2hhZGVyKSkKKyAgICBHTF9DTUQoZ2xEZWxldGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpKQor
ICAgIEdMX0NNRChnbERldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fZnJhZ21lbnRTaGFkZXIpKQor
ICAgIEdMX0NNRChnbERlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKSkKKyAgICBHTF9DTUQo
Z2xEZWxldGVQcm9ncmFtKHByb2dyYW1JRCkpCit9CisKK1Bhc3NSZWZQdHI8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1TaW1wbGU+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpj
cmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1TaW1wbGUoKSk7Cit9CisKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpCit7CisgICAgaW5pdGlhbGl6ZVByb2dy
YW0oKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9pblNvdXJjZU1hdHJpeFZhcmlhYmxlLCAi
SW5Tb3VyY2VNYXRyaXgiKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9pbk1hdHJpeFZhcmlh
YmxlLCAiSW5NYXRyaXgiKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VUZXh0dXJl
VmFyaWFibGUsICJTb3VyY2VUZXh0dXJlIik7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3Bh
Y2l0eVZhcmlhYmxlLCAiT3BhY2l0eSIpOworfQorCitjb25zdCBjaGFyKiogVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1TaW1wbGU6OnZlcnRleFNoYWRlclNvdXJjZSgpCit7CisgICAgcmV0dXJu
ICZ2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGU7Cit9CisKK2NvbnN0IGNoYXIqKiBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6ZnJhZ21lbnRTaGFkZXJTb3VyY2UoKQoreworICAgIHJl
dHVybiAmZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGU7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKSk7Cit9CisKK1RleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtT3BhY2l0eUFuZE1hc2soKQoreworICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CisgICAg
Z2V0VW5pZm9ybUxvY2F0aW9uKG1faW5NYXRyaXhWYXJpYWJsZSwgIkluTWF0cml4Iik7CisgICAg
Z2V0VW5pZm9ybUxvY2F0aW9uKG1faW5Tb3VyY2VNYXRyaXhWYXJpYWJsZSwgIkluU291cmNlTWF0
cml4Iik7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1faW5NYXNrTWF0cml4VmFyaWFibGUsICJJ
bk1hc2tNYXRyaXgiKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VUZXh0dXJlVmFy
aWFibGUsICJTb3VyY2VUZXh0dXJlIik7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWFza1Rl
eHR1cmVWYXJpYWJsZSwgIk1hc2tUZXh0dXJlIik7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1f
b3BhY2l0eVZhcmlhYmxlLCAiT3BhY2l0eSIpOworfQorCitjb25zdCBjaGFyKiogVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6dmVydGV4U2hhZGVyU291cmNlKCkKK3sK
KyAgICByZXR1cm4gJnZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrOworfQorCitjb25z
dCBjaGFyKiogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6ZnJhZ21l
bnRTaGFkZXJTb3VyY2UoKQoreworICAgIHJldHVybiAmZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFj
aXR5QW5kTWFzazsKK30KKworUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUNs
aXA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQ2xpcDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQ2xpcCgpKTsKK30KKwor
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1DbGlwOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bUNsaXAoKQoreworICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CisgICAgZ2V0VW5pZm9ybUxvY2F0
aW9uKG1faW5NYXRyaXhWYXJpYWJsZSwgIkluTWF0cml4Iik7Cit9CisKK2NvbnN0IGNoYXIqKiBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXA6OnZlcnRleFNoYWRlclNvdXJjZSgpCit7Cisg
ICAgcmV0dXJuICZ2ZXJ0ZXhTaGFkZXJTb3VyY2VDbGlwOworfQorCitjb25zdCBjaGFyKiogVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1DbGlwOjpmcmFnbWVudFNoYWRlclNvdXJjZSgpCit7Cisg
ICAgcmV0dXJuICZmcmFnbWVudFNoYWRlclNvdXJjZUNsaXA7Cit9CisKK1RleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCit7CisgICAgQVNTRVJU
KGluaXRpYWxpemVPcGVuR0xTaGltcygpKTsKK30KKworVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6On5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCit7CisgICAgbV90ZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbU1hcC5jbGVhcigpOworfQorCit9OworCisjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0
dXJlTWFwcGVyR0wuY3BwCShyZXZpc2lvbiAxMDgxMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIgogI2lu
Y2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
T3duQXJyYXlQdHIuaD4KQEAgLTM1LDE3ICszNiw2IEBACiAjZW5kaWYKICNlbmRpZgogCi0jaWYg
UExBVEZPUk0oUVQpIHx8IFVTRShDQUlSTykKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2Vs
aWYgZGVmaW5lZChURVhNQVBfT1BFTkdMX0VTXzIpCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0j
aW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+Ci0jZWxpZiBPUyhNQUNfT1NfWCkKLSNpbmNsdWRlIDxn
bC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxHTC9nbC5oPgotI2VuZGlmCi0KICNpZiBkZWZpbmVkKFRF
WE1BUF9PUEVOR0xfRVNfMikKICNpbmNsdWRlIDxFR0wvZWdsLmg+CiAjZWxpZiBPUyhXSU5ET1dT
KQpAQCAtNjMsNjcgKzUzLDggQEAKICNpbmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAjZW5kaWYK
IAotI2lmICFkZWZpbmVkKFRFWE1BUF9PUEVOR0xfRVNfMikgJiYgIVBMQVRGT1JNKFFUKSAmJiAh
UExBVEZPUk0oR1RLKQotZXh0ZXJuICJDIiB7Ci0gICAgdm9pZCBnbFVuaWZvcm0xZihHTGludCwg
R0xmbG9hdCk7Ci0gICAgdm9pZCBnbFVuaWZvcm0xaShHTGludCwgR0xpbnQpOwotICAgIHZvaWQg
Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWludCwgR0xpbnQsIEdMZW51bSwgR0xib29sZWFuLCBH
THNpemVpLCBjb25zdCBHTHZvaWQqKTsKLSAgICB2b2lkIGdsVW5pZm9ybTRmKEdMaW50LCBHTGZs
b2F0LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0KTsKLSAgICB2b2lkIGdsU2hhZGVyU291cmNl
KEdMdWludCwgR0xzaXplaSwgY29uc3QgY2hhcioqLCBjb25zdCBHTGludCopOwotICAgIEdMdWlu
dCBnbENyZWF0ZVNoYWRlcihHTGVudW0pOwotICAgIHZvaWQgZ2xTaGFkZXJTb3VyY2UoR0x1aW50
LCBHTHNpemVpLCBjb25zdCBjaGFyKiosIGNvbnN0IEdMaW50Kik7Ci0gICAgdm9pZCBnbENvbXBp
bGVTaGFkZXIoR0x1aW50KTsKLSAgICB2b2lkIGdsRGVsZXRlU2hhZGVyKEdMdWludCk7Ci0gICAg
dm9pZCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQsIEdMc2l6ZWksIEdMYm9vbGVhbiwgY29uc3Qg
R0xmbG9hdCopOwotICAgIEdMdWludCBnbENyZWF0ZVByb2dyYW0oKTsKLSAgICB2b2lkIGdsQXR0
YWNoU2hhZGVyKEdMdWludCwgR0x1aW50KTsKLSAgICB2b2lkIGdsTGlua1Byb2dyYW0oR0x1aW50
KTsKLSAgICB2b2lkIGdsVXNlUHJvZ3JhbShHTHVpbnQpOwotICAgIHZvaWQgZ2xEaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkoR0x1aW50KTsKLSAgICB2b2lkIGdsRW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoR0x1aW50KTsKLSAgICB2b2lkIGdsQmluZEZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdM
dWludCBmcmFtZWJ1ZmZlcik7Ci0gICAgdm9pZCBnbERlbGV0ZUZyYW1lYnVmZmVycyhHTHNpemVp
IG4sIGNvbnN0IEdMdWludCogZnJhbWVidWZmZXJzKTsKLSAgICB2b2lkIGdsR2VuRnJhbWVidWZm
ZXJzKEdMc2l6ZWkgbiwgR0x1aW50KiBmcmFtZWJ1ZmZlcnMpOwotICAgIHZvaWQgZ2xGcmFtZWJ1
ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRl
eHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVsKTsKLSAgICB2b2lkIGdsR2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFj
aG1lbnQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7Ci0gICAgdm9pZCBnbEJpbmRCdWZm
ZXIoR0xlbnVtLCBHTHVpbnQpOwotICAgIHZvaWQgZ2xEZWxldGVCdWZmZXJzKEdMc2l6ZWksIGNv
bnN0IEdMdWludCopOwotICAgIHZvaWQgZ2xHZW5CdWZmZXJzKEdMc2l6ZWksIEdMdWludCopOwot
ICAgIHZvaWQgZ2xCdWZmZXJEYXRhKEdMZW51bSwgR0xzaXplaXB0ciwgY29uc3QgR0x2b2lkKiwg
R0xlbnVtKTsKLSAgICB2b2lkIGdsQnVmZmVyU3ViRGF0YShHTGVudW0sIEdMc2l6ZWlwdHIsIEdM
c2l6ZWlwdHIsIGNvbnN0IEdMdm9pZCopOwotICAgIHZvaWQgZ2xHZXRQcm9ncmFtSW5mb0xvZyhH
THVpbnQsIEdMc2l6ZWksIEdMc2l6ZWkqLCBHTGNoYXIqKTsKLSAgICB2b2lkIGdsR2V0U2hhZGVy
SW5mb0xvZyhHTHVpbnQsIEdMc2l6ZWksIEdMc2l6ZWkqLCBHTGNoYXIqKTsKLSAgICB2b2lkIGds
R2VuUmVuZGVyYnVmZmVycyhHTHNpemVpIG4sIEdMdWludCogaWRzKTsKLSAgICB2b2lkIGdsRGVs
ZXRlUmVuZGVyYnVmZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogaWRzKTsKLSAgICB2b2lk
IGdsQmluZFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaWQpOwotICAgIHZvaWQg
Z2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIHZvaWQgZ2xGcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudFBvaW50LCBHTGVu
dW0gcmVuZGVyYnVmZmVyVGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVySWQpOwotICAgIEdMZW51
bSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xlbnVtIHRhcmdldCk7Ci0gICAgR0xpbnQgZ2xH
ZXRBdHRyaWJMb2NhdGlvbihHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKTsKLSNp
ZiAhT1MoTUFDX09TX1gpCi0gICAgR0xpbnQgZ2xHZXRVbmlmb3JtTG9jYXRpb24oR0x1aW50LCBj
b25zdCBHTGNoYXIqKTsKLSAgICBHTGludCBnbEJpbmRBdHRyaWJMb2NhdGlvbihHTHVpbnQsIEdM
dWludCwgY29uc3QgR0xjaGFyKik7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWlubGluZSBzdGF0aWMgdm9pZCBkZWJ1Z0dMQ29tbWFuZChjb25zdCBjaGFyKiBj
b21tYW5kLCBpbnQgbGluZSkKLXsKLSAgICBjb25zdCBHTGVudW0gZXJyID0gZ2xHZXRFcnJvcigp
OwotICAgIGlmICghZXJyKQotICAgICAgICByZXR1cm47Ci0gICAgV1RGUmVwb3J0RXJyb3IoX19G
SUxFX18sIGxpbmUsIFdURl9QUkVUVFlfRlVOQ1RJT04sICJbVGV4dHVyZU1hcHBlciBHTF0gQ29t
bWFuZCBmYWlsZWQ6ICVzICgleClcbiIsIGNvbW1hbmQsIGVycik7Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi0jZGVmaW5lIEdMX0NNRCh4KSB7eCwgZGVi
dWdHTENvbW1hbmQoI3gsIF9fTElORV9fKTsgfQotI2Vsc2UKLSNkZWZpbmUgR0xfQ01EKHgpIHg7
Ci0jZW5kaWYKLQogc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgewogICAgIHN0cnVjdCBTaGFy
ZWRHTERhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRHTERhdGE+IHsKICNpZiBkZWZpbmVk
KFRFWE1BUF9PUEVOR0xfRVNfMikKQEAgLTE3OSw5MSArMTEwLDE4IEBACiAgICAgICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdMRGF0YShnZXRDdXJyZW50R0xDb250ZXh0KCkpKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGVudW0gU2hhZGVyUHJvZ3JhbUluZGV4IHsKLSAgICAgICAg
ICAgIE5vUHJvZ3JhbSA9IC0xLAotICAgICAgICAgICAgU2ltcGxlUHJvZ3JhbSwKLSAgICAgICAg
ICAgIE9wYWNpdHlBbmRNYXNrUHJvZ3JhbSwKLSAgICAgICAgICAgIENsaXBQcm9ncmFtLAotCi0g
ICAgICAgICAgICBQcm9ncmFtQ291bnQKLSAgICAgICAgfTsKLQotICAgICAgICBlbnVtIFNoYWRl
clZhcmlhYmxlSW5kZXggewotICAgICAgICAgICAgSW5NYXRyaXhWYXJpYWJsZSwKLSAgICAgICAg
ICAgIEluU291cmNlTWF0cml4VmFyaWFibGUsCi0gICAgICAgICAgICBJbk1hc2tNYXRyaXhWYXJp
YWJsZSwKLSAgICAgICAgICAgIE9wYWNpdHlWYXJpYWJsZSwKLSAgICAgICAgICAgIFNvdXJjZVRl
eHR1cmVWYXJpYWJsZSwKLSAgICAgICAgICAgIE1hc2tUZXh0dXJlVmFyaWFibGUsCi0KLSAgICAg
ICAgICAgIFZhcmlhYmxlQ291bnQKLSAgICAgICAgfTsKLQotICAgICAgICBzdHJ1Y3QgUHJvZ3Jh
bUluZm8gewotICAgICAgICAgICAgR0x1aW50IGlkOwotICAgICAgICAgICAgR0x1aW50IHZlcnRl
eEF0dHJpYjsKLSAgICAgICAgICAgIEdMaW50IHZhcnNbVmFyaWFibGVDb3VudF07Ci0gICAgICAg
ICAgICBHTHVpbnQgdmVydGV4U2hhZGVyOwotICAgICAgICAgICAgR0x1aW50IGZyYWdtZW50U2hh
ZGVyOwotICAgICAgICAgICAgUHJvZ3JhbUluZm8oKSA6IGlkKDApIHsgfQotICAgICAgICB9Owot
Ci0gICAgICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihTaGFkZXJQcm9ncmFtSW5kZXggcHJv
ZywgU2hhZGVyVmFyaWFibGVJbmRleCB2YXIsIGNvbnN0IGNoYXIqIG5hbWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBwcm9ncmFtc1twcm9nXS52YXJzW3Zhcl0gPSBnbEdldFVuaWZv
cm1Mb2NhdGlvbihwcm9ncmFtc1twcm9nXS5pZCwgbmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2b2lkIGNyZWF0ZVNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNl
LCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSwgU2hhZGVyUHJvZ3JhbUluZGV4IGlu
ZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBHTHVpbnQgdmVydGV4U2hhZGVyID0gZ2xDcmVh
dGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0gICAgICAgICAgICBHTHVpbnQgZnJhZ21lbnRT
aGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIpOwotICAgICAgICAgICAg
R0xfQ01EKGdsU2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgMSwgJnZlcnRleFNoYWRlclNvdXJj
ZSwgMCkpCi0gICAgICAgICAgICBHTF9DTUQoZ2xTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIs
IDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgMCkpCi0gICAgICAgICAgICBHTHVpbnQgcHJvZ3Jh
bUlEID0gZ2xDcmVhdGVQcm9ncmFtKCk7Ci0gICAgICAgICAgICBHTF9DTUQoZ2xDb21waWxlU2hh
ZGVyKHZlcnRleFNoYWRlcikpCi0gICAgICAgICAgICBHTF9DTUQoZ2xDb21waWxlU2hhZGVyKGZy
YWdtZW50U2hhZGVyKSkKLSAgICAgICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFt
SUQsIHZlcnRleFNoYWRlcikpCi0gICAgICAgICAgICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJv
Z3JhbUlELCBmcmFnbWVudFNoYWRlcikpCi0gICAgICAgICAgICBHTF9DTUQoZ2xMaW5rUHJvZ3Jh
bShwcm9ncmFtSUQpKQotICAgICAgICAgICAgcHJvZ3JhbXNbaW5kZXhdLnZlcnRleEF0dHJpYiA9
IGdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiSW5WZXJ0ZXgiKTsKLSAgICAgICAgICAg
IHByb2dyYW1zW2luZGV4XS5pZCA9IHByb2dyYW1JRDsKLSAgICAgICAgICAgIHByb2dyYW1zW2lu
ZGV4XS52ZXJ0ZXhTaGFkZXIgPSB2ZXJ0ZXhTaGFkZXI7Ci0gICAgICAgICAgICBwcm9ncmFtc1tp
bmRleF0uZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgZGVsZXRlU2hhZGVyUHJvZ3JhbShTaGFkZXJQcm9ncmFtSW5kZXggaW5kZXgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIFByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbyA9IHByb2dyYW1z
W2luZGV4XTsKLSAgICAgICAgICAgIEdMdWludCBwcm9ncmFtSUQgPSBwcm9ncmFtSW5mby5pZDsK
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbUlEKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICAgICAgR0xfQ01EKGdsRGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgcHJvZ3JhbUluZm8u
dmVydGV4U2hhZGVyKSkKLSAgICAgICAgICAgIEdMX0NNRChnbERlbGV0ZVNoYWRlcihwcm9ncmFt
SW5mby52ZXJ0ZXhTaGFkZXIpKQotICAgICAgICAgICAgR0xfQ01EKGdsRGV0YWNoU2hhZGVyKHBy
b2dyYW1JRCwgcHJvZ3JhbUluZm8uZnJhZ21lbnRTaGFkZXIpKQotICAgICAgICAgICAgR0xfQ01E
KGdsRGVsZXRlU2hhZGVyKHByb2dyYW1JbmZvLmZyYWdtZW50U2hhZGVyKSkKLSAgICAgICAgICAg
IEdMX0NNRChnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKSkKLSAgICAgICAgfQotCi0gICAgICAg
IHZvaWQgaW5pdGlhbGl6ZVNoYWRlcnMoKTsKLQotICAgICAgICBQcm9ncmFtSW5mbyBwcm9ncmFt
c1tQcm9ncmFtQ291bnRdOwotCiAgICAgICAgIGludCBzdGVuY2lsSW5kZXg7CiAgICAgICAgIFZl
Y3RvcjxJbnRSZWN0PiBjbGlwU3RhY2s7CisgICAgICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyIHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCiAgICAgICAgIFNoYXJlZEdMRGF0YShH
TENvbnRleHQgZ2xDb250ZXh0KQogICAgICAgICAgICAgOiBzdGVuY2lsSW5kZXgoMSkKICAgICAg
ICAgewogICAgICAgICAgICAgZ2xDb250ZXh0RGF0YU1hcCgpLmFkZChnbENvbnRleHQsIHRoaXMp
OwotICAgICAgICAgICAgaW5pdGlhbGl6ZVNoYWRlcnMoKTsKICAgICAgICAgfQogCiAgICAgICAg
IH5TaGFyZWRHTERhdGEoKQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gU2lt
cGxlUHJvZ3JhbTsgaSA8IFByb2dyYW1Db3VudDsgKytpKQotICAgICAgICAgICAgICAgIGRlbGV0
ZVNoYWRlclByb2dyYW0oU2hhZGVyUHJvZ3JhbUluZGV4KGkpKTsKLQogICAgICAgICAgICAgR0xD
b250ZXh0RGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZ2xDb250ZXh0RGF0YU1hcCgpLmVu
ZCgpOwogICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6aXRlcmF0b3IgaXQ7CiAgICAgICAg
ICAgICBmb3IgKGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewpAQCAtMjgzLDE0ICsxNDEsMTIgQEAKICAgICB9CiAKICAgICBUZXh0dXJlTWFwcGVyR0xE
YXRhKCkKLSAgICAgICAgOiBjdXJyZW50UHJvZ3JhbShTaGFyZWRHTERhdGE6Ok5vUHJvZ3JhbSkK
LSAgICAgICAgLCBwcmV2aW91c1Byb2dyYW0oMCkKKyAgICAgICAgOiBwcmV2aW91c1Byb2dyYW0o
MCkKICAgICAgICAgLCBwcmV2aW91c1NjaXNzb3JTdGF0ZSgwKQogICAgICAgICAsIG1fc2hhcmVk
R0xEYXRhKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdM
RGF0YSgpKQogICAgIHsgfQogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1h
dHJpeDsKLSAgICBpbnQgY3VycmVudFByb2dyYW07CiAgICAgR0xpbnQgcHJldmlvdXNQcm9ncmFt
OwogICAgIEdMaW50IHByZXZpb3VzU2Npc3NvclN0YXRlOwogICAgIEdMaW50IHZpZXdwb3J0WzRd
OwpAQCAtMzMzLDEyNyArMTg5LDEyIEBACiAgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJH
TDsKIH07CiAKLSNkZWZpbmUgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKHByb2csIHZh
cikgXAotICAgIGlmIChnZXRVbmlmb3JtTG9jYXRpb24ocHJvZyMjUHJvZ3JhbSwgdmFyIyNWYXJp
YWJsZSwgI3ZhcikgPCAwKSBcCi0gICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGZpbmQg
dmFyaWFibGUgIiN2YXIiIGluIHByb2dyYW0gIiNwcm9nIlxuIik7Ci0KLSNkZWZpbmUgVEVYTUFQ
X0JVSUxEX1NIQURFUihwcm9ncmFtKSBcCi0gICAgY3JlYXRlU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhT
aGFkZXJTb3VyY2UjI3Byb2dyYW0sIGZyYWdtZW50U2hhZGVyU291cmNlIyNwcm9ncmFtLCBwcm9n
cmFtIyNQcm9ncmFtKTsKLQogVGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0woKQogICAg
IDogbV9kYXRhKG5ldyBUZXh0dXJlTWFwcGVyR0xEYXRhKQogICAgICwgbV9jb250ZXh0KDApCiB7
CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjppbml0aWFsaXpl
U2hhZGVycygpCi17Ci0jaWZuZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotI2RlZmluZSBPRVMyX1BS
RUNJU0lPTl9ERUZJTklUSU9OUyBcCi0gICAgIiNkZWZpbmUgbG93cFxuI2RlZmluZSBoaWdocFxu
IgotI2RlZmluZSBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTgotI2Vsc2UK
LSNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMKLSNkZWZpbmUgT0VTMl9GUkFHTUVO
VF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT04gXAotICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDsgXG4iCi0jZW5kaWYKLQotI2RlZmluZSBWRVJURVhfU0hBREVSKHNyYy4uLikgT0VTMl9QUkVD
SVNJT05fREVGSU5JVElPTlMjc3JjCi0jZGVmaW5lIEZSQUdNRU5UX1NIQURFUihzcmMuLi4pIE9F
UzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTlwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgI3NyYwotCi0gICAgaWYgKCFpbml0aWFsaXplT3BlbkdMU2hpbXMo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2VPcGFjaXR5QW5kTWFzayA9Ci0gICAgICAgIEZSQUdNRU5UX1NIQURFUigKLSAgICAgICAgICAg
IHVuaWZvcm0gc2FtcGxlcjJEIFNvdXJjZVRleHR1cmUsIE1hc2tUZXh0dXJlOwotICAgICAgICAg
ICAgdW5pZm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7Ci0gICAgICAgICAgICB2YXJ5aW5nIGhpZ2hw
IHZlYzIgT3V0VGV4Q29vcmRTb3VyY2UsIE91dFRleENvb3JkTWFzazsKLSAgICAgICAgICAgIHZv
aWQgbWFpbih2b2lkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBj
b2xvciA9IHRleHR1cmUyRChTb3VyY2VUZXh0dXJlLCBPdXRUZXhDb29yZFNvdXJjZSk7Ci0gICAg
ICAgICAgICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRChNYXNrVGV4dHVyZSwg
T3V0VGV4Q29vcmRNYXNrKTsKLSAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IGZyYWdtZW50QWxw
aGEgPSBPcGFjaXR5ICogbWFza0NvbG9yLmE7Ci0gICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9y
ID0gdmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5hICogZnJhZ21lbnRBbHBo
YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhT
aGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9Ci0gICAgICAgIFZFUlRFWF9TSEFERVIoCi0gICAg
ICAgICAgICB1bmlmb3JtIG1hdDQgSW5NYXRyaXgsIEluU291cmNlTWF0cml4LCBJbk1hc2tNYXRy
aXg7Ci0gICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBJblZlcnRleDsKLSAgICAgICAgICAgIHZh
cnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhDb29yZFNvdXJjZSwgT3V0VGV4Q29vcmRNYXNrOwotICAg
ICAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
T3V0VGV4Q29vcmRTb3VyY2UgPSB2ZWMyKEluU291cmNlTWF0cml4ICogSW5WZXJ0ZXgpOwotICAg
ICAgICAgICAgICAgIE91dFRleENvb3JkTWFzayA9IHZlYzIoSW5NYXNrTWF0cml4ICogSW5WZXJ0
ZXgpOwotICAgICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gSW5NYXRyaXggKiBJblZlcnRleDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hh
ZGVyU291cmNlU2ltcGxlID0KLSAgICAgICAgRlJBR01FTlRfU0hBREVSKAotICAgICAgICAgICAg
dW5pZm9ybSBzYW1wbGVyMkQgU291cmNlVGV4dHVyZTsKLSAgICAgICAgICAgIHVuaWZvcm0gbG93
cCBmbG9hdCBPcGFjaXR5OwotICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRleENv
b3JkU291cmNlOwotICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKFNvdXJjZVRleHR1cmUs
IE91dFRleENvb3JkU291cmNlKTsKLSAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0
KGNvbG9yLnJnYiAqIE9wYWNpdHksIGNvbG9yLmEgKiBPcGFjaXR5KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgKTsKLQotICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSA9
Ci0gICAgICAgIFZFUlRFWF9TSEFERVIoCi0gICAgICAgICAgICB1bmlmb3JtIG1hdDQgSW5NYXRy
aXgsIEluU291cmNlTWF0cml4OwotICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5WZXJ0ZXg7
Ci0gICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4Q29vcmRTb3VyY2U7Ci0gICAg
ICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBP
dXRUZXhDb29yZFNvdXJjZSA9IHZlYzIoSW5Tb3VyY2VNYXRyaXggKiBJblZlcnRleCk7Ci0gICAg
ICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSBJbk1hdHJpeCAqIEluVmVydGV4OwotICAgICAgICAg
ICAgfQotICAgICAgICApOwotICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlQ2xp
cCA9Ci0gICAgICAgIEZSQUdNRU5UX1NIQURFUigKLSAgICAgICAgICAgIHZvaWQgbWFpbih2b2lk
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4w
LCAwLjAsIDAuMCwgMC4wKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIGNvbnN0
IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZUNsaXAgPQotICAgICAgICBWRVJURVhfU0hBREVSKAot
ICAgICAgICAgICAgdW5pZm9ybSBtYXQ0IEluTWF0cml4OwotICAgICAgICAgICAgYXR0cmlidXRl
IHZlYzQgSW5WZXJ0ZXg7Ci0gICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IEluTWF0cml4ICogSW5WZXJ0ZXg7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLQotICAgIFRFWE1BUF9CVUlMRF9TSEFERVIoU2lt
cGxlKQotICAgIFRFWE1BUF9CVUlMRF9TSEFERVIoT3BhY2l0eUFuZE1hc2spCi0gICAgVEVYTUFQ
X0JVSUxEX1NIQURFUihDbGlwKQotCi0gICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9O
KE9wYWNpdHlBbmRNYXNrLCBJbk1hdHJpeCkKLSAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9D
QVRJT04oT3BhY2l0eUFuZE1hc2ssIEluU291cmNlTWF0cml4KQotICAgIFRFWE1BUF9HRVRfU0hB
REVSX1ZBUl9MT0NBVElPTihPcGFjaXR5QW5kTWFzaywgSW5NYXNrTWF0cml4KQotICAgIFRFWE1B
UF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihPcGFjaXR5QW5kTWFzaywgU291cmNlVGV4dHVyZSkK
LSAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oT3BhY2l0eUFuZE1hc2ssIE1hc2tU
ZXh0dXJlKQotICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihPcGFjaXR5QW5kTWFz
aywgT3BhY2l0eSkKLQotICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihTaW1wbGUs
IEluU291cmNlTWF0cml4KQotICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihTaW1w
bGUsIEluTWF0cml4KQotICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihTaW1wbGUs
IFNvdXJjZVRleHR1cmUpCi0gICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFNpbXBs
ZSwgT3BhY2l0eSkKLQotICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihDbGlwLCBJ
bk1hdHJpeCkKLX0KLQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcoKQogewog
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG5vIEdMIGVycm9yIGNvZGUgc3RheXMgZnJvbSBwcmV2aW91
cyBvcGVyYXRpb25zLgpAQCAtNTEwLDIxICsyNTEsMjMgQEAKIAogdm9pZCBUZXh0dXJlTWFwcGVy
R0w6OmRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIGJvb2wgb3BhcXVlLCBjb25zdCBGbG9h
dFNpemUmIHJlbGF0aXZlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25z
dCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgYm9vbCBmbGlwKQogewotICAgIFRleHR1cmVN
YXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6U2hhZGVyUHJvZ3JhbUluZGV4IHByb2dyYW07CiAg
ICAgaWYgKG1hc2tUZXh0dXJlKQotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlckdMRGF0
YTo6U2hhcmVkR0xEYXRhOjpPcGFjaXR5QW5kTWFza1Byb2dyYW07CisgICAgICAgIGRyYXdUZXh0
dXJlV2l0aE1hc2tBbmRPcGFjaXR5KHRleHR1cmUsIG9wYXF1ZSwgcmVsYXRpdmVTaXplLCB0YXJn
ZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlLCBmbGlwKTsKICAg
ICBlbHNlCi0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERh
dGE6OlNpbXBsZVByb2dyYW07CisgICAgICAgIGRyYXdUZXh0dXJlU2ltcGxlKHRleHR1cmUsIG9w
YXF1ZSwgcmVsYXRpdmVTaXplLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHks
IG1hc2tUZXh0dXJlLCBmbGlwKTsKK30KIAotICAgIGNvbnN0IFRleHR1cmVNYXBwZXJHTERhdGE6
OlNoYXJlZEdMRGF0YTo6UHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvID0gZGF0YSgpLnNoYXJlZEdM
RGF0YSgpLnByb2dyYW1zW3Byb2dyYW1dOwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3Jh
bUluZm8uaWQpKQotICAgIGRhdGEoKS5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07Ci0gICAgR0xf
Q01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbUluZm8udmVydGV4QXR0cmliKSkK
K3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhNYXNrQW5kT3BhY2l0eSh1aW50
MzJfdCB0ZXh0dXJlLCBib29sIG9wYXF1ZSwgY29uc3QgRmxvYXRTaXplJiByZWxhdGl2ZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFz
a1RleHR1cmUsIGJvb2wgZmxpcCkKK3sKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWFzaz4gc2hhZGVySW5mbyA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s+KCk7CisKKyAgICBHTF9DTUQoZ2xVc2VQcm9ncmFt
KHNoYWRlckluZm8tPmlkKCkpKQorICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHNoYWRlckluZm8tPnZlcnRleEF0dHJpYigpKSkKICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJl
KEdMX1RFWFRVUkUwKSkKICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0
ZXh0dXJlKSkKICAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkpCiAg
ICAgY29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9Owot
ICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbUluZm8udmVydGV4QXR0cmli
LCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSkKKyAgICBHTF9DTUQoZ2xWZXJ0
ZXhBdHRyaWJQb2ludGVyKHNoYWRlckluZm8tPnZlcnRleEF0dHJpYigpLCAyLCBHTF9GTE9BVCwg
R0xfRkFMU0UsIDAsIHVuaXRSZWN0KSkKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJp
eCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KS5tdWx0aXBs
eShtb2RlbFZpZXdNYXRyaXgpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KAogICAgICAg
ICAgICAgdGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLApAQCAtNTQzLDEyICsyODYsMTIgQEAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGZsaXAgPyByZWxhdGl2ZVNpemUuaGVp
Z2h0KCkgOiAwLCAwLCAxfTsKIAotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3Jh
bUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OkluTWF0cml4VmFy
aWFibGVdLCAxLCBHTF9GQUxTRSwgbTQpKQotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYo
cHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OkluU291
cmNlTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTRzcmMpKQotICAgIEdMX0NNRChnbFVu
aWZvcm0xaShwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0
YTo6U291cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkpCi0gICAgR0xfQ01EKGdsVW5pZm9ybTFmKHBy
b2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpPcGFjaXR5
VmFyaWFibGVdLCBvcGFjaXR5KSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRl
ckluZm8tPmluTWF0cml4VmFyaWFibGUoKSwgMSwgR0xfRkFMU0UsIG00KSkKKyAgICBHTF9DTUQo
Z2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlckluZm8tPmluU291cmNlTWF0cml4VmFyaWFibGUoKSwg
MSwgR0xfRkFMU0UsIG00c3JjKSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWkoc2hhZGVySW5mby0+
c291cmNlVGV4dHVyZVZhcmlhYmxlKCksIDApKQorICAgIEdMX0NNRChnbFVuaWZvcm0xZihzaGFk
ZXJJbmZvLT5vcGFjaXR5VmFyaWFibGUoKSwgb3BhY2l0eSkpCiAKLSAgICBpZiAobWFza1RleHR1
cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSkgeworICAgIGlmIChtYXNrVGV4dHVyZS0+aXNW
YWxpZCgpKSB7CiAgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9
IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKICAgICAg
ICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSkpCiAgICAgICAgIEdMX0NNRChn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkpKQpAQCAtNTU2
LDEyICsyOTksNTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgbWFza1RleHR1cmVHTC0+cmVsYXRpdmVTaXplKCkuaGVpZ2h0KCksIDAsIDAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OwotICAgICAgICBHTF9D
TUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0
YTo6U2hhcmVkR0xEYXRhOjpJbk1hc2tNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNG1h
c2spKTsKLSAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVy
ZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpNYXNrVGV4dHVyZVZhcmlhYmxlXSwgMSkpCisg
ICAgICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVySW5mby0+aW5NYXNrTWF0cml4
VmFyaWFibGUoKSwgMSwgR0xfRkFMU0UsIG00bWFzaykpOworICAgICAgICBHTF9DTUQoZ2xVbmlm
b3JtMWkoc2hhZGVySW5mby0+bWFza1RleHR1cmVWYXJpYWJsZSgpLCAxKSkKICAgICAgICAgR0xf
Q01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCiAgICAgfQogCi0gICAgaWYgKG9wYXF1
ZSAmJiBvcGFjaXR5ID4gMC45OSAmJiAhbWFza1RleHR1cmUpCisgICAgR0xfQ01EKGdsQmxlbmRG
dW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSkpCisgICAgR0xfQ01EKGdsRW5hYmxl
KEdMX0JMRU5EKSkKKworICAgIEdMX0NNRChnbERpc2FibGUoR0xfREVQVEhfVEVTVCkpCisKKyAg
ICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpCisgICAgR0xfQ01E
KGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlckluZm8tPnZlcnRleEF0dHJpYigpKSkK
K30KKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlU2ltcGxlKHVpbnQzMl90IHRl
eHR1cmUsIGJvb2wgb3BhcXVlLCBjb25zdCBGbG9hdFNpemUmIHJlbGF0aXZlU2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxW
aWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVy
ZSwgYm9vbCBmbGlwKQoreworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNp
bXBsZT4gc2hhZGVySW5mbyA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlPigpOworCisgICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShzaGFkZXJJbmZvLT5pZCgpKSkKKyAg
ICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJJbmZvLT52ZXJ0ZXhBdHRy
aWIoKSkpCisgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCisgICAgR0xf
Q01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSkpCisgICAgR0xfQ01EKGds
QmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQorICAgIGNvbnN0IEdMZmxvYXQgdW5pdFJl
Y3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKKyAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRy
aWJQb2ludGVyKHNoYWRlckluZm8tPnZlcnRleEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xfRkFM
U0UsIDAsIHVuaXRSZWN0KSkKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRy
YW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KS5tdWx0aXBseShtb2Rl
bFZpZXdNYXRyaXgpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KAorICAgICAgICAgICAg
dGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLAorICAgICAgICAgICAgMCwgdGFyZ2V0UmVjdC5o
ZWlnaHQoKSwgMCwgMCwKKyAgICAgICAgICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICB0YXJn
ZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIDAsIDEpKTsKKworICAgIGNvbnN0IEdMZmxvYXQg
bTRbXSA9IHsKKyAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMTMo
KSwgbWF0cml4Lm0xNCgpLAorICAgICAgICBtYXRyaXgubTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0
cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCisgICAgICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0z
MigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKKyAgICAgICAgbWF0cml4Lm00MSgpLCBt
YXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgpCisgICAgfTsKKyAgICBjb25z
dCBHTGZsb2F0IG00c3JjW10gPSB7cmVsYXRpdmVTaXplLndpZHRoKCksIDAsIDAsIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcmVsYXRpdmVTaXplLmhlaWdodCgp
ICogKGZsaXAgPyAtMSA6IDEpLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgZmxpcCA/IHJlbGF0aXZlU2l6ZS5oZWlnaHQoKSA6IDAsIDAsIDF9OworCisgICAgR0xfQ01E
KGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXJJbmZvLT5pbk1hdHJpeFZhcmlhYmxlKCksIDEsIEdM
X0ZBTFNFLCBtNCkpCisgICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXJJbmZvLT5p
blNvdXJjZU1hdHJpeFZhcmlhYmxlKCksIDEsIEdMX0ZBTFNFLCBtNHNyYykpCisgICAgR0xfQ01E
KGdsVW5pZm9ybTFpKHNoYWRlckluZm8tPnNvdXJjZVRleHR1cmVWYXJpYWJsZSgpLCAwKSkKKyAg
ICBHTF9DTUQoZ2xVbmlmb3JtMWYoc2hhZGVySW5mby0+b3BhY2l0eVZhcmlhYmxlKCksIG9wYWNp
dHkpKQorCisgICAgaWYgKG9wYXF1ZSAmJiBvcGFjaXR5ID4gMC45OSkKICAgICAgICAgR0xfQ01E
KGdsRGlzYWJsZShHTF9CTEVORCkpCiAgICAgZWxzZSB7CiAgICAgICAgIEdMX0NNRChnbEJsZW5k
RnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKQpAQCAtNTcxLDcgKzM1Nyw3IEBA
CiAgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKSkKIAogICAgIEdMX0NNRChnbERy
YXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSkKLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkocHJvZ3JhbUluZm8udmVydGV4QXR0cmliKSkKKyAgICBHTF9DTUQoZ2xE
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVySW5mby0+dmVydGV4QXR0cmliKCkpKQogfQog
CiBjb25zdCBjaGFyKiBUZXh0dXJlTWFwcGVyR0w6OnR5cGUoKSBjb25zdApAQCAtODQ0LDEyICs2
MzAsMTMgQEAKIHsKICAgICBpZiAoYmVnaW5TY2lzc29yQ2xpcChtb2RlbFZpZXdNYXRyaXgsIHRh
cmdldFJlY3QpKQogICAgICAgICByZXR1cm47Ci0gICAgVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hh
cmVkR0xEYXRhOjpTaGFkZXJQcm9ncmFtSW5kZXggcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJHTERh
dGE6OlNoYXJlZEdMRGF0YTo6Q2xpcFByb2dyYW07Ci0gICAgY29uc3QgVGV4dHVyZU1hcHBlckdM
RGF0YTo6U2hhcmVkR0xEYXRhOjpQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8gPSBkYXRhKCkuc2hh
cmVkR0xEYXRhKCkucHJvZ3JhbXNbcHJvZ3JhbV07Ci0gICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShw
cm9ncmFtSW5mby5pZCkpCi0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJv
Z3JhbUluZm8udmVydGV4QXR0cmliKSkKKworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbUNsaXA+IHNoYWRlckluZm8gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbTxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbUNsaXA+KCk7CisKKyAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHNoYWRlckluZm8tPmlkKCkp
KQorICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlckluZm8tPnZlcnRl
eEF0dHJpYigpKSkKICAgICBjb25zdCBHTGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwg
MSwgMSwgMCwgMX07Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtSW5m
by52ZXJ0ZXhBdHRyaWIsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKQorICAg
IEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVySW5mby0+dmVydGV4QXR0cmliKCks
IDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKQogCiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25N
YXRyaXgpCiAgICAgICAgICAgICAubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KQpAQCAtODY3LDcg
KzY1NCw3IEBACiAKICAgICBpbnQmIHN0ZW5jaWxJbmRleCA9IGRhdGEoKS5zaGFyZWRHTERhdGEo
KS5zdGVuY2lsSW5kZXg7CiAKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1J
bmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpJbk1hdHJpeFZhcmlh
YmxlXSwgMSwgR0xfRkFMU0UsIG00KSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNo
YWRlckluZm8tPmluTWF0cml4VmFyaWFibGUoKSwgMSwgR0xfRkFMU0UsIG00KSkKICAgICBHTF9D
TUQoZ2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKSkKICAgICBHTF9DTUQoZ2xTdGVuY2lsRnVuYyhH
TF9ORVZFUiwgc3RlbmNpbEluZGV4LCBzdGVuY2lsSW5kZXgpKQogICAgIEdMX0NNRChnbFN0ZW5j
aWxPcChHTF9SRVBMQUNFLCBHTF9SRVBMQUNFLCBHTF9SRVBMQUNFKSkKQEAgLTg3Niw3ICs2NjMs
NyBAQAogICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9LRUVQLCBHTF9LRUVQKSkK
ICAgICBzdGVuY2lsSW5kZXggPDw9IDE7CiAgICAgZ2xTdGVuY2lsRnVuYyhzdGVuY2lsSW5kZXgg
PiAxID8gR0xfRVFVQUwgOiBHTF9BTFdBWVMsIHN0ZW5jaWxJbmRleCAtIDEsIHN0ZW5jaWxJbmRl
eCAtIDEpOwotICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtSW5m
by52ZXJ0ZXhBdHRyaWIpKQorICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShz
aGFkZXJJbmZvLT52ZXJ0ZXhBdHRyaWIoKSkpCiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpl
bmRDbGlwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9U
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcxIEBA
CisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcl9oCisjZGVmaW5lIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
X2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkZsb2F0
UXVhZC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgi
CisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorCisjaWYgUExBVEZPUk0oUVQpIHx8IFVTRShDQUlSTykKKyNpbmNsdWRlICJPcGVuR0xTaGlt
cy5oIgorI2VsaWYgZGVmaW5lZChURVhNQVBfT1BFTkdMX0VTXzIpCisjaW5jbHVkZSA8R0xFUzIv
Z2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisjZWxpZiBPUyhNQUNfT1NfWCkKKyNp
bmNsdWRlIDxnbC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxHTC9nbC5oPgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworaW5saW5lIHN0YXRpYyB2b2lkIGRlYnVnR0xDb21tYW5kKGNvbnN0
IGNoYXIqIGNvbW1hbmQsIGludCBsaW5lKQoreworICAgIGNvbnN0IEdMZW51bSBlcnIgPSBnbEdl
dEVycm9yKCk7CisgICAgaWYgKCFlcnIpCisgICAgICAgIHJldHVybjsKKyAgICBXVEZSZXBvcnRF
cnJvcihfX0ZJTEVfXywgbGluZSwgV1RGX1BSRVRUWV9GVU5DVElPTiwgIltUZXh0dXJlTWFwcGVy
IEdMXSBDb21tYW5kIGZhaWxlZDogJXMgKCV4KVxuIiwgY29tbWFuZCwgZXJyKTsKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKworI2lmbmRlZiBOREVCVUcKKyNkZWZpbmUgR0xfQ01EKHgp
IHt4LCBkZWJ1Z0dMQ29tbWFuZCgjeCwgX19MSU5FX18pOyB9CisjZWxzZQorI2RlZmluZSBHTF9D
TUQoeCkgeDsKKyNlbmRpZgorCit0eXBlZGVmIHZvaWQqIFNoYWRlclR5cGU7CisKK2NsYXNzIFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOworCitjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiB7Citw
dWJsaWM6CisgICAgR0x1aW50IGlkKCkgeyByZXR1cm4gbV9pZDsgfQorICAgIEdMdWludCB2ZXJ0
ZXhBdHRyaWIoKSB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQorCisgICAgdmlydHVhbCB+VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKTsKKworICAgIHRlbXBsYXRlPGNsYXNzIFQ+CisgICAg
c3RhdGljIFNoYWRlclR5cGUgc2hhZGVyVHlwZSgpCisgICAgeworICAgICAgICBzdGF0aWMgaW50
IHR5cGUgPSAwOworICAgICAgICByZXR1cm4gJnR5cGU7CisgICAgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBnZXRVbmlmb3JtTG9jYXRpb24oR0xpbnQmIHZhciwgY29uc3QgY2hhciAqbmFtZSk7
CisgICAgdm9pZCBpbml0aWFsaXplUHJvZ3JhbSgpOworICAgIHZpcnR1YWwgY29uc3QgY2hhcioq
IHZlcnRleFNoYWRlclNvdXJjZSgpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqKiBmcmFn
bWVudFNoYWRlclNvdXJjZSgpID0gMDsKKworICAgIEdMdWludCBtX2lkOworICAgIEdMdWludCBt
X3ZlcnRleEF0dHJpYjsKKyAgICBHTHVpbnQgbV92ZXJ0ZXhTaGFkZXI7CisgICAgR0x1aW50IG1f
ZnJhZ21lbnRTaGFkZXI7Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNp
bXBsZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU+IGNyZWF0
ZSgpOworICAgIEdMaW50IGluTWF0cml4VmFyaWFibGUoKSB7IHJldHVybiBtX2luTWF0cml4VmFy
aWFibGU7IH0KKyAgICBHTGludCBpblNvdXJjZU1hdHJpeFZhcmlhYmxlKCkgeyByZXR1cm4gbV9p
blNvdXJjZU1hdHJpeFZhcmlhYmxlOyB9CisgICAgR0xpbnQgc291cmNlVGV4dHVyZVZhcmlhYmxl
KCkgeyByZXR1cm4gbV9zb3VyY2VUZXh0dXJlVmFyaWFibGU7IH0KKyAgICBHTGludCBvcGFjaXR5
VmFyaWFibGUoKSB7IHJldHVybiBtX29wYWNpdHlWYXJpYWJsZTsgfQorCitwcml2YXRlOgorICAg
IHZpcnR1YWwgY29uc3QgY2hhcioqIHZlcnRleFNoYWRlclNvdXJjZSgpOworICAgIHZpcnR1YWwg
Y29uc3QgY2hhcioqIGZyYWdtZW50U2hhZGVyU291cmNlKCk7CisgICAgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1TaW1wbGUoKTsKKyAgICBHTGludCBtX2luTWF0cml4VmFyaWFibGU7CisgICAg
R0xpbnQgbV9pblNvdXJjZU1hdHJpeFZhcmlhYmxlOworICAgIEdMaW50IG1fc291cmNlVGV4dHVy
ZVZhcmlhYmxlOworICAgIEdMaW50IG1fb3BhY2l0eVZhcmlhYmxlOworfTsKKworY2xhc3MgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRlKCk7CisgICAgR0xpbnQg
aW5Tb3VyY2VNYXRyaXhWYXJpYWJsZSgpIHsgcmV0dXJuIG1faW5Tb3VyY2VNYXRyaXhWYXJpYWJs
ZTsgfQorICAgIEdMaW50IGluTWF0cml4VmFyaWFibGUoKSB7IHJldHVybiBtX2luTWF0cml4VmFy
aWFibGU7IH0KKyAgICBHTGludCBpbk1hc2tNYXRyaXhWYXJpYWJsZSgpIHsgcmV0dXJuIG1faW5N
YXNrTWF0cml4VmFyaWFibGU7IH0KKyAgICBHTGludCBzb3VyY2VUZXh0dXJlVmFyaWFibGUoKSB7
IHJldHVybiBtX3NvdXJjZVRleHR1cmVWYXJpYWJsZTsgfQorICAgIEdMaW50IG1hc2tUZXh0dXJl
VmFyaWFibGUoKSB7IHJldHVybiBtX21hc2tUZXh0dXJlVmFyaWFibGU7IH0KKyAgICBHTGludCBv
cGFjaXR5VmFyaWFibGUoKSB7IHJldHVybiBtX29wYWNpdHlWYXJpYWJsZTsgfQorCitwcml2YXRl
OgorICAgIHN0YXRpYyBpbnQgbV9jbGFzc0lEOworICAgIHZpcnR1YWwgY29uc3QgY2hhcioqIHZl
cnRleFNoYWRlclNvdXJjZSgpOworICAgIHZpcnR1YWwgY29uc3QgY2hhcioqIGZyYWdtZW50U2hh
ZGVyU291cmNlKCk7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFz
aygpOworICAgIEdMaW50IG1faW5Tb3VyY2VNYXRyaXhWYXJpYWJsZTsKKyAgICBHTGludCBtX2lu
TWF0cml4VmFyaWFibGU7CisgICAgR0xpbnQgbV9pbk1hc2tNYXRyaXhWYXJpYWJsZTsKKyAgICBH
TGludCBtX3NvdXJjZVRleHR1cmVWYXJpYWJsZTsKKyAgICBHTGludCBtX21hc2tUZXh0dXJlVmFy
aWFibGU7CisgICAgR0xpbnQgbV9vcGFjaXR5VmFyaWFibGU7Cit9OworCitjbGFzcyBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXAgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtQ2xpcD4gY3JlYXRlKCk7CisgICAgR0xpbnQgaW5NYXRyaXhWYXJpYWJsZSgpIHsgcmV0
dXJuIG1faW5NYXRyaXhWYXJpYWJsZTsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcioqIHZlcnRleFNoYWRlclNvdXJjZSgpOworICAgIHZpcnR1YWwgY29uc3QgY2hhcioqIGZy
YWdtZW50U2hhZGVyU291cmNlKCk7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1DbGlw
KCk7CisgICAgR0xpbnQgbV9pbk1hdHJpeFZhcmlhYmxlOworfTsKKworY2xhc3MgVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIgeworcHVibGljOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyKCk7CisgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsKKworICAg
IHRlbXBsYXRlPGNsYXNzIFQ+CisgICAgUGFzc1JlZlB0cjxUPiBnZXRTaGFkZXJQcm9ncmFtKCkK
KyAgICB7CisgICAgICAgIFNoYWRlclR5cGUgc2hhZGVyVHlwZSA9IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpzaGFkZXJUeXBlPFQ+KCk7CisgICAgICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtTWFwOjppdGVyYXRvciBpdCA9IG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAu
ZmluZChzaGFkZXJUeXBlKTsKKyAgICAgICAgaWYgKGl0ICE9IG1fdGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1NYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KGl0
LT5zZWNvbmQuZ2V0KCkpOworCisgICAgICAgIFJlZlB0cjxUPiB0ID0gVDo6Y3JlYXRlKCk7Cisg
ICAgICAgIG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAuYWRkKHNoYWRlclR5cGUsIHQp
OworICAgICAgICByZXR1cm4gdDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNo
TWFwPFNoYWRlclR5cGUsIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gPiBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bU1hcCBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOworfTsKKworfQorCisjZW5kaWYK
KworI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1h
cHBlckdMLmgJKHJldmlzaW9uIDEwODEyNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiAr
NDEsOCBAQAogICAgIC8vIHJlaW1wcyBmcm9tIFRleHR1cmVNYXBwZXIKICAgICB2aXJ0dWFsIHZv
aWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4
dHVyZSogbWFza1RleHR1cmUpOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZSh1aW50MzJf
dCB0ZXh0dXJlLCBib29sIG9wYXF1ZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRt
YXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgYm9vbCBmbGlwKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJh
d1RleHR1cmVXaXRoTWFza0FuZE9wYWNpdHkodWludDMyX3QgdGV4dHVyZSwgYm9vbCBvcGFxdWUs
IGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUs
IGJvb2wgZmxpcCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlU2ltcGxlKHVpbnQzMl90
IHRleHR1cmUsIGJvb2wgb3BhcXVlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1h
cFRleHR1cmUqIG1hc2tUZXh0dXJlLCBib29sIGZsaXApOwogICAgIHZpcnR1YWwgdm9pZCBiaW5k
U3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKTsKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5D
bGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7CiAgICAg
dmlydHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMuaAkocmV2aXNpb24gMTA4MTI3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTcsNiArMTcsOSBAQAogICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKKyNp
Zm5kZWYgT3BlbkdMU2hpbXNfaAorI2RlZmluZSBPcGVuR0xTaGltc19oCisKICNpZiBQTEFURk9S
TShRVCkKICNpbmNsdWRlIDxxZ2xvYmFsLmg+CiAjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9O
X0NIRUNLKDUsIDAsIDApCkBAIC0zNDUsMyArMzQ4LDUgQEAKICNkZWZpbmUgZ2xWZXJ0ZXhBdHRy
aWI0ZnYgICAgICAgICAgICAgICAgICAgICAgTE9PS1VQX0dMX0ZVTkNUSU9OKGdsVmVydGV4QXR0
cmliNGZ2KQogI2RlZmluZSBnbFZlcnRleEF0dHJpYlBvaW50ZXIgICAgICAgICAgICAgICAgICBM
T09LVVBfR0xfRlVOQ1RJT04oZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKQogI2VuZGlmCisKKyNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTA4MTMzKQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zNDg3LDYgKzM0ODcsOCBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5H
TENvbW1vbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0
dXJlTWFwcGVyR0wuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
VGV4dHVyZU1hcHBlckdMLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVNhbml0aXplci5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlU2FuaXRpemVy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRp
bGl0aWVzLmNwcCcsCg==
</data>
<flag name="review"
          id="129868"
          type_id="1"
          status="-"
          setter="noam"
    />
    <flag name="commit-queue"
          id="129869"
          type_id="3"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127848</attachid>
            <date>2012-02-20 14:09:28 -0800</date>
            <delta_ts>2012-02-21 10:01:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>78674.patch</filename>
            <type>text/plain</type>
            <size>48218</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDEyLTAyLTIwICBZYWVsIEFo
YXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBbVGV4bWFwXSBCZXR0ZXIg
bWFuYWdlbWVudCBvZiBzaGFkZXJzIGluIFRleHR1cmVNYXBwZXJHTAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2NzQKKyAKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgCisgICAgICAgIFNwbGl0IFNoYWRlck1hcHBlckdMLmNw
cCBpbnRvIHR3byBmaWxlcy4KKyAgICAgICAgR2V0IHJpZCBvZiB0aGUgZW51bXMgdGhhdCB3ZSB3
ZXJlIHVzaW5nIHRvIGlkZW50aWZ5IHNoYWRlcnMgYW5kIHRvIGlkZW50aWZ5IHZhcmlhYmxlcy4K
KyAgICAgICAgU3dpdGNoIGZsaXAgYW5kIG9wYXF1ZSBmcm9tIHVzaW5nIGJvb2wgdG8gdXNpbmcg
ZW51bXMuCisgCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBpcyByZWZhY3RvcmluZyBvbmx5
LgorIAorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnBy
aToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
T3BlbkdMU2hpbXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVy
ZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU2hhcmVkR0xEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6
U2hhcmVkR0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlNo
YXJlZEdMRGF0YTo6flNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyR0xEYXRhOjpUZXh0dXJlTWFwcGVyR0xEYXRhKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJH
TERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aE1hc2tB
bmRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1
cmVTaW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RlJBR01FTlRfU0hBREVSKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjppbml0aWFsaXplUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0p
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBs
ZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OnZlcnRleFNoYWRlclNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6ZnJhZ21l
bnRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtT3BhY2l0eUFuZE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1PcGFjaXR5QW5kTWFzazo6dmVydGV4U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OmZyYWdtZW50
U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtQ2xpcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtQ2xpcDo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1DbGlwKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQ2xpcDo6dmVydGV4U2hhZGVyU291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQ2xpcDo6ZnJh
Z21lbnRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
ZGVidWdHTENvbW1hbmQpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp2ZXJ0ZXhBdHRyaWIpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OnNoYWRlclR5cGUp
OgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6Om1hdHJpeFZhcmlhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpz
b3VyY2VNYXRyaXhWYXJpYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNpbXBsZTo6c291cmNlVGV4dHVyZVZhcmlhYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpvcGFjaXR5VmFyaWFibGUpOgor
ICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpz
b3VyY2VNYXRyaXhWYXJpYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjptYXRyaXhWYXJpYWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjptYXNrTWF0cml4
VmFyaWFibGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1P
cGFjaXR5QW5kTWFzazo6c291cmNlVGV4dHVyZVZhcmlhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6Om1hc2tUZXh0dXJlVmFy
aWFibGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFj
aXR5QW5kTWFzazo6b3BhY2l0eVZhcmlhYmxlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbUNsaXA6Om1hdHJpeFZhcmlhYmxlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpn
ZXRTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJl
OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjppc09wYXF1ZSk6Cisg
ICAgICAgIChCaXRtYXBUZXh0dXJlKToKKwogMjAxMi0wMi0xNiAgR2F2aW4gQmFycmFjbG91Z2gg
IDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBzcGVjaWFsIF9fcHJvdG9f
XyBwcm9wZXJ0eSB0byBPYmplY3QucHJvdG90eXBlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHJldmlzaW9uIDEwODE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTU3NzksNiArNTc3OSw4IEBAIGlmIFVTRV9URVhU
VVJFX01BUFBFUl9HTAogd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9y
bS5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMDgxODgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0zOTcxLDggKzM5NzEsMTQgQEAgY29u
dGFpbnMoQ09ORklHLCB0ZXhtYXApIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAogCiAgICAgIXdpbjMyLSo6Y29udGFpbnMo
UVRfQ09ORklHLCBvcGVuZ2wpIHsKLSAgICAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKLSAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAorICAgICAgICBIRUFERVJTICs9IFwK
KyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBc
CisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuaAorCisgICAgICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAgXAorICAgICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorCiAgICAg
ICAgIENPTkZJRyArPSBvcGVuZ2wtc2hpbXMKICAgICAgICAgREVGSU5FUyArPSBXVEZfVVNFX1RF
WFRVUkVfTUFQUEVSX0dMCiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTA4
MTg4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0z
NDk0LDYgKzM0OTQsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVu
VHlwZVNhbml0aXplci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW50
eXBlL09wZW5UeXBlU2FuaXRpemVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmgJKHJldmlzaW9uIDEwODE4OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE3LDYgKzE3LDkgQEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwog
CisjaWZuZGVmIE9wZW5HTFNoaW1zX2gKKyNkZWZpbmUgT3BlbkdMU2hpbXNfaAorCiAjaWYgUExB
VEZPUk0oUVQpCiAjaW5jbHVkZSA8cWdsb2JhbC5oPgogI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVS
U0lPTl9DSEVDSyg1LCAwLCAwKQpAQCAtMzQ1LDMgKzM0OCw1IEBAIHR5cGVkZWYgc3RydWN0IF9P
cGVuR0xGdW5jdGlvblRhYmxlIHsKICNkZWZpbmUgZ2xWZXJ0ZXhBdHRyaWI0ZnYgICAgICAgICAg
ICAgICAgICAgICAgTE9PS1VQX0dMX0ZVTkNUSU9OKGdsVmVydGV4QXR0cmliNGZ2KQogI2RlZmlu
ZSBnbFZlcnRleEF0dHJpYlBvaW50ZXIgICAgICAgICAgICAgICAgICBMT09LVVBfR0xfRlVOQ1RJ
T04oZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKQogI2VuZGlmCisKKyNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1
cmVNYXBwZXJHTC5jcHAJKHJldmlzaW9uIDEwODE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJJbWFnZS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9P
d25BcnJheVB0ci5oPgpAQCAtMzUsMTcgKzM2LDYgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZiBQ
TEFURk9STShRVCkgfHwgVVNFKENBSVJPKQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jZWxp
ZiBkZWZpbmVkKFRFWE1BUF9PUEVOR0xfRVNfMikKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNp
bmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KLSNlbGlmIE9TKE1BQ19PU19YKQotI2luY2x1ZGUgPGds
Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPEdML2dsLmg+Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoVEVY
TUFQX09QRU5HTF9FU18yKQogI2luY2x1ZGUgPEVHTC9lZ2wuaD4KICNlbGlmIE9TKFdJTkRPV1Mp
CkBAIC02OCwxNiArNTgsNyBAQCBleHRlcm4gIkMiIHsKICAgICB2b2lkIGdsVW5pZm9ybTFmKEdM
aW50LCBHTGZsb2F0KTsKICAgICB2b2lkIGdsVW5pZm9ybTFpKEdMaW50LCBHTGludCk7CiAgICAg
dm9pZCBnbFZlcnRleEF0dHJpYlBvaW50ZXIoR0x1aW50LCBHTGludCwgR0xlbnVtLCBHTGJvb2xl
YW4sIEdMc2l6ZWksIGNvbnN0IEdMdm9pZCopOwotICAgIHZvaWQgZ2xVbmlmb3JtNGYoR0xpbnQs
IEdMZmxvYXQsIEdMZmxvYXQsIEdMZmxvYXQsIEdMZmxvYXQpOwotICAgIHZvaWQgZ2xTaGFkZXJT
b3VyY2UoR0x1aW50LCBHTHNpemVpLCBjb25zdCBjaGFyKiosIGNvbnN0IEdMaW50Kik7Ci0gICAg
R0x1aW50IGdsQ3JlYXRlU2hhZGVyKEdMZW51bSk7Ci0gICAgdm9pZCBnbFNoYWRlclNvdXJjZShH
THVpbnQsIEdMc2l6ZWksIGNvbnN0IGNoYXIqKiwgY29uc3QgR0xpbnQqKTsKLSAgICB2b2lkIGds
Q29tcGlsZVNoYWRlcihHTHVpbnQpOwotICAgIHZvaWQgZ2xEZWxldGVTaGFkZXIoR0x1aW50KTsK
ICAgICB2b2lkIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCwgR0xzaXplaSwgR0xib29sZWFuLCBj
b25zdCBHTGZsb2F0Kik7Ci0gICAgR0x1aW50IGdsQ3JlYXRlUHJvZ3JhbSgpOwotICAgIHZvaWQg
Z2xBdHRhY2hTaGFkZXIoR0x1aW50LCBHTHVpbnQpOwotICAgIHZvaWQgZ2xMaW5rUHJvZ3JhbShH
THVpbnQpOwogICAgIHZvaWQgZ2xVc2VQcm9ncmFtKEdMdWludCk7CiAgICAgdm9pZCBnbERpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQpOwogICAgIHZvaWQgZ2xFbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShHTHVpbnQpOwpAQCAtODUsNDUgKzY2LDE3IEBAIGV4dGVybiAiQyIgewogICAgIHZv
aWQgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGZyYW1lYnVm
ZmVycyk7CiAgICAgdm9pZCBnbEdlbkZyYW1lYnVmZmVycyhHTHNpemVpIG4sIEdMdWludCogZnJh
bWVidWZmZXJzKTsKICAgICB2b2lkIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIEdMdWludCB0ZXh0dXJlLCBH
TGludCBsZXZlbCk7Ci0gICAgdm9pZCBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUsIEdMaW50
KiBwYXJhbXMpOwogICAgIHZvaWQgZ2xCaW5kQnVmZmVyKEdMZW51bSwgR0x1aW50KTsKLSAgICB2
b2lkIGdsRGVsZXRlQnVmZmVycyhHTHNpemVpLCBjb25zdCBHTHVpbnQqKTsKLSAgICB2b2lkIGds
R2VuQnVmZmVycyhHTHNpemVpLCBHTHVpbnQqKTsKLSAgICB2b2lkIGdsQnVmZmVyRGF0YShHTGVu
dW0sIEdMc2l6ZWlwdHIsIGNvbnN0IEdMdm9pZCosIEdMZW51bSk7Ci0gICAgdm9pZCBnbEJ1ZmZl
clN1YkRhdGEoR0xlbnVtLCBHTHNpemVpcHRyLCBHTHNpemVpcHRyLCBjb25zdCBHTHZvaWQqKTsK
LSAgICB2b2lkIGdsR2V0UHJvZ3JhbUluZm9Mb2coR0x1aW50LCBHTHNpemVpLCBHTHNpemVpKiwg
R0xjaGFyKik7Ci0gICAgdm9pZCBnbEdldFNoYWRlckluZm9Mb2coR0x1aW50LCBHTHNpemVpLCBH
THNpemVpKiwgR0xjaGFyKik7CiAgICAgdm9pZCBnbEdlblJlbmRlcmJ1ZmZlcnMoR0xzaXplaSBu
LCBHTHVpbnQqIGlkcyk7CiAgICAgdm9pZCBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoR0xzaXplaSBu
LCBjb25zdCBHTHVpbnQqIGlkcyk7CiAgICAgdm9pZCBnbEJpbmRSZW5kZXJidWZmZXIoR0xlbnVt
IHRhcmdldCwgR0x1aW50IGlkKTsKICAgICB2b2lkIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KTsKICAgICB2b2lkIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIGF0dGFjaG1lbnRQb2ludCwgR0xlbnVtIHJlbmRlcmJ1ZmZlclRhcmdldCwgR0x1
aW50IHJlbmRlcmJ1ZmZlcklkKTsKLSAgICBHTGVudW0gZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KEdMZW51bSB0YXJnZXQpOwotICAgIEdMaW50IGdsR2V0QXR0cmliTG9jYXRpb24oR0x1aW50IHBy
b2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7Ci0jaWYgIU9TKE1BQ19PU19YKQotICAgIEdMaW50
IGdsR2V0VW5pZm9ybUxvY2F0aW9uKEdMdWludCwgY29uc3QgR0xjaGFyKik7Ci0gICAgR0xpbnQg
Z2xCaW5kQXR0cmliTG9jYXRpb24oR0x1aW50LCBHTHVpbnQsIGNvbnN0IEdMY2hhciopOwotI2Vu
ZGlmCiB9CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbmxpbmUgc3RhdGljIHZv
aWQgZGVidWdHTENvbW1hbmQoY29uc3QgY2hhciogY29tbWFuZCwgaW50IGxpbmUpCi17Ci0gICAg
Y29uc3QgR0xlbnVtIGVyciA9IGdsR2V0RXJyb3IoKTsKLSAgICBpZiAoIWVycikKLSAgICAgICAg
cmV0dXJuOwotICAgIFdURlJlcG9ydEVycm9yKF9fRklMRV9fLCBsaW5lLCBXVEZfUFJFVFRZX0ZV
TkNUSU9OLCAiW1RleHR1cmVNYXBwZXIgR0xdIENvbW1hbmQgZmFpbGVkOiAlcyAoJXgpXG4iLCBj
b21tYW5kLCBlcnIpOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi0jaWZuZGVmIE5E
RUJVRwotI2RlZmluZSBHTF9DTUQoeCkge3gsIGRlYnVnR0xDb21tYW5kKCN4LCBfX0xJTkVfXyk7
IH0KLSNlbHNlCi0jZGVmaW5lIEdMX0NNRCh4KSB4OwotI2VuZGlmCi0KIHN0cnVjdCBUZXh0dXJl
TWFwcGVyR0xEYXRhIHsKICAgICBzdHJ1Y3QgU2hhcmVkR0xEYXRhIDogcHVibGljIFJlZkNvdW50
ZWQ8U2hhcmVkR0xEYXRhPiB7CiAjaWYgZGVmaW5lZChURVhNQVBfT1BFTkdMX0VTXzIpCkBAIC0x
NzksOTEgKzEzMiwxOCBAQCBzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdMRGF0YShnZXRDdXJyZW50R0xDb250ZXh0KCkp
KTsKICAgICAgICAgfQogCi0gICAgICAgIGVudW0gU2hhZGVyUHJvZ3JhbUluZGV4IHsKLSAgICAg
ICAgICAgIE5vUHJvZ3JhbSA9IC0xLAotICAgICAgICAgICAgU2ltcGxlUHJvZ3JhbSwKLSAgICAg
ICAgICAgIE9wYWNpdHlBbmRNYXNrUHJvZ3JhbSwKLSAgICAgICAgICAgIENsaXBQcm9ncmFtLAot
Ci0gICAgICAgICAgICBQcm9ncmFtQ291bnQKLSAgICAgICAgfTsKLQotICAgICAgICBlbnVtIFNo
YWRlclZhcmlhYmxlSW5kZXggewotICAgICAgICAgICAgSW5NYXRyaXhWYXJpYWJsZSwKLSAgICAg
ICAgICAgIEluU291cmNlTWF0cml4VmFyaWFibGUsCi0gICAgICAgICAgICBJbk1hc2tNYXRyaXhW
YXJpYWJsZSwKLSAgICAgICAgICAgIE9wYWNpdHlWYXJpYWJsZSwKLSAgICAgICAgICAgIFNvdXJj
ZVRleHR1cmVWYXJpYWJsZSwKLSAgICAgICAgICAgIE1hc2tUZXh0dXJlVmFyaWFibGUsCi0KLSAg
ICAgICAgICAgIFZhcmlhYmxlQ291bnQKLSAgICAgICAgfTsKLQotICAgICAgICBzdHJ1Y3QgUHJv
Z3JhbUluZm8gewotICAgICAgICAgICAgR0x1aW50IGlkOwotICAgICAgICAgICAgR0x1aW50IHZl
cnRleEF0dHJpYjsKLSAgICAgICAgICAgIEdMaW50IHZhcnNbVmFyaWFibGVDb3VudF07Ci0gICAg
ICAgICAgICBHTHVpbnQgdmVydGV4U2hhZGVyOwotICAgICAgICAgICAgR0x1aW50IGZyYWdtZW50
U2hhZGVyOwotICAgICAgICAgICAgUHJvZ3JhbUluZm8oKSA6IGlkKDApIHsgfQotICAgICAgICB9
OwotCi0gICAgICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihTaGFkZXJQcm9ncmFtSW5kZXgg
cHJvZywgU2hhZGVyVmFyaWFibGVJbmRleCB2YXIsIGNvbnN0IGNoYXIqIG5hbWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBwcm9ncmFtc1twcm9nXS52YXJzW3Zhcl0gPSBnbEdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtc1twcm9nXS5pZCwgbmFtZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIGNyZWF0ZVNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291
cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSwgU2hhZGVyUHJvZ3JhbUluZGV4
IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBHTHVpbnQgdmVydGV4U2hhZGVyID0gZ2xD
cmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0gICAgICAgICAgICBHTHVpbnQgZnJhZ21l
bnRTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIpOwotICAgICAgICAg
ICAgR0xfQ01EKGdsU2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgMSwgJnZlcnRleFNoYWRlclNv
dXJjZSwgMCkpCi0gICAgICAgICAgICBHTF9DTUQoZ2xTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFk
ZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgMCkpCi0gICAgICAgICAgICBHTHVpbnQgcHJv
Z3JhbUlEID0gZ2xDcmVhdGVQcm9ncmFtKCk7Ci0gICAgICAgICAgICBHTF9DTUQoZ2xDb21waWxl
U2hhZGVyKHZlcnRleFNoYWRlcikpCi0gICAgICAgICAgICBHTF9DTUQoZ2xDb21waWxlU2hhZGVy
KGZyYWdtZW50U2hhZGVyKSkKLSAgICAgICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9n
cmFtSUQsIHZlcnRleFNoYWRlcikpCi0gICAgICAgICAgICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIo
cHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcikpCi0gICAgICAgICAgICBHTF9DTUQoZ2xMaW5rUHJv
Z3JhbShwcm9ncmFtSUQpKQotICAgICAgICAgICAgcHJvZ3JhbXNbaW5kZXhdLnZlcnRleEF0dHJp
YiA9IGdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiSW5WZXJ0ZXgiKTsKLSAgICAgICAg
ICAgIHByb2dyYW1zW2luZGV4XS5pZCA9IHByb2dyYW1JRDsKLSAgICAgICAgICAgIHByb2dyYW1z
W2luZGV4XS52ZXJ0ZXhTaGFkZXIgPSB2ZXJ0ZXhTaGFkZXI7Ci0gICAgICAgICAgICBwcm9ncmFt
c1tpbmRleF0uZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZvaWQgZGVsZXRlU2hhZGVyUHJvZ3JhbShTaGFkZXJQcm9ncmFtSW5kZXggaW5kZXgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbyA9IHByb2dy
YW1zW2luZGV4XTsKLSAgICAgICAgICAgIEdMdWludCBwcm9ncmFtSUQgPSBwcm9ncmFtSW5mby5p
ZDsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUlEKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICAgICAgR0xfQ01EKGdsRGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgcHJvZ3JhbUlu
Zm8udmVydGV4U2hhZGVyKSkKLSAgICAgICAgICAgIEdMX0NNRChnbERlbGV0ZVNoYWRlcihwcm9n
cmFtSW5mby52ZXJ0ZXhTaGFkZXIpKQotICAgICAgICAgICAgR0xfQ01EKGdsRGV0YWNoU2hhZGVy
KHByb2dyYW1JRCwgcHJvZ3JhbUluZm8uZnJhZ21lbnRTaGFkZXIpKQotICAgICAgICAgICAgR0xf
Q01EKGdsRGVsZXRlU2hhZGVyKHByb2dyYW1JbmZvLmZyYWdtZW50U2hhZGVyKSkKLSAgICAgICAg
ICAgIEdMX0NNRChnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKSkKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgaW5pdGlhbGl6ZVNoYWRlcnMoKTsKLQotICAgICAgICBQcm9ncmFtSW5mbyBwcm9n
cmFtc1tQcm9ncmFtQ291bnRdOwotCiAgICAgICAgIGludCBzdGVuY2lsSW5kZXg7CiAgICAgICAg
IFZlY3RvcjxJbnRSZWN0PiBjbGlwU3RhY2s7CisgICAgICAgIFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyIHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCiAgICAgICAgIFNoYXJlZEdMRGF0
YShHTENvbnRleHQgZ2xDb250ZXh0KQogICAgICAgICAgICAgOiBzdGVuY2lsSW5kZXgoMSkKICAg
ICAgICAgewogICAgICAgICAgICAgZ2xDb250ZXh0RGF0YU1hcCgpLmFkZChnbENvbnRleHQsIHRo
aXMpOwotICAgICAgICAgICAgaW5pdGlhbGl6ZVNoYWRlcnMoKTsKICAgICAgICAgfQogCiAgICAg
ICAgIH5TaGFyZWRHTERhdGEoKQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0g
U2ltcGxlUHJvZ3JhbTsgaSA8IFByb2dyYW1Db3VudDsgKytpKQotICAgICAgICAgICAgICAgIGRl
bGV0ZVNoYWRlclByb2dyYW0oU2hhZGVyUHJvZ3JhbUluZGV4KGkpKTsKLQogICAgICAgICAgICAg
R0xDb250ZXh0RGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZ2xDb250ZXh0RGF0YU1hcCgp
LmVuZCgpOwogICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6aXRlcmF0b3IgaXQ7CiAgICAg
ICAgICAgICBmb3IgKGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewpAQCAtMjkyLDggKzE3Miw3IEBAIHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsK
ICAgICB9CiAKICAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKCkKLSAgICAgICAgOiBjdXJyZW50UHJv
Z3JhbShTaGFyZWRHTERhdGE6Ok5vUHJvZ3JhbSkKLSAgICAgICAgLCBwcmV2aW91c1Byb2dyYW0o
MCkKKyAgICAgICAgOiBwcmV2aW91c1Byb2dyYW0oMCkKICAgICAgICAgLCBkaWRNb2RpZnlTdGVu
Y2lsKGZhbHNlKQogICAgICAgICAsIHByZXZpb3VzU2Npc3NvclN0YXRlKDApCiAgICAgICAgICwg
cHJldmlvdXNEZXB0aFN0YXRlKDApCkBAIC0zMDEsNyArMTgwLDYgQEAgc3RydWN0IFRleHR1cmVN
YXBwZXJHTERhdGEgewogICAgIHsgfQogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVj
dGlvbk1hdHJpeDsKLSAgICBpbnQgY3VycmVudFByb2dyYW07CiAgICAgR0xpbnQgcHJldmlvdXNQ
cm9ncmFtOwogICAgIGJvb2wgZGlkTW9kaWZ5U3RlbmNpbDsKICAgICBHTGludCBwcmV2aW91c1Nj
aXNzb3JTdGF0ZTsKQEAgLTM0NSwxMjcgKzIyMywxMiBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBUZXh0dXJlTWFwcGVyR0w7CiB9OwogCi0jZGVmaW5lIFRFWE1BUF9HRVRfU0hBREVSX1ZB
Ul9MT0NBVElPTihwcm9nLCB2YXIpIFwKLSAgICBpZiAoZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2cj
I1Byb2dyYW0sIHZhciMjVmFyaWFibGUsICN2YXIpIDwgMCkgXAotICAgICAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZG4ndCBmaW5kIHZhcmlhYmxlICIjdmFyIiBpbiBwcm9ncmFtICIjcHJvZyJcbiIp
OwotCi0jZGVmaW5lIFRFWE1BUF9CVUlMRF9TSEFERVIocHJvZ3JhbSkgXAotICAgIGNyZWF0ZVNo
YWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlIyNwcm9ncmFtLCBmcmFnbWVudFNoYWRlclNv
dXJjZSMjcHJvZ3JhbSwgcHJvZ3JhbSMjUHJvZ3JhbSk7Ci0KIFRleHR1cmVNYXBwZXJHTDo6VGV4
dHVyZU1hcHBlckdMKCkKICAgICA6IG1fZGF0YShuZXcgVGV4dHVyZU1hcHBlckdMRGF0YSkKICAg
ICAsIG1fY29udGV4dCgwKQogewogfQogCi12b2lkIFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJl
ZEdMRGF0YTo6aW5pdGlhbGl6ZVNoYWRlcnMoKQotewotI2lmbmRlZiBURVhNQVBfT1BFTkdMX0VT
XzIKLSNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMgXAotICAgICIjZGVmaW5lIGxv
d3BcbiNkZWZpbmUgaGlnaHBcbiIKLSNkZWZpbmUgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVM
VF9QUkVDSVNJT04KLSNlbHNlCi0jZGVmaW5lIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TCi0j
ZGVmaW5lIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OIFwKLSAgICAicHJl
Y2lzaW9uIG1lZGl1bXAgZmxvYXQ7IFxuIgotI2VuZGlmCi0KLSNkZWZpbmUgVkVSVEVYX1NIQURF
UihzcmMuLi4pIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TI3NyYwotI2RlZmluZSBGUkFHTUVO
VF9TSEFERVIoc3JjLi4uKSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9OU1wKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJ
T05cCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzcmMKLQotICAgIGlmICghaW5p
dGlhbGl6ZU9wZW5HTFNoaW1zKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IGNoYXIq
IGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQotICAgICAgICBGUkFHTUVOVF9T
SEFERVIoCi0gICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBTb3VyY2VUZXh0dXJlLCBNYXNr
VGV4dHVyZTsKLSAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCBPcGFjaXR5OwotICAgICAg
ICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRleENvb3JkU291cmNlLCBPdXRUZXhDb29yZE1h
c2s7Ci0gICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoU291cmNlVGV4dHVyZSwgT3V0VGV4
Q29vcmRTb3VyY2UpOwotICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0
dXJlMkQoTWFza1RleHR1cmUsIE91dFRleENvb3JkTWFzayk7Ci0gICAgICAgICAgICAgICAgbG93
cCBmbG9hdCBmcmFnbWVudEFscGhhID0gT3BhY2l0eSAqIG1hc2tDb2xvci5hOwotICAgICAgICAg
ICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29s
b3IuYSAqIGZyYWdtZW50QWxwaGEpOwotICAgICAgICAgICAgfQotICAgICAgICApOwotCi0gICAg
Y29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQotICAgICAgICBW
RVJURVhfU0hBREVSKAotICAgICAgICAgICAgdW5pZm9ybSBtYXQ0IEluTWF0cml4LCBJblNvdXJj
ZU1hdHJpeCwgSW5NYXNrTWF0cml4OwotICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5WZXJ0
ZXg7Ci0gICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4Q29vcmRTb3VyY2UsIE91
dFRleENvb3JkTWFzazsKLSAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIE91dFRleENvb3JkU291cmNlID0gdmVjMihJblNvdXJjZU1hdHJp
eCAqIEluVmVydGV4KTsKLSAgICAgICAgICAgICAgICBPdXRUZXhDb29yZE1hc2sgPSB2ZWMyKElu
TWFza01hdHJpeCAqIEluVmVydGV4KTsKLSAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IElu
TWF0cml4ICogSW5WZXJ0ZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBjb25z
dCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZSA9Ci0gICAgICAgIEZSQUdNRU5UX1NI
QURFUigKLSAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIFNvdXJjZVRleHR1cmU7Ci0gICAg
ICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgT3BhY2l0eTsKLSAgICAgICAgICAgIHZhcnlpbmcg
aGlnaHAgdmVjMiBPdXRUZXhDb29yZFNvdXJjZTsKLSAgICAgICAgICAgIHZvaWQgbWFpbih2b2lk
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1
cmUyRChTb3VyY2VUZXh0dXJlLCBPdXRUZXhDb29yZFNvdXJjZSk7Ci0gICAgICAgICAgICAgICAg
Z2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBPcGFjaXR5LCBjb2xvci5hICogT3BhY2l0
eSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhT
aGFkZXJTb3VyY2VTaW1wbGUgPQotICAgICAgICBWRVJURVhfU0hBREVSKAotICAgICAgICAgICAg
dW5pZm9ybSBtYXQ0IEluTWF0cml4LCBJblNvdXJjZU1hdHJpeDsKLSAgICAgICAgICAgIGF0dHJp
YnV0ZSB2ZWM0IEluVmVydGV4OwotICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRl
eENvb3JkU291cmNlOwotICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgT3V0VGV4Q29vcmRTb3VyY2UgPSB2ZWMyKEluU291cmNlTWF0cml4
ICogSW5WZXJ0ZXgpOwotICAgICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gSW5NYXRyaXggKiBJ
blZlcnRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLSAgICBjb25zdCBjaGFyKiBmcmFn
bWVudFNoYWRlclNvdXJjZUNsaXAgPQotICAgICAgICBGUkFHTUVOVF9TSEFERVIoCi0gICAgICAg
ICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbF9G
cmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICk7Ci0KLSAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VDbGlwID0KLSAgICAg
ICAgVkVSVEVYX1NIQURFUigKLSAgICAgICAgICAgIHVuaWZvcm0gbWF0NCBJbk1hdHJpeDsKLSAg
ICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IEluVmVydGV4OwotICAgICAgICAgICAgdm9pZCBtYWlu
KHZvaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSBJbk1h
dHJpeCAqIEluVmVydGV4OwotICAgICAgICAgICAgfQotICAgICAgICApOwotCi0KLSAgICBURVhN
QVBfQlVJTERfU0hBREVSKFNpbXBsZSkKLSAgICBURVhNQVBfQlVJTERfU0hBREVSKE9wYWNpdHlB
bmRNYXNrKQotICAgIFRFWE1BUF9CVUlMRF9TSEFERVIoQ2xpcCkKLQotICAgIFRFWE1BUF9HRVRf
U0hBREVSX1ZBUl9MT0NBVElPTihPcGFjaXR5QW5kTWFzaywgSW5NYXRyaXgpCi0gICAgVEVYTUFQ
X0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKE9wYWNpdHlBbmRNYXNrLCBJblNvdXJjZU1hdHJpeCkK
LSAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oT3BhY2l0eUFuZE1hc2ssIEluTWFz
a01hdHJpeCkKLSAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oT3BhY2l0eUFuZE1h
c2ssIFNvdXJjZVRleHR1cmUpCi0gICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKE9w
YWNpdHlBbmRNYXNrLCBNYXNrVGV4dHVyZSkKLSAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9D
QVRJT04oT3BhY2l0eUFuZE1hc2ssIE9wYWNpdHkpCi0KLSAgICBURVhNQVBfR0VUX1NIQURFUl9W
QVJfTE9DQVRJT04oU2ltcGxlLCBJblNvdXJjZU1hdHJpeCkKLSAgICBURVhNQVBfR0VUX1NIQURF
Ul9WQVJfTE9DQVRJT04oU2ltcGxlLCBJbk1hdHJpeCkKLSAgICBURVhNQVBfR0VUX1NIQURFUl9W
QVJfTE9DQVRJT04oU2ltcGxlLCBTb3VyY2VUZXh0dXJlKQotICAgIFRFWE1BUF9HRVRfU0hBREVS
X1ZBUl9MT0NBVElPTihTaW1wbGUsIE9wYWNpdHkpCi0KLSAgICBURVhNQVBfR0VUX1NIQURFUl9W
QVJfTE9DQVRJT04oQ2xpcCwgSW5NYXRyaXgpCi19Ci0KIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpi
ZWdpblBhaW50aW5nKCkKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBubyBHTCBlcnJvciBjb2Rl
IHN0YXlzIGZyb20gcHJldmlvdXMgb3BlcmF0aW9ucy4KQEAgLTUyNSwyNiArMjg4LDI4IEBAIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdAogICAgIGlmICghdGV4dHVyZS5p
c1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wmIHRl
eHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHRleHR1cmUpOwot
ICAgIGRyYXdUZXh0dXJlKHRleHR1cmVHTC5pZCgpLCB0ZXh0dXJlR0wuaXNPcGFxdWUoKSwgdGV4
dHVyZUdMLnJlbGF0aXZlU2l6ZSgpLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHksIG1hc2ss
IGZhbHNlKTsKKyAgICBkcmF3VGV4dHVyZSh0ZXh0dXJlR0wuaWQoKSwgdGV4dHVyZUdMLmlzT3Bh
cXVlKCkgPyBPcGFxdWUgOiBUcmFuc3BhcmVudCwgdGV4dHVyZUdMLnJlbGF0aXZlU2l6ZSgpLCB0
YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHksIG1hc2ssIE5vRmxpcCk7CiB9CiAKLXZvaWQgVGV4
dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBib29sIG9wYXF1ZSwg
Y29uc3QgRmxvYXRTaXplJiByZWxhdGl2ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3Bh
Y2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIGJvb2wgZmxpcCkKK3ZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBUZXh0dXJlVHJh
bnNwYXJlbmN5IHRyYW5zcGFyZW5jeSwgY29uc3QgRmxvYXRTaXplJiByZWxhdGl2ZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1v
ZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1Rl
eHR1cmUsIEZsaXAgZmxpcCkKIHsKLSAgICBUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERh
dGE6OlNoYWRlclByb2dyYW1JbmRleCBwcm9ncmFtOwogICAgIGlmIChtYXNrVGV4dHVyZSkKLSAg
ICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6T3BhY2l0
eUFuZE1hc2tQcm9ncmFtOworICAgICAgICBkcmF3VGV4dHVyZVdpdGhNYXNrQW5kT3BhY2l0eSh0
ZXh0dXJlLCB0cmFuc3BhcmVuY3ksIHJlbGF0aXZlU2l6ZSwgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3
TWF0cml4LCBvcGFjaXR5LCBtYXNrVGV4dHVyZSwgZmxpcCk7CiAgICAgZWxzZQotICAgICAgICBw
cm9ncmFtID0gVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpTaW1wbGVQcm9ncmFt
OworICAgICAgICBkcmF3VGV4dHVyZVNpbXBsZSh0ZXh0dXJlLCB0cmFuc3BhcmVuY3ksIHJlbGF0
aXZlU2l6ZSwgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCBtYXNrVGV4dHVy
ZSwgZmxpcCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhNYXNr
QW5kT3BhY2l0eSh1aW50MzJfdCB0ZXh0dXJlLCBUZXh0dXJlVHJhbnNwYXJlbmN5LCBjb25zdCBG
bG9hdFNpemUmIHJlbGF0aXZlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBj
b25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgRmxpcCBmbGlwKQoreworICAgIFJlZlB0
cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrPiBzaGFkZXJJbmZvID0g
ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRl
clByb2dyYW08VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4oKTsKIAot
ICAgIGNvbnN0IFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6UHJvZ3JhbUluZm8m
IHByb2dyYW1JbmZvID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnByb2dyYW1zW3Byb2dyYW1dOwot
ICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbUluZm8uaWQpKQotICAgIGRhdGEoKS5jdXJy
ZW50UHJvZ3JhbSA9IHByb2dyYW07Ci0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJy
YXkocHJvZ3JhbUluZm8udmVydGV4QXR0cmliKSkKKyAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHNo
YWRlckluZm8tPmlkKCkpKQorICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNo
YWRlckluZm8tPnZlcnRleEF0dHJpYigpKSkKICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdM
X1RFWFRVUkUwKSkKICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0
dXJlKSkKICAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkpCiAgICAg
Y29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OwotICAg
IEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbUluZm8udmVydGV4QXR0cmliLCAy
LCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSkKKyAgICBHTF9DTUQoZ2xWZXJ0ZXhB
dHRyaWJQb2ludGVyKHNoYWRlckluZm8tPnZlcnRleEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xf
RkFMU0UsIDAsIHVuaXRSZWN0KSkKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9
IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KS5tdWx0aXBseSht
b2RlbFZpZXdNYXRyaXgpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KAogICAgICAgICAg
ICAgdGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLApAQCAtNTU5LDE2ICszMjQsMTYgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKHVpbnQzMgogICAgICAgICBtYXRyaXgubTQx
KCksIG1hdHJpeC5tNDIoKSwgbWF0cml4Lm00MygpLCBtYXRyaXgubTQ0KCkKICAgICB9OwogICAg
IGNvbnN0IEdMZmxvYXQgbTRzcmNbXSA9IHtyZWxhdGl2ZVNpemUud2lkdGgoKSwgMCwgMCwgMCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCByZWxhdGl2ZVNpemUuaGVp
Z2h0KCkgKiAoZmxpcCA/IC0xIDogMSksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgcmVsYXRpdmVTaXplLmhlaWdodCgpICogKChmbGlwID09IFNob3VsZEZs
aXApID8gLTEgOiAxKSwgMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAwLCAxLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGZs
aXAgPyByZWxhdGl2ZVNpemUuaGVpZ2h0KCkgOiAwLCAwLCAxfTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCAoZmxpcCA9PSBTaG91bGRGbGlwKSA/IHJlbGF0aXZlU2l6
ZS5oZWlnaHQoKSA6IDAsIDAsIDF9OwogCi0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihw
cm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6SW5NYXRy
aXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNCkpCi0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJp
eDRmdihwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6
SW5Tb3VyY2VNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNHNyYykpCi0gICAgR0xfQ01E
KGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVk
R0xEYXRhOjpTb3VyY2VUZXh0dXJlVmFyaWFibGVdLCAwKSkKLSAgICBHTF9DTUQoZ2xVbmlmb3Jt
MWYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6Ok9w
YWNpdHlWYXJpYWJsZV0sIG9wYWNpdHkpKQorICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYo
c2hhZGVySW5mby0+bWF0cml4VmFyaWFibGUoKSwgMSwgR0xfRkFMU0UsIG00KSkKKyAgICBHTF9D
TUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlckluZm8tPnNvdXJjZU1hdHJpeFZhcmlhYmxlKCks
IDEsIEdMX0ZBTFNFLCBtNHNyYykpCisgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHNoYWRlckluZm8t
PnNvdXJjZVRleHR1cmVWYXJpYWJsZSgpLCAwKSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWYoc2hh
ZGVySW5mby0+b3BhY2l0eVZhcmlhYmxlKCksIG9wYWNpdHkpKQogCi0gICAgaWYgKG1hc2tUZXh0
dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkpIHsKKyAgICBpZiAobWFza1RleHR1cmUtPmlz
VmFsaWQoKSkgewogICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wg
PSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVyZSk7CiAgICAg
ICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpKQogICAgICAgICBHTF9DTUQo
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKSkKQEAgLTU3
NiwxMiArMzQxLDU1IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzIK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgbWFza1RleHR1cmVH
TC0+cmVsYXRpdmVTaXplKCkuaGVpZ2h0KCksIDAsIDAsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OwotICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0
cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRh
OjpJbk1hc2tNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNG1hc2spKTsKLSAgICAgICAg
R0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6
U2hhcmVkR0xEYXRhOjpNYXNrVGV4dHVyZVZhcmlhYmxlXSwgMSkpCisgICAgICAgIEdMX0NNRChn
bFVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVySW5mby0+bWFza01hdHJpeFZhcmlhYmxlKCksIDEsIEdM
X0ZBTFNFLCBtNG1hc2spKTsKKyAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHNoYWRlckluZm8t
Pm1hc2tUZXh0dXJlVmFyaWFibGUoKSwgMSkpCiAgICAgICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1
cmUoR0xfVEVYVFVSRTApKQogICAgIH0KIAotICAgIGJvb2wgbmVlZHNCbGVuZGluZyA9ICFvcGFx
dWUgfHwgb3BhY2l0eSA8IDAuOTkgfHwgbWFza1RleHR1cmU7CisgICAgR0xfQ01EKGdsQmxlbmRG
dW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSkpCisgICAgR0xfQ01EKGdsRW5hYmxl
KEdMX0JMRU5EKSkKKworICAgIEdMX0NNRChnbERpc2FibGUoR0xfREVQVEhfVEVTVCkpCisKKyAg
ICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpCisgICAgR0xfQ01E
KGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlckluZm8tPnZlcnRleEF0dHJpYigpKSkK
K30KKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlU2ltcGxlKHVpbnQzMl90IHRl
eHR1cmUsIFRleHR1cmVUcmFuc3BhcmVuY3kgdHJhbnNwYXJlbmN5LCBjb25zdCBGbG9hdFNpemUm
IHJlbGF0aXZlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRt
YXBUZXh0dXJlKiwgRmxpcCBmbGlwKQoreworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNpbXBsZT4gc2hhZGVySW5mbyA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlPigpOworCisgICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShzaGFkZXJJbmZvLT5p
ZCgpKSkKKyAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJJbmZvLT52
ZXJ0ZXhBdHRyaWIoKSkpCisgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkp
CisgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSkpCisgICAg
R0xfQ01EKGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQorICAgIGNvbnN0IEdMZmxv
YXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKKyAgICBHTF9DTUQoZ2xW
ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlckluZm8tPnZlcnRleEF0dHJpYigpLCAyLCBHTF9GTE9B
VCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSkKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1h
dHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KS5tdWx0
aXBseShtb2RlbFZpZXdNYXRyaXgpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KAorICAg
ICAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLAorICAgICAgICAgICAgMCwgdGFy
Z2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKKyAgICAgICAgICAgIDAsIDAsIDEsIDAsCisgICAgICAg
ICAgICB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIDAsIDEpKTsKKworICAgIGNvbnN0
IEdMZmxvYXQgbTRbXSA9IHsKKyAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1h
dHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAorICAgICAgICBtYXRyaXgubTIxKCksIG1hdHJpeC5t
MjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCisgICAgICAgIG1hdHJpeC5tMzEoKSwg
bWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKKyAgICAgICAgbWF0cml4
Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgpCisgICAgfTsK
KyAgICBjb25zdCBHTGZsb2F0IG00c3JjW10gPSB7cmVsYXRpdmVTaXplLndpZHRoKCksIDAsIDAs
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcmVsYXRpdmVTaXpl
LmhlaWdodCgpICogKChmbGlwID09IFNob3VsZEZsaXApID8gLTEgOiAxKSwgMCwgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIChmbGlwID09IFNob3VsZEZsaXApID8gcmVsYXRp
dmVTaXplLmhlaWdodCgpIDogMCwgMCwgMX07CisKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4
NGZ2KHNoYWRlckluZm8tPm1hdHJpeFZhcmlhYmxlKCksIDEsIEdMX0ZBTFNFLCBtNCkpCisgICAg
R0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXJJbmZvLT5zb3VyY2VNYXRyaXhWYXJpYWJs
ZSgpLCAxLCBHTF9GQUxTRSwgbTRzcmMpKQorICAgIEdMX0NNRChnbFVuaWZvcm0xaShzaGFkZXJJ
bmZvLT5zb3VyY2VUZXh0dXJlVmFyaWFibGUoKSwgMCkpCisgICAgR0xfQ01EKGdsVW5pZm9ybTFm
KHNoYWRlckluZm8tPm9wYWNpdHlWYXJpYWJsZSgpLCBvcGFjaXR5KSkKKworICAgIGJvb2wgbmVl
ZHNCbGVuZGluZyA9ICh0cmFuc3BhcmVuY3kgPT0gVHJhbnNwYXJlbnQpIHx8IG9wYWNpdHkgPCAw
Ljk5OwogCiAgICAgaWYgKG5lZWRzQmxlbmRpbmcpIHsKICAgICAgICAgR0xfQ01EKGdsQmxlbmRG
dW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSkpCkBAIC01ODksOSArMzk3LDggQEAg
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKHVpbnQzMgogICAgIH0gZWxzZQogICAg
ICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX0JMRU5EKSkKIAotCiAgICAgR0xfQ01EKGdsRHJhd0Fy
cmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKQotICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShwcm9ncmFtSW5mby52ZXJ0ZXhBdHRyaWIpKQorICAgIEdMX0NNRChnbERpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJJbmZvLT52ZXJ0ZXhBdHRyaWIoKSkpCiB9CiAKIGNv
bnN0IGNoYXIqIFRleHR1cmVNYXBwZXJHTDo6dHlwZSgpIGNvbnN0CkBAIC04NjAsMTIgKzY2Nywx
MyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyCiAgICAgaWYgKGJl
Z2luU2Npc3NvckNsaXAobW9kZWxWaWV3TWF0cml4LCB0YXJnZXRSZWN0KSkKICAgICAgICAgcmV0
dXJuOwogICAgIGRhdGEoKS5pbml0U3RlbmNpbCgpOwotICAgIFRleHR1cmVNYXBwZXJHTERhdGE6
OlNoYXJlZEdMRGF0YTo6U2hhZGVyUHJvZ3JhbUluZGV4IHByb2dyYW0gPSBUZXh0dXJlTWFwcGVy
R0xEYXRhOjpTaGFyZWRHTERhdGE6OkNsaXBQcm9ncmFtOwotICAgIGNvbnN0IFRleHR1cmVNYXBw
ZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6UHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvID0gZGF0YSgp
LnNoYXJlZEdMRGF0YSgpLnByb2dyYW1zW3Byb2dyYW1dOwotICAgIEdMX0NNRChnbFVzZVByb2dy
YW0ocHJvZ3JhbUluZm8uaWQpKQotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHByb2dyYW1JbmZvLnZlcnRleEF0dHJpYikpCisKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1DbGlwPiBzaGFkZXJJbmZvID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW08VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1DbGlwPigpOworCisgICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShzaGFkZXJJbmZvLT5p
ZCgpKSkKKyAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJJbmZvLT52
ZXJ0ZXhBdHRyaWIoKSkpCiAgICAgY29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEs
IDAsIDEsIDEsIDAsIDF9OwotICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3Jh
bUluZm8udmVydGV4QXR0cmliLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSkK
KyAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlckluZm8tPnZlcnRleEF0dHJp
YigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSkKIAogICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0
aW9uTWF0cml4KQogICAgICAgICAgICAgLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkKQEAgLTg4
Myw3ICs2OTEsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyCiAK
ICAgICBpbnQmIHN0ZW5jaWxJbmRleCA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS5zdGVuY2lsSW5k
ZXg7CiAKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4
dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpJbk1hdHJpeFZhcmlhYmxlXSwgMSwgR0xf
RkFMU0UsIG00KSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlckluZm8tPm1h
dHJpeFZhcmlhYmxlKCksIDEsIEdMX0ZBTFNFLCBtNCkpCiAgICAgR0xfQ01EKGdsRW5hYmxlKEdM
X1NURU5DSUxfVEVTVCkpCiAgICAgR0xfQ01EKGdsU3RlbmNpbEZ1bmMoR0xfTkVWRVIsIHN0ZW5j
aWxJbmRleCwgc3RlbmNpbEluZGV4KSkKICAgICBHTF9DTUQoZ2xTdGVuY2lsT3AoR0xfUkVQTEFD
RSwgR0xfUkVQTEFDRSwgR0xfUkVQTEFDRSkpCkBAIC04OTIsNyArNzAwLDcgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcgogICAgIEdMX0NNRChnbFN0ZW5jaWxPcChH
TF9LRUVQLCBHTF9LRUVQLCBHTF9LRUVQKSkKICAgICBzdGVuY2lsSW5kZXggPDw9IDE7CiAgICAg
Z2xTdGVuY2lsRnVuYyhzdGVuY2lsSW5kZXggPiAxID8gR0xfRVFVQUwgOiBHTF9BTFdBWVMsIHN0
ZW5jaWxJbmRleCAtIDEsIHN0ZW5jaWxJbmRleCAtIDEpOwotICAgIEdMX0NNRChnbERpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtSW5mby52ZXJ0ZXhBdHRyaWIpKQorICAgIEdMX0NNRChn
bERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJJbmZvLT52ZXJ0ZXhBdHRyaWIoKSkpCiB9
CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRDbGlwKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdM
LmgJKHJldmlzaW9uIDEwODE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsMjEg
QEAgcHVibGljOgogICAgIFRleHR1cmVNYXBwZXJHTCgpOwogICAgIHZpcnR1YWwgflRleHR1cmVN
YXBwZXJHTCgpOwogCisgICAgZW51bSBUZXh0dXJlVHJhbnNwYXJlbmN5IHsKKyAgICAgICAgT3Bh
cXVlLAorICAgICAgICBUcmFuc3BhcmVudAorICAgIH07CisKKyAgICBlbnVtIEZsaXAgeworICAg
ICAgICBTaG91bGRGbGlwLAorICAgICAgICBOb0ZsaXAKKyAgICB9OworCiAgICAgLy8gcmVpbXBz
IGZyb20gVGV4dHVyZU1hcHBlcgogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBC
aXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7Ci0g
ICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIGJvb2wgb3BhcXVl
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJl
LCBib29sIGZsaXApOworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0
dXJlLCBUZXh0dXJlVHJhbnNwYXJlbmN5LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJp
dG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCBGbGlwKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1Rl
eHR1cmVXaXRoTWFza0FuZE9wYWNpdHkodWludDMyX3QgdGV4dHVyZSwgVGV4dHVyZVRyYW5zcGFy
ZW5jeSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4
dHVyZSwgRmxpcCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlU2ltcGxlKHVpbnQzMl90
IHRleHR1cmUsIFRleHR1cmVUcmFuc3BhcmVuY3ksIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29u
c3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIEZsaXApOwogICAgIHZpcnR1YWwgdm9pZCBi
aW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKTsKICAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7CiAg
ICAgdmlydHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjU5IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisK
KyNpZiBQTEFURk9STShRVCkgfHwgVVNFKENBSVJPKQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgi
CisjZWxpZiBkZWZpbmVkKFRFWE1BUF9PUEVOR0xfRVNfMikKKyNpbmNsdWRlIDxHTEVTMi9nbDIu
aD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKyNlbGlmIE9TKE1BQ19PU19YKQorI2luY2x1
ZGUgPGdsLmg+CisjZWxzZQorI2luY2x1ZGUgPEdML2dsLmg+CisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisjaWZuZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgorI2RlZmluZSBPRVMyX1BS
RUNJU0lPTl9ERUZJTklUSU9OUyBcCisgICAgIiNkZWZpbmUgbG93cFxuI2RlZmluZSBoaWdocFxu
IgorI2RlZmluZSBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTgorI2Vsc2UK
KyNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMKKyNkZWZpbmUgT0VTMl9GUkFHTUVO
VF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT04gXAorICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDsgXG4iCisjZW5kaWYKKworI2RlZmluZSBWRVJURVhfU0hBREVSKHNyYy4uLikgT0VTMl9QUkVD
SVNJT05fREVGSU5JVElPTlMjc3JjCisjZGVmaW5lIEZSQUdNRU5UX1NIQURFUihzcmMuLi4pIE9F
UzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTlwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgI3NyYworCitjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJj
ZU9wYWNpdHlBbmRNYXNrID0KKyAgICBGUkFHTUVOVF9TSEFERVIoCisgICAgICAgIHVuaWZvcm0g
c2FtcGxlcjJEIFNvdXJjZVRleHR1cmUsIE1hc2tUZXh0dXJlOworICAgICAgICB1bmlmb3JtIGxv
d3AgZmxvYXQgT3BhY2l0eTsKKyAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRleENvb3Jk
U291cmNlLCBPdXRUZXhDb29yZE1hc2s7CisgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAg
ICB7CisgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoU291cmNlVGV4dHVy
ZSwgT3V0VGV4Q29vcmRTb3VyY2UpOworICAgICAgICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9
IHRleHR1cmUyRChNYXNrVGV4dHVyZSwgT3V0VGV4Q29vcmRNYXNrKTsKKyAgICAgICAgICAgIGxv
d3AgZmxvYXQgZnJhZ21lbnRBbHBoYSA9IE9wYWNpdHkgKiBtYXNrQ29sb3IuYTsKKyAgICAgICAg
ICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3Iu
YSAqIGZyYWdtZW50QWxwaGEpOworICAgICAgICB9CisgICAgKTsKKworY29uc3QgY2hhciogdmVy
dGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQorICAgIFZFUlRFWF9TSEFERVIoCisgICAg
ICAgIHVuaWZvcm0gbWF0NCBJbk1hdHJpeCwgSW5Tb3VyY2VNYXRyaXgsIEluTWFza01hdHJpeDsK
KyAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5WZXJ0ZXg7CisgICAgICAgIHZhcnlpbmcgaGlnaHAg
dmVjMiBPdXRUZXhDb29yZFNvdXJjZSwgT3V0VGV4Q29vcmRNYXNrOworICAgICAgICB2b2lkIG1h
aW4odm9pZCkKKyAgICAgICAgeworICAgICAgICAgICAgT3V0VGV4Q29vcmRTb3VyY2UgPSB2ZWMy
KEluU291cmNlTWF0cml4ICogSW5WZXJ0ZXgpOworICAgICAgICAgICAgT3V0VGV4Q29vcmRNYXNr
ID0gdmVjMihJbk1hc2tNYXRyaXggKiBJblZlcnRleCk7CisgICAgICAgICAgICBnbF9Qb3NpdGlv
biA9IEluTWF0cml4ICogSW5WZXJ0ZXg7CisgICAgICAgIH0KKyAgICApOworCitjb25zdCBjaGFy
KiBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZSA9CisgICAgRlJBR01FTlRfU0hBREVSKAorICAg
ICAgICB1bmlmb3JtIHNhbXBsZXIyRCBTb3VyY2VUZXh0dXJlOworICAgICAgICB1bmlmb3JtIGxv
d3AgZmxvYXQgT3BhY2l0eTsKKyAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRleENvb3Jk
U291cmNlOworICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgeworICAgICAgICAgICAg
bG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKFNvdXJjZVRleHR1cmUsIE91dFRleENvb3JkU291
cmNlKTsKKyAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogT3BhY2l0
eSwgY29sb3IuYSAqIE9wYWNpdHkpOworICAgICAgICB9CisgICAgKTsKKworY29uc3QgY2hhciog
dmVydGV4U2hhZGVyU291cmNlU2ltcGxlID0KKyAgICBWRVJURVhfU0hBREVSKAorICAgICAgICB1
bmlmb3JtIG1hdDQgSW5NYXRyaXgsIEluU291cmNlTWF0cml4OworICAgICAgICBhdHRyaWJ1dGUg
dmVjNCBJblZlcnRleDsKKyAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRleENvb3JkU291
cmNlOworICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgeworICAgICAgICAgICAgT3V0
VGV4Q29vcmRTb3VyY2UgPSB2ZWMyKEluU291cmNlTWF0cml4ICogSW5WZXJ0ZXgpOworICAgICAg
ICAgICAgZ2xfUG9zaXRpb24gPSBJbk1hdHJpeCAqIEluVmVydGV4OworICAgICAgICB9CisgICAg
KTsKK2NvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlQ2xpcCA9CisgICAgRlJBR01FTlRf
U0hBREVSKAorICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgeworICAgICAgICAgICAg
Z2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApOworICAgICAgICB9CisgICAg
KTsKKworY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlQ2xpcCA9CisgICAgVkVSVEVYX1NI
QURFUigKKyAgICAgICAgdW5pZm9ybSBtYXQ0IEluTWF0cml4OworICAgICAgICBhdHRyaWJ1dGUg
dmVjNCBJblZlcnRleDsKKyAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsX1Bvc2l0aW9uID0gSW5NYXRyaXggKiBJblZlcnRleDsKKyAgICAgICAgfQorICAg
ICk7CisKKyNpZiAhZGVmaW5lZChURVhNQVBfT1BFTkdMX0VTXzIpICYmICFQTEFURk9STShRVCkg
JiYgIVBMQVRGT1JNKEdUSykKK2V4dGVybiAiQyIgeworICAgIHZvaWQgZ2xTaGFkZXJTb3VyY2Uo
R0x1aW50LCBHTHNpemVpLCBjb25zdCBjaGFyKiosIGNvbnN0IEdMaW50Kik7CisgICAgdm9pZCBn
bENvbXBpbGVTaGFkZXIoR0x1aW50KTsKKyAgICB2b2lkIGdsRGVsZXRlU2hhZGVyKEdMdWludCk7
CisgICAgR0x1aW50IGdsQ3JlYXRlUHJvZ3JhbSgpOworICAgIHZvaWQgZ2xBdHRhY2hTaGFkZXIo
R0x1aW50LCBHTHVpbnQpOworICAgIHZvaWQgZ2xMaW5rUHJvZ3JhbShHTHVpbnQpOworICAgIEdM
aW50IGdsR2V0QXR0cmliTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFt
ZSk7CisjaWYgIU9TKE1BQ19PU19YKQorICAgIEdMaW50IGdsR2V0VW5pZm9ybUxvY2F0aW9uKEdM
dWludCwgY29uc3QgR0xjaGFyKik7CisjZW5kaWYKK30KKyNlbmRpZgorCit2b2lkIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtOjppbml0aWFsaXplUHJvZ3JhbSgpCit7CisgICAgY29uc3QgY2hh
ciogdmVydGV4U2hhZGVyU291cmNlUHJvZ3JhbSA9IHZlcnRleFNoYWRlclNvdXJjZSgpOworICAg
IGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSA9IGZyYWdtZW50U2hhZGVy
U291cmNlKCk7CisgICAgR0x1aW50IHZlcnRleFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZF
UlRFWF9TSEFERVIpOworICAgIEdMdWludCBmcmFnbWVudFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVy
KEdMX0ZSQUdNRU5UX1NIQURFUik7CisgICAgR0xfQ01EKGdsU2hhZGVyU291cmNlKHZlcnRleFNo
YWRlciwgMSwgJnZlcnRleFNoYWRlclNvdXJjZVByb2dyYW0sIDApKQorICAgIEdMX0NNRChnbFNo
YWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3Jh
bSwgMCkpCisgICAgR0x1aW50IHByb2dyYW1JRCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOworICAgIEdM
X0NNRChnbENvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKSkKKyAgICBHTF9DTUQoZ2xDb21waWxl
U2hhZGVyKGZyYWdtZW50U2hhZGVyKSkKKyAgICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3Jh
bUlELCB2ZXJ0ZXhTaGFkZXIpKQorICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQs
IGZyYWdtZW50U2hhZGVyKSkKKyAgICBHTF9DTUQoZ2xMaW5rUHJvZ3JhbShwcm9ncmFtSUQpKQor
CisgICAgbV92ZXJ0ZXhBdHRyaWIgPSBnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgIklu
VmVydGV4Iik7CisgICAgbV9pZCA9IHByb2dyYW1JRDsKKyAgICBtX3ZlcnRleFNoYWRlciA9IHZl
cnRleFNoYWRlcjsKKyAgICBtX2ZyYWdtZW50U2hhZGVyID0gZnJhZ21lbnRTaGFkZXI7Cit9CisK
K3ZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbihHTGlu
dCAmdmFyaWFibGUsIGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgdmFyaWFibGUgPSBnbEdldFVu
aWZvcm1Mb2NhdGlvbihtX2lkLCBuYW1lKTsKKyAgICBBU1NFUlQodmFyaWFibGUgPj0gMCk7Cit9
CisKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0oKQoreworICAgIEdMdWludCBwcm9ncmFtSUQgPSBtX2lkOworICAgIGlmICghcHJvZ3JhbUlE
KQorICAgICAgICByZXR1cm47CisKKyAgICBHTF9DTUQoZ2xEZXRhY2hTaGFkZXIocHJvZ3JhbUlE
LCBtX3ZlcnRleFNoYWRlcikpCisgICAgR0xfQ01EKGdsRGVsZXRlU2hhZGVyKG1fdmVydGV4U2hh
ZGVyKSkKKyAgICBHTF9DTUQoZ2xEZXRhY2hTaGFkZXIocHJvZ3JhbUlELCBtX2ZyYWdtZW50U2hh
ZGVyKSkKKyAgICBHTF9DTUQoZ2xEZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcikpCisgICAg
R0xfQ01EKGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpKQorfQorCitQYXNzUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNp
bXBsZTo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU2ltcGxlKCkpOworfQorCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNp
bXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKQoreworICAgIGluaXRpYWxp
emVQcm9ncmFtKCk7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlTWF0cml4VmFyaWFi
bGUsICJJblNvdXJjZU1hdHJpeCIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeFZh
cmlhYmxlLCAiSW5NYXRyaXgiKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VUZXh0
dXJlVmFyaWFibGUsICJTb3VyY2VUZXh0dXJlIik7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1f
b3BhY2l0eVZhcmlhYmxlLCAiT3BhY2l0eSIpOworfQorCitjb25zdCBjaGFyKiBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6dmVydGV4U2hhZGVyU291cmNlKCkKK3sKKyAgICByZXR1
cm4gdmVydGV4U2hhZGVyU291cmNlU2ltcGxlOworfQorCitjb25zdCBjaGFyKiBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6ZnJhZ21lbnRTaGFkZXJTb3VyY2UoKQoreworICAgIHJl
dHVybiBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZTsKK30KKworUGFzc1JlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpKTsKK30KKworVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWFzaygpCit7CisgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKKyAgICBn
ZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhWYXJpYWJsZSwgIkluTWF0cml4Iik7CisgICAgZ2V0
VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlTWF0cml4VmFyaWFibGUsICJJblNvdXJjZU1hdHJpeCIp
OworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hc2tNYXRyaXhWYXJpYWJsZSwgIkluTWFza01h
dHJpeCIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJjZVRleHR1cmVWYXJpYWJsZSwg
IlNvdXJjZVRleHR1cmUiKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXNrVGV4dHVyZVZh
cmlhYmxlLCAiTWFza1RleHR1cmUiKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5
VmFyaWFibGUsICJPcGFjaXR5Iik7Cit9CisKK2NvbnN0IGNoYXIqIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OnZlcnRleFNoYWRlclNvdXJjZSgpCit7CisgICAgcmV0
dXJuIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrOworfQorCitjb25zdCBjaGFyKiBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpmcmFnbWVudFNoYWRlclNv
dXJjZSgpCit7CisgICAgcmV0dXJuIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2s7
Cit9CisKK1Bhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1DbGlwPiBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXA6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXAoKSk7Cit9CisKK1RleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtQ2xpcDo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1DbGlwKCkKK3sK
KyAgICBpbml0aWFsaXplUHJvZ3JhbSgpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJp
eFZhcmlhYmxlLCAiSW5NYXRyaXgiKTsKK30KKworY29uc3QgY2hhciogVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1DbGlwOjp2ZXJ0ZXhTaGFkZXJTb3VyY2UoKQoreworICAgIHJldHVybiB2ZXJ0
ZXhTaGFkZXJTb3VyY2VDbGlwOworfQorCitjb25zdCBjaGFyKiBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbUNsaXA6OmZyYWdtZW50U2hhZGVyU291cmNlKCkKK3sKKyAgICByZXR1cm4gZnJhZ21l
bnRTaGFkZXJTb3VyY2VDbGlwOworfQorCitUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQoreworICAgIEFTU0VSVChpbml0aWFsaXplT3BlbkdM
U2hpbXMoKSk7Cit9CisKK1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIoKQoreworICAgIG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAu
Y2xlYXIoKTsKK30KKworfTsKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE3MSBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXJfaAorI2RlZmluZSBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcl9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIFBMQVRGT1JNKFFUKSB8fCBVU0UoQ0FJUk8pCisj
aW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNlbGlmIGRlZmluZWQoVEVYTUFQX09QRU5HTF9FU18y
KQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgorI2Vs
aWYgT1MoTUFDX09TX1gpCisjaW5jbHVkZSA8Z2wuaD4KKyNlbHNlCisjaW5jbHVkZSA8R0wvZ2wu
aD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2lubGluZSBzdGF0aWMgdm9pZCBk
ZWJ1Z0dMQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kLCBpbnQgbGluZSkKK3sKKyAgICBjb25z
dCBHTGVudW0gZXJyID0gZ2xHZXRFcnJvcigpOworICAgIGlmICghZXJyKQorICAgICAgICByZXR1
cm47CisgICAgV1RGUmVwb3J0RXJyb3IoX19GSUxFX18sIGxpbmUsIFdURl9QUkVUVFlfRlVOQ1RJ
T04sICJbVGV4dHVyZU1hcHBlciBHTF0gQ29tbWFuZCBmYWlsZWQ6ICVzICgleClcbiIsIGNvbW1h
bmQsIGVycik7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKKyNpZm5kZWYgTkRFQlVH
CisjZGVmaW5lIEdMX0NNRCh4KSB7eCwgZGVidWdHTENvbW1hbmQoI3gsIF9fTElORV9fKTsgfQor
I2Vsc2UKKyNkZWZpbmUgR0xfQ01EKHgpIHg7CisjZW5kaWYKKwordHlwZWRlZiB2b2lkKiBTaGFk
ZXJUeXBlOworCitjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjsKKworY2xhc3MgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbT4geworcHVibGljOgorICAgIEdMdWludCBpZCgpIHsgcmV0dXJuIG1faWQ7
IH0KKyAgICBHTHVpbnQgdmVydGV4QXR0cmliKCkgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7IH0K
KworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCk7CisKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBUPgorICAgIHN0YXRpYyBTaGFkZXJUeXBlIHNoYWRlclR5cGUoKQorICAgIHsK
KyAgICAgICAgc3RhdGljIGludCB0eXBlID0gMDsKKyAgICAgICAgcmV0dXJuICZ0eXBlOworICAg
IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZ2V0VW5pZm9ybUxvY2F0aW9uKEdMaW50JiB2YXIs
IGNvbnN0IGNoYXIgKm5hbWUpOworICAgIHZvaWQgaW5pdGlhbGl6ZVByb2dyYW0oKTsKKyAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSgpID0gMDsKKyAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCkgPSAwOworCisgICAgR0x1aW50IG1f
aWQ7CisgICAgR0x1aW50IG1fdmVydGV4QXR0cmliOworICAgIEdMdWludCBtX3ZlcnRleFNoYWRl
cjsKKyAgICBHTHVpbnQgbV9mcmFnbWVudFNoYWRlcjsKK307CisKK2NsYXNzIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU2ltcGxlIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVNpbXBsZT4gY3JlYXRlKCk7CisgICAgR0xpbnQgbWF0cml4VmFyaWFibGUoKSB7IHJldHVy
biBtX21hdHJpeFZhcmlhYmxlOyB9CisgICAgR0xpbnQgc291cmNlTWF0cml4VmFyaWFibGUoKSB7
IHJldHVybiBtX3NvdXJjZU1hdHJpeFZhcmlhYmxlOyB9CisgICAgR0xpbnQgc291cmNlVGV4dHVy
ZVZhcmlhYmxlKCkgeyByZXR1cm4gbV9zb3VyY2VUZXh0dXJlVmFyaWFibGU7IH0KKyAgICBHTGlu
dCBvcGFjaXR5VmFyaWFibGUoKSB7IHJldHVybiBtX29wYWNpdHlWYXJpYWJsZTsgfQorCitwcml2
YXRlOgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlKCk7CisgICAg
dmlydHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSgpOworICAgIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCk7CisgICAgR0xpbnQgbV9tYXRyaXhWYXJpYWJsZTsK
KyAgICBHTGludCBtX3NvdXJjZU1hdHJpeFZhcmlhYmxlOworICAgIEdMaW50IG1fc291cmNlVGV4
dHVyZVZhcmlhYmxlOworICAgIEdMaW50IG1fb3BhY2l0eVZhcmlhYmxlOworfTsKKworY2xhc3Mg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayA6IHB1YmxpYyBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRlKCk7CisgICAgR0xp
bnQgc291cmNlTWF0cml4VmFyaWFibGUoKSB7IHJldHVybiBtX3NvdXJjZU1hdHJpeFZhcmlhYmxl
OyB9CisgICAgR0xpbnQgbWF0cml4VmFyaWFibGUoKSB7IHJldHVybiBtX21hdHJpeFZhcmlhYmxl
OyB9CisgICAgR0xpbnQgbWFza01hdHJpeFZhcmlhYmxlKCkgeyByZXR1cm4gbV9tYXNrTWF0cml4
VmFyaWFibGU7IH0KKyAgICBHTGludCBzb3VyY2VUZXh0dXJlVmFyaWFibGUoKSB7IHJldHVybiBt
X3NvdXJjZVRleHR1cmVWYXJpYWJsZTsgfQorICAgIEdMaW50IG1hc2tUZXh0dXJlVmFyaWFibGUo
KSB7IHJldHVybiBtX21hc2tUZXh0dXJlVmFyaWFibGU7IH0KKyAgICBHTGludCBvcGFjaXR5VmFy
aWFibGUoKSB7IHJldHVybiBtX29wYWNpdHlWYXJpYWJsZTsgfQorCitwcml2YXRlOgorICAgIHN0
YXRpYyBpbnQgbV9jbGFzc0lEOworICAgIHZpcnR1YWwgY29uc3QgY2hhciogdmVydGV4U2hhZGVy
U291cmNlKCk7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSgp
OworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKTsKKyAgICBH
TGludCBtX3NvdXJjZU1hdHJpeFZhcmlhYmxlOworICAgIEdMaW50IG1fbWF0cml4VmFyaWFibGU7
CisgICAgR0xpbnQgbV9tYXNrTWF0cml4VmFyaWFibGU7CisgICAgR0xpbnQgbV9zb3VyY2VUZXh0
dXJlVmFyaWFibGU7CisgICAgR0xpbnQgbV9tYXNrVGV4dHVyZVZhcmlhYmxlOworICAgIEdMaW50
IG1fb3BhY2l0eVZhcmlhYmxlOworfTsKKworY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1DbGlwIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXA+IGNyZWF0
ZSgpOworICAgIEdMaW50IG1hdHJpeFZhcmlhYmxlKCkgeyByZXR1cm4gbV9tYXRyaXhWYXJpYWJs
ZTsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291
cmNlKCk7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSgpOwor
ICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQ2xpcCgpOworICAgIEdMaW50IG1fbWF0cml4
VmFyaWFibGU7Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlciB7CitwdWJs
aWM6CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsKKyAgICB2aXJ0dWFsIH5UZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpOworCisgICAgdGVtcGxhdGU8Y2xhc3MgVD4KKyAgICBQ
YXNzUmVmUHRyPFQ+IGdldFNoYWRlclByb2dyYW0oKQorICAgIHsKKyAgICAgICAgU2hhZGVyVHlw
ZSBzaGFkZXJUeXBlID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OnNoYWRlclR5cGU8VD4o
KTsKKyAgICAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA6Oml0ZXJhdG9yIGl0ID0g
bV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcC5maW5kKHNoYWRlclR5cGUpOworICAgICAg
ICBpZiAoaXQgIT0gbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcC5lbmQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4oaXQtPnNlY29uZC5nZXQoKSk7CisKKyAgICAg
ICAgUmVmUHRyPFQ+IHQgPSBUOjpjcmVhdGUoKTsKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU1hcC5hZGQoc2hhZGVyVHlwZSwgdCk7CisgICAgICAgIHJldHVybiB0OworICAg
IH0KKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8U2hhZGVyVHlwZSwgUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFw
OworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwIG1fdGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1NYXA7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8gVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAJKHJldmlzaW9uIDEw
ODE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dDNEUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50VG9UZQogCiAgICAgaWYgKHRleHR1cmVNYXBwZXIt
PmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKSB7CiAgICAg
ICAgIFRleHR1cmVNYXBwZXJHTCogdGV4bWFwR0wgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVy
R0wqPih0ZXh0dXJlTWFwcGVyKTsKLSAgICAgICAgdGV4bWFwR0wtPmRyYXdUZXh0dXJlKG1fY29u
dGV4dC0+bV90ZXh0dXJlLCAhbV9jb250ZXh0LT5tX2F0dHJzLmFscGhhLCBGbG9hdFNpemUoMSwg
MSksIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwgbWFzaywgdHJ1ZSAvKiBmbGlwICovKTsK
KyAgICAgICAgdGV4bWFwR0wtPmRyYXdUZXh0dXJlKG1fY29udGV4dC0+bV90ZXh0dXJlLCBtX2Nv
bnRleHQtPm1fYXR0cnMuYWxwaGEgPyBUZXh0dXJlTWFwcGVyR0w6OlRyYW5zcGFyZW50IDogVGV4
dHVyZU1hcHBlckdMOjpPcGFxdWUsIEZsb2F0U2l6ZSgxLCAxKSwgdGFyZ2V0UmVjdCwgbWF0cml4
LCBvcGFjaXR5LCBtYXNrLCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEZsaXApOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgJKHJldmlzaW9uIDEwODE4OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBp
bnQgYnBwKCkgY29uc3QgeyByZXR1cm4gMzI7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVzZXQo
KSB7IH0KLSAgICB2b2lkIHJlc2V0KGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzID0g
MCkKKyAgICB2b2lkIHJlc2V0KGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzKQogICAg
IHsKICAgICAgICAgbV9mbGFncyA9IGZsYWdzOwogICAgICAgICBtX2NvbnRlbnRTaXplID0gc2l6
ZTsKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogCiAgICAgaW5saW5lIEludFNpemUgY29udGVu
dFNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRTaXplOyB9CiAgICAgaW5saW5lIGludCBu
dW1iZXJPZkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpLndpZHRoKCkgKiBzaXplKCkuaGVp
Z2h0KCkgKiBicHAoKSA+PiAzOyB9Ci0gICAgaW5saW5lIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7
IHJldHVybiBtX2lzT3BhcXVlOyB9CisgICAgaW5saW5lIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7
IHJldHVybiBtX2ZsYWdzIF4gU3VwcG9ydHNBbHBoYTsgfQogCiAjaWYgRU5BQkxFKENTU19GSUxU
RVJTKQogICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbHRlcnMoY29uc3QgQml0bWFwVGV4dHVyZSYg
Y29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSB7IH0KQEAgLTg3LDcgKzg3
LDYgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgSW50U2l6ZSBtX2NvbnRlbnRTaXplOwot
ICAgIGJvb2wgbV9pc09wYXF1ZTsKIAogcHJpdmF0ZToKICAgICBGbGFncyBtX2ZsYWdzOwo=
</data>
<flag name="review"
          id="130086"
          type_id="1"
          status="-"
          setter="noam"
    />
    <flag name="commit-queue"
          id="130087"
          type_id="3"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127991</attachid>
            <date>2012-02-21 10:01:14 -0800</date>
            <delta_ts>2012-02-21 14:44:44 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>78674.patch</filename>
            <type>text/plain</type>
            <size>45256</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODM1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDEyLTAyLTIxICBZYWVsIEFo
YXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBbVGV4bWFwXSBCZXR0ZXIg
bWFuYWdlbWVudCBvZiBzaGFkZXJzIGluIFRleHR1cmVNYXBwZXJHTAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2NzQKKyAKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgCisgICAgICAgIFNwbGl0IFRleHR1cmVNYXBwZXJHTC5j
cHAgaW50byB0d28gZmlsZXMuCisgICAgICAgIEdldCByaWQgb2YgdGhlIGVudW1zIHRoYXQgd2Ug
d2VyZSB1c2luZyB0byBpZGVudGlmeSBzaGFkZXJzIGFuZCB0byBpZGVudGlmeSB2YXJpYWJsZXMu
CisgICAgICAgIFN3aXRjaCBmbGlwIGFuZCBvcGFxdWUgZnJvbSB1c2luZyBib29sIHRvIHVzaW5n
IGVudW1zLgorIAorICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgaXMgcmVmYWN0b3Jpbmcgb25s
eS4KKyAKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5w
cmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L09wZW5HTFNoaW1zLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1
cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNoYXJlZEdMRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6
OlNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpT
aGFyZWRHTERhdGE6On5TaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMRGF0YTo6VGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVy
R0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhNYXNr
QW5kT3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0
dXJlU2ltcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlw
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZSQUdNRU5UX1NIQURFUik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbTo6aW5pdGlhbGl6ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1w
bGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjp2ZXJ0ZXhTaGFkZXJTb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmZyYWdt
ZW50U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtT3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbU9wYWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OnZlcnRleFNoYWRlclNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpmcmFnbWVu
dFNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbUNsaXA6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbUNsaXA6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQ2xpcCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXA6OnZlcnRleFNoYWRlclNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXA6OmZy
YWdtZW50U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6flRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OmRlYnVnR0xDb21tYW5kKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppZCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6dmVydGV4QXR0cmliKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzaGFkZXJUeXBl
KToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjptYXRyaXhWYXJpYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6
c291cmNlTWF0cml4VmFyaWFibGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1TaW1wbGU6OnNvdXJjZVRleHR1cmVWYXJpYWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6b3BhY2l0eVZhcmlhYmxlKToK
KyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6
c291cmNlTWF0cml4VmFyaWFibGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6bWF0cml4VmFyaWFibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6bWFza01hdHJp
eFZhcmlhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hc2s6OnNvdXJjZVRleHR1cmVWYXJpYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjptYXNrVGV4dHVyZVZh
cmlhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3Bh
Y2l0eUFuZE1hc2s6Om9wYWNpdHlWYXJpYWJsZSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbUNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1DbGlwOjptYXRyaXhWYXJpYWJsZSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVy
ZTo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6aXNPcGFxdWUpOgor
ICAgICAgICAoQml0bWFwVGV4dHVyZSk6CisKIDIwMTItMDItMjEgIFBhdmVsIEZlbGRtYW4gIDxw
ZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtjcmFzaF0gdXBv
biBzdHlsZSBtb2RpZmljYXRpb24gYWZ0ZXIgbmF2aWdhdGlvbgpJbmRleDogU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMDgzNTQpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC01NzgwLDYgKzU3ODAsOCBAQCBpZiBV
U0VfVEVYVFVSRV9NQVBQRVJfR0wKIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBcCisJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJU
cmFuc2Zvcm0uY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTA4MzU0KQorKysgU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMzk3Miw4ICszOTcyLDE0
IEBAIGNvbnRhaW5zKENPTkZJRywgdGV4bWFwKSB7CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKIAogICAgICF3aW4zMi0qOmNv
bnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsKSB7Ci0gICAgICAgIEhFQURFUlMgKz0gcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCi0gICAgICAgIFNPVVJDRVMgKz0gcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKKyAgICAgICAgSEVBREVS
UyArPSBcCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBl
ckdMLmggXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmgKKworICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwIFwKKyAgICAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAK
KwogICAgICAgICBDT05GSUcgKz0gb3BlbmdsLXNoaW1zCiAgICAgICAgIERFRklORVMgKz0gV1RG
X1VTRV9URVhUVVJFX01BUFBFUl9HTAogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlz
aW9uIDEwODM1NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5
KQpAQCAtMzQ5MCw2ICszNDkwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5
cGUvT3BlblR5cGVTYW5pdGl6ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVudHlwZS9PcGVuVHlwZVNhbml0aXplci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAnLApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5oCShyZXZpc2lvbiAxMDgz
NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNyw2ICsxNyw5IEBACiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CiAgKi8KIAorI2lmbmRlZiBPcGVuR0xTaGltc19oCisjZGVmaW5lIE9wZW5HTFNoaW1zX2gKKwog
I2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPHFnbG9iYWwuaD4KICNpZiBRVF9WRVJTSU9OID49
IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMCwgMCkKQEAgLTM0NSwzICszNDgsNSBAQCB0eXBlZGVmIHN0
cnVjdCBfT3BlbkdMRnVuY3Rpb25UYWJsZSB7CiAjZGVmaW5lIGdsVmVydGV4QXR0cmliNGZ2ICAg
ICAgICAgICAgICAgICAgICAgIExPT0tVUF9HTF9GVU5DVElPTihnbFZlcnRleEF0dHJpYjRmdikK
ICNkZWZpbmUgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyICAgICAgICAgICAgICAgICAgTE9PS1VQX0dM
X0ZVTkNUSU9OKGdsVmVydGV4QXR0cmliUG9pbnRlcikKICNlbmRpZgorCisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9UZXh0dXJlTWFwcGVyR0wuY3BwCShyZXZpc2lvbiAxMDgzNTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5o
IgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvT3duQXJyYXlQdHIuaD4KQEAgLTM1LDE3ICszNiw2IEBACiAjZW5kaWYKICNlbmRpZgog
Ci0jaWYgUExBVEZPUk0oUVQpIHx8IFVTRShDQUlSTykKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5o
IgotI2VsaWYgZGVmaW5lZChURVhNQVBfT1BFTkdMX0VTXzIpCi0jaW5jbHVkZSA8R0xFUzIvZ2wy
Lmg+Ci0jaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+Ci0jZWxpZiBPUyhNQUNfT1NfWCkKLSNpbmNs
dWRlIDxnbC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxHTC9nbC5oPgotI2VuZGlmCi0KICNpZiBkZWZp
bmVkKFRFWE1BUF9PUEVOR0xfRVNfMikKICNpbmNsdWRlIDxFR0wvZWdsLmg+CiAjZWxpZiBPUyhX
SU5ET1dTKQpAQCAtNjMsNTAgKzUzLDYgQEAKICNpbmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAj
ZW5kaWYKIAotI2lmICFkZWZpbmVkKFRFWE1BUF9PUEVOR0xfRVNfMikgJiYgIVBMQVRGT1JNKFFU
KSAmJiAhUExBVEZPUk0oR1RLKQotZXh0ZXJuICJDIiB7Ci0gICAgdm9pZCBnbFVuaWZvcm0xZihH
TGludCwgR0xmbG9hdCk7Ci0gICAgdm9pZCBnbFVuaWZvcm0xaShHTGludCwgR0xpbnQpOwotICAg
IHZvaWQgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWludCwgR0xpbnQsIEdMZW51bSwgR0xib29s
ZWFuLCBHTHNpemVpLCBjb25zdCBHTHZvaWQqKTsKLSAgICB2b2lkIGdsVW5pZm9ybTRmKEdMaW50
LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0KTsKLSAgICB2b2lkIGdsU2hhZGVy
U291cmNlKEdMdWludCwgR0xzaXplaSwgY29uc3QgY2hhcioqLCBjb25zdCBHTGludCopOwotICAg
IEdMdWludCBnbENyZWF0ZVNoYWRlcihHTGVudW0pOwotICAgIHZvaWQgZ2xTaGFkZXJTb3VyY2Uo
R0x1aW50LCBHTHNpemVpLCBjb25zdCBjaGFyKiosIGNvbnN0IEdMaW50Kik7Ci0gICAgdm9pZCBn
bENvbXBpbGVTaGFkZXIoR0x1aW50KTsKLSAgICB2b2lkIGdsRGVsZXRlU2hhZGVyKEdMdWludCk7
Ci0gICAgdm9pZCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQsIEdMc2l6ZWksIEdMYm9vbGVhbiwg
Y29uc3QgR0xmbG9hdCopOwotICAgIEdMdWludCBnbENyZWF0ZVByb2dyYW0oKTsKLSAgICB2b2lk
IGdsQXR0YWNoU2hhZGVyKEdMdWludCwgR0x1aW50KTsKLSAgICB2b2lkIGdsTGlua1Byb2dyYW0o
R0x1aW50KTsKLSAgICB2b2lkIGdsVXNlUHJvZ3JhbShHTHVpbnQpOwotICAgIHZvaWQgZ2xEaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50KTsKLSAgICB2b2lkIGdsRW5hYmxlVmVydGV4QXR0
cmliQXJyYXkoR0x1aW50KTsKLSAgICB2b2lkIGdsQmluZEZyYW1lYnVmZmVyKEdMZW51bSB0YXJn
ZXQsIEdMdWludCBmcmFtZWJ1ZmZlcik7Ci0gICAgdm9pZCBnbERlbGV0ZUZyYW1lYnVmZmVycyhH
THNpemVpIG4sIGNvbnN0IEdMdWludCogZnJhbWVidWZmZXJzKTsKLSAgICB2b2lkIGdsR2VuRnJh
bWVidWZmZXJzKEdMc2l6ZWkgbiwgR0x1aW50KiBmcmFtZWJ1ZmZlcnMpOwotICAgIHZvaWQgZ2xG
cmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xl
bnVtIHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVsKTsKLSAgICB2b2lkIGds
R2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdldCwgR0xlbnVt
IGF0dGFjaG1lbnQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7Ci0gICAgdm9pZCBnbEJp
bmRCdWZmZXIoR0xlbnVtLCBHTHVpbnQpOwotICAgIHZvaWQgZ2xEZWxldGVCdWZmZXJzKEdMc2l6
ZWksIGNvbnN0IEdMdWludCopOwotICAgIHZvaWQgZ2xHZW5CdWZmZXJzKEdMc2l6ZWksIEdMdWlu
dCopOwotICAgIHZvaWQgZ2xCdWZmZXJEYXRhKEdMZW51bSwgR0xzaXplaXB0ciwgY29uc3QgR0x2
b2lkKiwgR0xlbnVtKTsKLSAgICB2b2lkIGdsQnVmZmVyU3ViRGF0YShHTGVudW0sIEdMc2l6ZWlw
dHIsIEdMc2l6ZWlwdHIsIGNvbnN0IEdMdm9pZCopOwotICAgIHZvaWQgZ2xHZXRQcm9ncmFtSW5m
b0xvZyhHTHVpbnQsIEdMc2l6ZWksIEdMc2l6ZWkqLCBHTGNoYXIqKTsKLSAgICB2b2lkIGdsR2V0
U2hhZGVySW5mb0xvZyhHTHVpbnQsIEdMc2l6ZWksIEdMc2l6ZWkqLCBHTGNoYXIqKTsKLSAgICB2
b2lkIGdsR2VuUmVuZGVyYnVmZmVycyhHTHNpemVpIG4sIEdMdWludCogaWRzKTsKLSAgICB2b2lk
IGdsRGVsZXRlUmVuZGVyYnVmZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogaWRzKTsKLSAg
ICB2b2lkIGdsQmluZFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaWQpOwotICAg
IHZvaWQgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIHZvaWQgZ2xGcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudFBvaW50
LCBHTGVudW0gcmVuZGVyYnVmZmVyVGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVySWQpOwotICAg
IEdMZW51bSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xlbnVtIHRhcmdldCk7Ci0gICAgR0xp
bnQgZ2xHZXRBdHRyaWJMb2NhdGlvbihHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1l
KTsKLSNpZiAhT1MoTUFDX09TX1gpCi0gICAgR0xpbnQgZ2xHZXRVbmlmb3JtTG9jYXRpb24oR0x1
aW50LCBjb25zdCBHTGNoYXIqKTsKLSAgICBHTGludCBnbEJpbmRBdHRyaWJMb2NhdGlvbihHTHVp
bnQsIEdMdWludCwgY29uc3QgR0xjaGFyKik7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGlubGluZSBzdGF0aWMgdm9pZCBkZWJ1Z0dMQ29tbWFuZChjb25zdCBj
aGFyKiBjb21tYW5kLCBpbnQgbGluZSkKQEAgLTE3OSw5MSArMTI1LDE4IEBAIHN0cnVjdCBUZXh0
dXJlTWFwcGVyR0xEYXRhIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVk
R0xEYXRhKGdldEN1cnJlbnRHTENvbnRleHQoKSkpOwogICAgICAgICB9CiAKLSAgICAgICAgZW51
bSBTaGFkZXJQcm9ncmFtSW5kZXggewotICAgICAgICAgICAgTm9Qcm9ncmFtID0gLTEsCi0gICAg
ICAgICAgICBTaW1wbGVQcm9ncmFtLAotICAgICAgICAgICAgT3BhY2l0eUFuZE1hc2tQcm9ncmFt
LAotICAgICAgICAgICAgQ2xpcFByb2dyYW0sCi0KLSAgICAgICAgICAgIFByb2dyYW1Db3VudAot
ICAgICAgICB9OwotCi0gICAgICAgIGVudW0gU2hhZGVyVmFyaWFibGVJbmRleCB7Ci0gICAgICAg
ICAgICBJbk1hdHJpeFZhcmlhYmxlLAotICAgICAgICAgICAgSW5Tb3VyY2VNYXRyaXhWYXJpYWJs
ZSwKLSAgICAgICAgICAgIEluTWFza01hdHJpeFZhcmlhYmxlLAotICAgICAgICAgICAgT3BhY2l0
eVZhcmlhYmxlLAotICAgICAgICAgICAgU291cmNlVGV4dHVyZVZhcmlhYmxlLAotICAgICAgICAg
ICAgTWFza1RleHR1cmVWYXJpYWJsZSwKLQotICAgICAgICAgICAgVmFyaWFibGVDb3VudAotICAg
ICAgICB9OwotCi0gICAgICAgIHN0cnVjdCBQcm9ncmFtSW5mbyB7Ci0gICAgICAgICAgICBHTHVp
bnQgaWQ7Ci0gICAgICAgICAgICBHTHVpbnQgdmVydGV4QXR0cmliOwotICAgICAgICAgICAgR0xp
bnQgdmFyc1tWYXJpYWJsZUNvdW50XTsKLSAgICAgICAgICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXI7
Ci0gICAgICAgICAgICBHTHVpbnQgZnJhZ21lbnRTaGFkZXI7Ci0gICAgICAgICAgICBQcm9ncmFt
SW5mbygpIDogaWQoMCkgeyB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgR0xpbnQgZ2V0VW5pZm9y
bUxvY2F0aW9uKFNoYWRlclByb2dyYW1JbmRleCBwcm9nLCBTaGFkZXJWYXJpYWJsZUluZGV4IHZh
ciwgY29uc3QgY2hhciogbmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHByb2dy
YW1zW3Byb2ddLnZhcnNbdmFyXSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1zW3Byb2dd
LmlkLCBuYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY3JlYXRlU2hhZGVyUHJvZ3Jh
bShjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hh
ZGVyU291cmNlLCBTaGFkZXJQcm9ncmFtSW5kZXggaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVS
KTsKLSAgICAgICAgICAgIEdMdWludCBmcmFnbWVudFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdM
X0ZSQUdNRU5UX1NIQURFUik7Ci0gICAgICAgICAgICBHTF9DTUQoZ2xTaGFkZXJTb3VyY2UodmVy
dGV4U2hhZGVyLCAxLCAmdmVydGV4U2hhZGVyU291cmNlLCAwKSkKLSAgICAgICAgICAgIEdMX0NN
RChnbFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVyU291cmNl
LCAwKSkKLSAgICAgICAgICAgIEdMdWludCBwcm9ncmFtSUQgPSBnbENyZWF0ZVByb2dyYW0oKTsK
LSAgICAgICAgICAgIEdMX0NNRChnbENvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKSkKLSAgICAg
ICAgICAgIEdMX0NNRChnbENvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpKQotICAgICAgICAg
ICAgR0xfQ01EKGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKSkKLSAgICAg
ICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKSkK
LSAgICAgICAgICAgIEdMX0NNRChnbExpbmtQcm9ncmFtKHByb2dyYW1JRCkpCi0gICAgICAgICAg
ICBwcm9ncmFtc1tpbmRleF0udmVydGV4QXR0cmliID0gZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9n
cmFtSUQsICJJblZlcnRleCIpOwotICAgICAgICAgICAgcHJvZ3JhbXNbaW5kZXhdLmlkID0gcHJv
Z3JhbUlEOwotICAgICAgICAgICAgcHJvZ3JhbXNbaW5kZXhdLnZlcnRleFNoYWRlciA9IHZlcnRl
eFNoYWRlcjsKLSAgICAgICAgICAgIHByb2dyYW1zW2luZGV4XS5mcmFnbWVudFNoYWRlciA9IGZy
YWdtZW50U2hhZGVyOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkZWxldGVTaGFkZXJQcm9n
cmFtKFNoYWRlclByb2dyYW1JbmRleCBpbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAgUHJv
Z3JhbUluZm8mIHByb2dyYW1JbmZvID0gcHJvZ3JhbXNbaW5kZXhdOwotICAgICAgICAgICAgR0x1
aW50IHByb2dyYW1JRCA9IHByb2dyYW1JbmZvLmlkOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFt
SUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBHTF9DTUQoZ2xEZXRh
Y2hTaGFkZXIocHJvZ3JhbUlELCBwcm9ncmFtSW5mby52ZXJ0ZXhTaGFkZXIpKQotICAgICAgICAg
ICAgR0xfQ01EKGdsRGVsZXRlU2hhZGVyKHByb2dyYW1JbmZvLnZlcnRleFNoYWRlcikpCi0gICAg
ICAgICAgICBHTF9DTUQoZ2xEZXRhY2hTaGFkZXIocHJvZ3JhbUlELCBwcm9ncmFtSW5mby5mcmFn
bWVudFNoYWRlcikpCi0gICAgICAgICAgICBHTF9DTUQoZ2xEZWxldGVTaGFkZXIocHJvZ3JhbUlu
Zm8uZnJhZ21lbnRTaGFkZXIpKQotICAgICAgICAgICAgR0xfQ01EKGdsRGVsZXRlUHJvZ3JhbShw
cm9ncmFtSUQpKQotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBpbml0aWFsaXplU2hhZGVycygp
OwotCi0gICAgICAgIFByb2dyYW1JbmZvIHByb2dyYW1zW1Byb2dyYW1Db3VudF07Ci0KICAgICAg
ICAgaW50IHN0ZW5jaWxJbmRleDsKICAgICAgICAgVmVjdG9yPEludFJlY3Q+IGNsaXBTdGFjazsK
KyAgICAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgdGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI7CiAKICAgICAgICAgU2hhcmVkR0xEYXRhKEdMQ29udGV4dCBnbENvbnRleHQpCiAgICAg
ICAgICAgICA6IHN0ZW5jaWxJbmRleCgxKQogICAgICAgICB7CiAgICAgICAgICAgICBnbENvbnRl
eHREYXRhTWFwKCkuYWRkKGdsQ29udGV4dCwgdGhpcyk7Ci0gICAgICAgICAgICBpbml0aWFsaXpl
U2hhZGVycygpOwogICAgICAgICB9CiAKICAgICAgICAgflNoYXJlZEdMRGF0YSgpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSBTaW1wbGVQcm9ncmFtOyBpIDwgUHJvZ3JhbUNv
dW50OyArK2kpCi0gICAgICAgICAgICAgICAgZGVsZXRlU2hhZGVyUHJvZ3JhbShTaGFkZXJQcm9n
cmFtSW5kZXgoaSkpOwotCiAgICAgICAgICAgICBHTENvbnRleHREYXRhTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBnbENvbnRleHREYXRhTWFwKCkuZW5kKCk7CiAgICAgICAgICAgICBHTENvbnRl
eHREYXRhTWFwOjppdGVyYXRvciBpdDsKICAgICAgICAgICAgIGZvciAoaXQgPSBnbENvbnRleHRE
YXRhTWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC0yOTIsOCArMTY1LDcgQEAg
c3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgewogICAgIH0KIAogICAgIFRleHR1cmVNYXBwZXJH
TERhdGEoKQotICAgICAgICA6IGN1cnJlbnRQcm9ncmFtKFNoYXJlZEdMRGF0YTo6Tm9Qcm9ncmFt
KQotICAgICAgICAsIHByZXZpb3VzUHJvZ3JhbSgwKQorICAgICAgICA6IHByZXZpb3VzUHJvZ3Jh
bSgwKQogICAgICAgICAsIGRpZE1vZGlmeVN0ZW5jaWwoZmFsc2UpCiAgICAgICAgICwgcHJldmlv
dXNTY2lzc29yU3RhdGUoMCkKICAgICAgICAgLCBwcmV2aW91c0RlcHRoU3RhdGUoMCkKQEAgLTMw
MSw3ICsxNzMsNiBAQCBzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAgICAgeyB9CiAKICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4OwotICAgIGludCBjdXJyZW50
UHJvZ3JhbTsKICAgICBHTGludCBwcmV2aW91c1Byb2dyYW07CiAgICAgYm9vbCBkaWRNb2RpZnlT
dGVuY2lsOwogICAgIEdMaW50IHByZXZpb3VzU2Npc3NvclN0YXRlOwpAQCAtMzQ1LDEyNyArMjE2
LDEyIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJHTDsKIH07CiAK
LSNkZWZpbmUgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKHByb2csIHZhcikgXAotICAg
IGlmIChnZXRVbmlmb3JtTG9jYXRpb24ocHJvZyMjUHJvZ3JhbSwgdmFyIyNWYXJpYWJsZSwgI3Zh
cikgPCAwKSBcCi0gICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGZpbmQgdmFyaWFibGUg
IiN2YXIiIGluIHByb2dyYW0gIiNwcm9nIlxuIik7Ci0KLSNkZWZpbmUgVEVYTUFQX0JVSUxEX1NI
QURFUihwcm9ncmFtKSBcCi0gICAgY3JlYXRlU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UjI3Byb2dyYW0sIGZyYWdtZW50U2hhZGVyU291cmNlIyNwcm9ncmFtLCBwcm9ncmFtIyNQcm9n
cmFtKTsKLQogVGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0woKQogICAgIDogbV9kYXRh
KG5ldyBUZXh0dXJlTWFwcGVyR0xEYXRhKQogICAgICwgbV9jb250ZXh0KDApCiB7CiB9CiAKLXZv
aWQgVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjppbml0aWFsaXplU2hhZGVycygp
Ci17Ci0jaWZuZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotI2RlZmluZSBPRVMyX1BSRUNJU0lPTl9E
RUZJTklUSU9OUyBcCi0gICAgIiNkZWZpbmUgbG93cFxuI2RlZmluZSBoaWdocFxuIgotI2RlZmlu
ZSBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTgotI2Vsc2UKLSNkZWZpbmUg
T0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMKLSNkZWZpbmUgT0VTMl9GUkFHTUVOVF9TSEFERVJf
REVGQVVMVF9QUkVDSVNJT04gXAotICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgXG4iCi0j
ZW5kaWYKLQotI2RlZmluZSBWRVJURVhfU0hBREVSKHNyYy4uLikgT0VTMl9QUkVDSVNJT05fREVG
SU5JVElPTlMjc3JjCi0jZGVmaW5lIEZSQUdNRU5UX1NIQURFUihzcmMuLi4pIE9FUzJfUFJFQ0lT
SU9OX0RFRklOSVRJT05TXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPRVMyX0ZS
QUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTlwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgI3NyYwotCi0gICAgaWYgKCFpbml0aWFsaXplT3BlbkdMU2hpbXMoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5
QW5kTWFzayA9Ci0gICAgICAgIEZSQUdNRU5UX1NIQURFUigKLSAgICAgICAgICAgIHVuaWZvcm0g
c2FtcGxlcjJEIFNvdXJjZVRleHR1cmUsIE1hc2tUZXh0dXJlOwotICAgICAgICAgICAgdW5pZm9y
bSBsb3dwIGZsb2F0IE9wYWNpdHk7Ci0gICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0
VGV4Q29vcmRTb3VyY2UsIE91dFRleENvb3JkTWFzazsKLSAgICAgICAgICAgIHZvaWQgbWFpbih2
b2lkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRl
eHR1cmUyRChTb3VyY2VUZXh0dXJlLCBPdXRUZXhDb29yZFNvdXJjZSk7Ci0gICAgICAgICAgICAg
ICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRChNYXNrVGV4dHVyZSwgT3V0VGV4Q29v
cmRNYXNrKTsKLSAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IGZyYWdtZW50QWxwaGEgPSBPcGFj
aXR5ICogbWFza0NvbG9yLmE7Ci0gICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChj
b2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5hICogZnJhZ21lbnRBbHBoYSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2VPcGFjaXR5QW5kTWFzayA9Ci0gICAgICAgIFZFUlRFWF9TSEFERVIoCi0gICAgICAgICAgICB1
bmlmb3JtIG1hdDQgSW5NYXRyaXgsIEluU291cmNlTWF0cml4LCBJbk1hc2tNYXRyaXg7Ci0gICAg
ICAgICAgICBhdHRyaWJ1dGUgdmVjNCBJblZlcnRleDsKLSAgICAgICAgICAgIHZhcnlpbmcgaGln
aHAgdmVjMiBPdXRUZXhDb29yZFNvdXJjZSwgT3V0VGV4Q29vcmRNYXNrOwotICAgICAgICAgICAg
dm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgT3V0VGV4Q29v
cmRTb3VyY2UgPSB2ZWMyKEluU291cmNlTWF0cml4ICogSW5WZXJ0ZXgpOwotICAgICAgICAgICAg
ICAgIE91dFRleENvb3JkTWFzayA9IHZlYzIoSW5NYXNrTWF0cml4ICogSW5WZXJ0ZXgpOwotICAg
ICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gSW5NYXRyaXggKiBJblZlcnRleDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgKTsKLQotICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNl
U2ltcGxlID0KLSAgICAgICAgRlJBR01FTlRfU0hBREVSKAotICAgICAgICAgICAgdW5pZm9ybSBz
YW1wbGVyMkQgU291cmNlVGV4dHVyZTsKLSAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCBP
cGFjaXR5OwotICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRleENvb3JkU291cmNl
OwotICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKFNvdXJjZVRleHR1cmUsIE91dFRleENv
b3JkU291cmNlKTsKLSAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJn
YiAqIE9wYWNpdHksIGNvbG9yLmEgKiBPcGFjaXR5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
KTsKLQotICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSA9Ci0gICAgICAg
IFZFUlRFWF9TSEFERVIoCi0gICAgICAgICAgICB1bmlmb3JtIG1hdDQgSW5NYXRyaXgsIEluU291
cmNlTWF0cml4OwotICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5WZXJ0ZXg7Ci0gICAgICAg
ICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4Q29vcmRTb3VyY2U7Ci0gICAgICAgICAgICB2
b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBPdXRUZXhDb29y
ZFNvdXJjZSA9IHZlYzIoSW5Tb3VyY2VNYXRyaXggKiBJblZlcnRleCk7Ci0gICAgICAgICAgICAg
ICAgZ2xfUG9zaXRpb24gPSBJbk1hdHJpeCAqIEluVmVydGV4OwotICAgICAgICAgICAgfQotICAg
ICAgICApOwotICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlQ2xpcCA9Ci0gICAg
ICAgIEZSQUdNRU5UX1NIQURFUigKLSAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAu
MCwgMC4wKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIGNvbnN0IGNoYXIqIHZl
cnRleFNoYWRlclNvdXJjZUNsaXAgPQotICAgICAgICBWRVJURVhfU0hBREVSKAotICAgICAgICAg
ICAgdW5pZm9ybSBtYXQ0IEluTWF0cml4OwotICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5W
ZXJ0ZXg7Ci0gICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IEluTWF0cml4ICogSW5WZXJ0ZXg7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICk7Ci0KLQotICAgIFRFWE1BUF9CVUlMRF9TSEFERVIoU2ltcGxlKQotICAg
IFRFWE1BUF9CVUlMRF9TSEFERVIoT3BhY2l0eUFuZE1hc2spCi0gICAgVEVYTUFQX0JVSUxEX1NI
QURFUihDbGlwKQotCi0gICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKE9wYWNpdHlB
bmRNYXNrLCBJbk1hdHJpeCkKLSAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oT3Bh
Y2l0eUFuZE1hc2ssIEluU291cmNlTWF0cml4KQotICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9M
T0NBVElPTihPcGFjaXR5QW5kTWFzaywgSW5NYXNrTWF0cml4KQotICAgIFRFWE1BUF9HRVRfU0hB
REVSX1ZBUl9MT0NBVElPTihPcGFjaXR5QW5kTWFzaywgU291cmNlVGV4dHVyZSkKLSAgICBURVhN
QVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oT3BhY2l0eUFuZE1hc2ssIE1hc2tUZXh0dXJlKQot
ICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihPcGFjaXR5QW5kTWFzaywgT3BhY2l0
eSkKLQotICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihTaW1wbGUsIEluU291cmNl
TWF0cml4KQotICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihTaW1wbGUsIEluTWF0
cml4KQotICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihTaW1wbGUsIFNvdXJjZVRl
eHR1cmUpCi0gICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFNpbXBsZSwgT3BhY2l0
eSkKLQotICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihDbGlwLCBJbk1hdHJpeCkK
LX0KLQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcoKQogewogICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IG5vIEdMIGVycm9yIGNvZGUgc3RheXMgZnJvbSBwcmV2aW91cyBvcGVyYXRp
b25zLgpAQCAtNTI1LDI2ICsyODEsMjggQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0
dXJlKGNvbnN0CiAgICAgaWYgKCF0ZXh0dXJlLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCYgdGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
Qml0bWFwVGV4dHVyZUdMJj4odGV4dHVyZSk7Ci0gICAgZHJhd1RleHR1cmUodGV4dHVyZUdMLmlk
KCksIHRleHR1cmVHTC5pc09wYXF1ZSgpLCB0ZXh0dXJlR0wucmVsYXRpdmVTaXplKCksIHRhcmdl
dFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwgbWFzaywgZmFsc2UpOworICAgIGRyYXdUZXh0dXJlKHRl
eHR1cmVHTC5pZCgpLCB0ZXh0dXJlR0wuaXNPcGFxdWUoKSA/IDAgOiBTdXBwb3J0c0JsZW5kaW5n
LCB0ZXh0dXJlR0wucmVsYXRpdmVTaXplKCksIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwg
bWFzayk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0
ZXh0dXJlLCBib29sIG9wYXF1ZSwgY29uc3QgRmxvYXRTaXplJiByZWxhdGl2ZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVs
Vmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1
cmUsIGJvb2wgZmxpcCkKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJf
dCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgRmxvYXRTaXplJiByZWxhdGl2ZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1v
ZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1Rl
eHR1cmUpCiB7Ci0gICAgVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpTaGFkZXJQ
cm9ncmFtSW5kZXggcHJvZ3JhbTsKICAgICBpZiAobWFza1RleHR1cmUpCi0gICAgICAgIHByb2dy
YW0gPSBUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6Ok9wYWNpdHlBbmRNYXNrUHJv
Z3JhbTsKKyAgICAgICAgZHJhd1RleHR1cmVXaXRoTWFza0FuZE9wYWNpdHkodGV4dHVyZSwgZmxh
Z3MsIHJlbGF0aXZlU2l6ZSwgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCBt
YXNrVGV4dHVyZSk7CiAgICAgZWxzZQotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlckdM
RGF0YTo6U2hhcmVkR0xEYXRhOjpTaW1wbGVQcm9ncmFtOworICAgICAgICBkcmF3VGV4dHVyZVNp
bXBsZSh0ZXh0dXJlLCBmbGFncywgcmVsYXRpdmVTaXplLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdN
YXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlKTsKK30KIAotICAgIGNvbnN0IFRleHR1cmVNYXBw
ZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6UHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvID0gZGF0YSgp
LnNoYXJlZEdMRGF0YSgpLnByb2dyYW1zW3Byb2dyYW1dOwotICAgIEdMX0NNRChnbFVzZVByb2dy
YW0ocHJvZ3JhbUluZm8uaWQpKQotICAgIGRhdGEoKS5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07
Ci0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbUluZm8udmVydGV4
QXR0cmliKSkKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhNYXNrQW5kT3Bh
Y2l0eSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgRmxvYXRTaXplJiByZWxh
dGl2ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4
dHVyZSogbWFza1RleHR1cmUpCit7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtT3BhY2l0eUFuZE1hc2s+IHNoYWRlckluZm8gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbTxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrPigpOworCisgICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShz
aGFkZXJJbmZvLT5pZCgpKSkKKyAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShz
aGFkZXJJbmZvLT52ZXJ0ZXhBdHRyaWIoKSkpCiAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShH
TF9URVhUVVJFMCkpCiAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4
dHVyZSkpCiAgICAgR0xfQ01EKGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQogICAg
IGNvbnN0IEdMZmxvYXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKLSAg
ICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW1JbmZvLnZlcnRleEF0dHJpYiwg
MiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB1bml0UmVjdCkpCisgICAgR0xfQ01EKGdsVmVydGV4
QXR0cmliUG9pbnRlcihzaGFkZXJJbmZvLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdM
X0ZBTFNFLCAwLCB1bml0UmVjdCkpCiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgg
PSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCkubXVsdGlwbHko
bW9kZWxWaWV3TWF0cml4KS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgKICAgICAgICAg
ICAgIHRhcmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKQEAgLTU1OSwxNiArMzE3LDE2IEBAIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzIKICAgICAgICAgbWF0cml4Lm00
MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgpCiAgICAgfTsKICAg
ICBjb25zdCBHTGZsb2F0IG00c3JjW10gPSB7cmVsYXRpdmVTaXplLndpZHRoKCksIDAsIDAsIDAs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcmVsYXRpdmVTaXplLmhl
aWdodCgpICogKGZsaXAgPyAtMSA6IDEpLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIHJlbGF0aXZlU2l6ZS5oZWlnaHQoKSAqICgoZmxhZ3MgJiBTaG91bGRG
bGlwVGV4dHVyZSkgPyAtMSA6IDEpLCAwLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsIDAsIDEsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCwgZmxpcCA/IHJlbGF0aXZlU2l6ZS5oZWlnaHQoKSA6IDAsIDAsIDF9OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIChmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJl
KSA/IHJlbGF0aXZlU2l6ZS5oZWlnaHQoKSA6IDAsIDAsIDF9OwogCi0gICAgR0xfQ01EKGdsVW5p
Zm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJl
ZEdMRGF0YTo6SW5NYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNCkpCi0gICAgR0xfQ01E
KGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTERhdGE6
OlNoYXJlZEdMRGF0YTo6SW5Tb3VyY2VNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNHNy
YykpCi0gICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBl
ckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpTb3VyY2VUZXh0dXJlVmFyaWFibGVdLCAwKSkKLSAgICBH
TF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpT
aGFyZWRHTERhdGE6Ok9wYWNpdHlWYXJpYWJsZV0sIG9wYWNpdHkpKQorICAgIEdMX0NNRChnbFVu
aWZvcm1NYXRyaXg0ZnYoc2hhZGVySW5mby0+bWF0cml4VmFyaWFibGUoKSwgMSwgR0xfRkFMU0Us
IG00KSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlckluZm8tPnNvdXJjZU1h
dHJpeFZhcmlhYmxlKCksIDEsIEdMX0ZBTFNFLCBtNHNyYykpCisgICAgR0xfQ01EKGdsVW5pZm9y
bTFpKHNoYWRlckluZm8tPnNvdXJjZVRleHR1cmVWYXJpYWJsZSgpLCAwKSkKKyAgICBHTF9DTUQo
Z2xVbmlmb3JtMWYoc2hhZGVySW5mby0+b3BhY2l0eVZhcmlhYmxlKCksIG9wYWNpdHkpKQogCi0g
ICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkpIHsKKyAgICBpZiAo
bWFza1RleHR1cmUtPmlzVmFsaWQoKSkgewogICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wq
IG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNr
VGV4dHVyZSk7CiAgICAgICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpKQog
ICAgICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtYXNrVGV4dHVyZUdM
LT5pZCgpKSkKQEAgLTU3NiwxMiArMzM0LDUzIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3
VGV4dHVyZSh1aW50MzIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgbWFza1RleHR1cmVHTC0+cmVsYXRpdmVTaXplKCkuaGVpZ2h0KCksIDAsIDAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OwotICAgICAgICBHTF9D
TUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0
YTo6U2hhcmVkR0xEYXRhOjpJbk1hc2tNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNG1h
c2spKTsKLSAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVy
ZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpNYXNrVGV4dHVyZVZhcmlhYmxlXSwgMSkpCisg
ICAgICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVySW5mby0+bWFza01hdHJpeFZh
cmlhYmxlKCksIDEsIEdMX0ZBTFNFLCBtNG1hc2spKTsKKyAgICAgICAgR0xfQ01EKGdsVW5pZm9y
bTFpKHNoYWRlckluZm8tPm1hc2tUZXh0dXJlVmFyaWFibGUoKSwgMSkpCiAgICAgICAgIEdMX0NN
RChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKQogICAgIH0KIAotICAgIGJvb2wgbmVlZHNC
bGVuZGluZyA9ICFvcGFxdWUgfHwgb3BhY2l0eSA8IDAuOTkgfHwgbWFza1RleHR1cmU7CisgICAg
R0xfQ01EKGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSkpCisgICAg
R0xfQ01EKGdsRW5hYmxlKEdMX0JMRU5EKSkKKworICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xf
VFJJQU5HTEVfRkFOLCAwLCA0KSkKKyAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkoc2hhZGVySW5mby0+dmVydGV4QXR0cmliKCkpKQorfQorCit2b2lkIFRleHR1cmVNYXBwZXJH
TDo6ZHJhd1RleHR1cmVTaW1wbGUodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0
IEZsb2F0U2l6ZSYgcmVsYXRpdmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHks
IGNvbnN0IEJpdG1hcFRleHR1cmUqKQoreworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNpbXBsZT4gc2hhZGVySW5mbyA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlPigpOworCisgICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShzaGFkZXJJbmZvLT5p
ZCgpKSkKKyAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJJbmZvLT52
ZXJ0ZXhBdHRyaWIoKSkpCisgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkp
CisgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSkpCisgICAg
R0xfQ01EKGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQorICAgIGNvbnN0IEdMZmxv
YXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKKyAgICBHTF9DTUQoZ2xW
ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlckluZm8tPnZlcnRleEF0dHJpYigpLCAyLCBHTF9GTE9B
VCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSkKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1h
dHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KS5tdWx0
aXBseShtb2RlbFZpZXdNYXRyaXgpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KAorICAg
ICAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLAorICAgICAgICAgICAgMCwgdGFy
Z2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKKyAgICAgICAgICAgIDAsIDAsIDEsIDAsCisgICAgICAg
ICAgICB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIDAsIDEpKTsKKworICAgIGNvbnN0
IEdMZmxvYXQgbTRbXSA9IHsKKyAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1h
dHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAorICAgICAgICBtYXRyaXgubTIxKCksIG1hdHJpeC5t
MjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCisgICAgICAgIG1hdHJpeC5tMzEoKSwg
bWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKKyAgICAgICAgbWF0cml4
Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgpCisgICAgfTsK
KyAgICBjb25zdCBHTGZsb2F0IG00c3JjW10gPSB7cmVsYXRpdmVTaXplLndpZHRoKCksIDAsIDAs
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcmVsYXRpdmVTaXpl
LmhlaWdodCgpICogKChmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSA/IC0xIDogMSksIDAsIDAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAoZmxhZ3MgJiBTaG91bGRGbGlwVGV4
dHVyZSkgPyByZWxhdGl2ZVNpemUuaGVpZ2h0KCkgOiAwLCAwLCAxfTsKKworICAgIEdMX0NNRChn
bFVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVySW5mby0+bWF0cml4VmFyaWFibGUoKSwgMSwgR0xfRkFM
U0UsIG00KSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlckluZm8tPnNvdXJj
ZU1hdHJpeFZhcmlhYmxlKCksIDEsIEdMX0ZBTFNFLCBtNHNyYykpCisgICAgR0xfQ01EKGdsVW5p
Zm9ybTFpKHNoYWRlckluZm8tPnNvdXJjZVRleHR1cmVWYXJpYWJsZSgpLCAwKSkKKyAgICBHTF9D
TUQoZ2xVbmlmb3JtMWYoc2hhZGVySW5mby0+b3BhY2l0eVZhcmlhYmxlKCksIG9wYWNpdHkpKQor
CisgICAgYm9vbCBuZWVkc0JsZW5kaW5nID0gKGZsYWdzICYgU3VwcG9ydHNCbGVuZGluZykgfHwg
b3BhY2l0eSA8IDAuOTk7CiAKICAgICBpZiAobmVlZHNCbGVuZGluZykgewogICAgICAgICBHTF9D
TUQoZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKSkKQEAgLTU4OSw5
ICszODgsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUodWludDMyCiAgICAg
fSBlbHNlCiAgICAgICAgIEdMX0NNRChnbERpc2FibGUoR0xfQkxFTkQpKQogCi0KICAgICBHTF9D
TUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpCi0gICAgR0xfQ01EKGdsRGlz
YWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZlcnRleEF0dHJpYikpCisgICAgR0xf
Q01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlckluZm8tPnZlcnRleEF0dHJpYigp
KSkKIH0KIAogY29uc3QgY2hhciogVGV4dHVyZU1hcHBlckdMOjp0eXBlKCkgY29uc3QKQEAgLTg2
OSwxMiArNjY3LDEzIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHIK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgZGF0YSgpLmluaXRTdGVuY2lsKCk7Ci0gICAgVGV4dHVy
ZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpTaGFkZXJQcm9ncmFtSW5kZXggcHJvZ3JhbSA9
IFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Q2xpcFByb2dyYW07Ci0gICAgY29u
c3QgVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpQcm9ncmFtSW5mbyYgcHJvZ3Jh
bUluZm8gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkucHJvZ3JhbXNbcHJvZ3JhbV07Ci0gICAgR0xf
Q01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtSW5mby5pZCkpCi0gICAgR0xfQ01EKGdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkocHJvZ3JhbUluZm8udmVydGV4QXR0cmliKSkKKworICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXA+IHNoYWRlckluZm8gPSBkYXRhKCkuc2hhcmVk
R0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbTxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXA+KCk7CisKKyAgICBHTF9DTUQoZ2xVc2VQcm9ncmFt
KHNoYWRlckluZm8tPmlkKCkpKQorICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHNoYWRlckluZm8tPnZlcnRleEF0dHJpYigpKSkKICAgICBjb25zdCBHTGZsb2F0IHVuaXRSZWN0
W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0cmli
UG9pbnRlcihwcm9ncmFtSW5mby52ZXJ0ZXhBdHRyaWIsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwg
MCwgdW5pdFJlY3QpKQorICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVySW5m
by0+dmVydGV4QXR0cmliKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKQog
CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgo
ZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpCiAgICAgICAgICAgICAubXVsdGlwbHkobW9kZWxWaWV3
TWF0cml4KQpAQCAtODkyLDcgKzY5MSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNs
aXAoY29uc3QgVHIKIAogICAgIGludCYgc3RlbmNpbEluZGV4ID0gZGF0YSgpLnNoYXJlZEdMRGF0
YSgpLnN0ZW5jaWxJbmRleDsKIAotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3Jh
bUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OkluTWF0cml4VmFy
aWFibGVdLCAxLCBHTF9GQUxTRSwgbTQpKQorICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYo
c2hhZGVySW5mby0+bWF0cml4VmFyaWFibGUoKSwgMSwgR0xfRkFMU0UsIG00KSkKICAgICBHTF9D
TUQoZ2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKSkKICAgICBHTF9DTUQoZ2xTdGVuY2lsRnVuYyhH
TF9ORVZFUiwgc3RlbmNpbEluZGV4LCBzdGVuY2lsSW5kZXgpKQogICAgIEdMX0NNRChnbFN0ZW5j
aWxPcChHTF9SRVBMQUNFLCBHTF9SRVBMQUNFLCBHTF9SRVBMQUNFKSkKQEAgLTkwMSw3ICs3MDAs
NyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyCiAgICAgR0xfQ01E
KGdsU3RlbmNpbE9wKEdMX0tFRVAsIEdMX0tFRVAsIEdMX0tFRVApKQogICAgIHN0ZW5jaWxJbmRl
eCA8PD0gMTsKICAgICBnbFN0ZW5jaWxGdW5jKHN0ZW5jaWxJbmRleCA+IDEgPyBHTF9FUVVBTCA6
IEdMX0FMV0FZUywgc3RlbmNpbEluZGV4IC0gMSwgc3RlbmNpbEluZGV4IC0gMSk7Ci0gICAgR0xf
Q01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZlcnRleEF0dHJpYikp
CisgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlckluZm8tPnZlcnRl
eEF0dHJpYigpKSkKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZENsaXAoKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9U
ZXh0dXJlTWFwcGVyR0wuaAkocmV2aXNpb24gMTA4MzU0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw5ICszOCwxOCBAQCBwdWJsaWM6CiAgICAgVGV4dHVyZU1hcHBlckdMKCk7CiAgICAgdmly
dHVhbCB+VGV4dHVyZU1hcHBlckdMKCk7CiAKKyAgICBlbnVtIEZsYWcgeworICAgICAgICBTdXBw
b3J0c0JsZW5kaW5nID0gMHgwMSwKKyAgICAgICAgU2hvdWxkRmxpcFRleHR1cmUgPSAweDAyCisg
ICAgfTsKKworICAgIHR5cGVkZWYgaW50IEZsYWdzOworCiAgICAgLy8gcmVpbXBzIGZyb20gVGV4
dHVyZU1hcHBlcgogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0
dXJlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9h
dCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7Ci0gICAgdmlydHVh
bCB2b2lkIGRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIGJvb2wgb3BhcXVlLCBjb25zdCBG
bG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYs
IGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCBib29sIGZs
aXApOworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFn
cywgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVy
ZSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlV2l0aE1hc2tBbmRPcGFjaXR5KHVpbnQz
Ml90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRl
eHR1cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmVTaW1wbGUo
dWludDMyX3QgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0
bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOwogICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShC
aXRtYXBUZXh0dXJlKiBzdXJmYWNlKTsKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdmlydHVhbCB2
b2lkIGJlZ2luUGFpbnRpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjMzIEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJF
X01BUFBFUikKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWZuZGVmIFRFWE1BUF9PUEVOR0xf
RVNfMgorI2RlZmluZSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9OUyBcCisgICAgIiNkZWZpbmUg
bG93cFxuI2RlZmluZSBoaWdocFxuIgorI2RlZmluZSBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZB
VUxUX1BSRUNJU0lPTgorI2Vsc2UKKyNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMK
KyNkZWZpbmUgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT04gXAorICAgICJw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgXG4iCisjZW5kaWYKKworI2RlZmluZSBWRVJURVhfU0hB
REVSKHNyYy4uLikgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMjc3JjCisjZGVmaW5lIEZSQUdN
RU5UX1NIQURFUihzcmMuLi4pIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TXAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJ
U0lPTlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3NyYworCitzdGF0aWMgY29u
c3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CisgICAgRlJBR01F
TlRfU0hBREVSKAorICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBTb3VyY2VUZXh0dXJlLCBNYXNr
VGV4dHVyZTsKKyAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7CisgICAgICAgIHZh
cnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhDb29yZFNvdXJjZSwgT3V0VGV4Q29vcmRNYXNrOworICAg
ICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgeworICAgICAgICAgICAgbG93cCB2ZWM0IGNv
bG9yID0gdGV4dHVyZTJEKFNvdXJjZVRleHR1cmUsIE91dFRleENvb3JkU291cmNlKTsKKyAgICAg
ICAgICAgIGxvd3AgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkQoTWFza1RleHR1cmUsIE91dFRl
eENvb3JkTWFzayk7CisgICAgICAgICAgICBsb3dwIGZsb2F0IGZyYWdtZW50QWxwaGEgPSBPcGFj
aXR5ICogbWFza0NvbG9yLmE7CisgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9y
LnJnYiAqIGZyYWdtZW50QWxwaGEsIGNvbG9yLmEgKiBmcmFnbWVudEFscGhhKTsKKyAgICAgICAg
fQorICAgICk7CisKK3N0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5
QW5kTWFzayA9CisgICAgVkVSVEVYX1NIQURFUigKKyAgICAgICAgdW5pZm9ybSBtYXQ0IEluTWF0
cml4LCBJblNvdXJjZU1hdHJpeCwgSW5NYXNrTWF0cml4OworICAgICAgICBhdHRyaWJ1dGUgdmVj
NCBJblZlcnRleDsKKyAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRleENvb3JkU291cmNl
LCBPdXRUZXhDb29yZE1hc2s7CisgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICB7Cisg
ICAgICAgICAgICBPdXRUZXhDb29yZFNvdXJjZSA9IHZlYzIoSW5Tb3VyY2VNYXRyaXggKiBJblZl
cnRleCk7CisgICAgICAgICAgICBPdXRUZXhDb29yZE1hc2sgPSB2ZWMyKEluTWFza01hdHJpeCAq
IEluVmVydGV4KTsKKyAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gSW5NYXRyaXggKiBJblZlcnRl
eDsKKyAgICAgICAgfQorICAgICk7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRl
clNvdXJjZVNpbXBsZSA9CisgICAgRlJBR01FTlRfU0hBREVSKAorICAgICAgICB1bmlmb3JtIHNh
bXBsZXIyRCBTb3VyY2VUZXh0dXJlOworICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgT3BhY2l0
eTsKKyAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRleENvb3JkU291cmNlOworICAgICAg
ICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgeworICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9y
ID0gdGV4dHVyZTJEKFNvdXJjZVRleHR1cmUsIE91dFRleENvb3JkU291cmNlKTsKKyAgICAgICAg
ICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogT3BhY2l0eSwgY29sb3IuYSAqIE9w
YWNpdHkpOworICAgICAgICB9CisgICAgKTsKKworc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNo
YWRlclNvdXJjZVNpbXBsZSA9CisgICAgVkVSVEVYX1NIQURFUigKKyAgICAgICAgdW5pZm9ybSBt
YXQ0IEluTWF0cml4LCBJblNvdXJjZU1hdHJpeDsKKyAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5W
ZXJ0ZXg7CisgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhDb29yZFNvdXJjZTsKKyAg
ICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIE91dFRleENvb3Jk
U291cmNlID0gdmVjMihJblNvdXJjZU1hdHJpeCAqIEluVmVydGV4KTsKKyAgICAgICAgICAgIGds
X1Bvc2l0aW9uID0gSW5NYXRyaXggKiBJblZlcnRleDsKKyAgICAgICAgfQorICAgICk7CitzdGF0
aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VDbGlwID0KKyAgICBGUkFHTUVOVF9T
SEFERVIoCisgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICB7CisgICAgICAgICAgICBn
bF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCk7CisgICAgICAgIH0KKyAgICAp
OworCitzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlQ2xpcCA9CisgICAgVkVS
VEVYX1NIQURFUigKKyAgICAgICAgdW5pZm9ybSBtYXQ0IEluTWF0cml4OworICAgICAgICBhdHRy
aWJ1dGUgdmVjNCBJblZlcnRleDsKKyAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gSW5NYXRyaXggKiBJblZlcnRleDsKKyAgICAgICAg
fQorICAgICk7CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmluaXRpYWxpemVQ
cm9ncmFtKCkKK3sKKyAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VQcm9ncmFtID0g
dmVydGV4U2hhZGVyU291cmNlKCk7CisgICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2VQcm9ncmFtID0gZnJhZ21lbnRTaGFkZXJTb3VyY2UoKTsKKyAgICBHTHVpbnQgdmVydGV4U2hh
ZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7CisgICAgR0x1aW50IGZyYWdt
ZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICBnbFNo
YWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2VQcm9ncmFtLCAw
KTsKKyAgICBnbFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVy
U291cmNlUHJvZ3JhbSwgMCk7CisgICAgR0x1aW50IHByb2dyYW1JRCA9IGdsQ3JlYXRlUHJvZ3Jh
bSgpOworICAgIGdsQ29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgIGdsQ29tcGlsZVNo
YWRlcihmcmFnbWVudFNoYWRlcik7CisgICAgZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0
ZXhTaGFkZXIpOworICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIp
OworICAgIGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKKworICAgIG1fdmVydGV4QXR0cmliID0g
Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJJblZlcnRleCIpOworICAgIG1faWQgPSBw
cm9ncmFtSUQ7CisgICAgbV92ZXJ0ZXhTaGFkZXIgPSB2ZXJ0ZXhTaGFkZXI7CisgICAgbV9mcmFn
bWVudFNoYWRlciA9IGZyYWdtZW50U2hhZGVyOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpnZXRVbmlmb3JtTG9jYXRpb24oR0xpbnQgJnZhcmlhYmxlLCBjb25zdCBjaGFy
KiBuYW1lKQoreworICAgIHZhcmlhYmxlID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9pZCwgbmFt
ZSk7CisgICAgQVNTRVJUKHZhcmlhYmxlID49IDApOworfQorCitUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCkKK3sKKyAgICBHTHVpbnQgcHJv
Z3JhbUlEID0gbV9pZDsKKyAgICBpZiAoIXByb2dyYW1JRCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZ2xEZXRhY2hTaGFkZXIocHJvZ3JhbUlELCBtX3ZlcnRleFNoYWRlcik7CisgICAgZ2xEZWxl
dGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOworICAgIGdsRGV0YWNoU2hhZGVyKHByb2dyYW1JRCwg
bV9mcmFnbWVudFNoYWRlcik7CisgICAgZ2xEZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7
CisgICAgZ2xEZWxldGVQcm9ncmFtKHByb2dyYW1JRCk7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1TaW1wbGUoKSk7Cit9CisKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpCit7CisgICAgaW5pdGlhbGl6
ZVByb2dyYW0oKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VNYXRyaXhWYXJpYWJs
ZSwgIkluU291cmNlTWF0cml4Iik7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4VmFy
aWFibGUsICJJbk1hdHJpeCIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJjZVRleHR1
cmVWYXJpYWJsZSwgIlNvdXJjZVRleHR1cmUiKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9v
cGFjaXR5VmFyaWFibGUsICJPcGFjaXR5Iik7Cit9CisKK2NvbnN0IGNoYXIqIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjp2ZXJ0ZXhTaGFkZXJTb3VyY2UoKQoreworICAgIHJldHVy
biB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGU7Cit9CisKK2NvbnN0IGNoYXIqIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpmcmFnbWVudFNoYWRlclNvdXJjZSgpCit7CisgICAgcmV0
dXJuIGZyYWdtZW50U2hhZGVyU291cmNlU2ltcGxlOworfQorCitQYXNzUmVmUHRyPFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtT3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCkpOworfQorCitUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbU9wYWNpdHlBbmRNYXNrKCkKK3sKKyAgICBpbml0aWFsaXplUHJvZ3JhbSgpOworICAgIGdl
dFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeFZhcmlhYmxlLCAiSW5NYXRyaXgiKTsKKyAgICBnZXRV
bmlmb3JtTG9jYXRpb24obV9zb3VyY2VNYXRyaXhWYXJpYWJsZSwgIkluU291cmNlTWF0cml4Iik7
CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWFza01hdHJpeFZhcmlhYmxlLCAiSW5NYXNrTWF0
cml4Iik7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlVGV4dHVyZVZhcmlhYmxlLCAi
U291cmNlVGV4dHVyZSIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hc2tUZXh0dXJlVmFy
aWFibGUsICJNYXNrVGV4dHVyZSIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlW
YXJpYWJsZSwgIk9wYWNpdHkiKTsKK30KKworY29uc3QgY2hhciogVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1PcGFjaXR5QW5kTWFzazo6dmVydGV4U2hhZGVyU291cmNlKCkKK3sKKyAgICByZXR1
cm4gdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2s7Cit9CisKK2NvbnN0IGNoYXIqIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OmZyYWdtZW50U2hhZGVyU291
cmNlKCkKK3sKKyAgICByZXR1cm4gZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzazsK
K30KKworUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXA+IFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtQ2xpcDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQ2xpcCgpKTsKK30KKworVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1DbGlwOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXAoKQorewor
ICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4
VmFyaWFibGUsICJJbk1hdHJpeCIpOworfQorCitjb25zdCBjaGFyKiBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbUNsaXA6OnZlcnRleFNoYWRlclNvdXJjZSgpCit7CisgICAgcmV0dXJuIHZlcnRl
eFNoYWRlclNvdXJjZUNsaXA7Cit9CisKK2NvbnN0IGNoYXIqIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtQ2xpcDo6ZnJhZ21lbnRTaGFkZXJTb3VyY2UoKQoreworICAgIHJldHVybiBmcmFnbWVu
dFNoYWRlclNvdXJjZUNsaXA7Cit9CisKK1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCit7CisgICAgQVNTRVJUKGluaXRpYWxpemVPcGVuR0xT
aGltcygpKTsKK30KKworVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6On5UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcigpCit7CisgICAgbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcC5j
bGVhcigpOworfQorCit9OworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTQ2IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcl9oCisjZGVmaW5lIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVk
ZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlci5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIHZvaWQqIFNoYWRl
clR5cGU7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOworCitjbGFzcyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtPiB7CitwdWJsaWM6CisgICAgR0x1aW50IGlkKCkgeyByZXR1cm4gbV9pZDsg
fQorICAgIEdMdWludCB2ZXJ0ZXhBdHRyaWIoKSB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQor
CisgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKTsKKworICAgIHRlbXBs
YXRlPGNsYXNzIFQ+CisgICAgc3RhdGljIFNoYWRlclR5cGUgc2hhZGVyVHlwZSgpCisgICAgewor
ICAgICAgICBzdGF0aWMgaW50IHR5cGUgPSAwOworICAgICAgICByZXR1cm4gJnR5cGU7CisgICAg
fQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBnZXRVbmlmb3JtTG9jYXRpb24oR0xpbnQmIHZhciwg
Y29uc3QgY2hhciogbmFtZSk7CisgICAgdm9pZCBpbml0aWFsaXplUHJvZ3JhbSgpOworICAgIHZp
cnR1YWwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlKCkgPSAwOworICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSA9IDA7CisKKyAgICBHTHVpbnQgbV9p
ZDsKKyAgICBHTHVpbnQgbV92ZXJ0ZXhBdHRyaWI7CisgICAgR0x1aW50IG1fdmVydGV4U2hhZGVy
OworICAgIEdMdWludCBtX2ZyYWdtZW50U2hhZGVyOworfTsKKworY2xhc3MgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1TaW1wbGUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU2ltcGxlPiBjcmVhdGUoKTsKKyAgICBHTGludCBtYXRyaXhWYXJpYWJsZSgpIHsgcmV0dXJu
IG1fbWF0cml4VmFyaWFibGU7IH0KKyAgICBHTGludCBzb3VyY2VNYXRyaXhWYXJpYWJsZSgpIHsg
cmV0dXJuIG1fc291cmNlTWF0cml4VmFyaWFibGU7IH0KKyAgICBHTGludCBzb3VyY2VUZXh0dXJl
VmFyaWFibGUoKSB7IHJldHVybiBtX3NvdXJjZVRleHR1cmVWYXJpYWJsZTsgfQorICAgIEdMaW50
IG9wYWNpdHlWYXJpYWJsZSgpIHsgcmV0dXJuIG1fb3BhY2l0eVZhcmlhYmxlOyB9CisKK3ByaXZh
dGU6CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKTsKKyAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCk7CisgICAgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1TaW1wbGUoKTsKKyAgICBHTGludCBtX21hdHJpeFZhcmlhYmxlOwor
ICAgIEdMaW50IG1fc291cmNlTWF0cml4VmFyaWFibGU7CisgICAgR0xpbnQgbV9zb3VyY2VUZXh0
dXJlVmFyaWFibGU7CisgICAgR0xpbnQgbV9vcGFjaXR5VmFyaWFibGU7Cit9OworCitjbGFzcyBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrIDogcHVibGljIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrPiBjcmVhdGUoKTsKKyAgICBHTGlu
dCBzb3VyY2VNYXRyaXhWYXJpYWJsZSgpIHsgcmV0dXJuIG1fc291cmNlTWF0cml4VmFyaWFibGU7
IH0KKyAgICBHTGludCBtYXRyaXhWYXJpYWJsZSgpIHsgcmV0dXJuIG1fbWF0cml4VmFyaWFibGU7
IH0KKyAgICBHTGludCBtYXNrTWF0cml4VmFyaWFibGUoKSB7IHJldHVybiBtX21hc2tNYXRyaXhW
YXJpYWJsZTsgfQorICAgIEdMaW50IHNvdXJjZVRleHR1cmVWYXJpYWJsZSgpIHsgcmV0dXJuIG1f
c291cmNlVGV4dHVyZVZhcmlhYmxlOyB9CisgICAgR0xpbnQgbWFza1RleHR1cmVWYXJpYWJsZSgp
IHsgcmV0dXJuIG1fbWFza1RleHR1cmVWYXJpYWJsZTsgfQorICAgIEdMaW50IG9wYWNpdHlWYXJp
YWJsZSgpIHsgcmV0dXJuIG1fb3BhY2l0eVZhcmlhYmxlOyB9CisKK3ByaXZhdGU6CisgICAgc3Rh
dGljIGludCBtX2NsYXNzSUQ7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJT
b3VyY2UoKTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCk7
CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpOworICAgIEdM
aW50IG1fc291cmNlTWF0cml4VmFyaWFibGU7CisgICAgR0xpbnQgbV9tYXRyaXhWYXJpYWJsZTsK
KyAgICBHTGludCBtX21hc2tNYXRyaXhWYXJpYWJsZTsKKyAgICBHTGludCBtX3NvdXJjZVRleHR1
cmVWYXJpYWJsZTsKKyAgICBHTGludCBtX21hc2tUZXh0dXJlVmFyaWFibGU7CisgICAgR0xpbnQg
bV9vcGFjaXR5VmFyaWFibGU7Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bUNsaXAgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0geworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQ2xpcD4gY3JlYXRl
KCk7CisgICAgR0xpbnQgbWF0cml4VmFyaWFibGUoKSB7IHJldHVybiBtX21hdHJpeFZhcmlhYmxl
OyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UoKTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCk7Cisg
ICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1DbGlwKCk7CisgICAgR0xpbnQgbV9tYXRyaXhW
YXJpYWJsZTsKK307CisKK2NsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHsKK3B1Ymxp
YzoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpOworICAgIHZpcnR1YWwgflRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCk7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBUPgorICAgIFBh
c3NSZWZQdHI8VD4gZ2V0U2hhZGVyUHJvZ3JhbSgpCisgICAgeworICAgICAgICBTaGFkZXJUeXBl
IHNoYWRlclR5cGUgPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6c2hhZGVyVHlwZTxUPigp
OworICAgICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmZpbmQoc2hhZGVyVHlwZSk7CisgICAgICAg
IGlmIChpdCAhPSBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmVuZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihpdC0+c2Vjb25kLmdldCgpKTsKKworICAgICAg
ICBSZWZQdHI8VD4gdCA9IFQ6OmNyZWF0ZSgpOworICAgICAgICBtX3RleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtTWFwLmFkZChzaGFkZXJUeXBlLCB0KTsKKyAgICAgICAgcmV0dXJuIHQ7CisgICAg
fQorCitwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxTaGFkZXJUeXBlLCBSZWZQdHI8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0+ID4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7
CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAgbV90ZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbU1hcDsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkocmV2aXNpb24gMTA4
MzU0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0M0RRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsOCBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRUb1RlCiAKICAgICBpZiAodGV4dHVyZU1hcHBlci0+
YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpIHsKICAgICAg
ICAgVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXBHTCA9IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJH
TCo+KHRleHR1cmVNYXBwZXIpOwotICAgICAgICB0ZXhtYXBHTC0+ZHJhd1RleHR1cmUobV9jb250
ZXh0LT5tX3RleHR1cmUsICFtX2NvbnRleHQtPm1fYXR0cnMuYWxwaGEsIEZsb2F0U2l6ZSgxLCAx
KSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5LCBtYXNrLCB0cnVlIC8qIGZsaXAgKi8pOwor
ICAgICAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWdzID0gVGV4dHVyZU1hcHBlckdMOjpT
aG91bGRGbGlwVGV4dHVyZSB8IChtX2NvbnRleHQtPm1fYXR0cnMuYWxwaGEgPyBUZXh0dXJlTWFw
cGVyR0w6OlN1cHBvcnRzQmxlbmRpbmcgOiAwKTsKKyAgICAgICAgdGV4bWFwR0wtPmRyYXdUZXh0
dXJlKG1fY29udGV4dC0+bV90ZXh0dXJlLCBmbGFncywgRmxvYXRTaXplKDEsIDEpLCB0YXJnZXRS
ZWN0LCBtYXRyaXgsIG9wYWNpdHksIG1hc2spOwogICAgICAgICByZXR1cm47CiAgICAgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>